ETH Price: $2,664.36 (-2.00%)

Token

DAKKY ORIGINALS (DKYOG)
 

Overview

Max Total Supply

0 DKYOG

Holders

66

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Rollbit: Hot Wallet
Balance
1 DKYOG
0xcbd6832ebc203e49e2b771897067fce3c58575ac
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:
DakkyOriginals

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-02
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/[email protected]/utils/Counters.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/[email protected]/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/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/[email protected]/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: @openzeppelin/[email protected]/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/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/[email protected]/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/token/ERC721/extensions/ERC721URIStorage.sol


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

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev See {ERC721-_burn}. This override additionally checks to see if a
     * token-specific URI was set for the token, and if so, it deletes the token URI from
     * the storage mapping.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: contract-e68eb47962.sol



/*
Dakky's Originals (dakky.eth stuff)
Collection of own original photos, artwork, audio, video and other materials.
All materials minted through this contract are copyrighted unless stated otherwise.
Twitter:  https://twitter.com/DakkyBear

*/

pragma solidity ^0.8.4;





/// @custom:security-contact [email protected]
contract DakkyOriginals is ERC721, ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("DAKKY ORIGINALS", "DKYOG") {}

    function safeMint(address to, string memory uri) public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // The following functions are overrides required by Solidity.

    function burn(uint256 tokenId) external onlyOwner {
        _burn(tokenId);
    }

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    function withdraw() external onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success, 'Transfer failed.');
    }
}

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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600f81526020017f44414b4b59204f524947494e414c5300000000000000000000000000000000008152506040518060400160405280600581526020017f444b594f47000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002bb565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000256565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b600060028204905060018216806200026f57607f821691505b602082108114156200028657620002856200028c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612ffe80620002cb6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde146102e0578063c87b56dd146102fc578063d204c45e1461032c578063e985e9c514610348578063f2fde38b1461037857610121565b806370a082311461024e578063715018a61461027e5780638da5cb5b1461028857806395d89b41146102a6578063a22cb465146102c457610121565b806323b872dd116100f457806323b872dd146101c05780633ccfd60b146101dc57806342842e0e146101e657806342966c68146102025780636352211e1461021e57610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b919061211a565b610394565b60405161014d9190612541565b60405180910390f35b61015e610476565b60405161016b919061255c565b60405180910390f35b61018e60048036038101906101899190612174565b610508565b60405161019b91906124da565b60405180910390f35b6101be60048036038101906101b991906120da565b61054e565b005b6101da60048036038101906101d59190611f68565b610666565b005b6101e46106c6565b005b61020060048036038101906101fb9190611f68565b61077d565b005b61021c60048036038101906102179190612174565b61079d565b005b61023860048036038101906102339190612174565b6107b1565b60405161024591906124da565b60405180910390f35b61026860048036038101906102639190611efb565b610863565b604051610275919061275e565b60405180910390f35b61028661091b565b005b61029061092f565b60405161029d91906124da565b60405180910390f35b6102ae610959565b6040516102bb919061255c565b60405180910390f35b6102de60048036038101906102d9919061203e565b6109eb565b005b6102fa60048036038101906102f59190611fbb565b610a01565b005b61031660048036038101906103119190612174565b610a63565b604051610323919061255c565b60405180910390f35b6103466004803603810190610341919061207e565b610a75565b005b610362600480360381019061035d9190611f28565b610aae565b60405161036f9190612541565b60405180910390f35b610392600480360381019061038d9190611efb565b610b42565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046f575061046e82610bc6565b5b9050919050565b606060008054610485906129bf565b80601f01602080910402602001604051908101604052809291908181526020018280546104b1906129bf565b80156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b600061051382610c30565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610559826107b1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c1906126fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105e9610c7b565b73ffffffffffffffffffffffffffffffffffffffff161480610618575061061781610612610c7b565b610aae565b5b610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e9061267e565b60405180910390fd5b6106618383610c83565b505050565b610677610671610c7b565b82610d3c565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061273e565b60405180910390fd5b6106c1838383610dd1565b505050565b6106ce611038565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516106f4906124c5565b60006040518083038185875af1925050503d8060008114610731576040519150601f19603f3d011682016040523d82523d6000602084013e610736565b606091505b505090508061077a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107719061271e565b60405180910390fd5b50565b61079883838360405180602001604052806000815250610a01565b505050565b6107a5611038565b6107ae816110b6565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561085a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610851906126de565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061263e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610923611038565b61092d60006110c2565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610968906129bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610994906129bf565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b5050505050905090565b6109fd6109f6610c7b565b8383611188565b5050565b610a12610a0c610c7b565b83610d3c565b610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a489061273e565b60405180910390fd5b610a5d848484846112f5565b50505050565b6060610a6e82611351565b9050919050565b610a7d611038565b6000610a896008611464565b9050610a956008611472565b610a9f8382611488565b610aa981836114a6565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b4a611038565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb19061259e565b60405180910390fd5b610bc3816110c2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c398161151a565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f906126de565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610cf6836107b1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610d48836107b1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d8a5750610d898185610aae565b5b80610dc857508373ffffffffffffffffffffffffffffffffffffffff16610db084610508565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610df1826107b1565b73ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906125be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae906125fe565b60405180910390fd5b610ec2838383611586565b610ecd600082610c83565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f1d91906128d5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f74919061284e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461103383838361158b565b505050565b611040610c7b565b73ffffffffffffffffffffffffffffffffffffffff1661105e61092f565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab906126be565b60405180910390fd5b565b6110bf81611590565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee9061261e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112e89190612541565b60405180910390a3505050565b611300848484610dd1565b61130c848484846115e3565b61134b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113429061257e565b60405180910390fd5b50505050565b606061135c82610c30565b600060066000848152602001908152602001600020805461137c906129bf565b80601f01602080910402602001604051908101604052809291908181526020018280546113a8906129bf565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b50505050509050600061140661177a565b905060008151141561141c57819250505061145f565b6000825111156114515780826040516020016114399291906124a1565b6040516020818303038152906040529250505061145f565b61145a84611791565b925050505b919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6114a28282604051806020016040528060008152506117f9565b5050565b6114af8261151a565b6114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e59061265e565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611515929190611ccf565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b61159981611854565b60006006600083815260200190815260200160002080546115b9906129bf565b9050146115e0576006600082815260200190815260200160002060006115df9190611d55565b5b50565b60006116048473ffffffffffffffffffffffffffffffffffffffff16611971565b1561176d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261162d610c7b565b8786866040518563ffffffff1660e01b815260040161164f94939291906124f5565b602060405180830381600087803b15801561166957600080fd5b505af192505050801561169a57506040513d601f19601f820116820180604052508101906116979190612147565b60015b61171d573d80600081146116ca576040519150601f19603f3d011682016040523d82523d6000602084013e6116cf565b606091505b50600081511415611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c9061257e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611772565b600190505b949350505050565b606060405180602001604052806000815250905090565b606061179c82610c30565b60006117a661177a565b905060008151116117c657604051806020016040528060008152506117f1565b806117d084611994565b6040516020016117e19291906124a1565b6040516020818303038152906040525b915050919050565b6118038383611af5565b61181060008484846115e3565b61184f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118469061257e565b60405180910390fd5b505050565b600061185f826107b1565b905061186d81600084611586565b611878600083610c83565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c891906128d5565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461196d8160008461158b565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156119dc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611af0565b600082905060005b60008214611a0e5780806119f790612a22565b915050600a82611a0791906128a4565b91506119e4565b60008167ffffffffffffffff811115611a2a57611a29612b58565b5b6040519080825280601f01601f191660200182016040528015611a5c5781602001600182028036833780820191505090505b5090505b60008514611ae957600182611a7591906128d5565b9150600a85611a849190612a6b565b6030611a90919061284e565b60f81b818381518110611aa657611aa5612b29565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ae291906128a4565b9450611a60565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061269e565b60405180910390fd5b611b6e8161151a565b15611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba5906125de565b60405180910390fd5b611bba60008383611586565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c0a919061284e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ccb6000838361158b565b5050565b828054611cdb906129bf565b90600052602060002090601f016020900481019282611cfd5760008555611d44565b82601f10611d1657805160ff1916838001178555611d44565b82800160010185558215611d44579182015b82811115611d43578251825591602001919060010190611d28565b5b509050611d519190611d95565b5090565b508054611d61906129bf565b6000825580601f10611d735750611d92565b601f016020900490600052602060002090810190611d919190611d95565b5b50565b5b80821115611dae576000816000905550600101611d96565b5090565b6000611dc5611dc08461279e565b612779565b905082815260208101848484011115611de157611de0612b8c565b5b611dec84828561297d565b509392505050565b6000611e07611e02846127cf565b612779565b905082815260208101848484011115611e2357611e22612b8c565b5b611e2e84828561297d565b509392505050565b600081359050611e4581612f6c565b92915050565b600081359050611e5a81612f83565b92915050565b600081359050611e6f81612f9a565b92915050565b600081519050611e8481612f9a565b92915050565b600082601f830112611e9f57611e9e612b87565b5b8135611eaf848260208601611db2565b91505092915050565b600082601f830112611ecd57611ecc612b87565b5b8135611edd848260208601611df4565b91505092915050565b600081359050611ef581612fb1565b92915050565b600060208284031215611f1157611f10612b96565b5b6000611f1f84828501611e36565b91505092915050565b60008060408385031215611f3f57611f3e612b96565b5b6000611f4d85828601611e36565b9250506020611f5e85828601611e36565b9150509250929050565b600080600060608486031215611f8157611f80612b96565b5b6000611f8f86828701611e36565b9350506020611fa086828701611e36565b9250506040611fb186828701611ee6565b9150509250925092565b60008060008060808587031215611fd557611fd4612b96565b5b6000611fe387828801611e36565b9450506020611ff487828801611e36565b935050604061200587828801611ee6565b925050606085013567ffffffffffffffff81111561202657612025612b91565b5b61203287828801611e8a565b91505092959194509250565b6000806040838503121561205557612054612b96565b5b600061206385828601611e36565b925050602061207485828601611e4b565b9150509250929050565b6000806040838503121561209557612094612b96565b5b60006120a385828601611e36565b925050602083013567ffffffffffffffff8111156120c4576120c3612b91565b5b6120d085828601611eb8565b9150509250929050565b600080604083850312156120f1576120f0612b96565b5b60006120ff85828601611e36565b925050602061211085828601611ee6565b9150509250929050565b6000602082840312156121305761212f612b96565b5b600061213e84828501611e60565b91505092915050565b60006020828403121561215d5761215c612b96565b5b600061216b84828501611e75565b91505092915050565b60006020828403121561218a57612189612b96565b5b600061219884828501611ee6565b91505092915050565b6121aa81612909565b82525050565b6121b98161291b565b82525050565b60006121ca82612800565b6121d48185612816565b93506121e481856020860161298c565b6121ed81612b9b565b840191505092915050565b60006122038261280b565b61220d8185612832565b935061221d81856020860161298c565b61222681612b9b565b840191505092915050565b600061223c8261280b565b6122468185612843565b935061225681856020860161298c565b80840191505092915050565b600061226f603283612832565b915061227a82612bac565b604082019050919050565b6000612292602683612832565b915061229d82612bfb565b604082019050919050565b60006122b5602583612832565b91506122c082612c4a565b604082019050919050565b60006122d8601c83612832565b91506122e382612c99565b602082019050919050565b60006122fb602483612832565b915061230682612cc2565b604082019050919050565b600061231e601983612832565b915061232982612d11565b602082019050919050565b6000612341602983612832565b915061234c82612d3a565b604082019050919050565b6000612364602e83612832565b915061236f82612d89565b604082019050919050565b6000612387603e83612832565b915061239282612dd8565b604082019050919050565b60006123aa602083612832565b91506123b582612e27565b602082019050919050565b60006123cd602083612832565b91506123d882612e50565b602082019050919050565b60006123f0601883612832565b91506123fb82612e79565b602082019050919050565b6000612413602183612832565b915061241e82612ea2565b604082019050919050565b6000612436600083612827565b915061244182612ef1565b600082019050919050565b6000612459601083612832565b915061246482612ef4565b602082019050919050565b600061247c602e83612832565b915061248782612f1d565b604082019050919050565b61249b81612973565b82525050565b60006124ad8285612231565b91506124b98284612231565b91508190509392505050565b60006124d082612429565b9150819050919050565b60006020820190506124ef60008301846121a1565b92915050565b600060808201905061250a60008301876121a1565b61251760208301866121a1565b6125246040830185612492565b818103606083015261253681846121bf565b905095945050505050565b600060208201905061255660008301846121b0565b92915050565b6000602082019050818103600083015261257681846121f8565b905092915050565b6000602082019050818103600083015261259781612262565b9050919050565b600060208201905081810360008301526125b781612285565b9050919050565b600060208201905081810360008301526125d7816122a8565b9050919050565b600060208201905081810360008301526125f7816122cb565b9050919050565b60006020820190508181036000830152612617816122ee565b9050919050565b6000602082019050818103600083015261263781612311565b9050919050565b6000602082019050818103600083015261265781612334565b9050919050565b6000602082019050818103600083015261267781612357565b9050919050565b600060208201905081810360008301526126978161237a565b9050919050565b600060208201905081810360008301526126b78161239d565b9050919050565b600060208201905081810360008301526126d7816123c0565b9050919050565b600060208201905081810360008301526126f7816123e3565b9050919050565b6000602082019050818103600083015261271781612406565b9050919050565b600060208201905081810360008301526127378161244c565b9050919050565b600060208201905081810360008301526127578161246f565b9050919050565b60006020820190506127736000830184612492565b92915050565b6000612783612794565b905061278f82826129f1565b919050565b6000604051905090565b600067ffffffffffffffff8211156127b9576127b8612b58565b5b6127c282612b9b565b9050602081019050919050565b600067ffffffffffffffff8211156127ea576127e9612b58565b5b6127f382612b9b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061285982612973565b915061286483612973565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561289957612898612a9c565b5b828201905092915050565b60006128af82612973565b91506128ba83612973565b9250826128ca576128c9612acb565b5b828204905092915050565b60006128e082612973565b91506128eb83612973565b9250828210156128fe576128fd612a9c565b5b828203905092915050565b600061291482612953565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156129aa57808201518184015260208101905061298f565b838111156129b9576000848401525b50505050565b600060028204905060018216806129d757607f821691505b602082108114156129eb576129ea612afa565b5b50919050565b6129fa82612b9b565b810181811067ffffffffffffffff82111715612a1957612a18612b58565b5b80604052505050565b6000612a2d82612973565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a6057612a5f612a9c565b5b600182019050919050565b6000612a7682612973565b9150612a8183612973565b925082612a9157612a90612acb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612f7581612909565b8114612f8057600080fd5b50565b612f8c8161291b565b8114612f9757600080fd5b50565b612fa381612927565b8114612fae57600080fd5b50565b612fba81612973565b8114612fc557600080fd5b5056fea26469706673582212206f5987f8f1fc3af73347450728ffa75671147745a12421eaefeff349bcacb44c64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063b88d4fde11610071578063b88d4fde146102e0578063c87b56dd146102fc578063d204c45e1461032c578063e985e9c514610348578063f2fde38b1461037857610121565b806370a082311461024e578063715018a61461027e5780638da5cb5b1461028857806395d89b41146102a6578063a22cb465146102c457610121565b806323b872dd116100f457806323b872dd146101c05780633ccfd60b146101dc57806342842e0e146101e657806342966c68146102025780636352211e1461021e57610121565b806301ffc9a71461012657806306fdde0314610156578063081812fc14610174578063095ea7b3146101a4575b600080fd5b610140600480360381019061013b919061211a565b610394565b60405161014d9190612541565b60405180910390f35b61015e610476565b60405161016b919061255c565b60405180910390f35b61018e60048036038101906101899190612174565b610508565b60405161019b91906124da565b60405180910390f35b6101be60048036038101906101b991906120da565b61054e565b005b6101da60048036038101906101d59190611f68565b610666565b005b6101e46106c6565b005b61020060048036038101906101fb9190611f68565b61077d565b005b61021c60048036038101906102179190612174565b61079d565b005b61023860048036038101906102339190612174565b6107b1565b60405161024591906124da565b60405180910390f35b61026860048036038101906102639190611efb565b610863565b604051610275919061275e565b60405180910390f35b61028661091b565b005b61029061092f565b60405161029d91906124da565b60405180910390f35b6102ae610959565b6040516102bb919061255c565b60405180910390f35b6102de60048036038101906102d9919061203e565b6109eb565b005b6102fa60048036038101906102f59190611fbb565b610a01565b005b61031660048036038101906103119190612174565b610a63565b604051610323919061255c565b60405180910390f35b6103466004803603810190610341919061207e565b610a75565b005b610362600480360381019061035d9190611f28565b610aae565b60405161036f9190612541565b60405180910390f35b610392600480360381019061038d9190611efb565b610b42565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046f575061046e82610bc6565b5b9050919050565b606060008054610485906129bf565b80601f01602080910402602001604051908101604052809291908181526020018280546104b1906129bf565b80156104fe5780601f106104d3576101008083540402835291602001916104fe565b820191906000526020600020905b8154815290600101906020018083116104e157829003601f168201915b5050505050905090565b600061051382610c30565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610559826107b1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c1906126fe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105e9610c7b565b73ffffffffffffffffffffffffffffffffffffffff161480610618575061061781610612610c7b565b610aae565b5b610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e9061267e565b60405180910390fd5b6106618383610c83565b505050565b610677610671610c7b565b82610d3c565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad9061273e565b60405180910390fd5b6106c1838383610dd1565b505050565b6106ce611038565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516106f4906124c5565b60006040518083038185875af1925050503d8060008114610731576040519150601f19603f3d011682016040523d82523d6000602084013e610736565b606091505b505090508061077a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107719061271e565b60405180910390fd5b50565b61079883838360405180602001604052806000815250610a01565b505050565b6107a5611038565b6107ae816110b6565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561085a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610851906126de565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb9061263e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610923611038565b61092d60006110c2565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610968906129bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610994906129bf565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b5050505050905090565b6109fd6109f6610c7b565b8383611188565b5050565b610a12610a0c610c7b565b83610d3c565b610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a489061273e565b60405180910390fd5b610a5d848484846112f5565b50505050565b6060610a6e82611351565b9050919050565b610a7d611038565b6000610a896008611464565b9050610a956008611472565b610a9f8382611488565b610aa981836114a6565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b4a611038565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb19061259e565b60405180910390fd5b610bc3816110c2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610c398161151a565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f906126de565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610cf6836107b1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610d48836107b1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610d8a5750610d898185610aae565b5b80610dc857508373ffffffffffffffffffffffffffffffffffffffff16610db084610508565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610df1826107b1565b73ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906125be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae906125fe565b60405180910390fd5b610ec2838383611586565b610ecd600082610c83565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f1d91906128d5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f74919061284e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461103383838361158b565b505050565b611040610c7b565b73ffffffffffffffffffffffffffffffffffffffff1661105e61092f565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab906126be565b60405180910390fd5b565b6110bf81611590565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee9061261e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112e89190612541565b60405180910390a3505050565b611300848484610dd1565b61130c848484846115e3565b61134b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113429061257e565b60405180910390fd5b50505050565b606061135c82610c30565b600060066000848152602001908152602001600020805461137c906129bf565b80601f01602080910402602001604051908101604052809291908181526020018280546113a8906129bf565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b50505050509050600061140661177a565b905060008151141561141c57819250505061145f565b6000825111156114515780826040516020016114399291906124a1565b6040516020818303038152906040529250505061145f565b61145a84611791565b925050505b919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b6114a28282604051806020016040528060008152506117f9565b5050565b6114af8261151a565b6114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e59061265e565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611515929190611ccf565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b61159981611854565b60006006600083815260200190815260200160002080546115b9906129bf565b9050146115e0576006600082815260200190815260200160002060006115df9190611d55565b5b50565b60006116048473ffffffffffffffffffffffffffffffffffffffff16611971565b1561176d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261162d610c7b565b8786866040518563ffffffff1660e01b815260040161164f94939291906124f5565b602060405180830381600087803b15801561166957600080fd5b505af192505050801561169a57506040513d601f19601f820116820180604052508101906116979190612147565b60015b61171d573d80600081146116ca576040519150601f19603f3d011682016040523d82523d6000602084013e6116cf565b606091505b50600081511415611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c9061257e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611772565b600190505b949350505050565b606060405180602001604052806000815250905090565b606061179c82610c30565b60006117a661177a565b905060008151116117c657604051806020016040528060008152506117f1565b806117d084611994565b6040516020016117e19291906124a1565b6040516020818303038152906040525b915050919050565b6118038383611af5565b61181060008484846115e3565b61184f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118469061257e565b60405180910390fd5b505050565b600061185f826107b1565b905061186d81600084611586565b611878600083610c83565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118c891906128d5565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461196d8160008461158b565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606060008214156119dc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611af0565b600082905060005b60008214611a0e5780806119f790612a22565b915050600a82611a0791906128a4565b91506119e4565b60008167ffffffffffffffff811115611a2a57611a29612b58565b5b6040519080825280601f01601f191660200182016040528015611a5c5781602001600182028036833780820191505090505b5090505b60008514611ae957600182611a7591906128d5565b9150600a85611a849190612a6b565b6030611a90919061284e565b60f81b818381518110611aa657611aa5612b29565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ae291906128a4565b9450611a60565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061269e565b60405180910390fd5b611b6e8161151a565b15611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba5906125de565b60405180910390fd5b611bba60008383611586565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c0a919061284e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ccb6000838361158b565b5050565b828054611cdb906129bf565b90600052602060002090601f016020900481019282611cfd5760008555611d44565b82601f10611d1657805160ff1916838001178555611d44565b82800160010185558215611d44579182015b82811115611d43578251825591602001919060010190611d28565b5b509050611d519190611d95565b5090565b508054611d61906129bf565b6000825580601f10611d735750611d92565b601f016020900490600052602060002090810190611d919190611d95565b5b50565b5b80821115611dae576000816000905550600101611d96565b5090565b6000611dc5611dc08461279e565b612779565b905082815260208101848484011115611de157611de0612b8c565b5b611dec84828561297d565b509392505050565b6000611e07611e02846127cf565b612779565b905082815260208101848484011115611e2357611e22612b8c565b5b611e2e84828561297d565b509392505050565b600081359050611e4581612f6c565b92915050565b600081359050611e5a81612f83565b92915050565b600081359050611e6f81612f9a565b92915050565b600081519050611e8481612f9a565b92915050565b600082601f830112611e9f57611e9e612b87565b5b8135611eaf848260208601611db2565b91505092915050565b600082601f830112611ecd57611ecc612b87565b5b8135611edd848260208601611df4565b91505092915050565b600081359050611ef581612fb1565b92915050565b600060208284031215611f1157611f10612b96565b5b6000611f1f84828501611e36565b91505092915050565b60008060408385031215611f3f57611f3e612b96565b5b6000611f4d85828601611e36565b9250506020611f5e85828601611e36565b9150509250929050565b600080600060608486031215611f8157611f80612b96565b5b6000611f8f86828701611e36565b9350506020611fa086828701611e36565b9250506040611fb186828701611ee6565b9150509250925092565b60008060008060808587031215611fd557611fd4612b96565b5b6000611fe387828801611e36565b9450506020611ff487828801611e36565b935050604061200587828801611ee6565b925050606085013567ffffffffffffffff81111561202657612025612b91565b5b61203287828801611e8a565b91505092959194509250565b6000806040838503121561205557612054612b96565b5b600061206385828601611e36565b925050602061207485828601611e4b565b9150509250929050565b6000806040838503121561209557612094612b96565b5b60006120a385828601611e36565b925050602083013567ffffffffffffffff8111156120c4576120c3612b91565b5b6120d085828601611eb8565b9150509250929050565b600080604083850312156120f1576120f0612b96565b5b60006120ff85828601611e36565b925050602061211085828601611ee6565b9150509250929050565b6000602082840312156121305761212f612b96565b5b600061213e84828501611e60565b91505092915050565b60006020828403121561215d5761215c612b96565b5b600061216b84828501611e75565b91505092915050565b60006020828403121561218a57612189612b96565b5b600061219884828501611ee6565b91505092915050565b6121aa81612909565b82525050565b6121b98161291b565b82525050565b60006121ca82612800565b6121d48185612816565b93506121e481856020860161298c565b6121ed81612b9b565b840191505092915050565b60006122038261280b565b61220d8185612832565b935061221d81856020860161298c565b61222681612b9b565b840191505092915050565b600061223c8261280b565b6122468185612843565b935061225681856020860161298c565b80840191505092915050565b600061226f603283612832565b915061227a82612bac565b604082019050919050565b6000612292602683612832565b915061229d82612bfb565b604082019050919050565b60006122b5602583612832565b91506122c082612c4a565b604082019050919050565b60006122d8601c83612832565b91506122e382612c99565b602082019050919050565b60006122fb602483612832565b915061230682612cc2565b604082019050919050565b600061231e601983612832565b915061232982612d11565b602082019050919050565b6000612341602983612832565b915061234c82612d3a565b604082019050919050565b6000612364602e83612832565b915061236f82612d89565b604082019050919050565b6000612387603e83612832565b915061239282612dd8565b604082019050919050565b60006123aa602083612832565b91506123b582612e27565b602082019050919050565b60006123cd602083612832565b91506123d882612e50565b602082019050919050565b60006123f0601883612832565b91506123fb82612e79565b602082019050919050565b6000612413602183612832565b915061241e82612ea2565b604082019050919050565b6000612436600083612827565b915061244182612ef1565b600082019050919050565b6000612459601083612832565b915061246482612ef4565b602082019050919050565b600061247c602e83612832565b915061248782612f1d565b604082019050919050565b61249b81612973565b82525050565b60006124ad8285612231565b91506124b98284612231565b91508190509392505050565b60006124d082612429565b9150819050919050565b60006020820190506124ef60008301846121a1565b92915050565b600060808201905061250a60008301876121a1565b61251760208301866121a1565b6125246040830185612492565b818103606083015261253681846121bf565b905095945050505050565b600060208201905061255660008301846121b0565b92915050565b6000602082019050818103600083015261257681846121f8565b905092915050565b6000602082019050818103600083015261259781612262565b9050919050565b600060208201905081810360008301526125b781612285565b9050919050565b600060208201905081810360008301526125d7816122a8565b9050919050565b600060208201905081810360008301526125f7816122cb565b9050919050565b60006020820190508181036000830152612617816122ee565b9050919050565b6000602082019050818103600083015261263781612311565b9050919050565b6000602082019050818103600083015261265781612334565b9050919050565b6000602082019050818103600083015261267781612357565b9050919050565b600060208201905081810360008301526126978161237a565b9050919050565b600060208201905081810360008301526126b78161239d565b9050919050565b600060208201905081810360008301526126d7816123c0565b9050919050565b600060208201905081810360008301526126f7816123e3565b9050919050565b6000602082019050818103600083015261271781612406565b9050919050565b600060208201905081810360008301526127378161244c565b9050919050565b600060208201905081810360008301526127578161246f565b9050919050565b60006020820190506127736000830184612492565b92915050565b6000612783612794565b905061278f82826129f1565b919050565b6000604051905090565b600067ffffffffffffffff8211156127b9576127b8612b58565b5b6127c282612b9b565b9050602081019050919050565b600067ffffffffffffffff8211156127ea576127e9612b58565b5b6127f382612b9b565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061285982612973565b915061286483612973565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561289957612898612a9c565b5b828201905092915050565b60006128af82612973565b91506128ba83612973565b9250826128ca576128c9612acb565b5b828204905092915050565b60006128e082612973565b91506128eb83612973565b9250828210156128fe576128fd612a9c565b5b828203905092915050565b600061291482612953565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156129aa57808201518184015260208101905061298f565b838111156129b9576000848401525b50505050565b600060028204905060018216806129d757607f821691505b602082108114156129eb576129ea612afa565b5b50919050565b6129fa82612b9b565b810181811067ffffffffffffffff82111715612a1957612a18612b58565b5b80604052505050565b6000612a2d82612973565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612a6057612a5f612a9c565b5b600182019050919050565b6000612a7682612973565b9150612a8183612973565b925082612a9157612a90612acb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b612f7581612909565b8114612f8057600080fd5b50565b612f8c8161291b565b8114612f9757600080fd5b50565b612fa381612927565b8114612fae57600080fd5b50565b612fba81612973565b8114612fc557600080fd5b5056fea26469706673582212206f5987f8f1fc3af73347450728ffa75671147745a12421eaefeff349bcacb44c64736f6c63430008070033

Deployed Bytecode Sourcemap

41829:1161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26301:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27228:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28741:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28258:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29441:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42781:206;;;:::i;:::-;;29848:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42363:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26939:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26670:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6795:103;;;:::i;:::-;;6147:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27397:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28984:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30104:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42577:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42049:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29210:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7053:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26301:305;26403:4;26455:25;26440:40;;;:11;:40;;;;:105;;;;26512:33;26497:48;;;:11;:48;;;;26440:105;:158;;;;26562:36;26586:11;26562:23;:36::i;:::-;26440:158;26420:178;;26301:305;;;:::o;27228:100::-;27282:13;27315:5;27308:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27228:100;:::o;28741:171::-;28817:7;28837:23;28852:7;28837:14;:23::i;:::-;28880:15;:24;28896:7;28880:24;;;;;;;;;;;;;;;;;;;;;28873:31;;28741:171;;;:::o;28258:417::-;28339:13;28355:23;28370:7;28355:14;:23::i;:::-;28339:39;;28403:5;28397:11;;:2;:11;;;;28389:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28497:5;28481:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28506:37;28523:5;28530:12;:10;:12::i;:::-;28506:16;:37::i;:::-;28481:62;28459:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28646:21;28655:2;28659:7;28646:8;:21::i;:::-;28328:347;28258:417;;:::o;29441:336::-;29636:41;29655:12;:10;:12::i;:::-;29669:7;29636:18;:41::i;:::-;29628:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29741:28;29751:4;29757:2;29761:7;29741:9;:28::i;:::-;29441:336;;;:::o;42781:206::-;6033:13;:11;:13::i;:::-;42832:12:::1;42858:10;42850:24;;42896:21;42850:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42831:101;;;42951:7;42943:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42820:167;42781:206::o:0;29848:185::-;29986:39;30003:4;30009:2;30013:7;29986:39;;;;;;;;;;;;:16;:39::i;:::-;29848:185;;;:::o;42363:83::-;6033:13;:11;:13::i;:::-;42424:14:::1;42430:7;42424:5;:14::i;:::-;42363:83:::0;:::o;26939:222::-;27011:7;27031:13;27047:7;:16;27055:7;27047:16;;;;;;;;;;;;;;;;;;;;;27031:32;;27099:1;27082:19;;:5;:19;;;;27074:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27148:5;27141:12;;;26939:222;;;:::o;26670:207::-;26742:7;26787:1;26770:19;;:5;:19;;;;26762:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26853:9;:16;26863:5;26853:16;;;;;;;;;;;;;;;;26846:23;;26670:207;;;:::o;6795:103::-;6033:13;:11;:13::i;:::-;6860:30:::1;6887:1;6860:18;:30::i;:::-;6795:103::o:0;6147:87::-;6193:7;6220:6;;;;;;;;;;;6213:13;;6147:87;:::o;27397:104::-;27453:13;27486:7;27479:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27397:104;:::o;28984:155::-;29079:52;29098:12;:10;:12::i;:::-;29112:8;29122;29079:18;:52::i;:::-;28984:155;;:::o;30104:323::-;30278:41;30297:12;:10;:12::i;:::-;30311:7;30278:18;:41::i;:::-;30270:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;30381:38;30395:4;30401:2;30405:7;30414:4;30381:13;:38::i;:::-;30104:323;;;;:::o;42577:196::-;42704:13;42742:23;42757:7;42742:14;:23::i;:::-;42735:30;;42577:196;;;:::o;42049:236::-;6033:13;:11;:13::i;:::-;42126:15:::1;42144:25;:15;:23;:25::i;:::-;42126:43;;42180:27;:15;:25;:27::i;:::-;42218:22;42228:2;42232:7;42218:9;:22::i;:::-;42251:26;42264:7;42273:3;42251:12;:26::i;:::-;42115:170;42049:236:::0;;:::o;29210:164::-;29307:4;29331:18;:25;29350:5;29331:25;;;;;;;;;;;;;;;:35;29357:8;29331:35;;;;;;;;;;;;;;;;;;;;;;;;;29324:42;;29210:164;;;;:::o;7053:201::-;6033:13;:11;:13::i;:::-;7162:1:::1;7142:22;;:8;:22;;;;7134:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7218:28;7237:8;7218:18;:28::i;:::-;7053:201:::0;:::o;19025:157::-;19110:4;19149:25;19134:40;;;:11;:40;;;;19127:47;;19025:157;;;:::o;36716:135::-;36798:16;36806:7;36798;:16::i;:::-;36790:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36716:135;:::o;4692:98::-;4745:7;4772:10;4765:17;;4692:98;:::o;35995:174::-;36097:2;36070:15;:24;36086:7;36070:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36153:7;36149:2;36115:46;;36124:23;36139:7;36124:14;:23::i;:::-;36115:46;;;;;;;;;;;;35995:174;;:::o;32228:264::-;32321:4;32338:13;32354:23;32369:7;32354:14;:23::i;:::-;32338:39;;32407:5;32396:16;;:7;:16;;;:52;;;;32416:32;32433:5;32440:7;32416:16;:32::i;:::-;32396:52;:87;;;;32476:7;32452:31;;:20;32464:7;32452:11;:20::i;:::-;:31;;;32396:87;32388:96;;;32228:264;;;;:::o;35251:625::-;35410:4;35383:31;;:23;35398:7;35383:14;:23::i;:::-;:31;;;35375:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35489:1;35475:16;;:2;:16;;;;35467:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35545:39;35566:4;35572:2;35576:7;35545:20;:39::i;:::-;35649:29;35666:1;35670:7;35649:8;:29::i;:::-;35710:1;35691:9;:15;35701:4;35691:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35739:1;35722:9;:13;35732:2;35722:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35770:2;35751:7;:16;35759:7;35751:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35809:7;35805:2;35790:27;;35799:4;35790:27;;;;;;;;;;;;35830:38;35850:4;35856:2;35860:7;35830:19;:38::i;:::-;35251:625;;;:::o;6312:132::-;6387:12;:10;:12::i;:::-;6376:23;;:7;:5;:7::i;:::-;:23;;;6368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6312:132::o;42454:115::-;42541:20;42553:7;42541:11;:20::i;:::-;42454:115;:::o;7414:191::-;7488:16;7507:6;;;;;;;;;;;7488:25;;7533:8;7524:6;;:17;;;;;;;;;;;;;;;;;;7588:8;7557:40;;7578:8;7557:40;;;;;;;;;;;;7477:128;7414:191;:::o;36312:315::-;36467:8;36458:17;;:5;:17;;;;36450:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36554:8;36516:18;:25;36535:5;36516:25;;;;;;;;;;;;;;;:35;36542:8;36516:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36600:8;36578:41;;36593:5;36578:41;;;36610:8;36578:41;;;;;;:::i;:::-;;;;;;;;36312:315;;;:::o;31308:313::-;31464:28;31474:4;31480:2;31484:7;31464:9;:28::i;:::-;31511:47;31534:4;31540:2;31544:7;31553:4;31511:22;:47::i;:::-;31503:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31308:313;;;;:::o;40015:624::-;40088:13;40114:23;40129:7;40114:14;:23::i;:::-;40150;40176:10;:19;40187:7;40176:19;;;;;;;;;;;40150:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40206:18;40227:10;:8;:10::i;:::-;40206:31;;40335:1;40319:4;40313:18;:23;40309:72;;;40360:9;40353:16;;;;;;40309:72;40511:1;40491:9;40485:23;:27;40481:108;;;40560:4;40566:9;40543:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40529:48;;;;;;40481:108;40608:23;40623:7;40608:14;:23::i;:::-;40601:30;;;;40015:624;;;;:::o;911:114::-;976:7;1003;:14;;;996:21;;911:114;;;:::o;1033:127::-;1140:1;1122:7;:14;;;:19;;;;;;;;;;;1033:127;:::o;32834:110::-;32910:26;32920:2;32924:7;32910:26;;;;;;;;;;;;:9;:26::i;:::-;32834:110;;:::o;40795:217::-;40895:16;40903:7;40895;:16::i;:::-;40887:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40995:9;40973:10;:19;40984:7;40973:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;40795:217;;:::o;31934:127::-;31999:4;32051:1;32023:30;;:7;:16;32031:7;32023:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32016:37;;31934:127;;;:::o;38840:126::-;;;;:::o;39351:125::-;;;;:::o;41237:206::-;41306:20;41318:7;41306:11;:20::i;:::-;41380:1;41349:10;:19;41360:7;41349:19;;;;;;;;;;;41343:33;;;;;:::i;:::-;;;:38;41339:97;;41405:10;:19;41416:7;41405:19;;;;;;;;;;;;41398:26;;;;:::i;:::-;41339:97;41237:206;:::o;37415:853::-;37569:4;37590:15;:2;:13;;;:15::i;:::-;37586:675;;;37642:2;37626:36;;;37663:12;:10;:12::i;:::-;37677:4;37683:7;37692:4;37626:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37622:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37884:1;37867:6;:13;:18;37863:328;;;37910:60;;;;;;;;;;:::i;:::-;;;;;;;;37863:328;38141:6;38135:13;38126:6;38122:2;38118:15;38111:38;37622:584;37758:41;;;37748:51;;;:6;:51;;;;37741:58;;;;;37586:675;38245:4;38238:11;;37415:853;;;;;;;:::o;28102:94::-;28153:13;28179:9;;;;;;;;;;;;;;28102:94;:::o;27572:281::-;27645:13;27671:23;27686:7;27671:14;:23::i;:::-;27707:21;27731:10;:8;:10::i;:::-;27707:34;;27783:1;27765:7;27759:21;:25;:86;;;;;;;;;;;;;;;;;27811:7;27820:18;:7;:16;:18::i;:::-;27794:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27759:86;27752:93;;;27572:281;;;:::o;33171:319::-;33300:18;33306:2;33310:7;33300:5;:18::i;:::-;33351:53;33382:1;33386:2;33390:7;33399:4;33351:22;:53::i;:::-;33329:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33171:319;;;:::o;34494:420::-;34554:13;34570:23;34585:7;34570:14;:23::i;:::-;34554:39;;34606:48;34627:5;34642:1;34646:7;34606:20;:48::i;:::-;34695:29;34712:1;34716:7;34695:8;:29::i;:::-;34757:1;34737:9;:16;34747:5;34737:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;34776:7;:16;34784:7;34776:16;;;;;;;;;;;;34769:23;;;;;;;;;;;34838:7;34834:1;34810:36;;34819:5;34810:36;;;;;;;;;;;;34859:47;34879:5;34894:1;34898:7;34859:19;:47::i;:::-;34543:371;34494:420;:::o;8851:326::-;8911:4;9168:1;9146:7;:19;;;:23;9139:30;;8851:326;;;:::o;1940:723::-;1996:13;2226:1;2217:5;:10;2213:53;;;2244:10;;;;;;;;;;;;;;;;;;;;;2213:53;2276:12;2291:5;2276:20;;2307:14;2332:78;2347:1;2339:4;:9;2332:78;;2365:8;;;;;:::i;:::-;;;;2396:2;2388:10;;;;;:::i;:::-;;;2332:78;;;2420:19;2452:6;2442:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2420:39;;2470:154;2486:1;2477:5;:10;2470:154;;2514:1;2504:11;;;;;:::i;:::-;;;2581:2;2573:5;:10;;;;:::i;:::-;2560:2;:24;;;;:::i;:::-;2547:39;;2530:6;2537;2530:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2610:2;2601:11;;;;;:::i;:::-;;;2470:154;;;2648:6;2634:21;;;;;1940:723;;;;:::o;33826:439::-;33920:1;33906:16;;:2;:16;;;;33898:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33979:16;33987:7;33979;:16::i;:::-;33978:17;33970:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34041:45;34070:1;34074:2;34078:7;34041:20;:45::i;:::-;34116:1;34099:9;:13;34109:2;34099:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34147:2;34128:7;:16;34136:7;34128:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34192:7;34188:2;34167:33;;34184:1;34167:33;;;;;;;;;;;;34213:44;34241:1;34245:2;34249:7;34213:19;:44::i;:::-;33826:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:654::-;5218:6;5226;5275:2;5263:9;5254:7;5250:23;5246:32;5243:119;;;5281:79;;:::i;:::-;5243:119;5401:1;5426:53;5471:7;5462:6;5451:9;5447:22;5426:53;:::i;:::-;5416:63;;5372:117;5556:2;5545:9;5541:18;5528:32;5587:18;5579:6;5576:30;5573:117;;;5609:79;;:::i;:::-;5573:117;5714:63;5769:7;5760:6;5749:9;5745:22;5714:63;:::i;:::-;5704:73;;5499:288;5140:654;;;;;:::o;5800:474::-;5868:6;5876;5925:2;5913:9;5904:7;5900:23;5896:32;5893:119;;;5931:79;;:::i;:::-;5893:119;6051:1;6076:53;6121:7;6112:6;6101:9;6097:22;6076:53;:::i;:::-;6066:63;;6022:117;6178:2;6204:53;6249:7;6240:6;6229:9;6225:22;6204:53;:::i;:::-;6194:63;;6149:118;5800:474;;;;;:::o;6280:327::-;6338:6;6387:2;6375:9;6366:7;6362:23;6358:32;6355:119;;;6393:79;;:::i;:::-;6355:119;6513:1;6538:52;6582:7;6573:6;6562:9;6558:22;6538:52;:::i;:::-;6528:62;;6484:116;6280:327;;;;:::o;6613:349::-;6682:6;6731:2;6719:9;6710:7;6706:23;6702:32;6699:119;;;6737:79;;:::i;:::-;6699:119;6857:1;6882:63;6937:7;6928:6;6917:9;6913:22;6882:63;:::i;:::-;6872:73;;6828:127;6613:349;;;;:::o;6968:329::-;7027:6;7076:2;7064:9;7055:7;7051:23;7047:32;7044:119;;;7082:79;;:::i;:::-;7044:119;7202:1;7227:53;7272:7;7263:6;7252:9;7248:22;7227:53;:::i;:::-;7217:63;;7173:117;6968:329;;;;:::o;7303:118::-;7390:24;7408:5;7390:24;:::i;:::-;7385:3;7378:37;7303:118;;:::o;7427:109::-;7508:21;7523:5;7508:21;:::i;:::-;7503:3;7496:34;7427:109;;:::o;7542:360::-;7628:3;7656:38;7688:5;7656:38;:::i;:::-;7710:70;7773:6;7768:3;7710:70;:::i;:::-;7703:77;;7789:52;7834:6;7829:3;7822:4;7815:5;7811:16;7789:52;:::i;:::-;7866:29;7888:6;7866:29;:::i;:::-;7861:3;7857:39;7850:46;;7632:270;7542:360;;;;:::o;7908:364::-;7996:3;8024:39;8057:5;8024:39;:::i;:::-;8079:71;8143:6;8138:3;8079:71;:::i;:::-;8072:78;;8159:52;8204:6;8199:3;8192:4;8185:5;8181:16;8159:52;:::i;:::-;8236:29;8258:6;8236:29;:::i;:::-;8231:3;8227:39;8220:46;;8000:272;7908:364;;;;:::o;8278:377::-;8384:3;8412:39;8445:5;8412:39;:::i;:::-;8467:89;8549:6;8544:3;8467:89;:::i;:::-;8460:96;;8565:52;8610:6;8605:3;8598:4;8591:5;8587:16;8565:52;:::i;:::-;8642:6;8637:3;8633:16;8626:23;;8388:267;8278:377;;;;:::o;8661:366::-;8803:3;8824:67;8888:2;8883:3;8824:67;:::i;:::-;8817:74;;8900:93;8989:3;8900:93;:::i;:::-;9018:2;9013:3;9009:12;9002:19;;8661:366;;;:::o;9033:::-;9175:3;9196:67;9260:2;9255:3;9196:67;:::i;:::-;9189:74;;9272:93;9361:3;9272:93;:::i;:::-;9390:2;9385:3;9381:12;9374:19;;9033:366;;;:::o;9405:::-;9547:3;9568:67;9632:2;9627:3;9568:67;:::i;:::-;9561:74;;9644:93;9733:3;9644:93;:::i;:::-;9762:2;9757:3;9753:12;9746:19;;9405:366;;;:::o;9777:::-;9919:3;9940:67;10004:2;9999:3;9940:67;:::i;:::-;9933:74;;10016:93;10105:3;10016:93;:::i;:::-;10134:2;10129:3;10125:12;10118:19;;9777:366;;;:::o;10149:::-;10291:3;10312:67;10376:2;10371:3;10312:67;:::i;:::-;10305:74;;10388:93;10477:3;10388:93;:::i;:::-;10506:2;10501:3;10497:12;10490:19;;10149:366;;;:::o;10521:::-;10663:3;10684:67;10748:2;10743:3;10684:67;:::i;:::-;10677:74;;10760:93;10849:3;10760:93;:::i;:::-;10878:2;10873:3;10869:12;10862:19;;10521:366;;;:::o;10893:::-;11035:3;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;10893:366;;;:::o;11265:::-;11407:3;11428:67;11492:2;11487:3;11428:67;:::i;:::-;11421:74;;11504:93;11593:3;11504:93;:::i;:::-;11622:2;11617:3;11613:12;11606:19;;11265:366;;;:::o;11637:::-;11779:3;11800:67;11864:2;11859:3;11800:67;:::i;:::-;11793:74;;11876:93;11965:3;11876:93;:::i;:::-;11994:2;11989:3;11985:12;11978:19;;11637:366;;;:::o;12009:::-;12151:3;12172:67;12236:2;12231:3;12172:67;:::i;:::-;12165:74;;12248:93;12337:3;12248:93;:::i;:::-;12366:2;12361:3;12357:12;12350:19;;12009:366;;;:::o;12381:::-;12523:3;12544:67;12608:2;12603:3;12544:67;:::i;:::-;12537:74;;12620:93;12709:3;12620:93;:::i;:::-;12738:2;12733:3;12729:12;12722:19;;12381:366;;;:::o;12753:::-;12895:3;12916:67;12980:2;12975:3;12916:67;:::i;:::-;12909:74;;12992:93;13081:3;12992:93;:::i;:::-;13110:2;13105:3;13101:12;13094:19;;12753:366;;;:::o;13125:::-;13267:3;13288:67;13352:2;13347:3;13288:67;:::i;:::-;13281:74;;13364:93;13453:3;13364:93;:::i;:::-;13482:2;13477:3;13473:12;13466:19;;13125:366;;;:::o;13497:398::-;13656:3;13677:83;13758:1;13753:3;13677:83;:::i;:::-;13670:90;;13769:93;13858:3;13769:93;:::i;:::-;13887:1;13882:3;13878:11;13871:18;;13497:398;;;:::o;13901:366::-;14043:3;14064:67;14128:2;14123:3;14064:67;:::i;:::-;14057:74;;14140:93;14229:3;14140:93;:::i;:::-;14258:2;14253:3;14249:12;14242:19;;13901:366;;;:::o;14273:::-;14415:3;14436:67;14500:2;14495:3;14436:67;:::i;:::-;14429:74;;14512:93;14601:3;14512:93;:::i;:::-;14630:2;14625:3;14621:12;14614:19;;14273:366;;;:::o;14645:118::-;14732:24;14750:5;14732:24;:::i;:::-;14727:3;14720:37;14645:118;;:::o;14769:435::-;14949:3;14971:95;15062:3;15053:6;14971:95;:::i;:::-;14964:102;;15083:95;15174:3;15165:6;15083:95;:::i;:::-;15076:102;;15195:3;15188:10;;14769:435;;;;;:::o;15210:379::-;15394:3;15416:147;15559:3;15416:147;:::i;:::-;15409:154;;15580:3;15573:10;;15210:379;;;:::o;15595:222::-;15688:4;15726:2;15715:9;15711:18;15703:26;;15739:71;15807:1;15796:9;15792:17;15783:6;15739:71;:::i;:::-;15595:222;;;;:::o;15823:640::-;16018:4;16056:3;16045:9;16041:19;16033:27;;16070:71;16138:1;16127:9;16123:17;16114:6;16070:71;:::i;:::-;16151:72;16219:2;16208:9;16204:18;16195:6;16151:72;:::i;:::-;16233;16301:2;16290:9;16286:18;16277:6;16233:72;:::i;:::-;16352:9;16346:4;16342:20;16337:2;16326:9;16322:18;16315:48;16380:76;16451:4;16442:6;16380:76;:::i;:::-;16372:84;;15823:640;;;;;;;:::o;16469:210::-;16556:4;16594:2;16583:9;16579:18;16571:26;;16607:65;16669:1;16658:9;16654:17;16645:6;16607:65;:::i;:::-;16469:210;;;;:::o;16685:313::-;16798:4;16836:2;16825:9;16821:18;16813:26;;16885:9;16879:4;16875:20;16871:1;16860:9;16856:17;16849:47;16913:78;16986:4;16977:6;16913:78;:::i;:::-;16905:86;;16685:313;;;;:::o;17004:419::-;17170:4;17208:2;17197:9;17193:18;17185:26;;17257:9;17251:4;17247:20;17243:1;17232:9;17228:17;17221:47;17285:131;17411:4;17285:131;:::i;:::-;17277:139;;17004:419;;;:::o;17429:::-;17595:4;17633:2;17622:9;17618:18;17610:26;;17682:9;17676:4;17672:20;17668:1;17657:9;17653:17;17646:47;17710:131;17836:4;17710:131;:::i;:::-;17702:139;;17429:419;;;:::o;17854:::-;18020:4;18058:2;18047:9;18043:18;18035:26;;18107:9;18101:4;18097:20;18093:1;18082:9;18078:17;18071:47;18135:131;18261:4;18135:131;:::i;:::-;18127:139;;17854:419;;;:::o;18279:::-;18445:4;18483:2;18472:9;18468:18;18460:26;;18532:9;18526:4;18522:20;18518:1;18507:9;18503:17;18496:47;18560:131;18686:4;18560:131;:::i;:::-;18552:139;;18279:419;;;:::o;18704:::-;18870:4;18908:2;18897:9;18893:18;18885:26;;18957:9;18951:4;18947:20;18943:1;18932:9;18928:17;18921:47;18985:131;19111:4;18985:131;:::i;:::-;18977:139;;18704:419;;;:::o;19129:::-;19295:4;19333:2;19322:9;19318:18;19310:26;;19382:9;19376:4;19372:20;19368:1;19357:9;19353:17;19346:47;19410:131;19536:4;19410:131;:::i;:::-;19402:139;;19129:419;;;:::o;19554:::-;19720:4;19758:2;19747:9;19743:18;19735:26;;19807:9;19801:4;19797:20;19793:1;19782:9;19778:17;19771:47;19835:131;19961:4;19835:131;:::i;:::-;19827:139;;19554:419;;;:::o;19979:::-;20145:4;20183:2;20172:9;20168:18;20160:26;;20232:9;20226:4;20222:20;20218:1;20207:9;20203:17;20196:47;20260:131;20386:4;20260:131;:::i;:::-;20252:139;;19979:419;;;:::o;20404:::-;20570:4;20608:2;20597:9;20593:18;20585:26;;20657:9;20651:4;20647:20;20643:1;20632:9;20628:17;20621:47;20685:131;20811:4;20685:131;:::i;:::-;20677:139;;20404:419;;;:::o;20829:::-;20995:4;21033:2;21022:9;21018:18;21010:26;;21082:9;21076:4;21072:20;21068:1;21057:9;21053:17;21046:47;21110:131;21236:4;21110:131;:::i;:::-;21102:139;;20829:419;;;:::o;21254:::-;21420:4;21458:2;21447:9;21443:18;21435:26;;21507:9;21501:4;21497:20;21493:1;21482:9;21478:17;21471:47;21535:131;21661:4;21535:131;:::i;:::-;21527:139;;21254:419;;;:::o;21679:::-;21845:4;21883:2;21872:9;21868:18;21860:26;;21932:9;21926:4;21922:20;21918:1;21907:9;21903:17;21896:47;21960:131;22086:4;21960:131;:::i;:::-;21952:139;;21679:419;;;:::o;22104:::-;22270:4;22308:2;22297:9;22293:18;22285:26;;22357:9;22351:4;22347:20;22343:1;22332:9;22328:17;22321:47;22385:131;22511:4;22385:131;:::i;:::-;22377:139;;22104:419;;;:::o;22529:::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22782:9;22776:4;22772:20;22768:1;22757:9;22753:17;22746:47;22810:131;22936:4;22810:131;:::i;:::-;22802:139;;22529:419;;;:::o;22954:::-;23120:4;23158:2;23147:9;23143:18;23135:26;;23207:9;23201:4;23197:20;23193:1;23182:9;23178:17;23171:47;23235:131;23361:4;23235:131;:::i;:::-;23227:139;;22954:419;;;:::o;23379:222::-;23472:4;23510:2;23499:9;23495:18;23487:26;;23523:71;23591:1;23580:9;23576:17;23567:6;23523:71;:::i;:::-;23379:222;;;;:::o;23607:129::-;23641:6;23668:20;;:::i;:::-;23658:30;;23697:33;23725:4;23717:6;23697:33;:::i;:::-;23607:129;;;:::o;23742:75::-;23775:6;23808:2;23802:9;23792:19;;23742:75;:::o;23823:307::-;23884:4;23974:18;23966:6;23963:30;23960:56;;;23996:18;;:::i;:::-;23960:56;24034:29;24056:6;24034:29;:::i;:::-;24026:37;;24118:4;24112;24108:15;24100:23;;23823:307;;;:::o;24136:308::-;24198:4;24288:18;24280:6;24277:30;24274:56;;;24310:18;;:::i;:::-;24274:56;24348:29;24370:6;24348:29;:::i;:::-;24340:37;;24432:4;24426;24422:15;24414:23;;24136:308;;;:::o;24450:98::-;24501:6;24535:5;24529:12;24519:22;;24450:98;;;:::o;24554:99::-;24606:6;24640:5;24634:12;24624:22;;24554:99;;;:::o;24659:168::-;24742:11;24776:6;24771:3;24764:19;24816:4;24811:3;24807:14;24792:29;;24659:168;;;;:::o;24833:147::-;24934:11;24971:3;24956:18;;24833:147;;;;:::o;24986:169::-;25070:11;25104:6;25099:3;25092:19;25144:4;25139:3;25135:14;25120:29;;24986:169;;;;:::o;25161:148::-;25263:11;25300:3;25285:18;;25161:148;;;;:::o;25315:305::-;25355:3;25374:20;25392:1;25374:20;:::i;:::-;25369:25;;25408:20;25426:1;25408:20;:::i;:::-;25403:25;;25562:1;25494:66;25490:74;25487:1;25484:81;25481:107;;;25568:18;;:::i;:::-;25481:107;25612:1;25609;25605:9;25598:16;;25315:305;;;;:::o;25626:185::-;25666:1;25683:20;25701:1;25683:20;:::i;:::-;25678:25;;25717:20;25735:1;25717:20;:::i;:::-;25712:25;;25756:1;25746:35;;25761:18;;:::i;:::-;25746:35;25803:1;25800;25796:9;25791:14;;25626:185;;;;:::o;25817:191::-;25857:4;25877:20;25895:1;25877:20;:::i;:::-;25872:25;;25911:20;25929:1;25911:20;:::i;:::-;25906:25;;25950:1;25947;25944:8;25941:34;;;25955:18;;:::i;:::-;25941:34;26000:1;25997;25993:9;25985:17;;25817:191;;;;:::o;26014:96::-;26051:7;26080:24;26098:5;26080:24;:::i;:::-;26069:35;;26014:96;;;:::o;26116:90::-;26150:7;26193:5;26186:13;26179:21;26168:32;;26116:90;;;:::o;26212:149::-;26248:7;26288:66;26281:5;26277:78;26266:89;;26212:149;;;:::o;26367:126::-;26404:7;26444:42;26437:5;26433:54;26422:65;;26367:126;;;:::o;26499:77::-;26536:7;26565:5;26554:16;;26499:77;;;:::o;26582:154::-;26666:6;26661:3;26656;26643:30;26728:1;26719:6;26714:3;26710:16;26703:27;26582:154;;;:::o;26742:307::-;26810:1;26820:113;26834:6;26831:1;26828:13;26820:113;;;26919:1;26914:3;26910:11;26904:18;26900:1;26895:3;26891:11;26884:39;26856:2;26853:1;26849:10;26844:15;;26820:113;;;26951:6;26948:1;26945:13;26942:101;;;27031:1;27022:6;27017:3;27013:16;27006:27;26942:101;26791:258;26742:307;;;:::o;27055:320::-;27099:6;27136:1;27130:4;27126:12;27116:22;;27183:1;27177:4;27173:12;27204:18;27194:81;;27260:4;27252:6;27248:17;27238:27;;27194:81;27322:2;27314:6;27311:14;27291:18;27288:38;27285:84;;;27341:18;;:::i;:::-;27285:84;27106:269;27055:320;;;:::o;27381:281::-;27464:27;27486:4;27464:27;:::i;:::-;27456:6;27452:40;27594:6;27582:10;27579:22;27558:18;27546:10;27543:34;27540:62;27537:88;;;27605:18;;:::i;:::-;27537:88;27645:10;27641:2;27634:22;27424:238;27381:281;;:::o;27668:233::-;27707:3;27730:24;27748:5;27730:24;:::i;:::-;27721:33;;27776:66;27769:5;27766:77;27763:103;;;27846:18;;:::i;:::-;27763:103;27893:1;27886:5;27882:13;27875:20;;27668:233;;;:::o;27907:176::-;27939:1;27956:20;27974:1;27956:20;:::i;:::-;27951:25;;27990:20;28008:1;27990:20;:::i;:::-;27985:25;;28029:1;28019:35;;28034:18;;:::i;:::-;28019:35;28075:1;28072;28068:9;28063:14;;27907:176;;;;:::o;28089:180::-;28137:77;28134:1;28127:88;28234:4;28231:1;28224:15;28258:4;28255:1;28248:15;28275:180;28323:77;28320:1;28313:88;28420:4;28417:1;28410:15;28444:4;28441:1;28434:15;28461:180;28509:77;28506:1;28499:88;28606:4;28603:1;28596:15;28630:4;28627:1;28620:15;28647:180;28695:77;28692:1;28685:88;28792:4;28789:1;28782:15;28816:4;28813:1;28806:15;28833:180;28881:77;28878:1;28871:88;28978:4;28975:1;28968:15;29002:4;28999:1;28992:15;29019:117;29128:1;29125;29118:12;29142:117;29251:1;29248;29241:12;29265:117;29374:1;29371;29364:12;29388:117;29497:1;29494;29487:12;29511:102;29552:6;29603:2;29599:7;29594:2;29587:5;29583:14;29579:28;29569:38;;29511:102;;;:::o;29619:237::-;29759:34;29755:1;29747:6;29743:14;29736:58;29828:20;29823:2;29815:6;29811:15;29804:45;29619:237;:::o;29862:225::-;30002:34;29998:1;29990:6;29986:14;29979:58;30071:8;30066:2;30058:6;30054:15;30047:33;29862:225;:::o;30093:224::-;30233:34;30229:1;30221:6;30217:14;30210:58;30302:7;30297:2;30289:6;30285:15;30278:32;30093:224;:::o;30323:178::-;30463:30;30459:1;30451:6;30447:14;30440:54;30323:178;:::o;30507:223::-;30647:34;30643:1;30635:6;30631:14;30624:58;30716:6;30711:2;30703:6;30699:15;30692:31;30507:223;:::o;30736:175::-;30876:27;30872:1;30864:6;30860:14;30853:51;30736:175;:::o;30917:228::-;31057:34;31053:1;31045:6;31041:14;31034:58;31126:11;31121:2;31113:6;31109:15;31102:36;30917:228;:::o;31151:233::-;31291:34;31287:1;31279:6;31275:14;31268:58;31360:16;31355:2;31347:6;31343:15;31336:41;31151:233;:::o;31390:249::-;31530:34;31526:1;31518:6;31514:14;31507:58;31599:32;31594:2;31586:6;31582:15;31575:57;31390:249;:::o;31645:182::-;31785:34;31781:1;31773:6;31769:14;31762:58;31645:182;:::o;31833:::-;31973:34;31969:1;31961:6;31957:14;31950:58;31833:182;:::o;32021:174::-;32161:26;32157:1;32149:6;32145:14;32138:50;32021:174;:::o;32201:220::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:3;32405:2;32397:6;32393:15;32386:28;32201:220;:::o;32427:114::-;;:::o;32547:166::-;32687:18;32683:1;32675:6;32671:14;32664:42;32547:166;:::o;32719:233::-;32859:34;32855:1;32847:6;32843:14;32836:58;32928:16;32923:2;32915:6;32911:15;32904:41;32719:233;:::o;32958:122::-;33031:24;33049:5;33031:24;:::i;:::-;33024:5;33021:35;33011:63;;33070:1;33067;33060:12;33011:63;32958:122;:::o;33086:116::-;33156:21;33171:5;33156:21;:::i;:::-;33149:5;33146:32;33136:60;;33192:1;33189;33182:12;33136:60;33086:116;:::o;33208:120::-;33280:23;33297:5;33280:23;:::i;:::-;33273:5;33270:34;33260:62;;33318:1;33315;33308:12;33260:62;33208:120;:::o;33334:122::-;33407:24;33425:5;33407:24;:::i;:::-;33400:5;33397:35;33387:63;;33446:1;33443;33436:12;33387:63;33334:122;:::o

Swarm Source

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