ETH Price: $3,156.32 (-1.18%)
 

Overview

Max Total Supply

0 RTZTKN

Holders

94

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 RTZTKN
0xf68cc0fe24a9fa0df576da945947d21b46ca848c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ROOTZ

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: 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 {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: 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);

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

    /**
     * @dev 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 {}

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

// File: Rootz_alpha.sol


pragma solidity ^0.8.0;



contract ROOTZ is ERC721, Ownable {
    address minter;
    string uri = "https://rootz.url/metadata/";
    constructor() ERC721("RootzToken", "RTZTKN") {
        minter=msg.sender;
    }
    function setMinter(address payable newMinter) external onlyOwner{
        minter=newMinter;
    }
    function setURI(string calldata newURI) external onlyOwner{
        uri=newURI;
    }
    function _baseURI() internal view override returns (string memory) {
        return uri;
    }
    function _beforeTokenTransfer(
        address from, 
        address to, 
        uint256 tokenId
    ) internal override virtual {
        require(from == address(0), "Err: token is soulbound");   
        super._beforeTokenTransfer(from, to, tokenId);  
    }
    function mint(uint tokenID, address receiver) external{
        require(msg.sender==minter, "User is not Minter");
        require(tokenID <= 5000, "Token Unavailable");
        _mint(receiver, tokenID);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"tokenID","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMinter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280601b81526020017f68747470733a2f2f726f6f747a2e75726c2f6d657461646174612f0000000000815250600890805190602001906200005192919062000235565b503480156200005f57600080fd5b506040518060400160405280600a81526020017f526f6f747a546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f52545a544b4e00000000000000000000000000000000000000000000000000008152508160009080519060200190620000e492919062000235565b508060019080519060200190620000fd92919062000235565b50505062000120620001146200016760201b60201c565b6200016f60201b60201c565b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200034a565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024390620002e5565b90600052602060002090601f016020900481019282620002675760008555620002b3565b82601f106200028257805160ff1916838001178555620002b3565b82800160010185558215620002b3579182015b82811115620002b257825182559160200191906001019062000295565b5b509050620002c29190620002c6565b5090565b5b80821115620002e1576000816000905550600101620002c7565b5090565b60006002820490506001821680620002fe57607f821691505b602082108114156200031557620003146200031b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613166806200035a6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063b88d4fde11610071578063b88d4fde146102f2578063c87b56dd1461030e578063e985e9c51461033e578063f2fde38b1461036e578063fca3b5aa1461038a57610121565b8063715018a6146102745780638da5cb5b1461027e57806394bf804d1461029c57806395d89b41146102b8578063a22cb465146102d657610121565b8063095ea7b3116100f4578063095ea7b3146101c057806323b872dd146101dc57806342842e0e146101f85780636352211e1461021457806370a082311461024457610121565b806301ffc9a71461012657806302fe53051461015657806306fdde0314610172578063081812fc14610190575b600080fd5b610140600480360381019061013b9190612017565b6103a6565b60405161014d919061251f565b60405180910390f35b610170600480360381019061016b9190612071565b610488565b005b61017a61051a565b604051610187919061253a565b60405180910390f35b6101aa60048036038101906101a591906120be565b6105ac565b6040516101b791906124b8565b60405180910390f35b6101da60048036038101906101d59190611fd7565b610631565b005b6101f660048036038101906101f19190611ec1565b610749565b005b610212600480360381019061020d9190611ec1565b6107a9565b005b61022e600480360381019061022991906120be565b6107c9565b60405161023b91906124b8565b60405180910390f35b61025e60048036038101906102599190611e27565b61087b565b60405161026b91906127bc565b60405180910390f35b61027c610933565b005b6102866109bb565b60405161029391906124b8565b60405180910390f35b6102b660048036038101906102b191906120eb565b6109e5565b005b6102c0610ac8565b6040516102cd919061253a565b60405180910390f35b6102f060048036038101906102eb9190611f97565b610b5a565b005b61030c60048036038101906103079190611f14565b610b70565b005b610328600480360381019061032391906120be565b610bd2565b604051610335919061253a565b60405180910390f35b61035860048036038101906103539190611e81565b610c79565b604051610365919061251f565b60405180910390f35b61038860048036038101906103839190611e27565b610d0d565b005b6103a4600480360381019061039f9190611e54565b610e05565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610481575061048082610ec5565b5b9050919050565b610490610f2f565b73ffffffffffffffffffffffffffffffffffffffff166104ae6109bb565b73ffffffffffffffffffffffffffffffffffffffff1614610504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fb906126fc565b60405180910390fd5b818160089190610515929190611c40565b505050565b606060008054610529906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610555906129f3565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b5050505050905090565b60006105b782610f37565b6105f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ed906126dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061063c826107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a49061277c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106cc610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614806106fb57506106fa816106f5610f2f565b610c79565b5b61073a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107319061265c565b60405180910390fd5b6107448383610fa3565b505050565b61075a610754610f2f565b8261105c565b610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107909061279c565b60405180910390fd5b6107a483838361113a565b505050565b6107c483838360405180602001604052806000815250610b70565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610872576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108699061269c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e39061267c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61093b610f2f565b73ffffffffffffffffffffffffffffffffffffffff166109596109bb565b73ffffffffffffffffffffffffffffffffffffffff16146109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906126fc565b60405180910390fd5b6109b960006113a1565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c9061255c565b60405180910390fd5b611388821115610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab19061271c565b60405180910390fd5b610ac48183611467565b5050565b606060018054610ad7906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b03906129f3565b8015610b505780601f10610b2557610100808354040283529160200191610b50565b820191906000526020600020905b815481529060010190602001808311610b3357829003601f168201915b5050505050905090565b610b6c610b65610f2f565b8383611641565b5050565b610b81610b7b610f2f565b8361105c565b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061279c565b60405180910390fd5b610bcc848484846117ae565b50505050565b6060610bdd82610f37565b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c139061273c565b60405180910390fd5b6000610c2661180a565b90506000815111610c465760405180602001604052806000815250610c71565b80610c508461189c565b604051602001610c61929190612494565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d15610f2f565b73ffffffffffffffffffffffffffffffffffffffff16610d336109bb565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906126fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df09061259c565b60405180910390fd5b610e02816113a1565b50565b610e0d610f2f565b73ffffffffffffffffffffffffffffffffffffffff16610e2b6109bb565b73ffffffffffffffffffffffffffffffffffffffff1614610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e78906126fc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611016836107c9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061106782610f37565b6110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d9061263c565b60405180910390fd5b60006110b1836107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061112057508373ffffffffffffffffffffffffffffffffffffffff16611108846105ac565b73ffffffffffffffffffffffffffffffffffffffff16145b8061113157506111308185610c79565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661115a826107c9565b73ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906125bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906125fc565b60405180910390fd5b61122b8383836119fd565b611236600082610fa3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128691906128f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112dd9190612870565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461139c838383611a7c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce906126bc565b60405180910390fd5b6114e081610f37565b15611520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611517906125dc565b60405180910390fd5b61152c600083836119fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157c9190612870565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461163d60008383611a7c565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a79061261c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117a1919061251f565b60405180910390a3505050565b6117b984848461113a565b6117c584848484611a81565b611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb9061257c565b60405180910390fd5b50505050565b606060088054611819906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611845906129f3565b80156118925780601f1061186757610100808354040283529160200191611892565b820191906000526020600020905b81548152906001019060200180831161187557829003601f168201915b5050505050905090565b606060008214156118e4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506119f8565b600082905060005b600082146119165780806118ff90612a56565b915050600a8261190f91906128c6565b91506118ec565b60008167ffffffffffffffff81111561193257611931612b8c565b5b6040519080825280601f01601f1916602001820160405280156119645781602001600182028036833780820191505090505b5090505b600085146119f15760018261197d91906128f7565b9150600a8561198c9190612a9f565b60306119989190612870565b60f81b8183815181106119ae576119ad612b5d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856119ea91906128c6565b9450611968565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a639061275c565b60405180910390fd5b611a77838383611c18565b505050565b505050565b6000611aa28473ffffffffffffffffffffffffffffffffffffffff16611c1d565b15611c0b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611acb610f2f565b8786866040518563ffffffff1660e01b8152600401611aed94939291906124d3565b602060405180830381600087803b158015611b0757600080fd5b505af1925050508015611b3857506040513d601f19601f82011682018060405250810190611b359190612044565b60015b611bbb573d8060008114611b68576040519150601f19603f3d011682016040523d82523d6000602084013e611b6d565b606091505b50600081511415611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa9061257c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c10565b600190505b949350505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611c4c906129f3565b90600052602060002090601f016020900481019282611c6e5760008555611cb5565b82601f10611c8757803560ff1916838001178555611cb5565b82800160010185558215611cb5579182015b82811115611cb4578235825591602001919060010190611c99565b5b509050611cc29190611cc6565b5090565b5b80821115611cdf576000816000905550600101611cc7565b5090565b6000611cf6611cf1846127fc565b6127d7565b905082815260208101848484011115611d1257611d11612bca565b5b611d1d8482856129b1565b509392505050565b600081359050611d34816130bd565b92915050565b600081359050611d49816130d4565b92915050565b600081359050611d5e816130eb565b92915050565b600081359050611d7381613102565b92915050565b600081519050611d8881613102565b92915050565b600082601f830112611da357611da2612bc0565b5b8135611db3848260208601611ce3565b91505092915050565b60008083601f840112611dd257611dd1612bc0565b5b8235905067ffffffffffffffff811115611def57611dee612bbb565b5b602083019150836001820283011115611e0b57611e0a612bc5565b5b9250929050565b600081359050611e2181613119565b92915050565b600060208284031215611e3d57611e3c612bd4565b5b6000611e4b84828501611d25565b91505092915050565b600060208284031215611e6a57611e69612bd4565b5b6000611e7884828501611d3a565b91505092915050565b60008060408385031215611e9857611e97612bd4565b5b6000611ea685828601611d25565b9250506020611eb785828601611d25565b9150509250929050565b600080600060608486031215611eda57611ed9612bd4565b5b6000611ee886828701611d25565b9350506020611ef986828701611d25565b9250506040611f0a86828701611e12565b9150509250925092565b60008060008060808587031215611f2e57611f2d612bd4565b5b6000611f3c87828801611d25565b9450506020611f4d87828801611d25565b9350506040611f5e87828801611e12565b925050606085013567ffffffffffffffff811115611f7f57611f7e612bcf565b5b611f8b87828801611d8e565b91505092959194509250565b60008060408385031215611fae57611fad612bd4565b5b6000611fbc85828601611d25565b9250506020611fcd85828601611d4f565b9150509250929050565b60008060408385031215611fee57611fed612bd4565b5b6000611ffc85828601611d25565b925050602061200d85828601611e12565b9150509250929050565b60006020828403121561202d5761202c612bd4565b5b600061203b84828501611d64565b91505092915050565b60006020828403121561205a57612059612bd4565b5b600061206884828501611d79565b91505092915050565b6000806020838503121561208857612087612bd4565b5b600083013567ffffffffffffffff8111156120a6576120a5612bcf565b5b6120b285828601611dbc565b92509250509250929050565b6000602082840312156120d4576120d3612bd4565b5b60006120e284828501611e12565b91505092915050565b6000806040838503121561210257612101612bd4565b5b600061211085828601611e12565b925050602061212185828601611d25565b9150509250929050565b6121348161292b565b82525050565b6121438161294f565b82525050565b60006121548261282d565b61215e8185612843565b935061216e8185602086016129c0565b61217781612bd9565b840191505092915050565b600061218d82612838565b6121978185612854565b93506121a78185602086016129c0565b6121b081612bd9565b840191505092915050565b60006121c682612838565b6121d08185612865565b93506121e08185602086016129c0565b80840191505092915050565b60006121f9601283612854565b915061220482612bea565b602082019050919050565b600061221c603283612854565b915061222782612c13565b604082019050919050565b600061223f602683612854565b915061224a82612c62565b604082019050919050565b6000612262602583612854565b915061226d82612cb1565b604082019050919050565b6000612285601c83612854565b915061229082612d00565b602082019050919050565b60006122a8602483612854565b91506122b382612d29565b604082019050919050565b60006122cb601983612854565b91506122d682612d78565b602082019050919050565b60006122ee602c83612854565b91506122f982612da1565b604082019050919050565b6000612311603883612854565b915061231c82612df0565b604082019050919050565b6000612334602a83612854565b915061233f82612e3f565b604082019050919050565b6000612357602983612854565b915061236282612e8e565b604082019050919050565b600061237a602083612854565b915061238582612edd565b602082019050919050565b600061239d602c83612854565b91506123a882612f06565b604082019050919050565b60006123c0602083612854565b91506123cb82612f55565b602082019050919050565b60006123e3601183612854565b91506123ee82612f7e565b602082019050919050565b6000612406602f83612854565b915061241182612fa7565b604082019050919050565b6000612429601783612854565b915061243482612ff6565b602082019050919050565b600061244c602183612854565b91506124578261301f565b604082019050919050565b600061246f603183612854565b915061247a8261306e565b604082019050919050565b61248e816129a7565b82525050565b60006124a082856121bb565b91506124ac82846121bb565b91508190509392505050565b60006020820190506124cd600083018461212b565b92915050565b60006080820190506124e8600083018761212b565b6124f5602083018661212b565b6125026040830185612485565b81810360608301526125148184612149565b905095945050505050565b6000602082019050612534600083018461213a565b92915050565b600060208201905081810360008301526125548184612182565b905092915050565b60006020820190508181036000830152612575816121ec565b9050919050565b600060208201905081810360008301526125958161220f565b9050919050565b600060208201905081810360008301526125b581612232565b9050919050565b600060208201905081810360008301526125d581612255565b9050919050565b600060208201905081810360008301526125f581612278565b9050919050565b600060208201905081810360008301526126158161229b565b9050919050565b60006020820190508181036000830152612635816122be565b9050919050565b60006020820190508181036000830152612655816122e1565b9050919050565b6000602082019050818103600083015261267581612304565b9050919050565b6000602082019050818103600083015261269581612327565b9050919050565b600060208201905081810360008301526126b58161234a565b9050919050565b600060208201905081810360008301526126d58161236d565b9050919050565b600060208201905081810360008301526126f581612390565b9050919050565b60006020820190508181036000830152612715816123b3565b9050919050565b60006020820190508181036000830152612735816123d6565b9050919050565b60006020820190508181036000830152612755816123f9565b9050919050565b600060208201905081810360008301526127758161241c565b9050919050565b600060208201905081810360008301526127958161243f565b9050919050565b600060208201905081810360008301526127b581612462565b9050919050565b60006020820190506127d16000830184612485565b92915050565b60006127e16127f2565b90506127ed8282612a25565b919050565b6000604051905090565b600067ffffffffffffffff82111561281757612816612b8c565b5b61282082612bd9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061287b826129a7565b9150612886836129a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128bb576128ba612ad0565b5b828201905092915050565b60006128d1826129a7565b91506128dc836129a7565b9250826128ec576128eb612aff565b5b828204905092915050565b6000612902826129a7565b915061290d836129a7565b9250828210156129205761291f612ad0565b5b828203905092915050565b600061293682612987565b9050919050565b600061294882612987565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156129de5780820151818401526020810190506129c3565b838111156129ed576000848401525b50505050565b60006002820490506001821680612a0b57607f821691505b60208210811415612a1f57612a1e612b2e565b5b50919050565b612a2e82612bd9565b810181811067ffffffffffffffff82111715612a4d57612a4c612b8c565b5b80604052505050565b6000612a61826129a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a9457612a93612ad0565b5b600182019050919050565b6000612aaa826129a7565b9150612ab5836129a7565b925082612ac557612ac4612aff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f74204d696e7465720000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e20556e617661696c61626c65000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4572723a20746f6b656e20697320736f756c626f756e64000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6130c68161292b565b81146130d157600080fd5b50565b6130dd8161293d565b81146130e857600080fd5b50565b6130f48161294f565b81146130ff57600080fd5b50565b61310b8161295b565b811461311657600080fd5b50565b613122816129a7565b811461312d57600080fd5b5056fea264697066735822122089f3d7851ad8254e5231bef4edfb622c5119cf7a4c169eeb763676dd3f2de96064736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad578063b88d4fde11610071578063b88d4fde146102f2578063c87b56dd1461030e578063e985e9c51461033e578063f2fde38b1461036e578063fca3b5aa1461038a57610121565b8063715018a6146102745780638da5cb5b1461027e57806394bf804d1461029c57806395d89b41146102b8578063a22cb465146102d657610121565b8063095ea7b3116100f4578063095ea7b3146101c057806323b872dd146101dc57806342842e0e146101f85780636352211e1461021457806370a082311461024457610121565b806301ffc9a71461012657806302fe53051461015657806306fdde0314610172578063081812fc14610190575b600080fd5b610140600480360381019061013b9190612017565b6103a6565b60405161014d919061251f565b60405180910390f35b610170600480360381019061016b9190612071565b610488565b005b61017a61051a565b604051610187919061253a565b60405180910390f35b6101aa60048036038101906101a591906120be565b6105ac565b6040516101b791906124b8565b60405180910390f35b6101da60048036038101906101d59190611fd7565b610631565b005b6101f660048036038101906101f19190611ec1565b610749565b005b610212600480360381019061020d9190611ec1565b6107a9565b005b61022e600480360381019061022991906120be565b6107c9565b60405161023b91906124b8565b60405180910390f35b61025e60048036038101906102599190611e27565b61087b565b60405161026b91906127bc565b60405180910390f35b61027c610933565b005b6102866109bb565b60405161029391906124b8565b60405180910390f35b6102b660048036038101906102b191906120eb565b6109e5565b005b6102c0610ac8565b6040516102cd919061253a565b60405180910390f35b6102f060048036038101906102eb9190611f97565b610b5a565b005b61030c60048036038101906103079190611f14565b610b70565b005b610328600480360381019061032391906120be565b610bd2565b604051610335919061253a565b60405180910390f35b61035860048036038101906103539190611e81565b610c79565b604051610365919061251f565b60405180910390f35b61038860048036038101906103839190611e27565b610d0d565b005b6103a4600480360381019061039f9190611e54565b610e05565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061047157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610481575061048082610ec5565b5b9050919050565b610490610f2f565b73ffffffffffffffffffffffffffffffffffffffff166104ae6109bb565b73ffffffffffffffffffffffffffffffffffffffff1614610504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fb906126fc565b60405180910390fd5b818160089190610515929190611c40565b505050565b606060008054610529906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610555906129f3565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b5050505050905090565b60006105b782610f37565b6105f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ed906126dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061063c826107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a49061277c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106cc610f2f565b73ffffffffffffffffffffffffffffffffffffffff1614806106fb57506106fa816106f5610f2f565b610c79565b5b61073a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107319061265c565b60405180910390fd5b6107448383610fa3565b505050565b61075a610754610f2f565b8261105c565b610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107909061279c565b60405180910390fd5b6107a483838361113a565b505050565b6107c483838360405180602001604052806000815250610b70565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610872576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108699061269c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e39061267c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61093b610f2f565b73ffffffffffffffffffffffffffffffffffffffff166109596109bb565b73ffffffffffffffffffffffffffffffffffffffff16146109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906126fc565b60405180910390fd5b6109b960006113a1565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c9061255c565b60405180910390fd5b611388821115610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab19061271c565b60405180910390fd5b610ac48183611467565b5050565b606060018054610ad7906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b03906129f3565b8015610b505780601f10610b2557610100808354040283529160200191610b50565b820191906000526020600020905b815481529060010190602001808311610b3357829003601f168201915b5050505050905090565b610b6c610b65610f2f565b8383611641565b5050565b610b81610b7b610f2f565b8361105c565b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb79061279c565b60405180910390fd5b610bcc848484846117ae565b50505050565b6060610bdd82610f37565b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c139061273c565b60405180910390fd5b6000610c2661180a565b90506000815111610c465760405180602001604052806000815250610c71565b80610c508461189c565b604051602001610c61929190612494565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d15610f2f565b73ffffffffffffffffffffffffffffffffffffffff16610d336109bb565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906126fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df09061259c565b60405180910390fd5b610e02816113a1565b50565b610e0d610f2f565b73ffffffffffffffffffffffffffffffffffffffff16610e2b6109bb565b73ffffffffffffffffffffffffffffffffffffffff1614610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e78906126fc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611016836107c9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061106782610f37565b6110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d9061263c565b60405180910390fd5b60006110b1836107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061112057508373ffffffffffffffffffffffffffffffffffffffff16611108846105ac565b73ffffffffffffffffffffffffffffffffffffffff16145b8061113157506111308185610c79565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661115a826107c9565b73ffffffffffffffffffffffffffffffffffffffff16146111b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a7906125bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906125fc565b60405180910390fd5b61122b8383836119fd565b611236600082610fa3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128691906128f7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112dd9190612870565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461139c838383611a7c565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce906126bc565b60405180910390fd5b6114e081610f37565b15611520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611517906125dc565b60405180910390fd5b61152c600083836119fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461157c9190612870565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461163d60008383611a7c565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a79061261c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117a1919061251f565b60405180910390a3505050565b6117b984848461113a565b6117c584848484611a81565b611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb9061257c565b60405180910390fd5b50505050565b606060088054611819906129f3565b80601f0160208091040260200160405190810160405280929190818152602001828054611845906129f3565b80156118925780601f1061186757610100808354040283529160200191611892565b820191906000526020600020905b81548152906001019060200180831161187557829003601f168201915b5050505050905090565b606060008214156118e4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506119f8565b600082905060005b600082146119165780806118ff90612a56565b915050600a8261190f91906128c6565b91506118ec565b60008167ffffffffffffffff81111561193257611931612b8c565b5b6040519080825280601f01601f1916602001820160405280156119645781602001600182028036833780820191505090505b5090505b600085146119f15760018261197d91906128f7565b9150600a8561198c9190612a9f565b60306119989190612870565b60f81b8183815181106119ae576119ad612b5d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856119ea91906128c6565b9450611968565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a639061275c565b60405180910390fd5b611a77838383611c18565b505050565b505050565b6000611aa28473ffffffffffffffffffffffffffffffffffffffff16611c1d565b15611c0b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611acb610f2f565b8786866040518563ffffffff1660e01b8152600401611aed94939291906124d3565b602060405180830381600087803b158015611b0757600080fd5b505af1925050508015611b3857506040513d601f19601f82011682018060405250810190611b359190612044565b60015b611bbb573d8060008114611b68576040519150601f19603f3d011682016040523d82523d6000602084013e611b6d565b606091505b50600081511415611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa9061257c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c10565b600190505b949350505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611c4c906129f3565b90600052602060002090601f016020900481019282611c6e5760008555611cb5565b82601f10611c8757803560ff1916838001178555611cb5565b82800160010185558215611cb5579182015b82811115611cb4578235825591602001919060010190611c99565b5b509050611cc29190611cc6565b5090565b5b80821115611cdf576000816000905550600101611cc7565b5090565b6000611cf6611cf1846127fc565b6127d7565b905082815260208101848484011115611d1257611d11612bca565b5b611d1d8482856129b1565b509392505050565b600081359050611d34816130bd565b92915050565b600081359050611d49816130d4565b92915050565b600081359050611d5e816130eb565b92915050565b600081359050611d7381613102565b92915050565b600081519050611d8881613102565b92915050565b600082601f830112611da357611da2612bc0565b5b8135611db3848260208601611ce3565b91505092915050565b60008083601f840112611dd257611dd1612bc0565b5b8235905067ffffffffffffffff811115611def57611dee612bbb565b5b602083019150836001820283011115611e0b57611e0a612bc5565b5b9250929050565b600081359050611e2181613119565b92915050565b600060208284031215611e3d57611e3c612bd4565b5b6000611e4b84828501611d25565b91505092915050565b600060208284031215611e6a57611e69612bd4565b5b6000611e7884828501611d3a565b91505092915050565b60008060408385031215611e9857611e97612bd4565b5b6000611ea685828601611d25565b9250506020611eb785828601611d25565b9150509250929050565b600080600060608486031215611eda57611ed9612bd4565b5b6000611ee886828701611d25565b9350506020611ef986828701611d25565b9250506040611f0a86828701611e12565b9150509250925092565b60008060008060808587031215611f2e57611f2d612bd4565b5b6000611f3c87828801611d25565b9450506020611f4d87828801611d25565b9350506040611f5e87828801611e12565b925050606085013567ffffffffffffffff811115611f7f57611f7e612bcf565b5b611f8b87828801611d8e565b91505092959194509250565b60008060408385031215611fae57611fad612bd4565b5b6000611fbc85828601611d25565b9250506020611fcd85828601611d4f565b9150509250929050565b60008060408385031215611fee57611fed612bd4565b5b6000611ffc85828601611d25565b925050602061200d85828601611e12565b9150509250929050565b60006020828403121561202d5761202c612bd4565b5b600061203b84828501611d64565b91505092915050565b60006020828403121561205a57612059612bd4565b5b600061206884828501611d79565b91505092915050565b6000806020838503121561208857612087612bd4565b5b600083013567ffffffffffffffff8111156120a6576120a5612bcf565b5b6120b285828601611dbc565b92509250509250929050565b6000602082840312156120d4576120d3612bd4565b5b60006120e284828501611e12565b91505092915050565b6000806040838503121561210257612101612bd4565b5b600061211085828601611e12565b925050602061212185828601611d25565b9150509250929050565b6121348161292b565b82525050565b6121438161294f565b82525050565b60006121548261282d565b61215e8185612843565b935061216e8185602086016129c0565b61217781612bd9565b840191505092915050565b600061218d82612838565b6121978185612854565b93506121a78185602086016129c0565b6121b081612bd9565b840191505092915050565b60006121c682612838565b6121d08185612865565b93506121e08185602086016129c0565b80840191505092915050565b60006121f9601283612854565b915061220482612bea565b602082019050919050565b600061221c603283612854565b915061222782612c13565b604082019050919050565b600061223f602683612854565b915061224a82612c62565b604082019050919050565b6000612262602583612854565b915061226d82612cb1565b604082019050919050565b6000612285601c83612854565b915061229082612d00565b602082019050919050565b60006122a8602483612854565b91506122b382612d29565b604082019050919050565b60006122cb601983612854565b91506122d682612d78565b602082019050919050565b60006122ee602c83612854565b91506122f982612da1565b604082019050919050565b6000612311603883612854565b915061231c82612df0565b604082019050919050565b6000612334602a83612854565b915061233f82612e3f565b604082019050919050565b6000612357602983612854565b915061236282612e8e565b604082019050919050565b600061237a602083612854565b915061238582612edd565b602082019050919050565b600061239d602c83612854565b91506123a882612f06565b604082019050919050565b60006123c0602083612854565b91506123cb82612f55565b602082019050919050565b60006123e3601183612854565b91506123ee82612f7e565b602082019050919050565b6000612406602f83612854565b915061241182612fa7565b604082019050919050565b6000612429601783612854565b915061243482612ff6565b602082019050919050565b600061244c602183612854565b91506124578261301f565b604082019050919050565b600061246f603183612854565b915061247a8261306e565b604082019050919050565b61248e816129a7565b82525050565b60006124a082856121bb565b91506124ac82846121bb565b91508190509392505050565b60006020820190506124cd600083018461212b565b92915050565b60006080820190506124e8600083018761212b565b6124f5602083018661212b565b6125026040830185612485565b81810360608301526125148184612149565b905095945050505050565b6000602082019050612534600083018461213a565b92915050565b600060208201905081810360008301526125548184612182565b905092915050565b60006020820190508181036000830152612575816121ec565b9050919050565b600060208201905081810360008301526125958161220f565b9050919050565b600060208201905081810360008301526125b581612232565b9050919050565b600060208201905081810360008301526125d581612255565b9050919050565b600060208201905081810360008301526125f581612278565b9050919050565b600060208201905081810360008301526126158161229b565b9050919050565b60006020820190508181036000830152612635816122be565b9050919050565b60006020820190508181036000830152612655816122e1565b9050919050565b6000602082019050818103600083015261267581612304565b9050919050565b6000602082019050818103600083015261269581612327565b9050919050565b600060208201905081810360008301526126b58161234a565b9050919050565b600060208201905081810360008301526126d58161236d565b9050919050565b600060208201905081810360008301526126f581612390565b9050919050565b60006020820190508181036000830152612715816123b3565b9050919050565b60006020820190508181036000830152612735816123d6565b9050919050565b60006020820190508181036000830152612755816123f9565b9050919050565b600060208201905081810360008301526127758161241c565b9050919050565b600060208201905081810360008301526127958161243f565b9050919050565b600060208201905081810360008301526127b581612462565b9050919050565b60006020820190506127d16000830184612485565b92915050565b60006127e16127f2565b90506127ed8282612a25565b919050565b6000604051905090565b600067ffffffffffffffff82111561281757612816612b8c565b5b61282082612bd9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061287b826129a7565b9150612886836129a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156128bb576128ba612ad0565b5b828201905092915050565b60006128d1826129a7565b91506128dc836129a7565b9250826128ec576128eb612aff565b5b828204905092915050565b6000612902826129a7565b915061290d836129a7565b9250828210156129205761291f612ad0565b5b828203905092915050565b600061293682612987565b9050919050565b600061294882612987565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156129de5780820151818401526020810190506129c3565b838111156129ed576000848401525b50505050565b60006002820490506001821680612a0b57607f821691505b60208210811415612a1f57612a1e612b2e565b5b50919050565b612a2e82612bd9565b810181811067ffffffffffffffff82111715612a4d57612a4c612b8c565b5b80604052505050565b6000612a61826129a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a9457612a93612ad0565b5b600182019050919050565b6000612aaa826129a7565b9150612ab5836129a7565b925082612ac557612ac4612aff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f74204d696e7465720000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e20556e617661696c61626c65000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4572723a20746f6b656e20697320736f756c626f756e64000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6130c68161292b565b81146130d157600080fd5b50565b6130dd8161293d565b81146130e857600080fd5b50565b6130f48161294f565b81146130ff57600080fd5b50565b61310b8161295b565b811461311657600080fd5b50565b613122816129a7565b811461312d57600080fd5b5056fea264697066735822122089f3d7851ad8254e5231bef4edfb622c5119cf7a4c169eeb763676dd3f2de96064736f6c63430008070033

Deployed Bytecode Sourcemap

37284:995:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24109:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37587:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25054:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26613:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26136:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27363:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27773:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24748:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24478:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38057:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25223:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26906:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28029:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25398:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27132:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37482:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24109:305;24211:4;24263:25;24248:40;;;:11;:40;;;;:105;;;;24320:33;24305:48;;;:11;:48;;;;24248:105;:158;;;;24370:36;24394:11;24370:23;:36::i;:::-;24248:158;24228:178;;24109:305;;;:::o;37587:87::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37660:6:::1;;37656:3;:10;;;;;;;:::i;:::-;;37587:87:::0;;:::o;25054:100::-;25108:13;25141:5;25134:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25054:100;:::o;26613:221::-;26689:7;26717:16;26725:7;26717;:16::i;:::-;26709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26802:15;:24;26818:7;26802:24;;;;;;;;;;;;;;;;;;;;;26795:31;;26613:221;;;:::o;26136:411::-;26217:13;26233:23;26248:7;26233:14;:23::i;:::-;26217:39;;26281:5;26275:11;;:2;:11;;;;26267:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26375:5;26359:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26384:37;26401:5;26408:12;:10;:12::i;:::-;26384:16;:37::i;:::-;26359:62;26337:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26518:21;26527:2;26531:7;26518:8;:21::i;:::-;26206:341;26136:411;;:::o;27363:339::-;27558:41;27577:12;:10;:12::i;:::-;27591:7;27558:18;:41::i;:::-;27550:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27666:28;27676:4;27682:2;27686:7;27666:9;:28::i;:::-;27363:339;;;:::o;27773:185::-;27911:39;27928:4;27934:2;27938:7;27911:39;;;;;;;;;;;;:16;:39::i;:::-;27773:185;;;:::o;24748:239::-;24820:7;24840:13;24856:7;:16;24864:7;24856:16;;;;;;;;;;;;;;;;;;;;;24840:32;;24908:1;24891:19;;:5;:19;;;;24883:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24974:5;24967:12;;;24748:239;;;:::o;24478:208::-;24550:7;24595:1;24578:19;;:5;:19;;;;24570:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24662:9;:16;24672:5;24662:16;;;;;;;;;;;;;;;;24655:23;;24478:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;38057:213::-;38142:6;;;;;;;;;;;38130:18;;:10;:18;;;38122:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38201:4;38190:7;:15;;38182:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38238:24;38244:8;38254:7;38238:5;:24::i;:::-;38057:213;;:::o;25223:104::-;25279:13;25312:7;25305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25223:104;:::o;26906:155::-;27001:52;27020:12;:10;:12::i;:::-;27034:8;27044;27001:18;:52::i;:::-;26906:155;;:::o;28029:328::-;28204:41;28223:12;:10;:12::i;:::-;28237:7;28204:18;:41::i;:::-;28196:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28310:39;28324:4;28330:2;28334:7;28343:5;28310:13;:39::i;:::-;28029:328;;;;:::o;25398:334::-;25471:13;25505:16;25513:7;25505;:16::i;:::-;25497:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25586:21;25610:10;:8;:10::i;:::-;25586:34;;25662:1;25644:7;25638:21;:25;:86;;;;;;;;;;;;;;;;;25690:7;25699:18;:7;:16;:18::i;:::-;25673:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25638:86;25631:93;;;25398:334;;;:::o;27132:164::-;27229:4;27253:18;:25;27272:5;27253:25;;;;;;;;;;;;;;;:35;27279:8;27253:35;;;;;;;;;;;;;;;;;;;;;;;;;27246:42;;27132:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;37482:99::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37564:9:::1;37557:6;;:16;;;;;;;;;;;;;;;;;;37482:99:::0;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;29867:127::-;29932:4;29984:1;29956:30;;:7;:16;29964:7;29956:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29949:37;;29867:127;;;:::o;34013:174::-;34115:2;34088:15;:24;34104:7;34088:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34171:7;34167:2;34133:46;;34142:23;34157:7;34142:14;:23::i;:::-;34133:46;;;;;;;;;;;;34013:174;;:::o;30161:348::-;30254:4;30279:16;30287:7;30279;:16::i;:::-;30271:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30355:13;30371:23;30386:7;30371:14;:23::i;:::-;30355:39;;30424:5;30413:16;;:7;:16;;;:51;;;;30457:7;30433:31;;:20;30445:7;30433:11;:20::i;:::-;:31;;;30413:51;:87;;;;30468:32;30485:5;30492:7;30468:16;:32::i;:::-;30413:87;30405:96;;;30161:348;;;;:::o;33270:625::-;33429:4;33402:31;;:23;33417:7;33402:14;:23::i;:::-;:31;;;33394:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33508:1;33494:16;;:2;:16;;;;33486:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:39;33585:4;33591:2;33595:7;33564:20;:39::i;:::-;33668:29;33685:1;33689:7;33668:8;:29::i;:::-;33729:1;33710:9;:15;33720:4;33710:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33758:1;33741:9;:13;33751:2;33741:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33789:2;33770:7;:16;33778:7;33770:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33828:7;33824:2;33809:27;;33818:4;33809:27;;;;;;;;;;;;33849:38;33869:4;33875:2;33879:7;33849:19;:38::i;:::-;33270:625;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;31845:439::-;31939:1;31925:16;;:2;:16;;;;31917:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31998:16;32006:7;31998;:16::i;:::-;31997:17;31989:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:45;32089:1;32093:2;32097:7;32060:20;:45::i;:::-;32135:1;32118:9;:13;32128:2;32118:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32166:2;32147:7;:16;32155:7;32147:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32211:7;32207:2;32186:33;;32203:1;32186:33;;;;;;;;;;;;32232:44;32260:1;32264:2;32268:7;32232:19;:44::i;:::-;31845:439;;:::o;34329:315::-;34484:8;34475:17;;:5;:17;;;;34467:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34571:8;34533:18;:25;34552:5;34533:25;;;;;;;;;;;;;;;:35;34559:8;34533:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34617:8;34595:41;;34610:5;34595:41;;;34627:8;34595:41;;;;;;:::i;:::-;;;;;;;;34329:315;;;:::o;29239:::-;29396:28;29406:4;29412:2;29416:7;29396:9;:28::i;:::-;29443:48;29466:4;29472:2;29476:7;29485:5;29443:22;:48::i;:::-;29435:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29239:315;;;;:::o;37680:96::-;37732:13;37765:3;37758:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37680:96;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;37782:269::-;37952:1;37936:18;;:4;:18;;;37928:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37996:45;38023:4;38029:2;38033:7;37996:26;:45::i;:::-;37782:269;;;:::o;37091:125::-;;;;:::o;35209:799::-;35364:4;35385:15;:2;:13;;;:15::i;:::-;35381:620;;;35437:2;35421:36;;;35458:12;:10;:12::i;:::-;35472:4;35478:7;35487:5;35421:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35680:1;35663:6;:13;:18;35659:272;;;35706:60;;;;;;;;;;:::i;:::-;;;;;;;;35659:272;35881:6;35875:13;35866:6;35862:2;35858:15;35851:38;35417:529;35554:41;;;35544:51;;;:6;:51;;;;35537:58;;;;;35381:620;35985:4;35978:11;;35209:799;;;;;;;:::o;36580:126::-;;;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:155::-;622:5;660:6;647:20;638:29;;676:41;711:5;676:41;:::i;:::-;568:155;;;;:::o;729:133::-;772:5;810:6;797:20;788:29;;826:30;850:5;826:30;:::i;:::-;729:133;;;;:::o;868:137::-;913:5;951:6;938:20;929:29;;967:32;993:5;967:32;:::i;:::-;868:137;;;;:::o;1011:141::-;1067:5;1098:6;1092:13;1083:22;;1114:32;1140:5;1114:32;:::i;:::-;1011:141;;;;:::o;1171:338::-;1226:5;1275:3;1268:4;1260:6;1256:17;1252:27;1242:122;;1283:79;;:::i;:::-;1242:122;1400:6;1387:20;1425:78;1499:3;1491:6;1484:4;1476:6;1472:17;1425:78;:::i;:::-;1416:87;;1232:277;1171:338;;;;:::o;1529:553::-;1587:8;1597:6;1647:3;1640:4;1632:6;1628:17;1624:27;1614:122;;1655:79;;:::i;:::-;1614:122;1768:6;1755:20;1745:30;;1798:18;1790:6;1787:30;1784:117;;;1820:79;;:::i;:::-;1784:117;1934:4;1926:6;1922:17;1910:29;;1988:3;1980:4;1972:6;1968:17;1958:8;1954:32;1951:41;1948:128;;;1995:79;;:::i;:::-;1948:128;1529:553;;;;;:::o;2088:139::-;2134:5;2172:6;2159:20;2150:29;;2188:33;2215:5;2188:33;:::i;:::-;2088:139;;;;:::o;2233:329::-;2292:6;2341:2;2329:9;2320:7;2316:23;2312:32;2309:119;;;2347:79;;:::i;:::-;2309:119;2467:1;2492:53;2537:7;2528:6;2517:9;2513:22;2492:53;:::i;:::-;2482:63;;2438:117;2233:329;;;;:::o;2568:345::-;2635:6;2684:2;2672:9;2663:7;2659:23;2655:32;2652:119;;;2690:79;;:::i;:::-;2652:119;2810:1;2835:61;2888:7;2879:6;2868:9;2864:22;2835:61;:::i;:::-;2825:71;;2781:125;2568:345;;;;:::o;2919:474::-;2987:6;2995;3044:2;3032:9;3023:7;3019:23;3015:32;3012:119;;;3050:79;;:::i;:::-;3012:119;3170:1;3195:53;3240:7;3231:6;3220:9;3216:22;3195:53;:::i;:::-;3185:63;;3141:117;3297:2;3323:53;3368:7;3359:6;3348:9;3344:22;3323:53;:::i;:::-;3313:63;;3268:118;2919:474;;;;;:::o;3399:619::-;3476:6;3484;3492;3541:2;3529:9;3520:7;3516:23;3512:32;3509:119;;;3547:79;;:::i;:::-;3509:119;3667:1;3692:53;3737:7;3728:6;3717:9;3713:22;3692:53;:::i;:::-;3682:63;;3638:117;3794:2;3820:53;3865:7;3856:6;3845:9;3841:22;3820:53;:::i;:::-;3810:63;;3765:118;3922:2;3948:53;3993:7;3984:6;3973:9;3969:22;3948:53;:::i;:::-;3938:63;;3893:118;3399:619;;;;;:::o;4024:943::-;4119:6;4127;4135;4143;4192:3;4180:9;4171:7;4167:23;4163:33;4160:120;;;4199:79;;:::i;:::-;4160:120;4319:1;4344:53;4389:7;4380:6;4369:9;4365:22;4344:53;:::i;:::-;4334:63;;4290:117;4446:2;4472:53;4517:7;4508:6;4497:9;4493:22;4472:53;:::i;:::-;4462:63;;4417:118;4574:2;4600:53;4645:7;4636:6;4625:9;4621:22;4600:53;:::i;:::-;4590:63;;4545:118;4730:2;4719:9;4715:18;4702:32;4761:18;4753:6;4750:30;4747:117;;;4783:79;;:::i;:::-;4747:117;4888:62;4942:7;4933:6;4922:9;4918:22;4888:62;:::i;:::-;4878:72;;4673:287;4024:943;;;;;;;:::o;4973:468::-;5038:6;5046;5095:2;5083:9;5074:7;5070:23;5066:32;5063:119;;;5101:79;;:::i;:::-;5063:119;5221:1;5246:53;5291:7;5282:6;5271:9;5267:22;5246:53;:::i;:::-;5236:63;;5192:117;5348:2;5374:50;5416:7;5407:6;5396:9;5392:22;5374:50;:::i;:::-;5364:60;;5319:115;4973:468;;;;;:::o;5447:474::-;5515:6;5523;5572:2;5560:9;5551:7;5547:23;5543:32;5540:119;;;5578:79;;:::i;:::-;5540:119;5698:1;5723:53;5768:7;5759:6;5748:9;5744:22;5723:53;:::i;:::-;5713:63;;5669:117;5825:2;5851:53;5896:7;5887:6;5876:9;5872:22;5851:53;:::i;:::-;5841:63;;5796:118;5447:474;;;;;:::o;5927:327::-;5985:6;6034:2;6022:9;6013:7;6009:23;6005:32;6002:119;;;6040:79;;:::i;:::-;6002:119;6160:1;6185:52;6229:7;6220:6;6209:9;6205:22;6185:52;:::i;:::-;6175:62;;6131:116;5927:327;;;;:::o;6260:349::-;6329:6;6378:2;6366:9;6357:7;6353:23;6349:32;6346:119;;;6384:79;;:::i;:::-;6346:119;6504:1;6529:63;6584:7;6575:6;6564:9;6560:22;6529:63;:::i;:::-;6519:73;;6475:127;6260:349;;;;:::o;6615:529::-;6686:6;6694;6743:2;6731:9;6722:7;6718:23;6714:32;6711:119;;;6749:79;;:::i;:::-;6711:119;6897:1;6886:9;6882:17;6869:31;6927:18;6919:6;6916:30;6913:117;;;6949:79;;:::i;:::-;6913:117;7062:65;7119:7;7110:6;7099:9;7095:22;7062:65;:::i;:::-;7044:83;;;;6840:297;6615:529;;;;;:::o;7150:329::-;7209:6;7258:2;7246:9;7237:7;7233:23;7229:32;7226:119;;;7264:79;;:::i;:::-;7226:119;7384:1;7409:53;7454:7;7445:6;7434:9;7430:22;7409:53;:::i;:::-;7399:63;;7355:117;7150:329;;;;:::o;7485:474::-;7553:6;7561;7610:2;7598:9;7589:7;7585:23;7581:32;7578:119;;;7616:79;;:::i;:::-;7578:119;7736:1;7761:53;7806:7;7797:6;7786:9;7782:22;7761:53;:::i;:::-;7751:63;;7707:117;7863:2;7889:53;7934:7;7925:6;7914:9;7910:22;7889:53;:::i;:::-;7879:63;;7834:118;7485:474;;;;;:::o;7965:118::-;8052:24;8070:5;8052:24;:::i;:::-;8047:3;8040:37;7965:118;;:::o;8089:109::-;8170:21;8185:5;8170:21;:::i;:::-;8165:3;8158:34;8089:109;;:::o;8204:360::-;8290:3;8318:38;8350:5;8318:38;:::i;:::-;8372:70;8435:6;8430:3;8372:70;:::i;:::-;8365:77;;8451:52;8496:6;8491:3;8484:4;8477:5;8473:16;8451:52;:::i;:::-;8528:29;8550:6;8528:29;:::i;:::-;8523:3;8519:39;8512:46;;8294:270;8204:360;;;;:::o;8570:364::-;8658:3;8686:39;8719:5;8686:39;:::i;:::-;8741:71;8805:6;8800:3;8741:71;:::i;:::-;8734:78;;8821:52;8866:6;8861:3;8854:4;8847:5;8843:16;8821:52;:::i;:::-;8898:29;8920:6;8898:29;:::i;:::-;8893:3;8889:39;8882:46;;8662:272;8570:364;;;;:::o;8940:377::-;9046:3;9074:39;9107:5;9074:39;:::i;:::-;9129:89;9211:6;9206:3;9129:89;:::i;:::-;9122:96;;9227:52;9272:6;9267:3;9260:4;9253:5;9249:16;9227:52;:::i;:::-;9304:6;9299:3;9295:16;9288:23;;9050:267;8940:377;;;;:::o;9323:366::-;9465:3;9486:67;9550:2;9545:3;9486:67;:::i;:::-;9479:74;;9562:93;9651:3;9562:93;:::i;:::-;9680:2;9675:3;9671:12;9664:19;;9323:366;;;:::o;9695:::-;9837:3;9858:67;9922:2;9917:3;9858:67;:::i;:::-;9851:74;;9934:93;10023:3;9934:93;:::i;:::-;10052:2;10047:3;10043:12;10036:19;;9695:366;;;:::o;10067:::-;10209:3;10230:67;10294:2;10289:3;10230:67;:::i;:::-;10223:74;;10306:93;10395:3;10306:93;:::i;:::-;10424:2;10419:3;10415:12;10408:19;;10067:366;;;:::o;10439:::-;10581:3;10602:67;10666:2;10661:3;10602:67;:::i;:::-;10595:74;;10678:93;10767:3;10678:93;:::i;:::-;10796:2;10791:3;10787:12;10780:19;;10439:366;;;:::o;10811:::-;10953:3;10974:67;11038:2;11033:3;10974:67;:::i;:::-;10967:74;;11050:93;11139:3;11050:93;:::i;:::-;11168:2;11163:3;11159:12;11152:19;;10811:366;;;:::o;11183:::-;11325:3;11346:67;11410:2;11405:3;11346:67;:::i;:::-;11339:74;;11422:93;11511:3;11422:93;:::i;:::-;11540:2;11535:3;11531:12;11524:19;;11183:366;;;:::o;11555:::-;11697:3;11718:67;11782:2;11777:3;11718:67;:::i;:::-;11711:74;;11794:93;11883:3;11794:93;:::i;:::-;11912:2;11907:3;11903:12;11896:19;;11555:366;;;:::o;11927:::-;12069:3;12090:67;12154:2;12149:3;12090:67;:::i;:::-;12083:74;;12166:93;12255:3;12166:93;:::i;:::-;12284:2;12279:3;12275:12;12268:19;;11927:366;;;:::o;12299:::-;12441:3;12462:67;12526:2;12521:3;12462:67;:::i;:::-;12455:74;;12538:93;12627:3;12538:93;:::i;:::-;12656:2;12651:3;12647:12;12640:19;;12299:366;;;:::o;12671:::-;12813:3;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12910:93;12999:3;12910:93;:::i;:::-;13028:2;13023:3;13019:12;13012:19;;12671:366;;;:::o;13043:::-;13185:3;13206:67;13270:2;13265:3;13206:67;:::i;:::-;13199:74;;13282:93;13371:3;13282:93;:::i;:::-;13400:2;13395:3;13391:12;13384:19;;13043:366;;;:::o;13415:::-;13557:3;13578:67;13642:2;13637:3;13578:67;:::i;:::-;13571:74;;13654:93;13743:3;13654:93;:::i;:::-;13772:2;13767:3;13763:12;13756:19;;13415:366;;;:::o;13787:::-;13929:3;13950:67;14014:2;14009:3;13950:67;:::i;:::-;13943:74;;14026:93;14115:3;14026:93;:::i;:::-;14144:2;14139:3;14135:12;14128:19;;13787:366;;;:::o;14159:::-;14301:3;14322:67;14386:2;14381:3;14322:67;:::i;:::-;14315:74;;14398:93;14487:3;14398:93;:::i;:::-;14516:2;14511:3;14507:12;14500:19;;14159:366;;;:::o;14531:::-;14673:3;14694:67;14758:2;14753:3;14694:67;:::i;:::-;14687:74;;14770:93;14859:3;14770:93;:::i;:::-;14888:2;14883:3;14879:12;14872:19;;14531:366;;;:::o;14903:::-;15045:3;15066:67;15130:2;15125:3;15066:67;:::i;:::-;15059:74;;15142:93;15231:3;15142:93;:::i;:::-;15260:2;15255:3;15251:12;15244:19;;14903:366;;;:::o;15275:::-;15417:3;15438:67;15502:2;15497:3;15438:67;:::i;:::-;15431:74;;15514:93;15603:3;15514:93;:::i;:::-;15632:2;15627:3;15623:12;15616:19;;15275:366;;;:::o;15647:::-;15789:3;15810:67;15874:2;15869:3;15810:67;:::i;:::-;15803:74;;15886:93;15975:3;15886:93;:::i;:::-;16004:2;15999:3;15995:12;15988:19;;15647:366;;;:::o;16019:::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:118::-;16478:24;16496:5;16478:24;:::i;:::-;16473:3;16466:37;16391:118;;:::o;16515:435::-;16695:3;16717:95;16808:3;16799:6;16717:95;:::i;:::-;16710:102;;16829:95;16920:3;16911:6;16829:95;:::i;:::-;16822:102;;16941:3;16934:10;;16515:435;;;;;:::o;16956:222::-;17049:4;17087:2;17076:9;17072:18;17064:26;;17100:71;17168:1;17157:9;17153:17;17144:6;17100:71;:::i;:::-;16956:222;;;;:::o;17184:640::-;17379:4;17417:3;17406:9;17402:19;17394:27;;17431:71;17499:1;17488:9;17484:17;17475:6;17431:71;:::i;:::-;17512:72;17580:2;17569:9;17565:18;17556:6;17512:72;:::i;:::-;17594;17662:2;17651:9;17647:18;17638:6;17594:72;:::i;:::-;17713:9;17707:4;17703:20;17698:2;17687:9;17683:18;17676:48;17741:76;17812:4;17803:6;17741:76;:::i;:::-;17733:84;;17184:640;;;;;;;:::o;17830:210::-;17917:4;17955:2;17944:9;17940:18;17932:26;;17968:65;18030:1;18019:9;18015:17;18006:6;17968:65;:::i;:::-;17830:210;;;;:::o;18046:313::-;18159:4;18197:2;18186:9;18182:18;18174:26;;18246:9;18240:4;18236:20;18232:1;18221:9;18217:17;18210:47;18274:78;18347:4;18338:6;18274:78;:::i;:::-;18266:86;;18046:313;;;;:::o;18365:419::-;18531:4;18569:2;18558:9;18554:18;18546:26;;18618:9;18612:4;18608:20;18604:1;18593:9;18589:17;18582:47;18646:131;18772:4;18646:131;:::i;:::-;18638:139;;18365:419;;;:::o;18790:::-;18956:4;18994:2;18983:9;18979:18;18971:26;;19043:9;19037:4;19033:20;19029:1;19018:9;19014:17;19007:47;19071:131;19197:4;19071:131;:::i;:::-;19063:139;;18790:419;;;:::o;19215:::-;19381:4;19419:2;19408:9;19404:18;19396:26;;19468:9;19462:4;19458:20;19454:1;19443:9;19439:17;19432:47;19496:131;19622:4;19496:131;:::i;:::-;19488:139;;19215:419;;;:::o;19640:::-;19806:4;19844:2;19833:9;19829:18;19821:26;;19893:9;19887:4;19883:20;19879:1;19868:9;19864:17;19857:47;19921:131;20047:4;19921:131;:::i;:::-;19913:139;;19640:419;;;:::o;20065:::-;20231:4;20269:2;20258:9;20254:18;20246:26;;20318:9;20312:4;20308:20;20304:1;20293:9;20289:17;20282:47;20346:131;20472:4;20346:131;:::i;:::-;20338:139;;20065:419;;;:::o;20490:::-;20656:4;20694:2;20683:9;20679:18;20671:26;;20743:9;20737:4;20733:20;20729:1;20718:9;20714:17;20707:47;20771:131;20897:4;20771:131;:::i;:::-;20763:139;;20490:419;;;:::o;20915:::-;21081:4;21119:2;21108:9;21104:18;21096:26;;21168:9;21162:4;21158:20;21154:1;21143:9;21139:17;21132:47;21196:131;21322:4;21196:131;:::i;:::-;21188:139;;20915:419;;;:::o;21340:::-;21506:4;21544:2;21533:9;21529:18;21521:26;;21593:9;21587:4;21583:20;21579:1;21568:9;21564:17;21557:47;21621:131;21747:4;21621:131;:::i;:::-;21613:139;;21340:419;;;:::o;21765:::-;21931:4;21969:2;21958:9;21954:18;21946:26;;22018:9;22012:4;22008:20;22004:1;21993:9;21989:17;21982:47;22046:131;22172:4;22046:131;:::i;:::-;22038:139;;21765:419;;;:::o;22190:::-;22356:4;22394:2;22383:9;22379:18;22371:26;;22443:9;22437:4;22433:20;22429:1;22418:9;22414:17;22407:47;22471:131;22597:4;22471:131;:::i;:::-;22463:139;;22190:419;;;:::o;22615:::-;22781:4;22819:2;22808:9;22804:18;22796:26;;22868:9;22862:4;22858:20;22854:1;22843:9;22839:17;22832:47;22896:131;23022:4;22896:131;:::i;:::-;22888:139;;22615:419;;;:::o;23040:::-;23206:4;23244:2;23233:9;23229:18;23221:26;;23293:9;23287:4;23283:20;23279:1;23268:9;23264:17;23257:47;23321:131;23447:4;23321:131;:::i;:::-;23313:139;;23040:419;;;:::o;23465:::-;23631:4;23669:2;23658:9;23654:18;23646:26;;23718:9;23712:4;23708:20;23704:1;23693:9;23689:17;23682:47;23746:131;23872:4;23746:131;:::i;:::-;23738:139;;23465:419;;;:::o;23890:::-;24056:4;24094:2;24083:9;24079:18;24071:26;;24143:9;24137:4;24133:20;24129:1;24118:9;24114:17;24107:47;24171:131;24297:4;24171:131;:::i;:::-;24163:139;;23890:419;;;:::o;24315:::-;24481:4;24519:2;24508:9;24504:18;24496:26;;24568:9;24562:4;24558:20;24554:1;24543:9;24539:17;24532:47;24596:131;24722:4;24596:131;:::i;:::-;24588:139;;24315:419;;;:::o;24740:::-;24906:4;24944:2;24933:9;24929:18;24921:26;;24993:9;24987:4;24983:20;24979:1;24968:9;24964:17;24957:47;25021:131;25147:4;25021:131;:::i;:::-;25013:139;;24740:419;;;:::o;25165:::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:::-;25756:4;25794:2;25783:9;25779:18;25771:26;;25843:9;25837:4;25833:20;25829:1;25818:9;25814:17;25807:47;25871:131;25997:4;25871:131;:::i;:::-;25863:139;;25590:419;;;:::o;26015:::-;26181:4;26219:2;26208:9;26204:18;26196:26;;26268:9;26262:4;26258:20;26254:1;26243:9;26239:17;26232:47;26296:131;26422:4;26296:131;:::i;:::-;26288:139;;26015:419;;;:::o;26440:222::-;26533:4;26571:2;26560:9;26556:18;26548:26;;26584:71;26652:1;26641:9;26637:17;26628:6;26584:71;:::i;:::-;26440:222;;;;:::o;26668:129::-;26702:6;26729:20;;:::i;:::-;26719:30;;26758:33;26786:4;26778:6;26758:33;:::i;:::-;26668:129;;;:::o;26803:75::-;26836:6;26869:2;26863:9;26853:19;;26803:75;:::o;26884:307::-;26945:4;27035:18;27027:6;27024:30;27021:56;;;27057:18;;:::i;:::-;27021:56;27095:29;27117:6;27095:29;:::i;:::-;27087:37;;27179:4;27173;27169:15;27161:23;;26884:307;;;:::o;27197:98::-;27248:6;27282:5;27276:12;27266:22;;27197:98;;;:::o;27301:99::-;27353:6;27387:5;27381:12;27371:22;;27301:99;;;:::o;27406:168::-;27489:11;27523:6;27518:3;27511:19;27563:4;27558:3;27554:14;27539:29;;27406:168;;;;:::o;27580:169::-;27664:11;27698:6;27693:3;27686:19;27738:4;27733:3;27729:14;27714:29;;27580:169;;;;:::o;27755:148::-;27857:11;27894:3;27879:18;;27755:148;;;;:::o;27909:305::-;27949:3;27968:20;27986:1;27968:20;:::i;:::-;27963:25;;28002:20;28020:1;28002:20;:::i;:::-;27997:25;;28156:1;28088:66;28084:74;28081:1;28078:81;28075:107;;;28162:18;;:::i;:::-;28075:107;28206:1;28203;28199:9;28192:16;;27909:305;;;;:::o;28220:185::-;28260:1;28277:20;28295:1;28277:20;:::i;:::-;28272:25;;28311:20;28329:1;28311:20;:::i;:::-;28306:25;;28350:1;28340:35;;28355:18;;:::i;:::-;28340:35;28397:1;28394;28390:9;28385:14;;28220:185;;;;:::o;28411:191::-;28451:4;28471:20;28489:1;28471:20;:::i;:::-;28466:25;;28505:20;28523:1;28505:20;:::i;:::-;28500:25;;28544:1;28541;28538:8;28535:34;;;28549:18;;:::i;:::-;28535:34;28594:1;28591;28587:9;28579:17;;28411:191;;;;:::o;28608:96::-;28645:7;28674:24;28692:5;28674:24;:::i;:::-;28663:35;;28608:96;;;:::o;28710:104::-;28755:7;28784:24;28802:5;28784:24;:::i;:::-;28773:35;;28710:104;;;:::o;28820:90::-;28854:7;28897:5;28890:13;28883:21;28872:32;;28820:90;;;:::o;28916:149::-;28952:7;28992:66;28985:5;28981:78;28970:89;;28916:149;;;:::o;29071:126::-;29108:7;29148:42;29141:5;29137:54;29126:65;;29071:126;;;:::o;29203:77::-;29240:7;29269:5;29258:16;;29203:77;;;:::o;29286:154::-;29370:6;29365:3;29360;29347:30;29432:1;29423:6;29418:3;29414:16;29407:27;29286:154;;;:::o;29446:307::-;29514:1;29524:113;29538:6;29535:1;29532:13;29524:113;;;29623:1;29618:3;29614:11;29608:18;29604:1;29599:3;29595:11;29588:39;29560:2;29557:1;29553:10;29548:15;;29524:113;;;29655:6;29652:1;29649:13;29646:101;;;29735:1;29726:6;29721:3;29717:16;29710:27;29646:101;29495:258;29446:307;;;:::o;29759:320::-;29803:6;29840:1;29834:4;29830:12;29820:22;;29887:1;29881:4;29877:12;29908:18;29898:81;;29964:4;29956:6;29952:17;29942:27;;29898:81;30026:2;30018:6;30015:14;29995:18;29992:38;29989:84;;;30045:18;;:::i;:::-;29989:84;29810:269;29759:320;;;:::o;30085:281::-;30168:27;30190:4;30168:27;:::i;:::-;30160:6;30156:40;30298:6;30286:10;30283:22;30262:18;30250:10;30247:34;30244:62;30241:88;;;30309:18;;:::i;:::-;30241:88;30349:10;30345:2;30338:22;30128:238;30085:281;;:::o;30372:233::-;30411:3;30434:24;30452:5;30434:24;:::i;:::-;30425:33;;30480:66;30473:5;30470:77;30467:103;;;30550:18;;:::i;:::-;30467:103;30597:1;30590:5;30586:13;30579:20;;30372:233;;;:::o;30611:176::-;30643:1;30660:20;30678:1;30660:20;:::i;:::-;30655:25;;30694:20;30712:1;30694:20;:::i;:::-;30689:25;;30733:1;30723:35;;30738:18;;:::i;:::-;30723:35;30779:1;30776;30772:9;30767:14;;30611:176;;;;:::o;30793:180::-;30841:77;30838:1;30831:88;30938:4;30935:1;30928:15;30962:4;30959:1;30952:15;30979:180;31027:77;31024:1;31017:88;31124:4;31121:1;31114:15;31148:4;31145:1;31138:15;31165:180;31213:77;31210:1;31203:88;31310:4;31307:1;31300:15;31334:4;31331:1;31324:15;31351:180;31399:77;31396:1;31389:88;31496:4;31493:1;31486:15;31520:4;31517:1;31510:15;31537:180;31585:77;31582:1;31575:88;31682:4;31679:1;31672:15;31706:4;31703:1;31696:15;31723:117;31832:1;31829;31822:12;31846:117;31955:1;31952;31945:12;31969:117;32078:1;32075;32068:12;32092:117;32201:1;32198;32191:12;32215:117;32324:1;32321;32314:12;32338:117;32447:1;32444;32437:12;32461:102;32502:6;32553:2;32549:7;32544:2;32537:5;32533:14;32529:28;32519:38;;32461:102;;;:::o;32569:168::-;32709:20;32705:1;32697:6;32693:14;32686:44;32569:168;:::o;32743:237::-;32883:34;32879:1;32871:6;32867:14;32860:58;32952:20;32947:2;32939:6;32935:15;32928:45;32743:237;:::o;32986:225::-;33126:34;33122:1;33114:6;33110:14;33103:58;33195:8;33190:2;33182:6;33178:15;33171:33;32986:225;:::o;33217:224::-;33357:34;33353:1;33345:6;33341:14;33334:58;33426:7;33421:2;33413:6;33409:15;33402:32;33217:224;:::o;33447:178::-;33587:30;33583:1;33575:6;33571:14;33564:54;33447:178;:::o;33631:223::-;33771:34;33767:1;33759:6;33755:14;33748:58;33840:6;33835:2;33827:6;33823:15;33816:31;33631:223;:::o;33860:175::-;34000:27;33996:1;33988:6;33984:14;33977:51;33860:175;:::o;34041:231::-;34181:34;34177:1;34169:6;34165:14;34158:58;34250:14;34245:2;34237:6;34233:15;34226:39;34041:231;:::o;34278:243::-;34418:34;34414:1;34406:6;34402:14;34395:58;34487:26;34482:2;34474:6;34470:15;34463:51;34278:243;:::o;34527:229::-;34667:34;34663:1;34655:6;34651:14;34644:58;34736:12;34731:2;34723:6;34719:15;34712:37;34527:229;:::o;34762:228::-;34902:34;34898:1;34890:6;34886:14;34879:58;34971:11;34966:2;34958:6;34954:15;34947:36;34762:228;:::o;34996:182::-;35136:34;35132:1;35124:6;35120:14;35113:58;34996:182;:::o;35184:231::-;35324:34;35320:1;35312:6;35308:14;35301:58;35393:14;35388:2;35380:6;35376:15;35369:39;35184:231;:::o;35421:182::-;35561:34;35557:1;35549:6;35545:14;35538:58;35421:182;:::o;35609:167::-;35749:19;35745:1;35737:6;35733:14;35726:43;35609:167;:::o;35782:234::-;35922:34;35918:1;35910:6;35906:14;35899:58;35991:17;35986:2;35978:6;35974:15;35967:42;35782:234;:::o;36022:173::-;36162:25;36158:1;36150:6;36146:14;36139:49;36022:173;:::o;36201:220::-;36341:34;36337:1;36329:6;36325:14;36318:58;36410:3;36405:2;36397:6;36393:15;36386:28;36201:220;:::o;36427:236::-;36567:34;36563:1;36555:6;36551:14;36544:58;36636:19;36631:2;36623:6;36619:15;36612:44;36427:236;:::o;36669:122::-;36742:24;36760:5;36742:24;:::i;:::-;36735:5;36732:35;36722:63;;36781:1;36778;36771:12;36722:63;36669:122;:::o;36797:138::-;36878:32;36904:5;36878:32;:::i;:::-;36871:5;36868:43;36858:71;;36925:1;36922;36915:12;36858:71;36797:138;:::o;36941:116::-;37011:21;37026:5;37011:21;:::i;:::-;37004:5;37001:32;36991:60;;37047:1;37044;37037:12;36991:60;36941:116;:::o;37063:120::-;37135:23;37152:5;37135:23;:::i;:::-;37128:5;37125:34;37115:62;;37173:1;37170;37163:12;37115:62;37063:120;:::o;37189:122::-;37262:24;37280:5;37262:24;:::i;:::-;37255:5;37252:35;37242:63;;37301:1;37298;37291:12;37242:63;37189:122;:::o

Swarm Source

ipfs://89f3d7851ad8254e5231bef4edfb622c5119cf7a4c169eeb763676dd3f2de960
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.