This token is reported to have been spammed to a large number of addresses. Please treat it with caution.
ERC-721
Overview
Max Total Supply
0 ERC-721 TOKEN*
Holders
188
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 ERC-721 TOKEN*Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ThreeQSeriesZeroERC721
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT /* <__ / ___ ___ / __> ___ _ _ <_> ___ ___ |_ / ___ _ _ ___ <_ \/ . | |___| \__ \/ ._>| '_>| |/ ._><_-< / / / ._>| '_>/ . \ <___/\_ | <___/\___.|_| |_|\___./__/ /___|\___.|_| \___/ */ pragma solidity 0.8.11; pragma abicoder v2; import "./ERC721.sol"; import "./AccessControl.sol"; import "./Counters.sol"; import "./Strings.sol"; contract ThreeQSeriesZeroERC721 is ERC721, AccessControl { using Counters for Counters.Counter; using Strings for uint256; // ==================================================== // ROLES // ==================================================== bytes32 public constant PROJECT_ADMINS_ROLE = keccak256("PROJECT_ADMINS_ROLE"); // ==================================================== // EVENTS // ==================================================== event TokenUriUpdated(uint256 tokenId, string uri); event TokenMinted(uint256 tokenIndex, address minter, TokenSaleState saleStatus); event SupremeMinted(uint256 omToken1, uint256 omToken2, uint256 onToken3, uint256 supremeToken); event MintPriceChanged(uint256 newPrice); // ==================================================== // ENUMS & STRUCTS // ==================================================== enum TokenSaleState { PAUSED, AUCTION, PRE_SALE, PUBLIC_SALE, OM_BURN } enum TokenType { OM, SUPREME } struct TokenDetails { uint256 tokenIndex; TokenType tokenType; uint256[3] burnedTokens; } // ==================================================== // STATE // ==================================================== // supply/reservation constants uint public constant MAX_PER_TX = 6; uint public constant MAX_COMPOSER_EDITIONS = 5; uint public constant MAX_RESERVED = 133; uint public constant MAX_OM_SUPPLY = 3338; // metadata string private _baseURIExtended; mapping (uint256 => string) private _tokenURIs; // general vars, counter, etc Counters.Counter private _tokenIdCounter; Counters.Counter private _composerEditionCounter; uint private _reservedTokensCounter; TokenSaleState public tokenSaleState = TokenSaleState.PAUSED; uint256 public mintPrice = 0.1 ether; string public provenanceHash; mapping (uint256 => TokenDetails) public tokenData; mapping(address => uint) public presaleParticipants; // ==================================================== // CONSTRUCTOR // ==================================================== constructor( string memory _name, string memory _symbol, string memory _baseUri ) ERC721(_name, _symbol) { _setupRole(DEFAULT_ADMIN_ROLE, msg.sender); _setupRole(PROJECT_ADMINS_ROLE, msg.sender); _baseURIExtended = _baseUri; } // ==================================================== // OVERRIDES // ==================================================== function supportsInterface(bytes4 interfaceId) public view override(ERC721, AccessControl) returns (bool) { return super.supportsInterface(interfaceId); } // ==================================================== // ADMIN // ==================================================== function setPresaleParticipants(address[] memory participants, uint allocation) public onlyRole(PROJECT_ADMINS_ROLE) { for (uint16 i = 0; i < participants.length; i++) { presaleParticipants[participants[i]] = allocation; } } function setProvenanceHash(string memory pHash) public onlyRole(PROJECT_ADMINS_ROLE) { // only allow provenance to be set once require(bytes(provenanceHash).length == 0, "Provenance hash already set"); provenanceHash = pHash; } function toggleSaleState(uint8 state) public onlyRole(PROJECT_ADMINS_ROLE) { tokenSaleState = TokenSaleState(state); } function changeMintPrice(uint256 _newPrice) public onlyRole(PROJECT_ADMINS_ROLE) { mintPrice = _newPrice; emit MintPriceChanged(_newPrice); } function setBaseUri(string memory _newBaseUri) public onlyRole(PROJECT_ADMINS_ROLE) { _baseURIExtended = _newBaseUri; } function updateTokenURI(uint256 _tokenId, string memory _newTokenURI) public onlyRole(PROJECT_ADMINS_ROLE) { _tokenURIs[_tokenId] = _newTokenURI; emit TokenUriUpdated(_tokenId, _newTokenURI); } function mintComposerEdition() public onlyRole(PROJECT_ADMINS_ROLE) { require(_composerEditionCounter.current() < MAX_COMPOSER_EDITIONS, "Request will exceed composer editions max"); internalOmMint(msg.sender, 1, TokenSaleState.AUCTION); _composerEditionCounter.increment(); } function reserveTokens(address recipient, uint numTokens) public onlyRole(PROJECT_ADMINS_ROLE) { require(_reservedTokensCounter + numTokens <= MAX_RESERVED, "Request will exceed reserve max"); internalOmMint(recipient, numTokens, TokenSaleState.PRE_SALE); _reservedTokensCounter += numTokens; } function withdrawFunds(address payable recipient, uint256 amount) public onlyRole(DEFAULT_ADMIN_ROLE) { require(recipient != address(0), "Invalid recipient address"); recipient.transfer(amount); } // ==================================================== // INTERNAL UTILS // ==================================================== function _baseURI() internal view virtual override returns (string memory) { return _baseURIExtended; } function internalOmMint(address recipient, uint numTokens, TokenSaleState _tokenSaleState) internal { require(_tokenIdCounter.current() + numTokens <= MAX_OM_SUPPLY, "Purchase would exceed max supply"); for (uint i = 0; i < numTokens; i++) { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(recipient, tokenId); tokenData[tokenId] = TokenDetails({ tokenIndex: tokenId, tokenType: TokenType.OM, burnedTokens: [uint256(0) , uint256(0), uint256(0)] }); emit TokenMinted(tokenId, recipient, _tokenSaleState); } } // ==================================================== // PUBLIC API // ==================================================== function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // if a custom tokenURI has not been set, return base + tokenId.json if(bytes(_tokenURI).length == 0) { return string(abi.encodePacked(base, tokenId.toString(), ".json")); } // a custom tokenURI has been set - likely after metadata IPFS migration return _tokenURI; } function getSupplyData() public view returns( uint256 _currentToken, uint256 _maxSupply, uint256 _mintPrice, TokenSaleState _tokenSaleState, bool _isTokenHolder) { _currentToken = _tokenIdCounter.current(); _maxSupply = MAX_OM_SUPPLY; _mintPrice = mintPrice; _tokenSaleState = tokenSaleState; _isTokenHolder = balanceOf(msg.sender) > 0; } function validateTokenForBurn(uint256 tIndex) public view returns(bool burnable, string memory message) { if(_exists(tIndex)) { if(msg.sender == ownerOf(tIndex)) { if(tokenData[tIndex].tokenType == TokenType.SUPREME) { burnable = false; message = "SupremeToken"; } else { burnable = true; } } else { burnable = false; message = "NotOwned"; } } else { burnable = false; message = "InvalidToken"; } } function presaleMint(uint8 numTokens) public payable { // standard checks require(tokenSaleState == TokenSaleState.PRE_SALE, "Pre-Sale sale is not active"); require(msg.value >= mintPrice * numTokens, "Insufficient ether sent"); // check private mint allocation require(numTokens <= presaleParticipants[msg.sender], "Insufficient pre-sale allocation"); // decrement pre-sale allocation presaleParticipants[msg.sender] -= numTokens; internalOmMint(msg.sender, numTokens, TokenSaleState.PRE_SALE); } function publicMint(uint numTokens) public payable { // standard checks require(tokenSaleState == TokenSaleState.PUBLIC_SALE, "Public sale is not active"); require(numTokens <= MAX_PER_TX,"Max 6 per tx allowed"); require(msg.value >= mintPrice * numTokens, "Insufficient ether sent"); require(!Address.isContract(msg.sender), "Contracts forbidden from buying"); internalOmMint(msg.sender, numTokens, TokenSaleState.PUBLIC_SALE); } function burnTokens(uint256 token1, uint256 token2, uint256 token3) public { require(tokenSaleState == TokenSaleState.OM_BURN, "Burn phase is not active"); // ensure requested burn tokens are owned by sender require(msg.sender == ownerOf(token1), "1st provided token not owned"); require(msg.sender == ownerOf(token2), "2nd provided token not owned"); require(msg.sender == ownerOf(token3), "3rd provided token not owned"); // ensure requested burn tokens are OM tokens require(tokenData[token1].tokenType == TokenType.OM, "1st provided token not of type OM"); require(tokenData[token2].tokenType == TokenType.OM, "2nd provided token not of type OM"); require(tokenData[token3].tokenType == TokenType.OM, "3rd provided token not of type OM"); // burn OM tokens _burn(token1); _burn(token2); _burn(token3); // mint supreme token uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(msg.sender, tokenId); tokenData[tokenId] = TokenDetails({ tokenIndex: tokenId, tokenType: TokenType.SUPREME, burnedTokens: [token1, token2, token3] }); emit SupremeMinted(token1, token2, token3, tokenId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IAccessControl.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; 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"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// 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 meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT 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); }
// SPDX-License-Identifier: MIT 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); } }
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":"string","name":"_baseUri","type":"string"}],"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":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"MintPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"omToken1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"omToken2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onToken3","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supremeToken","type":"uint256"}],"name":"SupremeMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"enum ThreeQSeriesZeroERC721.TokenSaleState","name":"saleStatus","type":"uint8"}],"name":"TokenMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"TokenUriUpdated","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_COMPOSER_EDITIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_OM_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROJECT_ADMINS_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"token3","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"_currentToken","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"enum ThreeQSeriesZeroERC721.TokenSaleState","name":"_tokenSaleState","type":"uint8"},{"internalType":"bool","name":"_isTokenHolder","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"mintComposerEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPrice","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleParticipants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenanceHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"setPresaleParticipants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"pHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"state","type":"uint8"}],"name":"toggleSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenData","outputs":[{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"enum ThreeQSeriesZeroERC721.TokenType","name":"tokenType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSaleState","outputs":[{"internalType":"enum ThreeQSeriesZeroERC721.TokenSaleState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_newTokenURI","type":"string"}],"name":"updateTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tIndex","type":"uint256"}],"name":"validateTokenForBurn","outputs":[{"internalType":"bool","name":"burnable","type":"bool"},{"internalType":"string","name":"message","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600c805460ff1916905567016345785d8a0000600d553480156200002757600080fd5b506040516200371f3803806200371f8339810160408190526200004a91620002fc565b8251839083906200006390600090602085019062000189565b5080516200007990600190602084019062000189565b506200008b91506000905033620000d5565b620000b67e2796186c31becda37e2223d2461a1c5b72608fafbfa68e364397ccd57fb87333620000d5565b8051620000cb90600790602084019062000189565b50505050620003ca565b620000e18282620000e5565b5050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16620000e15760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001453390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b82805462000197906200038d565b90600052602060002090601f016020900481019282620001bb576000855562000206565b82601f10620001d657805160ff191683800117855562000206565b8280016001018555821562000206579182015b8281111562000206578251825591602001919060010190620001e9565b506200021492915062000218565b5090565b5b8082111562000214576000815560010162000219565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200025757600080fd5b81516001600160401b03808211156200027457620002746200022f565b604051601f8301601f19908116603f011681019082821181831017156200029f576200029f6200022f565b81604052838152602092508683858801011115620002bc57600080fd5b600091505b83821015620002e05785820183015181830184015290820190620002c1565b83821115620002f25760008385830101525b9695505050505050565b6000806000606084860312156200031257600080fd5b83516001600160401b03808211156200032a57600080fd5b620003388783880162000245565b945060208601519150808211156200034f57600080fd5b6200035d8783880162000245565b935060408601519150808211156200037457600080fd5b50620003838682870162000245565b9150509250925092565b600181811c90821680620003a257607f821691505b60208210811415620003c457634e487b7160e01b600052602260045260246000fd5b50919050565b61334580620003da6000396000f3fe60806040526004361061028c5760003560e01c806370a0823111610164578063b4b5b48f116100c6578063d547741f1161008a578063ec9ac4fe11610064578063ec9ac4fe1461080d578063f43a22dc1461083b578063f617f9201461085057600080fd5b8063d547741f1461078f578063e833fe37146107af578063e985e9c5146107c457600080fd5b8063b4b5b48f146106d5578063b88d4fde1461071a578063c10753291461073a578063c6ab67a31461075a578063c87b56dd1461076f57600080fd5b806395d89b4111610128578063a22cb46511610102578063a22cb46514610673578063a2cdc91a14610693578063a3fafb5b146106b557600080fd5b806395d89b4114610629578063a0bcfc7f1461063e578063a217fddf1461065e57600080fd5b806370a082311461056757806378cf19e91461058757806379774338146105a7578063915c2720146105cd57806391d14854146105e357600080fd5b80632db115441161020d57806342842e0e116101d15780636b331104116101ab5780636b3311041461051d5780636ba90c6e146105325780636fb2d5b31461054757600080fd5b806342842e0e146104c75780636352211e146104e75780636817c76c1461050757600080fd5b80632db115441461042d5780632f2ff15d1461044057806336568abe146104605780633fd1736614610480578063427d3f85146104a057600080fd5b8063095ea7b311610254578063095ea7b31461037d578063109695231461039d57806318e97fd1146103bd57806323b872dd146103dd578063248a9ca3146103fd57600080fd5b806301ffc9a71461029157806304681a28146102c657806306fdde03146102e8578063081812fc1461030a578063083a7baa14610342575b600080fd5b34801561029d57600080fd5b506102b16102ac366004612b15565b610863565b60405190151581526020015b60405180910390f35b3480156102d257600080fd5b506102e66102e1366004612b32565b610874565b005b3480156102f457600080fd5b506102fd610ca7565b6040516102bd9190612bb6565b34801561031657600080fd5b5061032a610325366004612bc9565b610d39565b6040516001600160a01b0390911681526020016102bd565b34801561034e57600080fd5b5061036f61035d366004612bf7565b60106020526000908152604090205481565b6040519081526020016102bd565b34801561038957600080fd5b506102e6610398366004612c14565b610dce565b3480156103a957600080fd5b506102e66103b8366004612cff565b610ee4565b3480156103c957600080fd5b506102e66103d8366004612d34565b610f6c565b3480156103e957600080fd5b506102e66103f8366004612d7b565b610fe3565b34801561040957600080fd5b5061036f610418366004612bc9565b60009081526006602052604090206001015490565b6102e661043b366004612bc9565b61105e565b34801561044c57600080fd5b506102e661045b366004612dbc565b6111d0565b34801561046c57600080fd5b506102e661047b366004612dbc565b6111f6565b34801561048c57600080fd5b506102e661049b366004612bc9565b611282565b3480156104ac57600080fd5b50600c546104ba9060ff1681565b6040516102bd9190612e16565b3480156104d357600080fd5b506102e66104e2366004612d7b565b6112d7565b3480156104f357600080fd5b5061032a610502366004612bc9565b6112f2565b34801561051357600080fd5b5061036f600d5481565b34801561052957600080fd5b5061036f600581565b34801561053e57600080fd5b5061036f608581565b34801561055357600080fd5b506102e6610562366004612e24565b611369565b34801561057357600080fd5b5061036f610582366004612bf7565b6113bc565b34801561059357600080fd5b506102e66105a2366004612c14565b611443565b3480156105b357600080fd5b506105bc6114e2565b6040516102bd959493929190612e47565b3480156105d957600080fd5b5061036f610d0a81565b3480156105ef57600080fd5b506102b16105fe366004612dbc565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561063557600080fd5b506102fd61151d565b34801561064a57600080fd5b506102e6610659366004612cff565b61152c565b34801561066a57600080fd5b5061036f600081565b34801561067f57600080fd5b506102e661068e366004612e7b565b611558565b34801561069f57600080fd5b5061036f6000805160206132f083398151915281565b3480156106c157600080fd5b506102e66106d0366004612eae565b61161d565b3480156106e157600080fd5b5061070c6106f0366004612bc9565b600f602052600090815260409020805460019091015460ff1682565b6040516102bd929190612f66565b34801561072657600080fd5b506102e6610735366004612f8a565b6116a6565b34801561074657600080fd5b506102e6610755366004612c14565b611722565b34801561076657600080fd5b506102fd6117ba565b34801561077b57600080fd5b506102fd61078a366004612bc9565b611848565b34801561079b57600080fd5b506102e66107aa366004612dbc565b611998565b3480156107bb57600080fd5b506102e66119be565b3480156107d057600080fd5b506102b16107df36600461300a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561081957600080fd5b5061082d610828366004612bc9565b611a5b565b6040516102bd929190613038565b34801561084757600080fd5b5061036f600681565b6102e661085e366004612e24565b611b56565b600061086e82611cb5565b92915050565b6004600c5460ff16600481111561088d5761088d612dec565b146108df5760405162461bcd60e51b815260206004820152601860248201527f4275726e207068617365206973206e6f7420616374697665000000000000000060448201526064015b60405180910390fd5b6108e8836112f2565b6001600160a01b0316336001600160a01b0316146109485760405162461bcd60e51b815260206004820152601c60248201527f3173742070726f766964656420746f6b656e206e6f74206f776e65640000000060448201526064016108d6565b610951826112f2565b6001600160a01b0316336001600160a01b0316146109b15760405162461bcd60e51b815260206004820152601c60248201527f326e642070726f766964656420746f6b656e206e6f74206f776e65640000000060448201526064016108d6565b6109ba816112f2565b6001600160a01b0316336001600160a01b031614610a1a5760405162461bcd60e51b815260206004820152601c60248201527f3372642070726f766964656420746f6b656e206e6f74206f776e65640000000060448201526064016108d6565b6000838152600f6020526040812060019081015460ff1690811115610a4157610a41612dec565b14610a985760405162461bcd60e51b815260206004820152602160248201527f3173742070726f766964656420746f6b656e206e6f74206f662074797065204f6044820152604d60f81b60648201526084016108d6565b6000828152600f6020526040812060019081015460ff1690811115610abf57610abf612dec565b14610b165760405162461bcd60e51b815260206004820152602160248201527f326e642070726f766964656420746f6b656e206e6f74206f662074797065204f6044820152604d60f81b60648201526084016108d6565b6000818152600f6020526040812060019081015460ff1690811115610b3d57610b3d612dec565b14610b945760405162461bcd60e51b815260206004820152602160248201527f3372642070726f766964656420746f6b656e206e6f74206f662074797065204f6044820152604d60f81b60648201526084016108d6565b610b9d83611cda565b610ba682611cda565b610baf81611cda565b6000610bba60095490565b9050610bca600980546001019055565b610bd43382611d75565b60408051606081019091528181526020810160018152604080516060810182528781526020818101889052818301879052928301526000848152600f835220825181559082015160018083018054909160ff19909116908381811115610c3c57610c3c612dec565b02179055506040820151610c569060028301906003612a39565b50506040805186815260208101869052908101849052606081018390527f7aaab8e5dc83b76862c33701e61dc84f6763bf458fe77eba6b8f0b4f7fb2882e915060800160405180910390a150505050565b606060008054610cb690613053565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce290613053565b8015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610db25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b506000908152600460205260409020546001600160a01b031690565b6000610dd9826112f2565b9050806001600160a01b0316836001600160a01b03161415610e475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d6565b336001600160a01b0382161480610e635750610e6381336107df565b610ed55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d6565b610edf8383611d8f565b505050565b6000805160206132f0833981519152610efd8133611dfd565b600e8054610f0a90613053565b159050610f595760405162461bcd60e51b815260206004820152601b60248201527f50726f76656e616e6365206861736820616c726561647920736574000000000060448201526064016108d6565b8151610edf90600e906020850190612a77565b6000805160206132f0833981519152610f858133611dfd565b60008381526008602090815260409091208351610fa492850190612a77565b507f652c9498726ae446882619d79306dfe2594d5d5a008eaad0a720ee55ebf8e8b88383604051610fd692919061308e565b60405180910390a1505050565b610fed3382611e7d565b6110535760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016108d6565b610edf838383611f74565b6003600c5460ff16600481111561107757611077612dec565b146110c45760405162461bcd60e51b815260206004820152601960248201527f5075626c69632073616c65206973206e6f74206163746976650000000000000060448201526064016108d6565b60068111156111155760405162461bcd60e51b815260206004820152601460248201527f4d617820362070657220747820616c6c6f77656400000000000000000000000060448201526064016108d6565b80600d5461112391906130bd565b3410156111725760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742065746865722073656e7400000000000000000060448201526064016108d6565b333b156111c15760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726163747320666f7262696464656e2066726f6d20627579696e670060448201526064016108d6565b6111cd33826003612114565b50565b6000828152600660205260409020600101546111ec8133611dfd565b610edf8383612280565b6001600160a01b03811633146112745760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108d6565b61127e8282612322565b5050565b6000805160206132f083398151915261129b8133611dfd565b600d8290556040518281527f25b1f9f6b6e61dfca5575239769e4450ed2e49176670837f5d1a82a9a2fc693f9060200160405180910390a15050565b610edf838383604051806020016040528060008152506116a6565b6000818152600260205260408120546001600160a01b03168061086e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d6565b6000805160206132f08339815191526113828133611dfd565b8160ff16600481111561139757611397612dec565b600c805460ff191660018360048111156113b3576113b3612dec565b02179055505050565b60006001600160a01b0382166114275760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108d6565b506001600160a01b031660009081526003602052604090205490565b6000805160206132f083398151915261145c8133611dfd565b608582600b5461146c91906130dc565b11156114ba5760405162461bcd60e51b815260206004820152601f60248201527f526571756573742077696c6c206578636565642072657365727665206d61780060448201526064016108d6565b6114c683836002612114565b81600b60008282546114d891906130dc565b9091555050505050565b60008060008060006114f360095490565b600d54600c54919650610d0a9550935060ff1691506000611513336113bc565b1190509091929394565b606060018054610cb690613053565b6000805160206132f08339815191526115458133611dfd565b8151610edf906007906020850190612a77565b6001600160a01b0382163314156115b15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000805160206132f08339815191526116368133611dfd565b60005b83518161ffff1610156116a0578260106000868461ffff1681518110611661576116616130f4565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806116989061310a565b915050611639565b50505050565b6116b03383611e7d565b6117165760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016108d6565b6116a0848484846123a5565b600061172e8133611dfd565b6001600160a01b0383166117845760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e7420616464726573730000000000000060448201526064016108d6565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501580156116a0573d6000803e3d6000fd5b600e80546117c790613053565b80601f01602080910402602001604051908101604052809291908181526020018280546117f390613053565b80156118405780601f1061181557610100808354040283529160200191611840565b820191906000526020600020905b81548152906001019060200180831161182357829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b03166118af5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e0060448201526064016108d6565b600082815260086020526040812080546118c890613053565b80601f01602080910402602001604051908101604052809291908181526020018280546118f490613053565b80156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505090506000611952612423565b9050815160001415611991578061196885612432565b60405160200161197992919061312c565b60405160208183030381529060405292505050919050565b5092915050565b6000828152600660205260409020600101546119b48133611dfd565b610edf8383612322565b6000805160206132f08339815191526119d78133611dfd565b60056119e2600a5490565b10611a415760405162461bcd60e51b815260206004820152602960248201527f526571756573742077696c6c2065786365656420636f6d706f736572206564696044820152680e8d2dedce640dac2f60bb1b60648201526084016108d6565b611a4d33600180612114565b6111cd600a80546001019055565b6000818152600260205260408120546060906001600160a01b031615611b2957611a84836112f2565b6001600160a01b0316336001600160a01b03161415611b00576000838152600f6020526040902060019081015460ff1681811115611ac457611ac4612dec565b1415611af757505060408051808201909152600c81526b29bab83932b6b2aa37b5b2b760a11b6020820152600090915091565b60019150915091565b5050604080518082019091526008815267139bdd13dddb995960c21b6020820152600090915091565b505060408051808201909152600c81526b24b73b30b634b22a37b5b2b760a11b6020820152600090915091565b6002600c5460ff166004811115611b6f57611b6f612dec565b14611bbc5760405162461bcd60e51b815260206004820152601b60248201527f5072652d53616c652073616c65206973206e6f7420616374697665000000000060448201526064016108d6565b8060ff16600d54611bcd91906130bd565b341015611c1c5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742065746865722073656e7400000000000000000060448201526064016108d6565b3360009081526010602052604090205460ff82161115611c7e5760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e74207072652d73616c6520616c6c6f636174696f6e60448201526064016108d6565b336000908152601060205260408120805460ff84169290611ca090849061316b565b909155506111cd90503360ff83166002612114565b60006001600160e01b03198216637965db0b60e01b148061086e575061086e82612530565b6000611ce5826112f2565b9050611cf2600083611d8f565b6001600160a01b0381166000908152600360205260408120805460019290611d1b90849061316b565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b61127e828260405180602001604052806000815250612580565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611dc4826112f2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff1661127e57611e3b816001600160a01b031660146125fe565b611e468360206125fe565b604051602001611e57929190613182565b60408051601f198184030181529082905262461bcd60e51b82526108d691600401612bb6565b6000818152600260205260408120546001600160a01b0316611ef65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b6000611f01836112f2565b9050806001600160a01b0316846001600160a01b03161480611f3c5750836001600160a01b0316611f3184610d39565b6001600160a01b0316145b80611f6c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611f87826112f2565b6001600160a01b031614611fef5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108d6565b6001600160a01b0382166120515760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d6565b61205c600082611d8f565b6001600160a01b038316600090815260036020526040812080546001929061208590849061316b565b90915550506001600160a01b03821660009081526003602052604081208054600192906120b39084906130dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d0a8261212160095490565b61212b91906130dc565b11156121795760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820737570706c7960448201526064016108d6565b60005b828110156116a057600061218f60095490565b905061219f600980546001019055565b6121a98582611d75565b60408051606081019091528181526020810160008152604080516060810182526000808252602082810182905282840182905293840191909152848152600f835220825181559082015160018083018054909160ff1990911690838181111561221457612214612dec565b0217905550604082015161222e9060028301906003612a39565b509050507f99f38cf3feaad38e0a2e22ef51bdd4faba32b432520a951248d77057596a425a81868560405161226593929190613203565b60405180910390a1508061227881613226565b91505061217c565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff1661127e5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556122de3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff161561127e5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6123b0848484611f74565b6123bc848484846127ae565b6116a05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108d6565b606060078054610cb690613053565b6060816124565750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612480578061246a81613226565b91506124799050600a83613257565b915061245a565b60008167ffffffffffffffff81111561249b5761249b612c40565b6040519080825280601f01601f1916602001820160405280156124c5576020820181803683370190505b5090505b8415611f6c576124da60018361316b565b91506124e7600a8661326b565b6124f29060306130dc565b60f81b818381518110612507576125076130f4565b60200101906001600160f81b031916908160001a905350612529600a86613257565b94506124c9565b60006001600160e01b031982166380ac58cd60e01b148061256157506001600160e01b03198216635b5e139f60e01b145b8061086e57506301ffc9a760e01b6001600160e01b031983161461086e565b61258a83836128f7565b61259760008484846127ae565b610edf5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108d6565b6060600061260d8360026130bd565b6126189060026130dc565b67ffffffffffffffff81111561263057612630612c40565b6040519080825280601f01601f19166020018201604052801561265a576020820181803683370190505b509050600360fc1b81600081518110612675576126756130f4565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a4576126a46130f4565b60200101906001600160f81b031916908160001a90535060006126c88460026130bd565b6126d39060016130dc565b90505b6001811115612758577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612714576127146130f4565b1a60f81b82828151811061272a5761272a6130f4565b60200101906001600160f81b031916908160001a90535060049490941c936127518161327f565b90506126d6565b5083156127a75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108d6565b9392505050565b60006001600160a01b0384163b156128ec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127f2903390899088908890600401613296565b6020604051808303816000875af192505050801561282d575060408051601f3d908101601f1916820190925261282a918101906132d2565b60015b6128d2573d80801561285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b5080516128ca5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108d6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f6c565b506001949350505050565b6001600160a01b03821661294d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d6565b6000818152600260205260409020546001600160a01b0316156129b25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d6565b6001600160a01b03821660009081526003602052604081208054600192906129db9084906130dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8260038101928215612a67579160200282015b82811115612a67578251825591602001919060010190612a4c565b50612a73929150612aea565b5090565b828054612a8390613053565b90600052602060002090601f016020900481019282612aa55760008555612a67565b82601f10612abe57805160ff1916838001178555612a67565b82800160010185558215612a675791820182811115612a67578251825591602001919060010190612a4c565b5b80821115612a735760008155600101612aeb565b6001600160e01b0319811681146111cd57600080fd5b600060208284031215612b2757600080fd5b81356127a781612aff565b600080600060608486031215612b4757600080fd5b505081359360208301359350604090920135919050565b60005b83811015612b79578181015183820152602001612b61565b838111156116a05750506000910152565b60008151808452612ba2816020860160208601612b5e565b601f01601f19169290920160200192915050565b6020815260006127a76020830184612b8a565b600060208284031215612bdb57600080fd5b5035919050565b6001600160a01b03811681146111cd57600080fd5b600060208284031215612c0957600080fd5b81356127a781612be2565b60008060408385031215612c2757600080fd5b8235612c3281612be2565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c7f57612c7f612c40565b604052919050565b600067ffffffffffffffff831115612ca157612ca1612c40565b612cb4601f8401601f1916602001612c56565b9050828152838383011115612cc857600080fd5b828260208301376000602084830101529392505050565b600082601f830112612cf057600080fd5b6127a783833560208501612c87565b600060208284031215612d1157600080fd5b813567ffffffffffffffff811115612d2857600080fd5b611f6c84828501612cdf565b60008060408385031215612d4757600080fd5b82359150602083013567ffffffffffffffff811115612d6557600080fd5b612d7185828601612cdf565b9150509250929050565b600080600060608486031215612d9057600080fd5b8335612d9b81612be2565b92506020840135612dab81612be2565b929592945050506040919091013590565b60008060408385031215612dcf57600080fd5b823591506020830135612de181612be2565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60058110612e1257612e12612dec565b9052565b6020810161086e8284612e02565b600060208284031215612e3657600080fd5b813560ff811681146127a757600080fd5b858152602081018590526040810184905260a08101612e696060830185612e02565b82151560808301529695505050505050565b60008060408385031215612e8e57600080fd5b8235612e9981612be2565b915060208301358015158114612de157600080fd5b60008060408385031215612ec157600080fd5b823567ffffffffffffffff80821115612ed957600080fd5b818501915085601f830112612eed57600080fd5b8135602082821115612f0157612f01612c40565b8160051b9250612f12818401612c56565b8281529284018101928181019089851115612f2c57600080fd5b948201945b84861015612f565785359350612f4684612be2565b8382529482019490820190612f31565b9997909101359750505050505050565b8281526040810160028310612f7d57612f7d612dec565b8260208301529392505050565b60008060008060808587031215612fa057600080fd5b8435612fab81612be2565b93506020850135612fbb81612be2565b925060408501359150606085013567ffffffffffffffff811115612fde57600080fd5b8501601f81018713612fef57600080fd5b612ffe87823560208401612c87565b91505092959194509250565b6000806040838503121561301d57600080fd5b823561302881612be2565b91506020830135612de181612be2565b8215158152604060208201526000611f6c6040830184612b8a565b600181811c9082168061306757607f821691505b6020821081141561308857634e487b7160e01b600052602260045260246000fd5b50919050565b828152604060208201526000611f6c6040830184612b8a565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156130d7576130d76130a7565b500290565b600082198211156130ef576130ef6130a7565b500190565b634e487b7160e01b600052603260045260246000fd5b600061ffff80831681811415613122576131226130a7565b6001019392505050565b6000835161313e818460208801612b5e565b835190830190613152818360208801612b5e565b64173539b7b760d91b9101908152600501949350505050565b60008282101561317d5761317d6130a7565b500390565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516131ba816017850160208801612b5e565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516131f7816028840160208801612b5e565b01602801949350505050565b8381526001600160a01b038316602082015260608101611f6c6040830184612e02565b600060001982141561323a5761323a6130a7565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261326657613266613241565b500490565b60008261327a5761327a613241565b500690565b60008161328e5761328e6130a7565b506000190190565b60006001600160a01b038087168352808616602084015250836040830152608060608301526132c86080830184612b8a565b9695505050505050565b6000602082840312156132e457600080fd5b81516127a781612aff56fe002796186c31becda37e2223d2461a1c5b72608fafbfa68e364397ccd57fb873a26469706673582212202869657c4e96e7ca52fba3d93e205a97c9081f3e81bd4440e04b3f184743e66564736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e335120536572696573205a65726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043351533000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e687474703a2f2f6170692e33712e636c75622f7365726965737a65726f2f746f6b656e732f6d657461646174612f000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061028c5760003560e01c806370a0823111610164578063b4b5b48f116100c6578063d547741f1161008a578063ec9ac4fe11610064578063ec9ac4fe1461080d578063f43a22dc1461083b578063f617f9201461085057600080fd5b8063d547741f1461078f578063e833fe37146107af578063e985e9c5146107c457600080fd5b8063b4b5b48f146106d5578063b88d4fde1461071a578063c10753291461073a578063c6ab67a31461075a578063c87b56dd1461076f57600080fd5b806395d89b4111610128578063a22cb46511610102578063a22cb46514610673578063a2cdc91a14610693578063a3fafb5b146106b557600080fd5b806395d89b4114610629578063a0bcfc7f1461063e578063a217fddf1461065e57600080fd5b806370a082311461056757806378cf19e91461058757806379774338146105a7578063915c2720146105cd57806391d14854146105e357600080fd5b80632db115441161020d57806342842e0e116101d15780636b331104116101ab5780636b3311041461051d5780636ba90c6e146105325780636fb2d5b31461054757600080fd5b806342842e0e146104c75780636352211e146104e75780636817c76c1461050757600080fd5b80632db115441461042d5780632f2ff15d1461044057806336568abe146104605780633fd1736614610480578063427d3f85146104a057600080fd5b8063095ea7b311610254578063095ea7b31461037d578063109695231461039d57806318e97fd1146103bd57806323b872dd146103dd578063248a9ca3146103fd57600080fd5b806301ffc9a71461029157806304681a28146102c657806306fdde03146102e8578063081812fc1461030a578063083a7baa14610342575b600080fd5b34801561029d57600080fd5b506102b16102ac366004612b15565b610863565b60405190151581526020015b60405180910390f35b3480156102d257600080fd5b506102e66102e1366004612b32565b610874565b005b3480156102f457600080fd5b506102fd610ca7565b6040516102bd9190612bb6565b34801561031657600080fd5b5061032a610325366004612bc9565b610d39565b6040516001600160a01b0390911681526020016102bd565b34801561034e57600080fd5b5061036f61035d366004612bf7565b60106020526000908152604090205481565b6040519081526020016102bd565b34801561038957600080fd5b506102e6610398366004612c14565b610dce565b3480156103a957600080fd5b506102e66103b8366004612cff565b610ee4565b3480156103c957600080fd5b506102e66103d8366004612d34565b610f6c565b3480156103e957600080fd5b506102e66103f8366004612d7b565b610fe3565b34801561040957600080fd5b5061036f610418366004612bc9565b60009081526006602052604090206001015490565b6102e661043b366004612bc9565b61105e565b34801561044c57600080fd5b506102e661045b366004612dbc565b6111d0565b34801561046c57600080fd5b506102e661047b366004612dbc565b6111f6565b34801561048c57600080fd5b506102e661049b366004612bc9565b611282565b3480156104ac57600080fd5b50600c546104ba9060ff1681565b6040516102bd9190612e16565b3480156104d357600080fd5b506102e66104e2366004612d7b565b6112d7565b3480156104f357600080fd5b5061032a610502366004612bc9565b6112f2565b34801561051357600080fd5b5061036f600d5481565b34801561052957600080fd5b5061036f600581565b34801561053e57600080fd5b5061036f608581565b34801561055357600080fd5b506102e6610562366004612e24565b611369565b34801561057357600080fd5b5061036f610582366004612bf7565b6113bc565b34801561059357600080fd5b506102e66105a2366004612c14565b611443565b3480156105b357600080fd5b506105bc6114e2565b6040516102bd959493929190612e47565b3480156105d957600080fd5b5061036f610d0a81565b3480156105ef57600080fd5b506102b16105fe366004612dbc565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561063557600080fd5b506102fd61151d565b34801561064a57600080fd5b506102e6610659366004612cff565b61152c565b34801561066a57600080fd5b5061036f600081565b34801561067f57600080fd5b506102e661068e366004612e7b565b611558565b34801561069f57600080fd5b5061036f6000805160206132f083398151915281565b3480156106c157600080fd5b506102e66106d0366004612eae565b61161d565b3480156106e157600080fd5b5061070c6106f0366004612bc9565b600f602052600090815260409020805460019091015460ff1682565b6040516102bd929190612f66565b34801561072657600080fd5b506102e6610735366004612f8a565b6116a6565b34801561074657600080fd5b506102e6610755366004612c14565b611722565b34801561076657600080fd5b506102fd6117ba565b34801561077b57600080fd5b506102fd61078a366004612bc9565b611848565b34801561079b57600080fd5b506102e66107aa366004612dbc565b611998565b3480156107bb57600080fd5b506102e66119be565b3480156107d057600080fd5b506102b16107df36600461300a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561081957600080fd5b5061082d610828366004612bc9565b611a5b565b6040516102bd929190613038565b34801561084757600080fd5b5061036f600681565b6102e661085e366004612e24565b611b56565b600061086e82611cb5565b92915050565b6004600c5460ff16600481111561088d5761088d612dec565b146108df5760405162461bcd60e51b815260206004820152601860248201527f4275726e207068617365206973206e6f7420616374697665000000000000000060448201526064015b60405180910390fd5b6108e8836112f2565b6001600160a01b0316336001600160a01b0316146109485760405162461bcd60e51b815260206004820152601c60248201527f3173742070726f766964656420746f6b656e206e6f74206f776e65640000000060448201526064016108d6565b610951826112f2565b6001600160a01b0316336001600160a01b0316146109b15760405162461bcd60e51b815260206004820152601c60248201527f326e642070726f766964656420746f6b656e206e6f74206f776e65640000000060448201526064016108d6565b6109ba816112f2565b6001600160a01b0316336001600160a01b031614610a1a5760405162461bcd60e51b815260206004820152601c60248201527f3372642070726f766964656420746f6b656e206e6f74206f776e65640000000060448201526064016108d6565b6000838152600f6020526040812060019081015460ff1690811115610a4157610a41612dec565b14610a985760405162461bcd60e51b815260206004820152602160248201527f3173742070726f766964656420746f6b656e206e6f74206f662074797065204f6044820152604d60f81b60648201526084016108d6565b6000828152600f6020526040812060019081015460ff1690811115610abf57610abf612dec565b14610b165760405162461bcd60e51b815260206004820152602160248201527f326e642070726f766964656420746f6b656e206e6f74206f662074797065204f6044820152604d60f81b60648201526084016108d6565b6000818152600f6020526040812060019081015460ff1690811115610b3d57610b3d612dec565b14610b945760405162461bcd60e51b815260206004820152602160248201527f3372642070726f766964656420746f6b656e206e6f74206f662074797065204f6044820152604d60f81b60648201526084016108d6565b610b9d83611cda565b610ba682611cda565b610baf81611cda565b6000610bba60095490565b9050610bca600980546001019055565b610bd43382611d75565b60408051606081019091528181526020810160018152604080516060810182528781526020818101889052818301879052928301526000848152600f835220825181559082015160018083018054909160ff19909116908381811115610c3c57610c3c612dec565b02179055506040820151610c569060028301906003612a39565b50506040805186815260208101869052908101849052606081018390527f7aaab8e5dc83b76862c33701e61dc84f6763bf458fe77eba6b8f0b4f7fb2882e915060800160405180910390a150505050565b606060008054610cb690613053565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce290613053565b8015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610db25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b506000908152600460205260409020546001600160a01b031690565b6000610dd9826112f2565b9050806001600160a01b0316836001600160a01b03161415610e475760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d6565b336001600160a01b0382161480610e635750610e6381336107df565b610ed55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016108d6565b610edf8383611d8f565b505050565b6000805160206132f0833981519152610efd8133611dfd565b600e8054610f0a90613053565b159050610f595760405162461bcd60e51b815260206004820152601b60248201527f50726f76656e616e6365206861736820616c726561647920736574000000000060448201526064016108d6565b8151610edf90600e906020850190612a77565b6000805160206132f0833981519152610f858133611dfd565b60008381526008602090815260409091208351610fa492850190612a77565b507f652c9498726ae446882619d79306dfe2594d5d5a008eaad0a720ee55ebf8e8b88383604051610fd692919061308e565b60405180910390a1505050565b610fed3382611e7d565b6110535760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016108d6565b610edf838383611f74565b6003600c5460ff16600481111561107757611077612dec565b146110c45760405162461bcd60e51b815260206004820152601960248201527f5075626c69632073616c65206973206e6f74206163746976650000000000000060448201526064016108d6565b60068111156111155760405162461bcd60e51b815260206004820152601460248201527f4d617820362070657220747820616c6c6f77656400000000000000000000000060448201526064016108d6565b80600d5461112391906130bd565b3410156111725760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742065746865722073656e7400000000000000000060448201526064016108d6565b333b156111c15760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726163747320666f7262696464656e2066726f6d20627579696e670060448201526064016108d6565b6111cd33826003612114565b50565b6000828152600660205260409020600101546111ec8133611dfd565b610edf8383612280565b6001600160a01b03811633146112745760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016108d6565b61127e8282612322565b5050565b6000805160206132f083398151915261129b8133611dfd565b600d8290556040518281527f25b1f9f6b6e61dfca5575239769e4450ed2e49176670837f5d1a82a9a2fc693f9060200160405180910390a15050565b610edf838383604051806020016040528060008152506116a6565b6000818152600260205260408120546001600160a01b03168061086e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016108d6565b6000805160206132f08339815191526113828133611dfd565b8160ff16600481111561139757611397612dec565b600c805460ff191660018360048111156113b3576113b3612dec565b02179055505050565b60006001600160a01b0382166114275760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016108d6565b506001600160a01b031660009081526003602052604090205490565b6000805160206132f083398151915261145c8133611dfd565b608582600b5461146c91906130dc565b11156114ba5760405162461bcd60e51b815260206004820152601f60248201527f526571756573742077696c6c206578636565642072657365727665206d61780060448201526064016108d6565b6114c683836002612114565b81600b60008282546114d891906130dc565b9091555050505050565b60008060008060006114f360095490565b600d54600c54919650610d0a9550935060ff1691506000611513336113bc565b1190509091929394565b606060018054610cb690613053565b6000805160206132f08339815191526115458133611dfd565b8151610edf906007906020850190612a77565b6001600160a01b0382163314156115b15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d6565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000805160206132f08339815191526116368133611dfd565b60005b83518161ffff1610156116a0578260106000868461ffff1681518110611661576116616130f4565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806116989061310a565b915050611639565b50505050565b6116b03383611e7d565b6117165760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016108d6565b6116a0848484846123a5565b600061172e8133611dfd565b6001600160a01b0383166117845760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e7420616464726573730000000000000060448201526064016108d6565b6040516001600160a01b0384169083156108fc029084906000818181858888f193505050501580156116a0573d6000803e3d6000fd5b600e80546117c790613053565b80601f01602080910402602001604051908101604052809291908181526020018280546117f390613053565b80156118405780601f1061181557610100808354040283529160200191611840565b820191906000526020600020905b81548152906001019060200180831161182357829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b03166118af5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e0060448201526064016108d6565b600082815260086020526040812080546118c890613053565b80601f01602080910402602001604051908101604052809291908181526020018280546118f490613053565b80156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505090506000611952612423565b9050815160001415611991578061196885612432565b60405160200161197992919061312c565b60405160208183030381529060405292505050919050565b5092915050565b6000828152600660205260409020600101546119b48133611dfd565b610edf8383612322565b6000805160206132f08339815191526119d78133611dfd565b60056119e2600a5490565b10611a415760405162461bcd60e51b815260206004820152602960248201527f526571756573742077696c6c2065786365656420636f6d706f736572206564696044820152680e8d2dedce640dac2f60bb1b60648201526084016108d6565b611a4d33600180612114565b6111cd600a80546001019055565b6000818152600260205260408120546060906001600160a01b031615611b2957611a84836112f2565b6001600160a01b0316336001600160a01b03161415611b00576000838152600f6020526040902060019081015460ff1681811115611ac457611ac4612dec565b1415611af757505060408051808201909152600c81526b29bab83932b6b2aa37b5b2b760a11b6020820152600090915091565b60019150915091565b5050604080518082019091526008815267139bdd13dddb995960c21b6020820152600090915091565b505060408051808201909152600c81526b24b73b30b634b22a37b5b2b760a11b6020820152600090915091565b6002600c5460ff166004811115611b6f57611b6f612dec565b14611bbc5760405162461bcd60e51b815260206004820152601b60248201527f5072652d53616c652073616c65206973206e6f7420616374697665000000000060448201526064016108d6565b8060ff16600d54611bcd91906130bd565b341015611c1c5760405162461bcd60e51b815260206004820152601760248201527f496e73756666696369656e742065746865722073656e7400000000000000000060448201526064016108d6565b3360009081526010602052604090205460ff82161115611c7e5760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e74207072652d73616c6520616c6c6f636174696f6e60448201526064016108d6565b336000908152601060205260408120805460ff84169290611ca090849061316b565b909155506111cd90503360ff83166002612114565b60006001600160e01b03198216637965db0b60e01b148061086e575061086e82612530565b6000611ce5826112f2565b9050611cf2600083611d8f565b6001600160a01b0381166000908152600360205260408120805460019290611d1b90849061316b565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b61127e828260405180602001604052806000815250612580565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611dc4826112f2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff1661127e57611e3b816001600160a01b031660146125fe565b611e468360206125fe565b604051602001611e57929190613182565b60408051601f198184030181529082905262461bcd60e51b82526108d691600401612bb6565b6000818152600260205260408120546001600160a01b0316611ef65760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108d6565b6000611f01836112f2565b9050806001600160a01b0316846001600160a01b03161480611f3c5750836001600160a01b0316611f3184610d39565b6001600160a01b0316145b80611f6c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611f87826112f2565b6001600160a01b031614611fef5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016108d6565b6001600160a01b0382166120515760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d6565b61205c600082611d8f565b6001600160a01b038316600090815260036020526040812080546001929061208590849061316b565b90915550506001600160a01b03821660009081526003602052604081208054600192906120b39084906130dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610d0a8261212160095490565b61212b91906130dc565b11156121795760405162461bcd60e51b815260206004820181905260248201527f507572636861736520776f756c6420657863656564206d617820737570706c7960448201526064016108d6565b60005b828110156116a057600061218f60095490565b905061219f600980546001019055565b6121a98582611d75565b60408051606081019091528181526020810160008152604080516060810182526000808252602082810182905282840182905293840191909152848152600f835220825181559082015160018083018054909160ff1990911690838181111561221457612214612dec565b0217905550604082015161222e9060028301906003612a39565b509050507f99f38cf3feaad38e0a2e22ef51bdd4faba32b432520a951248d77057596a425a81868560405161226593929190613203565b60405180910390a1508061227881613226565b91505061217c565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff1661127e5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556122de3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff161561127e5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6123b0848484611f74565b6123bc848484846127ae565b6116a05760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108d6565b606060078054610cb690613053565b6060816124565750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612480578061246a81613226565b91506124799050600a83613257565b915061245a565b60008167ffffffffffffffff81111561249b5761249b612c40565b6040519080825280601f01601f1916602001820160405280156124c5576020820181803683370190505b5090505b8415611f6c576124da60018361316b565b91506124e7600a8661326b565b6124f29060306130dc565b60f81b818381518110612507576125076130f4565b60200101906001600160f81b031916908160001a905350612529600a86613257565b94506124c9565b60006001600160e01b031982166380ac58cd60e01b148061256157506001600160e01b03198216635b5e139f60e01b145b8061086e57506301ffc9a760e01b6001600160e01b031983161461086e565b61258a83836128f7565b61259760008484846127ae565b610edf5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108d6565b6060600061260d8360026130bd565b6126189060026130dc565b67ffffffffffffffff81111561263057612630612c40565b6040519080825280601f01601f19166020018201604052801561265a576020820181803683370190505b509050600360fc1b81600081518110612675576126756130f4565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a4576126a46130f4565b60200101906001600160f81b031916908160001a90535060006126c88460026130bd565b6126d39060016130dc565b90505b6001811115612758577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612714576127146130f4565b1a60f81b82828151811061272a5761272a6130f4565b60200101906001600160f81b031916908160001a90535060049490941c936127518161327f565b90506126d6565b5083156127a75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108d6565b9392505050565b60006001600160a01b0384163b156128ec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127f2903390899088908890600401613296565b6020604051808303816000875af192505050801561282d575060408051601f3d908101601f1916820190925261282a918101906132d2565b60015b6128d2573d80801561285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b5080516128ca5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016108d6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f6c565b506001949350505050565b6001600160a01b03821661294d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d6565b6000818152600260205260409020546001600160a01b0316156129b25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d6565b6001600160a01b03821660009081526003602052604081208054600192906129db9084906130dc565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8260038101928215612a67579160200282015b82811115612a67578251825591602001919060010190612a4c565b50612a73929150612aea565b5090565b828054612a8390613053565b90600052602060002090601f016020900481019282612aa55760008555612a67565b82601f10612abe57805160ff1916838001178555612a67565b82800160010185558215612a675791820182811115612a67578251825591602001919060010190612a4c565b5b80821115612a735760008155600101612aeb565b6001600160e01b0319811681146111cd57600080fd5b600060208284031215612b2757600080fd5b81356127a781612aff565b600080600060608486031215612b4757600080fd5b505081359360208301359350604090920135919050565b60005b83811015612b79578181015183820152602001612b61565b838111156116a05750506000910152565b60008151808452612ba2816020860160208601612b5e565b601f01601f19169290920160200192915050565b6020815260006127a76020830184612b8a565b600060208284031215612bdb57600080fd5b5035919050565b6001600160a01b03811681146111cd57600080fd5b600060208284031215612c0957600080fd5b81356127a781612be2565b60008060408385031215612c2757600080fd5b8235612c3281612be2565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c7f57612c7f612c40565b604052919050565b600067ffffffffffffffff831115612ca157612ca1612c40565b612cb4601f8401601f1916602001612c56565b9050828152838383011115612cc857600080fd5b828260208301376000602084830101529392505050565b600082601f830112612cf057600080fd5b6127a783833560208501612c87565b600060208284031215612d1157600080fd5b813567ffffffffffffffff811115612d2857600080fd5b611f6c84828501612cdf565b60008060408385031215612d4757600080fd5b82359150602083013567ffffffffffffffff811115612d6557600080fd5b612d7185828601612cdf565b9150509250929050565b600080600060608486031215612d9057600080fd5b8335612d9b81612be2565b92506020840135612dab81612be2565b929592945050506040919091013590565b60008060408385031215612dcf57600080fd5b823591506020830135612de181612be2565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b60058110612e1257612e12612dec565b9052565b6020810161086e8284612e02565b600060208284031215612e3657600080fd5b813560ff811681146127a757600080fd5b858152602081018590526040810184905260a08101612e696060830185612e02565b82151560808301529695505050505050565b60008060408385031215612e8e57600080fd5b8235612e9981612be2565b915060208301358015158114612de157600080fd5b60008060408385031215612ec157600080fd5b823567ffffffffffffffff80821115612ed957600080fd5b818501915085601f830112612eed57600080fd5b8135602082821115612f0157612f01612c40565b8160051b9250612f12818401612c56565b8281529284018101928181019089851115612f2c57600080fd5b948201945b84861015612f565785359350612f4684612be2565b8382529482019490820190612f31565b9997909101359750505050505050565b8281526040810160028310612f7d57612f7d612dec565b8260208301529392505050565b60008060008060808587031215612fa057600080fd5b8435612fab81612be2565b93506020850135612fbb81612be2565b925060408501359150606085013567ffffffffffffffff811115612fde57600080fd5b8501601f81018713612fef57600080fd5b612ffe87823560208401612c87565b91505092959194509250565b6000806040838503121561301d57600080fd5b823561302881612be2565b91506020830135612de181612be2565b8215158152604060208201526000611f6c6040830184612b8a565b600181811c9082168061306757607f821691505b6020821081141561308857634e487b7160e01b600052602260045260246000fd5b50919050565b828152604060208201526000611f6c6040830184612b8a565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156130d7576130d76130a7565b500290565b600082198211156130ef576130ef6130a7565b500190565b634e487b7160e01b600052603260045260246000fd5b600061ffff80831681811415613122576131226130a7565b6001019392505050565b6000835161313e818460208801612b5e565b835190830190613152818360208801612b5e565b64173539b7b760d91b9101908152600501949350505050565b60008282101561317d5761317d6130a7565b500390565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516131ba816017850160208801612b5e565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516131f7816028840160208801612b5e565b01602801949350505050565b8381526001600160a01b038316602082015260608101611f6c6040830184612e02565b600060001982141561323a5761323a6130a7565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261326657613266613241565b500490565b60008261327a5761327a613241565b500690565b60008161328e5761328e6130a7565b506000190190565b60006001600160a01b038087168352808616602084015250836040830152608060608301526132c86080830184612b8a565b9695505050505050565b6000602082840312156132e457600080fd5b81516127a781612aff56fe002796186c31becda37e2223d2461a1c5b72608fafbfa68e364397ccd57fb873a26469706673582212202869657c4e96e7ca52fba3d93e205a97c9081f3e81bd4440e04b3f184743e66564736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e335120536572696573205a65726f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043351533000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002e687474703a2f2f6170692e33712e636c75622f7365726965737a65726f2f746f6b656e732f6d657461646174612f000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): 3Q Series Zero
Arg [1] : _symbol (string): 3QS0
Arg [2] : _baseUri (string): http://api.3q.club/serieszero/tokens/metadata/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [4] : 335120536572696573205a65726f000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 3351533000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [8] : 687474703a2f2f6170692e33712e636c75622f7365726965737a65726f2f746f
Arg [9] : 6b656e732f6d657461646174612f000000000000000000000000000000000000
Deployed Bytecode Sourcemap
398:10609:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3028:202;;;;;;;;;;-1:-1:-1;3028:202:12;;;;;:::i;:::-;;:::i;:::-;;;565:14:13;;558:22;540:41;;528:2;513:18;3028:202:12;;;;;;;;9661:1344;;;;;;;;;;-1:-1:-1;9661:1344:12;;;;;:::i;:::-;;:::i;:::-;;2349:98:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3860:217::-;;;;;;;;;;-1:-1:-1;3860:217:5;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2013:55:13;;;1995:74;;1983:2;1968:18;3860:217:5;1849:226:13;2389:51:12;;;;;;;;;;-1:-1:-1;2389:51:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2637:25:13;;;2625:2;2610:18;2389:51:12;2491:177:13;3398:401:5;;;;;;;;;;-1:-1:-1;3398:401:5;;;;;:::i;:::-;;:::i;3651:276:12:-;;;;;;;;;;-1:-1:-1;3651:276:12;;;;;:::i;:::-;;:::i;4433:233::-;;;;;;;;;;-1:-1:-1;4433:233:12;;;;;:::i;:::-;;:::i;4724:330:5:-;;;;;;;;;;-1:-1:-1;4724:330:5;;;;;:::i;:::-;;:::i;3882:121:0:-;;;;;;;;;;-1:-1:-1;3882:121:0;;;;;:::i;:::-;3948:7;3974:12;;;:6;:12;;;;;:22;;;;3882:121;9152:503:12;;;;;;:::i;:::-;;:::i;4253:145:0:-;;;;;;;;;;-1:-1:-1;4253:145:0;;;;;:::i;:::-;;:::i;5270:214::-;;;;;;;;;;-1:-1:-1;5270:214:0;;;;;:::i;:::-;;:::i;4089:181:12:-;;;;;;;;;;-1:-1:-1;4089:181:12;;;;;:::i;:::-;;:::i;2191:60::-;;;;;;;;;;-1:-1:-1;2191:60:12;;;;;;;;;;;;;;;:::i;5120:179:5:-;;;;;;;;;;-1:-1:-1;5120:179:5;;;;;:::i;:::-;;:::i;2052:235::-;;;;;;;;;;-1:-1:-1;2052:235:5;;;;;:::i;:::-;;:::i;2257:36:12:-;;;;;;;;;;;;;;;;1764:46;;;;;;;;;;;;1809:1;1764:46;;1816:39;;;;;;;;;;;;1852:3;1816:39;;3933:150;;;;;;;;;;-1:-1:-1;3933:150:12;;;;;:::i;:::-;;:::i;1790:205:5:-;;;;;;;;;;-1:-1:-1;1790:205:5;;;;;:::i;:::-;;:::i;5003:343:12:-;;;;;;;;;;-1:-1:-1;5003:343:12;;;;;:::i;:::-;;:::i;7386:470::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;1861:41::-;;;;;;;;;;;;1898:4;1861:41;;2799:137:0;;;;;;;;;;-1:-1:-1;2799:137:0;;;;;:::i;:::-;2877:4;2900:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;2900:29:0;;;;;;;;;;;;;;;2799:137;2511:102:5;;;;;;;;;;;;;:::i;4276:151:12:-;;;;;;;;;;-1:-1:-1;4276:151:12;;;;;:::i;:::-;;:::i;1917:49:0:-;;;;;;;;;;-1:-1:-1;1917:49:0;1962:4;1917:49;;4144:290:5;;;;;;;;;;-1:-1:-1;4144:290:5;;;;;:::i;:::-;;:::i;667:78:12:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;667:78:12;;3369:276;;;;;;;;;;-1:-1:-1;3369:276:12;;;;;:::i;:::-;;:::i;2333:50::-;;;;;;;;;;-1:-1:-1;2333:50:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5365:320:5:-;;;;;;;;;;-1:-1:-1;5365:320:5;;;;;:::i;:::-;;:::i;5352:236:12:-;;;;;;;;;;-1:-1:-1;5352:236:12;;;;;:::i;:::-;;:::i;2299:28::-;;;;;;;;;;;;;:::i;6755:625::-;;;;;;;;;;-1:-1:-1;6755:625:12;;;;;:::i;:::-;;:::i;4632:147:0:-;;;;;;;;;;-1:-1:-1;4632:147:0;;;;;:::i;:::-;;:::i;4672:325:12:-;;;;;;;;;;;;;:::i;4500:162:5:-;;;;;;;;;;-1:-1:-1;4500:162:5;;;;;:::i;:::-;-1:-1:-1;;;;;4620:25:5;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4500:162;7862:690:12;;;;;;;;;;-1:-1:-1;7862:690:12;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1723:35::-;;;;;;;;;;;;1757:1;1723:35;;8558:588;;;;;;:::i;:::-;;:::i;3028:202::-;3160:4;3187:36;3211:11;3187:23;:36::i;:::-;3180:43;3028:202;-1:-1:-1;;3028:202:12:o;9661:1344::-;9784:22;9766:14;;;;:40;;;;;;;;:::i;:::-;;9758:77;;;;-1:-1:-1;;;9758:77:12;;11079:2:13;9758:77:12;;;11061:21:13;11118:2;11098:18;;;11091:30;11157:26;11137:18;;;11130:54;11201:18;;9758:77:12;;;;;;;;;9928:15;9936:6;9928:7;:15::i;:::-;-1:-1:-1;;;;;9914:29:12;:10;-1:-1:-1;;;;;9914:29:12;;9906:70;;;;-1:-1:-1;;;9906:70:12;;11432:2:13;9906:70:12;;;11414:21:13;11471:2;11451:18;;;11444:30;11510;11490:18;;;11483:58;11558:18;;9906:70:12;11230:352:13;9906:70:12;10008:15;10016:6;10008:7;:15::i;:::-;-1:-1:-1;;;;;9994:29:12;:10;-1:-1:-1;;;;;9994:29:12;;9986:70;;;;-1:-1:-1;;;9986:70:12;;11789:2:13;9986:70:12;;;11771:21:13;11828:2;11808:18;;;11801:30;11867;11847:18;;;11840:58;11915:18;;9986:70:12;11587:352:13;9986:70:12;10088:15;10096:6;10088:7;:15::i;:::-;-1:-1:-1;;;;;10074:29:12;:10;-1:-1:-1;;;;;10074:29:12;;10066:70;;;;-1:-1:-1;;;10066:70:12;;12146:2:13;10066:70:12;;;12128:21:13;12185:2;12165:18;;;12158:30;12224;12204:18;;;12197:58;12272:18;;10066:70:12;11944:352:13;10066:70:12;10240:12;10209:17;;;:9;:17;;;;;:27;;;;;;;;:43;;;;;;;:::i;:::-;;10201:89;;;;-1:-1:-1;;;10201:89:12;;12503:2:13;10201:89:12;;;12485:21:13;12542:2;12522:18;;;12515:30;12581:34;12561:18;;;12554:62;-1:-1:-1;;;12632:18:13;;;12625:31;12673:19;;10201:89:12;12301:397:13;10201:89:12;10339:12;10308:17;;;:9;:17;;;;;:27;;;;;;;;:43;;;;;;;:::i;:::-;;10300:89;;;;-1:-1:-1;;;10300:89:12;;12905:2:13;10300:89:12;;;12887:21:13;12944:2;12924:18;;;12917:30;12983:34;12963:18;;;12956:62;-1:-1:-1;;;13034:18:13;;;13027:31;13075:19;;10300:89:12;12703:397:13;10300:89:12;10438:12;10407:17;;;:9;:17;;;;;:27;;;;;;;;:43;;;;;;;:::i;:::-;;10399:89;;;;-1:-1:-1;;;10399:89:12;;13307:2:13;10399:89:12;;;13289:21:13;13346:2;13326:18;;;13319:30;13385:34;13365:18;;;13358:62;-1:-1:-1;;;13436:18:13;;;13429:31;13477:19;;10399:89:12;13105:397:13;10399:89:12;10533:13;10539:6;10533:5;:13::i;:::-;10556;10562:6;10556:5;:13::i;:::-;10579;10585:6;10579:5;:13::i;:::-;10633:15;10651:25;:15;864:14:3;;773:112;10651:25:12;10633:43;;10686:27;:15;978:19:3;;996:1;978:19;;;891:123;10686:27:12;10723:30;10733:10;10745:7;10723:9;:30::i;:::-;10785:151;;;;;;;;;;;;;;;10856:17;10785:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10764:18:12;;;:9;:18;;;:172;;;;;;;;;;;;;;;;-1:-1:-1;;10764:172:12;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;10764:172:12;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;10952:46:12;;;13738:25:13;;;13794:2;13779:18;;13772:34;;;13822:18;;;13815:34;;;13880:2;13865:18;;13858:34;;;10952:46:12;;-1:-1:-1;13725:3:13;13710:19;10952:46:12;;;;;;;9748:1257;9661:1344;;;:::o;2349:98:5:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:5;3955:73;;;;-1:-1:-1;;;3955:73:5;;14490:2:13;3955:73:5;;;14472:21:13;14529:2;14509:18;;;14502:30;14568:34;14548:18;;;14541:62;-1:-1:-1;;;14619:18:13;;;14612:42;14671:19;;3955:73:5;14288:408:13;3955:73:5;-1:-1:-1;4046:24:5;;;;:15;:24;;;;;;-1:-1:-1;;;;;4046:24:5;;3860:217::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;-1:-1:-1;;;;;3535:11:5;:2;-1:-1:-1;;;;;3535:11:5;;;3527:57;;;;-1:-1:-1;;;3527:57:5;;14903:2:13;3527:57:5;;;14885:21:13;14942:2;14922:18;;;14915:30;14981:34;14961:18;;;14954:62;-1:-1:-1;;;15032:18:13;;;15025:31;15073:19;;3527:57:5;14701:397:13;3527:57:5;666:10:2;-1:-1:-1;;;;;3616:21:5;;;;:62;;-1:-1:-1;3641:37:5;3658:5;666:10:2;4500:162:5;:::i;3641:37::-;3595:165;;;;-1:-1:-1;;;3595:165:5;;15305:2:13;3595:165:5;;;15287:21:13;15344:2;15324:18;;;15317:30;15383:34;15363:18;;;15356:62;15454:26;15434:18;;;15427:54;15498:19;;3595:165:5;15103:420:13;3595:165:5;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;3651:276:12:-;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;3828:14:12::1;3822:28;;;;;:::i;:::-;:33:::0;;-1:-1:-1;3814:73:12::1;;;::::0;-1:-1:-1;;;3814:73:12;;15730:2:13;3814:73:12::1;::::0;::::1;15712:21:13::0;15769:2;15749:18;;;15742:30;15808:29;15788:18;;;15781:57;15855:18;;3814:73:12::1;15528:351:13::0;3814:73:12::1;3898:22:::0;;::::1;::::0;:14:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;4433:233::-:0;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;4570:20:12::1;::::0;;;:10:::1;:20;::::0;;;;;;;:35;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;4620:39;4636:8;4646:12;4620:39;;;;;;;:::i;:::-;;;;;;;;4433:233:::0;;;:::o;4724:330:5:-;4913:41;666:10:2;4946:7:5;4913:18;:41::i;:::-;4905:103;;;;-1:-1:-1;;;4905:103:5;;16382:2:13;4905:103:5;;;16364:21:13;16421:2;16401:18;;;16394:30;16460:34;16440:18;;;16433:62;-1:-1:-1;;;16511:18:13;;;16504:47;16568:19;;4905:103:5;16180:413:13;4905:103:5;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;9152:503:12:-;9286:26;9268:14;;;;:44;;;;;;;;:::i;:::-;;9260:82;;;;-1:-1:-1;;;9260:82:12;;16800:2:13;9260:82:12;;;16782:21:13;16839:2;16819:18;;;16812:30;16878:27;16858:18;;;16851:55;16923:18;;9260:82:12;16598:349:13;9260:82:12;1757:1;9360:9;:23;;9352:55;;;;-1:-1:-1;;;9352:55:12;;17154:2:13;9352:55:12;;;17136:21:13;17193:2;17173:18;;;17166:30;17232:22;17212:18;;;17205:50;17272:18;;9352:55:12;16952:344:13;9352:55:12;9450:9;9438;;:21;;;;:::i;:::-;9425:9;:34;;9417:70;;;;-1:-1:-1;;;9417:70:12;;17808:2:13;9417:70:12;;;17790:21:13;17847:2;17827:18;;;17820:30;17886:25;17866:18;;;17859:53;17929:18;;9417:70:12;17606:347:13;9417:70:12;9525:10;1034:20:1;1080:8;9497:75:12;;;;-1:-1:-1;;;9497:75:12;;18160:2:13;9497:75:12;;;18142:21:13;18199:2;18179:18;;;18172:30;18238:33;18218:18;;;18211:61;18289:18;;9497:75:12;17958:355:13;9497:75:12;9583:65;9598:10;9610:9;9621:26;9583:14;:65::i;:::-;9152:503;:::o;4253:145:0:-;3948:7;3974:12;;;:6;:12;;;;;:22;;;2395:30;2406:4;666:10:2;2395::0;:30::i;:::-;4366:25:::1;4377:4;4383:7;4366:10;:25::i;5270:214::-:0;-1:-1:-1;;;;;5365:23:0;;666:10:2;5365:23:0;5357:83;;;;-1:-1:-1;;;5357:83:0;;18520:2:13;5357:83:0;;;18502:21:13;18559:2;18539:18;;;18532:30;18598:34;18578:18;;;18571:62;18669:17;18649:18;;;18642:45;18704:19;;5357:83:0;18318:411:13;5357:83:0;5451:26;5463:4;5469:7;5451:11;:26::i;:::-;5270:214;;:::o;4089:181:12:-;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;4200:9:12::1;:21:::0;;;4236:27:::1;::::0;2637:25:13;;;4236:27:12::1;::::0;2625:2:13;2610:18;4236:27:12::1;;;;;;;4089:181:::0;;:::o;5120:179:5:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;2052:235::-;2124:7;2159:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2159:16:5;2193:19;2185:73;;;;-1:-1:-1;;;2185:73:5;;18936:2:13;2185:73:5;;;18918:21:13;18975:2;18955:18;;;18948:30;19014:34;18994:18;;;18987:62;-1:-1:-1;;;19065:18:13;;;19058:39;19114:19;;2185:73:5;18734:405:13;3933:150:12;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;4070:5:12::1;4055:21;;;;;;;;;;:::i;:::-;4038:14;:38:::0;;-1:-1:-1;;4038:38:12::1;::::0;;::::1;::::0;::::1;;;;;;:::i;:::-;;;;;;3933:150:::0;;:::o;1790:205:5:-;1862:7;-1:-1:-1;;;;;1889:19:5;;1881:74;;;;-1:-1:-1;;;1881:74:5;;19346:2:13;1881:74:5;;;19328:21:13;19385:2;19365:18;;;19358:30;19424:34;19404:18;;;19397:62;-1:-1:-1;;;19475:18:13;;;19468:40;19525:19;;1881:74:5;19144:406:13;1881:74:5;-1:-1:-1;;;;;;1972:16:5;;;;;:9;:16;;;;;;;1790:205::o;5003:343:12:-;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;1852:3:12::1;5161:9;5136:22;;:34;;;;:::i;:::-;:50;;5128:94;;;::::0;-1:-1:-1;;;5128:94:12;;19890:2:13;5128:94:12::1;::::0;::::1;19872:21:13::0;19929:2;19909:18;;;19902:30;19968:33;19948:18;;;19941:61;20019:18;;5128:94:12::1;19688:355:13::0;5128:94:12::1;5233:61;5248:9;5259;5270:23;5233:14;:61::i;:::-;5330:9;5304:22;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;5003:343:12:o;7386:470::-;7468:21;7503:18;7535;7567:30;7611:19;7662:25;:15;864:14:3;;773:112;7662:25:12;7746:9;;7783:14;;7646:41;;-1:-1:-1;1898:4:12;;-1:-1:-1;7746:9:12;-1:-1:-1;7783:14:12;;;-1:-1:-1;7783:14:12;7824:21;7834:10;7824:9;:21::i;:::-;:25;7807:42;;7386:470;;;;;:::o;2511:102:5:-;2567:13;2599:7;2592:14;;;;;:::i;4276:151:12:-;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;4390::12;;::::1;::::0;:16:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;4144:290:5:-:0;-1:-1:-1;;;;;4246:24:5;;666:10:2;4246:24:5;;4238:62;;;;-1:-1:-1;;;4238:62:5;;20250:2:13;4238:62:5;;;20232:21:13;20289:2;20269:18;;;20262:30;20328:27;20308:18;;;20301:55;20373:18;;4238:62:5;20048:349:13;4238:62:5;666:10:2;4311:32:5;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4311:42:5;;;;;;;;;;;;:53;;-1:-1:-1;;4311:53:5;;;;;;;;;;4379:48;;540:41:13;;;4311:42:5;;666:10:2;4379:48:5;;513:18:13;4379:48:5;;;;;;;4144:290;;:::o;3369:276:12:-;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;3521:8:12::1;3516:123;3539:12;:19;3535:1;:23;;;3516:123;;;3618:10;3579:19;:36;3599:12;3612:1;3599:15;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;3579:36:12::1;-1:-1:-1::0;;;;;3579:36:12::1;;;;;;;;;;;;:49;;;;3560:3;;;;;:::i;:::-;;;;3516:123;;;;3369:276:::0;;;:::o;5365:320:5:-;5534:41;666:10:2;5567:7:5;5534:18;:41::i;:::-;5526:103;;;;-1:-1:-1;;;5526:103:5;;16382:2:13;5526:103:5;;;16364:21:13;16421:2;16401:18;;;16394:30;16460:34;16440:18;;;16433:62;-1:-1:-1;;;16511:18:13;;;16504:47;16568:19;;5526:103:5;16180:413:13;5526:103:5;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;5352:236:12:-;1962:4:0;2395:30;1962:4;666:10:2;2395::0;:30::i;:::-;-1:-1:-1;;;;;5492:23:12;::::1;5484:61;;;::::0;-1:-1:-1;;;5484:61:12;;20938:2:13;5484:61:12::1;::::0;::::1;20920:21:13::0;20977:2;20957:18;;;20950:30;21016:27;20996:18;;;20989:55;21061:18;;5484:61:12::1;20736:349:13::0;5484:61:12::1;5555:26;::::0;-1:-1:-1;;;;;5555:18:12;::::1;::::0;:26;::::1;;;::::0;5574:6;;5555:26:::1;::::0;;;5574:6;5555:18;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;2299:28:::0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6755:625::-;7222:4:5;7245:16;;;:7;:16;;;;;;6868:13:12;;-1:-1:-1;;;;;7245:16:5;6897:60:12;;;;-1:-1:-1;;;6897:60:12;;21292:2:13;6897:60:12;;;21274:21:13;21331:2;21311:18;;;21304:30;21370:33;21350:18;;;21343:61;21421:18;;6897:60:12;21090:355:13;6897:60:12;6968:23;6994:19;;;:10;:19;;;;;6968:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7023:18;7044:10;:8;:10::i;:::-;7023:31;;7151:9;7145:23;7172:1;7145:28;7142:124;;;7220:4;7226:18;:7;:16;:18::i;:::-;7203:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7189:66;;;;6755:625;;;:::o;7142:124::-;-1:-1:-1;7364:9:12;6755:625;-1:-1:-1;;6755:625:12:o;4632:147:0:-;3948:7;3974:12;;;:6;:12;;;;;:22;;;2395:30;2406:4;666:10:2;2395::0;:30::i;:::-;4746:26:::1;4758:4;4764:7;4746:11;:26::i;4672:325:12:-:0;-1:-1:-1;;;;;;;;;;;2395:30:0;713:32:12;666:10:2;2395::0;:30::i;:::-;1809:1:12::1;4778:33;:23;864:14:3::0;;773:112;4778:33:12::1;:57;4770:111;;;::::0;-1:-1:-1;;;4770:111:12;;22294:2:13;4770:111:12::1;::::0;::::1;22276:21:13::0;22333:2;22313:18;;;22306:30;22372:34;22352:18;;;22345:62;-1:-1:-1;;;22423:18:13;;;22416:39;22472:19;;4770:111:12::1;22092:405:13::0;4770:111:12::1;4892:53;4907:10;4919:1;4922:22:::0;4892:14:::1;:53::i;:::-;4955:35;:23;978:19:3::0;;996:1;978:19;;;891:123;7862:690:12;7952:13;7245:16:5;;;:7;:16;;;;;;7967:21:12;;-1:-1:-1;;;;;7245:16:5;:30;8004:542:12;;8055:15;8063:6;8055:7;:15::i;:::-;-1:-1:-1;;;;;8041:29:12;:10;-1:-1:-1;;;;;8041:29:12;;8038:405;;;8093:17;;;;:9;:17;;;;;8124;8093:27;;;;;;:48;;;;;;;;:::i;:::-;;8090:234;;;-1:-1:-1;;8203:24:12;;;;;;;;;;;;-1:-1:-1;;;8203:24:12;;;;8176:5;;7862:690;;;:::o;8090:234::-;8301:4;8290:15;;7862:690;;;:::o;8038:405::-;-1:-1:-1;;8408:20:12;;;;;;;;;;;;-1:-1:-1;;;8408:20:12;;;;8385:5;;7862:690;;;:::o;8004:542::-;-1:-1:-1;;8511:24:12;;;;;;;;;;;;-1:-1:-1;;;8511:24:12;;;;8492:5;;7862:690;;;:::o;8558:588::-;8694:23;8676:14;;;;:41;;;;;;;;:::i;:::-;;8668:81;;;;-1:-1:-1;;;8668:81:12;;22704:2:13;8668:81:12;;;22686:21:13;22743:2;22723:18;;;22716:30;22782:29;22762:18;;;22755:57;22829:18;;8668:81:12;22502:351:13;8668:81:12;8792:9;8780:21;;:9;;:21;;;;:::i;:::-;8767:9;:34;;8759:70;;;;-1:-1:-1;;;8759:70:12;;17808:2:13;8759:70:12;;;17790:21:13;17847:2;17827:18;;;17820:30;17886:25;17866:18;;;17859:53;17929:18;;8759:70:12;17606:347:13;8759:70:12;8922:10;8902:31;;;;:19;:31;;;;;;8889:44;;;;;8881:89;;;;-1:-1:-1;;;8881:89:12;;23060:2:13;8881:89:12;;;23042:21:13;;;23079:18;;;23072:30;23138:34;23118:18;;;23111:62;23190:18;;8881:89:12;22858:356:13;8881:89:12;9042:10;9022:31;;;;:19;:31;;;;;:44;;;;;;:31;:44;;;;;:::i;:::-;;;;-1:-1:-1;9077:62:12;;-1:-1:-1;9092:10:12;9077:62;;;9115:23;9077:14;:62::i;2510:202:0:-;2595:4;-1:-1:-1;;;;;;2618:47:0;;-1:-1:-1;;;2618:47:0;;:87;;;2669:36;2693:11;2669:23;:36::i;9665:348:5:-;9724:13;9740:23;9755:7;9740:14;:23::i;:::-;9724:39;;9860:29;9877:1;9881:7;9860:8;:29::i;:::-;-1:-1:-1;;;;;9900:16:5;;;;;;:9;:16;;;;;:21;;9920:1;;9900:16;:21;;9920:1;;9900:21;:::i;:::-;;;;-1:-1:-1;;9938:16:5;;;;:7;:16;;;;;;9931:23;;-1:-1:-1;;;;;;9931:23:5;;;9970:36;9946:7;;9938:16;-1:-1:-1;;;;;9970:36:5;;;;;9938:16;;9970:36;9714:299;9665:348;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;11008:171::-;11082:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11082:29:5;-1:-1:-1;;;;;11082:29:5;;;;;;;;:24;;11135:23;11082:24;11135:14;:23::i;:::-;-1:-1:-1;;;;;11126:46:5;;;;;;;;;;;11008:171;;:::o;3217:484:0:-;2877:4;2900:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;2900:29:0;;;;;;;;;;;;3292:403;;3480:41;3508:7;-1:-1:-1;;;;;3480:41:0;3518:2;3480:19;:41::i;:::-;3592:38;3620:4;3627:2;3592:19;:38::i;:::-;3387:265;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3387:265:0;;;;;;;;;;-1:-1:-1;;;3335:349:0;;;;;;;:::i;7440:344:5:-;7533:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:5;7549:73;;;;-1:-1:-1;;;7549:73:5;;24342:2:13;7549:73:5;;;24324:21:13;24381:2;24361:18;;;24354:30;24420:34;24400:18;;;24393:62;-1:-1:-1;;;24471:18:13;;;24464:42;24523:19;;7549:73:5;24140:408:13;7549:73:5;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;-1:-1:-1;;;;;7689:16:5;:7;-1:-1:-1;;;;;7689:16:5;;:51;;;;7733:7;-1:-1:-1;;;;;7709:31:5;:20;7721:7;7709:11;:20::i;:::-;-1:-1:-1;;;;;7709:31:5;;7689:51;:87;;;-1:-1:-1;;;;;;4620:25:5;;;4597:4;4620:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7744:32;7681:96;7440:344;-1:-1:-1;;;;7440:344:5:o;10337:560::-;10491:4;-1:-1:-1;;;;;10464:31:5;:23;10479:7;10464:14;:23::i;:::-;-1:-1:-1;;;;;10464:31:5;;10456:85;;;;-1:-1:-1;;;10456:85:5;;24755:2:13;10456:85:5;;;24737:21:13;24794:2;24774:18;;;24767:30;24833:34;24813:18;;;24806:62;-1:-1:-1;;;24884:18:13;;;24877:39;24933:19;;10456:85:5;24553:405:13;10456:85:5;-1:-1:-1;;;;;10559:16:5;;10551:65;;;;-1:-1:-1;;;10551:65:5;;25165:2:13;10551:65:5;;;25147:21:13;25204:2;25184:18;;;25177:30;25243:34;25223:18;;;25216:62;-1:-1:-1;;;25294:18:13;;;25287:34;25338:19;;10551:65:5;24963:400:13;10551:65:5;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;-1:-1:-1;;;;;10768:15:5;;;;;;:9;:15;;;;;:20;;10787:1;;10768:15;:20;;10787:1;;10768:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10798:13:5;;;;;;:9;:13;;;;;:18;;10815:1;;10798:13;:18;;10815:1;;10798:18;:::i;:::-;;;;-1:-1:-1;;10826:16:5;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10826:21:5;-1:-1:-1;;;;;10826:21:5;;;;;;;;;10863:27;;10826:16;;10863:27;;;;;;;10337:560;;;:::o;5905:706:12:-;1898:4;6063:9;6035:25;:15;864:14:3;;773:112;6035:25:12;:37;;;;:::i;:::-;:54;;6027:99;;;;-1:-1:-1;;;6027:99:12;;25570:2:13;6027:99:12;;;25552:21:13;;;25589:18;;;25582:30;25648:34;25628:18;;;25621:62;25700:18;;6027:99:12;25368:356:13;6027:99:12;6142:6;6137:468;6158:9;6154:1;:13;6137:468;;;6188:15;6206:25;:15;864:14:3;;773:112;6206:25:12;6188:43;;6245:27;:15;978:19:3;;996:1;978:19;;;891:123;6245:27:12;6286:29;6296:9;6307:7;6286:9;:29::i;:::-;6351:175;;;;;;;;;;;;;;;-1:-1:-1;6351:175:12;;;;;;;;;;-1:-1:-1;6351:175:12;;;;;;;;;;;;;;;;;;;;;;;6330:18;;;:9;:18;;;:196;;;;;;;;;;;;;;;;-1:-1:-1;;6330:196:12;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;6330:196:12;;;;;;;;;;;;:::i;:::-;;;;;6546:48;6558:7;6567:9;6578:15;6546:48;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;6169:3:12;;;;:::i;:::-;;;;6137:468;;6537:224:0;2877:4;2900:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;2900:29:0;;;;;;;;;;;;6606:149;;6649:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6649:29:0;;;;;;;;;:36;;-1:-1:-1;;6649:36:0;6681:4;6649:36;;;6731:12;666:10:2;;587:96;6731:12:0;-1:-1:-1;;;;;6704:40:0;6722:7;-1:-1:-1;;;;;6704:40:0;6716:4;6704:40;;;;;;;;;;6537:224;;:::o;6767:225::-;2877:4;2900:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;2900:29:0;;;;;;;;;;;;6837:149;;;6911:5;6879:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6879:29:0;;;;;;;;;;:37;;-1:-1:-1;;6879:37:0;;;6935:40;666:10:2;;6879:12:0;;6935:40;;6911:5;6935:40;6767:225;;:::o;6547:307:5:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;-1:-1:-1;;;6736:111:5;;26485:2:13;6736:111:5;;;26467:21:13;26524:2;26504:18;;;26497:30;26563:34;26543:18;;;26536:62;-1:-1:-1;;;26614:18:13;;;26607:48;26672:19;;6736:111:5;26283:414:13;5740:159:12;5840:13;5876:16;5869:23;;;;;:::i;275:703:11:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:11;;;;;;;;;;;;-1:-1:-1;;;574:10:11;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:11;;-1:-1:-1;720:2:11;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:11;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:11;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;849:56:11;;;;;;;;-1:-1:-1;919:11:11;928:2;919:11;;:::i;:::-;;;791:150;;1431:300:5;1533:4;-1:-1:-1;;;;;;1568:40:5;;-1:-1:-1;;;1568:40:5;;:104;;-1:-1:-1;;;;;;;1624:48:5;;-1:-1:-1;;;1624:48:5;1568:104;:156;;;-1:-1:-1;;;;;;;;;;871:40:4;;;1688:36:5;763:155:4;8443:311:5;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;-1:-1:-1;;;8596:151:5;;26485:2:13;8596:151:5;;;26467:21:13;26524:2;26504:18;;;26497:30;26563:34;26543:18;;;26536:62;-1:-1:-1;;;26614:18:13;;;26607:48;26672:19;;8596:151:5;26283:414:13;1535:441:11;1610:13;1635:19;1667:10;1671:6;1667:1;:10;:::i;:::-;:14;;1680:1;1667:14;:::i;:::-;1657:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1657:25:11;;1635:47;;-1:-1:-1;;;1692:6:11;1699:1;1692:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1692:15:11;;;;;;;;;-1:-1:-1;;;1717:6:11;1724:1;1717:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1717:15:11;;;;;;;;-1:-1:-1;1747:9:11;1759:10;1763:6;1759:1;:10;:::i;:::-;:14;;1772:1;1759:14;:::i;:::-;1747:26;;1742:132;1779:1;1775;:5;1742:132;;;1813:12;1826:5;1834:3;1826:11;1813:25;;;;;;;:::i;:::-;;;;1801:6;1808:1;1801:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;1801:37:11;;;;;;;;-1:-1:-1;1862:1:11;1852:11;;;;;1782:3;;;:::i;:::-;;;1742:132;;;-1:-1:-1;1891:10:11;;1883:55;;;;-1:-1:-1;;;1883:55:11;;27419:2:13;1883:55:11;;;27401:21:13;;;27438:18;;;27431:30;27497:34;27477:18;;;27470:62;27549:18;;1883:55:11;27217:356:13;1883:55:11;1962:6;1535:441;-1:-1:-1;;;1535:441:11:o;11732:778:5:-;11882:4;-1:-1:-1;;;;;11902:13:5;;1034:20:1;1080:8;11898:606:5;;11937:72;;-1:-1:-1;;;11937:72:5;;-1:-1:-1;;;;;11937:36:5;;;;;:72;;666:10:2;;11988:4:5;;11994:7;;12003:5;;11937:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11937:72:5;;;;;;;;-1:-1:-1;;11937:72:5;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12176:13:5;;12172:266;;12218:60;;-1:-1:-1;;;12218:60:5;;26485:2:13;12218:60:5;;;26467:21:13;26524:2;26504:18;;;26497:30;26563:34;26543:18;;;26536:62;-1:-1:-1;;;26614:18:13;;;26607:48;26672:19;;12218:60:5;26283:414:13;12172:266:5;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;-1:-1:-1;;;;;;12059:51:5;-1:-1:-1;;;12059:51:5;;-1:-1:-1;12052:58:5;;11898:606;-1:-1:-1;12489:4:5;11732:778;;;;;;:::o;9076:372::-;-1:-1:-1;;;;;9155:16:5;;9147:61;;;;-1:-1:-1;;;9147:61:5;;28551:2:13;9147:61:5;;;28533:21:13;;;28570:18;;;28563:30;28629:34;28609:18;;;28602:62;28681:18;;9147:61:5;28349:356:13;9147:61:5;7222:4;7245:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7245:16:5;:30;9218:58;;;;-1:-1:-1;;;9218:58:5;;28912:2:13;9218:58:5;;;28894:21:13;28951:2;28931:18;;;28924:30;28990;28970:18;;;28963:58;29038:18;;9218:58:5;28710:352:13;9218:58:5;-1:-1:-1;;;;;9343:13:5;;;;;;:9;:13;;;;;:18;;9360:1;;9343:13;:18;;9360:1;;9343:18;:::i;:::-;;;;-1:-1:-1;;9371:16:5;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9371:21:5;-1:-1:-1;;;;;9371:21:5;;;;;;;;9408:33;;9371:16;;;9408:33;;9371:16;;9408:33;9076:372;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:13;-1:-1:-1;;;;;;88:32:13;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:316::-;669:6;677;685;738:2;726:9;717:7;713:23;709:32;706:52;;;754:1;751;744:12;706:52;-1:-1:-1;;777:23:13;;;847:2;832:18;;819:32;;-1:-1:-1;898:2:13;883:18;;;870:32;;592:316;-1:-1:-1;592:316:13:o;913:258::-;985:1;995:113;1009:6;1006:1;1003:13;995:113;;;1085:11;;;1079:18;1066:11;;;1059:39;1031:2;1024:10;995:113;;;1126:6;1123:1;1120:13;1117:48;;;-1:-1:-1;;1161:1:13;1143:16;;1136:27;913:258::o;1176:::-;1218:3;1256:5;1250:12;1283:6;1278:3;1271:19;1299:63;1355:6;1348:4;1343:3;1339:14;1332:4;1325:5;1321:16;1299:63;:::i;:::-;1416:2;1395:15;-1:-1:-1;;1391:29:13;1382:39;;;;1423:4;1378:50;;1176:258;-1:-1:-1;;1176:258:13:o;1439:220::-;1588:2;1577:9;1570:21;1551:4;1608:45;1649:2;1638:9;1634:18;1626:6;1608:45;:::i;1664:180::-;1723:6;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;-1:-1:-1;1815:23:13;;1664:180;-1:-1:-1;1664:180:13:o;2080:154::-;-1:-1:-1;;;;;2159:5:13;2155:54;2148:5;2145:65;2135:93;;2224:1;2221;2214:12;2239:247;2298:6;2351:2;2339:9;2330:7;2326:23;2322:32;2319:52;;;2367:1;2364;2357:12;2319:52;2406:9;2393:23;2425:31;2450:5;2425:31;:::i;2673:315::-;2741:6;2749;2802:2;2790:9;2781:7;2777:23;2773:32;2770:52;;;2818:1;2815;2808:12;2770:52;2857:9;2844:23;2876:31;2901:5;2876:31;:::i;:::-;2926:5;2978:2;2963:18;;;;2950:32;;-1:-1:-1;;;2673:315:13:o;2993:127::-;3054:10;3049:3;3045:20;3042:1;3035:31;3085:4;3082:1;3075:15;3109:4;3106:1;3099:15;3125:275;3196:2;3190:9;3261:2;3242:13;;-1:-1:-1;;3238:27:13;3226:40;;3296:18;3281:34;;3317:22;;;3278:62;3275:88;;;3343:18;;:::i;:::-;3379:2;3372:22;3125:275;;-1:-1:-1;3125:275:13:o;3405:407::-;3470:5;3504:18;3496:6;3493:30;3490:56;;;3526:18;;:::i;:::-;3564:57;3609:2;3588:15;;-1:-1:-1;;3584:29:13;3615:4;3580:40;3564:57;:::i;:::-;3555:66;;3644:6;3637:5;3630:21;3684:3;3675:6;3670:3;3666:16;3663:25;3660:45;;;3701:1;3698;3691:12;3660:45;3750:6;3745:3;3738:4;3731:5;3727:16;3714:43;3804:1;3797:4;3788:6;3781:5;3777:18;3773:29;3766:40;3405:407;;;;;:::o;3817:222::-;3860:5;3913:3;3906:4;3898:6;3894:17;3890:27;3880:55;;3931:1;3928;3921:12;3880:55;3953:80;4029:3;4020:6;4007:20;4000:4;3992:6;3988:17;3953:80;:::i;4044:322::-;4113:6;4166:2;4154:9;4145:7;4141:23;4137:32;4134:52;;;4182:1;4179;4172:12;4134:52;4222:9;4209:23;4255:18;4247:6;4244:30;4241:50;;;4287:1;4284;4277:12;4241:50;4310;4352:7;4343:6;4332:9;4328:22;4310:50;:::i;4371:390::-;4449:6;4457;4510:2;4498:9;4489:7;4485:23;4481:32;4478:52;;;4526:1;4523;4516:12;4478:52;4562:9;4549:23;4539:33;;4623:2;4612:9;4608:18;4595:32;4650:18;4642:6;4639:30;4636:50;;;4682:1;4679;4672:12;4636:50;4705;4747:7;4738:6;4727:9;4723:22;4705:50;:::i;:::-;4695:60;;;4371:390;;;;;:::o;4766:456::-;4843:6;4851;4859;4912:2;4900:9;4891:7;4887:23;4883:32;4880:52;;;4928:1;4925;4918:12;4880:52;4967:9;4954:23;4986:31;5011:5;4986:31;:::i;:::-;5036:5;-1:-1:-1;5093:2:13;5078:18;;5065:32;5106:33;5065:32;5106:33;:::i;:::-;4766:456;;5158:7;;-1:-1:-1;;;5212:2:13;5197:18;;;;5184:32;;4766:456::o;5594:315::-;5662:6;5670;5723:2;5711:9;5702:7;5698:23;5694:32;5691:52;;;5739:1;5736;5729:12;5691:52;5775:9;5762:23;5752:33;;5835:2;5824:9;5820:18;5807:32;5848:31;5873:5;5848:31;:::i;:::-;5898:5;5888:15;;;5594:315;;;;;:::o;5914:127::-;5975:10;5970:3;5966:20;5963:1;5956:31;6006:4;6003:1;5996:15;6030:4;6027:1;6020:15;6046:145;6132:1;6125:5;6122:12;6112:46;;6138:18;;:::i;:::-;6167;;6046:145::o;6196:218::-;6347:2;6332:18;;6359:49;6336:9;6390:6;6359:49;:::i;6419:269::-;6476:6;6529:2;6517:9;6508:7;6504:23;6500:32;6497:52;;;6545:1;6542;6535:12;6497:52;6584:9;6571:23;6634:4;6627:5;6623:16;6616:5;6613:27;6603:55;;6654:1;6651;6644:12;6693:514;6963:25;;;7019:2;7004:18;;6997:34;;;7062:2;7047:18;;7040:34;;;6950:3;6935:19;;7083:58;7137:2;7122:18;;7114:6;7083:58;:::i;:::-;7192:6;7185:14;7178:22;7172:3;7161:9;7157:19;7150:51;6693:514;;;;;;;;:::o;7212:416::-;7277:6;7285;7338:2;7326:9;7317:7;7313:23;7309:32;7306:52;;;7354:1;7351;7344:12;7306:52;7393:9;7380:23;7412:31;7437:5;7412:31;:::i;:::-;7462:5;-1:-1:-1;7519:2:13;7504:18;;7491:32;7561:15;;7554:23;7542:36;;7532:64;;7592:1;7589;7582:12;7633:1091;7726:6;7734;7787:2;7775:9;7766:7;7762:23;7758:32;7755:52;;;7803:1;7800;7793:12;7755:52;7843:9;7830:23;7872:18;7913:2;7905:6;7902:14;7899:34;;;7929:1;7926;7919:12;7899:34;7967:6;7956:9;7952:22;7942:32;;8012:7;8005:4;8001:2;7997:13;7993:27;7983:55;;8034:1;8031;8024:12;7983:55;8070:2;8057:16;8092:4;8115:2;8111;8108:10;8105:36;;;8121:18;;:::i;:::-;8167:2;8164:1;8160:10;8150:20;;8190:28;8214:2;8210;8206:11;8190:28;:::i;:::-;8252:15;;;8322:11;;;8318:20;;;8283:12;;;;8350:19;;;8347:39;;;8382:1;8379;8372:12;8347:39;8406:11;;;;8426:217;8442:6;8437:3;8434:15;8426:217;;;8522:3;8509:17;8496:30;;8539:31;8564:5;8539:31;:::i;:::-;8583:18;;;8459:12;;;;8621;;;;8426:217;;;8662:5;8699:18;;;;8686:32;;-1:-1:-1;;;;;;;7633:1091:13:o;8729:316::-;8915:25;;;8903:2;8888:18;;8970:1;8959:13;;8949:47;;8976:18;;:::i;:::-;9032:6;9027:2;9016:9;9012:18;9005:34;8729:316;;;;;:::o;9050:795::-;9145:6;9153;9161;9169;9222:3;9210:9;9201:7;9197:23;9193:33;9190:53;;;9239:1;9236;9229:12;9190:53;9278:9;9265:23;9297:31;9322:5;9297:31;:::i;:::-;9347:5;-1:-1:-1;9404:2:13;9389:18;;9376:32;9417:33;9376:32;9417:33;:::i;:::-;9469:7;-1:-1:-1;9523:2:13;9508:18;;9495:32;;-1:-1:-1;9578:2:13;9563:18;;9550:32;9605:18;9594:30;;9591:50;;;9637:1;9634;9627:12;9591:50;9660:22;;9713:4;9705:13;;9701:27;-1:-1:-1;9691:55:13;;9742:1;9739;9732:12;9691:55;9765:74;9831:7;9826:2;9813:16;9808:2;9804;9800:11;9765:74;:::i;:::-;9755:84;;;9050:795;;;;;;;:::o;10178:388::-;10246:6;10254;10307:2;10295:9;10286:7;10282:23;10278:32;10275:52;;;10323:1;10320;10313:12;10275:52;10362:9;10349:23;10381:31;10406:5;10381:31;:::i;:::-;10431:5;-1:-1:-1;10488:2:13;10473:18;;10460:32;10501:33;10460:32;10501:33;:::i;10571:301::-;10756:6;10749:14;10742:22;10731:9;10724:41;10801:2;10796;10785:9;10781:18;10774:30;10705:4;10821:45;10862:2;10851:9;10847:18;10839:6;10821:45;:::i;13903:380::-;13982:1;13978:12;;;;14025;;;14046:61;;14100:4;14092:6;14088:17;14078:27;;14046:61;14153:2;14145:6;14142:14;14122:18;14119:38;14116:161;;;14199:10;14194:3;14190:20;14187:1;14180:31;14234:4;14231:1;14224:15;14262:4;14259:1;14252:15;14116:161;;13903:380;;;:::o;15884:291::-;16061:6;16050:9;16043:25;16104:2;16099;16088:9;16084:18;16077:30;16024:4;16124:45;16165:2;16154:9;16150:18;16142:6;16124:45;:::i;17301:127::-;17362:10;17357:3;17353:20;17350:1;17343:31;17393:4;17390:1;17383:15;17417:4;17414:1;17407:15;17433:168;17473:7;17539:1;17535;17531:6;17527:14;17524:1;17521:21;17516:1;17509:9;17502:17;17498:45;17495:71;;;17546:18;;:::i;:::-;-1:-1:-1;17586:9:13;;17433:168::o;19555:128::-;19595:3;19626:1;19622:6;19619:1;19616:13;19613:39;;;19632:18;;:::i;:::-;-1:-1:-1;19668:9:13;;19555:128::o;20402:127::-;20463:10;20458:3;20454:20;20451:1;20444:31;20494:4;20491:1;20484:15;20518:4;20515:1;20508:15;20534:197;20572:3;20600:6;20641:2;20634:5;20630:14;20668:2;20659:7;20656:15;20653:41;;;20674:18;;:::i;:::-;20723:1;20710:15;;20534:197;-1:-1:-1;;;20534:197:13:o;21450:637::-;21730:3;21768:6;21762:13;21784:53;21830:6;21825:3;21818:4;21810:6;21806:17;21784:53;:::i;:::-;21900:13;;21859:16;;;;21922:57;21900:13;21859:16;21956:4;21944:17;;21922:57;:::i;:::-;-1:-1:-1;;;22001:20:13;;22030:22;;;22079:1;22068:13;;21450:637;-1:-1:-1;;;;21450:637:13:o;23219:125::-;23259:4;23287:1;23284;23281:8;23278:34;;;23292:18;;:::i;:::-;-1:-1:-1;23329:9:13;;23219:125::o;23349:786::-;23760:25;23755:3;23748:38;23730:3;23815:6;23809:13;23831:62;23886:6;23881:2;23876:3;23872:12;23865:4;23857:6;23853:17;23831:62;:::i;:::-;23957:19;23952:2;23912:16;;;23944:11;;;23937:40;24002:13;;24024:63;24002:13;24073:2;24065:11;;24058:4;24046:17;;24024:63;:::i;:::-;24107:17;24126:2;24103:26;;23349:786;-1:-1:-1;;;;23349:786:13:o;25729:409::-;25948:25;;;-1:-1:-1;;;;;26009:55:13;;26004:2;25989:18;;25982:83;25936:2;25921:18;;26074:58;26128:2;26113:18;;26105:6;26074:58;:::i;26143:135::-;26182:3;-1:-1:-1;;26203:17:13;;26200:43;;;26223:18;;:::i;:::-;-1:-1:-1;26270:1:13;26259:13;;26143:135::o;26702:127::-;26763:10;26758:3;26754:20;26751:1;26744:31;26794:4;26791:1;26784:15;26818:4;26815:1;26808:15;26834:120;26874:1;26900;26890:35;;26905:18;;:::i;:::-;-1:-1:-1;26939:9:13;;26834:120::o;26959:112::-;26991:1;27017;27007:35;;27022:18;;:::i;:::-;-1:-1:-1;27056:9:13;;26959:112::o;27076:136::-;27115:3;27143:5;27133:39;;27152:18;;:::i;:::-;-1:-1:-1;;;27188:18:13;;27076:136::o;27578:512::-;27772:4;-1:-1:-1;;;;;27882:2:13;27874:6;27870:15;27859:9;27852:34;27934:2;27926:6;27922:15;27917:2;27906:9;27902:18;27895:43;;27974:6;27969:2;27958:9;27954:18;27947:34;28017:3;28012:2;28001:9;27997:18;27990:31;28038:46;28079:3;28068:9;28064:19;28056:6;28038:46;:::i;:::-;28030:54;27578:512;-1:-1:-1;;;;;;27578:512:13:o;28095:249::-;28164:6;28217:2;28205:9;28196:7;28192:23;28188:32;28185:52;;;28233:1;28230;28223:12;28185:52;28265:9;28259:16;28284:30;28308:5;28284:30;:::i
Swarm Source
ipfs://2869657c4e96e7ca52fba3d93e205a97c9081f3e81bd4440e04b3f184743e665
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.