Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
654
Holders
54
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DWCNFTGENESIS
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-26 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: donteWalkerNft.sol pragma solidity 0.8.9; /// SPDX-License-Identifier: UNLICENSED contract DWCNFTGENESIS is ERC1155, ERC1155Supply, ReentrancyGuard, Ownable { using Strings for uint256; bytes32 public DiamondMerkleRoot = 0x54b0746df51cbbb2f9ab043955478c4824f8dccc1cbe3da00fef46609652f248; bytes32 public CarbonMerkleRoot = 0x33b71d34e9eee3cae1ce39d3fb1956ed9d977692d84fd6ec025a0b39bb3c17ad; string public baseURI; string public baseExtension = ".json"; bool public diamondSaleOpen = true; bool public carbonSaleOpen = false; mapping (address => bool) public whitelistClaimedDiamond; mapping (address => bool) public whitelistClaimed; constructor(string memory _initBaseURI) ERC1155(_initBaseURI) { setBaseURI(_initBaseURI); _mint(msg.sender, 1, 1, ""); } modifier onlySender { require(msg.sender == tx.origin); _; } modifier isDiamondSaleOpen { require(diamondSaleOpen == true); _; } modifier isCarbonSaleOpen { require(carbonSaleOpen == true); _; } function setDiamondMerkleRoot(bytes32 incomingBytes) public onlyOwner { DiamondMerkleRoot = incomingBytes; } function setCarbonMerkleRoot(bytes32 incomingBytes) public onlyOwner { CarbonMerkleRoot = incomingBytes; } function flipToCarbonSale() public onlyOwner { diamondSaleOpen = false; carbonSaleOpen = true; } function diamondSale(bytes32[] calldata _merkleProof) public payable nonReentrant onlySender isDiamondSaleOpen { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, DiamondMerkleRoot, leaf), "Invalid proof."); require(whitelistClaimedDiamond[msg.sender] == false); whitelistClaimedDiamond[msg.sender] = true; _mint(msg.sender, 1, 1, ""); } function carbonSale(bytes32[] calldata _merkleProof) public payable nonReentrant onlySender isCarbonSaleOpen { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, CarbonMerkleRoot, leaf), "Invalid proof."); require(whitelistClaimed[msg.sender] == false); whitelistClaimed[msg.sender] = true; _mint(msg.sender, 2, 1, ""); } function withdrawContractEther(address payable recipient) external onlyOwner { recipient.transfer(getBalance()); } function getBalance() public view returns(uint) { return address(this).balance; } function _baseURI() internal view virtual returns (string memory) { return baseURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function uri(uint256 tokenId) public view override virtual returns (string memory) { string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"CarbonMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DiamondMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"carbonSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"carbonSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"diamondSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"diamondSaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipToCarbonSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"incomingBytes","type":"bytes32"}],"name":"setCarbonMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"incomingBytes","type":"bytes32"}],"name":"setDiamondMerkleRoot","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistClaimedDiamond","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawContractEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
7f54b0746df51cbbb2f9ab043955478c4824f8dccc1cbe3da00fef46609652f2486006557f33b71d34e9eee3cae1ce39d3fb1956ed9d977692d84fd6ec025a0b39bb3c17ad60075560c06040526005608081905264173539b7b760d91b60a0908152620000709160099190620006ac565b50600a805461ffff191660011790553480156200008c57600080fd5b5060405162002f9338038062002f93833981016040819052620000af91620007ca565b80620000bb8162000102565b506001600455620000cc336200011b565b620000d7816200016d565b620000fb3360018060405180602001604052806000815250620001e260201b60201c565b5062000a91565b805162000117906002906020840190620006ac565b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620001cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805162000117906008906020840190620006ac565b6001600160a01b038416620002445760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401620001c4565b336200026a81600087620002588862000305565b620002638862000305565b8762000353565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906200029c90849062000882565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4620002fe8160008787878762000376565b5050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106200034257620003426200089d565b602090810291909101015292915050565b6200036e8686868686866200055c60201b62000efe1760201c565b505050505050565b62000395846001600160a01b03166200069d60201b620010141760201c565b156200036e5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190620003d19089908990889088908890600401620008e1565b602060405180830381600087803b158015620003ec57600080fd5b505af19250505080156200041f575060408051601f3d908101601f191682019092526200041c9181019062000928565b60015b620004e0576200042e6200095b565b806308c379a014156200046f57506200044662000978565b8062000453575062000471565b8060405162461bcd60e51b8152600401620001c4919062000a07565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401620001c4565b6001600160e01b0319811663f23a6e6160e01b14620005535760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401620001c4565b50505050505050565b620005778686868686866200036e60201b6200100c1760201c565b6001600160a01b0385166200060b5760005b83518110156200060957828181518110620005a857620005a86200089d565b602002602001015160036000868481518110620005c957620005c96200089d565b602002602001015181526020019081526020016000206000828254620005f0919062000882565b909155506200060190508162000a1c565b905062000589565b505b6001600160a01b0384166200036e5760005b835181101562000553578281815181106200063c576200063c6200089d565b6020026020010151600360008684815181106200065d576200065d6200089d565b60200260200101518152602001908152602001600020600082825462000684919062000a3a565b909155506200069590508162000a1c565b90506200061d565b6001600160a01b03163b151590565b828054620006ba9062000a54565b90600052602060002090601f016020900481019282620006de576000855562000729565b82601f10620006f957805160ff191683800117855562000729565b8280016001018555821562000729579182015b82811115620007295782518255916020019190600101906200070c565b50620007379291506200073b565b5090565b5b808211156200073757600081556001016200073c565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171562000790576200079062000752565b6040525050565b60005b83811015620007b45781810151838201526020016200079a565b83811115620007c4576000848401525b50505050565b600060208284031215620007dd57600080fd5b81516001600160401b0380821115620007f557600080fd5b818401915084601f8301126200080a57600080fd5b8151818111156200081f576200081f62000752565b60405191506200083a601f8201601f19166020018362000768565b8082528560208285010111156200085057600080fd5b6200086381602084016020860162000797565b50949350505050565b634e487b7160e01b600052601160045260246000fd5b600082198211156200089857620008986200086c565b500190565b634e487b7160e01b600052603260045260246000fd5b60008151808452620008cd81602086016020860162000797565b601f01601f19169290920160200192915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906200091d90830184620008b3565b979650505050505050565b6000602082840312156200093b57600080fd5b81516001600160e01b0319811681146200095457600080fd5b9392505050565b600060033d1115620009755760046000803e5060005160e01c5b90565b600060443d1015620009875790565b6040516003193d81016004833e81513d6001600160401b038083116024840183101715620009b757505050505090565b8285019150815181811115620009d05750505050505090565b843d8701016020828501011115620009eb5750505050505090565b620009fc6020828601018762000768565b509095945050505050565b602081526000620009546020830184620008b3565b600060001982141562000a335762000a336200086c565b5060010190565b60008282101562000a4f5762000a4f6200086c565b500390565b600181811c9082168062000a6957607f821691505b6020821081141562000a8b57634e487b7160e01b600052602260045260246000fd5b50919050565b6124f28062000aa16000396000f3fe6080604052600436106101c15760003560e01c8063715018a6116100f7578063bd85b03911610095578063db4bec4411610064578063db4bec44146104eb578063e985e9c51461051b578063f242432a14610564578063f2fde38b1461058457600080fd5b8063bd85b03914610476578063c6682862146104a3578063cabe6aa7146104b8578063cecb4e5a146104cb57600080fd5b80638da5cb5b116100d15780638da5cb5b146103f8578063a16d605a14610420578063a22cb46514610440578063b0bd53bc1461046057600080fd5b8063715018a6146103a9578063742184dc146103be5780637cf49e78146103de57600080fd5b80634e1273f41161016457806355f804b31161013e57806355f804b31461034c57806356e1d8941461036c57806359b4a7321461037f5780636c0360eb1461039457600080fd5b80634e1273f4146102da5780634f558e7914610307578063531c1df41461033657600080fd5b80630e89341c116101a05780630e89341c1461025957806312065fe01461028657806323a40097146102995780632eb2c2d6146102b857600080fd5b8062fdd58e146101c6578063015b946f146101f957806301ffc9a714610239575b600080fd5b3480156101d257600080fd5b506101e66101e1366004611ab3565b6105a4565b6040519081526020015b60405180910390f35b34801561020557600080fd5b50610229610214366004611adf565b600b6020526000908152604090205460ff1681565b60405190151581526020016101f0565b34801561024557600080fd5b50610229610254366004611b12565b61063b565b34801561026557600080fd5b50610279610274366004611b2f565b61068d565b6040516101f09190611ba4565b34801561029257600080fd5b50476101e6565b3480156102a557600080fd5b50600a5461022990610100900460ff1681565b3480156102c457600080fd5b506102d86102d3366004611d0d565b6106ee565b005b3480156102e657600080fd5b506102fa6102f5366004611dbb565b610785565b6040516101f09190611ec3565b34801561031357600080fd5b50610229610322366004611b2f565b600090815260036020526040902054151590565b34801561034257600080fd5b506101e660075481565b34801561035857600080fd5b506102d8610367366004611ed6565b6108af565b6102d861037a366004611f1f565b6108f0565b34801561038b57600080fd5b506102d8610a7e565b3480156103a057600080fd5b50610279610ab9565b3480156103b557600080fd5b506102d8610b47565b3480156103ca57600080fd5b506102d86103d9366004611b2f565b610b7d565b3480156103ea57600080fd5b50600a546102299060ff1681565b34801561040457600080fd5b506005546040516001600160a01b0390911681526020016101f0565b34801561042c57600080fd5b506102d861043b366004611adf565b610bac565b34801561044c57600080fd5b506102d861045b366004611f94565b610c0b565b34801561046c57600080fd5b506101e660065481565b34801561048257600080fd5b506101e6610491366004611b2f565b60009081526003602052604090205490565b3480156104af57600080fd5b50610279610c16565b6102d86104c6366004611f1f565b610c23565b3480156104d757600080fd5b506102d86104e6366004611b2f565b610dad565b3480156104f757600080fd5b50610229610506366004611adf565b600c6020526000908152604090205460ff1681565b34801561052757600080fd5b50610229610536366004611fd2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561057057600080fd5b506102d861057f366004612000565b610ddc565b34801561059057600080fd5b506102d861059f366004611adf565b610e63565b60006001600160a01b0383166106155760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061066c57506001600160e01b031982166303a24d0760e21b145b8061068757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000610699611023565b905060008151116106b957604051806020016040528060008152506106e7565b806106c3846110b5565b60096040516020016106d7939291906120a4565b6040516020818303038152906040525b9392505050565b6001600160a01b03851633148061070a575061070a8533610536565b6107715760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161060c565b61077e85858585856111bb565b5050505050565b606081518351146107ea5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161060c565b6000835167ffffffffffffffff81111561080657610806611bb7565b60405190808252806020026020018201604052801561082f578160200160208202803683370190505b50905060005b84518110156108a75761087a85828151811061085357610853612168565b602002602001015185838151811061086d5761086d612168565b60200260200101516105a4565b82828151811061088c5761088c612168565b60209081029190910101526108a081612194565b9050610835565b509392505050565b6005546001600160a01b031633146108d95760405162461bcd60e51b815260040161060c906121af565b80516108ec906008906020840190611a05565b5050565b600260045414156109435760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060c565b600260045533321461095457600080fd5b600a5460ff16151560011461096857600080fd5b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506109e283838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600654915084905061139e565b610a1f5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161060c565b336000908152600b602052604090205460ff1615610a3c57600080fd5b336000818152600b60209081526040808320805460ff191660019081179091558151928301909152918152610a7492919081906113b4565b5050600160045550565b6005546001600160a01b03163314610aa85760405162461bcd60e51b815260040161060c906121af565b600a805461ffff1916610100179055565b60088054610ac690612069565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290612069565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b505050505081565b6005546001600160a01b03163314610b715760405162461bcd60e51b815260040161060c906121af565b610b7b60006114c4565b565b6005546001600160a01b03163314610ba75760405162461bcd60e51b815260040161060c906121af565b600655565b6005546001600160a01b03163314610bd65760405162461bcd60e51b815260040161060c906121af565b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156108ec573d6000803e3d6000fd5b6108ec338383611516565b60098054610ac690612069565b60026004541415610c765760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060c565b6002600455333214610c8757600080fd5b600a5460ff610100909104161515600114610ca157600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610d1b83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600754915084905061139e565b610d585760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161060c565b336000908152600c602052604090205460ff1615610d7557600080fd5b336000818152600c60209081526040808320805460ff191660019081179091558151928301909152918152610a7492916002916113b4565b6005546001600160a01b03163314610dd75760405162461bcd60e51b815260040161060c906121af565b600755565b6001600160a01b038516331480610df85750610df88533610536565b610e565760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161060c565b61077e85858585856115f7565b6005546001600160a01b03163314610e8d5760405162461bcd60e51b815260040161060c906121af565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060c565b610efb816114c4565b50565b6001600160a01b038516610f855760005b8351811015610f8357828181518110610f2a57610f2a612168565b602002602001015160036000868481518110610f4857610f48612168565b602002602001015181526020019081526020016000206000828254610f6d91906121e4565b90915550610f7c905081612194565b9050610f0f565b505b6001600160a01b03841661100c5760005b835181101561100a57828181518110610fb157610fb1612168565b602002602001015160036000868481518110610fcf57610fcf612168565b602002602001015181526020019081526020016000206000828254610ff491906121fc565b90915550611003905081612194565b9050610f96565b505b505050505050565b6001600160a01b03163b151590565b60606008805461103290612069565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90612069565b80156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b5050505050905090565b6060816110d95750506040805180820190915260018152600360fc1b602082015290565b8160005b811561110357806110ed81612194565b91506110fc9050600a83612229565b91506110dd565b60008167ffffffffffffffff81111561111e5761111e611bb7565b6040519080825280601f01601f191660200182016040528015611148576020820181803683370190505b5090505b84156111b35761115d6001836121fc565b915061116a600a8661223d565b6111759060306121e4565b60f81b81838151811061118a5761118a612168565b60200101906001600160f81b031916908160001a9053506111ac600a86612229565b945061114c565b949350505050565b815183511461121d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161060c565b6001600160a01b0384166112435760405162461bcd60e51b815260040161060c90612251565b3361125281878787878761170b565b60005b845181101561133857600085828151811061127257611272612168565b60200260200101519050600085838151811061129057611290612168565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112e05760405162461bcd60e51b815260040161060c90612296565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061131d9084906121e4565b925050819055505050508061133190612194565b9050611255565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113889291906122e0565b60405180910390a461100c818787878787611719565b6000826113ab8584611884565b14949350505050565b6001600160a01b0384166114145760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161060c565b3361143481600087611425886118f0565b61142e886118f0565b8761170b565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906114649084906121e4565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461077e8160008787878761193b565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561158a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161060c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661161d5760405162461bcd60e51b815260040161060c90612251565b3361162d818787611425886118f0565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561166e5760405162461bcd60e51b815260040161060c90612296565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906116ab9084906121e4565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461100a82888888888861193b565b61100c868686868686610efe565b6001600160a01b0384163b1561100c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061175d908990899088908890889060040161230e565b602060405180830381600087803b15801561177757600080fd5b505af19250505080156117a7575060408051601f3d908101601f191682019092526117a49181019061236c565b60015b611854576117b3612389565b806308c379a014156117ed57506117c86123a5565b806117d357506117ef565b8060405162461bcd60e51b815260040161060c9190611ba4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161060c565b6001600160e01b0319811663bc197c8160e01b1461100a5760405162461bcd60e51b815260040161060c9061242f565b600081815b84518110156108a75760008582815181106118a6576118a6612168565b602002602001015190508083116118cc57600083815260208290526040902092506118dd565b600081815260208490526040902092505b50806118e881612194565b915050611889565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061192a5761192a612168565b602090810291909101015292915050565b6001600160a01b0384163b1561100c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061197f9089908990889088908890600401612477565b602060405180830381600087803b15801561199957600080fd5b505af19250505080156119c9575060408051601f3d908101601f191682019092526119c69181019061236c565b60015b6119d5576117b3612389565b6001600160e01b0319811663f23a6e6160e01b1461100a5760405162461bcd60e51b815260040161060c9061242f565b828054611a1190612069565b90600052602060002090601f016020900481019282611a335760008555611a79565b82601f10611a4c57805160ff1916838001178555611a79565b82800160010185558215611a79579182015b82811115611a79578251825591602001919060010190611a5e565b50611a85929150611a89565b5090565b5b80821115611a855760008155600101611a8a565b6001600160a01b0381168114610efb57600080fd5b60008060408385031215611ac657600080fd5b8235611ad181611a9e565b946020939093013593505050565b600060208284031215611af157600080fd5b81356106e781611a9e565b6001600160e01b031981168114610efb57600080fd5b600060208284031215611b2457600080fd5b81356106e781611afc565b600060208284031215611b4157600080fd5b5035919050565b60005b83811015611b63578181015183820152602001611b4b565b83811115611b72576000848401525b50505050565b60008151808452611b90816020860160208601611b48565b601f01601f19169290920160200192915050565b6020815260006106e76020830184611b78565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611bf357611bf3611bb7565b6040525050565b600067ffffffffffffffff821115611c1457611c14611bb7565b5060051b60200190565b600082601f830112611c2f57600080fd5b81356020611c3c82611bfa565b604051611c498282611bcd565b83815260059390931b8501820192828101915086841115611c6957600080fd5b8286015b84811015611c845780358352918301918301611c6d565b509695505050505050565b600067ffffffffffffffff831115611ca957611ca9611bb7565b604051611cc0601f8501601f191660200182611bcd565b809150838152848484011115611cd557600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611cfe57600080fd5b6106e783833560208501611c8f565b600080600080600060a08688031215611d2557600080fd5b8535611d3081611a9e565b94506020860135611d4081611a9e565b9350604086013567ffffffffffffffff80821115611d5d57600080fd5b611d6989838a01611c1e565b94506060880135915080821115611d7f57600080fd5b611d8b89838a01611c1e565b93506080880135915080821115611da157600080fd5b50611dae88828901611ced565b9150509295509295909350565b60008060408385031215611dce57600080fd5b823567ffffffffffffffff80821115611de657600080fd5b818501915085601f830112611dfa57600080fd5b81356020611e0782611bfa565b604051611e148282611bcd565b83815260059390931b8501820192828101915089841115611e3457600080fd5b948201945b83861015611e5b578535611e4c81611a9e565b82529482019490820190611e39565b96505086013592505080821115611e7157600080fd5b50611e7e85828601611c1e565b9150509250929050565b600081518084526020808501945080840160005b83811015611eb857815187529582019590820190600101611e9c565b509495945050505050565b6020815260006106e76020830184611e88565b600060208284031215611ee857600080fd5b813567ffffffffffffffff811115611eff57600080fd5b8201601f81018413611f1057600080fd5b6111b384823560208401611c8f565b60008060208385031215611f3257600080fd5b823567ffffffffffffffff80821115611f4a57600080fd5b818501915085601f830112611f5e57600080fd5b813581811115611f6d57600080fd5b8660208260051b8501011115611f8257600080fd5b60209290920196919550909350505050565b60008060408385031215611fa757600080fd5b8235611fb281611a9e565b915060208301358015158114611fc757600080fd5b809150509250929050565b60008060408385031215611fe557600080fd5b8235611ff081611a9e565b91506020830135611fc781611a9e565b600080600080600060a0868803121561201857600080fd5b853561202381611a9e565b9450602086013561203381611a9e565b93506040860135925060608601359150608086013567ffffffffffffffff81111561205d57600080fd5b611dae88828901611ced565b600181811c9082168061207d57607f821691505b6020821081141561209e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000845160206120b78285838a01611b48565b8551918401916120ca8184848a01611b48565b8554920191600090600181811c90808316806120e757607f831692505b85831081141561210557634e487b7160e01b85526022600452602485fd5b808015612119576001811461212a57612157565b60ff19851688528388019550612157565b60008b81526020902060005b8581101561214f5781548a820152908401908801612136565b505083880195505b50939b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156121a8576121a861217e565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156121f7576121f761217e565b500190565b60008282101561220e5761220e61217e565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261223857612238612213565b500490565b60008261224c5761224c612213565b500690565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122f36040830185611e88565b82810360208401526123058185611e88565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061233a90830186611e88565b828103606084015261234c8186611e88565b905082810360808401526123608185611b78565b98975050505050505050565b60006020828403121561237e57600080fd5b81516106e781611afc565b600060033d11156123a25760046000803e5060005160e01c5b90565b600060443d10156123b35790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156123e357505050505090565b82850191508151818111156123fb5750505050505090565b843d87010160208285010111156124155750505050505090565b61242460208286010187611bcd565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124b190830184611b78565b97965050505050505056fea2646970667358221220a046a0cde33c8813ff2241a88d77d18d6e32a548b9139b3bcaff6d823871a94d64736f6c634300080900330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57534d5851537064744641717776445674475178654e7052583968644d70355863747a4d6a3364745862394e2f000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101c15760003560e01c8063715018a6116100f7578063bd85b03911610095578063db4bec4411610064578063db4bec44146104eb578063e985e9c51461051b578063f242432a14610564578063f2fde38b1461058457600080fd5b8063bd85b03914610476578063c6682862146104a3578063cabe6aa7146104b8578063cecb4e5a146104cb57600080fd5b80638da5cb5b116100d15780638da5cb5b146103f8578063a16d605a14610420578063a22cb46514610440578063b0bd53bc1461046057600080fd5b8063715018a6146103a9578063742184dc146103be5780637cf49e78146103de57600080fd5b80634e1273f41161016457806355f804b31161013e57806355f804b31461034c57806356e1d8941461036c57806359b4a7321461037f5780636c0360eb1461039457600080fd5b80634e1273f4146102da5780634f558e7914610307578063531c1df41461033657600080fd5b80630e89341c116101a05780630e89341c1461025957806312065fe01461028657806323a40097146102995780632eb2c2d6146102b857600080fd5b8062fdd58e146101c6578063015b946f146101f957806301ffc9a714610239575b600080fd5b3480156101d257600080fd5b506101e66101e1366004611ab3565b6105a4565b6040519081526020015b60405180910390f35b34801561020557600080fd5b50610229610214366004611adf565b600b6020526000908152604090205460ff1681565b60405190151581526020016101f0565b34801561024557600080fd5b50610229610254366004611b12565b61063b565b34801561026557600080fd5b50610279610274366004611b2f565b61068d565b6040516101f09190611ba4565b34801561029257600080fd5b50476101e6565b3480156102a557600080fd5b50600a5461022990610100900460ff1681565b3480156102c457600080fd5b506102d86102d3366004611d0d565b6106ee565b005b3480156102e657600080fd5b506102fa6102f5366004611dbb565b610785565b6040516101f09190611ec3565b34801561031357600080fd5b50610229610322366004611b2f565b600090815260036020526040902054151590565b34801561034257600080fd5b506101e660075481565b34801561035857600080fd5b506102d8610367366004611ed6565b6108af565b6102d861037a366004611f1f565b6108f0565b34801561038b57600080fd5b506102d8610a7e565b3480156103a057600080fd5b50610279610ab9565b3480156103b557600080fd5b506102d8610b47565b3480156103ca57600080fd5b506102d86103d9366004611b2f565b610b7d565b3480156103ea57600080fd5b50600a546102299060ff1681565b34801561040457600080fd5b506005546040516001600160a01b0390911681526020016101f0565b34801561042c57600080fd5b506102d861043b366004611adf565b610bac565b34801561044c57600080fd5b506102d861045b366004611f94565b610c0b565b34801561046c57600080fd5b506101e660065481565b34801561048257600080fd5b506101e6610491366004611b2f565b60009081526003602052604090205490565b3480156104af57600080fd5b50610279610c16565b6102d86104c6366004611f1f565b610c23565b3480156104d757600080fd5b506102d86104e6366004611b2f565b610dad565b3480156104f757600080fd5b50610229610506366004611adf565b600c6020526000908152604090205460ff1681565b34801561052757600080fd5b50610229610536366004611fd2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561057057600080fd5b506102d861057f366004612000565b610ddc565b34801561059057600080fd5b506102d861059f366004611adf565b610e63565b60006001600160a01b0383166106155760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061066c57506001600160e01b031982166303a24d0760e21b145b8061068757506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000610699611023565b905060008151116106b957604051806020016040528060008152506106e7565b806106c3846110b5565b60096040516020016106d7939291906120a4565b6040516020818303038152906040525b9392505050565b6001600160a01b03851633148061070a575061070a8533610536565b6107715760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161060c565b61077e85858585856111bb565b5050505050565b606081518351146107ea5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161060c565b6000835167ffffffffffffffff81111561080657610806611bb7565b60405190808252806020026020018201604052801561082f578160200160208202803683370190505b50905060005b84518110156108a75761087a85828151811061085357610853612168565b602002602001015185838151811061086d5761086d612168565b60200260200101516105a4565b82828151811061088c5761088c612168565b60209081029190910101526108a081612194565b9050610835565b509392505050565b6005546001600160a01b031633146108d95760405162461bcd60e51b815260040161060c906121af565b80516108ec906008906020840190611a05565b5050565b600260045414156109435760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060c565b600260045533321461095457600080fd5b600a5460ff16151560011461096857600080fd5b6040516bffffffffffffffffffffffff193360601b1660208201526000906034016040516020818303038152906040528051906020012090506109e283838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600654915084905061139e565b610a1f5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161060c565b336000908152600b602052604090205460ff1615610a3c57600080fd5b336000818152600b60209081526040808320805460ff191660019081179091558151928301909152918152610a7492919081906113b4565b5050600160045550565b6005546001600160a01b03163314610aa85760405162461bcd60e51b815260040161060c906121af565b600a805461ffff1916610100179055565b60088054610ac690612069565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290612069565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b505050505081565b6005546001600160a01b03163314610b715760405162461bcd60e51b815260040161060c906121af565b610b7b60006114c4565b565b6005546001600160a01b03163314610ba75760405162461bcd60e51b815260040161060c906121af565b600655565b6005546001600160a01b03163314610bd65760405162461bcd60e51b815260040161060c906121af565b6040516001600160a01b038216904780156108fc02916000818181858888f193505050501580156108ec573d6000803e3d6000fd5b6108ec338383611516565b60098054610ac690612069565b60026004541415610c765760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161060c565b6002600455333214610c8757600080fd5b600a5460ff610100909104161515600114610ca157600080fd5b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610d1b83838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600754915084905061139e565b610d585760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b604482015260640161060c565b336000908152600c602052604090205460ff1615610d7557600080fd5b336000818152600c60209081526040808320805460ff191660019081179091558151928301909152918152610a7492916002916113b4565b6005546001600160a01b03163314610dd75760405162461bcd60e51b815260040161060c906121af565b600755565b6001600160a01b038516331480610df85750610df88533610536565b610e565760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161060c565b61077e85858585856115f7565b6005546001600160a01b03163314610e8d5760405162461bcd60e51b815260040161060c906121af565b6001600160a01b038116610ef25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060c565b610efb816114c4565b50565b6001600160a01b038516610f855760005b8351811015610f8357828181518110610f2a57610f2a612168565b602002602001015160036000868481518110610f4857610f48612168565b602002602001015181526020019081526020016000206000828254610f6d91906121e4565b90915550610f7c905081612194565b9050610f0f565b505b6001600160a01b03841661100c5760005b835181101561100a57828181518110610fb157610fb1612168565b602002602001015160036000868481518110610fcf57610fcf612168565b602002602001015181526020019081526020016000206000828254610ff491906121fc565b90915550611003905081612194565b9050610f96565b505b505050505050565b6001600160a01b03163b151590565b60606008805461103290612069565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90612069565b80156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b5050505050905090565b6060816110d95750506040805180820190915260018152600360fc1b602082015290565b8160005b811561110357806110ed81612194565b91506110fc9050600a83612229565b91506110dd565b60008167ffffffffffffffff81111561111e5761111e611bb7565b6040519080825280601f01601f191660200182016040528015611148576020820181803683370190505b5090505b84156111b35761115d6001836121fc565b915061116a600a8661223d565b6111759060306121e4565b60f81b81838151811061118a5761118a612168565b60200101906001600160f81b031916908160001a9053506111ac600a86612229565b945061114c565b949350505050565b815183511461121d5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161060c565b6001600160a01b0384166112435760405162461bcd60e51b815260040161060c90612251565b3361125281878787878761170b565b60005b845181101561133857600085828151811061127257611272612168565b60200260200101519050600085838151811061129057611290612168565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112e05760405162461bcd60e51b815260040161060c90612296565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061131d9084906121e4565b925050819055505050508061133190612194565b9050611255565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516113889291906122e0565b60405180910390a461100c818787878787611719565b6000826113ab8584611884565b14949350505050565b6001600160a01b0384166114145760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161060c565b3361143481600087611425886118f0565b61142e886118f0565b8761170b565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906114649084906121e4565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461077e8160008787878761193b565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561158a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161060c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661161d5760405162461bcd60e51b815260040161060c90612251565b3361162d818787611425886118f0565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561166e5760405162461bcd60e51b815260040161060c90612296565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906116ab9084906121e4565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461100a82888888888861193b565b61100c868686868686610efe565b6001600160a01b0384163b1561100c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061175d908990899088908890889060040161230e565b602060405180830381600087803b15801561177757600080fd5b505af19250505080156117a7575060408051601f3d908101601f191682019092526117a49181019061236c565b60015b611854576117b3612389565b806308c379a014156117ed57506117c86123a5565b806117d357506117ef565b8060405162461bcd60e51b815260040161060c9190611ba4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161060c565b6001600160e01b0319811663bc197c8160e01b1461100a5760405162461bcd60e51b815260040161060c9061242f565b600081815b84518110156108a75760008582815181106118a6576118a6612168565b602002602001015190508083116118cc57600083815260208290526040902092506118dd565b600081815260208490526040902092505b50806118e881612194565b915050611889565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061192a5761192a612168565b602090810291909101015292915050565b6001600160a01b0384163b1561100c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061197f9089908990889088908890600401612477565b602060405180830381600087803b15801561199957600080fd5b505af19250505080156119c9575060408051601f3d908101601f191682019092526119c69181019061236c565b60015b6119d5576117b3612389565b6001600160e01b0319811663f23a6e6160e01b1461100a5760405162461bcd60e51b815260040161060c9061242f565b828054611a1190612069565b90600052602060002090601f016020900481019282611a335760008555611a79565b82601f10611a4c57805160ff1916838001178555611a79565b82800160010185558215611a79579182015b82811115611a79578251825591602001919060010190611a5e565b50611a85929150611a89565b5090565b5b80821115611a855760008155600101611a8a565b6001600160a01b0381168114610efb57600080fd5b60008060408385031215611ac657600080fd5b8235611ad181611a9e565b946020939093013593505050565b600060208284031215611af157600080fd5b81356106e781611a9e565b6001600160e01b031981168114610efb57600080fd5b600060208284031215611b2457600080fd5b81356106e781611afc565b600060208284031215611b4157600080fd5b5035919050565b60005b83811015611b63578181015183820152602001611b4b565b83811115611b72576000848401525b50505050565b60008151808452611b90816020860160208601611b48565b601f01601f19169290920160200192915050565b6020815260006106e76020830184611b78565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611bf357611bf3611bb7565b6040525050565b600067ffffffffffffffff821115611c1457611c14611bb7565b5060051b60200190565b600082601f830112611c2f57600080fd5b81356020611c3c82611bfa565b604051611c498282611bcd565b83815260059390931b8501820192828101915086841115611c6957600080fd5b8286015b84811015611c845780358352918301918301611c6d565b509695505050505050565b600067ffffffffffffffff831115611ca957611ca9611bb7565b604051611cc0601f8501601f191660200182611bcd565b809150838152848484011115611cd557600080fd5b83836020830137600060208583010152509392505050565b600082601f830112611cfe57600080fd5b6106e783833560208501611c8f565b600080600080600060a08688031215611d2557600080fd5b8535611d3081611a9e565b94506020860135611d4081611a9e565b9350604086013567ffffffffffffffff80821115611d5d57600080fd5b611d6989838a01611c1e565b94506060880135915080821115611d7f57600080fd5b611d8b89838a01611c1e565b93506080880135915080821115611da157600080fd5b50611dae88828901611ced565b9150509295509295909350565b60008060408385031215611dce57600080fd5b823567ffffffffffffffff80821115611de657600080fd5b818501915085601f830112611dfa57600080fd5b81356020611e0782611bfa565b604051611e148282611bcd565b83815260059390931b8501820192828101915089841115611e3457600080fd5b948201945b83861015611e5b578535611e4c81611a9e565b82529482019490820190611e39565b96505086013592505080821115611e7157600080fd5b50611e7e85828601611c1e565b9150509250929050565b600081518084526020808501945080840160005b83811015611eb857815187529582019590820190600101611e9c565b509495945050505050565b6020815260006106e76020830184611e88565b600060208284031215611ee857600080fd5b813567ffffffffffffffff811115611eff57600080fd5b8201601f81018413611f1057600080fd5b6111b384823560208401611c8f565b60008060208385031215611f3257600080fd5b823567ffffffffffffffff80821115611f4a57600080fd5b818501915085601f830112611f5e57600080fd5b813581811115611f6d57600080fd5b8660208260051b8501011115611f8257600080fd5b60209290920196919550909350505050565b60008060408385031215611fa757600080fd5b8235611fb281611a9e565b915060208301358015158114611fc757600080fd5b809150509250929050565b60008060408385031215611fe557600080fd5b8235611ff081611a9e565b91506020830135611fc781611a9e565b600080600080600060a0868803121561201857600080fd5b853561202381611a9e565b9450602086013561203381611a9e565b93506040860135925060608601359150608086013567ffffffffffffffff81111561205d57600080fd5b611dae88828901611ced565b600181811c9082168061207d57607f821691505b6020821081141561209e57634e487b7160e01b600052602260045260246000fd5b50919050565b6000845160206120b78285838a01611b48565b8551918401916120ca8184848a01611b48565b8554920191600090600181811c90808316806120e757607f831692505b85831081141561210557634e487b7160e01b85526022600452602485fd5b808015612119576001811461212a57612157565b60ff19851688528388019550612157565b60008b81526020902060005b8581101561214f5781548a820152908401908801612136565b505083880195505b50939b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156121a8576121a861217e565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156121f7576121f761217e565b500190565b60008282101561220e5761220e61217e565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261223857612238612213565b500490565b60008261224c5761224c612213565b500690565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006122f36040830185611e88565b82810360208401526123058185611e88565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061233a90830186611e88565b828103606084015261234c8186611e88565b905082810360808401526123608185611b78565b98975050505050505050565b60006020828403121561237e57600080fd5b81516106e781611afc565b600060033d11156123a25760046000803e5060005160e01c5b90565b600060443d10156123b35790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156123e357505050505090565b82850191508151818111156123fb5750505050505090565b843d87010160208285010111156124155750505050505090565b61242460208286010187611bcd565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124b190830184611b78565b97965050505050505056fea2646970667358221220a046a0cde33c8813ff2241a88d77d18d6e32a548b9139b3bcaff6d823871a94d64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d57534d5851537064744641717776445674475178654e7052583968644d70355863747a4d6a3364745862394e2f000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmWSMXQSpdtFAqwvDVtGQxeNpRX9hdMp5XctzMj3dtXb9N/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d57534d5851537064744641717776445674475178654e705258396864
Arg [4] : 4d70355863747a4d6a3364745862394e2f000000000000000000000000000000
Deployed Bytecode Sourcemap
46703:3448:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31240:231;;;;;;;;;;-1:-1:-1;31240:231:0;;;;;:::i;:::-;;:::i;:::-;;;616:25:1;;;604:2;589:18;31240:231:0;;;;;;;;47203:56;;;;;;;;;;-1:-1:-1;47203:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1069:14:1;;1062:22;1044:41;;1032:2;1017:18;47203:56:0;904:187:1;30263:310:0;;;;;;;;;;-1:-1:-1;30263:310:0;;;;;:::i;:::-;;:::i;49561:281::-;;;;;;;;;;-1:-1:-1;49561:281:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49225:100::-;;;;;;;;;;-1:-1:-1;49296:21:0;49225:100;;47160:34;;;;;;;;;;-1:-1:-1;47160:34:0;;;;;;;;;;;33179:442;;;;;;;;;;-1:-1:-1;33179:442:0;;;;;:::i;:::-;;:::i;:::-;;31637:524;;;;;;;;;;-1:-1:-1;31637:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45732:122::-;;;;;;;;;;-1:-1:-1;45732:122:0;;;;;:::i;:::-;45789:4;45610:16;;;:12;:16;;;;;;-1:-1:-1;;;45732:122:0;46936:100;;;;;;;;;;;;;;;;49446:104;;;;;;;;;;-1:-1:-1;49446:104:0;;;;;:::i;:::-;;:::i;48178:451::-;;;;;;:::i;:::-;;:::i;48042:124::-;;;;;;;;;;;;;:::i;47045:21::-;;;;;;;;;;;;;:::i;10128:103::-;;;;;;;;;;;;;:::i;47776:127::-;;;;;;;;;;-1:-1:-1;47776:127:0;;;;;:::i;:::-;;:::i;47119:34::-;;;;;;;;;;-1:-1:-1;47119:34:0;;;;;;;;9477:87;;;;;;;;;;-1:-1:-1;9550:6:0;;9477:87;;-1:-1:-1;;;;;9550:6:0;;;9071:51:1;;9059:2;9044:18;9477:87:0;8925:203:1;49086:133:0;;;;;;;;;;-1:-1:-1;49086:133:0;;;;;:::i;:::-;;:::i;32234:155::-;;;;;;;;;;-1:-1:-1;32234:155:0;;;;;:::i;:::-;;:::i;46828:101::-;;;;;;;;;;;;;;;;45521:113;;;;;;;;;;-1:-1:-1;45521:113:0;;;;;:::i;:::-;45583:7;45610:16;;;:12;:16;;;;;;;45521:113;47073:37;;;;;;;;;;;;;:::i;48641:434::-;;;;;;:::i;:::-;;:::i;47909:125::-;;;;;;;;;;-1:-1:-1;47909:125:0;;;;;:::i;:::-;;:::i;47266:49::-;;;;;;;;;;-1:-1:-1;47266:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32461:168;;;;;;;;;;-1:-1:-1;32461:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;32584:27:0;;;32560:4;32584:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;32461:168;32701:401;;;;;;;;;;-1:-1:-1;32701:401:0;;;;;:::i;:::-;;:::i;10386:201::-;;;;;;;;;;-1:-1:-1;10386:201:0;;;;;:::i;:::-;;:::i;31240:231::-;31326:7;-1:-1:-1;;;;;31354:21:0;;31346:77;;;;-1:-1:-1;;;31346:77:0;;11148:2:1;31346:77:0;;;11130:21:1;11187:2;11167:18;;;11160:30;11226:34;11206:18;;;11199:62;-1:-1:-1;;;11277:18:1;;;11270:41;11328:19;;31346:77:0;;;;;;;;;-1:-1:-1;31441:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;31441:22:0;;;;;;;;;;;;31240:231::o;30263:310::-;30365:4;-1:-1:-1;;;;;;30402:41:0;;-1:-1:-1;;;30402:41:0;;:110;;-1:-1:-1;;;;;;;30460:52:0;;-1:-1:-1;;;30460:52:0;30402:110;:163;;;-1:-1:-1;;;;;;;;;;21483:40:0;;;30529:36;30382:183;30263:310;-1:-1:-1;;30263:310:0:o;49561:281::-;49629:13;49660:28;49691:10;:8;:10::i;:::-;49660:41;;49750:1;49725:14;49719:28;:32;:115;;;;;;;;;;;;;;;;;49778:14;49794:18;:7;:16;:18::i;:::-;49814:13;49761:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49719:115;49712:122;49561:281;-1:-1:-1;;;49561:281:0:o;33179:442::-;-1:-1:-1;;;;;33412:20:0;;8228:10;33412:20;;:60;;-1:-1:-1;33436:36:0;33453:4;8228:10;32461:168;:::i;33436:36::-;33390:160;;;;-1:-1:-1;;;33390:160:0;;13603:2:1;33390:160:0;;;13585:21:1;13642:2;13622:18;;;13615:30;13681:34;13661:18;;;13654:62;-1:-1:-1;;;13732:18:1;;;13725:48;13790:19;;33390:160:0;13401:414:1;33390:160:0;33561:52;33584:4;33590:2;33594:3;33599:7;33608:4;33561:22;:52::i;:::-;33179:442;;;;;:::o;31637:524::-;31793:16;31854:3;:10;31835:8;:15;:29;31827:83;;;;-1:-1:-1;;;31827:83:0;;14022:2:1;31827:83:0;;;14004:21:1;14061:2;14041:18;;;14034:30;14100:34;14080:18;;;14073:62;-1:-1:-1;;;14151:18:1;;;14144:39;14200:19;;31827:83:0;13820:405:1;31827:83:0;31923:30;31970:8;:15;31956:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31956:30:0;;31923:63;;32004:9;31999:122;32023:8;:15;32019:1;:19;31999:122;;;32079:30;32089:8;32098:1;32089:11;;;;;;;;:::i;:::-;;;;;;;32102:3;32106:1;32102:6;;;;;;;;:::i;:::-;;;;;;;32079:9;:30::i;:::-;32060:13;32074:1;32060:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;32040:3;;;:::i;:::-;;;31999:122;;;-1:-1:-1;32140:13:0;31637:524;-1:-1:-1;;;31637:524:0:o;49446:104::-;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;49521:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;49446:104:::0;:::o;48178:451::-;4292:1;4890:7;;:19;;4882:63;;;;-1:-1:-1;;;4882:63:0;;15197:2:1;4882:63:0;;;15179:21:1;15236:2;15216:18;;;15209:30;15275:33;15255:18;;;15248:61;15326:18;;4882:63:0;14995:355:1;4882:63:0;4292:1;5023:7;:18;47526:10:::1;47540:9;47526:23;47518:32;;;::::0;::::1;;47624:15:::2;::::0;::::2;;:23;;:15:::0;:23:::2;47616:32;;;::::0;::::2;;48330:28:::3;::::0;-1:-1:-1;;48347:10:0::3;15504:2:1::0;15500:15;15496:53;48330:28:0::3;::::0;::::3;15484:66:1::0;48305:12:0::3;::::0;15566::1;;48330:28:0::3;;;;;;;;;;;;48320:39;;;;;;48305:54;;48378:57;48397:12;;48378:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;;48411:17:0::3;::::0;;-1:-1:-1;48430:4:0;;-1:-1:-1;48378:18:0::3;:57::i;:::-;48370:84;;;::::0;-1:-1:-1;;;48370:84:0;;15791:2:1;48370:84:0::3;::::0;::::3;15773:21:1::0;15830:2;15810:18;;;15803:30;-1:-1:-1;;;15849:18:1;;;15842:44;15903:18;;48370:84:0::3;15589:338:1::0;48370:84:0::3;48497:10;48473:35;::::0;;;:23:::3;:35;::::0;;;;;::::3;;:44;48465:53;;;::::0;::::3;;48553:10;48529:35;::::0;;;:23:::3;:35;::::0;;;;;;;:42;;-1:-1:-1;;48529:42:0::3;48567:4;48529:42:::0;;::::3;::::0;;;48584:27;;;;::::3;::::0;;;;;;::::3;::::0;48553:10;48567:4;;;48584:5:::3;:27::i;:::-;-1:-1:-1::0;;4248:1:0;5202:7;:22;-1:-1:-1;48178:451:0:o;48042:124::-;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;48103:15:::1;:23:::0;;-1:-1:-1;;48137:21:0;48103:23:::1;48137:21;::::0;;48042:124::o;47045:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10128:103::-;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;10193:30:::1;10220:1;10193:18;:30::i;:::-;10128:103::o:0;47776:127::-;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;47862:17:::1;:33:::0;47776:127::o;49086:133::-;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;49179:32:::1;::::0;-1:-1:-1;;;;;49179:18:0;::::1;::::0;49296:21;49179:32;::::1;;;::::0;::::1;::::0;;;49296:21;49179:18;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;32234:155:::0;32329:52;8228:10;32362:8;32372;32329:18;:52::i;47073:37::-;;;;;;;:::i;48641:434::-;4292:1;4890:7;;:19;;4882:63;;;;-1:-1:-1;;;4882:63:0;;15197:2:1;4882:63:0;;;15179:21:1;15236:2;15216:18;;;15209:30;15275:33;15255:18;;;15248:61;15326:18;;4882:63:0;14995:355:1;4882:63:0;4292:1;5023:7;:18;47526:10:::1;47540:9;47526:23;47518:32;;;::::0;::::1;;47721:14:::2;::::0;::::2;;::::0;;::::2;;:22;;:14;:22;47713:31;;;::::0;::::2;;48791:28:::3;::::0;-1:-1:-1;;48808:10:0::3;15504:2:1::0;15500:15;15496:53;48791:28:0::3;::::0;::::3;15484:66:1::0;48766:12:0::3;::::0;15566::1;;48791:28:0::3;;;;;;;;;;;;48781:39;;;;;;48766:54;;48839:56;48858:12;;48839:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;::::0;;;;-1:-1:-1;;48872:16:0::3;::::0;;-1:-1:-1;48890:4:0;;-1:-1:-1;48839:18:0::3;:56::i;:::-;48831:83;;;::::0;-1:-1:-1;;;48831:83:0;;15791:2:1;48831:83:0::3;::::0;::::3;15773:21:1::0;15830:2;15810:18;;;15803:30;-1:-1:-1;;;15849:18:1;;;15842:44;15903:18;;48831:83:0::3;15589:338:1::0;48831:83:0::3;48950:10;48933:28;::::0;;;:16:::3;:28;::::0;;;;;::::3;;:37;48925:46;;;::::0;::::3;;48999:10;48982:28;::::0;;;:16:::3;:28;::::0;;;;;;;:35;;-1:-1:-1;;48982:35:0::3;49013:4;48982:35:::0;;::::3;::::0;;;49030:27;;;;::::3;::::0;;;;;;::::3;::::0;48999:10;49048:1:::3;::::0;49030:5:::3;:27::i;47909:125::-:0;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;47994:16:::1;:32:::0;47909:125::o;32701:401::-;-1:-1:-1;;;;;32909:20:0;;8228:10;32909:20;;:60;;-1:-1:-1;32933:36:0;32950:4;8228:10;32461:168;:::i;32933:36::-;32887:151;;;;-1:-1:-1;;;32887:151:0;;16134:2:1;32887:151:0;;;16116:21:1;16173:2;16153:18;;;16146:30;16212:34;16192:18;;;16185:62;-1:-1:-1;;;16263:18:1;;;16256:39;16312:19;;32887:151:0;15932:405:1;32887:151:0;33049:45;33067:4;33073:2;33077;33081:6;33089:4;33049:17;:45::i;10386:201::-;9550:6;;-1:-1:-1;;;;;9550:6:0;8228:10;9697:23;9689:68;;;;-1:-1:-1;;;9689:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10475:22:0;::::1;10467:73;;;::::0;-1:-1:-1;;;10467:73:0;;16544:2:1;10467:73:0::1;::::0;::::1;16526:21:1::0;16583:2;16563:18;;;16556:30;16622:34;16602:18;;;16595:62;-1:-1:-1;;;16673:18:1;;;16666:36;16719:19;;10467:73:0::1;16342:402:1::0;10467:73:0::1;10551:28;10570:8;10551:18;:28::i;:::-;10386:201:::0;:::o;45929:655::-;-1:-1:-1;;;;;46251:18:0;;46247:160;;46291:9;46286:110;46310:3;:10;46306:1;:14;46286:110;;;46370:7;46378:1;46370:10;;;;;;;;:::i;:::-;;;;;;;46346:12;:20;46359:3;46363:1;46359:6;;;;;;;;:::i;:::-;;;;;;;46346:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;46322:3:0;;-1:-1:-1;46322:3:0;;:::i;:::-;;;46286:110;;;;46247:160;-1:-1:-1;;;;;46423:16:0;;46419:158;;46461:9;46456:110;46480:3;:10;46476:1;:14;46456:110;;;46540:7;46548:1;46540:10;;;;;;;;:::i;:::-;;;;;;;46516:12;:20;46529:3;46533:1;46529:6;;;;;;;;:::i;:::-;;;;;;;46516:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;46492:3:0;;-1:-1:-1;46492:3:0;;:::i;:::-;;;46456:110;;;;46419:158;45929:655;;;;;;:::o;12216:326::-;-1:-1:-1;;;;;12511:19:0;;:23;;;12216:326::o;49336:99::-;49387:13;49420:7;49413:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49336:99;:::o;5657:723::-;5713:13;5934:10;5930:53;;-1:-1:-1;;5961:10:0;;;;;;;;;;;;-1:-1:-1;;;5961:10:0;;;;;5657:723::o;5930:53::-;6008:5;5993:12;6049:78;6056:9;;6049:78;;6082:8;;;;:::i;:::-;;-1:-1:-1;6105:10:0;;-1:-1:-1;6113:2:0;6105:10;;:::i;:::-;;;6049:78;;;6137:19;6169:6;6159:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6159:17:0;;6137:39;;6187:154;6194:10;;6187:154;;6221:11;6231:1;6221:11;;:::i;:::-;;-1:-1:-1;6290:10:0;6298:2;6290:5;:10;:::i;:::-;6277:24;;:2;:24;:::i;:::-;6264:39;;6247:6;6254;6247:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;6247:56:0;;;;;;;;-1:-1:-1;6318:11:0;6327:2;6318:11;;:::i;:::-;;;6187:154;;;6365:6;5657:723;-1:-1:-1;;;;5657:723:0:o;35263:1074::-;35490:7;:14;35476:3;:10;:28;35468:81;;;;-1:-1:-1;;;35468:81:0;;17588:2:1;35468:81:0;;;17570:21:1;17627:2;17607:18;;;17600:30;17666:34;17646:18;;;17639:62;-1:-1:-1;;;17717:18:1;;;17710:38;17765:19;;35468:81:0;17386:404:1;35468:81:0;-1:-1:-1;;;;;35568:16:0;;35560:66;;;;-1:-1:-1;;;35560:66:0;;;;;;;:::i;:::-;8228:10;35683:60;8228:10;35714:4;35720:2;35724:3;35729:7;35738:4;35683:20;:60::i;:::-;35761:9;35756:421;35780:3;:10;35776:1;:14;35756:421;;;35812:10;35825:3;35829:1;35825:6;;;;;;;;:::i;:::-;;;;;;;35812:19;;35846:14;35863:7;35871:1;35863:10;;;;;;;;:::i;:::-;;;;;;;;;;;;35890:19;35912:13;;;;;;;;;;-1:-1:-1;;;;;35912:19:0;;;;;;;;;;;;35863:10;;-1:-1:-1;35954:21:0;;;;35946:76;;;;-1:-1:-1;;;35946:76:0;;;;;;;:::i;:::-;36066:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36066:19:0;;;;;;;;;;36088:20;;;36066:42;;36138:17;;;;;;;:27;;36088:20;;36066:9;36138:27;;36088:20;;36138:27;:::i;:::-;;;;;;;;35797:380;;;35792:3;;;;:::i;:::-;;;35756:421;;;;36224:2;-1:-1:-1;;;;;36194:47:0;36218:4;-1:-1:-1;;;;;36194:47:0;36208:8;-1:-1:-1;;;;;36194:47:0;;36228:3;36233:7;36194:47;;;;;;;:::i;:::-;;;;;;;;36254:75;36290:8;36300:4;36306:2;36310:3;36315:7;36324:4;36254:35;:75::i;961:190::-;1086:4;1139;1110:25;1123:5;1130:4;1110:12;:25::i;:::-;:33;;961:190;-1:-1:-1;;;;961:190:0:o;37655:569::-;-1:-1:-1;;;;;37808:16:0;;37800:62;;;;-1:-1:-1;;;37800:62:0;;19284:2:1;37800:62:0;;;19266:21:1;19323:2;19303:18;;;19296:30;19362:34;19342:18;;;19335:62;-1:-1:-1;;;19413:18:1;;;19406:31;19454:19;;37800:62:0;19082:397:1;37800:62:0;8228:10;37919:102;8228:10;37875:16;37962:2;37966:21;37984:2;37966:17;:21::i;:::-;37989:25;38007:6;37989:17;:25::i;:::-;38016:4;37919:20;:102::i;:::-;38034:9;:13;;;;;;;;;;;-1:-1:-1;;;;;38034:17:0;;;;;;;;;:27;;38055:6;;38034:9;:27;;38055:6;;38034:27;:::i;:::-;;;;-1:-1:-1;;38077:52:0;;;19658:25:1;;;19714:2;19699:18;;19692:34;;;-1:-1:-1;;;;;38077:52:0;;;;38110:1;;38077:52;;;;;;19631:18:1;38077:52:0;;;;;;;38142:74;38173:8;38191:1;38195:2;38199;38203:6;38211:4;38142:30;:74::i;10747:191::-;10840:6;;;-1:-1:-1;;;;;10857:17:0;;;-1:-1:-1;;;;;;10857:17:0;;;;;;;10890:40;;10840:6;;;10857:17;10840:6;;10890:40;;10821:16;;10890:40;10810:128;10747:191;:::o;41449:331::-;41604:8;-1:-1:-1;;;;;41595:17:0;:5;-1:-1:-1;;;;;41595:17:0;;;41587:71;;;;-1:-1:-1;;;41587:71:0;;19939:2:1;41587:71:0;;;19921:21:1;19978:2;19958:18;;;19951:30;20017:34;19997:18;;;19990:62;-1:-1:-1;;;20068:18:1;;;20061:39;20117:19;;41587:71:0;19737:405:1;41587:71:0;-1:-1:-1;;;;;41669:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;41669:46:0;;;;;;;;;;41731:41;;1044::1;;;41731::0;;1017:18:1;41731:41:0;;;;;;;41449:331;;;:::o;34085:820::-;-1:-1:-1;;;;;34273:16:0;;34265:66;;;;-1:-1:-1;;;34265:66:0;;;;;;;:::i;:::-;8228:10;34388:96;8228:10;34419:4;34425:2;34429:21;34447:2;34429:17;:21::i;34388:96::-;34497:19;34519:13;;;;;;;;;;;-1:-1:-1;;;;;34519:19:0;;;;;;;;;;34557:21;;;;34549:76;;;;-1:-1:-1;;;34549:76:0;;;;;;;:::i;:::-;34661:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34661:19:0;;;;;;;;;;34683:20;;;34661:42;;34725:17;;;;;;;:27;;34683:20;;34661:9;34725:27;;34683:20;;34725:27;:::i;:::-;;;;-1:-1:-1;;34770:46:0;;;19658:25:1;;;19714:2;19699:18;;19692:34;;;-1:-1:-1;;;;;34770:46:0;;;;;;;;;;;;;;19631:18:1;34770:46:0;;;;;;;34829:68;34860:8;34870:4;34876:2;34880;34884:6;34892:4;34829:30;:68::i;49850:291::-;50067:66;50094:8;50104:4;50110:2;50114:3;50119:7;50128:4;50067:26;:66::i;43717:813::-;-1:-1:-1;;;;;43957:13:0;;12511:19;:23;43953:570;;43993:79;;-1:-1:-1;;;43993:79:0;;-1:-1:-1;;;;;43993:43:0;;;;;:79;;44037:8;;44047:4;;44053:3;;44058:7;;44067:4;;43993:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43993:79:0;;;;;;;;-1:-1:-1;;43993:79:0;;;;;;;;;;;;:::i;:::-;;;43989:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;44385:6;44378:14;;-1:-1:-1;;;44378:14:0;;;;;;;;:::i;43989:523::-;;;44434:62;;-1:-1:-1;;;44434:62:0;;22295:2:1;44434:62:0;;;22277:21:1;22334:2;22314:18;;;22307:30;22373:34;22353:18;;;22346:62;-1:-1:-1;;;22424:18:1;;;22417:50;22484:19;;44434:62:0;22093:416:1;43989:523:0;-1:-1:-1;;;;;;44154:60:0;;-1:-1:-1;;;44154:60:0;44150:159;;44239:50;;-1:-1:-1;;;44239:50:0;;;;;;;:::i;1513:675::-;1596:7;1639:4;1596:7;1654:497;1678:5;:12;1674:1;:16;1654:497;;;1712:20;1735:5;1741:1;1735:8;;;;;;;;:::i;:::-;;;;;;;1712:31;;1778:12;1762;:28;1758:382;;2264:13;2314:15;;;2350:4;2343:15;;;2397:4;2381:21;;1890:57;;1758:382;;;2264:13;2314:15;;;2350:4;2343:15;;;2397:4;2381:21;;2067:57;;1758:382;-1:-1:-1;1692:3:0;;;;:::i;:::-;;;;1654:497;;44538:198;44658:16;;;44672:1;44658:16;;;;;;;;;44604;;44633:22;;44658:16;;;;;;;;;;;;-1:-1:-1;44658:16:0;44633:41;;44696:7;44685:5;44691:1;44685:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;44723:5;44538:198;-1:-1:-1;;44538:198:0:o;42965:744::-;-1:-1:-1;;;;;43180:13:0;;12511:19;:23;43176:526;;43216:72;;-1:-1:-1;;;43216:72:0;;-1:-1:-1;;;;;43216:38:0;;;;;:72;;43255:8;;43265:4;;43271:2;;43275:6;;43283:4;;43216:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43216:72:0;;;;;;;;-1:-1:-1;;43216:72:0;;;;;;;;;;;;:::i;:::-;;;43212:479;;;;:::i;:::-;-1:-1:-1;;;;;;43338:55:0;;-1:-1:-1;;;43338:55:0;43334:154;;43418:50;;-1:-1:-1;;;43418:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;652:247::-;711:6;764:2;752:9;743:7;739:23;735:32;732:52;;;780:1;777;770:12;732:52;819:9;806:23;838:31;863:5;838:31;:::i;1096:131::-;-1:-1:-1;;;;;;1170:32:1;;1160:43;;1150:71;;1217:1;1214;1207:12;1232:245;1290:6;1343:2;1331:9;1322:7;1318:23;1314:32;1311:52;;;1359:1;1356;1349:12;1311:52;1398:9;1385:23;1417:30;1441:5;1417:30;:::i;1482:180::-;1541:6;1594:2;1582:9;1573:7;1569:23;1565:32;1562:52;;;1610:1;1607;1600:12;1562:52;-1:-1:-1;1633:23:1;;1482:180;-1:-1:-1;1482:180:1:o;1667:258::-;1739:1;1749:113;1763:6;1760:1;1757:13;1749:113;;;1839:11;;;1833:18;1820:11;;;1813:39;1785:2;1778:10;1749:113;;;1880:6;1877:1;1874:13;1871:48;;;1915:1;1906:6;1901:3;1897:16;1890:27;1871:48;;1667:258;;;:::o;1930:::-;1972:3;2010:5;2004:12;2037:6;2032:3;2025:19;2053:63;2109:6;2102:4;2097:3;2093:14;2086:4;2079:5;2075:16;2053:63;:::i;:::-;2170:2;2149:15;-1:-1:-1;;2145:29:1;2136:39;;;;2177:4;2132:50;;1930:258;-1:-1:-1;;1930:258:1:o;2193:220::-;2342:2;2331:9;2324:21;2305:4;2362:45;2403:2;2392:9;2388:18;2380:6;2362:45;:::i;2418:127::-;2479:10;2474:3;2470:20;2467:1;2460:31;2510:4;2507:1;2500:15;2534:4;2531:1;2524:15;2550:249;2660:2;2641:13;;-1:-1:-1;;2637:27:1;2625:40;;2695:18;2680:34;;2716:22;;;2677:62;2674:88;;;2742:18;;:::i;:::-;2778:2;2771:22;-1:-1:-1;;2550:249:1:o;2804:183::-;2864:4;2897:18;2889:6;2886:30;2883:56;;;2919:18;;:::i;:::-;-1:-1:-1;2964:1:1;2960:14;2976:4;2956:25;;2804:183::o;2992:724::-;3046:5;3099:3;3092:4;3084:6;3080:17;3076:27;3066:55;;3117:1;3114;3107:12;3066:55;3153:6;3140:20;3179:4;3202:43;3242:2;3202:43;:::i;:::-;3274:2;3268:9;3286:31;3314:2;3306:6;3286:31;:::i;:::-;3352:18;;;3444:1;3440:10;;;;3428:23;;3424:32;;;3386:15;;;;-1:-1:-1;3468:15:1;;;3465:35;;;3496:1;3493;3486:12;3465:35;3532:2;3524:6;3520:15;3544:142;3560:6;3555:3;3552:15;3544:142;;;3626:17;;3614:30;;3664:12;;;;3577;;3544:142;;;-1:-1:-1;3704:6:1;2992:724;-1:-1:-1;;;;;;2992:724:1:o;3721:468::-;3785:5;3819:18;3811:6;3808:30;3805:56;;;3841:18;;:::i;:::-;3890:2;3884:9;3902:69;3959:2;3938:15;;-1:-1:-1;;3934:29:1;3965:4;3930:40;3884:9;3902:69;:::i;:::-;3989:6;3980:15;;4019:6;4011;4004:22;4059:3;4050:6;4045:3;4041:16;4038:25;4035:45;;;4076:1;4073;4066:12;4035:45;4126:6;4121:3;4114:4;4106:6;4102:17;4089:44;4181:1;4174:4;4165:6;4157;4153:19;4149:30;4142:41;;3721:468;;;;;:::o;4194:220::-;4236:5;4289:3;4282:4;4274:6;4270:17;4266:27;4256:55;;4307:1;4304;4297:12;4256:55;4329:79;4404:3;4395:6;4382:20;4375:4;4367:6;4363:17;4329:79;:::i;4419:1071::-;4573:6;4581;4589;4597;4605;4658:3;4646:9;4637:7;4633:23;4629:33;4626:53;;;4675:1;4672;4665:12;4626:53;4714:9;4701:23;4733:31;4758:5;4733:31;:::i;:::-;4783:5;-1:-1:-1;4840:2:1;4825:18;;4812:32;4853:33;4812:32;4853:33;:::i;:::-;4905:7;-1:-1:-1;4963:2:1;4948:18;;4935:32;4986:18;5016:14;;;5013:34;;;5043:1;5040;5033:12;5013:34;5066:61;5119:7;5110:6;5099:9;5095:22;5066:61;:::i;:::-;5056:71;;5180:2;5169:9;5165:18;5152:32;5136:48;;5209:2;5199:8;5196:16;5193:36;;;5225:1;5222;5215:12;5193:36;5248:63;5303:7;5292:8;5281:9;5277:24;5248:63;:::i;:::-;5238:73;;5364:3;5353:9;5349:19;5336:33;5320:49;;5394:2;5384:8;5381:16;5378:36;;;5410:1;5407;5400:12;5378:36;;5433:51;5476:7;5465:8;5454:9;5450:24;5433:51;:::i;:::-;5423:61;;;4419:1071;;;;;;;;:::o;5495:1277::-;5613:6;5621;5674:2;5662:9;5653:7;5649:23;5645:32;5642:52;;;5690:1;5687;5680:12;5642:52;5730:9;5717:23;5759:18;5800:2;5792:6;5789:14;5786:34;;;5816:1;5813;5806:12;5786:34;5854:6;5843:9;5839:22;5829:32;;5899:7;5892:4;5888:2;5884:13;5880:27;5870:55;;5921:1;5918;5911:12;5870:55;5957:2;5944:16;5979:4;6002:43;6042:2;6002:43;:::i;:::-;6074:2;6068:9;6086:31;6114:2;6106:6;6086:31;:::i;:::-;6152:18;;;6240:1;6236:10;;;;6228:19;;6224:28;;;6186:15;;;;-1:-1:-1;6264:19:1;;;6261:39;;;6296:1;6293;6286:12;6261:39;6320:11;;;;6340:217;6356:6;6351:3;6348:15;6340:217;;;6436:3;6423:17;6453:31;6478:5;6453:31;:::i;:::-;6497:18;;6373:12;;;;6535;;;;6340:217;;;6576:6;-1:-1:-1;;6620:18:1;;6607:32;;-1:-1:-1;;6651:16:1;;;6648:36;;;6680:1;6677;6670:12;6648:36;;6703:63;6758:7;6747:8;6736:9;6732:24;6703:63;:::i;:::-;6693:73;;;5495:1277;;;;;:::o;6777:435::-;6830:3;6868:5;6862:12;6895:6;6890:3;6883:19;6921:4;6950:2;6945:3;6941:12;6934:19;;6987:2;6980:5;6976:14;7008:1;7018:169;7032:6;7029:1;7026:13;7018:169;;;7093:13;;7081:26;;7127:12;;;;7162:15;;;;7054:1;7047:9;7018:169;;;-1:-1:-1;7203:3:1;;6777:435;-1:-1:-1;;;;;6777:435:1:o;7217:261::-;7396:2;7385:9;7378:21;7359:4;7416:56;7468:2;7457:9;7453:18;7445:6;7416:56;:::i;7665:450::-;7734:6;7787:2;7775:9;7766:7;7762:23;7758:32;7755:52;;;7803:1;7800;7793:12;7755:52;7843:9;7830:23;7876:18;7868:6;7865:30;7862:50;;;7908:1;7905;7898:12;7862:50;7931:22;;7984:4;7976:13;;7972:27;-1:-1:-1;7962:55:1;;8013:1;8010;8003:12;7962:55;8036:73;8101:7;8096:2;8083:16;8078:2;8074;8070:11;8036:73;:::i;8120:615::-;8206:6;8214;8267:2;8255:9;8246:7;8242:23;8238:32;8235:52;;;8283:1;8280;8273:12;8235:52;8323:9;8310:23;8352:18;8393:2;8385:6;8382:14;8379:34;;;8409:1;8406;8399:12;8379:34;8447:6;8436:9;8432:22;8422:32;;8492:7;8485:4;8481:2;8477:13;8473:27;8463:55;;8514:1;8511;8504:12;8463:55;8554:2;8541:16;8580:2;8572:6;8569:14;8566:34;;;8596:1;8593;8586:12;8566:34;8649:7;8644:2;8634:6;8631:1;8627:14;8623:2;8619:23;8615:32;8612:45;8609:65;;;8670:1;8667;8660:12;8609:65;8701:2;8693:11;;;;;8723:6;;-1:-1:-1;8120:615:1;;-1:-1:-1;;;;8120:615:1:o;9393:416::-;9458:6;9466;9519:2;9507:9;9498:7;9494:23;9490:32;9487:52;;;9535:1;9532;9525:12;9487:52;9574:9;9561:23;9593:31;9618:5;9593:31;:::i;:::-;9643:5;-1:-1:-1;9700:2:1;9685:18;;9672:32;9742:15;;9735:23;9723:36;;9713:64;;9773:1;9770;9763:12;9713:64;9796:7;9786:17;;;9393:416;;;;;:::o;9814:388::-;9882:6;9890;9943:2;9931:9;9922:7;9918:23;9914:32;9911:52;;;9959:1;9956;9949:12;9911:52;9998:9;9985:23;10017:31;10042:5;10017:31;:::i;:::-;10067:5;-1:-1:-1;10124:2:1;10109:18;;10096:32;10137:33;10096:32;10137:33;:::i;10207:734::-;10311:6;10319;10327;10335;10343;10396:3;10384:9;10375:7;10371:23;10367:33;10364:53;;;10413:1;10410;10403:12;10364:53;10452:9;10439:23;10471:31;10496:5;10471:31;:::i;:::-;10521:5;-1:-1:-1;10578:2:1;10563:18;;10550:32;10591:33;10550:32;10591:33;:::i;:::-;10643:7;-1:-1:-1;10697:2:1;10682:18;;10669:32;;-1:-1:-1;10748:2:1;10733:18;;10720:32;;-1:-1:-1;10803:3:1;10788:19;;10775:33;10831:18;10820:30;;10817:50;;;10863:1;10860;10853:12;10817:50;10886:49;10927:7;10918:6;10907:9;10903:22;10886:49;:::i;11358:380::-;11437:1;11433:12;;;;11480;;;11501:61;;11555:4;11547:6;11543:17;11533:27;;11501:61;11608:2;11600:6;11597:14;11577:18;11574:38;11571:161;;;11654:10;11649:3;11645:20;11642:1;11635:31;11689:4;11686:1;11679:15;11717:4;11714:1;11707:15;11571:161;;11358:380;;;:::o;11869:1527::-;12093:3;12131:6;12125:13;12157:4;12170:51;12214:6;12209:3;12204:2;12196:6;12192:15;12170:51;:::i;:::-;12284:13;;12243:16;;;;12306:55;12284:13;12243:16;12328:15;;;12306:55;:::i;:::-;12450:13;;12383:20;;;12423:1;;12510;12532:18;;;;12585;;;;12612:93;;12690:4;12680:8;12676:19;12664:31;;12612:93;12753:2;12743:8;12740:16;12720:18;12717:40;12714:167;;;-1:-1:-1;;;12780:33:1;;12836:4;12833:1;12826:15;12866:4;12787:3;12854:17;12714:167;12897:18;12924:110;;;;13048:1;13043:328;;;;12890:481;;12924:110;-1:-1:-1;;12959:24:1;;12945:39;;13004:20;;;;-1:-1:-1;12924:110:1;;13043:328;11816:1;11809:14;;;11853:4;11840:18;;13138:1;13152:169;13166:8;13163:1;13160:15;13152:169;;;13248:14;;13233:13;;;13226:37;13291:16;;;;13183:10;;13152:169;;;13156:3;;13352:8;13345:5;13341:20;13334:27;;12890:481;-1:-1:-1;13387:3:1;;11869:1527;-1:-1:-1;;;;;;;;;;;11869:1527:1:o;14230:127::-;14291:10;14286:3;14282:20;14279:1;14272:31;14322:4;14319:1;14312:15;14346:4;14343:1;14336:15;14362:127;14423:10;14418:3;14414:20;14411:1;14404:31;14454:4;14451:1;14444:15;14478:4;14475:1;14468:15;14494:135;14533:3;-1:-1:-1;;14554:17:1;;14551:43;;;14574:18;;:::i;:::-;-1:-1:-1;14621:1:1;14610:13;;14494:135::o;14634:356::-;14836:2;14818:21;;;14855:18;;;14848:30;14914:34;14909:2;14894:18;;14887:62;14981:2;14966:18;;14634:356::o;16749:128::-;16789:3;16820:1;16816:6;16813:1;16810:13;16807:39;;;16826:18;;:::i;:::-;-1:-1:-1;16862:9:1;;16749:128::o;16882:125::-;16922:4;16950:1;16947;16944:8;16941:34;;;16955:18;;:::i;:::-;-1:-1:-1;16992:9:1;;16882:125::o;17012:127::-;17073:10;17068:3;17064:20;17061:1;17054:31;17104:4;17101:1;17094:15;17128:4;17125:1;17118:15;17144:120;17184:1;17210;17200:35;;17215:18;;:::i;:::-;-1:-1:-1;17249:9:1;;17144:120::o;17269:112::-;17301:1;17327;17317:35;;17332:18;;:::i;:::-;-1:-1:-1;17366:9:1;;17269:112::o;17795:401::-;17997:2;17979:21;;;18036:2;18016:18;;;18009:30;18075:34;18070:2;18055:18;;18048:62;-1:-1:-1;;;18141:2:1;18126:18;;18119:35;18186:3;18171:19;;17795:401::o;18201:406::-;18403:2;18385:21;;;18442:2;18422:18;;;18415:30;18481:34;18476:2;18461:18;;18454:62;-1:-1:-1;;;18547:2:1;18532:18;;18525:40;18597:3;18582:19;;18201:406::o;18612:465::-;18869:2;18858:9;18851:21;18832:4;18895:56;18947:2;18936:9;18932:18;18924:6;18895:56;:::i;:::-;18999:9;18991:6;18987:22;18982:2;18971:9;18967:18;18960:50;19027:44;19064:6;19056;19027:44;:::i;:::-;19019:52;18612:465;-1:-1:-1;;;;;18612:465:1:o;20147:827::-;-1:-1:-1;;;;;20544:15:1;;;20526:34;;20596:15;;20591:2;20576:18;;20569:43;20506:3;20643:2;20628:18;;20621:31;;;20469:4;;20675:57;;20712:19;;20704:6;20675:57;:::i;:::-;20780:9;20772:6;20768:22;20763:2;20752:9;20748:18;20741:50;20814:44;20851:6;20843;20814:44;:::i;:::-;20800:58;;20907:9;20899:6;20895:22;20889:3;20878:9;20874:19;20867:51;20935:33;20961:6;20953;20935:33;:::i;:::-;20927:41;20147:827;-1:-1:-1;;;;;;;;20147:827:1:o;20979:249::-;21048:6;21101:2;21089:9;21080:7;21076:23;21072:32;21069:52;;;21117:1;21114;21107:12;21069:52;21149:9;21143:16;21168:30;21192:5;21168:30;:::i;21233:179::-;21268:3;21310:1;21292:16;21289:23;21286:120;;;21356:1;21353;21350;21335:23;-1:-1:-1;21393:1:1;21387:8;21382:3;21378:18;21286:120;21233:179;:::o;21417:671::-;21456:3;21498:4;21480:16;21477:26;21474:39;;;21417:671;:::o;21474:39::-;21540:2;21534:9;-1:-1:-1;;21605:16:1;21601:25;;21598:1;21534:9;21577:50;21656:4;21650:11;21680:16;21715:18;21786:2;21779:4;21771:6;21767:17;21764:25;21759:2;21751:6;21748:14;21745:45;21742:58;;;21793:5;;;;;21417:671;:::o;21742:58::-;21830:6;21824:4;21820:17;21809:28;;21866:3;21860:10;21893:2;21885:6;21882:14;21879:27;;;21899:5;;;;;;21417:671;:::o;21879:27::-;21983:2;21964:16;21958:4;21954:27;21950:36;21943:4;21934:6;21929:3;21925:16;21921:27;21918:69;21915:82;;;21990:5;;;;;;21417:671;:::o;21915:82::-;22006:57;22057:4;22048:6;22040;22036:19;22032:30;22026:4;22006:57;:::i;:::-;-1:-1:-1;22079:3:1;;21417:671;-1:-1:-1;;;;;21417:671:1:o;22514:404::-;22716:2;22698:21;;;22755:2;22735:18;;;22728:30;22794:34;22789:2;22774:18;;22767:62;-1:-1:-1;;;22860:2:1;22845:18;;22838:38;22908:3;22893:19;;22514:404::o;22923:561::-;-1:-1:-1;;;;;23220:15:1;;;23202:34;;23272:15;;23267:2;23252:18;;23245:43;23319:2;23304:18;;23297:34;;;23362:2;23347:18;;23340:34;;;23182:3;23405;23390:19;;23383:32;;;23145:4;;23432:46;;23458:19;;23450:6;23432:46;:::i;:::-;23424:54;22923:561;-1:-1:-1;;;;;;;22923:561:1:o
Swarm Source
ipfs://a046a0cde33c8813ff2241a88d77d18d6e32a548b9139b3bcaff6d823871a94d
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.