ERC-721
Overview
Max Total Supply
1,271 NWD
Holders
220
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 NWDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTWordle
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-30 */ /** *Submitted for verification at Etherscan.io on 2021-04-22 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT 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 GSN 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 payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } // File: @openzeppelin/contracts/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ /*function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); }*/ /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ /*function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); }*/ /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ /*function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); }*/ } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; //using EnumerableSet for EnumerableSet.UintSet; //using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens //mapping (address => EnumerableSet.UintSet) private _holderTokens; // Enumerable mapping from token ids to their owners //EnumerableMap.UintToAddressMap private _tokenOwners; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; mapping (address => uint256) private tokenBalance; mapping (uint256 => address) private tokenOwner; mapping (uint256 => bool) private tokenExists; uint256 public tokensMinted = 0; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs //mapping (uint256 => string) private _tokenURIs; // Base URI string private _baseURI = "QmRXCkcUALpkZ7ympEfqyihcmHkpjqTvsuWCPqu4zLYy2H"; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); //return _holderTokens[owner].length(); return tokenBalance[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { //return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); require(tokenId > 0, "ERC721: owner query for nonexistent token"); return tokenOwner[tokenId]; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); //string memory _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. /*if (bytes(base).length == 0) { return _tokenURI; }*/ // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). /*if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); }*/ // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked("ipfs://", base, "/", tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ /*function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); }*/ /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds //return _tokenOwners.length(); //return tokenBalance[]; return tokensMinted; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ /*function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; }*/ /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { //return _tokenOwners.contains(tokenId); return tokenExists[tokenId]; } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: d* * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); //_holderTokens[to].add(tokenId); tokenOwner[tokenId] = to; tokenExists[tokenId] = true; //_tokenOwners.set(tokenId, to); tokenBalance[to] = tokenBalance[to] + 1; tokensMinted = tokensMinted + 1; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); tokenBalance[from]--; tokenOwner[tokenId] = to; tokenBalance[to]++; emit Transfer(from, to, tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ /*function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; }*/ /** * @dev Internal function to set the base URI for all token IDs. It is * automatically added as a prefix to the value returned in {tokenURI}, * or to the token ID if {tokenURI} is empty. */ function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } // File: @openzeppelin/contracts/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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ /*function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); }*/ /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ /*function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; }*/ } pragma solidity ^0.8.0; abstract contract wordleGame is Ownable, ERC721 { struct GameDayStruct { uint256 pot; } struct WithdrawStruct { bool nft; bool winnings; } struct GamerStruct { uint roundsRemaining; uint lastWithdrawDay; } mapping (address => GamerStruct) public gamers; //mapping (uint256 => mapping (address => bool)) public withdrawn; //mapping (uint256 => mapping (address => bool)) public allNFTwithdrawn; mapping (uint256 => mapping (address => WithdrawStruct)) public withdrawn; mapping (uint256 => GameDayStruct) public gameDay; mapping (uint256 => uint256[]) public previousHash; uint256[] public weights; mapping (uint256 => mapping (uint => mapping (address => uint))) public winner; mapping (uint256 => mapping (uint256 => uint256)) public winners; mapping (uint256 => mapping (uint256 => uint256)) public roundWinners; mapping (uint256 => mapping (address => bool)) public firstTry; mapping (uint256 => mapping (uint256 => mapping (address => bool))) public recorded; mapping (uint256 => mapping (uint256 => mapping (address => uint256))) public myWins; mapping (uint256 => uint256) winnersOfDay; mapping (uint256 => uint256) roundsOfDay; uint256 public roundCount = 0; uint256 public currentRound = 0; uint256 public currentDay = 0; bool public gameStarted = false; uint256 public constant singleRoundPrice = 10000000000000000; //0.01 ETH //uint256 public constant fullDayPrice = 180000000000000000; //0.14 ETH uint256 public MAX_NWD; function newRound(uint32[] memory prevHash, bool resetDay) public onlyOwner { if (!gameStarted) { gameStarted = true; } if (resetDay) { currentRound = 0; previousHash[currentDay] = prevHash; currentDay = currentDay + 1; } currentRound = currentRound + 1; roundsOfDay[currentDay] = roundsOfDay[currentDay] + 1; } function changeWeights(uint256[] memory newWeights) public onlyOwner { require(newWeights.length == 5, "E30"); weights = newWeights; } function remaining(address checkAddress) public view returns (uint remRounds) { if (gamers[checkAddress].roundsRemaining >= 1) { return gamers[checkAddress].roundsRemaining; } else { return 0; } } function buyRounds() public payable { require(msg.value >= singleRoundPrice, "E01"); if (msg.value >= (singleRoundPrice * 24)) { gamers[msg.sender].roundsRemaining = gamers[msg.sender].roundsRemaining + 24; //if (firstTry[currentDay][msg.sender]) { // gameDay[currentDay].pot = gameDay[currentDay].pot + (singleRoundPrice * 24); //} } else if (msg.value >= singleRoundPrice) { gamers[msg.sender].roundsRemaining = gamers[msg.sender].roundsRemaining + 1; //if (firstTry[currentDay][msg.sender]) { // gameDay[currentDay].pot = gameDay[currentDay].pot + singleRoundPrice; //} } } function buyAndRecordWin(uint32 guessHash2) public payable { uint256 guessHash = guessHash2; require(gameStarted, "E90"); require(msg.value >= singleRoundPrice, "E01"); gamers[msg.sender].roundsRemaining = gamers[msg.sender].roundsRemaining + 1; require(!recorded[currentDay][currentRound][msg.sender], "E91"); winner[guessHash][currentDay][msg.sender] = winner[guessHash][currentDay][msg.sender] + 1; winners[guessHash][currentDay] = winners[guessHash][currentDay] + 1; roundWinners[currentDay][currentRound] = roundWinners[currentDay][currentRound] + 1; winnersOfDay[currentDay] = winnersOfDay[currentDay] + 1; gamers[msg.sender].roundsRemaining = gamers[msg.sender].roundsRemaining - 1; recorded[currentDay][currentRound][msg.sender] = true; gameDay[currentDay].pot = gameDay[currentDay].pot + singleRoundPrice; } function recordWin(uint32 guessHash2) public { uint256 guessHash = guessHash2; require(gameStarted, "E90"); require(gamers[msg.sender].roundsRemaining > 0, "E17"); require(!recorded[currentDay][currentRound][msg.sender], "E91"); winner[guessHash][currentDay][msg.sender] = winner[guessHash][currentDay][msg.sender] + 1; winners[guessHash][currentDay] = winners[guessHash][currentDay] + 1; roundWinners[currentDay][currentRound] = roundWinners[currentDay][currentRound] + 1; winnersOfDay[currentDay] = winnersOfDay[currentDay] + 1; gamers[msg.sender].roundsRemaining = gamers[msg.sender].roundsRemaining - 1; recorded[currentDay][currentRound][msg.sender] = true; gameDay[currentDay].pot = gameDay[currentDay].pot + singleRoundPrice; } function earnings(uint8 isNFT, address whothis) public view returns (uint256 myBalance) { require(gameStarted, "E90"); uint256 myAmount = 0; require(currentDay > 1, "E05"); uint256 tempDay = gamers[whothis].lastWithdrawDay + 1; uint256 totalWeight; for (uint256 counter = 0; counter < weights.length; counter++) { totalWeight = totalWeight + weights[counter]; } for (uint256 withdrawDay = tempDay; withdrawDay < currentDay; withdrawDay++) { if (isNFT == 1) { require(!withdrawn[withdrawDay][whothis].nft, "E06"); require(balanceOf(whothis) > 0, "E95"); uint256 tokenCount = balanceOf(whothis); require(tokenCount > 0, "E07"); uint256 supply = totalSupply(); myAmount = tokenCount * ((gameDay[withdrawDay].pot * 30) / 100) / supply; } else { //63% for (uint256 counter = 0; counter < previousHash[withdrawDay].length; counter++) { if ( winner[previousHash[withdrawDay][counter]][withdrawDay][whothis] > 0 && !withdrawn[withdrawDay][whothis].winnings ) { myAmount = myAmount + ( winner[previousHash[withdrawDay][counter]][withdrawDay][whothis] * ( weights[counter] * ((gameDay[withdrawDay].pot * 63) / 100) / totalWeight ) / winners[previousHash[withdrawDay][counter]][withdrawDay] ); } } } } return myAmount; } function withdrawEarnings(uint8 isNFT, address whothis) public returns (uint256 myBalance) { require(gameStarted, "E90"); require(whothis == msg.sender, "E97"); uint256 tempDay = gamers[msg.sender].lastWithdrawDay + 1; if (currentDay == tempDay) { return 0; } uint256 myAmount = earnings(isNFT, whothis); if (myAmount <= 0) { return 0; } for (uint256 withdrawDay = tempDay; withdrawDay < currentDay; withdrawDay++) { if (isNFT == 1) { withdrawn[withdrawDay][msg.sender].nft = true; } else { withdrawn[withdrawDay][msg.sender].winnings = true; } } gamers[msg.sender].lastWithdrawDay = currentDay - 1; payable(msg.sender).transfer(myAmount); return myAmount; } } pragma solidity ^0.8.0; /* * @title NFTWordle contract */ contract NFTWordle is wordleGame { uint256 public NWDPrice = 50000000000000000; //0.05 ETH //uint256 public constant NWDWhitelistPrice = 25000000000000000; //0.03 ETH uint256 public constant maxNWDPurchase = 10; uint256 public constant maxWLPurchase = 2; bool public saleIsActive = false; bool public wlState = false; bool public ogState = false; bool public noOGState = false; uint256 public mintContrib; struct OgStruct { uint8 ogs; uint8 wls; } uint16 public freeMints = 0; mapping (address => OgStruct) public addies; uint256 lastGRWithdraw; constructor(string memory name, string memory symbol, uint256 maxNftSupply) ERC721(name, symbol) { MAX_NWD = maxNftSupply; weights = [10, 8, 4, 2, 1]; } function gameWallet() public view returns (uint256 balance) { //uint256 balance = address(this).balance; uint256 tempDay = lastGRWithdraw + 1; if (currentDay == tempDay) { return 0; } uint256 totalAmount; for (uint256 withdrawDay = tempDay; withdrawDay < currentDay; withdrawDay++) { totalAmount = totalAmount + (gameDay[withdrawDay].pot * 7) / 100; } return totalAmount; } function potBalance(uint startingFrom) public view onlyOwner returns (uint256 balance) { uint256 totalAmount; for (uint256 withdrawDay = startingFrom; withdrawDay < currentDay; withdrawDay++) { totalAmount = totalAmount + gameDay[withdrawDay].pot; } return totalAmount; } function withdraw(uint256 amount) public onlyOwner { payable(msg.sender).transfer(amount); } function withdrawMintContrib() public onlyOwner { payable(msg.sender).transfer(mintContrib); } function updateMintPrice(uint256 newPrice) public onlyOwner { NWDPrice = newPrice; } /** * Set some NWD aside */ function reserveNWD() public onlyOwner { uint256 supply = totalSupply(); uint256 i; for (i = 1; i < 10; i++) { _safeMint(msg.sender, supply + i); } } function setBaseURI(string memory baseURI) public onlyOwner { _setBaseURI(baseURI); } /* * Pause sale if active, make active if paused */ function flipState(uint8 sale) public onlyOwner { if (sale == 1) { saleIsActive = !saleIsActive; if (saleIsActive) { wlState = false; } } if (sale == 2) { wlState = !wlState; } if (sale == 3) { ogState = !ogState; } if (sale == 4) { noOGState = !noOGState; } } function addAddresses(bool isOg, address[] memory addressList) public onlyOwner { for (uint i = 0; i < addressList.length; i++) { if (isOg) { addies[addressList[i]].ogs = 1; addies[addressList[i]].wls = 1; } else { addies[addressList[i]].wls = 1; } } } /** * Mint free for OG */ function freeMint() public { uint256 supply = totalSupply(); require(ogState, "E20"); require(addies[msg.sender].ogs == 1, "E21"); require(addies[msg.sender].ogs != 2, "E55"); require(supply < MAX_NWD, "E23"); addies[msg.sender].ogs = 2; freeMints = freeMints + 1; _safeMint(msg.sender, supply + 1); } /** * Mints NWD */ function mintNWD(uint8 numberOfTokens) public payable { uint256 delta = 0; if (!noOGState) { delta = 500 - freeMints; } uint256 supply = totalSupply(); require(numberOfTokens <= maxNWDPurchase, "E11"); require((supply + numberOfTokens) <= (MAX_NWD - delta), "E12"); if (addies[msg.sender].wls > 0 && addies[msg.sender].wls < (maxWLPurchase + 1)) { require(wlState, "E30"); require(numberOfTokens <= (maxWLPurchase - (addies[msg.sender].wls - 1)), "E13"); //require(NWDWhitelistPrice * numberOfTokens <= msg.value, "E14"); require(NWDPrice * numberOfTokens <= msg.value, "E15"); addies[msg.sender].wls = addies[msg.sender].wls + numberOfTokens; } else { require(saleIsActive, "E10"); require(NWDPrice * numberOfTokens <= msg.value, "E15"); } mintContrib = mintContrib + (NWDPrice * numberOfTokens); for(uint256 i = 1; i <= numberOfTokens; i++) { if (supply < (MAX_NWD - delta)) { _safeMint(msg.sender, supply + i); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NWD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NWDPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isOg","type":"bool"},{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"addAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addies","outputs":[{"internalType":"uint8","name":"ogs","type":"uint8"},{"internalType":"uint8","name":"wls","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"guessHash2","type":"uint32"}],"name":"buyAndRecordWin","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyRounds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newWeights","type":"uint256[]"}],"name":"changeWeights","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"isNFT","type":"uint8"},{"internalType":"address","name":"whothis","type":"address"}],"name":"earnings","outputs":[{"internalType":"uint256","name":"myBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"firstTry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"sale","type":"uint8"}],"name":"flipState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeMints","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameDay","outputs":[{"internalType":"uint256","name":"pot","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameWallet","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gamers","outputs":[{"internalType":"uint256","name":"roundsRemaining","type":"uint256"},{"internalType":"uint256","name":"lastWithdrawDay","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNWDPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWLPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintContrib","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"mintNWD","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"myWins","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"prevHash","type":"uint32[]"},{"internalType":"bool","name":"resetDay","type":"bool"}],"name":"newRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"noOGState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startingFrom","type":"uint256"}],"name":"potBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"previousHash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"guessHash2","type":"uint32"}],"name":"recordWin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"recorded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"checkAddress","type":"address"}],"name":"remaining","outputs":[{"internalType":"uint256","name":"remRounds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveNWD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"roundWinners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"singleRoundPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updateMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"weights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"winner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"winners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"isNFT","type":"uint8"},{"internalType":"address","name":"whothis","type":"address"}],"name":"withdrawEarnings","outputs":[{"internalType":"uint256","name":"myBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMintContrib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"withdrawn","outputs":[{"internalType":"bool","name":"nft","type":"bool"},{"internalType":"bool","name":"winnings","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
600060075560e0604052602e608081815290620041a360a03980516200002e91600a9160209091019062000216565b50600060188190556019819055601a55601b805460ff1916905566b1a2bc2ec50000601d55601e805463ffffffff191690556020805461ffff191690553480156200007857600080fd5b50604051620041d1380380620041d18339810160408190526200009b91620003aa565b82826000620000a9620001b4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001056301ffc9a760e01b620001b8565b81516200011a90600890602085019062000216565b5080516200013090600990602084019062000216565b50620001436380ac58cd60e01b620001b8565b62000155635b5e139f60e01b620001b8565b6200016763780e9d6360e01b620001b8565b5050601c8190556040805160a081018252600a8152600860208201526004918101919091526002606082015260016080820152620001aa90600f906005620002a5565b50505050620004a4565b3390565b6001600160e01b03198082161415620001ee5760405162461bcd60e51b8152600401620001e5906200041a565b60405180910390fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054620002249062000451565b90600052602060002090601f01602090048101928262000248576000855562000293565b82601f106200026357805160ff191683800117855562000293565b8280016001018555821562000293579182015b828111156200029357825182559160200191906001019062000276565b50620002a1929150620002e8565b5090565b82805482825590600052602060002090810192821562000293579160200282015b8281111562000293578251829060ff16905591602001919060010190620002c6565b5b80821115620002a15760008155600101620002e9565b600082601f83011262000310578081fd5b81516001600160401b03808211156200032d576200032d6200048e565b6040516020601f8401601f19168201810183811183821017156200035557620003556200048e565b60405283825285840181018710156200036c578485fd5b8492505b838310156200038f578583018101518284018201529182019162000370565b83831115620003a057848185840101525b5095945050505050565b600080600060608486031215620003bf578283fd5b83516001600160401b0380821115620003d6578485fd5b620003e487838801620002ff565b94506020860151915080821115620003fa578384fd5b506200040986828701620002ff565b925050604084015190509250925092565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b6002810460018216806200046657607f821691505b602082108114156200048857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b613cef80620004b46000396000f3fe6080604052600436106103b75760003560e01c80636de9f32b116101f2578063a9845b3a1161010d578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c514610a63578063eb8d244414610a83578063f5b43ad714610a98578063f7a4f2e114610ab8576103b7565b8063c87b56dd146109f9578063c979bf4e14610a19578063db37faaf14610a39578063e1fff23714610a4e576103b7565b8063b88d4fde116100dc578063b88d4fde14610984578063c07ee411146109a4578063c2276352146109b9578063c3784ce8146109d9576103b7565b8063a9845b3a1461090f578063b399b0bc14610924578063b5f163ff14610944578063b8289d6114610964576103b7565b80638da5cb5b116101855780639949e393116101545780639949e3931461088c5780639d512dde146108a15780639e9a0c3e146108c1578063a22cb465146108ef576103b7565b80638da5cb5b1461083a57806395d89b411461084f578063980988411461086457806398a9a9211461086c576103b7565b8063807f54f6116101c1578063807f54f6146107d957806380b17335146107ee5780638a19c8bc146108105780638bd9150b14610825576103b7565b80636de9f32b146107645780636f9e3fce1461077957806370a08231146107995780637c5a23ca146107b9576103b7565b806339854884116102e25780635b70ea9f1161027557806360ee86221161024457806360ee8622146106fa5780636352211e1461071a578063641bfa6b1461073a5780636c0360eb1461074f576103b7565b80635b70ea9f146106a65780635c9302c9146106bb5780635cde6b7b146106d05780635e123ce4146106e5576103b7565b8063530ad07d116102b1578063530ad07d1461062357806355f804b314610643578063589f983e146106635780635a89167b14610691576103b7565b806339854884146105b05780633bda028c146105d057806342842e0e146105f057806351e83dfa14610610576103b7565b80630efc88651161035a5780631c7fa4c2116103295780631c7fa4c21461053b57806323b872dd146105505780632e1a7d4d1461057057806337b9228914610590576103b7565b80630efc8865146104c3578063127f0b3f146104e3578063141c56d0146104f857806318160ddd14610526576103b7565b806306fdde031161039657806306fdde0314610441578063078a5f5f14610463578063081812fc14610476578063095ea7b3146104a3576103b7565b8062728e46146103bc57806301ffc9a7146103de57806303e3cd6a14610414575b600080fd5b3480156103c857600080fd5b506103dc6103d736600461314d565b610acd565b005b3480156103ea57600080fd5b506103fe6103f93660046130cf565b610b1a565b60405161040b9190613313565b60405180910390f35b34801561042057600080fd5b5061043461042f366004613187565b610b3d565b60405161040b9190613a16565b34801561044d57600080fd5b50610456610b5a565b60405161040b9190613330565b6103dc6104713660046131dc565b610bed565b34801561048257600080fd5b5061049661049136600461314d565b610e3e565b60405161040b91906132c2565b3480156104af57600080fd5b506103dc6104be366004612ebe565b610e81565b3480156104cf57600080fd5b506104346104de366004613187565b610f19565b3480156104ef57600080fd5b50610434610f36565b34801561050457600080fd5b50610518610513366004612d95565b610f3c565b60405161040b929190613a1f565b34801561053257600080fd5b50610434610f55565b34801561054757600080fd5b50610434610f5b565b34801561055c57600080fd5b506103dc61056b366004612de1565b610f61565b34801561057c57600080fd5b506103dc61058b36600461314d565b610f99565b34801561059c57600080fd5b506103fe6105ab3660046131a8565b611009565b3480156105bc57600080fd5b506104346105cb36600461314d565b61102f565b3480156105dc57600080fd5b506104346105eb3660046131a8565b611041565b3480156105fc57600080fd5b506103dc61060b366004612de1565b611064565b6103dc61061e3660046131f6565b61107f565b34801561062f57600080fd5b506103dc61063e3660046131f6565b61131d565b34801561064f57600080fd5b506103dc61065e366004613107565b61140f565b34801561066f57600080fd5b5061068361067e366004612d95565b611457565b60405161040b929190613a2d565b34801561069d57600080fd5b506103fe611475565b3480156106b257600080fd5b506103dc611485565b3480156106c757600080fd5b50610434611592565b3480156106dc57600080fd5b506103fe611598565b3480156106f157600080fd5b506103fe6115a7565b34801561070657600080fd5b50610434610715366004613187565b6115b0565b34801561072657600080fd5b5061049661073536600461314d565b6115e1565b34801561074657600080fd5b506103fe61161e565b34801561075b57600080fd5b5061045661162c565b34801561077057600080fd5b5061043461163b565b34801561078557600080fd5b506103dc610794366004613025565b611641565b3480156107a557600080fd5b506104346107b4366004612d95565b6117e5565b3480156107c557600080fd5b506103dc6107d43660046131dc565b611829565b3480156107e557600080fd5b506104346118c6565b3480156107fa57600080fd5b506108036118cc565b60405161040b9190613a07565b34801561081c57600080fd5b506104346118d6565b34801561083157600080fd5b506104346118dc565b34801561084657600080fd5b506104966118e7565b34801561085b57600080fd5b506104566118f6565b6103dc611905565b34801561087857600080fd5b50610434610887366004613210565b6119b0565b34801561089857600080fd5b50610434611db7565b3480156108ad57600080fd5b506104346108bc366004613210565b611dbc565b3480156108cd57600080fd5b506108e16108dc366004613165565b611f32565b60405161040b92919061331e565b3480156108fb57600080fd5b506103dc61090a366004612e95565b611f5b565b34801561091b57600080fd5b506103dc612029565b34801561093057600080fd5b5061043461093f366004612d95565b6120a0565b34801561095057600080fd5b5061043461095f36600461314d565b6120e7565b34801561097057600080fd5b506103dc61097f366004612ee7565b612108565b34801561099057600080fd5b506103dc61099f366004612e1c565b61217b565b3480156109b057600080fd5b506104346121b4565b3480156109c557600080fd5b506103fe6109d4366004613165565b6121ba565b3480156109e557600080fd5b506104346109f43660046131a8565b6121da565b348015610a0557600080fd5b50610456610a1436600461314d565b6121fd565b348015610a2557600080fd5b50610434610a3436600461314d565b612262565b348015610a4557600080fd5b506104346122e5565b348015610a5a57600080fd5b506104346122ea565b348015610a6f57600080fd5b506103fe610a7e366004612daf565b61236c565b348015610a8f57600080fd5b506103fe61239a565b348015610aa457600080fd5b506103dc610ab3366004612f7c565b6123a3565b348015610ac457600080fd5b506103dc61247d565b610ad56124ea565b6001600160a01b0316610ae66118e7565b6001600160a01b031614610b155760405162461bcd60e51b8152600401610b0c906137c3565b60405180910390fd5b601d55565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b601260209081526000928352604080842090915290825290205481565b606060088054610b6990613bc5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9590613bc5565b8015610be25780601f10610bb757610100808354040283529160200191610be2565b820191906000526020600020905b815481529060010190602001808311610bc557829003601f168201915b505050505090505b90565b601b5463ffffffff82169060ff16610c175760405162461bcd60e51b8152600401610b0c906136b1565b662386f26fc10000341015610c3e5760405162461bcd60e51b8152600401610b0c90613343565b336000908152600b6020526040902054610c59906001613ab5565b336000818152600b6020908152604080832094909455601a548252601481528382206019548352815283822092825291909152205460ff1615610cae5760405162461bcd60e51b8152600401610b0c906136ce565b6000818152601060209081526040808320601a5484528252808320338452909152902054610cdd906001613ab5565b6000828152601060209081526040808320601a8054855290835281842033855283528184209490945584835260118252808320935483529290522054610d24906001613ab5565b6000828152601160209081526040808320601a80548552908352818420949094559254825260128152828220601954835290522054610d64906001613ab5565b601a8054600090815260126020908152604080832060195484528252808320949094559154815260169091522054610d9d906001613ab5565b601a54600090815260166020908152604080832093909355338252600b90522054610dca90600190613b48565b336000818152600b6020908152604080832094909455601a805483526014825284832060195484528252848320938352928152838220805460ff1916600117905591548152600d9091522054610e2890662386f26fc1000090613ab5565b601a546000908152600d60205260409020555050565b6000610e49826124ee565b610e655760405162461bcd60e51b8152600401610b0c9061375a565b506000908152600260205260409020546001600160a01b031690565b6000610e8c826115e1565b9050806001600160a01b0316836001600160a01b03161415610ec05760405162461bcd60e51b8152600401610b0c906138ad565b806001600160a01b0316610ed26124ea565b6001600160a01b03161480610eee5750610eee81610a7e6124ea565b610f0a5760405162461bcd60e51b8152600401610b0c906135c1565b610f148383612503565b505050565b601160209081526000928352604080842090915290825290205481565b60185481565b600b602052600090815260409020805460019091015482565b60075490565b601d5481565b610f72610f6c6124ea565b82612571565b610f8e5760405162461bcd60e51b8152600401610b0c90613945565b610f148383836125f6565b610fa16124ea565b6001600160a01b0316610fb26118e7565b6001600160a01b031614610fd85760405162461bcd60e51b8152600401610b0c906137c3565b604051339082156108fc029083906000818181858888f19350505050158015611005573d6000803e3d6000fd5b5050565b601460209081526000938452604080852082529284528284209052825290205460ff1681565b600d6020526000908152604090205481565b601060209081526000938452604080852082529284528284209052825290205481565b610f148383836040518060200160405280600081525061217b565b601e546000906301000000900460ff166110ad576020546110a69061ffff166101f4613b25565b61ffff1690505b60006110b7610f55565b9050600a8360ff1611156110dd5760405162461bcd60e51b8152600401610b0c90613720565b81601c546110eb9190613b48565b6110f860ff851683613ab5565b11156111165760405162461bcd60e51b8152600401610b0c906139ea565b33600090815260216020526040902054610100900460ff161580159061115d575061114360026001613ab5565b33600090815260216020526040902054610100900460ff16105b1561125d57601e54610100900460ff166111895760405162461bcd60e51b8152600401610b0c906133cf565b336000908152602160205260409020546111ad90600190610100900460ff16613b5f565b6111bb9060ff166002613b48565b8360ff1611156111dd5760405162461bcd60e51b8152600401610b0c9061373d565b348360ff16601d546111ef9190613b06565b111561120d5760405162461bcd60e51b8152600401610b0c90613890565b33600090815260216020526040902054611230908490610100900460ff16613acd565b336000908152602160205260409020805460ff929092166101000261ff00199092169190911790556112af565b601e5460ff1661127f5760405162461bcd60e51b8152600401610b0c906135a4565b348360ff16601d546112919190613b06565b11156112af5760405162461bcd60e51b8152600401610b0c90613890565b8260ff16601d546112c09190613b06565b601f546112cd9190613ab5565b601f5560015b8360ff1681116113175782601c546112eb9190613b48565b82101561130557611305336113008385613ab5565b612721565b8061130f81613c00565b9150506112d3565b50505050565b6113256124ea565b6001600160a01b03166113366118e7565b6001600160a01b03161461135c5760405162461bcd60e51b8152600401610b0c906137c3565b8060ff166001141561138e57601e805460ff19811660ff918216151791829055161561138e57601e805461ff00191690555b8060ff16600214156113b657601e805461ff001981166101009182900460ff16159091021790555b8060ff16600314156113e057601e805462ff0000198116620100009182900460ff16159091021790555b8060ff166004141561140c57601e805463ff00000019811663010000009182900460ff16159091021790555b50565b6114176124ea565b6001600160a01b03166114286118e7565b6001600160a01b03161461144e5760405162461bcd60e51b8152600401610b0c906137c3565b61140c8161273b565b60216020526000908152604090205460ff8082169161010090041682565b601e546301000000900460ff1681565b600061148f610f55565b601e5490915062010000900460ff166114ba5760405162461bcd60e51b8152600401610b0c906139cd565b3360009081526021602052604090205460ff166001146114ec5760405162461bcd60e51b8152600401610b0c906138ee565b3360009081526021602052604090205460ff166002141561151f5760405162461bcd60e51b8152600401610b0c906137a6565b601c5481106115405760405162461bcd60e51b8152600401610b0c9061390b565b336000908152602160209081526040909120805460ff191660021790555461156d9061ffff166001613a8f565b6020805461ffff191661ffff9290921691909117905561140c33611300836001613ab5565b601a5481565b601e5462010000900460ff1681565b601b5460ff1681565b600e60205281600052604060002081815481106115cc57600080fd5b90600052602060002001600091509150505481565b60008082116116025760405162461bcd60e51b8152600401610b0c90613668565b506000908152600560205260409020546001600160a01b031690565b601e54610100900460ff1681565b6060600a8054610b6990613bc5565b60075481565b6116496124ea565b6001600160a01b031661165a6118e7565b6001600160a01b0316146116805760405162461bcd60e51b8152600401610b0c906137c3565b60005b8151811015610f14578215611769576001602160008484815181106116b857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555060016021600084848151811061172157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506117d3565b60016021600084848151811061178f57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b806117dd81613c00565b915050611683565b60006001600160a01b03821661180d5760405162461bcd60e51b8152600401610b0c9061361e565b506001600160a01b031660009081526004602052604090205490565b601b5463ffffffff82169060ff166118535760405162461bcd60e51b8152600401610b0c906136b1565b336000908152600b602052604090205461187f5760405162461bcd60e51b8152600401610b0c90613587565b601a5460009081526014602090815260408083206019548452825280832033845290915290205460ff1615610cae5760405162461bcd60e51b8152600401610b0c906136ce565b601f5481565b60205461ffff1681565b60195481565b662386f26fc1000081565b6000546001600160a01b031690565b606060098054610b6990613bc5565b662386f26fc1000034101561192c5760405162461bcd60e51b8152600401610b0c90613343565b61193e662386f26fc100006018613b06565b341061197457336000908152600b602052604090205461195f906018613ab5565b336000908152600b60205260409020556119ae565b662386f26fc1000034106119ae57336000908152600b602052604090205461199d906001613ab5565b336000908152600b60205260409020555b565b601b5460009060ff166119d55760405162461bcd60e51b8152600401610b0c906136b1565b60006001601a54116119f95760405162461bcd60e51b8152600401610b0c90613423565b6001600160a01b0383166000908152600b60205260408120600190810154611a2091613ab5565b90506000805b600f54811015611a7b57600f8181548110611a5157634e487b7160e01b600052603260045260246000fd5b906000526020600020015482611a679190613ab5565b915080611a7381613c00565b915050611a26565b50815b601a54811015611daa578660ff1660011415611b7f576000818152600c602090815260408083206001600160a01b038a16845290915290205460ff1615611ad75760405162461bcd60e51b8152600401610b0c90613360565b6000611ae2876117e5565b11611aff5760405162461bcd60e51b8152600401610b0c90613928565b6000611b0a876117e5565b905060008111611b2c5760405162461bcd60e51b8152600401610b0c906134d8565b6000611b36610f55565b6000848152600d60205260409020549091508190606490611b5890601e613b06565b611b629190613af2565b611b6c9084613b06565b611b769190613af2565b95505050611d98565b60005b6000828152600e6020526040902054811015611d96576000828152600e602052604081208054601091839185908110611bcb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548352828101939093526040918201812086825283528181206001600160a01b038c168252909252902054118015611c3857506000828152600c602090815260408083206001600160a01b038b168452909152902054610100900460ff16155b15611d84576000828152600e602052604081208054601192919084908110611c7057634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015483528281019390935260409182018120858252835281812054600d90935220548490606490611cae90603f613b06565b611cb89190613af2565b600f8481548110611cd957634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611cee9190613b06565b611cf89190613af2565b6000848152600e602052604081208054601092919086908110611d2b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548352828101939093526040918201812087825283528181206001600160a01b038d168252909252902054611d6d9190613b06565b611d779190613af2565b611d819086613ab5565b94505b80611d8e81613c00565b915050611b82565b505b80611da281613c00565b915050611a7e565b5091925050505b92915050565b600a81565b601b5460009060ff16611de15760405162461bcd60e51b8152600401610b0c906136b1565b6001600160a01b0382163314611e095760405162461bcd60e51b8152600401610b0c906134bb565b336000908152600b60205260408120600190810154611e2791613ab5565b905080601a541415611e3d576000915050611db1565b6000611e4985856119b0565b905060008111611e5e57600092505050611db1565b815b601a54811015611ed8578560ff1660011415611e9f576000818152600c602090815260408083203384529091529020805460ff19166001179055611ec6565b6000818152600c602090815260408083203384529091529020805461ff0019166101001790555b80611ed081613c00565b915050611e60565b506001601a54611ee89190613b48565b336000818152600b6020526040808220600101939093559151909183156108fc02918491818181858888f19350505050158015611f29573d6000803e3d6000fd5b50949350505050565b600c60209081526000928352604080842090915290825290205460ff8082169161010090041682565b611f636124ea565b6001600160a01b0316826001600160a01b03161415611f945760405162461bcd60e51b8152600401610b0c90613484565b8060036000611fa16124ea565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611fe56124ea565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161201d9190613313565b60405180910390a35050565b6120316124ea565b6001600160a01b03166120426118e7565b6001600160a01b0316146120685760405162461bcd60e51b8152600401610b0c906137c3565b6000612072610f55565b905060015b600a8110156110055761208e336113008385613ab5565b8061209881613c00565b915050612077565b6001600160a01b0381166000908152600b60205260408120546001116120df57506001600160a01b0381166000908152600b6020526040902054610b38565b506000610b38565b600f81815481106120f757600080fd5b600091825260209091200154905081565b6121106124ea565b6001600160a01b03166121216118e7565b6001600160a01b0316146121475760405162461bcd60e51b8152600401610b0c906137c3565b80516005146121685760405162461bcd60e51b8152600401610b0c906133cf565b805161100590600f906020840190612bdb565b61218c6121866124ea565b83612571565b6121a85760405162461bcd60e51b8152600401610b0c90613945565b6113178484848461274e565b601c5481565b601360209081526000928352604080842090915290825290205460ff1681565b601560209081526000938452604080852082529284528284209052825290205481565b6060612208826124ee565b6122245760405162461bcd60e51b8152600401610b0c90613841565b600061222e61162c565b90508061223a84612781565b60405160200161224b929190613273565b604051602081830303815290604052915050919050565b600061226c6124ea565b6001600160a01b031661227d6118e7565b6001600160a01b0316146122a35760405162461bcd60e51b8152600401610b0c906137c3565b6000825b601a548110156122de576000818152600d60205260409020546122ca9083613ab5565b9150806122d681613c00565b9150506122a7565b5092915050565b600281565b60008060225460016122fc9190613ab5565b905080601a541415612312576000915050610bea565b6000815b601a54811015612365576000818152600d602052604090205460649061233d906007613b06565b6123479190613af2565b6123519083613ab5565b91508061235d81613c00565b915050612316565b5091505090565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b601e5460ff1681565b6123ab6124ea565b6001600160a01b03166123bc6118e7565b6001600160a01b0316146123e25760405162461bcd60e51b8152600401610b0c906137c3565b601b5460ff166123fa57601b805460ff191660011790555b80156124395760006019819055601a548152600e60209081526040909120835161242692850190612c26565b50601a54612435906001613ab5565b601a555b601954612447906001613ab5565b601955601a54600090815260176020526040902054612467906001613ab5565b601a546000908152601760205260409020555050565b6124856124ea565b6001600160a01b03166124966118e7565b6001600160a01b0316146124bc5760405162461bcd60e51b8152600401610b0c906137c3565b601f54604051339180156108fc02916000818181858888f1935050505015801561140c573d6000803e3d6000fd5b3390565b60009081526006602052604090205460ff1690565b600081815260026020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612538826115e1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061257c826124ee565b6125985760405162461bcd60e51b8152600401610b0c9061353b565b60006125a3836115e1565b9050806001600160a01b0316846001600160a01b031614806125de5750836001600160a01b03166125d384610e3e565b6001600160a01b0316145b806125ee57506125ee818561236c565b949350505050565b826001600160a01b0316612609826115e1565b6001600160a01b03161461262f5760405162461bcd60e51b8152600401610b0c906137f8565b6001600160a01b0382166126555760405162461bcd60e51b8152600401610b0c90613440565b612660838383610f14565b61266b600082612503565b6001600160a01b038316600090815260046020526040812080549161268f83613bae565b9091555050600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600490915281208054916126d683613c00565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61100582826040518060200160405280600081525061289c565b805161100590600a906020840190612c69565b6127598484846125f6565b612765848484846128cf565b6113175760405162461bcd60e51b8152600401610b0c9061337d565b6060816127a657506040805180820190915260018152600360fc1b6020820152610b38565b8160005b81156127d057806127ba81613c00565b91506127c99050600a83613af2565b91506127aa565b60008167ffffffffffffffff8111156127f957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612823576020820181803683370190505b5090505b84156125ee57612838600183613b48565b9150612845600a86613c1b565b612850906030613ab5565b60f81b81838151811061287357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612895600a86613af2565b9450612827565b6128a683836129ae565b6128b360008484846128cf565b610f145760405162461bcd60e51b8152600401610b0c9061337d565b60006128e3846001600160a01b0316612ac3565b6128ef575060016125ee565b6000612977630a85bd0160e11b6129046124ea565b88878760405160240161291a94939291906132d6565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001613c88603291396001600160a01b0388169190612ac9565b905060008180602001905181019061298f91906130eb565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b6001600160a01b0382166129d45760405162461bcd60e51b8152600401610b0c906136eb565b6129dd816124ee565b156129fa5760405162461bcd60e51b8152600401610b0c906133ec565b612a0660008383610f14565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915560068352818420805460ff19166001908117909155908452600490925290912054612a5d91613ab5565b6001600160a01b038316600090815260046020526040902055600754612a84906001613ab5565b60075560405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b6060612ad88484600085612ae2565b90505b9392505050565b606082471015612b045760405162461bcd60e51b8152600401610b0c906134f5565b612b0d85612ac3565b612b295760405162461bcd60e51b8152600401610b0c90613996565b600080866001600160a01b03168587604051612b459190613257565b60006040518083038185875af1925050503d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b5091509150612b97828286612ba2565b979650505050505050565b60608315612bb1575081612adb565b825115612bc15782518084602001fd5b8160405162461bcd60e51b8152600401610b0c9190613330565b828054828255906000526020600020908101928215612c16579160200282015b82811115612c16578251825591602001919060010190612bfb565b50612c22929150612cdc565b5090565b828054828255906000526020600020908101928215612c16579160200282015b82811115612c16578251829063ffffffff16905591602001919060010190612c46565b828054612c7590613bc5565b90600052602060002090601f016020900481019282612c975760008555612c16565b82601f10612cb057805160ff1916838001178555612c16565b82800160010185558215612c165791820182811115612c16578251825591602001919060010190612bfb565b5b80821115612c225760008155600101612cdd565b600067ffffffffffffffff831115612d0b57612d0b613c5b565b612d1e601f8401601f1916602001613a41565b9050828152838383011115612d3257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114610b3857600080fd5b80358015158114610b3857600080fd5b803563ffffffff81168114610b3857600080fd5b803560ff81168114610b3857600080fd5b600060208284031215612da6578081fd5b612adb82612d49565b60008060408385031215612dc1578081fd5b612dca83612d49565b9150612dd860208401612d49565b90509250929050565b600080600060608486031215612df5578081fd5b612dfe84612d49565b9250612e0c60208501612d49565b9150604084013590509250925092565b60008060008060808587031215612e31578081fd5b612e3a85612d49565b9350612e4860208601612d49565b925060408501359150606085013567ffffffffffffffff811115612e6a578182fd5b8501601f81018713612e7a578182fd5b612e8987823560208401612cf1565b91505092959194509250565b60008060408385031215612ea7578182fd5b612eb083612d49565b9150612dd860208401612d60565b60008060408385031215612ed0578182fd5b612ed983612d49565b946020939093013593505050565b60006020808385031215612ef9578182fd5b823567ffffffffffffffff811115612f0f578283fd5b8301601f81018513612f1f578283fd5b8035612f32612f2d82613a6b565b613a41565b8181528381019083850185840285018601891015612f4e578687fd5b8694505b83851015612f70578035835260019490940193918501918501612f52565b50979650505050505050565b60008060408385031215612f8e578182fd5b823567ffffffffffffffff811115612fa4578283fd5b8301601f81018513612fb4578283fd5b80356020612fc4612f2d83613a6b565b82815281810190848301838502860184018a1015612fe0578788fd5b8795505b8486101561300957612ff581612d70565b835260019590950194918301918301612fe4565b5095506130199050868201612d60565b93505050509250929050565b60008060408385031215613037578182fd5b61304083612d60565b915060208084013567ffffffffffffffff81111561305c578283fd5b8401601f8101861361306c578283fd5b803561307a612f2d82613a6b565b81815283810190838501858402850186018a1015613096578687fd5b8694505b838510156130bf576130ab81612d49565b83526001949094019391850191850161309a565b5080955050505050509250929050565b6000602082840312156130e0578081fd5b8135612adb81613c71565b6000602082840312156130fc578081fd5b8151612adb81613c71565b600060208284031215613118578081fd5b813567ffffffffffffffff81111561312e578182fd5b8201601f8101841361313e578182fd5b6125ee84823560208401612cf1565b60006020828403121561315e578081fd5b5035919050565b60008060408385031215613177578182fd5b82359150612dd860208401612d49565b60008060408385031215613199578182fd5b50508035926020909101359150565b6000806000606084860312156131bc578081fd5b83359250602084013591506131d360408501612d49565b90509250925092565b6000602082840312156131ed578081fd5b612adb82612d70565b600060208284031215613207578081fd5b612adb82612d84565b60008060408385031215613222578182fd5b612dca83612d84565b60008151808452613243816020860160208601613b82565b601f01601f19169290920160200192915050565b60008251613269818460208701613b82565b9190910192915050565b600066697066733a2f2f60c81b82528351613295816007850160208801613b82565b602f60f81b60079184019182015283516132b6816008840160208801613b82565b01600801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133099083018461322b565b9695505050505050565b901515815260200190565b91151582521515602082015260400190565b600060208252612adb602083018461322b565b60208082526003908201526245303160e81b604082015260600190565b60208082526003908201526222981b60e91b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526003908201526204533360ec1b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526003908201526245303560e81b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526003908201526245393760e81b604082015260600190565b60208082526003908201526245303760e81b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526003908201526245313760e81b604082015260600190565b60208082526003908201526204531360ec1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60208082526003908201526204539360ec1b604082015260600190565b60208082526003908201526245393160e81b604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526003908201526245313160e81b604082015260600190565b60208082526003908201526245313360e81b604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526003908201526245353560e81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526003908201526245313560e81b604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526003908201526245323160e81b604082015260600190565b60208082526003908201526245323360e81b604082015260600190565b60208082526003908201526245393560e81b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526003908201526204532360ec1b604082015260600190565b60208082526003908201526222989960e91b604082015260600190565b61ffff91909116815260200190565b90815260200190565b918252602082015260400190565b60ff92831681529116602082015260400190565b60405181810167ffffffffffffffff81118282101715613a6357613a63613c5b565b604052919050565b600067ffffffffffffffff821115613a8557613a85613c5b565b5060209081020190565b600061ffff808316818516808303821115613aac57613aac613c2f565b01949350505050565b60008219821115613ac857613ac8613c2f565b500190565b600060ff821660ff84168060ff03821115613aea57613aea613c2f565b019392505050565b600082613b0157613b01613c45565b500490565b6000816000190483118215151615613b2057613b20613c2f565b500290565b600061ffff83811690831681811015613b4057613b40613c2f565b039392505050565b600082821015613b5a57613b5a613c2f565b500390565b600060ff821660ff841680821015613b7957613b79613c2f565b90039392505050565b60005b83811015613b9d578181015183820152602001613b85565b838111156113175750506000910152565b600081613bbd57613bbd613c2f565b506000190190565b600281046001821680613bd957607f821691505b60208210811415613bfa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613c1457613c14613c2f565b5060010190565b600082613c2a57613c2a613c45565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461140c57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572a2646970667358221220312ea8609e9199b87627fc8537f66acf2becd28ef8f9f4a1cecec153875a41b664736f6c63430008000033516d5258436b6355414c706b5a37796d70456671796968636d486b706a71547673755743507175347a4c59793248000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000015b300000000000000000000000000000000000000000000000000000000000000094e4654576f72646c65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e57440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103b75760003560e01c80636de9f32b116101f2578063a9845b3a1161010d578063c87b56dd116100a0578063e985e9c51161006f578063e985e9c514610a63578063eb8d244414610a83578063f5b43ad714610a98578063f7a4f2e114610ab8576103b7565b8063c87b56dd146109f9578063c979bf4e14610a19578063db37faaf14610a39578063e1fff23714610a4e576103b7565b8063b88d4fde116100dc578063b88d4fde14610984578063c07ee411146109a4578063c2276352146109b9578063c3784ce8146109d9576103b7565b8063a9845b3a1461090f578063b399b0bc14610924578063b5f163ff14610944578063b8289d6114610964576103b7565b80638da5cb5b116101855780639949e393116101545780639949e3931461088c5780639d512dde146108a15780639e9a0c3e146108c1578063a22cb465146108ef576103b7565b80638da5cb5b1461083a57806395d89b411461084f578063980988411461086457806398a9a9211461086c576103b7565b8063807f54f6116101c1578063807f54f6146107d957806380b17335146107ee5780638a19c8bc146108105780638bd9150b14610825576103b7565b80636de9f32b146107645780636f9e3fce1461077957806370a08231146107995780637c5a23ca146107b9576103b7565b806339854884116102e25780635b70ea9f1161027557806360ee86221161024457806360ee8622146106fa5780636352211e1461071a578063641bfa6b1461073a5780636c0360eb1461074f576103b7565b80635b70ea9f146106a65780635c9302c9146106bb5780635cde6b7b146106d05780635e123ce4146106e5576103b7565b8063530ad07d116102b1578063530ad07d1461062357806355f804b314610643578063589f983e146106635780635a89167b14610691576103b7565b806339854884146105b05780633bda028c146105d057806342842e0e146105f057806351e83dfa14610610576103b7565b80630efc88651161035a5780631c7fa4c2116103295780631c7fa4c21461053b57806323b872dd146105505780632e1a7d4d1461057057806337b9228914610590576103b7565b80630efc8865146104c3578063127f0b3f146104e3578063141c56d0146104f857806318160ddd14610526576103b7565b806306fdde031161039657806306fdde0314610441578063078a5f5f14610463578063081812fc14610476578063095ea7b3146104a3576103b7565b8062728e46146103bc57806301ffc9a7146103de57806303e3cd6a14610414575b600080fd5b3480156103c857600080fd5b506103dc6103d736600461314d565b610acd565b005b3480156103ea57600080fd5b506103fe6103f93660046130cf565b610b1a565b60405161040b9190613313565b60405180910390f35b34801561042057600080fd5b5061043461042f366004613187565b610b3d565b60405161040b9190613a16565b34801561044d57600080fd5b50610456610b5a565b60405161040b9190613330565b6103dc6104713660046131dc565b610bed565b34801561048257600080fd5b5061049661049136600461314d565b610e3e565b60405161040b91906132c2565b3480156104af57600080fd5b506103dc6104be366004612ebe565b610e81565b3480156104cf57600080fd5b506104346104de366004613187565b610f19565b3480156104ef57600080fd5b50610434610f36565b34801561050457600080fd5b50610518610513366004612d95565b610f3c565b60405161040b929190613a1f565b34801561053257600080fd5b50610434610f55565b34801561054757600080fd5b50610434610f5b565b34801561055c57600080fd5b506103dc61056b366004612de1565b610f61565b34801561057c57600080fd5b506103dc61058b36600461314d565b610f99565b34801561059c57600080fd5b506103fe6105ab3660046131a8565b611009565b3480156105bc57600080fd5b506104346105cb36600461314d565b61102f565b3480156105dc57600080fd5b506104346105eb3660046131a8565b611041565b3480156105fc57600080fd5b506103dc61060b366004612de1565b611064565b6103dc61061e3660046131f6565b61107f565b34801561062f57600080fd5b506103dc61063e3660046131f6565b61131d565b34801561064f57600080fd5b506103dc61065e366004613107565b61140f565b34801561066f57600080fd5b5061068361067e366004612d95565b611457565b60405161040b929190613a2d565b34801561069d57600080fd5b506103fe611475565b3480156106b257600080fd5b506103dc611485565b3480156106c757600080fd5b50610434611592565b3480156106dc57600080fd5b506103fe611598565b3480156106f157600080fd5b506103fe6115a7565b34801561070657600080fd5b50610434610715366004613187565b6115b0565b34801561072657600080fd5b5061049661073536600461314d565b6115e1565b34801561074657600080fd5b506103fe61161e565b34801561075b57600080fd5b5061045661162c565b34801561077057600080fd5b5061043461163b565b34801561078557600080fd5b506103dc610794366004613025565b611641565b3480156107a557600080fd5b506104346107b4366004612d95565b6117e5565b3480156107c557600080fd5b506103dc6107d43660046131dc565b611829565b3480156107e557600080fd5b506104346118c6565b3480156107fa57600080fd5b506108036118cc565b60405161040b9190613a07565b34801561081c57600080fd5b506104346118d6565b34801561083157600080fd5b506104346118dc565b34801561084657600080fd5b506104966118e7565b34801561085b57600080fd5b506104566118f6565b6103dc611905565b34801561087857600080fd5b50610434610887366004613210565b6119b0565b34801561089857600080fd5b50610434611db7565b3480156108ad57600080fd5b506104346108bc366004613210565b611dbc565b3480156108cd57600080fd5b506108e16108dc366004613165565b611f32565b60405161040b92919061331e565b3480156108fb57600080fd5b506103dc61090a366004612e95565b611f5b565b34801561091b57600080fd5b506103dc612029565b34801561093057600080fd5b5061043461093f366004612d95565b6120a0565b34801561095057600080fd5b5061043461095f36600461314d565b6120e7565b34801561097057600080fd5b506103dc61097f366004612ee7565b612108565b34801561099057600080fd5b506103dc61099f366004612e1c565b61217b565b3480156109b057600080fd5b506104346121b4565b3480156109c557600080fd5b506103fe6109d4366004613165565b6121ba565b3480156109e557600080fd5b506104346109f43660046131a8565b6121da565b348015610a0557600080fd5b50610456610a1436600461314d565b6121fd565b348015610a2557600080fd5b50610434610a3436600461314d565b612262565b348015610a4557600080fd5b506104346122e5565b348015610a5a57600080fd5b506104346122ea565b348015610a6f57600080fd5b506103fe610a7e366004612daf565b61236c565b348015610a8f57600080fd5b506103fe61239a565b348015610aa457600080fd5b506103dc610ab3366004612f7c565b6123a3565b348015610ac457600080fd5b506103dc61247d565b610ad56124ea565b6001600160a01b0316610ae66118e7565b6001600160a01b031614610b155760405162461bcd60e51b8152600401610b0c906137c3565b60405180910390fd5b601d55565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b601260209081526000928352604080842090915290825290205481565b606060088054610b6990613bc5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9590613bc5565b8015610be25780601f10610bb757610100808354040283529160200191610be2565b820191906000526020600020905b815481529060010190602001808311610bc557829003601f168201915b505050505090505b90565b601b5463ffffffff82169060ff16610c175760405162461bcd60e51b8152600401610b0c906136b1565b662386f26fc10000341015610c3e5760405162461bcd60e51b8152600401610b0c90613343565b336000908152600b6020526040902054610c59906001613ab5565b336000818152600b6020908152604080832094909455601a548252601481528382206019548352815283822092825291909152205460ff1615610cae5760405162461bcd60e51b8152600401610b0c906136ce565b6000818152601060209081526040808320601a5484528252808320338452909152902054610cdd906001613ab5565b6000828152601060209081526040808320601a8054855290835281842033855283528184209490945584835260118252808320935483529290522054610d24906001613ab5565b6000828152601160209081526040808320601a80548552908352818420949094559254825260128152828220601954835290522054610d64906001613ab5565b601a8054600090815260126020908152604080832060195484528252808320949094559154815260169091522054610d9d906001613ab5565b601a54600090815260166020908152604080832093909355338252600b90522054610dca90600190613b48565b336000818152600b6020908152604080832094909455601a805483526014825284832060195484528252848320938352928152838220805460ff1916600117905591548152600d9091522054610e2890662386f26fc1000090613ab5565b601a546000908152600d60205260409020555050565b6000610e49826124ee565b610e655760405162461bcd60e51b8152600401610b0c9061375a565b506000908152600260205260409020546001600160a01b031690565b6000610e8c826115e1565b9050806001600160a01b0316836001600160a01b03161415610ec05760405162461bcd60e51b8152600401610b0c906138ad565b806001600160a01b0316610ed26124ea565b6001600160a01b03161480610eee5750610eee81610a7e6124ea565b610f0a5760405162461bcd60e51b8152600401610b0c906135c1565b610f148383612503565b505050565b601160209081526000928352604080842090915290825290205481565b60185481565b600b602052600090815260409020805460019091015482565b60075490565b601d5481565b610f72610f6c6124ea565b82612571565b610f8e5760405162461bcd60e51b8152600401610b0c90613945565b610f148383836125f6565b610fa16124ea565b6001600160a01b0316610fb26118e7565b6001600160a01b031614610fd85760405162461bcd60e51b8152600401610b0c906137c3565b604051339082156108fc029083906000818181858888f19350505050158015611005573d6000803e3d6000fd5b5050565b601460209081526000938452604080852082529284528284209052825290205460ff1681565b600d6020526000908152604090205481565b601060209081526000938452604080852082529284528284209052825290205481565b610f148383836040518060200160405280600081525061217b565b601e546000906301000000900460ff166110ad576020546110a69061ffff166101f4613b25565b61ffff1690505b60006110b7610f55565b9050600a8360ff1611156110dd5760405162461bcd60e51b8152600401610b0c90613720565b81601c546110eb9190613b48565b6110f860ff851683613ab5565b11156111165760405162461bcd60e51b8152600401610b0c906139ea565b33600090815260216020526040902054610100900460ff161580159061115d575061114360026001613ab5565b33600090815260216020526040902054610100900460ff16105b1561125d57601e54610100900460ff166111895760405162461bcd60e51b8152600401610b0c906133cf565b336000908152602160205260409020546111ad90600190610100900460ff16613b5f565b6111bb9060ff166002613b48565b8360ff1611156111dd5760405162461bcd60e51b8152600401610b0c9061373d565b348360ff16601d546111ef9190613b06565b111561120d5760405162461bcd60e51b8152600401610b0c90613890565b33600090815260216020526040902054611230908490610100900460ff16613acd565b336000908152602160205260409020805460ff929092166101000261ff00199092169190911790556112af565b601e5460ff1661127f5760405162461bcd60e51b8152600401610b0c906135a4565b348360ff16601d546112919190613b06565b11156112af5760405162461bcd60e51b8152600401610b0c90613890565b8260ff16601d546112c09190613b06565b601f546112cd9190613ab5565b601f5560015b8360ff1681116113175782601c546112eb9190613b48565b82101561130557611305336113008385613ab5565b612721565b8061130f81613c00565b9150506112d3565b50505050565b6113256124ea565b6001600160a01b03166113366118e7565b6001600160a01b03161461135c5760405162461bcd60e51b8152600401610b0c906137c3565b8060ff166001141561138e57601e805460ff19811660ff918216151791829055161561138e57601e805461ff00191690555b8060ff16600214156113b657601e805461ff001981166101009182900460ff16159091021790555b8060ff16600314156113e057601e805462ff0000198116620100009182900460ff16159091021790555b8060ff166004141561140c57601e805463ff00000019811663010000009182900460ff16159091021790555b50565b6114176124ea565b6001600160a01b03166114286118e7565b6001600160a01b03161461144e5760405162461bcd60e51b8152600401610b0c906137c3565b61140c8161273b565b60216020526000908152604090205460ff8082169161010090041682565b601e546301000000900460ff1681565b600061148f610f55565b601e5490915062010000900460ff166114ba5760405162461bcd60e51b8152600401610b0c906139cd565b3360009081526021602052604090205460ff166001146114ec5760405162461bcd60e51b8152600401610b0c906138ee565b3360009081526021602052604090205460ff166002141561151f5760405162461bcd60e51b8152600401610b0c906137a6565b601c5481106115405760405162461bcd60e51b8152600401610b0c9061390b565b336000908152602160209081526040909120805460ff191660021790555461156d9061ffff166001613a8f565b6020805461ffff191661ffff9290921691909117905561140c33611300836001613ab5565b601a5481565b601e5462010000900460ff1681565b601b5460ff1681565b600e60205281600052604060002081815481106115cc57600080fd5b90600052602060002001600091509150505481565b60008082116116025760405162461bcd60e51b8152600401610b0c90613668565b506000908152600560205260409020546001600160a01b031690565b601e54610100900460ff1681565b6060600a8054610b6990613bc5565b60075481565b6116496124ea565b6001600160a01b031661165a6118e7565b6001600160a01b0316146116805760405162461bcd60e51b8152600401610b0c906137c3565b60005b8151811015610f14578215611769576001602160008484815181106116b857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555060016021600084848151811061172157634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055506117d3565b60016021600084848151811061178f57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160016101000a81548160ff021916908360ff1602179055505b806117dd81613c00565b915050611683565b60006001600160a01b03821661180d5760405162461bcd60e51b8152600401610b0c9061361e565b506001600160a01b031660009081526004602052604090205490565b601b5463ffffffff82169060ff166118535760405162461bcd60e51b8152600401610b0c906136b1565b336000908152600b602052604090205461187f5760405162461bcd60e51b8152600401610b0c90613587565b601a5460009081526014602090815260408083206019548452825280832033845290915290205460ff1615610cae5760405162461bcd60e51b8152600401610b0c906136ce565b601f5481565b60205461ffff1681565b60195481565b662386f26fc1000081565b6000546001600160a01b031690565b606060098054610b6990613bc5565b662386f26fc1000034101561192c5760405162461bcd60e51b8152600401610b0c90613343565b61193e662386f26fc100006018613b06565b341061197457336000908152600b602052604090205461195f906018613ab5565b336000908152600b60205260409020556119ae565b662386f26fc1000034106119ae57336000908152600b602052604090205461199d906001613ab5565b336000908152600b60205260409020555b565b601b5460009060ff166119d55760405162461bcd60e51b8152600401610b0c906136b1565b60006001601a54116119f95760405162461bcd60e51b8152600401610b0c90613423565b6001600160a01b0383166000908152600b60205260408120600190810154611a2091613ab5565b90506000805b600f54811015611a7b57600f8181548110611a5157634e487b7160e01b600052603260045260246000fd5b906000526020600020015482611a679190613ab5565b915080611a7381613c00565b915050611a26565b50815b601a54811015611daa578660ff1660011415611b7f576000818152600c602090815260408083206001600160a01b038a16845290915290205460ff1615611ad75760405162461bcd60e51b8152600401610b0c90613360565b6000611ae2876117e5565b11611aff5760405162461bcd60e51b8152600401610b0c90613928565b6000611b0a876117e5565b905060008111611b2c5760405162461bcd60e51b8152600401610b0c906134d8565b6000611b36610f55565b6000848152600d60205260409020549091508190606490611b5890601e613b06565b611b629190613af2565b611b6c9084613b06565b611b769190613af2565b95505050611d98565b60005b6000828152600e6020526040902054811015611d96576000828152600e602052604081208054601091839185908110611bcb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548352828101939093526040918201812086825283528181206001600160a01b038c168252909252902054118015611c3857506000828152600c602090815260408083206001600160a01b038b168452909152902054610100900460ff16155b15611d84576000828152600e602052604081208054601192919084908110611c7057634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015483528281019390935260409182018120858252835281812054600d90935220548490606490611cae90603f613b06565b611cb89190613af2565b600f8481548110611cd957634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611cee9190613b06565b611cf89190613af2565b6000848152600e602052604081208054601092919086908110611d2b57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548352828101939093526040918201812087825283528181206001600160a01b038d168252909252902054611d6d9190613b06565b611d779190613af2565b611d819086613ab5565b94505b80611d8e81613c00565b915050611b82565b505b80611da281613c00565b915050611a7e565b5091925050505b92915050565b600a81565b601b5460009060ff16611de15760405162461bcd60e51b8152600401610b0c906136b1565b6001600160a01b0382163314611e095760405162461bcd60e51b8152600401610b0c906134bb565b336000908152600b60205260408120600190810154611e2791613ab5565b905080601a541415611e3d576000915050611db1565b6000611e4985856119b0565b905060008111611e5e57600092505050611db1565b815b601a54811015611ed8578560ff1660011415611e9f576000818152600c602090815260408083203384529091529020805460ff19166001179055611ec6565b6000818152600c602090815260408083203384529091529020805461ff0019166101001790555b80611ed081613c00565b915050611e60565b506001601a54611ee89190613b48565b336000818152600b6020526040808220600101939093559151909183156108fc02918491818181858888f19350505050158015611f29573d6000803e3d6000fd5b50949350505050565b600c60209081526000928352604080842090915290825290205460ff8082169161010090041682565b611f636124ea565b6001600160a01b0316826001600160a01b03161415611f945760405162461bcd60e51b8152600401610b0c90613484565b8060036000611fa16124ea565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611fe56124ea565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161201d9190613313565b60405180910390a35050565b6120316124ea565b6001600160a01b03166120426118e7565b6001600160a01b0316146120685760405162461bcd60e51b8152600401610b0c906137c3565b6000612072610f55565b905060015b600a8110156110055761208e336113008385613ab5565b8061209881613c00565b915050612077565b6001600160a01b0381166000908152600b60205260408120546001116120df57506001600160a01b0381166000908152600b6020526040902054610b38565b506000610b38565b600f81815481106120f757600080fd5b600091825260209091200154905081565b6121106124ea565b6001600160a01b03166121216118e7565b6001600160a01b0316146121475760405162461bcd60e51b8152600401610b0c906137c3565b80516005146121685760405162461bcd60e51b8152600401610b0c906133cf565b805161100590600f906020840190612bdb565b61218c6121866124ea565b83612571565b6121a85760405162461bcd60e51b8152600401610b0c90613945565b6113178484848461274e565b601c5481565b601360209081526000928352604080842090915290825290205460ff1681565b601560209081526000938452604080852082529284528284209052825290205481565b6060612208826124ee565b6122245760405162461bcd60e51b8152600401610b0c90613841565b600061222e61162c565b90508061223a84612781565b60405160200161224b929190613273565b604051602081830303815290604052915050919050565b600061226c6124ea565b6001600160a01b031661227d6118e7565b6001600160a01b0316146122a35760405162461bcd60e51b8152600401610b0c906137c3565b6000825b601a548110156122de576000818152600d60205260409020546122ca9083613ab5565b9150806122d681613c00565b9150506122a7565b5092915050565b600281565b60008060225460016122fc9190613ab5565b905080601a541415612312576000915050610bea565b6000815b601a54811015612365576000818152600d602052604090205460649061233d906007613b06565b6123479190613af2565b6123519083613ab5565b91508061235d81613c00565b915050612316565b5091505090565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b601e5460ff1681565b6123ab6124ea565b6001600160a01b03166123bc6118e7565b6001600160a01b0316146123e25760405162461bcd60e51b8152600401610b0c906137c3565b601b5460ff166123fa57601b805460ff191660011790555b80156124395760006019819055601a548152600e60209081526040909120835161242692850190612c26565b50601a54612435906001613ab5565b601a555b601954612447906001613ab5565b601955601a54600090815260176020526040902054612467906001613ab5565b601a546000908152601760205260409020555050565b6124856124ea565b6001600160a01b03166124966118e7565b6001600160a01b0316146124bc5760405162461bcd60e51b8152600401610b0c906137c3565b601f54604051339180156108fc02916000818181858888f1935050505015801561140c573d6000803e3d6000fd5b3390565b60009081526006602052604090205460ff1690565b600081815260026020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612538826115e1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061257c826124ee565b6125985760405162461bcd60e51b8152600401610b0c9061353b565b60006125a3836115e1565b9050806001600160a01b0316846001600160a01b031614806125de5750836001600160a01b03166125d384610e3e565b6001600160a01b0316145b806125ee57506125ee818561236c565b949350505050565b826001600160a01b0316612609826115e1565b6001600160a01b03161461262f5760405162461bcd60e51b8152600401610b0c906137f8565b6001600160a01b0382166126555760405162461bcd60e51b8152600401610b0c90613440565b612660838383610f14565b61266b600082612503565b6001600160a01b038316600090815260046020526040812080549161268f83613bae565b9091555050600081815260056020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600490915281208054916126d683613c00565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61100582826040518060200160405280600081525061289c565b805161100590600a906020840190612c69565b6127598484846125f6565b612765848484846128cf565b6113175760405162461bcd60e51b8152600401610b0c9061337d565b6060816127a657506040805180820190915260018152600360fc1b6020820152610b38565b8160005b81156127d057806127ba81613c00565b91506127c99050600a83613af2565b91506127aa565b60008167ffffffffffffffff8111156127f957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612823576020820181803683370190505b5090505b84156125ee57612838600183613b48565b9150612845600a86613c1b565b612850906030613ab5565b60f81b81838151811061287357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350612895600a86613af2565b9450612827565b6128a683836129ae565b6128b360008484846128cf565b610f145760405162461bcd60e51b8152600401610b0c9061337d565b60006128e3846001600160a01b0316612ac3565b6128ef575060016125ee565b6000612977630a85bd0160e11b6129046124ea565b88878760405160240161291a94939291906132d6565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001613c88603291396001600160a01b0388169190612ac9565b905060008180602001905181019061298f91906130eb565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b6001600160a01b0382166129d45760405162461bcd60e51b8152600401610b0c906136eb565b6129dd816124ee565b156129fa5760405162461bcd60e51b8152600401610b0c906133ec565b612a0660008383610f14565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915560068352818420805460ff19166001908117909155908452600490925290912054612a5d91613ab5565b6001600160a01b038316600090815260046020526040902055600754612a84906001613ab5565b60075560405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b6060612ad88484600085612ae2565b90505b9392505050565b606082471015612b045760405162461bcd60e51b8152600401610b0c906134f5565b612b0d85612ac3565b612b295760405162461bcd60e51b8152600401610b0c90613996565b600080866001600160a01b03168587604051612b459190613257565b60006040518083038185875af1925050503d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b5091509150612b97828286612ba2565b979650505050505050565b60608315612bb1575081612adb565b825115612bc15782518084602001fd5b8160405162461bcd60e51b8152600401610b0c9190613330565b828054828255906000526020600020908101928215612c16579160200282015b82811115612c16578251825591602001919060010190612bfb565b50612c22929150612cdc565b5090565b828054828255906000526020600020908101928215612c16579160200282015b82811115612c16578251829063ffffffff16905591602001919060010190612c46565b828054612c7590613bc5565b90600052602060002090601f016020900481019282612c975760008555612c16565b82601f10612cb057805160ff1916838001178555612c16565b82800160010185558215612c165791820182811115612c16578251825591602001919060010190612bfb565b5b80821115612c225760008155600101612cdd565b600067ffffffffffffffff831115612d0b57612d0b613c5b565b612d1e601f8401601f1916602001613a41565b9050828152838383011115612d3257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114610b3857600080fd5b80358015158114610b3857600080fd5b803563ffffffff81168114610b3857600080fd5b803560ff81168114610b3857600080fd5b600060208284031215612da6578081fd5b612adb82612d49565b60008060408385031215612dc1578081fd5b612dca83612d49565b9150612dd860208401612d49565b90509250929050565b600080600060608486031215612df5578081fd5b612dfe84612d49565b9250612e0c60208501612d49565b9150604084013590509250925092565b60008060008060808587031215612e31578081fd5b612e3a85612d49565b9350612e4860208601612d49565b925060408501359150606085013567ffffffffffffffff811115612e6a578182fd5b8501601f81018713612e7a578182fd5b612e8987823560208401612cf1565b91505092959194509250565b60008060408385031215612ea7578182fd5b612eb083612d49565b9150612dd860208401612d60565b60008060408385031215612ed0578182fd5b612ed983612d49565b946020939093013593505050565b60006020808385031215612ef9578182fd5b823567ffffffffffffffff811115612f0f578283fd5b8301601f81018513612f1f578283fd5b8035612f32612f2d82613a6b565b613a41565b8181528381019083850185840285018601891015612f4e578687fd5b8694505b83851015612f70578035835260019490940193918501918501612f52565b50979650505050505050565b60008060408385031215612f8e578182fd5b823567ffffffffffffffff811115612fa4578283fd5b8301601f81018513612fb4578283fd5b80356020612fc4612f2d83613a6b565b82815281810190848301838502860184018a1015612fe0578788fd5b8795505b8486101561300957612ff581612d70565b835260019590950194918301918301612fe4565b5095506130199050868201612d60565b93505050509250929050565b60008060408385031215613037578182fd5b61304083612d60565b915060208084013567ffffffffffffffff81111561305c578283fd5b8401601f8101861361306c578283fd5b803561307a612f2d82613a6b565b81815283810190838501858402850186018a1015613096578687fd5b8694505b838510156130bf576130ab81612d49565b83526001949094019391850191850161309a565b5080955050505050509250929050565b6000602082840312156130e0578081fd5b8135612adb81613c71565b6000602082840312156130fc578081fd5b8151612adb81613c71565b600060208284031215613118578081fd5b813567ffffffffffffffff81111561312e578182fd5b8201601f8101841361313e578182fd5b6125ee84823560208401612cf1565b60006020828403121561315e578081fd5b5035919050565b60008060408385031215613177578182fd5b82359150612dd860208401612d49565b60008060408385031215613199578182fd5b50508035926020909101359150565b6000806000606084860312156131bc578081fd5b83359250602084013591506131d360408501612d49565b90509250925092565b6000602082840312156131ed578081fd5b612adb82612d70565b600060208284031215613207578081fd5b612adb82612d84565b60008060408385031215613222578182fd5b612dca83612d84565b60008151808452613243816020860160208601613b82565b601f01601f19169290920160200192915050565b60008251613269818460208701613b82565b9190910192915050565b600066697066733a2f2f60c81b82528351613295816007850160208801613b82565b602f60f81b60079184019182015283516132b6816008840160208801613b82565b01600801949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906133099083018461322b565b9695505050505050565b901515815260200190565b91151582521515602082015260400190565b600060208252612adb602083018461322b565b60208082526003908201526245303160e81b604082015260600190565b60208082526003908201526222981b60e91b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526003908201526204533360ec1b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526003908201526245303560e81b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526003908201526245393760e81b604082015260600190565b60208082526003908201526245303760e81b604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526003908201526245313760e81b604082015260600190565b60208082526003908201526204531360ec1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b60208082526003908201526204539360ec1b604082015260600190565b60208082526003908201526245393160e81b604082015260600190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526003908201526245313160e81b604082015260600190565b60208082526003908201526245313360e81b604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526003908201526245353560e81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526003908201526245313560e81b604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526003908201526245323160e81b604082015260600190565b60208082526003908201526245323360e81b604082015260600190565b60208082526003908201526245393560e81b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526003908201526204532360ec1b604082015260600190565b60208082526003908201526222989960e91b604082015260600190565b61ffff91909116815260200190565b90815260200190565b918252602082015260400190565b60ff92831681529116602082015260400190565b60405181810167ffffffffffffffff81118282101715613a6357613a63613c5b565b604052919050565b600067ffffffffffffffff821115613a8557613a85613c5b565b5060209081020190565b600061ffff808316818516808303821115613aac57613aac613c2f565b01949350505050565b60008219821115613ac857613ac8613c2f565b500190565b600060ff821660ff84168060ff03821115613aea57613aea613c2f565b019392505050565b600082613b0157613b01613c45565b500490565b6000816000190483118215151615613b2057613b20613c2f565b500290565b600061ffff83811690831681811015613b4057613b40613c2f565b039392505050565b600082821015613b5a57613b5a613c2f565b500390565b600060ff821660ff841680821015613b7957613b79613c2f565b90039392505050565b60005b83811015613b9d578181015183820152602001613b85565b838111156113175750506000910152565b600081613bbd57613bbd613c2f565b506000190190565b600281046001821680613bd957607f821691505b60208210811415613bfa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613c1457613c14613c2f565b5060010190565b600082613c2a57613c2a613c45565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461140c57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572a2646970667358221220312ea8609e9199b87627fc8537f66acf2becd28ef8f9f4a1cecec153875a41b664736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000015b300000000000000000000000000000000000000000000000000000000000000094e4654576f72646c65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e57440000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): NFTWordle
Arg [1] : symbol (string): NWD
Arg [2] : maxNftSupply (uint256): 5555
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000015b3
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 4e4654576f72646c650000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4e57440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46873:4939:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48784:98;;;;;;;;;;-1:-1:-1;48784:98:0;;;;;:::i;:::-;;:::i;:::-;;10259:150;;;;;;;;;;-1:-1:-1;10259:150:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39698:69;;;;;;;;;;-1:-1:-1;39698:69:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23790:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42057:935::-;;;;;;:::i;:::-;;:::i;26667:221::-;;;;;;;;;;-1:-1:-1;26667:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26197:404::-;;;;;;;;;;-1:-1:-1;26197:404:0;;;;;:::i;:::-;;:::i;39627:64::-;;;;;;;;;;-1:-1:-1;39627:64:0;;;;;:::i;:::-;;:::i;40123:29::-;;;;;;;;;;;;;:::i;39101:46::-;;;;;;;;;;-1:-1:-1;39101:46:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;25614:268::-;;;;;;;;;;;;;:::i;46915:43::-;;;;;;;;;;;;;:::i;27557:305::-;;;;;;;;;;-1:-1:-1;27557:305:0;;;;;:::i;:::-;;:::i;48554:106::-;;;;;;;;;;-1:-1:-1;48554:106:0;;;;;:::i;:::-;;:::i;39843:83::-;;;;;;;;;;-1:-1:-1;39843:83:0;;;;;:::i;:::-;;:::i;39392:49::-;;;;;;;;;;-1:-1:-1;39392:49:0;;;;;:::i;:::-;;:::i;39542:78::-;;;;;;;;;;-1:-1:-1;39542:78:0;;;;;:::i;:::-;;:::i;27933:151::-;;;;;;;;;;-1:-1:-1;27933:151:0;;;;;:::i;:::-;;:::i;50612:1191::-;;;;;;:::i;:::-;;:::i;49328:432::-;;;;;;;;;;-1:-1:-1;49328:432:0;;;;;:::i;:::-;;:::i;49154:99::-;;;;;;;;;;-1:-1:-1;49154:99:0;;;;;:::i;:::-;;:::i;47455:43::-;;;;;;;;;;-1:-1:-1;47455:43:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;47274:29::-;;;;;;;;;;;;;:::i;50184:386::-;;;;;;;;;;;;;:::i;40199:29::-;;;;;;;;;;;;;:::i;47238:27::-;;;;;;;;;;;;;:::i;40237:31::-;;;;;;;;;;;;;:::i;39452:50::-;;;;;;;;;;-1:-1:-1;39452:50:0;;;;;:::i;:::-;;:::i;23431:292::-;;;;;;;;;;-1:-1:-1;23431:292:0;;;;;:::i;:::-;;:::i;47202:27::-;;;;;;;;;;;;;:::i;25191:97::-;;;;;;;;;;;;;:::i;20543:31::-;;;;;;;;;;;;;:::i;49768:365::-;;;;;;;;;;-1:-1:-1;49768:365:0;;;;;:::i;:::-;;:::i;23109:260::-;;;;;;;;;;-1:-1:-1;23109:260:0;;;;;:::i;:::-;;:::i;43000:842::-;;;;;;;;;;-1:-1:-1;43000:842:0;;;;;:::i;:::-;;:::i;47312:26::-;;;;;;;;;;;;;:::i;47419:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40161:31::-;;;;;;;;;;;;;:::i;40277:60::-;;;;;;;;;;;;;:::i;37561:87::-;;;;;;;;;;;;;:::i;23959:104::-;;;;;;;;;;;;;:::i;41322:727::-;;;:::i;43850:2041::-;;;;;;;;;;-1:-1:-1;43850:2041:0;;;;;:::i;:::-;;:::i;47059:43::-;;;;;;;;;;;;;:::i;45899:891::-;;;;;;;;;;-1:-1:-1;45899:891:0;;;;;:::i;:::-;;:::i;39310:73::-;;;;;;;;;;-1:-1:-1;39310:73:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;26960:295::-;;;;;;;;;;-1:-1:-1;26960:295:0;;;;;:::i;:::-;;:::i;48935:211::-;;;;;;;;;;;;;:::i;41060:254::-;;;;;;;;;;-1:-1:-1;41060:254:0;;;;;:::i;:::-;;:::i;39509:24::-;;;;;;;;;;-1:-1:-1;39509:24:0;;;;;:::i;:::-;;:::i;40895:157::-;;;;;;;;;;-1:-1:-1;40895:157:0;;;;;:::i;:::-;;:::i;28155:285::-;;;;;;;;;;-1:-1:-1;28155:285:0;;;;;:::i;:::-;;:::i;40434:22::-;;;;;;;;;;;;;:::i;39774:62::-;;;;;;;;;;-1:-1:-1;39774:62:0;;;;;:::i;:::-;;:::i;39933:84::-;;;;;;;;;;-1:-1:-1;39933:84:0;;;;;:::i;:::-;;:::i;24134:818::-;;;;;;;;;;-1:-1:-1;24134:818:0;;;;;:::i;:::-;;:::i;48215:331::-;;;;;;;;;;-1:-1:-1;48215:331:0;;;;;:::i;:::-;;:::i;47111:41::-;;;;;;;;;;;;;:::i;47721:486::-;;;;;;;;;;;;;:::i;27326:164::-;;;;;;;;;;-1:-1:-1;27326:164:0;;;;;:::i;:::-;;:::i;47161:32::-;;;;;;;;;;;;;:::i;40465:422::-;;;;;;;;;;-1:-1:-1;40465:422:0;;;;;:::i;:::-;;:::i;48668:108::-;;;;;;;;;;;;;:::i;48784:98::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;;;;;;;;;48855:8:::1;:19:::0;48784:98::o;10259:150::-;-1:-1:-1;;;;;;10368:33:0;;10344:4;10368:33;;;:20;:33;;;;;;;;10259:150;;;;:::o;39698:69::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;23790:100::-;23844:13;23877:5;23870:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23790:100;;:::o;42057:935::-;42176:11;;42127:30;;;;42176:11;;42168:27;;;;-1:-1:-1;;;42168:27:0;;;;;;;:::i;:::-;40320:17;42214:9;:29;;42206:45;;;;-1:-1:-1;;;42206:45:0;;;;;;;:::i;:::-;42308:10;42301:18;;;;:6;:18;;;;;:34;:38;;42338:1;42301:38;:::i;:::-;42271:10;42264:18;;;;:6;:18;;;;;;;;:75;;;;42370:10;;42361:20;;:8;:20;;;;;42382:12;;42361:34;;;;;;;:46;;;;;;;;;;;42360:47;42352:63;;;;-1:-1:-1;;;42352:63:0;;;;;;;:::i;:::-;42472:17;;;;:6;:17;;;;;;;;42490:10;;42472:29;;;;;;;42502:10;42472:41;;;;;;;;:45;;42516:1;42472:45;:::i;:::-;42428:17;;;;:6;:17;;;;;;;;42446:10;;;42428:29;;;;;;;;42458:10;42428:41;;;;;;;:89;;;;42561:18;;;:7;:18;;;;;42580:10;;42561:30;;;;;;;:34;;42594:1;42561:34;:::i;:::-;42528:18;;;;:7;:18;;;;;;;;42547:10;;;42528:30;;;;;;;;:67;;;;42660:10;;42647:24;;:12;:24;;;;;42672:12;;42647:38;;;;;;:42;;42688:1;42647:42;:::i;:::-;42619:10;;;42606:24;;;;:12;:24;;;;;;;;42631:12;;42606:38;;;;;;;:83;;;;42740:10;;42727:24;;:12;:24;;;;;:28;;42754:1;42727:28;:::i;:::-;42713:10;;42700:24;;;;:12;:24;;;;;;;;:55;;;;42810:10;42803:18;;:6;:18;;;:34;:38;;42840:1;;42803:38;:::i;:::-;42773:10;42766:18;;;;:6;:18;;;;;;;;:75;;;;42861:10;;;42852:20;;:8;:20;;;;;42873:12;;42852:34;;;;;;;:46;;;;;;;;;:53;;-1:-1:-1;;42852:53:0;42901:4;42852:53;;;42950:10;;42942:19;;:7;:19;;;;:23;:42;;40320:17;;42942:42;:::i;:::-;42924:10;;42916:19;;;;:7;:19;;;;;:68;-1:-1:-1;;42057:935:0:o;26667:221::-;26743:7;26771:16;26779:7;26771;:16::i;:::-;26763:73;;;;-1:-1:-1;;;26763:73:0;;;;;;;:::i;:::-;-1:-1:-1;26856:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26856:24:0;;26667:221::o;26197:404::-;26278:13;26294:23;26309:7;26294:14;:23::i;:::-;26278:39;;26342:5;-1:-1:-1;;;;;26336:11:0;:2;-1:-1:-1;;;;;26336:11:0;;;26328:57;;;;-1:-1:-1;;;26328:57:0;;;;;;;:::i;:::-;26422:5;-1:-1:-1;;;;;26406:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;26406:21:0;;:69;;;;26431:44;26455:5;26462:12;:10;:12::i;26431:44::-;26398:161;;;;-1:-1:-1;;;26398:161:0;;;;;;;:::i;:::-;26572:21;26581:2;26585:7;26572:8;:21::i;:::-;26197:404;;;:::o;39627:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;40123:29::-;;;;:::o;39101:46::-;;;;;;;;;;;;;;;;;;;:::o;25614:268::-;25862:12;;25614:268;:::o;46915:43::-;;;;:::o;27557:305::-;27718:41;27737:12;:10;:12::i;:::-;27751:7;27718:18;:41::i;:::-;27710:103;;;;-1:-1:-1;;;27710:103:0;;;;;;;:::i;:::-;27826:28;27836:4;27842:2;27846:7;27826:9;:28::i;48554:106::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;48616:36:::1;::::0;48624:10:::1;::::0;48616:36;::::1;;;::::0;48645:6;;48616:36:::1;::::0;;;48645:6;48624:10;48616:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;48554:106:::0;:::o;39843:83::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39392:49::-;;;;;;;;;;;;;:::o;39542:78::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27933:151::-;28037:39;28054:4;28060:2;28064:7;28037:39;;;;;;;;;;;;:16;:39::i;50612:1191::-;50710:9;;50677:13;;50710:9;;;;;50705:66;;50750:9;;50744:15;;50750:9;;50744:3;:15;:::i;:::-;50736:23;;;;50705:66;50781:14;50798:13;:11;:13::i;:::-;50781:30;;47100:2;50830:14;:32;;;;50822:48;;;;-1:-1:-1;;;50822:48:0;;;;;;;:::i;:::-;50929:5;50919:7;;:15;;;;:::i;:::-;50890:23;;;;:6;:23;:::i;:::-;50889:46;;50881:62;;;;-1:-1:-1;;;50881:62:0;;;;;;;:::i;:::-;50965:10;50983:1;50958:18;;;:6;:18;;;;;:22;;;;;;:26;;;;:74;;-1:-1:-1;51014:17:0;47151:1;51030;51014:17;:::i;:::-;50995:10;50988:18;;;;:6;:18;;;;;:22;;;;;;:44;50958:74;50954:583;;;51057:7;;;;;;;51049:23;;;;-1:-1:-1;;;51049:23:0;;;;;;;:::i;:::-;51138:10;51131:18;;;;:6;:18;;;;;:22;:26;;51156:1;;51131:22;;;;;:26;:::i;:::-;51114:44;;;;47151:1;51114:44;:::i;:::-;51095:14;:64;;;;51087:80;;;;-1:-1:-1;;;51087:80:0;;;;;;;:::i;:::-;51299:9;51281:14;51270:25;;:8;;:25;;;;:::i;:::-;:38;;51262:54;;;;-1:-1:-1;;;51262:54:0;;;;;;;:::i;:::-;51363:10;51356:18;;;;:6;:18;;;;;:22;:39;;51381:14;;51356:22;;;;;:39;:::i;:::-;51338:10;51331:18;;;;:6;:18;;;;;:64;;;;;;;;;-1:-1:-1;;51331:64:0;;;;;;;;;50954:583;;;51436:12;;;;51428:28;;;;-1:-1:-1;;;51428:28:0;;;;;;;:::i;:::-;51508:9;51490:14;51479:25;;:8;;:25;;;;:::i;:::-;:38;;51471:54;;;;-1:-1:-1;;;51471:54:0;;;;;;;:::i;:::-;51589:14;51578:25;;:8;;:25;;;;:::i;:::-;51563:11;;:41;;;;:::i;:::-;51549:11;:55;51641:1;51625:171;51649:14;51644:19;;:1;:19;51625:171;;51709:5;51699:7;;:15;;;;:::i;:::-;51689:6;:26;51685:100;;;51736:33;51746:10;51758;51767:1;51758:6;:10;:::i;:::-;51736:9;:33::i;:::-;51665:3;;;;:::i;:::-;;;;51625:171;;;;50612:1191;;;:::o;49328:432::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;49391:4:::1;:9;;49399:1;49391:9;49387:152;;;49433:12;::::0;;-1:-1:-1;;49417:28:0;::::1;49433:12;::::0;;::::1;49432:13;49417:28;::::0;;;;49464:12:::1;49460:68;;;49497:7;:15:::0;;-1:-1:-1;;49497:15:0::1;::::0;;49460:68:::1;49553:4;:9;;49561:1;49553:9;49549:60;;;49590:7;::::0;;-1:-1:-1;;49579:18:0;::::1;49590:7;::::0;;;::::1;;;49589:8;49579:18:::0;;::::1;;::::0;;49549:60:::1;49623:4;:9;;49631:1;49623:9;49619:60;;;49660:7;::::0;;-1:-1:-1;;49649:18:0;::::1;49660:7:::0;;;;::::1;;;49659:8;49649:18:::0;;::::1;;::::0;;49619:60:::1;49693:4;:9;;49701:1;49693:9;49689:64;;;49732:9;::::0;;-1:-1:-1;;49719:22:0;::::1;49732:9:::0;;;;::::1;;;49731:10;49719:22:::0;;::::1;;::::0;;49689:64:::1;49328:432:::0;:::o;49154:99::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;49225:20:::1;49237:7;49225:11;:20::i;47455:43::-:0;;;;;;;;;;;;;;;;;;;;;;:::o;47274:29::-;;;;;;;;;:::o;50184:386::-;50230:14;50247:13;:11;:13::i;:::-;50279:7;;50230:30;;-1:-1:-1;50279:7:0;;;;;50271:23;;;;-1:-1:-1;;;50271:23:0;;;;;;;:::i;:::-;50320:10;50313:18;;;;:6;:18;;;;;:22;;;;:27;50305:43;;;;-1:-1:-1;;;50305:43:0;;;;;;;:::i;:::-;50374:10;50367:18;;;;:6;:18;;;;;:22;;;50393:1;50367:27;;50359:43;;;;-1:-1:-1;;;50359:43:0;;;;;;;:::i;:::-;50430:7;;50421:6;:16;50413:32;;;;-1:-1:-1;;;50413:32:0;;;;;;;:::i;:::-;50463:10;50456:18;;;;:6;:18;;;;;;;;:26;;-1:-1:-1;;50456:26:0;50481:1;50456:26;;;50505:9;:13;;:9;;50456:26;50505:13;:::i;:::-;50493:9;:25;;-1:-1:-1;;50493:25:0;;;;;;;;;;;;50529:33;50539:10;50551;:6;-1:-1:-1;50551:10:0;:::i;40199:29::-;;;;:::o;47238:27::-;;;;;;;;;:::o;40237:31::-;;;;;;:::o;39452:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23431:292::-;23503:7;23631:1;23621:7;:11;23613:65;;;;-1:-1:-1;;;23613:65:0;;;;;;;:::i;:::-;-1:-1:-1;23696:19:0;;;;:10;:19;;;;;;-1:-1:-1;;;;;23696:19:0;;23431:292::o;47202:27::-;;;;;;;;;:::o;25191:97::-;25239:13;25272:8;25265:15;;;;;:::i;20543:31::-;;;;:::o;49768:365::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;49864:6:::1;49859:267;49880:11;:18;49876:1;:22;49859:267;;;49924:4;49920:195;;;49978:1;49949:6;:22;49956:11;49968:1;49956:14;;;;;;-1:-1:-1::0;;;49956:14:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;49949:22:0::1;-1:-1:-1::0;;;;;49949:22:0::1;;;;;;;;;;;;:26;;;:30;;;;;;;;;;;;;;;;;;50027:1;49998:6;:22;50005:11;50017:1;50005:14;;;;;;-1:-1:-1::0;;;50005:14:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;49998:22:0::1;-1:-1:-1::0;;;;;49998:22:0::1;;;;;;;;;;;;:26;;;:30;;;;;;;;;;;;;;;;;;49920:195;;;50098:1;50069:6;:22;50076:11;50088:1;50076:14;;;;;;-1:-1:-1::0;;;50076:14:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50069:22:0::1;-1:-1:-1::0;;;;;50069:22:0::1;;;;;;;;;;;;:26;;;:30;;;;;;;;;;;;;;;;;;49920:195;49900:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49859:267;;23109:260:::0;23181:7;-1:-1:-1;;;;;23209:19:0;;23201:74;;;;-1:-1:-1;;;23201:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23342:19:0;;;;;:12;:19;;;;;;;23109:260::o;43000:842::-;43105:11;;43056:30;;;;43105:11;;43097:27;;;;-1:-1:-1;;;43097:27:0;;;;;;;:::i;:::-;43150:10;43180:1;43143:18;;;:6;:18;;;;;:34;43135:54;;;;-1:-1:-1;;;43135:54:0;;;;;;;:::i;:::-;43220:10;;43211:20;;;;:8;:20;;;;;;;;43232:12;;43211:34;;;;;;;43246:10;43211:46;;;;;;;;;;43210:47;43202:63;;;;-1:-1:-1;;;43202:63:0;;;;;;;:::i;47312:26::-;;;;:::o;47419:27::-;;;;;;:::o;40161:31::-;;;;:::o;40277:60::-;40320:17;40277:60;:::o;37561:87::-;37607:7;37634:6;-1:-1:-1;;;;;37634:6:0;37561:87;:::o;23959:104::-;24015:13;24048:7;24041:14;;;;;:::i;41322:727::-;40320:17;41377:9;:29;;41369:45;;;;-1:-1:-1;;;41369:45:0;;;;;;;:::i;:::-;41443:21;40320:17;41462:2;41443:21;:::i;:::-;41429:9;:36;41425:617;;41526:10;41519:18;;;;:6;:18;;;;;:34;:39;;41556:2;41519:39;:::i;:::-;41489:10;41482:18;;;;:6;:18;;;;;:76;41425:617;;;40320:17;41748:9;:29;41744:298;;41838:10;41831:18;;;;:6;:18;;;;;:34;:38;;41868:1;41831:38;:::i;:::-;41801:10;41794:18;;;;:6;:18;;;;;:75;41744:298;41322:727::o;43850:2041::-;43957:11;;43919:17;;43957:11;;43949:27;;;;-1:-1:-1;;;43949:27:0;;;;;;;:::i;:::-;43989:16;44043:1;44030:10;;:14;44022:30;;;;-1:-1:-1;;;44022:30:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44083:15:0;;44065;44083;;;:6;:15;;;;;:31;;;;;:35;;;:::i;:::-;44065:53;-1:-1:-1;44131:19:0;;44161:134;44197:7;:14;44187:24;;44161:134;;;44267:7;44275;44267:16;;;;;;-1:-1:-1;;;44267:16:0;;;;;;;;;;;;;;;;;44253:11;:30;;;;:::i;:::-;44239:44;-1:-1:-1;44213:9:0;;;;:::i;:::-;;;;44161:134;;;-1:-1:-1;44334:7:0;44307:1549;44357:10;;44343:11;:24;44307:1549;;;44405:5;:10;;44414:1;44405:10;44401:1444;;;44445:22;;;;:9;:22;;;;;;;;-1:-1:-1;;;;;44445:31:0;;;;;;;;;:35;;;44444:36;44436:52;;;;-1:-1:-1;;;44436:52:0;;;;;;;:::i;:::-;44536:1;44515:18;44525:7;44515:9;:18::i;:::-;:22;44507:38;;;;-1:-1:-1;;;44507:38:0;;;;;;;:::i;:::-;44564:18;44585;44595:7;44585:9;:18::i;:::-;44564:39;;44643:1;44630:10;:14;44622:30;;;;-1:-1:-1;;;44622:30:0;;;;;;;:::i;:::-;44671:14;44688:13;:11;:13::i;:::-;44746:20;;;;:7;:20;;;;;:24;44671:30;;-1:-1:-1;44671:30:0;;44779:3;;44746:29;;44773:2;44746:29;:::i;:::-;44745:37;;;;:::i;:::-;44731:52;;:10;:52;:::i;:::-;:61;;;;:::i;:::-;44720:72;;44401:1444;;;;;44861:15;44856:974;44892:25;;;;:12;:25;;;;;:32;44882:42;;44856:974;;;45061:1;45001:25;;;:12;:25;;;;;:34;;44994:6;;45061:1;;45027:7;;45001:34;;;;-1:-1:-1;;;45001:34:0;;;;;;;;;;;;;;;;;;;;;44994:42;;;;;;;;;;;;;;;:55;;;;;;;;-1:-1:-1;;;;;44994:64:0;;;;;;;;;;:68;:142;;;;-1:-1:-1;45096:22:0;;;;:9;:22;;;;;;;;-1:-1:-1;;;;;45096:31:0;;;;;;;;;:40;;;;;;45095:41;44994:142;44960:851;;;45700:43;45708:25;;;:12;:25;;;;;:34;;45700:7;;:43;45708:25;45734:7;;45708:34;;;;-1:-1:-1;;;45708:34:0;;;;;;;;;;;;;;;;;;;;;45700:43;;;;;;;;;;;;;;;:56;;;;;;;;;45508:7;:20;;;;:24;45585:11;;45541:3;;45508:29;;45535:2;45508:29;:::i;:::-;45507:37;;;;:::i;:::-;45450:7;45458;45450:16;;;;;;-1:-1:-1;;;45450:16:0;;;;;;;;;;;;;;;;;:95;;;;:::i;:::-;:146;;;;:::i;:::-;45278:42;45285:25;;;:12;:25;;;;;:34;;45278:6;;:42;45285:25;45311:7;;45285:34;;;;-1:-1:-1;;;45285:34:0;;;;;;;;;;;;;;;;;;;;;45278:42;;;;;;;;;;;;;;;:55;;;;;;;;-1:-1:-1;;;;;45278:64:0;;;;;;;;;;:353;;;;:::i;:::-;:478;;;;:::i;:::-;45202:585;;:8;:585;:::i;:::-;45191:596;;44960:851;44926:9;;;;:::i;:::-;;;;44856:974;;;;44401:1444;44369:13;;;;:::i;:::-;;;;44307:1549;;;-1:-1:-1;45875:8:0;;-1:-1:-1;;;43850:2041:0;;;;;:::o;47059:43::-;47100:2;47059:43;:::o;45899:891::-;46009:11;;45971:17;;46009:11;;46001:27;;;;-1:-1:-1;;;46001:27:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46047:21:0;;46058:10;46047:21;46039:37;;;;-1:-1:-1;;;46039:37:0;;;;;;;:::i;:::-;46112:10;46087:15;46105:18;;;:6;:18;;;;;:34;;;;;:38;;;:::i;:::-;46087:56;;46174:7;46160:10;;:21;46156:62;;;46205:1;46198:8;;;;;46156:62;46230:16;46249:24;46258:5;46265:7;46249:8;:24::i;:::-;46230:43;;46302:1;46290:8;:13;46286:54;;46327:1;46320:8;;;;;;46286:54;46379:7;46352:290;46402:10;;46388:11;:24;46352:290;;;46448:5;:10;;46457:1;46448:10;46444:187;;;46479:22;;;;:9;:22;;;;;;;;46502:10;46479:34;;;;;;;:45;;-1:-1:-1;;46479:45:0;46520:4;46479:45;;;46444:187;;;46565:22;;;;:9;:22;;;;;;;;46588:10;46565:34;;;;;;;:50;;-1:-1:-1;;46565:50:0;;;;;46444:187;46414:13;;;;:::i;:::-;;;;46352:290;;;;46704:1;46691:10;;:14;;;;:::i;:::-;46661:10;46654:18;;;;:6;:18;;;;;;:34;;:51;;;;46718:38;;46661:10;;46718:38;;;;;46747:8;;46718:38;46654:18;46718:38;46747:8;46661:10;46718:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46774:8:0;45899:891;-1:-1:-1;;;;45899:891:0:o;39310:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26960:295::-;27075:12;:10;:12::i;:::-;-1:-1:-1;;;;;27063:24:0;:8;-1:-1:-1;;;;;27063:24:0;;;27055:62;;;;-1:-1:-1;;;27055:62:0;;;;;;;:::i;:::-;27175:8;27130:18;:32;27149:12;:10;:12::i;:::-;-1:-1:-1;;;;;27130:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;27130:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;27130:53:0;;;;;;;;;;;27214:12;:10;:12::i;:::-;-1:-1:-1;;;;;27199:48:0;;27238:8;27199:48;;;;;;:::i;:::-;;;;;;;;26960:295;;:::o;48935:211::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;48993:14:::1;49010:13;:11;:13::i;:::-;48993:30:::0;-1:-1:-1;49063:1:0::1;49054:85;49070:2;49066:1;:6;49054:85;;;49094:33;49104:10;49116;49125:1:::0;49116:6;:10:::1;:::i;49094:33::-;49074:3:::0;::::1;::::0;::::1;:::i;:::-;;;;49054:85;;41060:254:::0;-1:-1:-1;;;;;41153:20:0;;41122:14;41153:20;;;:6;:20;;;;;:36;41193:1;-1:-1:-1;41149:158:0;;-1:-1:-1;;;;;;41218:20:0;;;;;;:6;:20;;;;;:36;41211:43;;41149:158;-1:-1:-1;41294:1:0;41287:8;;39509:24;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39509:24:0;:::o;40895:157::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;40983:10:::1;:17;41004:1;40983:22;40975:38;;;;-1:-1:-1::0;;;40975:38:0::1;;;;;;;:::i;:::-;41024:20:::0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;28155:285::-:0;28287:41;28306:12;:10;:12::i;:::-;28320:7;28287:18;:41::i;:::-;28279:103;;;;-1:-1:-1;;;28279:103:0;;;;;;;:::i;:::-;28393:39;28407:4;28413:2;28417:7;28426:5;28393:13;:39::i;40434:22::-;;;;:::o;39774:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39933:84::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24134:818::-;24207:13;24241:16;24249:7;24241;:16::i;:::-;24233:76;;;;-1:-1:-1;;;24233:76:0;;;;;;;:::i;:::-;24380:18;24401:9;:7;:9::i;:::-;24380:30;;24913:4;24924:18;:7;:16;:18::i;:::-;24885:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24871:73;;;24134:818;;;:::o;48215:331::-;48285:15;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;48315:19:::1;48374:12:::0;48347:161:::1;48402:10;;48388:11;:24;48347:161;;;48472:20;::::0;;;:7:::1;:20;::::0;;;;:24;48458:38:::1;::::0;:11;:38:::1;:::i;:::-;48444:52:::0;-1:-1:-1;48414:13:0;::::1;::::0;::::1;:::i;:::-;;;;48347:161;;;-1:-1:-1::0;48527:11:0;48215:331;-1:-1:-1;;48215:331:0:o;47111:41::-;47151:1;47111:41;:::o;47721:486::-;47764:15;47846;47864:14;;47881:1;47864:18;;;;:::i;:::-;47846:36;;47913:7;47899:10;;:21;47895:62;;;47944:1;47937:8;;;;;47895:62;47969:19;48028:7;48001:168;48051:10;;48037:11;:24;48001:168;;;48122:20;;;;:7;:20;;;;;:24;48154:3;;48122:28;;48149:1;48122:28;:::i;:::-;48121:36;;;;:::i;:::-;48107:50;;:11;:50;:::i;:::-;48093:64;-1:-1:-1;48063:13:0;;;;:::i;:::-;;;;48001:168;;;-1:-1:-1;48188:11:0;-1:-1:-1;;47721:486:0;:::o;27326:164::-;-1:-1:-1;;;;;27447:25:0;;;27423:4;27447:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27326:164::o;47161:32::-;;;;;;:::o;40465:422::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;40557:11:::1;::::0;::::1;;40552:63;;40585:11;:18:::0;;-1:-1:-1;;40585:18:0::1;40599:4;40585:18;::::0;;40552:63:::1;40629:8;40625:149;;;40669:1;40654:12;:16:::0;;;40698:10:::1;::::0;40685:24;;:12:::1;:24;::::0;;;;;;;:35;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;40748:10:0::1;::::0;:14:::1;::::0;40761:1:::1;40748:14;:::i;:::-;40735:10;:27:::0;40625:149:::1;40799:12;::::0;:16:::1;::::0;40814:1:::1;40799:16;:::i;:::-;40784:12;:31:::0;40864:10:::1;::::0;40852:23:::1;::::0;;;:11:::1;:23;::::0;;;;;:27:::1;::::0;40878:1:::1;40852:27;:::i;:::-;40838:10;::::0;40826:23:::1;::::0;;;:11:::1;:23;::::0;;;;:53;-1:-1:-1;;40465:422:0:o;48668:108::-;37792:12;:10;:12::i;:::-;-1:-1:-1;;;;;37781:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;37781:23:0;;37773:68;;;;-1:-1:-1;;;37773:68:0;;;;;;;:::i;:::-;48756:11:::1;::::0;48727:41:::1;::::0;48735:10:::1;::::0;48727:41;::::1;;;::::0;::::1;::::0;;;48756:11;48735:10;48727:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;730:115:::0;826:10;730:115;:::o;29907:167::-;29972:4;30046:20;;;:11;:20;;;;;;;;;29907:167::o;35553:192::-;35628:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35628:29:0;-1:-1:-1;;;;;35628:29:0;;;;;;;;:24;;35682:23;35628:24;35682:14;:23::i;:::-;-1:-1:-1;;;;;35673:46:0;;;;;;;;;;;35553:192;;:::o;30241:355::-;30334:4;30359:16;30367:7;30359;:16::i;:::-;30351:73;;;;-1:-1:-1;;;30351:73:0;;;;;;;:::i;:::-;30435:13;30451:23;30466:7;30451:14;:23::i;:::-;30435:39;;30504:5;-1:-1:-1;;;;;30493:16:0;:7;-1:-1:-1;;;;;30493:16:0;;:51;;;;30537:7;-1:-1:-1;;;;;30513:31:0;:20;30525:7;30513:11;:20::i;:::-;-1:-1:-1;;;;;30513:31:0;;30493:51;:94;;;;30548:39;30572:5;30579:7;30548:23;:39::i;:::-;30485:103;30241:355;-1:-1:-1;;;;30241:355:0:o;32995:565::-;33120:4;-1:-1:-1;;;;;33093:31:0;:23;33108:7;33093:14;:23::i;:::-;-1:-1:-1;;;;;33093:31:0;;33085:85;;;;-1:-1:-1;;;33085:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33207:16:0;;33199:65;;;;-1:-1:-1;;;33199:65:0;;;;;;;:::i;:::-;33277:39;33298:4;33304:2;33308:7;33277:20;:39::i;:::-;33381:29;33398:1;33402:7;33381:8;:29::i;:::-;-1:-1:-1;;;;;33423:18:0;;;;;;:12;:18;;;;;:20;;;;;;:::i;:::-;;;;-1:-1:-1;;33454:19:0;;;;:10;:19;;;;;;;;:24;;-1:-1:-1;;;;;;33454:24:0;-1:-1:-1;;;;;33454:24:0;;;;;;;;33489:16;;:12;:16;;;;;:18;;;;;;:::i;:::-;;;;;;33544:7;33540:2;-1:-1:-1;;;;;33525:27:0;33534:4;-1:-1:-1;;;;;33525:27:0;;;;;;;;;;;32995:565;;;:::o;30939:110::-;31015:26;31025:2;31029:7;31015:26;;;;;;;;;;;;:9;:26::i;34165:100::-;34238:19;;;;:8;;:19;;;;;:::i;29322:272::-;29436:28;29446:4;29452:2;29456:7;29436:9;:28::i;:::-;29483:48;29506:4;29512:2;29516:7;29525:5;29483:22;:48::i;:::-;29475:111;;;;-1:-1:-1;;;29475:111:0;;;;;;;:::i;17370:723::-;17426:13;17647:10;17643:53;;-1:-1:-1;17674:10:0;;;;;;;;;;;;-1:-1:-1;;;17674:10:0;;;;;;17643:53;17721:5;17706:12;17762:78;17769:9;;17762:78;;17795:8;;;;:::i;:::-;;-1:-1:-1;17818:10:0;;-1:-1:-1;17826:2:0;17818:10;;:::i;:::-;;;17762:78;;;17850:19;17882:6;17872:17;;;;;;-1:-1:-1;;;17872:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17872:17:0;;17850:39;;17900:154;17907:10;;17900:154;;17934:11;17944:1;17934:11;;:::i;:::-;;-1:-1:-1;18003:10:0;18011:2;18003:5;:10;:::i;:::-;17990:24;;:2;:24;:::i;:::-;17977:39;;17960:6;17967;17960:14;;;;;;-1:-1:-1;;;17960:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;17960:56:0;;;;;;;;-1:-1:-1;18031:11:0;18040:2;18031:11;;:::i;:::-;;;17900:154;;31276:250;31372:18;31378:2;31382:7;31372:5;:18::i;:::-;31409:54;31440:1;31444:2;31448:7;31457:5;31409:22;:54::i;:::-;31401:117;;;;-1:-1:-1;;;31401:117:0;;;;;;;:::i;34830:604::-;34951:4;34978:15;:2;-1:-1:-1;;;;;34978:13:0;;:15::i;:::-;34973:60;;-1:-1:-1;35017:4:0;35010:11;;34973:60;35043:23;35069:252;-1:-1:-1;;;35182:12:0;:10;:12::i;:::-;35209:4;35228:7;35250:5;35085:181;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;35085:181:0;;;;;;;-1:-1:-1;;;;;35085:181:0;;;;;;;;;;;35069:252;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35069:15:0;;;:252;:15;:252::i;:::-;35043:278;;35332:13;35359:10;35348:32;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;35399:26:0;-1:-1:-1;;;35399:26:0;;-1:-1:-1;;;34830:604:0;;;;;;:::o;31862:573::-;-1:-1:-1;;;;;31942:16:0;;31934:61;;;;-1:-1:-1;;;31934:61:0;;;;;;;:::i;:::-;32015:16;32023:7;32015;:16::i;:::-;32014:17;32006:58;;;;-1:-1:-1;;;32006:58:0;;;;;;;:::i;:::-;32077:45;32106:1;32110:2;32114:7;32077:20;:45::i;:::-;32178:19;;;;:10;:19;;;;;;;;:24;;-1:-1:-1;;;;;;32178:24:0;-1:-1:-1;;;;;32178:24:0;;;;;;;;32213:11;:20;;;;;:27;;-1:-1:-1;;32213:27:0;-1:-1:-1;32213:27:0;;;;;;32314:16;;;:12;:16;;;;;;;:20;;;:::i;:::-;-1:-1:-1;;;;;32295:16:0;;;;;;:12;:16;;;;;:39;32360:12;;:16;;32375:1;32360:16;:::i;:::-;32345:12;:31;32394:33;;32419:7;;-1:-1:-1;;;;;32394:33:0;;;32411:1;;32394:33;;32411:1;;32394:33;31862:573;;:::o;11792:422::-;12159:20;12198:8;;;11792:422::o;14714:195::-;14817:12;14849:52;14871:6;14879:4;14885:1;14888:12;14849:21;:52::i;:::-;14842:59;;14714:195;;;;;;:::o;15766:530::-;15893:12;15951:5;15926:21;:30;;15918:81;;;;-1:-1:-1;;;15918:81:0;;;;;;;:::i;:::-;16018:18;16029:6;16018:10;:18::i;:::-;16010:60;;;;-1:-1:-1;;;16010:60:0;;;;;;;:::i;:::-;16144:12;16158:23;16185:6;-1:-1:-1;;;;;16185:11:0;16205:5;16213:4;16185:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16143:75;;;;16236:52;16254:7;16263:10;16275:12;16236:17;:52::i;:::-;16229:59;15766:530;-1:-1:-1;;;;;;;15766:530:0:o;16306:742::-;16421:12;16450:7;16446:595;;;-1:-1:-1;16481:10:0;16474:17;;16446:595;16595:17;;:21;16591:439;;16858:10;16852:17;16919:15;16906:10;16902:2;16898:19;16891:44;16806:148;17001:12;16994:20;;-1:-1:-1;;;16994:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:162;675:20;;731:13;;724:21;714:32;;704:2;;760:1;757;750:12;775:165;844:20;;904:10;893:22;;883:33;;873:2;;930:1;927;920:12;945:158;1013:20;;1073:4;1062:16;;1052:27;;1042:2;;1093:1;1090;1083:12;1108:198;;1220:2;1208:9;1199:7;1195:23;1191:32;1188:2;;;1241:6;1233;1226:22;1188:2;1269:31;1290:9;1269:31;:::i;1311:274::-;;;1440:2;1428:9;1419:7;1415:23;1411:32;1408:2;;;1461:6;1453;1446:22;1408:2;1489:31;1510:9;1489:31;:::i;:::-;1479:41;;1539:40;1575:2;1564:9;1560:18;1539:40;:::i;:::-;1529:50;;1398:187;;;;;:::o;1590:342::-;;;;1736:2;1724:9;1715:7;1711:23;1707:32;1704:2;;;1757:6;1749;1742:22;1704:2;1785:31;1806:9;1785:31;:::i;:::-;1775:41;;1835:40;1871:2;1860:9;1856:18;1835:40;:::i;:::-;1825:50;;1922:2;1911:9;1907:18;1894:32;1884:42;;1694:238;;;;;:::o;1937:702::-;;;;;2109:3;2097:9;2088:7;2084:23;2080:33;2077:2;;;2131:6;2123;2116:22;2077:2;2159:31;2180:9;2159:31;:::i;:::-;2149:41;;2209:40;2245:2;2234:9;2230:18;2209:40;:::i;:::-;2199:50;;2296:2;2285:9;2281:18;2268:32;2258:42;;2351:2;2340:9;2336:18;2323:32;2378:18;2370:6;2367:30;2364:2;;;2415:6;2407;2400:22;2364:2;2443:22;;2496:4;2488:13;;2484:27;-1:-1:-1;2474:2:1;;2530:6;2522;2515:22;2474:2;2558:75;2625:7;2620:2;2607:16;2602:2;2598;2594:11;2558:75;:::i;:::-;2548:85;;;2067:572;;;;;;;:::o;2644:268::-;;;2770:2;2758:9;2749:7;2745:23;2741:32;2738:2;;;2791:6;2783;2776:22;2738:2;2819:31;2840:9;2819:31;:::i;:::-;2809:41;;2869:37;2902:2;2891:9;2887:18;2869:37;:::i;2917:266::-;;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3067:6;3059;3052:22;3014:2;3095:31;3116:9;3095:31;:::i;:::-;3085:41;3173:2;3158:18;;;;3145:32;;-1:-1:-1;;;3004:179:1:o;3188:953::-;;3303:2;3346;3334:9;3325:7;3321:23;3317:32;3314:2;;;3367:6;3359;3352:22;3314:2;3412:9;3399:23;3445:18;3437:6;3434:30;3431:2;;;3482:6;3474;3467:22;3431:2;3510:22;;3563:4;3555:13;;3551:27;-1:-1:-1;3541:2:1;;3597:6;3589;3582:22;3541:2;3638;3625:16;3661:65;3676:49;3722:2;3676:49;:::i;:::-;3661:65;:::i;:::-;3760:15;;;3791:12;;;;3823:11;;;3861;;;3853:20;;3849:29;;3846:42;-1:-1:-1;3843:2:1;;;3906:6;3898;3891:22;3843:2;3933:6;3924:15;;3948:163;3962:2;3959:1;3956:9;3948:163;;;4019:17;;4007:30;;3980:1;3973:9;;;;;4057:12;;;;4089;;3948:163;;;-1:-1:-1;4130:5:1;3283:858;-1:-1:-1;;;;;;;3283:858:1:o;4146:1031::-;;;4296:2;4284:9;4275:7;4271:23;4267:32;4264:2;;;4317:6;4309;4302:22;4264:2;4362:9;4349:23;4395:18;4387:6;4384:30;4381:2;;;4432:6;4424;4417:22;4381:2;4460:22;;4513:4;4505:13;;4501:27;-1:-1:-1;4491:2:1;;4547:6;4539;4532:22;4491:2;4588;4575:16;4610:4;4634:65;4649:49;4695:2;4649:49;:::i;4634:65::-;4733:15;;;4764:12;;;;4796:11;;;4834;;;4826:20;;4822:29;;4819:42;-1:-1:-1;4816:2:1;;;4879:6;4871;4864:22;4816:2;4906:6;4897:15;;4921:170;4935:2;4932:1;4929:9;4921:170;;;4992:24;5012:3;4992:24;:::i;:::-;4980:37;;4953:1;4946:9;;;;;5037:12;;;;5069;;4921:170;;;-1:-1:-1;5110:5:1;-1:-1:-1;5134:37:1;;-1:-1:-1;5152:18:1;;;5134:37;:::i;:::-;5124:47;;;;;4254:923;;;;;:::o;5182:1031::-;;;5333:2;5321:9;5312:7;5308:23;5304:32;5301:2;;;5354:6;5346;5339:22;5301:2;5382:28;5400:9;5382:28;:::i;:::-;5372:38;;5429:2;5482;5471:9;5467:18;5454:32;5509:18;5501:6;5498:30;5495:2;;;5546:6;5538;5531:22;5495:2;5574:22;;5627:4;5619:13;;5615:27;-1:-1:-1;5605:2:1;;5661:6;5653;5646:22;5605:2;5702;5689:16;5725:65;5740:49;5786:2;5740:49;:::i;5725:65::-;5824:15;;;5855:12;;;;5887:11;;;5925;;;5917:20;;5913:29;;5910:42;-1:-1:-1;5907:2:1;;;5970:6;5962;5955:22;5907:2;5997:6;5988:15;;6012:171;6026:2;6023:1;6020:9;6012:171;;;6083:25;6104:3;6083:25;:::i;:::-;6071:38;;6044:1;6037:9;;;;;6129:12;;;;6161;;6012:171;;;6016:3;6202:5;6192:15;;;;;;;5291:922;;;;;:::o;6218:257::-;;6329:2;6317:9;6308:7;6304:23;6300:32;6297:2;;;6350:6;6342;6335:22;6297:2;6394:9;6381:23;6413:32;6439:5;6413:32;:::i;6480:261::-;;6602:2;6590:9;6581:7;6577:23;6573:32;6570:2;;;6623:6;6615;6608:22;6570:2;6660:9;6654:16;6679:32;6705:5;6679:32;:::i;6746:482::-;;6868:2;6856:9;6847:7;6843:23;6839:32;6836:2;;;6889:6;6881;6874:22;6836:2;6934:9;6921:23;6967:18;6959:6;6956:30;6953:2;;;7004:6;6996;6989:22;6953:2;7032:22;;7085:4;7077:13;;7073:27;-1:-1:-1;7063:2:1;;7119:6;7111;7104:22;7063:2;7147:75;7214:7;7209:2;7196:16;7191:2;7187;7183:11;7147:75;:::i;7233:190::-;;7345:2;7333:9;7324:7;7320:23;7316:32;7313:2;;;7366:6;7358;7351:22;7313:2;-1:-1:-1;7394:23:1;;7303:120;-1:-1:-1;7303:120:1:o;7428:266::-;;;7557:2;7545:9;7536:7;7532:23;7528:32;7525:2;;;7578:6;7570;7563:22;7525:2;7619:9;7606:23;7596:33;;7648:40;7684:2;7673:9;7669:18;7648:40;:::i;7699:258::-;;;7828:2;7816:9;7807:7;7803:23;7799:32;7796:2;;;7849:6;7841;7834:22;7796:2;-1:-1:-1;;7877:23:1;;;7947:2;7932:18;;;7919:32;;-1:-1:-1;7786:171:1:o;7962:334::-;;;;8108:2;8096:9;8087:7;8083:23;8079:32;8076:2;;;8129:6;8121;8114:22;8076:2;8170:9;8157:23;8147:33;;8227:2;8216:9;8212:18;8199:32;8189:42;;8250:40;8286:2;8275:9;8271:18;8250:40;:::i;:::-;8240:50;;8066:230;;;;;:::o;8301:196::-;;8412:2;8400:9;8391:7;8387:23;8383:32;8380:2;;;8433:6;8425;8418:22;8380:2;8461:30;8481:9;8461:30;:::i;8502:194::-;;8612:2;8600:9;8591:7;8587:23;8583:32;8580:2;;;8633:6;8625;8618:22;8580:2;8661:29;8680:9;8661:29;:::i;8701:270::-;;;8828:2;8816:9;8807:7;8803:23;8799:32;8796:2;;;8849:6;8841;8834:22;8796:2;8877:29;8896:9;8877:29;:::i;8976:259::-;;9057:5;9051:12;9084:6;9079:3;9072:19;9100:63;9156:6;9149:4;9144:3;9140:14;9133:4;9126:5;9122:16;9100:63;:::i;:::-;9217:2;9196:15;-1:-1:-1;;9192:29:1;9183:39;;;;9224:4;9179:50;;9027:208;-1:-1:-1;;9027:208:1:o;9240:274::-;;9407:6;9401:13;9423:53;9469:6;9464:3;9457:4;9449:6;9445:17;9423:53;:::i;:::-;9492:16;;;;;9377:137;-1:-1:-1;;9377:137:1:o;9519:750::-;;-1:-1:-1;;;9925:3:1;9918:22;9969:6;9963:13;9985:61;10039:6;10035:1;10030:3;10026:11;10019:4;10011:6;10007:17;9985:61;:::i;:::-;-1:-1:-1;;;10105:1:1;10065:16;;;10097:10;;;10090:23;10138:13;;10160:62;10138:13;10209:1;10201:10;;10194:4;10182:17;;10160:62;:::i;:::-;10242:17;10261:1;10238:25;;9908:361;-1:-1:-1;;;;9908:361:1:o;10274:203::-;-1:-1:-1;;;;;10438:32:1;;;;10420:51;;10408:2;10393:18;;10375:102::o;10482:506::-;-1:-1:-1;;;;;10767:15:1;;;10749:34;;10819:15;;10814:2;10799:18;;10792:43;10866:2;10851:18;;10844:34;;;10914:3;10909:2;10894:18;;10887:31;;;10482:506;;10935:47;;10962:19;;10954:6;10935:47;:::i;:::-;10927:55;10701:287;-1:-1:-1;;;;;;10701:287:1:o;10993:187::-;11158:14;;11151:22;11133:41;;11121:2;11106:18;;11088:92::o;11185:268::-;11372:14;;11365:22;11347:41;;11431:14;11424:22;11419:2;11404:18;;11397:50;11335:2;11320:18;;11302:151::o;11458:221::-;;11607:2;11596:9;11589:21;11627:46;11669:2;11658:9;11654:18;11646:6;11627:46;:::i;11684:326::-;11886:2;11868:21;;;11925:1;11905:18;;;11898:29;-1:-1:-1;;;11958:2:1;11943:18;;11936:33;12001:2;11986:18;;11858:152::o;12015:326::-;12217:2;12199:21;;;12256:1;12236:18;;;12229:29;-1:-1:-1;;;12289:2:1;12274:18;;12267:33;12332:2;12317:18;;12189:152::o;12346:414::-;12548:2;12530:21;;;12587:2;12567:18;;;12560:30;12626:34;12621:2;12606:18;;12599:62;-1:-1:-1;;;12692:2:1;12677:18;;12670:48;12750:3;12735:19;;12520:240::o;12765:326::-;12967:2;12949:21;;;13006:1;12986:18;;;12979:29;-1:-1:-1;;;13039:2:1;13024:18;;13017:33;13082:2;13067:18;;12939:152::o;13096:352::-;13298:2;13280:21;;;13337:2;13317:18;;;13310:30;13376;13371:2;13356:18;;13349:58;13439:2;13424:18;;13270:178::o;13453:326::-;13655:2;13637:21;;;13694:1;13674:18;;;13667:29;-1:-1:-1;;;13727:2:1;13712:18;;13705:33;13770:2;13755:18;;13627:152::o;13784:400::-;13986:2;13968:21;;;14025:2;14005:18;;;13998:30;14064:34;14059:2;14044:18;;14037:62;-1:-1:-1;;;14130:2:1;14115:18;;14108:34;14174:3;14159:19;;13958:226::o;14189:349::-;14391:2;14373:21;;;14430:2;14410:18;;;14403:30;14469:27;14464:2;14449:18;;14442:55;14529:2;14514:18;;14363:175::o;14543:326::-;14745:2;14727:21;;;14784:1;14764:18;;;14757:29;-1:-1:-1;;;14817:2:1;14802:18;;14795:33;14860:2;14845:18;;14717:152::o;14874:326::-;15076:2;15058:21;;;15115:1;15095:18;;;15088:29;-1:-1:-1;;;15148:2:1;15133:18;;15126:33;15191:2;15176:18;;15048:152::o;15205:402::-;15407:2;15389:21;;;15446:2;15426:18;;;15419:30;15485:34;15480:2;15465:18;;15458:62;-1:-1:-1;;;15551:2:1;15536:18;;15529:36;15597:3;15582:19;;15379:228::o;15612:408::-;15814:2;15796:21;;;15853:2;15833:18;;;15826:30;15892:34;15887:2;15872:18;;15865:62;-1:-1:-1;;;15958:2:1;15943:18;;15936:42;16010:3;15995:19;;15786:234::o;16025:326::-;16227:2;16209:21;;;16266:1;16246:18;;;16239:29;-1:-1:-1;;;16299:2:1;16284:18;;16277:33;16342:2;16327:18;;16199:152::o;16356:326::-;16558:2;16540:21;;;16597:1;16577:18;;;16570:29;-1:-1:-1;;;16630:2:1;16615:18;;16608:33;16673:2;16658:18;;16530:152::o;16687:420::-;16889:2;16871:21;;;16928:2;16908:18;;;16901:30;16967:34;16962:2;16947:18;;16940:62;17038:26;17033:2;17018:18;;17011:54;17097:3;17082:19;;16861:246::o;17112:406::-;17314:2;17296:21;;;17353:2;17333:18;;;17326:30;17392:34;17387:2;17372:18;;17365:62;-1:-1:-1;;;17458:2:1;17443:18;;17436:40;17508:3;17493:19;;17286:232::o;17523:405::-;17725:2;17707:21;;;17764:2;17744:18;;;17737:30;17803:34;17798:2;17783:18;;17776:62;-1:-1:-1;;;17869:2:1;17854:18;;17847:39;17918:3;17903:19;;17697:231::o;17933:326::-;18135:2;18117:21;;;18174:1;18154:18;;;18147:29;-1:-1:-1;;;18207:2:1;18192:18;;18185:33;18250:2;18235:18;;18107:152::o;18264:326::-;18466:2;18448:21;;;18505:1;18485:18;;;18478:29;-1:-1:-1;;;18538:2:1;18523:18;;18516:33;18581:2;18566:18;;18438:152::o;18595:356::-;18797:2;18779:21;;;18816:18;;;18809:30;18875:34;18870:2;18855:18;;18848:62;18942:2;18927:18;;18769:182::o;18956:326::-;19158:2;19140:21;;;19197:1;19177:18;;;19170:29;-1:-1:-1;;;19230:2:1;19215:18;;19208:33;19273:2;19258:18;;19130:152::o;19287:326::-;19489:2;19471:21;;;19528:1;19508:18;;;19501:29;-1:-1:-1;;;19561:2:1;19546:18;;19539:33;19604:2;19589:18;;19461:152::o;19618:408::-;19820:2;19802:21;;;19859:2;19839:18;;;19832:30;19898:34;19893:2;19878:18;;19871:62;-1:-1:-1;;;19964:2:1;19949:18;;19942:42;20016:3;20001:19;;19792:234::o;20031:326::-;20233:2;20215:21;;;20272:1;20252:18;;;20245:29;-1:-1:-1;;;20305:2:1;20290:18;;20283:33;20348:2;20333:18;;20205:152::o;20362:356::-;20564:2;20546:21;;;20583:18;;;20576:30;20642:34;20637:2;20622:18;;20615:62;20709:2;20694:18;;20536:182::o;20723:405::-;20925:2;20907:21;;;20964:2;20944:18;;;20937:30;21003:34;20998:2;20983:18;;20976:62;-1:-1:-1;;;21069:2:1;21054:18;;21047:39;21118:3;21103:19;;20897:231::o;21133:411::-;21335:2;21317:21;;;21374:2;21354:18;;;21347:30;21413:34;21408:2;21393:18;;21386:62;-1:-1:-1;;;21479:2:1;21464:18;;21457:45;21534:3;21519:19;;21307:237::o;21549:326::-;21751:2;21733:21;;;21790:1;21770:18;;;21763:29;-1:-1:-1;;;21823:2:1;21808:18;;21801:33;21866:2;21851:18;;21723:152::o;21880:397::-;22082:2;22064:21;;;22121:2;22101:18;;;22094:30;22160:34;22155:2;22140:18;;22133:62;-1:-1:-1;;;22226:2:1;22211:18;;22204:31;22267:3;22252:19;;22054:223::o;22282:326::-;22484:2;22466:21;;;22523:1;22503:18;;;22496:29;-1:-1:-1;;;22556:2:1;22541:18;;22534:33;22599:2;22584:18;;22456:152::o;22613:326::-;22815:2;22797:21;;;22854:1;22834:18;;;22827:29;-1:-1:-1;;;22887:2:1;22872:18;;22865:33;22930:2;22915:18;;22787:152::o;22944:326::-;23146:2;23128:21;;;23185:1;23165:18;;;23158:29;-1:-1:-1;;;23218:2:1;23203:18;;23196:33;23261:2;23246:18;;23118:152::o;23275:413::-;23477:2;23459:21;;;23516:2;23496:18;;;23489:30;23555:34;23550:2;23535:18;;23528:62;-1:-1:-1;;;23621:2:1;23606:18;;23599:47;23678:3;23663:19;;23449:239::o;23693:353::-;23895:2;23877:21;;;23934:2;23914:18;;;23907:30;23973:31;23968:2;23953:18;;23946:59;24037:2;24022:18;;23867:179::o;24051:326::-;24253:2;24235:21;;;24292:1;24272:18;;;24265:29;-1:-1:-1;;;24325:2:1;24310:18;;24303:33;24368:2;24353:18;;24225:152::o;24382:326::-;24584:2;24566:21;;;24623:1;24603:18;;;24596:29;-1:-1:-1;;;24656:2:1;24641:18;;24634:33;24699:2;24684:18;;24556:152::o;24713:188::-;24887:6;24875:19;;;;24857:38;;24845:2;24830:18;;24812:89::o;24906:177::-;25052:25;;;25040:2;25025:18;;25007:76::o;25088:248::-;25262:25;;;25318:2;25303:18;;25296:34;25250:2;25235:18;;25217:119::o;25341:262::-;25537:4;25525:17;;;25507:36;;25579:17;;25574:2;25559:18;;25552:45;25495:2;25480:18;;25462:141::o;25608:251::-;25678:2;25672:9;25708:17;;;25755:18;25740:34;;25776:22;;;25737:62;25734:2;;;25802:18;;:::i;:::-;25838:2;25831:22;25652:207;;-1:-1:-1;25652:207:1:o;25864:192::-;;25963:18;25955:6;25952:30;25949:2;;;25985:18;;:::i;:::-;-1:-1:-1;26045:4:1;26026:17;;;26022:28;;25939:117::o;26061:224::-;;26128:6;26161:2;26158:1;26154:10;26191:2;26188:1;26184:10;26222:3;26218:2;26214:12;26209:3;26206:21;26203:2;;;26230:18;;:::i;:::-;26266:13;;26108:177;-1:-1:-1;;;;26108:177:1:o;26290:128::-;;26361:1;26357:6;26354:1;26351:13;26348:2;;;26367:18;;:::i;:::-;-1:-1:-1;26403:9:1;;26338:80::o;26423:204::-;;26497:4;26494:1;26490:12;26529:4;26526:1;26522:12;26564:3;26558:4;26554:14;26549:3;26546:23;26543:2;;;26572:18;;:::i;:::-;26608:13;;26469:158;-1:-1:-1;;;26469:158:1:o;26632:120::-;;26698:1;26688:2;;26703:18;;:::i;:::-;-1:-1:-1;26737:9:1;;26678:74::o;26757:168::-;;26863:1;26859;26855:6;26851:14;26848:1;26845:21;26840:1;26833:9;26826:17;26822:45;26819:2;;;26870:18;;:::i;:::-;-1:-1:-1;26910:9:1;;26809:116::o;26930:217::-;;26998:6;27054:10;;;;27024;;27076:12;;;27073:2;;;27091:18;;:::i;:::-;27128:13;;26978:169;-1:-1:-1;;;26978:169:1:o;27152:125::-;;27220:1;27217;27214:8;27211:2;;;27225:18;;:::i;:::-;-1:-1:-1;27262:9:1;;27201:76::o;27282:195::-;;27357:4;27354:1;27350:12;27389:4;27386:1;27382:12;27414:3;27409;27406:12;27403:2;;;27421:18;;:::i;:::-;27458:13;;;27329:148;-1:-1:-1;;;27329:148:1:o;27482:258::-;27554:1;27564:113;27578:6;27575:1;27572:13;27564:113;;;27654:11;;;27648:18;27635:11;;;27628:39;27600:2;27593:10;27564:113;;;27695:6;27692:1;27689:13;27686:2;;;-1:-1:-1;;27730:1:1;27712:16;;27705:27;27535:205::o;27745:136::-;;27812:5;27802:2;;27821:18;;:::i;:::-;-1:-1:-1;;;27857:18:1;;27792:89::o;27886:380::-;27971:1;27961:12;;28018:1;28008:12;;;28029:2;;28083:4;28075:6;28071:17;28061:27;;28029:2;28136;28128:6;28125:14;28105:18;28102:38;28099:2;;;28182:10;28177:3;28173:20;28170:1;28163:31;28217:4;28214:1;28207:15;28245:4;28242:1;28235:15;28099:2;;27941:325;;;:::o;28271:135::-;;-1:-1:-1;;28331:17:1;;28328:2;;;28351:18;;:::i;:::-;-1:-1:-1;28398:1:1;28387:13;;28318:88::o;28411:112::-;;28469:1;28459:2;;28474:18;;:::i;:::-;-1:-1:-1;28508:9:1;;28449:74::o;28528:127::-;28589:10;28584:3;28580:20;28577:1;28570:31;28620:4;28617:1;28610:15;28644:4;28641:1;28634:15;28660:127;28721:10;28716:3;28712:20;28709:1;28702:31;28752:4;28749:1;28742:15;28776:4;28773:1;28766:15;28792:127;28853:10;28848:3;28844:20;28841:1;28834:31;28884:4;28881:1;28874:15;28908:4;28905:1;28898:15;28924:133;-1:-1:-1;;;;;;29000:32:1;;28990:43;;28980:2;;29047:1;29044;29037:12
Swarm Source
ipfs://312ea8609e9199b87627fc8537f66acf2becd28ef8f9f4a1cecec153875a41b6
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.