ETH Price: $3,316.44 (-0.55%)

Token

Giant Wiener NFT (WEENIES)
 

Overview

Max Total Supply

0 WEENIES

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 WEENIES
0x15008a722270900f04dbddaf809ae9cd0af8386c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GiantWienersNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: None

pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

contract GiantWienersNFT is ERC721, Ownable {

    using SafeMath for uint256;
    using Address for uint256;
    using Counters for Counters.Counter;
        Counters.Counter private _tokenSupply;

    string private baseURI;
    string public baseExtension = ".json";

    uint256 public constant supplyLimit = 4444;
    uint256 public constant mintPrice = 0.0125 ether;

    bool public mintOpen = false;

    constructor(string memory name, string memory symbol) ERC721(name, symbol) {
    }


    function mint(uint numberOfMints) public payable {
        uint256 supply = _tokenSupply.current() + 1;
        require(mintOpen, "Sale needs to be active");
        require(numberOfMints > 0 && numberOfMints < 11,     "Invalid purchase amount");
        require(supply.add(numberOfMints) <= supplyLimit, "Payment exceeds total supply");
        require(msg.value >= mintPrice.mul(numberOfMints), "Incorrect Eth amount");

       for(uint256 i = 0; i <= numberOfMints - 1; i++){
            _safeMint(msg.sender, supply + i);
            _tokenSupply.increment();
        }

    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0
            ? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension))
            : "";
    }

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

    function setBaseURI(string calldata newBaseUri) external onlyOwner {
        baseURI = newBaseUri;
    }

    function toggleSale() public onlyOwner {
        mintOpen = !mintOpen;
    }

    function returnCounter() external view returns(uint256){
        return _tokenSupply.current();
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override {
        ERC721.safeTransferFrom(from, to, tokenId, data);
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnCounter","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":"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":[],"name":"supplyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000051929190620001cc565b506000600a60006101000a81548160ff0219169083151502179055503480156200007a57600080fd5b5060405162003bbc38038062003bbc8339818101604052810190620000a09190620002fa565b81818160009080519060200190620000ba929190620001cc565b508060019080519060200190620000d3929190620001cc565b505050620000f6620000ea620000fe60201b60201c565b6200010660201b60201c565b505062000503565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001da9062000414565b90600052602060002090601f016020900481019282620001fe57600085556200024a565b82601f106200021957805160ff19168380011785556200024a565b828001600101855582156200024a579182015b82811115620002495782518255916020019190600101906200022c565b5b5090506200025991906200025d565b5090565b5b80821115620002785760008160009055506001016200025e565b5090565b6000620002936200028d84620003a8565b6200037f565b905082815260208101848484011115620002b257620002b1620004e3565b5b620002bf848285620003de565b509392505050565b600082601f830112620002df57620002de620004de565b5b8151620002f18482602086016200027c565b91505092915050565b60008060408385031215620003145762000313620004ed565b5b600083015167ffffffffffffffff811115620003355762000334620004e8565b5b6200034385828601620002c7565b925050602083015167ffffffffffffffff811115620003675762000366620004e8565b5b6200037585828601620002c7565b9150509250929050565b60006200038b6200039e565b90506200039982826200044a565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c657620003c5620004af565b5b620003d182620004f2565b9050602081019050919050565b60005b83811015620003fe578082015181840152602081019050620003e1565b838111156200040e576000848401525b50505050565b600060028204905060018216806200042d57607f821691505b6020821081141562000444576200044362000480565b5b50919050565b6200045582620004f2565b810181811067ffffffffffffffff82111715620004775762000476620004af565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6136a980620005136000396000f3fe6080604052600436106101665760003560e01c806370a08231116100d1578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146104e3578063e985e9c514610520578063ea601ce01461055d578063f2fde38b1461058857610166565b8063a22cb46514610466578063b88d4fde1461048f578063c6682862146104b857610166565b806370a0823114610389578063715018a6146103c65780637d8966e4146103dd5780638da5cb5b146103f457806395d89b411461041f578063a0712d681461044a57610166565b806324bbd0491161012357806324bbd0491461028d5780633ccfd60b146102b857806342842e0e146102cf57806355f804b3146102f85780636352211e146103215780636817c76c1461035e57610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806319d1997a1461023957806323b872dd14610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d919061245c565b6105b1565b60405161019f91906129d3565b60405180910390f35b3480156101b457600080fd5b506101bd610693565b6040516101ca91906129ee565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612503565b610725565b604051610207919061296c565b60405180910390f35b34801561021c57600080fd5b506102376004803603810190610232919061241c565b6107aa565b005b34801561024557600080fd5b5061024e6108c2565b60405161025b9190612c90565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190612306565b6108c8565b005b34801561029957600080fd5b506102a2610928565b6040516102af91906129d3565b60405180910390f35b3480156102c457600080fd5b506102cd61093b565b005b3480156102db57600080fd5b506102f660048036038101906102f19190612306565b610a06565b005b34801561030457600080fd5b5061031f600480360381019061031a91906124b6565b610a26565b005b34801561032d57600080fd5b5061034860048036038101906103439190612503565b610ab8565b604051610355919061296c565b60405180910390f35b34801561036a57600080fd5b50610373610b6a565b6040516103809190612c90565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab9190612299565b610b75565b6040516103bd9190612c90565b60405180910390f35b3480156103d257600080fd5b506103db610c2d565b005b3480156103e957600080fd5b506103f2610cb5565b005b34801561040057600080fd5b50610409610d5d565b604051610416919061296c565b60405180910390f35b34801561042b57600080fd5b50610434610d87565b60405161044191906129ee565b60405180910390f35b610464600480360381019061045f9190612503565b610e19565b005b34801561047257600080fd5b5061048d600480360381019061048891906123dc565b610fd1565b005b34801561049b57600080fd5b506104b660048036038101906104b19190612359565b611152565b005b3480156104c457600080fd5b506104cd611164565b6040516104da91906129ee565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612503565b6111f2565b60405161051791906129ee565b60405180910390f35b34801561052c57600080fd5b50610547600480360381019061054291906122c6565b61129c565b60405161055491906129d3565b60405180910390f35b34801561056957600080fd5b50610572611330565b60405161057f9190612c90565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190612299565b611341565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061067c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061068c575061068b82611439565b5b9050919050565b6060600080546106a290612f24565b80601f01602080910402602001604051908101604052809291908181526020018280546106ce90612f24565b801561071b5780601f106106f05761010080835404028352916020019161071b565b820191906000526020600020905b8154815290600101906020018083116106fe57829003601f168201915b5050505050905090565b6000610730826114a3565b61076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690612b90565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b582610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612c10565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661084561150f565b73ffffffffffffffffffffffffffffffffffffffff16148061087457506108738161086e61150f565b61129c565b5b6108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90612b10565b60405180910390fd5b6108bd8383611517565b505050565b61115c81565b6108d96108d361150f565b826115d0565b610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90612c30565b60405180910390fd5b6109238383836116ae565b505050565b600a60009054906101000a900460ff1681565b61094361150f565b73ffffffffffffffffffffffffffffffffffffffff16610961610d5d565b73ffffffffffffffffffffffffffffffffffffffff16146109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612bb0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a02573d6000803e3d6000fd5b5050565b610a2183838360405180602001604052806000815250611152565b505050565b610a2e61150f565b73ffffffffffffffffffffffffffffffffffffffff16610a4c610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9990612bb0565b60405180910390fd5b818160089190610ab39291906120c7565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890612b50565b60405180910390fd5b80915050919050565b662c68af0bb1400081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90612b30565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c3561150f565b73ffffffffffffffffffffffffffffffffffffffff16610c53610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090612bb0565b60405180910390fd5b610cb3600061190a565b565b610cbd61150f565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890612bb0565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d9690612f24565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc290612f24565b8015610e0f5780601f10610de457610100808354040283529160200191610e0f565b820191906000526020600020905b815481529060010190602001808311610df257829003601f168201915b5050505050905090565b60006001610e2760076119d0565b610e319190612d59565b9050600a60009054906101000a900460ff16610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990612a70565b60405180910390fd5b600082118015610e925750600b82105b610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612c70565b60405180910390fd5b61115c610ee783836119de90919063ffffffff16565b1115610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612ad0565b60405180910390fd5b610f4282662c68af0bb140006119f490919063ffffffff16565b341015610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90612c50565b60405180910390fd5b60005b600183610f949190612e3a565b8111610fcc57610faf338284610faa9190612d59565b611a0a565b610fb96007611a28565b8080610fc490612f87565b915050610f87565b505050565b610fd961150f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90612ab0565b60405180910390fd5b806005600061105461150f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661110161150f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161114691906129d3565b60405180910390a35050565b61115e84848484611a3e565b50505050565b6009805461117190612f24565b80601f016020809104026020016040519081016040528092919081815260200182805461119d90612f24565b80156111ea5780601f106111bf576101008083540402835291602001916111ea565b820191906000526020600020905b8154815290600101906020018083116111cd57829003601f168201915b505050505081565b60606111fd826114a3565b61123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390612bf0565b60405180910390fd5b6000611246611aa0565b905060008151116112665760405180602001604052806000815250611294565b8061127084611b32565b60096040516020016112849392919061293b565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061133c60076119d0565b905090565b61134961150f565b73ffffffffffffffffffffffffffffffffffffffff16611367610d5d565b73ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490612bb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490612a30565b60405180910390fd5b6114368161190a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661158a83610ab8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115db826114a3565b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190612af0565b60405180910390fd5b600061162583610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061169457508373ffffffffffffffffffffffffffffffffffffffff1661167c84610725565b73ffffffffffffffffffffffffffffffffffffffff16145b806116a557506116a4818561129c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116ce82610ab8565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90612bd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90612a90565b60405180910390fd5b61179f838383611c93565b6117aa600082611517565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fa9190612e3a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118519190612d59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600081836119ec9190612d59565b905092915050565b60008183611a029190612de0565b905092915050565b611a24828260405180602001604052806000815250611c98565b5050565b6001816000016000828254019250508190555050565b611a4f611a4961150f565b836115d0565b611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590612c30565b60405180910390fd5b611a9a84848484611cf3565b50505050565b606060088054611aaf90612f24565b80601f0160208091040260200160405190810160405280929190818152602001828054611adb90612f24565b8015611b285780601f10611afd57610100808354040283529160200191611b28565b820191906000526020600020905b815481529060010190602001808311611b0b57829003601f168201915b5050505050905090565b60606000821415611b7a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c8e565b600082905060005b60008214611bac578080611b9590612f87565b915050600a82611ba59190612daf565b9150611b82565b60008167ffffffffffffffff811115611bc857611bc76130bd565b5b6040519080825280601f01601f191660200182016040528015611bfa5781602001600182028036833780820191505090505b5090505b60008514611c8757600182611c139190612e3a565b9150600a85611c229190612fd0565b6030611c2e9190612d59565b60f81b818381518110611c4457611c4361308e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c809190612daf565b9450611bfe565b8093505050505b919050565b505050565b611ca28383611d4f565b611caf6000848484611f1d565b611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590612a10565b60405180910390fd5b505050565b611cfe8484846116ae565b611d0a84848484611f1d565b611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090612a10565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db690612b70565b60405180910390fd5b611dc8816114a3565b15611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90612a50565b60405180910390fd5b611e1460008383611c93565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e649190612d59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611f3e8473ffffffffffffffffffffffffffffffffffffffff166120b4565b156120a7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f6761150f565b8786866040518563ffffffff1660e01b8152600401611f899493929190612987565b602060405180830381600087803b158015611fa357600080fd5b505af1925050508015611fd457506040513d601f19601f82011682018060405250810190611fd19190612489565b60015b612057573d8060008114612004576040519150601f19603f3d011682016040523d82523d6000602084013e612009565b606091505b5060008151141561204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690612a10565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120ac565b600190505b949350505050565b600080823b905060008111915050919050565b8280546120d390612f24565b90600052602060002090601f0160209004810192826120f5576000855561213c565b82601f1061210e57803560ff191683800117855561213c565b8280016001018555821561213c579182015b8281111561213b578235825591602001919060010190612120565b5b509050612149919061214d565b5090565b5b8082111561216657600081600090555060010161214e565b5090565b600061217d61217884612cd0565b612cab565b905082815260208101848484011115612199576121986130fb565b5b6121a4848285612ee2565b509392505050565b6000813590506121bb81613617565b92915050565b6000813590506121d08161362e565b92915050565b6000813590506121e581613645565b92915050565b6000815190506121fa81613645565b92915050565b600082601f830112612215576122146130f1565b5b813561222584826020860161216a565b91505092915050565b60008083601f840112612244576122436130f1565b5b8235905067ffffffffffffffff811115612261576122606130ec565b5b60208301915083600182028301111561227d5761227c6130f6565b5b9250929050565b6000813590506122938161365c565b92915050565b6000602082840312156122af576122ae613105565b5b60006122bd848285016121ac565b91505092915050565b600080604083850312156122dd576122dc613105565b5b60006122eb858286016121ac565b92505060206122fc858286016121ac565b9150509250929050565b60008060006060848603121561231f5761231e613105565b5b600061232d868287016121ac565b935050602061233e868287016121ac565b925050604061234f86828701612284565b9150509250925092565b6000806000806080858703121561237357612372613105565b5b6000612381878288016121ac565b9450506020612392878288016121ac565b93505060406123a387828801612284565b925050606085013567ffffffffffffffff8111156123c4576123c3613100565b5b6123d087828801612200565b91505092959194509250565b600080604083850312156123f3576123f2613105565b5b6000612401858286016121ac565b9250506020612412858286016121c1565b9150509250929050565b6000806040838503121561243357612432613105565b5b6000612441858286016121ac565b925050602061245285828601612284565b9150509250929050565b60006020828403121561247257612471613105565b5b6000612480848285016121d6565b91505092915050565b60006020828403121561249f5761249e613105565b5b60006124ad848285016121eb565b91505092915050565b600080602083850312156124cd576124cc613105565b5b600083013567ffffffffffffffff8111156124eb576124ea613100565b5b6124f78582860161222e565b92509250509250929050565b60006020828403121561251957612518613105565b5b600061252784828501612284565b91505092915050565b61253981612e6e565b82525050565b61254881612e80565b82525050565b600061255982612d16565b6125638185612d2c565b9350612573818560208601612ef1565b61257c8161310a565b840191505092915050565b600061259282612d21565b61259c8185612d3d565b93506125ac818560208601612ef1565b6125b58161310a565b840191505092915050565b60006125cb82612d21565b6125d58185612d4e565b93506125e5818560208601612ef1565b80840191505092915050565b600081546125fe81612f24565b6126088186612d4e565b94506001821660008114612623576001811461263457612667565b60ff19831686528186019350612667565b61263d85612d01565b60005b8381101561265f57815481890152600182019150602081019050612640565b838801955050505b50505092915050565b600061267d603283612d3d565b91506126888261311b565b604082019050919050565b60006126a0602683612d3d565b91506126ab8261316a565b604082019050919050565b60006126c3601c83612d3d565b91506126ce826131b9565b602082019050919050565b60006126e6601783612d3d565b91506126f1826131e2565b602082019050919050565b6000612709602483612d3d565b91506127148261320b565b604082019050919050565b600061272c601983612d3d565b91506127378261325a565b602082019050919050565b600061274f601c83612d3d565b915061275a82613283565b602082019050919050565b6000612772602c83612d3d565b915061277d826132ac565b604082019050919050565b6000612795603883612d3d565b91506127a0826132fb565b604082019050919050565b60006127b8602a83612d3d565b91506127c38261334a565b604082019050919050565b60006127db602983612d3d565b91506127e682613399565b604082019050919050565b60006127fe602083612d3d565b9150612809826133e8565b602082019050919050565b6000612821602c83612d3d565b915061282c82613411565b604082019050919050565b6000612844602083612d3d565b915061284f82613460565b602082019050919050565b6000612867602983612d3d565b915061287282613489565b604082019050919050565b600061288a602f83612d3d565b9150612895826134d8565b604082019050919050565b60006128ad602183612d3d565b91506128b882613527565b604082019050919050565b60006128d0603183612d3d565b91506128db82613576565b604082019050919050565b60006128f3601483612d3d565b91506128fe826135c5565b602082019050919050565b6000612916601783612d3d565b9150612921826135ee565b602082019050919050565b61293581612ed8565b82525050565b600061294782866125c0565b915061295382856125c0565b915061295f82846125f1565b9150819050949350505050565b60006020820190506129816000830184612530565b92915050565b600060808201905061299c6000830187612530565b6129a96020830186612530565b6129b6604083018561292c565b81810360608301526129c8818461254e565b905095945050505050565b60006020820190506129e8600083018461253f565b92915050565b60006020820190508181036000830152612a088184612587565b905092915050565b60006020820190508181036000830152612a2981612670565b9050919050565b60006020820190508181036000830152612a4981612693565b9050919050565b60006020820190508181036000830152612a69816126b6565b9050919050565b60006020820190508181036000830152612a89816126d9565b9050919050565b60006020820190508181036000830152612aa9816126fc565b9050919050565b60006020820190508181036000830152612ac98161271f565b9050919050565b60006020820190508181036000830152612ae981612742565b9050919050565b60006020820190508181036000830152612b0981612765565b9050919050565b60006020820190508181036000830152612b2981612788565b9050919050565b60006020820190508181036000830152612b49816127ab565b9050919050565b60006020820190508181036000830152612b69816127ce565b9050919050565b60006020820190508181036000830152612b89816127f1565b9050919050565b60006020820190508181036000830152612ba981612814565b9050919050565b60006020820190508181036000830152612bc981612837565b9050919050565b60006020820190508181036000830152612be98161285a565b9050919050565b60006020820190508181036000830152612c098161287d565b9050919050565b60006020820190508181036000830152612c29816128a0565b9050919050565b60006020820190508181036000830152612c49816128c3565b9050919050565b60006020820190508181036000830152612c69816128e6565b9050919050565b60006020820190508181036000830152612c8981612909565b9050919050565b6000602082019050612ca5600083018461292c565b92915050565b6000612cb5612cc6565b9050612cc18282612f56565b919050565b6000604051905090565b600067ffffffffffffffff821115612ceb57612cea6130bd565b5b612cf48261310a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d6482612ed8565b9150612d6f83612ed8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612da457612da3613001565b5b828201905092915050565b6000612dba82612ed8565b9150612dc583612ed8565b925082612dd557612dd4613030565b5b828204905092915050565b6000612deb82612ed8565b9150612df683612ed8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e2f57612e2e613001565b5b828202905092915050565b6000612e4582612ed8565b9150612e5083612ed8565b925082821015612e6357612e62613001565b5b828203905092915050565b6000612e7982612eb8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f0f578082015181840152602081019050612ef4565b83811115612f1e576000848401525b50505050565b60006002820490506001821680612f3c57607f821691505b60208210811415612f5057612f4f61305f565b5b50919050565b612f5f8261310a565b810181811067ffffffffffffffff82111715612f7e57612f7d6130bd565b5b80604052505050565b6000612f9282612ed8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fc557612fc4613001565b5b600182019050919050565b6000612fdb82612ed8565b9150612fe683612ed8565b925082612ff657612ff5613030565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206e6565647320746f20626520616374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e636f72726563742045746820616d6f756e74000000000000000000000000600082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b61362081612e6e565b811461362b57600080fd5b50565b61363781612e80565b811461364257600080fd5b50565b61364e81612e8c565b811461365957600080fd5b50565b61366581612ed8565b811461367057600080fd5b5056fea2646970667358221220cc937bfe6f358edd692c8e0af77213a4ae6116d149affdc5c799a3dd643294e164736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104769616e74205769656e6572204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075745454e49455300000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101665760003560e01c806370a08231116100d1578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146104e3578063e985e9c514610520578063ea601ce01461055d578063f2fde38b1461058857610166565b8063a22cb46514610466578063b88d4fde1461048f578063c6682862146104b857610166565b806370a0823114610389578063715018a6146103c65780637d8966e4146103dd5780638da5cb5b146103f457806395d89b411461041f578063a0712d681461044a57610166565b806324bbd0491161012357806324bbd0491461028d5780633ccfd60b146102b857806342842e0e146102cf57806355f804b3146102f85780636352211e146103215780636817c76c1461035e57610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806319d1997a1461023957806323b872dd14610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d919061245c565b6105b1565b60405161019f91906129d3565b60405180910390f35b3480156101b457600080fd5b506101bd610693565b6040516101ca91906129ee565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612503565b610725565b604051610207919061296c565b60405180910390f35b34801561021c57600080fd5b506102376004803603810190610232919061241c565b6107aa565b005b34801561024557600080fd5b5061024e6108c2565b60405161025b9190612c90565b60405180910390f35b34801561027057600080fd5b5061028b60048036038101906102869190612306565b6108c8565b005b34801561029957600080fd5b506102a2610928565b6040516102af91906129d3565b60405180910390f35b3480156102c457600080fd5b506102cd61093b565b005b3480156102db57600080fd5b506102f660048036038101906102f19190612306565b610a06565b005b34801561030457600080fd5b5061031f600480360381019061031a91906124b6565b610a26565b005b34801561032d57600080fd5b5061034860048036038101906103439190612503565b610ab8565b604051610355919061296c565b60405180910390f35b34801561036a57600080fd5b50610373610b6a565b6040516103809190612c90565b60405180910390f35b34801561039557600080fd5b506103b060048036038101906103ab9190612299565b610b75565b6040516103bd9190612c90565b60405180910390f35b3480156103d257600080fd5b506103db610c2d565b005b3480156103e957600080fd5b506103f2610cb5565b005b34801561040057600080fd5b50610409610d5d565b604051610416919061296c565b60405180910390f35b34801561042b57600080fd5b50610434610d87565b60405161044191906129ee565b60405180910390f35b610464600480360381019061045f9190612503565b610e19565b005b34801561047257600080fd5b5061048d600480360381019061048891906123dc565b610fd1565b005b34801561049b57600080fd5b506104b660048036038101906104b19190612359565b611152565b005b3480156104c457600080fd5b506104cd611164565b6040516104da91906129ee565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612503565b6111f2565b60405161051791906129ee565b60405180910390f35b34801561052c57600080fd5b50610547600480360381019061054291906122c6565b61129c565b60405161055491906129d3565b60405180910390f35b34801561056957600080fd5b50610572611330565b60405161057f9190612c90565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190612299565b611341565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061067c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061068c575061068b82611439565b5b9050919050565b6060600080546106a290612f24565b80601f01602080910402602001604051908101604052809291908181526020018280546106ce90612f24565b801561071b5780601f106106f05761010080835404028352916020019161071b565b820191906000526020600020905b8154815290600101906020018083116106fe57829003601f168201915b5050505050905090565b6000610730826114a3565b61076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076690612b90565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b582610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90612c10565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661084561150f565b73ffffffffffffffffffffffffffffffffffffffff16148061087457506108738161086e61150f565b61129c565b5b6108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa90612b10565b60405180910390fd5b6108bd8383611517565b505050565b61115c81565b6108d96108d361150f565b826115d0565b610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90612c30565b60405180910390fd5b6109238383836116ae565b505050565b600a60009054906101000a900460ff1681565b61094361150f565b73ffffffffffffffffffffffffffffffffffffffff16610961610d5d565b73ffffffffffffffffffffffffffffffffffffffff16146109b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ae90612bb0565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610a02573d6000803e3d6000fd5b5050565b610a2183838360405180602001604052806000815250611152565b505050565b610a2e61150f565b73ffffffffffffffffffffffffffffffffffffffff16610a4c610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9990612bb0565b60405180910390fd5b818160089190610ab39291906120c7565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890612b50565b60405180910390fd5b80915050919050565b662c68af0bb1400081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90612b30565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c3561150f565b73ffffffffffffffffffffffffffffffffffffffff16610c53610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca090612bb0565b60405180910390fd5b610cb3600061190a565b565b610cbd61150f565b73ffffffffffffffffffffffffffffffffffffffff16610cdb610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890612bb0565b60405180910390fd5b600a60009054906101000a900460ff1615600a60006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d9690612f24565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc290612f24565b8015610e0f5780601f10610de457610100808354040283529160200191610e0f565b820191906000526020600020905b815481529060010190602001808311610df257829003601f168201915b5050505050905090565b60006001610e2760076119d0565b610e319190612d59565b9050600a60009054906101000a900460ff16610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990612a70565b60405180910390fd5b600082118015610e925750600b82105b610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612c70565b60405180910390fd5b61115c610ee783836119de90919063ffffffff16565b1115610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612ad0565b60405180910390fd5b610f4282662c68af0bb140006119f490919063ffffffff16565b341015610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90612c50565b60405180910390fd5b60005b600183610f949190612e3a565b8111610fcc57610faf338284610faa9190612d59565b611a0a565b610fb96007611a28565b8080610fc490612f87565b915050610f87565b505050565b610fd961150f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90612ab0565b60405180910390fd5b806005600061105461150f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661110161150f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161114691906129d3565b60405180910390a35050565b61115e84848484611a3e565b50505050565b6009805461117190612f24565b80601f016020809104026020016040519081016040528092919081815260200182805461119d90612f24565b80156111ea5780601f106111bf576101008083540402835291602001916111ea565b820191906000526020600020905b8154815290600101906020018083116111cd57829003601f168201915b505050505081565b60606111fd826114a3565b61123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390612bf0565b60405180910390fd5b6000611246611aa0565b905060008151116112665760405180602001604052806000815250611294565b8061127084611b32565b60096040516020016112849392919061293b565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061133c60076119d0565b905090565b61134961150f565b73ffffffffffffffffffffffffffffffffffffffff16611367610d5d565b73ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490612bb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490612a30565b60405180910390fd5b6114368161190a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661158a83610ab8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115db826114a3565b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190612af0565b60405180910390fd5b600061162583610ab8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061169457508373ffffffffffffffffffffffffffffffffffffffff1661167c84610725565b73ffffffffffffffffffffffffffffffffffffffff16145b806116a557506116a4818561129c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116ce82610ab8565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90612bd0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90612a90565b60405180910390fd5b61179f838383611c93565b6117aa600082611517565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117fa9190612e3a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118519190612d59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b600081836119ec9190612d59565b905092915050565b60008183611a029190612de0565b905092915050565b611a24828260405180602001604052806000815250611c98565b5050565b6001816000016000828254019250508190555050565b611a4f611a4961150f565b836115d0565b611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8590612c30565b60405180910390fd5b611a9a84848484611cf3565b50505050565b606060088054611aaf90612f24565b80601f0160208091040260200160405190810160405280929190818152602001828054611adb90612f24565b8015611b285780601f10611afd57610100808354040283529160200191611b28565b820191906000526020600020905b815481529060010190602001808311611b0b57829003601f168201915b5050505050905090565b60606000821415611b7a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c8e565b600082905060005b60008214611bac578080611b9590612f87565b915050600a82611ba59190612daf565b9150611b82565b60008167ffffffffffffffff811115611bc857611bc76130bd565b5b6040519080825280601f01601f191660200182016040528015611bfa5781602001600182028036833780820191505090505b5090505b60008514611c8757600182611c139190612e3a565b9150600a85611c229190612fd0565b6030611c2e9190612d59565b60f81b818381518110611c4457611c4361308e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c809190612daf565b9450611bfe565b8093505050505b919050565b505050565b611ca28383611d4f565b611caf6000848484611f1d565b611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590612a10565b60405180910390fd5b505050565b611cfe8484846116ae565b611d0a84848484611f1d565b611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4090612a10565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db690612b70565b60405180910390fd5b611dc8816114a3565b15611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90612a50565b60405180910390fd5b611e1460008383611c93565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e649190612d59565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611f3e8473ffffffffffffffffffffffffffffffffffffffff166120b4565b156120a7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611f6761150f565b8786866040518563ffffffff1660e01b8152600401611f899493929190612987565b602060405180830381600087803b158015611fa357600080fd5b505af1925050508015611fd457506040513d601f19601f82011682018060405250810190611fd19190612489565b60015b612057573d8060008114612004576040519150601f19603f3d011682016040523d82523d6000602084013e612009565b606091505b5060008151141561204f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204690612a10565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506120ac565b600190505b949350505050565b600080823b905060008111915050919050565b8280546120d390612f24565b90600052602060002090601f0160209004810192826120f5576000855561213c565b82601f1061210e57803560ff191683800117855561213c565b8280016001018555821561213c579182015b8281111561213b578235825591602001919060010190612120565b5b509050612149919061214d565b5090565b5b8082111561216657600081600090555060010161214e565b5090565b600061217d61217884612cd0565b612cab565b905082815260208101848484011115612199576121986130fb565b5b6121a4848285612ee2565b509392505050565b6000813590506121bb81613617565b92915050565b6000813590506121d08161362e565b92915050565b6000813590506121e581613645565b92915050565b6000815190506121fa81613645565b92915050565b600082601f830112612215576122146130f1565b5b813561222584826020860161216a565b91505092915050565b60008083601f840112612244576122436130f1565b5b8235905067ffffffffffffffff811115612261576122606130ec565b5b60208301915083600182028301111561227d5761227c6130f6565b5b9250929050565b6000813590506122938161365c565b92915050565b6000602082840312156122af576122ae613105565b5b60006122bd848285016121ac565b91505092915050565b600080604083850312156122dd576122dc613105565b5b60006122eb858286016121ac565b92505060206122fc858286016121ac565b9150509250929050565b60008060006060848603121561231f5761231e613105565b5b600061232d868287016121ac565b935050602061233e868287016121ac565b925050604061234f86828701612284565b9150509250925092565b6000806000806080858703121561237357612372613105565b5b6000612381878288016121ac565b9450506020612392878288016121ac565b93505060406123a387828801612284565b925050606085013567ffffffffffffffff8111156123c4576123c3613100565b5b6123d087828801612200565b91505092959194509250565b600080604083850312156123f3576123f2613105565b5b6000612401858286016121ac565b9250506020612412858286016121c1565b9150509250929050565b6000806040838503121561243357612432613105565b5b6000612441858286016121ac565b925050602061245285828601612284565b9150509250929050565b60006020828403121561247257612471613105565b5b6000612480848285016121d6565b91505092915050565b60006020828403121561249f5761249e613105565b5b60006124ad848285016121eb565b91505092915050565b600080602083850312156124cd576124cc613105565b5b600083013567ffffffffffffffff8111156124eb576124ea613100565b5b6124f78582860161222e565b92509250509250929050565b60006020828403121561251957612518613105565b5b600061252784828501612284565b91505092915050565b61253981612e6e565b82525050565b61254881612e80565b82525050565b600061255982612d16565b6125638185612d2c565b9350612573818560208601612ef1565b61257c8161310a565b840191505092915050565b600061259282612d21565b61259c8185612d3d565b93506125ac818560208601612ef1565b6125b58161310a565b840191505092915050565b60006125cb82612d21565b6125d58185612d4e565b93506125e5818560208601612ef1565b80840191505092915050565b600081546125fe81612f24565b6126088186612d4e565b94506001821660008114612623576001811461263457612667565b60ff19831686528186019350612667565b61263d85612d01565b60005b8381101561265f57815481890152600182019150602081019050612640565b838801955050505b50505092915050565b600061267d603283612d3d565b91506126888261311b565b604082019050919050565b60006126a0602683612d3d565b91506126ab8261316a565b604082019050919050565b60006126c3601c83612d3d565b91506126ce826131b9565b602082019050919050565b60006126e6601783612d3d565b91506126f1826131e2565b602082019050919050565b6000612709602483612d3d565b91506127148261320b565b604082019050919050565b600061272c601983612d3d565b91506127378261325a565b602082019050919050565b600061274f601c83612d3d565b915061275a82613283565b602082019050919050565b6000612772602c83612d3d565b915061277d826132ac565b604082019050919050565b6000612795603883612d3d565b91506127a0826132fb565b604082019050919050565b60006127b8602a83612d3d565b91506127c38261334a565b604082019050919050565b60006127db602983612d3d565b91506127e682613399565b604082019050919050565b60006127fe602083612d3d565b9150612809826133e8565b602082019050919050565b6000612821602c83612d3d565b915061282c82613411565b604082019050919050565b6000612844602083612d3d565b915061284f82613460565b602082019050919050565b6000612867602983612d3d565b915061287282613489565b604082019050919050565b600061288a602f83612d3d565b9150612895826134d8565b604082019050919050565b60006128ad602183612d3d565b91506128b882613527565b604082019050919050565b60006128d0603183612d3d565b91506128db82613576565b604082019050919050565b60006128f3601483612d3d565b91506128fe826135c5565b602082019050919050565b6000612916601783612d3d565b9150612921826135ee565b602082019050919050565b61293581612ed8565b82525050565b600061294782866125c0565b915061295382856125c0565b915061295f82846125f1565b9150819050949350505050565b60006020820190506129816000830184612530565b92915050565b600060808201905061299c6000830187612530565b6129a96020830186612530565b6129b6604083018561292c565b81810360608301526129c8818461254e565b905095945050505050565b60006020820190506129e8600083018461253f565b92915050565b60006020820190508181036000830152612a088184612587565b905092915050565b60006020820190508181036000830152612a2981612670565b9050919050565b60006020820190508181036000830152612a4981612693565b9050919050565b60006020820190508181036000830152612a69816126b6565b9050919050565b60006020820190508181036000830152612a89816126d9565b9050919050565b60006020820190508181036000830152612aa9816126fc565b9050919050565b60006020820190508181036000830152612ac98161271f565b9050919050565b60006020820190508181036000830152612ae981612742565b9050919050565b60006020820190508181036000830152612b0981612765565b9050919050565b60006020820190508181036000830152612b2981612788565b9050919050565b60006020820190508181036000830152612b49816127ab565b9050919050565b60006020820190508181036000830152612b69816127ce565b9050919050565b60006020820190508181036000830152612b89816127f1565b9050919050565b60006020820190508181036000830152612ba981612814565b9050919050565b60006020820190508181036000830152612bc981612837565b9050919050565b60006020820190508181036000830152612be98161285a565b9050919050565b60006020820190508181036000830152612c098161287d565b9050919050565b60006020820190508181036000830152612c29816128a0565b9050919050565b60006020820190508181036000830152612c49816128c3565b9050919050565b60006020820190508181036000830152612c69816128e6565b9050919050565b60006020820190508181036000830152612c8981612909565b9050919050565b6000602082019050612ca5600083018461292c565b92915050565b6000612cb5612cc6565b9050612cc18282612f56565b919050565b6000604051905090565b600067ffffffffffffffff821115612ceb57612cea6130bd565b5b612cf48261310a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612d6482612ed8565b9150612d6f83612ed8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612da457612da3613001565b5b828201905092915050565b6000612dba82612ed8565b9150612dc583612ed8565b925082612dd557612dd4613030565b5b828204905092915050565b6000612deb82612ed8565b9150612df683612ed8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e2f57612e2e613001565b5b828202905092915050565b6000612e4582612ed8565b9150612e5083612ed8565b925082821015612e6357612e62613001565b5b828203905092915050565b6000612e7982612eb8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f0f578082015181840152602081019050612ef4565b83811115612f1e576000848401525b50505050565b60006002820490506001821680612f3c57607f821691505b60208210811415612f5057612f4f61305f565b5b50919050565b612f5f8261310a565b810181811067ffffffffffffffff82111715612f7e57612f7d6130bd565b5b80604052505050565b6000612f9282612ed8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fc557612fc4613001565b5b600182019050919050565b6000612fdb82612ed8565b9150612fe683612ed8565b925082612ff657612ff5613030565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65206e6565647320746f20626520616374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e636f72726563742045746820616d6f756e74000000000000000000000000600082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b61362081612e6e565b811461362b57600080fd5b50565b61363781612e80565b811461364257600080fd5b50565b61364e81612e8c565b811461365957600080fd5b50565b61366581612ed8565b811461367057600080fd5b5056fea2646970667358221220cc937bfe6f358edd692c8e0af77213a4ae6116d149affdc5c799a3dd643294e164736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104769616e74205769656e6572204e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075745454e49455300000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Giant Wiener NFT
Arg [1] : symbol (string): WEENIES

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [3] : 4769616e74205769656e6572204e465400000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 5745454e49455300000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39055:2286:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25249:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26194:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27753:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27276:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39340:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28643:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39446:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41193:143;;;;;;;;;;;;;:::i;:::-;;29053:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40703:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25888:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39389:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25618:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38426:94;;;;;;;;;;;;;:::i;:::-;;40817:78;;;;;;;;;;;;;:::i;:::-;;37775:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26363:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39576:592;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28046:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41014:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39294:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40176:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28412:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40903:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38675:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25249:305;25351:4;25403:25;25388:40;;;:11;:40;;;;:105;;;;25460:33;25445:48;;;:11;:48;;;;25388:105;:158;;;;25510:36;25534:11;25510:23;:36::i;:::-;25388:158;25368:178;;25249:305;;;:::o;26194:100::-;26248:13;26281:5;26274:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26194:100;:::o;27753:221::-;27829:7;27857:16;27865:7;27857;:16::i;:::-;27849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27942:15;:24;27958:7;27942:24;;;;;;;;;;;;;;;;;;;;;27935:31;;27753:221;;;:::o;27276:411::-;27357:13;27373:23;27388:7;27373:14;:23::i;:::-;27357:39;;27421:5;27415:11;;:2;:11;;;;27407:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27515:5;27499:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27524:37;27541:5;27548:12;:10;:12::i;:::-;27524:16;:37::i;:::-;27499:62;27477:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27658:21;27667:2;27671:7;27658:8;:21::i;:::-;27346:341;27276:411;;:::o;39340:42::-;39378:4;39340:42;:::o;28643:339::-;28838:41;28857:12;:10;:12::i;:::-;28871:7;28838:18;:41::i;:::-;28830:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28946:28;28956:4;28962:2;28966:7;28946:9;:28::i;:::-;28643:339;;;:::o;39446:28::-;;;;;;;;;;;;;:::o;41193:143::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41241:15:::1;41259:21;41241:39;;41299:10;41291:28;;:37;41320:7;41291:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41230:106;41193:143::o:0;29053:185::-;29191:39;29208:4;29214:2;29218:7;29191:39;;;;;;;;;;;;:16;:39::i;:::-;29053:185;;;:::o;40703:106::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40791:10:::1;;40781:7;:20;;;;;;;:::i;:::-;;40703:106:::0;;:::o;25888:239::-;25960:7;25980:13;25996:7;:16;26004:7;25996:16;;;;;;;;;;;;;;;;;;;;;25980:32;;26048:1;26031:19;;:5;:19;;;;26023:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26114:5;26107:12;;;25888:239;;;:::o;39389:48::-;39425:12;39389:48;:::o;25618:208::-;25690:7;25735:1;25718:19;;:5;:19;;;;25710:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25802:9;:16;25812:5;25802:16;;;;;;;;;;;;;;;;25795:23;;25618:208;;;:::o;38426:94::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38491:21:::1;38509:1;38491:9;:21::i;:::-;38426:94::o:0;40817:78::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40879:8:::1;;;;;;;;;;;40878:9;40867:8;;:20;;;;;;;;;;;;;;;;;;40817:78::o:0;37775:87::-;37821:7;37848:6;;;;;;;;;;;37841:13;;37775:87;:::o;26363:104::-;26419:13;26452:7;26445:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26363:104;:::o;39576:592::-;39636:14;39678:1;39653:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;39636:43;;39698:8;;;;;;;;;;;39690:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;39769:1;39753:13;:17;:39;;;;;39790:2;39774:13;:18;39753:39;39745:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;39378:4;39843:25;39854:13;39843:6;:10;;:25;;;;:::i;:::-;:40;;39835:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39948:28;39962:13;39425:12;39948:13;;:28;;;;:::i;:::-;39935:9;:41;;39927:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;40017:9;40013:146;40053:1;40037:13;:17;;;;:::i;:::-;40032:1;:22;40013:146;;40075:33;40085:10;40106:1;40097:6;:10;;;;:::i;:::-;40075:9;:33::i;:::-;40123:24;:12;:22;:24::i;:::-;40056:3;;;;;:::i;:::-;;;;40013:146;;;;39625:543;39576:592;:::o;28046:295::-;28161:12;:10;:12::i;:::-;28149:24;;:8;:24;;;;28141:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28261:8;28216:18;:32;28235:12;:10;:12::i;:::-;28216:32;;;;;;;;;;;;;;;:42;28249:8;28216:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28314:8;28285:48;;28300:12;:10;:12::i;:::-;28285:48;;;28324:8;28285:48;;;;;;:::i;:::-;;;;;;;;28046:295;;:::o;41014:171::-;41129:48;41153:4;41159:2;41163:7;41172:4;41129:23;:48::i;:::-;41014:171;;;;:::o;39294:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40176:411::-;40249:13;40283:16;40291:7;40283;:16::i;:::-;40275:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;40372:28;40403:10;:8;:10::i;:::-;40372:41;;40462:1;40437:14;40431:28;:32;:148;;;;;;;;;;;;;;;;;40503:14;40519:25;40536:7;40519:16;:25::i;:::-;40546:13;40486:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40431:148;40424:155;;;40176:411;;;:::o;28412:164::-;28509:4;28533:18;:25;28552:5;28533:25;;;;;;;;;;;;;;;:35;28559:8;28533:35;;;;;;;;;;;;;;;;;;;;;;;;;28526:42;;28412:164;;;;:::o;40903:103::-;40950:7;40976:22;:12;:20;:22::i;:::-;40969:29;;40903:103;:::o;38675:192::-;38006:12;:10;:12::i;:::-;37995:23;;:7;:5;:7::i;:::-;:23;;;37987:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:1:::1;38764:22;;:8;:22;;;;38756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:19;38850:8;38840:9;:19::i;:::-;38675:192:::0;:::o;11770:157::-;11855:4;11894:25;11879:40;;;:11;:40;;;;11872:47;;11770:157;;;:::o;31147:127::-;31212:4;31264:1;31236:30;;:7;:16;31244:7;31236:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31229:37;;31147:127;;;:::o;3047:98::-;3100:7;3127:10;3120:17;;3047:98;:::o;35129:174::-;35231:2;35204:15;:24;35220:7;35204:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35287:7;35283:2;35249:46;;35258:23;35273:7;35258:14;:23::i;:::-;35249:46;;;;;;;;;;;;35129:174;;:::o;31441:348::-;31534:4;31559:16;31567:7;31559;:16::i;:::-;31551:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31635:13;31651:23;31666:7;31651:14;:23::i;:::-;31635:39;;31704:5;31693:16;;:7;:16;;;:51;;;;31737:7;31713:31;;:20;31725:7;31713:11;:20::i;:::-;:31;;;31693:51;:87;;;;31748:32;31765:5;31772:7;31748:16;:32::i;:::-;31693:87;31685:96;;;31441:348;;;;:::o;34433:578::-;34592:4;34565:31;;:23;34580:7;34565:14;:23::i;:::-;:31;;;34557:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34675:1;34661:16;;:2;:16;;;;34653:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34731:39;34752:4;34758:2;34762:7;34731:20;:39::i;:::-;34835:29;34852:1;34856:7;34835:8;:29::i;:::-;34896:1;34877:9;:15;34887:4;34877:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34925:1;34908:9;:13;34918:2;34908:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34956:2;34937:7;:16;34945:7;34937:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34995:7;34991:2;34976:27;;34985:4;34976:27;;;;;;;;;;;;34433:578;;;:::o;38875:173::-;38931:16;38950:6;;;;;;;;;;;38931:25;;38976:8;38967:6;;:17;;;;;;;;;;;;;;;;;;39031:8;39000:40;;39021:8;39000:40;;;;;;;;;;;;38920:128;38875:173;:::o;2421:114::-;2486:7;2513;:14;;;2506:21;;2421:114;;;:::o;19403:98::-;19461:7;19492:1;19488;:5;;;;:::i;:::-;19481:12;;19403:98;;;;:::o;20141:::-;20199:7;20230:1;20226;:5;;;;:::i;:::-;20219:12;;20141:98;;;;:::o;32131:110::-;32207:26;32217:2;32221:7;32207:26;;;;;;;;;;;;:9;:26::i;:::-;32131:110;;:::o;2543:127::-;2650:1;2632:7;:14;;;:19;;;;;;;;;;;2543:127;:::o;29309:328::-;29484:41;29503:12;:10;:12::i;:::-;29517:7;29484:18;:41::i;:::-;29476:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29590:39;29604:4;29610:2;29614:7;29623:5;29590:13;:39::i;:::-;29309:328;;;;:::o;40595:100::-;40647:13;40680:7;40673:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40595:100;:::o;251:723::-;307:13;537:1;528:5;:10;524:53;;;555:10;;;;;;;;;;;;;;;;;;;;;524:53;587:12;602:5;587:20;;618:14;643:78;658:1;650:4;:9;643:78;;676:8;;;;;:::i;:::-;;;;707:2;699:10;;;;;:::i;:::-;;;643:78;;;731:19;763:6;753:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;731:39;;781:154;797:1;788:5;:10;781:154;;825:1;815:11;;;;;:::i;:::-;;;892:2;884:5;:10;;;;:::i;:::-;871:2;:24;;;;:::i;:::-;858:39;;841:6;848;841:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;921:2;912:11;;;;;:::i;:::-;;;781:154;;;959:6;945:21;;;;;251:723;;;;:::o;37239:126::-;;;;:::o;32468:321::-;32598:18;32604:2;32608:7;32598:5;:18::i;:::-;32649:54;32680:1;32684:2;32688:7;32697:5;32649:22;:54::i;:::-;32627:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32468:321;;;:::o;30519:315::-;30676:28;30686:4;30692:2;30696:7;30676:9;:28::i;:::-;30723:48;30746:4;30752:2;30756:7;30765:5;30723:22;:48::i;:::-;30715:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30519:315;;;;:::o;33125:382::-;33219:1;33205:16;;:2;:16;;;;33197:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33278:16;33286:7;33278;:16::i;:::-;33277:17;33269:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:45;33369:1;33373:2;33377:7;33340:20;:45::i;:::-;33415:1;33398:9;:13;33408:2;33398:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33446:2;33427:7;:16;33435:7;33427:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33491:7;33487:2;33466:33;;33483:1;33466:33;;;;;;;;;;;;33125:382;;:::o;35868:799::-;36023:4;36044:15;:2;:13;;;:15::i;:::-;36040:620;;;36096:2;36080:36;;;36117:12;:10;:12::i;:::-;36131:4;36137:7;36146:5;36080:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36076:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36339:1;36322:6;:13;:18;36318:272;;;36365:60;;;;;;;;;;:::i;:::-;;;;;;;;36318:272;36540:6;36534:13;36525:6;36521:2;36517:15;36510:38;36076:529;36213:41;;;36203:51;;;:6;:51;;;;36196:58;;;;;36040:620;36644:4;36637:11;;35868:799;;;;;;;:::o;3871:387::-;3931:4;4139:12;4206:7;4194:20;4186:28;;4249:1;4242:4;:8;4235:15;;;3871:387;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:118::-;7060:24;7078:5;7060:24;:::i;:::-;7055:3;7048:37;6973:118;;:::o;7097:109::-;7178:21;7193:5;7178:21;:::i;:::-;7173:3;7166:34;7097:109;;:::o;7212:360::-;7298:3;7326:38;7358:5;7326:38;:::i;:::-;7380:70;7443:6;7438:3;7380:70;:::i;:::-;7373:77;;7459:52;7504:6;7499:3;7492:4;7485:5;7481:16;7459:52;:::i;:::-;7536:29;7558:6;7536:29;:::i;:::-;7531:3;7527:39;7520:46;;7302:270;7212:360;;;;:::o;7578:364::-;7666:3;7694:39;7727:5;7694:39;:::i;:::-;7749:71;7813:6;7808:3;7749:71;:::i;:::-;7742:78;;7829:52;7874:6;7869:3;7862:4;7855:5;7851:16;7829:52;:::i;:::-;7906:29;7928:6;7906:29;:::i;:::-;7901:3;7897:39;7890:46;;7670:272;7578:364;;;;:::o;7948:377::-;8054:3;8082:39;8115:5;8082:39;:::i;:::-;8137:89;8219:6;8214:3;8137:89;:::i;:::-;8130:96;;8235:52;8280:6;8275:3;8268:4;8261:5;8257:16;8235:52;:::i;:::-;8312:6;8307:3;8303:16;8296:23;;8058:267;7948:377;;;;:::o;8355:845::-;8458:3;8495:5;8489:12;8524:36;8550:9;8524:36;:::i;:::-;8576:89;8658:6;8653:3;8576:89;:::i;:::-;8569:96;;8696:1;8685:9;8681:17;8712:1;8707:137;;;;8858:1;8853:341;;;;8674:520;;8707:137;8791:4;8787:9;8776;8772:25;8767:3;8760:38;8827:6;8822:3;8818:16;8811:23;;8707:137;;8853:341;8920:38;8952:5;8920:38;:::i;:::-;8980:1;8994:154;9008:6;9005:1;9002:13;8994:154;;;9082:7;9076:14;9072:1;9067:3;9063:11;9056:35;9132:1;9123:7;9119:15;9108:26;;9030:4;9027:1;9023:12;9018:17;;8994:154;;;9177:6;9172:3;9168:16;9161:23;;8860:334;;8674:520;;8462:738;;8355:845;;;;:::o;9206:366::-;9348:3;9369:67;9433:2;9428:3;9369:67;:::i;:::-;9362:74;;9445:93;9534:3;9445:93;:::i;:::-;9563:2;9558:3;9554:12;9547:19;;9206:366;;;:::o;9578:::-;9720:3;9741:67;9805:2;9800:3;9741:67;:::i;:::-;9734:74;;9817:93;9906:3;9817:93;:::i;:::-;9935:2;9930:3;9926:12;9919:19;;9578:366;;;:::o;9950:::-;10092:3;10113:67;10177:2;10172:3;10113:67;:::i;:::-;10106:74;;10189:93;10278:3;10189:93;:::i;:::-;10307:2;10302:3;10298:12;10291:19;;9950:366;;;:::o;10322:::-;10464:3;10485:67;10549:2;10544:3;10485:67;:::i;:::-;10478:74;;10561:93;10650:3;10561:93;:::i;:::-;10679:2;10674:3;10670:12;10663:19;;10322:366;;;:::o;10694:::-;10836:3;10857:67;10921:2;10916:3;10857:67;:::i;:::-;10850:74;;10933:93;11022:3;10933:93;:::i;:::-;11051:2;11046:3;11042:12;11035:19;;10694:366;;;:::o;11066:::-;11208:3;11229:67;11293:2;11288:3;11229:67;:::i;:::-;11222:74;;11305:93;11394:3;11305:93;:::i;:::-;11423:2;11418:3;11414:12;11407:19;;11066:366;;;:::o;11438:::-;11580:3;11601:67;11665:2;11660:3;11601:67;:::i;:::-;11594:74;;11677:93;11766:3;11677:93;:::i;:::-;11795:2;11790:3;11786:12;11779:19;;11438:366;;;:::o;11810:::-;11952:3;11973:67;12037:2;12032:3;11973:67;:::i;:::-;11966:74;;12049:93;12138:3;12049:93;:::i;:::-;12167:2;12162:3;12158:12;12151:19;;11810:366;;;:::o;12182:::-;12324:3;12345:67;12409:2;12404:3;12345:67;:::i;:::-;12338:74;;12421:93;12510:3;12421:93;:::i;:::-;12539:2;12534:3;12530:12;12523:19;;12182:366;;;:::o;12554:::-;12696:3;12717:67;12781:2;12776:3;12717:67;:::i;:::-;12710:74;;12793:93;12882:3;12793:93;:::i;:::-;12911:2;12906:3;12902:12;12895:19;;12554:366;;;:::o;12926:::-;13068:3;13089:67;13153:2;13148:3;13089:67;:::i;:::-;13082:74;;13165:93;13254:3;13165:93;:::i;:::-;13283:2;13278:3;13274:12;13267:19;;12926:366;;;:::o;13298:::-;13440:3;13461:67;13525:2;13520:3;13461:67;:::i;:::-;13454:74;;13537:93;13626:3;13537:93;:::i;:::-;13655:2;13650:3;13646:12;13639:19;;13298:366;;;:::o;13670:::-;13812:3;13833:67;13897:2;13892:3;13833:67;:::i;:::-;13826:74;;13909:93;13998:3;13909:93;:::i;:::-;14027:2;14022:3;14018:12;14011:19;;13670:366;;;:::o;14042:::-;14184:3;14205:67;14269:2;14264:3;14205:67;:::i;:::-;14198:74;;14281:93;14370:3;14281:93;:::i;:::-;14399:2;14394:3;14390:12;14383:19;;14042:366;;;:::o;14414:::-;14556:3;14577:67;14641:2;14636:3;14577:67;:::i;:::-;14570:74;;14653:93;14742:3;14653:93;:::i;:::-;14771:2;14766:3;14762:12;14755:19;;14414:366;;;:::o;14786:::-;14928:3;14949:67;15013:2;15008:3;14949:67;:::i;:::-;14942:74;;15025:93;15114:3;15025:93;:::i;:::-;15143:2;15138:3;15134:12;15127:19;;14786:366;;;:::o;15158:::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:::-;15672:3;15693:67;15757:2;15752:3;15693:67;:::i;:::-;15686:74;;15769:93;15858:3;15769:93;:::i;:::-;15887:2;15882:3;15878:12;15871:19;;15530:366;;;:::o;15902:::-;16044:3;16065:67;16129:2;16124:3;16065:67;:::i;:::-;16058:74;;16141:93;16230:3;16141:93;:::i;:::-;16259:2;16254:3;16250:12;16243:19;;15902:366;;;:::o;16274:::-;16416:3;16437:67;16501:2;16496:3;16437:67;:::i;:::-;16430:74;;16513:93;16602:3;16513:93;:::i;:::-;16631:2;16626:3;16622:12;16615:19;;16274:366;;;:::o;16646:118::-;16733:24;16751:5;16733:24;:::i;:::-;16728:3;16721:37;16646:118;;:::o;16770:589::-;16995:3;17017:95;17108:3;17099:6;17017:95;:::i;:::-;17010:102;;17129:95;17220:3;17211:6;17129:95;:::i;:::-;17122:102;;17241:92;17329:3;17320:6;17241:92;:::i;:::-;17234:99;;17350:3;17343:10;;16770:589;;;;;;:::o;17365:222::-;17458:4;17496:2;17485:9;17481:18;17473:26;;17509:71;17577:1;17566:9;17562:17;17553:6;17509:71;:::i;:::-;17365:222;;;;:::o;17593:640::-;17788:4;17826:3;17815:9;17811:19;17803:27;;17840:71;17908:1;17897:9;17893:17;17884:6;17840:71;:::i;:::-;17921:72;17989:2;17978:9;17974:18;17965:6;17921:72;:::i;:::-;18003;18071:2;18060:9;18056:18;18047:6;18003:72;:::i;:::-;18122:9;18116:4;18112:20;18107:2;18096:9;18092:18;18085:48;18150:76;18221:4;18212:6;18150:76;:::i;:::-;18142:84;;17593:640;;;;;;;:::o;18239:210::-;18326:4;18364:2;18353:9;18349:18;18341:26;;18377:65;18439:1;18428:9;18424:17;18415:6;18377:65;:::i;:::-;18239:210;;;;:::o;18455:313::-;18568:4;18606:2;18595:9;18591:18;18583:26;;18655:9;18649:4;18645:20;18641:1;18630:9;18626:17;18619:47;18683:78;18756:4;18747:6;18683:78;:::i;:::-;18675:86;;18455:313;;;;:::o;18774:419::-;18940:4;18978:2;18967:9;18963:18;18955:26;;19027:9;19021:4;19017:20;19013:1;19002:9;18998:17;18991:47;19055:131;19181:4;19055:131;:::i;:::-;19047:139;;18774:419;;;:::o;19199:::-;19365:4;19403:2;19392:9;19388:18;19380:26;;19452:9;19446:4;19442:20;19438:1;19427:9;19423:17;19416:47;19480:131;19606:4;19480:131;:::i;:::-;19472:139;;19199:419;;;:::o;19624:::-;19790:4;19828:2;19817:9;19813:18;19805:26;;19877:9;19871:4;19867:20;19863:1;19852:9;19848:17;19841:47;19905:131;20031:4;19905:131;:::i;:::-;19897:139;;19624:419;;;:::o;20049:::-;20215:4;20253:2;20242:9;20238:18;20230:26;;20302:9;20296:4;20292:20;20288:1;20277:9;20273:17;20266:47;20330:131;20456:4;20330:131;:::i;:::-;20322:139;;20049:419;;;:::o;20474:::-;20640:4;20678:2;20667:9;20663:18;20655:26;;20727:9;20721:4;20717:20;20713:1;20702:9;20698:17;20691:47;20755:131;20881:4;20755:131;:::i;:::-;20747:139;;20474:419;;;:::o;20899:::-;21065:4;21103:2;21092:9;21088:18;21080:26;;21152:9;21146:4;21142:20;21138:1;21127:9;21123:17;21116:47;21180:131;21306:4;21180:131;:::i;:::-;21172:139;;20899:419;;;:::o;21324:::-;21490:4;21528:2;21517:9;21513:18;21505:26;;21577:9;21571:4;21567:20;21563:1;21552:9;21548:17;21541:47;21605:131;21731:4;21605:131;:::i;:::-;21597:139;;21324:419;;;:::o;21749:::-;21915:4;21953:2;21942:9;21938:18;21930:26;;22002:9;21996:4;21992:20;21988:1;21977:9;21973:17;21966:47;22030:131;22156:4;22030:131;:::i;:::-;22022:139;;21749:419;;;:::o;22174:::-;22340:4;22378:2;22367:9;22363:18;22355:26;;22427:9;22421:4;22417:20;22413:1;22402:9;22398:17;22391:47;22455:131;22581:4;22455:131;:::i;:::-;22447:139;;22174:419;;;:::o;22599:::-;22765:4;22803:2;22792:9;22788:18;22780:26;;22852:9;22846:4;22842:20;22838:1;22827:9;22823:17;22816:47;22880:131;23006:4;22880:131;:::i;:::-;22872:139;;22599:419;;;:::o;23024:::-;23190:4;23228:2;23217:9;23213:18;23205:26;;23277:9;23271:4;23267:20;23263:1;23252:9;23248:17;23241:47;23305:131;23431:4;23305:131;:::i;:::-;23297:139;;23024:419;;;:::o;23449:::-;23615:4;23653:2;23642:9;23638:18;23630:26;;23702:9;23696:4;23692:20;23688:1;23677:9;23673:17;23666:47;23730:131;23856:4;23730:131;:::i;:::-;23722:139;;23449:419;;;:::o;23874:::-;24040:4;24078:2;24067:9;24063:18;24055:26;;24127:9;24121:4;24117:20;24113:1;24102:9;24098:17;24091:47;24155:131;24281:4;24155:131;:::i;:::-;24147:139;;23874:419;;;:::o;24299:::-;24465:4;24503:2;24492:9;24488:18;24480:26;;24552:9;24546:4;24542:20;24538:1;24527:9;24523:17;24516:47;24580:131;24706:4;24580:131;:::i;:::-;24572:139;;24299:419;;;:::o;24724:::-;24890:4;24928:2;24917:9;24913:18;24905:26;;24977:9;24971:4;24967:20;24963:1;24952:9;24948:17;24941:47;25005:131;25131:4;25005:131;:::i;:::-;24997:139;;24724:419;;;:::o;25149:::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25402:9;25396:4;25392:20;25388:1;25377:9;25373:17;25366:47;25430:131;25556:4;25430:131;:::i;:::-;25422:139;;25149:419;;;:::o;25574:::-;25740:4;25778:2;25767:9;25763:18;25755:26;;25827:9;25821:4;25817:20;25813:1;25802:9;25798:17;25791:47;25855:131;25981:4;25855:131;:::i;:::-;25847:139;;25574:419;;;:::o;25999:::-;26165:4;26203:2;26192:9;26188:18;26180:26;;26252:9;26246:4;26242:20;26238:1;26227:9;26223:17;26216:47;26280:131;26406:4;26280:131;:::i;:::-;26272:139;;25999:419;;;:::o;26424:::-;26590:4;26628:2;26617:9;26613:18;26605:26;;26677:9;26671:4;26667:20;26663:1;26652:9;26648:17;26641:47;26705:131;26831:4;26705:131;:::i;:::-;26697:139;;26424:419;;;:::o;26849:::-;27015:4;27053:2;27042:9;27038:18;27030:26;;27102:9;27096:4;27092:20;27088:1;27077:9;27073:17;27066:47;27130:131;27256:4;27130:131;:::i;:::-;27122:139;;26849:419;;;:::o;27274:222::-;27367:4;27405:2;27394:9;27390:18;27382:26;;27418:71;27486:1;27475:9;27471:17;27462:6;27418:71;:::i;:::-;27274:222;;;;:::o;27502:129::-;27536:6;27563:20;;:::i;:::-;27553:30;;27592:33;27620:4;27612:6;27592:33;:::i;:::-;27502:129;;;:::o;27637:75::-;27670:6;27703:2;27697:9;27687:19;;27637:75;:::o;27718:307::-;27779:4;27869:18;27861:6;27858:30;27855:56;;;27891:18;;:::i;:::-;27855:56;27929:29;27951:6;27929:29;:::i;:::-;27921:37;;28013:4;28007;28003:15;27995:23;;27718:307;;;:::o;28031:141::-;28080:4;28103:3;28095:11;;28126:3;28123:1;28116:14;28160:4;28157:1;28147:18;28139:26;;28031:141;;;:::o;28178:98::-;28229:6;28263:5;28257:12;28247:22;;28178:98;;;:::o;28282:99::-;28334:6;28368:5;28362:12;28352:22;;28282:99;;;:::o;28387:168::-;28470:11;28504:6;28499:3;28492:19;28544:4;28539:3;28535:14;28520:29;;28387:168;;;;:::o;28561:169::-;28645:11;28679:6;28674:3;28667:19;28719:4;28714:3;28710:14;28695:29;;28561:169;;;;:::o;28736:148::-;28838:11;28875:3;28860:18;;28736:148;;;;:::o;28890:305::-;28930:3;28949:20;28967:1;28949:20;:::i;:::-;28944:25;;28983:20;29001:1;28983:20;:::i;:::-;28978:25;;29137:1;29069:66;29065:74;29062:1;29059:81;29056:107;;;29143:18;;:::i;:::-;29056:107;29187:1;29184;29180:9;29173:16;;28890:305;;;;:::o;29201:185::-;29241:1;29258:20;29276:1;29258:20;:::i;:::-;29253:25;;29292:20;29310:1;29292:20;:::i;:::-;29287:25;;29331:1;29321:35;;29336:18;;:::i;:::-;29321:35;29378:1;29375;29371:9;29366:14;;29201:185;;;;:::o;29392:348::-;29432:7;29455:20;29473:1;29455:20;:::i;:::-;29450:25;;29489:20;29507:1;29489:20;:::i;:::-;29484:25;;29677:1;29609:66;29605:74;29602:1;29599:81;29594:1;29587:9;29580:17;29576:105;29573:131;;;29684:18;;:::i;:::-;29573:131;29732:1;29729;29725:9;29714:20;;29392:348;;;;:::o;29746:191::-;29786:4;29806:20;29824:1;29806:20;:::i;:::-;29801:25;;29840:20;29858:1;29840:20;:::i;:::-;29835:25;;29879:1;29876;29873:8;29870:34;;;29884:18;;:::i;:::-;29870:34;29929:1;29926;29922:9;29914:17;;29746:191;;;;:::o;29943:96::-;29980:7;30009:24;30027:5;30009:24;:::i;:::-;29998:35;;29943:96;;;:::o;30045:90::-;30079:7;30122:5;30115:13;30108:21;30097:32;;30045:90;;;:::o;30141:149::-;30177:7;30217:66;30210:5;30206:78;30195:89;;30141:149;;;:::o;30296:126::-;30333:7;30373:42;30366:5;30362:54;30351:65;;30296:126;;;:::o;30428:77::-;30465:7;30494:5;30483:16;;30428:77;;;:::o;30511:154::-;30595:6;30590:3;30585;30572:30;30657:1;30648:6;30643:3;30639:16;30632:27;30511:154;;;:::o;30671:307::-;30739:1;30749:113;30763:6;30760:1;30757:13;30749:113;;;30848:1;30843:3;30839:11;30833:18;30829:1;30824:3;30820:11;30813:39;30785:2;30782:1;30778:10;30773:15;;30749:113;;;30880:6;30877:1;30874:13;30871:101;;;30960:1;30951:6;30946:3;30942:16;30935:27;30871:101;30720:258;30671:307;;;:::o;30984:320::-;31028:6;31065:1;31059:4;31055:12;31045:22;;31112:1;31106:4;31102:12;31133:18;31123:81;;31189:4;31181:6;31177:17;31167:27;;31123:81;31251:2;31243:6;31240:14;31220:18;31217:38;31214:84;;;31270:18;;:::i;:::-;31214:84;31035:269;30984:320;;;:::o;31310:281::-;31393:27;31415:4;31393:27;:::i;:::-;31385:6;31381:40;31523:6;31511:10;31508:22;31487:18;31475:10;31472:34;31469:62;31466:88;;;31534:18;;:::i;:::-;31466:88;31574:10;31570:2;31563:22;31353:238;31310:281;;:::o;31597:233::-;31636:3;31659:24;31677:5;31659:24;:::i;:::-;31650:33;;31705:66;31698:5;31695:77;31692:103;;;31775:18;;:::i;:::-;31692:103;31822:1;31815:5;31811:13;31804:20;;31597:233;;;:::o;31836:176::-;31868:1;31885:20;31903:1;31885:20;:::i;:::-;31880:25;;31919:20;31937:1;31919:20;:::i;:::-;31914:25;;31958:1;31948:35;;31963:18;;:::i;:::-;31948:35;32004:1;32001;31997:9;31992:14;;31836:176;;;;:::o;32018:180::-;32066:77;32063:1;32056:88;32163:4;32160:1;32153:15;32187:4;32184:1;32177:15;32204:180;32252:77;32249:1;32242:88;32349:4;32346:1;32339:15;32373:4;32370:1;32363:15;32390:180;32438:77;32435:1;32428:88;32535:4;32532:1;32525:15;32559:4;32556:1;32549:15;32576:180;32624:77;32621:1;32614:88;32721:4;32718:1;32711:15;32745:4;32742:1;32735:15;32762:180;32810:77;32807:1;32800:88;32907:4;32904:1;32897:15;32931:4;32928:1;32921:15;32948:117;33057:1;33054;33047:12;33071:117;33180:1;33177;33170:12;33194:117;33303:1;33300;33293:12;33317:117;33426:1;33423;33416:12;33440:117;33549:1;33546;33539:12;33563:117;33672:1;33669;33662:12;33686:102;33727:6;33778:2;33774:7;33769:2;33762:5;33758:14;33754:28;33744:38;;33686:102;;;:::o;33794:237::-;33934:34;33930:1;33922:6;33918:14;33911:58;34003:20;33998:2;33990:6;33986:15;33979:45;33794:237;:::o;34037:225::-;34177:34;34173:1;34165:6;34161:14;34154:58;34246:8;34241:2;34233:6;34229:15;34222:33;34037:225;:::o;34268:178::-;34408:30;34404:1;34396:6;34392:14;34385:54;34268:178;:::o;34452:173::-;34592:25;34588:1;34580:6;34576:14;34569:49;34452:173;:::o;34631:223::-;34771:34;34767:1;34759:6;34755:14;34748:58;34840:6;34835:2;34827:6;34823:15;34816:31;34631:223;:::o;34860:175::-;35000:27;34996:1;34988:6;34984:14;34977:51;34860:175;:::o;35041:178::-;35181:30;35177:1;35169:6;35165:14;35158:54;35041:178;:::o;35225:231::-;35365:34;35361:1;35353:6;35349:14;35342:58;35434:14;35429:2;35421:6;35417:15;35410:39;35225:231;:::o;35462:243::-;35602:34;35598:1;35590:6;35586:14;35579:58;35671:26;35666:2;35658:6;35654:15;35647:51;35462:243;:::o;35711:229::-;35851:34;35847:1;35839:6;35835:14;35828:58;35920:12;35915:2;35907:6;35903:15;35896:37;35711:229;:::o;35946:228::-;36086:34;36082:1;36074:6;36070:14;36063:58;36155:11;36150:2;36142:6;36138:15;36131:36;35946:228;:::o;36180:182::-;36320:34;36316:1;36308:6;36304:14;36297:58;36180:182;:::o;36368:231::-;36508:34;36504:1;36496:6;36492:14;36485:58;36577:14;36572:2;36564:6;36560:15;36553:39;36368:231;:::o;36605:182::-;36745:34;36741:1;36733:6;36729:14;36722:58;36605:182;:::o;36793:228::-;36933:34;36929:1;36921:6;36917:14;36910:58;37002:11;36997:2;36989:6;36985:15;36978:36;36793:228;:::o;37027:234::-;37167:34;37163:1;37155:6;37151:14;37144:58;37236:17;37231:2;37223:6;37219:15;37212:42;37027:234;:::o;37267:220::-;37407:34;37403:1;37395:6;37391:14;37384:58;37476:3;37471:2;37463:6;37459:15;37452:28;37267:220;:::o;37493:236::-;37633:34;37629:1;37621:6;37617:14;37610:58;37702:19;37697:2;37689:6;37685:15;37678:44;37493:236;:::o;37735:170::-;37875:22;37871:1;37863:6;37859:14;37852:46;37735:170;:::o;37911:173::-;38051:25;38047:1;38039:6;38035:14;38028:49;37911:173;:::o;38090:122::-;38163:24;38181:5;38163:24;:::i;:::-;38156:5;38153:35;38143:63;;38202:1;38199;38192:12;38143:63;38090:122;:::o;38218:116::-;38288:21;38303:5;38288:21;:::i;:::-;38281:5;38278:32;38268:60;;38324:1;38321;38314:12;38268:60;38218:116;:::o;38340:120::-;38412:23;38429:5;38412:23;:::i;:::-;38405:5;38402:34;38392:62;;38450:1;38447;38440:12;38392:62;38340:120;:::o;38466:122::-;38539:24;38557:5;38539:24;:::i;:::-;38532:5;38529:35;38519:63;;38578:1;38575;38568:12;38519:63;38466:122;:::o

Swarm Source

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