ETH Price: $3,392.77 (-1.27%)
Gas: 2 Gwei

uwucrew (UWU)
 

Overview

TokenID

6112

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

uwucrew is a generative collection of 9670 avatars inspired by anime and pop culture, aiming to be both inclusive and expressive. Every uwucrew NFT is completely unique and features up to 9 traits with 120+ assets.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
uwucrew

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-04
*/

// Sources flattened with hardhat v2.6.1 https://hardhat.org

// File contracts/utils/Address.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File contracts/utils/Context.sol

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File contracts/utils/Strings.sol

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}


// File contracts/utils/introspection/IERC165.sol

pragma solidity ^0.8.0;

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


// File contracts/tokens/IERC721.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File contracts/tokens/IERC721Metadata.sol

pragma solidity ^0.8.0;

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

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

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


// File contracts/tokens/IERC721Enumerable.sol

pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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


// File contracts/tokens/IERC721Receiver.sol

pragma solidity ^0.8.0;

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


// File contracts/utils/introspection/ERC165.sol

pragma solidity ^0.8.0;

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


// File contracts/tokens/ERC721Holder.sol

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
 */
contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}


// File contracts/tokens/ERC721.sol


pragma solidity ^0.8.0;


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, ERC721Holder {
    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 {}
}


// File contracts/tokens/ERC721Enumerable.sol

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File contracts/tokens/IERC20.sol

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// File contracts/utils/Ownable.sol

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


// File contracts/uwucrew.sol

pragma solidity ^0.8.0;

/*
                  &(,    @%(,.                   @%(,.    &(*                   
     (%/,        @%(/,   @((*,       @#(*.       @%((,,  @%(/*        &#*,      
     @#(*.       @%(/*   @%((..     @&(((,.     @&((/*   @%(*.       @&(/,      
      @#(/.,, *&&#(//     @&(((///((((((((((//(((((((     @%(/.,, .&&#((//      
       @@%(((((((#%%         @@&%#%%&&   @@&%#%%&&&        @@&((((((((#%        
            %@(                                                 ,@@             
                     (/          ,       #(.     ,     .    ,                   
                 /&(%@@@%/   @((&@&   @##  @/,  &&,. @&*.  @(/                  
                 @%.         @**      @//%&&#    /&,/(#%&,#(/                   
                  @&(/(##(   @/*       @#*(##(    .@#/  @@((                    
                                                                                
                                                              
                             ,@     .(                                          
                         & ,@@#  (@@@@ ,( ,.       %#                           
                           @  ,,.@,                   @,                        
                       @  .,/                             @                     
                     (  .             @                 ,    #                  
                   @,  .   *         %                    @    %                
                 ,,,@     @              ,                 &    ,               
                *,,,     .        @   , .    @              %   ,,@             
                %,,&    ,/  #     ,@. , .    (@         &   @   *,,@            
               *,,,,    ,,  @     *.@  ...   @.#, &     /   *  ,,,,,            
              @,,,,,@   ,@@       @.../, &   *...@,* @  @  @, .,&,,,@           
              *,/.,,,&  ,@*& ((    .....,*(   *...#@ @ @, %&, ,,@,,,@           
              ,,@,@ ,,.@ ,@  @  @  @......@.@.%,.@.@@,@@@@,,,,,@,,,,@           
              ,,&,,,  .,@(. &(  @  @@.........#&@#  *   @@#,,,@,,,,,*           
             .,,/,,,  ,.#   (#&%(. ............ ##(##@  .%,(,@*@,,,,            
             .,,,,,,. @,,..@,%(#@ ............. ((# #  (@,,,,,%@.%,#            
             *,..#,.,%..,,,.........................,,,,,,,@,,@.@&,@            
             #,,@@, .,@%.............................,,,,..,,,*..*,@            
             @,,&&,  .(@..................................@, ..@,,,*            
             @,,#(.   /#@.............,/,..................  @,,,,,.            
            @@ @#(    &##@......./////&@@@&////@.........@   %,,,,,             
           ##, ###(.  &###@.......@/@/****(@////........@&   ,,,,@,/            
          @*# &###@.  @#####@........@******@.........@%# &  ,@,,/,,@           
         @,#@ ####&   @&#####%(/.................../###@@.  &,#@,,%*,*          
        %,##@ #####,  #&########@,@.............@######@/*  @(#@,,*@*,,&        
       ,,/#.# @###&%   (########@,,,,,,#@@@,,,,&#######@    @###(,,@ #,,/       
     @,,,#  .*  ##(&,   %###@##@@,,,,,,,,,,,,,,&&@@####%..  %####,,,@  &, *     
    @,,,&  # ,,@ .##@*   @&&&&&&,,,,,,,,,,,,,,,@@&&&&&&  ,% @#####,, @     @    
   ,,,,@  @  ,,*#(@ @(,@  .&&&@,,,,,,,,,,,,,,,,,@&&&&&&  , (@&&&&&@*  @   * ,   
 @,,,,   @*@&&&&&&&&.,@,,,&  @,,,,,,,,,,,...,,@&&&&&&&@@ (, @@ &@ @&@  @    &, 
*/



interface SaleContract { 
  function loadSale(uint256 saleCount, uint256 swapCount, uint256 lpCount) external;
}

contract uwucrew is Ownable, ERC721Enumerable {
  address public saleContract;
  address public extraContract;

  uint256 public immutable MAX_UWU;
  
  string public UWU_PROVENANCE = "";
  string public baseURI;

  mapping(uint256 => uint256) public lastTransferTimestamp;
  mapping(address => uint256) private pastCumulativeHODL;

  constructor(string memory _name, string memory _symbol, uint256 maxSupply) Ownable() ERC721(_name, _symbol) {
    MAX_UWU = maxSupply;
  }

  function mint(address to, uint256 tokenId) public virtual {
    require(msg.sender == saleContract || msg.sender == extraContract, "Nice try lol");
    _safeMint(to, tokenId);
  }

  function prepareSale(address _saleContract) public onlyOwner {
    require(saleContract == address(0));
    saleContract = _saleContract;
  }

  // Extra contract for helping BSC users bridge over.
  function setExtraContract(address _extraContract) public onlyOwner {
    require(extraContract == address(0));
    extraContract = _extraContract;
  }

  function renounceMinting() public onlyOwner {
    saleContract = address(0);
    extraContract = address(0);
  }

  /**
    * uwu for the team.
    */
  function reserveUWUS() public onlyOwner {        
    uint supply = totalSupply();
    for (uint256 i = 0; i < 50; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

  /*     
  * Set provenance once it's calculated
  */
  function setProvenanceHash(string memory provenanceHash) public onlyOwner {
    UWU_PROVENANCE = provenanceHash;
  }

  function setBaseURI(string memory newURI) public onlyOwner {
    baseURI = newURI;
  }

  function _safeMint(address to, uint256 tokenId) internal virtual override {
    // Ensure no matter what that someone cannot mint > supply.
    require(tokenId < MAX_UWU, "Max supply");
    super._safeMint(to, tokenId);
  }

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

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

    uint256 timeHodld = block.timestamp - lastTransferTimestamp[tokenId];
    if (from != address(0)) {
      pastCumulativeHODL[from] += timeHodld;
    }
    lastTransferTimestamp[tokenId] = block.timestamp;
  }

  function cumulativeHODL(address user) public view returns (uint256) {
    uint256 _cumulativeHODL = pastCumulativeHODL[user];
    uint256 bal = balanceOf(user);
    for (uint256 i = 0; i < bal; i++) {
      uint256 tokenId = tokenOfOwnerByIndex(user, i);
      uint256 timeHodld = block.timestamp - lastTransferTimestamp[tokenId];
      _cumulativeHODL += timeHodld;
    }
    return _cumulativeHODL;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_UWU","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UWU_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"cumulativeHODL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraContract","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"","type":"uint256"}],"name":"lastTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_saleContract","type":"address"}],"name":"prepareSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveUWUS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_extraContract","type":"address"}],"name":"setExtraContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405260405180602001604052806000815250600d90805190602001906200002b9291906200015e565b503480156200003957600080fd5b50604051620047a5380380620047a583398181016040528101906200005f919062000297565b82826000620000736200015660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508160019080519060200190620001299291906200015e565b508060029080519060200190620001429291906200015e565b5050508060808181525050505050620004b3565b600033905090565b8280546200016c90620003be565b90600052602060002090601f016020900481019282620001905760008555620001dc565b82601f10620001ab57805160ff1916838001178555620001dc565b82800160010185558215620001dc579182015b82811115620001db578251825591602001919060010190620001be565b5b509050620001eb9190620001ef565b5090565b5b808211156200020a576000816000905550600101620001f0565b5090565b6000620002256200021f8462000348565b6200031f565b9050828152602081018484840111156200023e57600080fd5b6200024b84828562000388565b509392505050565b600082601f8301126200026557600080fd5b8151620002778482602086016200020e565b91505092915050565b600081519050620002918162000499565b92915050565b600080600060608486031215620002ad57600080fd5b600084015167ffffffffffffffff811115620002c857600080fd5b620002d68682870162000253565b935050602084015167ffffffffffffffff811115620002f457600080fd5b620003028682870162000253565b9250506040620003158682870162000280565b9150509250925092565b60006200032b6200033e565b9050620003398282620003f4565b919050565b6000604051905090565b600067ffffffffffffffff82111562000366576200036562000459565b5b620003718262000488565b9050602081019050919050565b6000819050919050565b60005b83811015620003a85780820151818401526020810190506200038b565b83811115620003b8576000848401525b50505050565b60006002820490506001821680620003d757607f821691505b60208210811415620003ee57620003ed6200042a565b5b50919050565b620003ff8262000488565b810181811067ffffffffffffffff8211171562000421576200042062000459565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620004a4816200037e565b8114620004b057600080fd5b50565b6080516142cf620004d66000396000818161194201526120ec01526142cf6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80636c0360eb1161011a578063b88d4fde116100ad578063d3bab9481161007c578063d3bab948146105e9578063daf6ca30146105f3578063dd1a29f314610611578063e985e9c51461062f578063f2fde38b1461065f57610206565b8063b88d4fde14610563578063c5d67d541461057f578063c87b56dd1461059b578063ce66440b146105cb57610206565b806395d89b41116100e957806395d89b41146104c95780639d7c828b146104e7578063a22cb46514610517578063a903894d1461053357610206565b80636c0360eb1461045357806370a0823114610471578063715018a6146104a15780638da5cb5b146104ab57610206565b806323b872dd1161019d5780634f6ccce71161016c5780634f6ccce7146103b1578063510ffc9b146103e157806355f804b3146103eb578063597d8653146104075780636352211e1461042357610206565b806323b872dd1461032d5780632f745c591461034957806340c10f191461037957806342842e0e1461039557610206565b806310969523116101d957806310969523146102a5578063150b7a02146102c157806318160ddd146102f157806320adb2681461030f57610206565b806301ffc9a71461020b57806306fdde031461023b578063081812fc14610259578063095ea7b314610289575b600080fd5b6102256004803603810190610220919061313b565b61067b565b604051610232919061361d565b60405180910390f35b6102436106f5565b6040516102509190613653565b60405180910390f35b610273600480360381019061026e91906131ce565b610787565b60405161028091906135b6565b60405180910390f35b6102a3600480360381019061029e91906130ff565b61080c565b005b6102bf60048036038101906102ba919061318d565b610924565b005b6102db60048036038101906102d69190613048565b6109ba565b6040516102e89190613638565b60405180910390f35b6102f96109ce565b60405161030691906138f5565b60405180910390f35b6103176109db565b6040516103249190613653565b60405180910390f35b61034760048036038101906103429190612ff9565b610a69565b005b610363600480360381019061035e91906130ff565b610ac9565b60405161037091906138f5565b60405180910390f35b610393600480360381019061038e91906130ff565b610b6e565b005b6103af60048036038101906103aa9190612ff9565b610c64565b005b6103cb60048036038101906103c691906131ce565b610c84565b6040516103d891906138f5565b60405180910390f35b6103e9610d1b565b005b6104056004803603810190610400919061318d565b610e1d565b005b610421600480360381019061041c9190612f94565b610eb3565b005b61043d600480360381019061043891906131ce565b610fce565b60405161044a91906135b6565b60405180910390f35b61045b611080565b6040516104689190613653565b60405180910390f35b61048b60048036038101906104869190612f94565b61110e565b60405161049891906138f5565b60405180910390f35b6104a96111c6565b005b6104b3611300565b6040516104c091906135b6565b60405180910390f35b6104d1611329565b6040516104de9190613653565b60405180910390f35b61050160048036038101906104fc91906131ce565b6113bb565b60405161050e91906138f5565b60405180910390f35b610531600480360381019061052c91906130c3565b6113d3565b005b61054d60048036038101906105489190612f94565b611554565b60405161055a91906138f5565b60405180910390f35b61057d60048036038101906105789190613048565b611610565b005b61059960048036038101906105949190612f94565b611672565b005b6105b560048036038101906105b091906131ce565b61178d565b6040516105c29190613653565b60405180910390f35b6105d3611834565b6040516105e091906135b6565b60405180910390f35b6105f161185a565b005b6105fb61191a565b60405161060891906135b6565b60405180910390f35b610619611940565b60405161062691906138f5565b60405180910390f35b61064960048036038101906106449190612fbd565b611964565b604051610656919061361d565b60405180910390f35b61067960048036038101906106749190612f94565b6119f8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ee57506106ed82611ba1565b5b9050919050565b60606001805461070490613b4b565b80601f016020809104026020016040519081016040528092919081815260200182805461073090613b4b565b801561077d5780601f106107525761010080835404028352916020019161077d565b820191906000526020600020905b81548152906001019060200180831161076057829003601f168201915b5050505050905090565b600061079282611c83565b6107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c8906137f5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061081782610fce565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f90613875565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108a7611cef565b73ffffffffffffffffffffffffffffffffffffffff1614806108d657506108d5816108d0611cef565b611964565b5b610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c90613775565b60405180910390fd5b61091f8383611cf7565b505050565b61092c611cef565b73ffffffffffffffffffffffffffffffffffffffff1661094a611300565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790613815565b60405180910390fd5b80600d90805190602001906109b6929190612db8565b5050565b600063150b7a0260e01b9050949350505050565b6000600980549050905090565b600d80546109e890613b4b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613b4b565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b505050505081565b610a7a610a74611cef565b82611db0565b610ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab090613895565b60405180910390fd5b610ac4838383611e8e565b505050565b6000610ad48361110e565b8210610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90613675565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c175750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d906138d5565b60405180910390fd5b610c6082826120ea565b5050565b610c7f83838360405180602001604052806000815250611610565b505050565b6000610c8e6109ce565b8210610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906138b5565b60405180910390fd5b60098281548110610d09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d23611cef565b73ffffffffffffffffffffffffffffffffffffffff16610d41611300565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613815565b60405180910390fd5b6000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610e25611cef565b73ffffffffffffffffffffffffffffffffffffffff16610e43611300565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613815565b60405180910390fd5b80600e9080519060200190610eaf929190612db8565b5050565b610ebb611cef565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611300565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8a57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e906137b5565b60405180910390fd5b80915050919050565b600e805461108d90613b4b565b80601f01602080910402602001604051908101604052809291908181526020018280546110b990613b4b565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690613795565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ce611cef565b73ffffffffffffffffffffffffffffffffffffffff166111ec611300565b73ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461133890613b4b565b80601f016020809104026020016040519081016040528092919081815260200182805461136490613b4b565b80156113b15780601f10611386576101008083540402835291602001916113b1565b820191906000526020600020905b81548152906001019060200180831161139457829003601f168201915b5050505050905090565b600f6020528060005260406000206000915090505481565b6113db611cef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613715565b60405180910390fd5b8060066000611456611cef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611503611cef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611548919061361d565b60405180910390a35050565b600080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006115a48461110e565b905060005b818110156116055760006115bd8683610ac9565b90506000600f600083815260200190815260200160002054426115e09190613a61565b905080856115ee91906139da565b9450505080806115fd90613bae565b9150506115a9565b508192505050919050565b61162161161b611cef565b83611db0565b611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613895565b60405180910390fd5b61166c8484848461215a565b50505050565b61167a611cef565b73ffffffffffffffffffffffffffffffffffffffff16611698611300565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174957600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606061179882611c83565b6117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90613855565b60405180910390fd5b60006117e16121b6565b90506000815111611801576040518060200160405280600081525061182c565b8061180b84612248565b60405160200161181c929190613592565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611862611cef565b73ffffffffffffffffffffffffffffffffffffffff16611880611300565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613815565b60405180910390fd5b60006118e06109ce565b905060005b6032811015611916576119033382846118fe91906139da565b6120ea565b808061190e90613bae565b9150506118e5565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a00611cef565b73ffffffffffffffffffffffffffffffffffffffff16611a1e611300565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb906136b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c6c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c7c5750611c7b826123f5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6a83610fce565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dbb82611c83565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613735565b60405180910390fd5b6000611e0583610fce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7457508373ffffffffffffffffffffffffffffffffffffffff16611e5c84610787565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e855750611e848185611964565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eae82610fce565b73ffffffffffffffffffffffffffffffffffffffff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613835565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b906136f5565b60405180910390fd5b611f7f83838361245f565b611f8a600082611cf7565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fda9190613a61565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203191906139da565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b7f0000000000000000000000000000000000000000000000000000000000000000811061214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613755565b60405180910390fd5b6121568282612536565b5050565b612165848484611e8e565b61217184848484612554565b6121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a790613695565b60405180910390fd5b50505050565b6060600e80546121c590613b4b565b80601f01602080910402602001604051908101604052809291908181526020018280546121f190613b4b565b801561223e5780601f106122135761010080835404028352916020019161223e565b820191906000526020600020905b81548152906001019060200180831161222157829003601f168201915b5050505050905090565b60606000821415612290576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123f0565b600082905060005b600082146122c25780806122ab90613bae565b915050600a826122bb9190613a30565b9150612298565b60008167ffffffffffffffff811115612304577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123365781602001600182028036833780820191505090505b5090505b600085146123e95760018261234f9190613a61565b9150600a8561235e9190613bf7565b603061236a91906139da565b60f81b8183815181106123a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123e29190613a30565b945061233a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61246a8383836126eb565b6000600f6000838152602001908152602001600020544261248b9190613a61565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146125185780601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251091906139da565b925050819055505b42600f60008481526020019081526020016000208190555050505050565b6125508282604051806020016040528060008152506127ff565b5050565b60006125758473ffffffffffffffffffffffffffffffffffffffff1661285a565b156126de578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261259e611cef565b8786866040518563ffffffff1660e01b81526004016125c094939291906135d1565b602060405180830381600087803b1580156125da57600080fd5b505af192505050801561260b57506040513d601f19601f820116820180604052508101906126089190613164565b60015b61268e573d806000811461263b576040519150601f19603f3d011682016040523d82523d6000602084013e612640565b606091505b50600081511415612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90613695565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126e3565b600190505b949350505050565b6126f683838361286d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127395761273481612872565b612778565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127775761277683826128bb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127bb576127b681612a28565b6127fa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127f9576127f88282612b6b565b5b5b505050565b6128098383612bea565b6128166000848484612554565b612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90613695565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016128c88461110e565b6128d29190613a61565b90506000600860008481526020019081526020016000205490508181146129b7576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612a3c9190613a61565b90506000600a6000848152602001908152602001600020549050600060098381548110612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612ada577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612b4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612b768361110e565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c51906137d5565b60405180910390fd5b612c6381611c83565b15612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a906136d5565b60405180910390fd5b612caf6000838361245f565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cff91906139da565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612dc490613b4b565b90600052602060002090601f016020900481019282612de65760008555612e2d565b82601f10612dff57805160ff1916838001178555612e2d565b82800160010185558215612e2d579182015b82811115612e2c578251825591602001919060010190612e11565b5b509050612e3a9190612e3e565b5090565b5b80821115612e57576000816000905550600101612e3f565b5090565b6000612e6e612e6984613935565b613910565b905082815260208101848484011115612e8657600080fd5b612e91848285613b09565b509392505050565b6000612eac612ea784613966565b613910565b905082815260208101848484011115612ec457600080fd5b612ecf848285613b09565b509392505050565b600081359050612ee68161423d565b92915050565b600081359050612efb81614254565b92915050565b600081359050612f108161426b565b92915050565b600081519050612f258161426b565b92915050565b600082601f830112612f3c57600080fd5b8135612f4c848260208601612e5b565b91505092915050565b600082601f830112612f6657600080fd5b8135612f76848260208601612e99565b91505092915050565b600081359050612f8e81614282565b92915050565b600060208284031215612fa657600080fd5b6000612fb484828501612ed7565b91505092915050565b60008060408385031215612fd057600080fd5b6000612fde85828601612ed7565b9250506020612fef85828601612ed7565b9150509250929050565b60008060006060848603121561300e57600080fd5b600061301c86828701612ed7565b935050602061302d86828701612ed7565b925050604061303e86828701612f7f565b9150509250925092565b6000806000806080858703121561305e57600080fd5b600061306c87828801612ed7565b945050602061307d87828801612ed7565b935050604061308e87828801612f7f565b925050606085013567ffffffffffffffff8111156130ab57600080fd5b6130b787828801612f2b565b91505092959194509250565b600080604083850312156130d657600080fd5b60006130e485828601612ed7565b92505060206130f585828601612eec565b9150509250929050565b6000806040838503121561311257600080fd5b600061312085828601612ed7565b925050602061313185828601612f7f565b9150509250929050565b60006020828403121561314d57600080fd5b600061315b84828501612f01565b91505092915050565b60006020828403121561317657600080fd5b600061318484828501612f16565b91505092915050565b60006020828403121561319f57600080fd5b600082013567ffffffffffffffff8111156131b957600080fd5b6131c584828501612f55565b91505092915050565b6000602082840312156131e057600080fd5b60006131ee84828501612f7f565b91505092915050565b61320081613a95565b82525050565b61320f81613aa7565b82525050565b61321e81613ab3565b82525050565b600061322f82613997565b61323981856139ad565b9350613249818560208601613b18565b61325281613ce4565b840191505092915050565b6000613268826139a2565b61327281856139be565b9350613282818560208601613b18565b61328b81613ce4565b840191505092915050565b60006132a1826139a2565b6132ab81856139cf565b93506132bb818560208601613b18565b80840191505092915050565b60006132d4602b836139be565b91506132df82613cf5565b604082019050919050565b60006132f76032836139be565b915061330282613d44565b604082019050919050565b600061331a6026836139be565b915061332582613d93565b604082019050919050565b600061333d601c836139be565b915061334882613de2565b602082019050919050565b60006133606024836139be565b915061336b82613e0b565b604082019050919050565b60006133836019836139be565b915061338e82613e5a565b602082019050919050565b60006133a6602c836139be565b91506133b182613e83565b604082019050919050565b60006133c9600a836139be565b91506133d482613ed2565b602082019050919050565b60006133ec6038836139be565b91506133f782613efb565b604082019050919050565b600061340f602a836139be565b915061341a82613f4a565b604082019050919050565b60006134326029836139be565b915061343d82613f99565b604082019050919050565b60006134556020836139be565b915061346082613fe8565b602082019050919050565b6000613478602c836139be565b915061348382614011565b604082019050919050565b600061349b6020836139be565b91506134a682614060565b602082019050919050565b60006134be6029836139be565b91506134c982614089565b604082019050919050565b60006134e1602f836139be565b91506134ec826140d8565b604082019050919050565b60006135046021836139be565b915061350f82614127565b604082019050919050565b60006135276031836139be565b915061353282614176565b604082019050919050565b600061354a602c836139be565b9150613555826141c5565b604082019050919050565b600061356d600c836139be565b915061357882614214565b602082019050919050565b61358c81613aff565b82525050565b600061359e8285613296565b91506135aa8284613296565b91508190509392505050565b60006020820190506135cb60008301846131f7565b92915050565b60006080820190506135e660008301876131f7565b6135f360208301866131f7565b6136006040830185613583565b81810360608301526136128184613224565b905095945050505050565b60006020820190506136326000830184613206565b92915050565b600060208201905061364d6000830184613215565b92915050565b6000602082019050818103600083015261366d818461325d565b905092915050565b6000602082019050818103600083015261368e816132c7565b9050919050565b600060208201905081810360008301526136ae816132ea565b9050919050565b600060208201905081810360008301526136ce8161330d565b9050919050565b600060208201905081810360008301526136ee81613330565b9050919050565b6000602082019050818103600083015261370e81613353565b9050919050565b6000602082019050818103600083015261372e81613376565b9050919050565b6000602082019050818103600083015261374e81613399565b9050919050565b6000602082019050818103600083015261376e816133bc565b9050919050565b6000602082019050818103600083015261378e816133df565b9050919050565b600060208201905081810360008301526137ae81613402565b9050919050565b600060208201905081810360008301526137ce81613425565b9050919050565b600060208201905081810360008301526137ee81613448565b9050919050565b6000602082019050818103600083015261380e8161346b565b9050919050565b6000602082019050818103600083015261382e8161348e565b9050919050565b6000602082019050818103600083015261384e816134b1565b9050919050565b6000602082019050818103600083015261386e816134d4565b9050919050565b6000602082019050818103600083015261388e816134f7565b9050919050565b600060208201905081810360008301526138ae8161351a565b9050919050565b600060208201905081810360008301526138ce8161353d565b9050919050565b600060208201905081810360008301526138ee81613560565b9050919050565b600060208201905061390a6000830184613583565b92915050565b600061391a61392b565b90506139268282613b7d565b919050565b6000604051905090565b600067ffffffffffffffff8211156139505761394f613cb5565b5b61395982613ce4565b9050602081019050919050565b600067ffffffffffffffff82111561398157613980613cb5565b5b61398a82613ce4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139e582613aff565b91506139f083613aff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a2557613a24613c28565b5b828201905092915050565b6000613a3b82613aff565b9150613a4683613aff565b925082613a5657613a55613c57565b5b828204905092915050565b6000613a6c82613aff565b9150613a7783613aff565b925082821015613a8a57613a89613c28565b5b828203905092915050565b6000613aa082613adf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b36578082015181840152602081019050613b1b565b83811115613b45576000848401525b50505050565b60006002820490506001821680613b6357607f821691505b60208210811415613b7757613b76613c86565b5b50919050565b613b8682613ce4565b810181811067ffffffffffffffff82111715613ba557613ba4613cb5565b5b80604052505050565b6000613bb982613aff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bec57613beb613c28565b5b600182019050919050565b6000613c0282613aff565b9150613c0d83613aff565b925082613c1d57613c1c613c57565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7900000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e69636520747279206c6f6c0000000000000000000000000000000000000000600082015250565b61424681613a95565b811461425157600080fd5b50565b61425d81613aa7565b811461426857600080fd5b50565b61427481613ab3565b811461427f57600080fd5b50565b61428b81613aff565b811461429657600080fd5b5056fea26469706673582212206094a7e384018b3badf9b5bd1c8025a20b13903f96ae0b429005c2a9850cfac264736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000025c60000000000000000000000000000000000000000000000000000000000000007757775637265770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035557550000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c80636c0360eb1161011a578063b88d4fde116100ad578063d3bab9481161007c578063d3bab948146105e9578063daf6ca30146105f3578063dd1a29f314610611578063e985e9c51461062f578063f2fde38b1461065f57610206565b8063b88d4fde14610563578063c5d67d541461057f578063c87b56dd1461059b578063ce66440b146105cb57610206565b806395d89b41116100e957806395d89b41146104c95780639d7c828b146104e7578063a22cb46514610517578063a903894d1461053357610206565b80636c0360eb1461045357806370a0823114610471578063715018a6146104a15780638da5cb5b146104ab57610206565b806323b872dd1161019d5780634f6ccce71161016c5780634f6ccce7146103b1578063510ffc9b146103e157806355f804b3146103eb578063597d8653146104075780636352211e1461042357610206565b806323b872dd1461032d5780632f745c591461034957806340c10f191461037957806342842e0e1461039557610206565b806310969523116101d957806310969523146102a5578063150b7a02146102c157806318160ddd146102f157806320adb2681461030f57610206565b806301ffc9a71461020b57806306fdde031461023b578063081812fc14610259578063095ea7b314610289575b600080fd5b6102256004803603810190610220919061313b565b61067b565b604051610232919061361d565b60405180910390f35b6102436106f5565b6040516102509190613653565b60405180910390f35b610273600480360381019061026e91906131ce565b610787565b60405161028091906135b6565b60405180910390f35b6102a3600480360381019061029e91906130ff565b61080c565b005b6102bf60048036038101906102ba919061318d565b610924565b005b6102db60048036038101906102d69190613048565b6109ba565b6040516102e89190613638565b60405180910390f35b6102f96109ce565b60405161030691906138f5565b60405180910390f35b6103176109db565b6040516103249190613653565b60405180910390f35b61034760048036038101906103429190612ff9565b610a69565b005b610363600480360381019061035e91906130ff565b610ac9565b60405161037091906138f5565b60405180910390f35b610393600480360381019061038e91906130ff565b610b6e565b005b6103af60048036038101906103aa9190612ff9565b610c64565b005b6103cb60048036038101906103c691906131ce565b610c84565b6040516103d891906138f5565b60405180910390f35b6103e9610d1b565b005b6104056004803603810190610400919061318d565b610e1d565b005b610421600480360381019061041c9190612f94565b610eb3565b005b61043d600480360381019061043891906131ce565b610fce565b60405161044a91906135b6565b60405180910390f35b61045b611080565b6040516104689190613653565b60405180910390f35b61048b60048036038101906104869190612f94565b61110e565b60405161049891906138f5565b60405180910390f35b6104a96111c6565b005b6104b3611300565b6040516104c091906135b6565b60405180910390f35b6104d1611329565b6040516104de9190613653565b60405180910390f35b61050160048036038101906104fc91906131ce565b6113bb565b60405161050e91906138f5565b60405180910390f35b610531600480360381019061052c91906130c3565b6113d3565b005b61054d60048036038101906105489190612f94565b611554565b60405161055a91906138f5565b60405180910390f35b61057d60048036038101906105789190613048565b611610565b005b61059960048036038101906105949190612f94565b611672565b005b6105b560048036038101906105b091906131ce565b61178d565b6040516105c29190613653565b60405180910390f35b6105d3611834565b6040516105e091906135b6565b60405180910390f35b6105f161185a565b005b6105fb61191a565b60405161060891906135b6565b60405180910390f35b610619611940565b60405161062691906138f5565b60405180910390f35b61064960048036038101906106449190612fbd565b611964565b604051610656919061361d565b60405180910390f35b61067960048036038101906106749190612f94565b6119f8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ee57506106ed82611ba1565b5b9050919050565b60606001805461070490613b4b565b80601f016020809104026020016040519081016040528092919081815260200182805461073090613b4b565b801561077d5780601f106107525761010080835404028352916020019161077d565b820191906000526020600020905b81548152906001019060200180831161076057829003601f168201915b5050505050905090565b600061079282611c83565b6107d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c8906137f5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061081782610fce565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f90613875565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108a7611cef565b73ffffffffffffffffffffffffffffffffffffffff1614806108d657506108d5816108d0611cef565b611964565b5b610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c90613775565b60405180910390fd5b61091f8383611cf7565b505050565b61092c611cef565b73ffffffffffffffffffffffffffffffffffffffff1661094a611300565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790613815565b60405180910390fd5b80600d90805190602001906109b6929190612db8565b5050565b600063150b7a0260e01b9050949350505050565b6000600980549050905090565b600d80546109e890613b4b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1490613b4b565b8015610a615780601f10610a3657610100808354040283529160200191610a61565b820191906000526020600020905b815481529060010190602001808311610a4457829003601f168201915b505050505081565b610a7a610a74611cef565b82611db0565b610ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab090613895565b60405180910390fd5b610ac4838383611e8e565b505050565b6000610ad48361110e565b8210610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90613675565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c175750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d906138d5565b60405180910390fd5b610c6082826120ea565b5050565b610c7f83838360405180602001604052806000815250611610565b505050565b6000610c8e6109ce565b8210610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc6906138b5565b60405180910390fd5b60098281548110610d09577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d23611cef565b73ffffffffffffffffffffffffffffffffffffffff16610d41611300565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90613815565b60405180910390fd5b6000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610e25611cef565b73ffffffffffffffffffffffffffffffffffffffff16610e43611300565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613815565b60405180910390fd5b80600e9080519060200190610eaf929190612db8565b5050565b610ebb611cef565b73ffffffffffffffffffffffffffffffffffffffff16610ed9611300565b73ffffffffffffffffffffffffffffffffffffffff1614610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8a57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e906137b5565b60405180910390fd5b80915050919050565b600e805461108d90613b4b565b80601f01602080910402602001604051908101604052809291908181526020018280546110b990613b4b565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561117f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117690613795565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ce611cef565b73ffffffffffffffffffffffffffffffffffffffff166111ec611300565b73ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461133890613b4b565b80601f016020809104026020016040519081016040528092919081815260200182805461136490613b4b565b80156113b15780601f10611386576101008083540402835291602001916113b1565b820191906000526020600020905b81548152906001019060200180831161139457829003601f168201915b5050505050905090565b600f6020528060005260406000206000915090505481565b6113db611cef565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090613715565b60405180910390fd5b8060066000611456611cef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611503611cef565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611548919061361d565b60405180910390a35050565b600080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006115a48461110e565b905060005b818110156116055760006115bd8683610ac9565b90506000600f600083815260200190815260200160002054426115e09190613a61565b905080856115ee91906139da565b9450505080806115fd90613bae565b9150506115a9565b508192505050919050565b61162161161b611cef565b83611db0565b611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613895565b60405180910390fd5b61166c8484848461215a565b50505050565b61167a611cef565b73ffffffffffffffffffffffffffffffffffffffff16611698611300565b73ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461174957600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606061179882611c83565b6117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90613855565b60405180910390fd5b60006117e16121b6565b90506000815111611801576040518060200160405280600081525061182c565b8061180b84612248565b60405160200161181c929190613592565b6040516020818303038152906040525b915050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611862611cef565b73ffffffffffffffffffffffffffffffffffffffff16611880611300565b73ffffffffffffffffffffffffffffffffffffffff16146118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613815565b60405180910390fd5b60006118e06109ce565b905060005b6032811015611916576119033382846118fe91906139da565b6120ea565b808061190e90613bae565b9150506118e5565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000025c681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a00611cef565b73ffffffffffffffffffffffffffffffffffffffff16611a1e611300565b73ffffffffffffffffffffffffffffffffffffffff1614611a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6b90613815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb906136b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c6c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c7c5750611c7b826123f5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6a83610fce565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611dbb82611c83565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190613735565b60405180910390fd5b6000611e0583610fce565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7457508373ffffffffffffffffffffffffffffffffffffffff16611e5c84610787565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e855750611e848185611964565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eae82610fce565b73ffffffffffffffffffffffffffffffffffffffff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613835565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b906136f5565b60405180910390fd5b611f7f83838361245f565b611f8a600082611cf7565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fda9190613a61565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203191906139da565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b7f00000000000000000000000000000000000000000000000000000000000025c6811061214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390613755565b60405180910390fd5b6121568282612536565b5050565b612165848484611e8e565b61217184848484612554565b6121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a790613695565b60405180910390fd5b50505050565b6060600e80546121c590613b4b565b80601f01602080910402602001604051908101604052809291908181526020018280546121f190613b4b565b801561223e5780601f106122135761010080835404028352916020019161223e565b820191906000526020600020905b81548152906001019060200180831161222157829003601f168201915b5050505050905090565b60606000821415612290576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123f0565b600082905060005b600082146122c25780806122ab90613bae565b915050600a826122bb9190613a30565b9150612298565b60008167ffffffffffffffff811115612304577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123365781602001600182028036833780820191505090505b5090505b600085146123e95760018261234f9190613a61565b9150600a8561235e9190613bf7565b603061236a91906139da565b60f81b8183815181106123a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123e29190613a30565b945061233a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61246a8383836126eb565b6000600f6000838152602001908152602001600020544261248b9190613a61565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146125185780601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251091906139da565b925050819055505b42600f60008481526020019081526020016000208190555050505050565b6125508282604051806020016040528060008152506127ff565b5050565b60006125758473ffffffffffffffffffffffffffffffffffffffff1661285a565b156126de578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261259e611cef565b8786866040518563ffffffff1660e01b81526004016125c094939291906135d1565b602060405180830381600087803b1580156125da57600080fd5b505af192505050801561260b57506040513d601f19601f820116820180604052508101906126089190613164565b60015b61268e573d806000811461263b576040519150601f19603f3d011682016040523d82523d6000602084013e612640565b606091505b50600081511415612686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267d90613695565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126e3565b600190505b949350505050565b6126f683838361286d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127395761273481612872565b612778565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127775761277683826128bb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127bb576127b681612a28565b6127fa565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127f9576127f88282612b6b565b5b5b505050565b6128098383612bea565b6128166000848484612554565b612855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284c90613695565b60405180910390fd5b505050565b600080823b905060008111915050919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016128c88461110e565b6128d29190613a61565b90506000600860008481526020019081526020016000205490508181146129b7576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612a3c9190613a61565b90506000600a6000848152602001908152602001600020549050600060098381548110612a92577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612ada577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612b4f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612b768361110e565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c51906137d5565b60405180910390fd5b612c6381611c83565b15612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a906136d5565b60405180910390fd5b612caf6000838361245f565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cff91906139da565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612dc490613b4b565b90600052602060002090601f016020900481019282612de65760008555612e2d565b82601f10612dff57805160ff1916838001178555612e2d565b82800160010185558215612e2d579182015b82811115612e2c578251825591602001919060010190612e11565b5b509050612e3a9190612e3e565b5090565b5b80821115612e57576000816000905550600101612e3f565b5090565b6000612e6e612e6984613935565b613910565b905082815260208101848484011115612e8657600080fd5b612e91848285613b09565b509392505050565b6000612eac612ea784613966565b613910565b905082815260208101848484011115612ec457600080fd5b612ecf848285613b09565b509392505050565b600081359050612ee68161423d565b92915050565b600081359050612efb81614254565b92915050565b600081359050612f108161426b565b92915050565b600081519050612f258161426b565b92915050565b600082601f830112612f3c57600080fd5b8135612f4c848260208601612e5b565b91505092915050565b600082601f830112612f6657600080fd5b8135612f76848260208601612e99565b91505092915050565b600081359050612f8e81614282565b92915050565b600060208284031215612fa657600080fd5b6000612fb484828501612ed7565b91505092915050565b60008060408385031215612fd057600080fd5b6000612fde85828601612ed7565b9250506020612fef85828601612ed7565b9150509250929050565b60008060006060848603121561300e57600080fd5b600061301c86828701612ed7565b935050602061302d86828701612ed7565b925050604061303e86828701612f7f565b9150509250925092565b6000806000806080858703121561305e57600080fd5b600061306c87828801612ed7565b945050602061307d87828801612ed7565b935050604061308e87828801612f7f565b925050606085013567ffffffffffffffff8111156130ab57600080fd5b6130b787828801612f2b565b91505092959194509250565b600080604083850312156130d657600080fd5b60006130e485828601612ed7565b92505060206130f585828601612eec565b9150509250929050565b6000806040838503121561311257600080fd5b600061312085828601612ed7565b925050602061313185828601612f7f565b9150509250929050565b60006020828403121561314d57600080fd5b600061315b84828501612f01565b91505092915050565b60006020828403121561317657600080fd5b600061318484828501612f16565b91505092915050565b60006020828403121561319f57600080fd5b600082013567ffffffffffffffff8111156131b957600080fd5b6131c584828501612f55565b91505092915050565b6000602082840312156131e057600080fd5b60006131ee84828501612f7f565b91505092915050565b61320081613a95565b82525050565b61320f81613aa7565b82525050565b61321e81613ab3565b82525050565b600061322f82613997565b61323981856139ad565b9350613249818560208601613b18565b61325281613ce4565b840191505092915050565b6000613268826139a2565b61327281856139be565b9350613282818560208601613b18565b61328b81613ce4565b840191505092915050565b60006132a1826139a2565b6132ab81856139cf565b93506132bb818560208601613b18565b80840191505092915050565b60006132d4602b836139be565b91506132df82613cf5565b604082019050919050565b60006132f76032836139be565b915061330282613d44565b604082019050919050565b600061331a6026836139be565b915061332582613d93565b604082019050919050565b600061333d601c836139be565b915061334882613de2565b602082019050919050565b60006133606024836139be565b915061336b82613e0b565b604082019050919050565b60006133836019836139be565b915061338e82613e5a565b602082019050919050565b60006133a6602c836139be565b91506133b182613e83565b604082019050919050565b60006133c9600a836139be565b91506133d482613ed2565b602082019050919050565b60006133ec6038836139be565b91506133f782613efb565b604082019050919050565b600061340f602a836139be565b915061341a82613f4a565b604082019050919050565b60006134326029836139be565b915061343d82613f99565b604082019050919050565b60006134556020836139be565b915061346082613fe8565b602082019050919050565b6000613478602c836139be565b915061348382614011565b604082019050919050565b600061349b6020836139be565b91506134a682614060565b602082019050919050565b60006134be6029836139be565b91506134c982614089565b604082019050919050565b60006134e1602f836139be565b91506134ec826140d8565b604082019050919050565b60006135046021836139be565b915061350f82614127565b604082019050919050565b60006135276031836139be565b915061353282614176565b604082019050919050565b600061354a602c836139be565b9150613555826141c5565b604082019050919050565b600061356d600c836139be565b915061357882614214565b602082019050919050565b61358c81613aff565b82525050565b600061359e8285613296565b91506135aa8284613296565b91508190509392505050565b60006020820190506135cb60008301846131f7565b92915050565b60006080820190506135e660008301876131f7565b6135f360208301866131f7565b6136006040830185613583565b81810360608301526136128184613224565b905095945050505050565b60006020820190506136326000830184613206565b92915050565b600060208201905061364d6000830184613215565b92915050565b6000602082019050818103600083015261366d818461325d565b905092915050565b6000602082019050818103600083015261368e816132c7565b9050919050565b600060208201905081810360008301526136ae816132ea565b9050919050565b600060208201905081810360008301526136ce8161330d565b9050919050565b600060208201905081810360008301526136ee81613330565b9050919050565b6000602082019050818103600083015261370e81613353565b9050919050565b6000602082019050818103600083015261372e81613376565b9050919050565b6000602082019050818103600083015261374e81613399565b9050919050565b6000602082019050818103600083015261376e816133bc565b9050919050565b6000602082019050818103600083015261378e816133df565b9050919050565b600060208201905081810360008301526137ae81613402565b9050919050565b600060208201905081810360008301526137ce81613425565b9050919050565b600060208201905081810360008301526137ee81613448565b9050919050565b6000602082019050818103600083015261380e8161346b565b9050919050565b6000602082019050818103600083015261382e8161348e565b9050919050565b6000602082019050818103600083015261384e816134b1565b9050919050565b6000602082019050818103600083015261386e816134d4565b9050919050565b6000602082019050818103600083015261388e816134f7565b9050919050565b600060208201905081810360008301526138ae8161351a565b9050919050565b600060208201905081810360008301526138ce8161353d565b9050919050565b600060208201905081810360008301526138ee81613560565b9050919050565b600060208201905061390a6000830184613583565b92915050565b600061391a61392b565b90506139268282613b7d565b919050565b6000604051905090565b600067ffffffffffffffff8211156139505761394f613cb5565b5b61395982613ce4565b9050602081019050919050565b600067ffffffffffffffff82111561398157613980613cb5565b5b61398a82613ce4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006139e582613aff565b91506139f083613aff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a2557613a24613c28565b5b828201905092915050565b6000613a3b82613aff565b9150613a4683613aff565b925082613a5657613a55613c57565b5b828204905092915050565b6000613a6c82613aff565b9150613a7783613aff565b925082821015613a8a57613a89613c28565b5b828203905092915050565b6000613aa082613adf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b36578082015181840152602081019050613b1b565b83811115613b45576000848401525b50505050565b60006002820490506001821680613b6357607f821691505b60208210811415613b7757613b76613c86565b5b50919050565b613b8682613ce4565b810181811067ffffffffffffffff82111715613ba557613ba4613cb5565b5b80604052505050565b6000613bb982613aff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bec57613beb613c28565b5b600182019050919050565b6000613c0282613aff565b9150613c0d83613aff565b925082613c1d57613c1c613c57565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d617820737570706c7900000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e69636520747279206c6f6c0000000000000000000000000000000000000000600082015250565b61424681613a95565b811461425157600080fd5b50565b61425d81613aa7565b811461426857600080fd5b50565b61427481613ab3565b811461427f57600080fd5b50565b61428b81613aff565b811461429657600080fd5b5056fea26469706673582212206094a7e384018b3badf9b5bd1c8025a20b13903f96ae0b429005c2a9850cfac264736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000025c60000000000000000000000000000000000000000000000000000000000000007757775637265770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035557550000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): uwucrew
Arg [1] : _symbol (string): UWU
Arg [2] : maxSupply (uint256): 9670

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000025c6
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 7577756372657700000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5557550000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

50134:2828:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35306:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23234:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24793:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24316:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51582:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20762:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35946:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50293:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25683:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35614:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50627:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26093:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36136:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51180:115;;;:::i;:::-;;51706:88;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51021:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22928:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50331:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22658:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45961:148;;;:::i;:::-;;45310:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23403:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50359:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25086:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52546:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26349:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50815:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23578:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50217:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51341:177;;;:::i;:::-;;50185:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50252:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25452:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46264:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35306:224;35408:4;35447:35;35432:50;;;:11;:50;;;;:90;;;;35486:36;35510:11;35486:23;:36::i;:::-;35432:90;35425:97;;35306:224;;;:::o;23234:100::-;23288:13;23321:5;23314:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23234:100;:::o;24793:221::-;24869:7;24897:16;24905:7;24897;:16::i;:::-;24889:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24982:15;:24;24998:7;24982:24;;;;;;;;;;;;;;;;;;;;;24975:31;;24793:221;;;:::o;24316:411::-;24397:13;24413:23;24428:7;24413:14;:23::i;:::-;24397:39;;24461:5;24455:11;;:2;:11;;;;24447:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24555:5;24539:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24564:37;24581:5;24588:12;:10;:12::i;:::-;24564:16;:37::i;:::-;24539:62;24517:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24698:21;24707:2;24711:7;24698:8;:21::i;:::-;24316:411;;;:::o;51582:118::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51680:14:::1;51663;:31;;;;;;;;;;;;:::i;:::-;;51582:118:::0;:::o;20762:207::-;20905:6;20931:30;;;20924:37;;20762:207;;;;;;:::o;35946:113::-;36007:7;36034:10;:17;;;;36027:24;;35946:113;:::o;50293:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25683:339::-;25878:41;25897:12;:10;:12::i;:::-;25911:7;25878:18;:41::i;:::-;25870:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25986:28;25996:4;26002:2;26006:7;25986:9;:28::i;:::-;25683:339;;;:::o;35614:256::-;35711:7;35747:23;35764:5;35747:16;:23::i;:::-;35739:5;:31;35731:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35836:12;:19;35849:5;35836:19;;;;;;;;;;;;;;;:26;35856:5;35836:26;;;;;;;;;;;;35829:33;;35614:256;;;;:::o;50627:182::-;50714:12;;;;;;;;;;;50700:26;;:10;:26;;;:57;;;;50744:13;;;;;;;;;;;50730:27;;:10;:27;;;50700:57;50692:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;50781:22;50791:2;50795:7;50781:9;:22::i;:::-;50627:182;;:::o;26093:185::-;26231:39;26248:4;26254:2;26258:7;26231:39;;;;;;;;;;;;:16;:39::i;:::-;26093:185;;;:::o;36136:233::-;36211:7;36247:30;:28;:30::i;:::-;36239:5;:38;36231:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36344:10;36355:5;36344:17;;;;;;;;;;;;;;;;;;;;;;;;36337:24;;36136:233;;;:::o;51180:115::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51254:1:::1;51231:12;;:25;;;;;;;;;;;;;;;;;;51287:1;51263:13;;:26;;;;;;;;;;;;;;;;;;51180:115::o:0;51706:88::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51782:6:::1;51772:7;:16;;;;;;;;;;;;:::i;:::-;;51706:88:::0;:::o;51021:153::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51128:1:::1;51103:27;;:13;;;;;;;;;;;:27;;;51095:36;;;::::0;::::1;;51154:14;51138:13;;:30;;;;;;;;;;;;;;;;;;51021:153:::0;:::o;22928:239::-;23000:7;23020:13;23036:7;:16;23044:7;23036:16;;;;;;;;;;;;;;;;;;;;;23020:32;;23088:1;23071:19;;:5;:19;;;;23063:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23154:5;23147:12;;;22928:239;;;:::o;50331:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22658:208::-;22730:7;22775:1;22758:19;;:5;:19;;;;22750:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22842:9;:16;22852:5;22842:16;;;;;;;;;;;;;;;;22835:23;;22658:208;;;:::o;45961:148::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46068:1:::1;46031:40;;46052:6;::::0;::::1;;;;;;;;46031:40;;;;;;;;;;;;46099:1;46082:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;45961:148::o:0;45310:87::-;45356:7;45383:6;;;;;;;;;;;45376:13;;45310:87;:::o;23403:104::-;23459:13;23492:7;23485:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23403:104;:::o;50359:56::-;;;;;;;;;;;;;;;;;:::o;25086:295::-;25201:12;:10;:12::i;:::-;25189:24;;:8;:24;;;;25181:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25301:8;25256:18;:32;25275:12;:10;:12::i;:::-;25256:32;;;;;;;;;;;;;;;:42;25289:8;25256:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25354:8;25325:48;;25340:12;:10;:12::i;:::-;25325:48;;;25364:8;25325:48;;;;;;:::i;:::-;;;;;;;;25086:295;;:::o;52546:413::-;52605:7;52621:23;52647:18;:24;52666:4;52647:24;;;;;;;;;;;;;;;;52621:50;;52678:11;52692:15;52702:4;52692:9;:15::i;:::-;52678:29;;52719:9;52714:211;52738:3;52734:1;:7;52714:211;;;52757:15;52775:28;52795:4;52801:1;52775:19;:28::i;:::-;52757:46;;52812:17;52850:21;:30;52872:7;52850:30;;;;;;;;;;;;52832:15;:48;;;;:::i;:::-;52812:68;;52908:9;52889:28;;;;;:::i;:::-;;;52714:211;;52743:3;;;;;:::i;:::-;;;;52714:211;;;;52938:15;52931:22;;;;52546:413;;;:::o;26349:328::-;26524:41;26543:12;:10;:12::i;:::-;26557:7;26524:18;:41::i;:::-;26516:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26630:39;26644:4;26650:2;26654:7;26663:5;26630:13;:39::i;:::-;26349:328;;;;:::o;50815:144::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50915:1:::1;50891:26;;:12;;;;;;;;;;;:26;;;50883:35;;;::::0;::::1;;50940:13;50925:12;;:28;;;;;;;;;;;;;;;;;;50815:144:::0;:::o;23578:334::-;23651:13;23685:16;23693:7;23685;:16::i;:::-;23677:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23766:21;23790:10;:8;:10::i;:::-;23766:34;;23842:1;23824:7;23818:21;:25;:86;;;;;;;;;;;;;;;;;23870:7;23879:18;:7;:16;:18::i;:::-;23853:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23818:86;23811:93;;;23578:334;;;:::o;50217:28::-;;;;;;;;;;;;;:::o;51341:177::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51396:11:::1;51410:13;:11;:13::i;:::-;51396:27;;51435:9;51430:83;51454:2;51450:1;:6;51430:83;;;51472:33;51482:10;51503:1;51494:6;:10;;;;:::i;:::-;51472:9;:33::i;:::-;51458:3;;;;;:::i;:::-;;;;51430:83;;;;45601:1;51341:177::o:0;50185:27::-;;;;;;;;;;;;;:::o;50252:32::-;;;:::o;25452:164::-;25549:4;25573:18;:25;25592:5;25573:25;;;;;;;;;;;;;;;:35;25599:8;25573:35;;;;;;;;;;;;;;;;;;;;;;;;;25566:42;;25452:164;;;;:::o;46264:244::-;45541:12;:10;:12::i;:::-;45530:23;;:7;:5;:7::i;:::-;:23;;;45522:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46373:1:::1;46353:22;;:8;:22;;;;46345:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46463:8;46434:38;;46455:6;::::0;::::1;;;;;;;;46434:38;;;;;;;;;;;;46492:8;46483:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;46264:244:::0;:::o;22289:305::-;22391:4;22443:25;22428:40;;;:11;:40;;;;:105;;;;22500:33;22485:48;;;:11;:48;;;;22428:105;:158;;;;22550:36;22574:11;22550:23;:36::i;:::-;22428:158;22408:178;;22289:305;;;:::o;28187:127::-;28252:4;28304:1;28276:30;;:7;:16;28284:7;28276:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28269:37;;28187:127;;;:::o;8712:98::-;8765:7;8792:10;8785:17;;8712:98;:::o;32169:174::-;32271:2;32244:15;:24;32260:7;32244:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32327:7;32323:2;32289:46;;32298:23;32313:7;32298:14;:23::i;:::-;32289:46;;;;;;;;;;;;32169:174;;:::o;28481:348::-;28574:4;28599:16;28607:7;28599;:16::i;:::-;28591:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28675:13;28691:23;28706:7;28691:14;:23::i;:::-;28675:39;;28744:5;28733:16;;:7;:16;;;:51;;;;28777:7;28753:31;;:20;28765:7;28753:11;:20::i;:::-;:31;;;28733:51;:87;;;;28788:32;28805:5;28812:7;28788:16;:32::i;:::-;28733:87;28725:96;;;28481:348;;;;:::o;31473:578::-;31632:4;31605:31;;:23;31620:7;31605:14;:23::i;:::-;:31;;;31597:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:1;31701:16;;:2;:16;;;;31693:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31771:39;31792:4;31798:2;31802:7;31771:20;:39::i;:::-;31875:29;31892:1;31896:7;31875:8;:29::i;:::-;31936:1;31917:9;:15;31927:4;31917:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31965:1;31948:9;:13;31958:2;31948:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31996:2;31977:7;:16;31985:7;31977:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32035:7;32031:2;32016:27;;32025:4;32016:27;;;;;;;;;;;;31473:578;;;:::o;51800:227::-;51964:7;51954;:17;51946:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;51993:28;52009:2;52013:7;51993:15;:28::i;:::-;51800:227;;:::o;27559:315::-;27716:28;27726:4;27732:2;27736:7;27716:9;:28::i;:::-;27763:48;27786:4;27792:2;27796:7;27805:5;27763:22;:48::i;:::-;27755:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27559:315;;;;:::o;52033:102::-;52093:13;52122:7;52115:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52033:102;:::o;9350:723::-;9406:13;9636:1;9627:5;:10;9623:53;;;9654:10;;;;;;;;;;;;;;;;;;;;;9623:53;9686:12;9701:5;9686:20;;9717:14;9742:78;9757:1;9749:4;:9;9742:78;;9775:8;;;;;:::i;:::-;;;;9806:2;9798:10;;;;;:::i;:::-;;;9742:78;;;9830:19;9862:6;9852:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9830:39;;9880:154;9896:1;9887:5;:10;9880:154;;9924:1;9914:11;;;;;:::i;:::-;;;9991:2;9983:5;:10;;;;:::i;:::-;9970:2;:24;;;;:::i;:::-;9957:39;;9940:6;9947;9940:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;10020:2;10011:11;;;;;:::i;:::-;;;9880:154;;;10058:6;10044:21;;;;;9350:723;;;;:::o;20087:157::-;20172:4;20211:25;20196:40;;;:11;:40;;;;20189:47;;20087:157;;;:::o;52141:399::-;52273:45;52300:4;52306:2;52310:7;52273:26;:45::i;:::-;52327:17;52365:21;:30;52387:7;52365:30;;;;;;;;;;;;52347:15;:48;;;;:::i;:::-;52327:68;;52422:1;52406:18;;:4;:18;;;52402:78;;52463:9;52435:18;:24;52454:4;52435:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;52402:78;52519:15;52486:21;:30;52508:7;52486:30;;;;;;;;;;;:48;;;;52141:399;;;;:::o;29171:110::-;29247:26;29257:2;29261:7;29247:26;;;;;;;;;;;;:9;:26::i;:::-;29171:110;;:::o;32908:799::-;33063:4;33084:15;:2;:13;;;:15::i;:::-;33080:620;;;33136:2;33120:36;;;33157:12;:10;:12::i;:::-;33171:4;33177:7;33186:5;33120:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33116:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33379:1;33362:6;:13;:18;33358:272;;;33405:60;;;;;;;;;;:::i;:::-;;;;;;;;33358:272;33580:6;33574:13;33565:6;33561:2;33557:15;33550:38;33116:529;33253:41;;;33243:51;;;:6;:51;;;;33236:58;;;;;33080:620;33684:4;33677:11;;32908:799;;;;;;;:::o;36982:589::-;37126:45;37153:4;37159:2;37163:7;37126:26;:45::i;:::-;37204:1;37188:18;;:4;:18;;;37184:187;;;37223:40;37255:7;37223:31;:40::i;:::-;37184:187;;;37293:2;37285:10;;:4;:10;;;37281:90;;37312:47;37345:4;37351:7;37312:32;:47::i;:::-;37281:90;37184:187;37399:1;37385:16;;:2;:16;;;37381:183;;;37418:45;37455:7;37418:36;:45::i;:::-;37381:183;;;37491:4;37485:10;;:2;:10;;;37481:83;;37512:40;37540:2;37544:7;37512:27;:40::i;:::-;37481:83;37381:183;36982:589;;;:::o;29508:321::-;29638:18;29644:2;29648:7;29638:5;:18::i;:::-;29689:54;29720:1;29724:2;29728:7;29737:5;29689:22;:54::i;:::-;29667:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29508:321;;;:::o;846:422::-;906:4;1114:12;1225:7;1213:20;1205:28;;1259:1;1252:4;:8;1245:15;;;846:422;;;:::o;34279:126::-;;;;:::o;38294:164::-;38398:10;:17;;;;38371:15;:24;38387:7;38371:24;;;;;;;;;;;:44;;;;38426:10;38442:7;38426:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38294:164;:::o;39085:988::-;39351:22;39401:1;39376:22;39393:4;39376:16;:22::i;:::-;:26;;;;:::i;:::-;39351:51;;39413:18;39434:17;:26;39452:7;39434:26;;;;;;;;;;;;39413:47;;39581:14;39567:10;:28;39563:328;;39612:19;39634:12;:18;39647:4;39634:18;;;;;;;;;;;;;;;:34;39653:14;39634:34;;;;;;;;;;;;39612:56;;39718:11;39685:12;:18;39698:4;39685:18;;;;;;;;;;;;;;;:30;39704:10;39685:30;;;;;;;;;;;:44;;;;39835:10;39802:17;:30;39820:11;39802:30;;;;;;;;;;;:43;;;;39563:328;;39987:17;:26;40005:7;39987:26;;;;;;;;;;;39980:33;;;40031:12;:18;40044:4;40031:18;;;;;;;;;;;;;;;:34;40050:14;40031:34;;;;;;;;;;;40024:41;;;39085:988;;;;:::o;40368:1079::-;40621:22;40666:1;40646:10;:17;;;;:21;;;;:::i;:::-;40621:46;;40678:18;40699:15;:24;40715:7;40699:24;;;;;;;;;;;;40678:45;;41050:19;41072:10;41083:14;41072:26;;;;;;;;;;;;;;;;;;;;;;;;41050:48;;41136:11;41111:10;41122;41111:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41247:10;41216:15;:28;41232:11;41216:28;;;;;;;;;;;:41;;;;41388:15;:24;41404:7;41388:24;;;;;;;;;;;41381:31;;;41423:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40368:1079;;;;:::o;37872:221::-;37957:14;37974:20;37991:2;37974:16;:20::i;:::-;37957:37;;38032:7;38005:12;:16;38018:2;38005:16;;;;;;;;;;;;;;;:24;38022:6;38005:24;;;;;;;;;;;:34;;;;38079:6;38050:17;:26;38068:7;38050:26;;;;;;;;;;;:35;;;;37872:221;;;:::o;30165:382::-;30259:1;30245:16;;:2;:16;;;;30237:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30318:16;30326:7;30318;:16::i;:::-;30317:17;30309:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30380:45;30409:1;30413:2;30417:7;30380:20;:45::i;:::-;30455:1;30438:9;:13;30448:2;30438:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30486:2;30467:7;:16;30475:7;30467:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30531:7;30527:2;30506:33;;30523:1;30506:33;;;;;;;;;;;;30165:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;4941:6;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;5506:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:118::-;6173:24;6191:5;6173:24;:::i;:::-;6168:3;6161:37;6151:53;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6269:50;;:::o;6325:115::-;6410:23;6427:5;6410:23;:::i;:::-;6405:3;6398:36;6388:52;;:::o;6446:360::-;6532:3;6560:38;6592:5;6560:38;:::i;:::-;6614:70;6677:6;6672:3;6614:70;:::i;:::-;6607:77;;6693:52;6738:6;6733:3;6726:4;6719:5;6715:16;6693:52;:::i;:::-;6770:29;6792:6;6770:29;:::i;:::-;6765:3;6761:39;6754:46;;6536:270;;;;;:::o;6812:364::-;6900:3;6928:39;6961:5;6928:39;:::i;:::-;6983:71;7047:6;7042:3;6983:71;:::i;:::-;6976:78;;7063:52;7108:6;7103:3;7096:4;7089:5;7085:16;7063:52;:::i;:::-;7140:29;7162:6;7140:29;:::i;:::-;7135:3;7131:39;7124:46;;6904:272;;;;;:::o;7182:377::-;7288:3;7316:39;7349:5;7316:39;:::i;:::-;7371:89;7453:6;7448:3;7371:89;:::i;:::-;7364:96;;7469:52;7514:6;7509:3;7502:4;7495:5;7491:16;7469:52;:::i;:::-;7546:6;7541:3;7537:16;7530:23;;7292:267;;;;;:::o;7565:366::-;7707:3;7728:67;7792:2;7787:3;7728:67;:::i;:::-;7721:74;;7804:93;7893:3;7804:93;:::i;:::-;7922:2;7917:3;7913:12;7906:19;;7711:220;;;:::o;7937:366::-;8079:3;8100:67;8164:2;8159:3;8100:67;:::i;:::-;8093:74;;8176:93;8265:3;8176:93;:::i;:::-;8294:2;8289:3;8285:12;8278:19;;8083:220;;;:::o;8309:366::-;8451:3;8472:67;8536:2;8531:3;8472:67;:::i;:::-;8465:74;;8548:93;8637:3;8548:93;:::i;:::-;8666:2;8661:3;8657:12;8650:19;;8455:220;;;:::o;8681:366::-;8823:3;8844:67;8908:2;8903:3;8844:67;:::i;:::-;8837:74;;8920:93;9009:3;8920:93;:::i;:::-;9038:2;9033:3;9029:12;9022:19;;8827:220;;;:::o;9053:366::-;9195:3;9216:67;9280:2;9275:3;9216:67;:::i;:::-;9209:74;;9292:93;9381:3;9292:93;:::i;:::-;9410:2;9405:3;9401:12;9394:19;;9199:220;;;:::o;9425:366::-;9567:3;9588:67;9652:2;9647:3;9588:67;:::i;:::-;9581:74;;9664:93;9753:3;9664:93;:::i;:::-;9782:2;9777:3;9773:12;9766:19;;9571:220;;;:::o;9797:366::-;9939:3;9960:67;10024:2;10019:3;9960:67;:::i;:::-;9953:74;;10036:93;10125:3;10036:93;:::i;:::-;10154:2;10149:3;10145:12;10138:19;;9943:220;;;:::o;10169:366::-;10311:3;10332:67;10396:2;10391:3;10332:67;:::i;:::-;10325:74;;10408:93;10497:3;10408:93;:::i;:::-;10526:2;10521:3;10517:12;10510:19;;10315:220;;;:::o;10541:366::-;10683:3;10704:67;10768:2;10763:3;10704:67;:::i;:::-;10697:74;;10780:93;10869:3;10780:93;:::i;:::-;10898:2;10893:3;10889:12;10882:19;;10687:220;;;:::o;10913:366::-;11055:3;11076:67;11140:2;11135:3;11076:67;:::i;:::-;11069:74;;11152:93;11241:3;11152:93;:::i;:::-;11270:2;11265:3;11261:12;11254:19;;11059:220;;;:::o;11285:366::-;11427:3;11448:67;11512:2;11507:3;11448:67;:::i;:::-;11441:74;;11524:93;11613:3;11524:93;:::i;:::-;11642:2;11637:3;11633:12;11626:19;;11431:220;;;:::o;11657:366::-;11799:3;11820:67;11884:2;11879:3;11820:67;:::i;:::-;11813:74;;11896:93;11985:3;11896:93;:::i;:::-;12014:2;12009:3;12005:12;11998:19;;11803:220;;;:::o;12029:366::-;12171:3;12192:67;12256:2;12251:3;12192:67;:::i;:::-;12185:74;;12268:93;12357:3;12268:93;:::i;:::-;12386:2;12381:3;12377:12;12370:19;;12175:220;;;:::o;12401:366::-;12543:3;12564:67;12628:2;12623:3;12564:67;:::i;:::-;12557:74;;12640:93;12729:3;12640:93;:::i;:::-;12758:2;12753:3;12749:12;12742:19;;12547:220;;;:::o;12773:366::-;12915:3;12936:67;13000:2;12995:3;12936:67;:::i;:::-;12929:74;;13012:93;13101:3;13012:93;:::i;:::-;13130:2;13125:3;13121:12;13114:19;;12919:220;;;:::o;13145:366::-;13287:3;13308:67;13372:2;13367:3;13308:67;:::i;:::-;13301:74;;13384:93;13473:3;13384:93;:::i;:::-;13502:2;13497:3;13493:12;13486:19;;13291:220;;;:::o;13517:366::-;13659:3;13680:67;13744:2;13739:3;13680:67;:::i;:::-;13673:74;;13756:93;13845:3;13756:93;:::i;:::-;13874:2;13869:3;13865:12;13858:19;;13663:220;;;:::o;13889:366::-;14031:3;14052:67;14116:2;14111:3;14052:67;:::i;:::-;14045:74;;14128:93;14217:3;14128:93;:::i;:::-;14246:2;14241:3;14237:12;14230:19;;14035:220;;;:::o;14261:366::-;14403:3;14424:67;14488:2;14483:3;14424:67;:::i;:::-;14417:74;;14500:93;14589:3;14500:93;:::i;:::-;14618:2;14613:3;14609:12;14602:19;;14407:220;;;:::o;14633:366::-;14775:3;14796:67;14860:2;14855:3;14796:67;:::i;:::-;14789:74;;14872:93;14961:3;14872:93;:::i;:::-;14990:2;14985:3;14981:12;14974:19;;14779:220;;;:::o;15005:118::-;15092:24;15110:5;15092:24;:::i;:::-;15087:3;15080:37;15070:53;;:::o;15129:435::-;15309:3;15331:95;15422:3;15413:6;15331:95;:::i;:::-;15324:102;;15443:95;15534:3;15525:6;15443:95;:::i;:::-;15436:102;;15555:3;15548:10;;15313:251;;;;;:::o;15570:222::-;15663:4;15701:2;15690:9;15686:18;15678:26;;15714:71;15782:1;15771:9;15767:17;15758:6;15714:71;:::i;:::-;15668:124;;;;:::o;15798:640::-;15993:4;16031:3;16020:9;16016:19;16008:27;;16045:71;16113:1;16102:9;16098:17;16089:6;16045:71;:::i;:::-;16126:72;16194:2;16183:9;16179:18;16170:6;16126:72;:::i;:::-;16208;16276:2;16265:9;16261:18;16252:6;16208:72;:::i;:::-;16327:9;16321:4;16317:20;16312:2;16301:9;16297:18;16290:48;16355:76;16426:4;16417:6;16355:76;:::i;:::-;16347:84;;15998:440;;;;;;;:::o;16444:210::-;16531:4;16569:2;16558:9;16554:18;16546:26;;16582:65;16644:1;16633:9;16629:17;16620:6;16582:65;:::i;:::-;16536:118;;;;:::o;16660:218::-;16751:4;16789:2;16778:9;16774:18;16766:26;;16802:69;16868:1;16857:9;16853:17;16844:6;16802:69;:::i;:::-;16756:122;;;;:::o;16884:313::-;16997:4;17035:2;17024:9;17020:18;17012:26;;17084:9;17078:4;17074:20;17070:1;17059:9;17055:17;17048:47;17112:78;17185:4;17176:6;17112:78;:::i;:::-;17104:86;;17002:195;;;;:::o;17203:419::-;17369:4;17407:2;17396:9;17392:18;17384:26;;17456:9;17450:4;17446:20;17442:1;17431:9;17427:17;17420:47;17484:131;17610:4;17484:131;:::i;:::-;17476:139;;17374:248;;;:::o;17628:419::-;17794:4;17832:2;17821:9;17817:18;17809:26;;17881:9;17875:4;17871:20;17867:1;17856:9;17852:17;17845:47;17909:131;18035:4;17909:131;:::i;:::-;17901:139;;17799:248;;;:::o;18053:419::-;18219:4;18257:2;18246:9;18242:18;18234:26;;18306:9;18300:4;18296:20;18292:1;18281:9;18277:17;18270:47;18334:131;18460:4;18334:131;:::i;:::-;18326:139;;18224:248;;;:::o;18478:419::-;18644:4;18682:2;18671:9;18667:18;18659:26;;18731:9;18725:4;18721:20;18717:1;18706:9;18702:17;18695:47;18759:131;18885:4;18759:131;:::i;:::-;18751:139;;18649:248;;;:::o;18903:419::-;19069:4;19107:2;19096:9;19092:18;19084:26;;19156:9;19150:4;19146:20;19142:1;19131:9;19127:17;19120:47;19184:131;19310:4;19184:131;:::i;:::-;19176:139;;19074:248;;;:::o;19328:419::-;19494:4;19532:2;19521:9;19517:18;19509:26;;19581:9;19575:4;19571:20;19567:1;19556:9;19552:17;19545:47;19609:131;19735:4;19609:131;:::i;:::-;19601:139;;19499:248;;;:::o;19753:419::-;19919:4;19957:2;19946:9;19942:18;19934:26;;20006:9;20000:4;19996:20;19992:1;19981:9;19977:17;19970:47;20034:131;20160:4;20034:131;:::i;:::-;20026:139;;19924:248;;;:::o;20178:419::-;20344:4;20382:2;20371:9;20367:18;20359:26;;20431:9;20425:4;20421:20;20417:1;20406:9;20402:17;20395:47;20459:131;20585:4;20459:131;:::i;:::-;20451:139;;20349:248;;;:::o;20603:419::-;20769:4;20807:2;20796:9;20792:18;20784:26;;20856:9;20850:4;20846:20;20842:1;20831:9;20827:17;20820:47;20884:131;21010:4;20884:131;:::i;:::-;20876:139;;20774:248;;;:::o;21028:419::-;21194:4;21232:2;21221:9;21217:18;21209:26;;21281:9;21275:4;21271:20;21267:1;21256:9;21252:17;21245:47;21309:131;21435:4;21309:131;:::i;:::-;21301:139;;21199:248;;;:::o;21453:419::-;21619:4;21657:2;21646:9;21642:18;21634:26;;21706:9;21700:4;21696:20;21692:1;21681:9;21677:17;21670:47;21734:131;21860:4;21734:131;:::i;:::-;21726:139;;21624:248;;;:::o;21878:419::-;22044:4;22082:2;22071:9;22067:18;22059:26;;22131:9;22125:4;22121:20;22117:1;22106:9;22102:17;22095:47;22159:131;22285:4;22159:131;:::i;:::-;22151:139;;22049:248;;;:::o;22303:419::-;22469:4;22507:2;22496:9;22492:18;22484:26;;22556:9;22550:4;22546:20;22542:1;22531:9;22527:17;22520:47;22584:131;22710:4;22584:131;:::i;:::-;22576:139;;22474:248;;;:::o;22728:419::-;22894:4;22932:2;22921:9;22917:18;22909:26;;22981:9;22975:4;22971:20;22967:1;22956:9;22952:17;22945:47;23009:131;23135:4;23009:131;:::i;:::-;23001:139;;22899:248;;;:::o;23153:419::-;23319:4;23357:2;23346:9;23342:18;23334:26;;23406:9;23400:4;23396:20;23392:1;23381:9;23377:17;23370:47;23434:131;23560:4;23434:131;:::i;:::-;23426:139;;23324:248;;;:::o;23578:419::-;23744:4;23782:2;23771:9;23767:18;23759:26;;23831:9;23825:4;23821:20;23817:1;23806:9;23802:17;23795:47;23859:131;23985:4;23859:131;:::i;:::-;23851:139;;23749:248;;;:::o;24003:419::-;24169:4;24207:2;24196:9;24192:18;24184:26;;24256:9;24250:4;24246:20;24242:1;24231:9;24227:17;24220:47;24284:131;24410:4;24284:131;:::i;:::-;24276:139;;24174:248;;;:::o;24428:419::-;24594:4;24632:2;24621:9;24617:18;24609:26;;24681:9;24675:4;24671:20;24667:1;24656:9;24652:17;24645:47;24709:131;24835:4;24709:131;:::i;:::-;24701:139;;24599:248;;;:::o;24853:419::-;25019:4;25057:2;25046:9;25042:18;25034:26;;25106:9;25100:4;25096:20;25092:1;25081:9;25077:17;25070:47;25134:131;25260:4;25134:131;:::i;:::-;25126:139;;25024:248;;;:::o;25278:419::-;25444:4;25482:2;25471:9;25467:18;25459:26;;25531:9;25525:4;25521:20;25517:1;25506:9;25502:17;25495:47;25559:131;25685:4;25559:131;:::i;:::-;25551:139;;25449:248;;;:::o;25703:222::-;25796:4;25834:2;25823:9;25819:18;25811:26;;25847:71;25915:1;25904:9;25900:17;25891:6;25847:71;:::i;:::-;25801:124;;;;:::o;25931:129::-;25965:6;25992:20;;:::i;:::-;25982:30;;26021:33;26049:4;26041:6;26021:33;:::i;:::-;25972:88;;;:::o;26066:75::-;26099:6;26132:2;26126:9;26116:19;;26106:35;:::o;26147:307::-;26208:4;26298:18;26290:6;26287:30;26284:2;;;26320:18;;:::i;:::-;26284:2;26358:29;26380:6;26358:29;:::i;:::-;26350:37;;26442:4;26436;26432:15;26424:23;;26213:241;;;:::o;26460:308::-;26522:4;26612:18;26604:6;26601:30;26598:2;;;26634:18;;:::i;:::-;26598:2;26672:29;26694:6;26672:29;:::i;:::-;26664:37;;26756:4;26750;26746:15;26738:23;;26527:241;;;:::o;26774:98::-;26825:6;26859:5;26853:12;26843:22;;26832:40;;;:::o;26878:99::-;26930:6;26964:5;26958:12;26948:22;;26937:40;;;:::o;26983:168::-;27066:11;27100:6;27095:3;27088:19;27140:4;27135:3;27131:14;27116:29;;27078:73;;;;:::o;27157:169::-;27241:11;27275:6;27270:3;27263:19;27315:4;27310:3;27306:14;27291:29;;27253:73;;;;:::o;27332:148::-;27434:11;27471:3;27456:18;;27446:34;;;;:::o;27486:305::-;27526:3;27545:20;27563:1;27545:20;:::i;:::-;27540:25;;27579:20;27597:1;27579:20;:::i;:::-;27574:25;;27733:1;27665:66;27661:74;27658:1;27655:81;27652:2;;;27739:18;;:::i;:::-;27652:2;27783:1;27780;27776:9;27769:16;;27530:261;;;;:::o;27797:185::-;27837:1;27854:20;27872:1;27854:20;:::i;:::-;27849:25;;27888:20;27906:1;27888:20;:::i;:::-;27883:25;;27927:1;27917:2;;27932:18;;:::i;:::-;27917:2;27974:1;27971;27967:9;27962:14;;27839:143;;;;:::o;27988:191::-;28028:4;28048:20;28066:1;28048:20;:::i;:::-;28043:25;;28082:20;28100:1;28082:20;:::i;:::-;28077:25;;28121:1;28118;28115:8;28112:2;;;28126:18;;:::i;:::-;28112:2;28171:1;28168;28164:9;28156:17;;28033:146;;;;:::o;28185:96::-;28222:7;28251:24;28269:5;28251:24;:::i;:::-;28240:35;;28230:51;;;:::o;28287:90::-;28321:7;28364:5;28357:13;28350:21;28339:32;;28329:48;;;:::o;28383:149::-;28419:7;28459:66;28452:5;28448:78;28437:89;;28427:105;;;:::o;28538:126::-;28575:7;28615:42;28608:5;28604:54;28593:65;;28583:81;;;:::o;28670:77::-;28707:7;28736:5;28725:16;;28715:32;;;:::o;28753:154::-;28837:6;28832:3;28827;28814:30;28899:1;28890:6;28885:3;28881:16;28874:27;28804:103;;;:::o;28913:307::-;28981:1;28991:113;29005:6;29002:1;28999:13;28991:113;;;29090:1;29085:3;29081:11;29075:18;29071:1;29066:3;29062:11;29055:39;29027:2;29024:1;29020:10;29015:15;;28991:113;;;29122:6;29119:1;29116:13;29113:2;;;29202:1;29193:6;29188:3;29184:16;29177:27;29113:2;28962:258;;;;:::o;29226:320::-;29270:6;29307:1;29301:4;29297:12;29287:22;;29354:1;29348:4;29344:12;29375:18;29365:2;;29431:4;29423:6;29419:17;29409:27;;29365:2;29493;29485:6;29482:14;29462:18;29459:38;29456:2;;;29512:18;;:::i;:::-;29456:2;29277:269;;;;:::o;29552:281::-;29635:27;29657:4;29635:27;:::i;:::-;29627:6;29623:40;29765:6;29753:10;29750:22;29729:18;29717:10;29714:34;29711:62;29708:2;;;29776:18;;:::i;:::-;29708:2;29816:10;29812:2;29805:22;29595:238;;;:::o;29839:233::-;29878:3;29901:24;29919:5;29901:24;:::i;:::-;29892:33;;29947:66;29940:5;29937:77;29934:2;;;30017:18;;:::i;:::-;29934:2;30064:1;30057:5;30053:13;30046:20;;29882:190;;;:::o;30078:176::-;30110:1;30127:20;30145:1;30127:20;:::i;:::-;30122:25;;30161:20;30179:1;30161:20;:::i;:::-;30156:25;;30200:1;30190:2;;30205:18;;:::i;:::-;30190:2;30246:1;30243;30239:9;30234:14;;30112:142;;;;:::o;30260:180::-;30308:77;30305:1;30298:88;30405:4;30402:1;30395:15;30429:4;30426:1;30419:15;30446:180;30494:77;30491:1;30484:88;30591:4;30588:1;30581:15;30615:4;30612:1;30605:15;30632:180;30680:77;30677:1;30670:88;30777:4;30774:1;30767:15;30801:4;30798:1;30791:15;30818:180;30866:77;30863:1;30856:88;30963:4;30960:1;30953:15;30987:4;30984:1;30977:15;31004:102;31045:6;31096:2;31092:7;31087:2;31080:5;31076:14;31072:28;31062:38;;31052:54;;;:::o;31112:230::-;31252:34;31248:1;31240:6;31236:14;31229:58;31321:13;31316:2;31308:6;31304:15;31297:38;31218:124;:::o;31348:237::-;31488:34;31484:1;31476:6;31472:14;31465:58;31557:20;31552:2;31544:6;31540:15;31533:45;31454:131;:::o;31591:225::-;31731:34;31727:1;31719:6;31715:14;31708:58;31800:8;31795:2;31787:6;31783:15;31776:33;31697:119;:::o;31822:178::-;31962:30;31958:1;31950:6;31946:14;31939:54;31928:72;:::o;32006:223::-;32146:34;32142:1;32134:6;32130:14;32123:58;32215:6;32210:2;32202:6;32198:15;32191:31;32112:117;:::o;32235:175::-;32375:27;32371:1;32363:6;32359:14;32352:51;32341:69;:::o;32416:231::-;32556:34;32552:1;32544:6;32540:14;32533:58;32625:14;32620:2;32612:6;32608:15;32601:39;32522:125;:::o;32653:160::-;32793:12;32789:1;32781:6;32777:14;32770:36;32759:54;:::o;32819:243::-;32959:34;32955:1;32947:6;32943:14;32936:58;33028:26;33023:2;33015:6;33011:15;33004:51;32925:137;:::o;33068:229::-;33208:34;33204:1;33196:6;33192:14;33185:58;33277:12;33272:2;33264:6;33260:15;33253:37;33174:123;:::o;33303:228::-;33443:34;33439:1;33431:6;33427:14;33420:58;33512:11;33507:2;33499:6;33495:15;33488:36;33409:122;:::o;33537:182::-;33677:34;33673:1;33665:6;33661:14;33654:58;33643:76;:::o;33725:231::-;33865:34;33861:1;33853:6;33849:14;33842:58;33934:14;33929:2;33921:6;33917:15;33910:39;33831:125;:::o;33962:182::-;34102:34;34098:1;34090:6;34086:14;34079:58;34068:76;:::o;34150:228::-;34290:34;34286:1;34278:6;34274:14;34267:58;34359:11;34354:2;34346:6;34342:15;34335:36;34256:122;:::o;34384:234::-;34524:34;34520:1;34512:6;34508:14;34501:58;34593:17;34588:2;34580:6;34576:15;34569:42;34490:128;:::o;34624:220::-;34764:34;34760:1;34752:6;34748:14;34741:58;34833:3;34828:2;34820:6;34816:15;34809:28;34730:114;:::o;34850:236::-;34990:34;34986:1;34978:6;34974:14;34967:58;35059:19;35054:2;35046:6;35042:15;35035:44;34956:130;:::o;35092:231::-;35232:34;35228:1;35220:6;35216:14;35209:58;35301:14;35296:2;35288:6;35284:15;35277:39;35198:125;:::o;35329:162::-;35469:14;35465:1;35457:6;35453:14;35446:38;35435:56;:::o;35497:122::-;35570:24;35588:5;35570:24;:::i;:::-;35563:5;35560:35;35550:2;;35609:1;35606;35599:12;35550:2;35540:79;:::o;35625:116::-;35695:21;35710:5;35695:21;:::i;:::-;35688:5;35685:32;35675:2;;35731:1;35728;35721:12;35675:2;35665:76;:::o;35747:120::-;35819:23;35836:5;35819:23;:::i;:::-;35812:5;35809:34;35799:2;;35857:1;35854;35847:12;35799:2;35789:78;:::o;35873:122::-;35946:24;35964:5;35946:24;:::i;:::-;35939:5;35936:35;35926:2;;35985:1;35982;35975:12;35926:2;35916:79;:::o

Swarm Source

ipfs://6094a7e384018b3badf9b5bd1c8025a20b13903f96ae0b429005c2a9850cfac2
Loading...
Loading
Loading...
Loading
[ 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.