ERC-721
Overview
Max Total Supply
11,111 LOTFB
Holders
1,663
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 LOTFBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LEGEND
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-23 */ // SPDX-License-Identifier: MIT // ███████▓█████▓▓╬╬╬╬╬╬╬╬▓███▓╬╬╬╬╬╬╬▓╬╬▓█ // ████▓▓▓▓╬╬▓█████╬╬╬╬╬╬███▓╬╬╬╬╬╬╬╬╬╬╬╬╬█ // ███▓▓▓▓╬╬╬╬╬╬▓██╬╬╬╬╬╬▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█ // ████▓▓▓╬╬╬╬╬╬╬▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█ // ███▓█▓███████▓▓███▓╬╬╬╬╬╬▓███████▓╬╬╬╬▓█ // ████████████████▓█▓╬╬╬╬╬▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬█ // ███▓▓▓▓▓▓▓╬╬▓▓▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█ // ████▓▓▓╬╬╬╬▓▓▓▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█ // ███▓█▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█ // █████▓▓▓▓▓▓▓▓█▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█ // █████▓▓▓▓▓▓▓██▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██ // █████▓▓▓▓▓████▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██ // ████▓█▓▓▓▓██▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██ // ████▓▓███▓▓▓▓▓▓▓██▓╬╬╬╬╬╬╬╬╬╬╬╬█▓╬▓╬╬▓██ // █████▓███▓▓▓▓▓▓▓▓████▓▓╬╬╬╬╬╬╬█▓╬╬╬╬╬▓██ // █████▓▓█▓███▓▓▓████╬▓█▓▓╬╬╬▓▓█▓╬╬╬╬╬╬███ // ██████▓██▓███████▓╬╬╬▓▓╬▓▓██▓╬╬╬╬╬╬╬▓███ // ███████▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬████ // ███████▓▓██▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓████ // ████████▓▓▓█████▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█████ // █████████▓▓▓█▓▓▓▓▓███▓╬╬╬╬╬╬╬╬╬╬╬▓██████ // ██████████▓▓▓█▓▓▓╬▓██╬╬╬╬╬╬╬╬╬╬╬▓███████ // ███████████▓▓█▓▓▓▓███▓╬╬╬╬╬╬╬╬╬▓████████ // ██████████████▓▓▓███▓▓╬╬╬╬╬╬╬╬██████████ // ███████████████▓▓▓██▓▓╬╬╬╬╬╬▓███████████ // .____ ___________ ___________________ _______ ________ _________ // | | \_ _____// _____/\_ _____/ \ \ \______ \ / _____/ // | | | __)_/ \ ___ | __)_ / | \ | | \ \_____ \ // | |___ | \ \_\ \| \/ | \| ` \/ \ // |_______ \/_______ /\______ /_______ /\____|__ /_______ /_______ / // \/ \/ \/ \/ \/ \/ \/ // ________ ___________ ______________ ______________ // \_____ \ \_ _____/ \__ ___/ | \_ _____/ // / | \ | __) | | / ~ \ __)_ // / | \| \ | | \ Y / \ // \_______ /\___ / |____| \___|_ /_______ / // \/ \/ \/ \/ // ___________._____________ ______________________________ ________ __________ _______ ___________ // \_ _____/| \______ \/ _____/\__ ___/\______ \\_____ \\______ \ \ \ \_ _____/ // | __) | || _/\_____ \ | | | | _/ / | \| _/ / | \ | __)_ // | \ | || | \/ \ | | | | \/ | \ | \/ | \| \ // \___ / |___||____|_ /_______ / |____| |______ /\_______ /____|_ /\____|__ /_______ / // \/ \/ \/ \/ \/ \/ \/ \/ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; library MerkleProof { function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; 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); } 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); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // ───────█████████████████████ // ────████▀─────────────────▀████ // ──███▀───────────────────────▀███ // ─██▀───────────────────────────▀██ // █▀───────────────────────────────▀█ // █─────────────────────────────────█ // █─────────────────────────────────█ // █─────────────────────────────────█ // █───█████─────────────────█████───█ // █──██▓▓▓███─────────────███▓▓▓██──█ // █──██▓▓▓▓▓██───────────██▓▓▓▓▓██──█ // █──██▓▓▓▓▓▓██─────────██▓▓▓▓▓▓██──█ // █▄──████▓▓▓▓██───────██▓▓▓▓████──▄█ // ▀█▄───▀███▓▓▓██─────██▓▓▓███▀───▄█▀ // ──█▄────▀█████▀─────▀█████▀────▄█ // ─▄██───────────▄█─█▄───────────██▄ // ─███───────────██─██───────────███ // ─███───────────────────────────███ // ──▀██──██▀██──█──█──█──██▀██──██▀ // ───▀████▀─██──█──█──█──██─▀████▀ // ────▀██▀──██──█──█──█──██──▀██▀ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ──────────██──█──█──█──██ // ───────────█▄▄█▄▄█▄▄█▄▄█ // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } 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); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } 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); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; interface IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // ,- // // // /: , // ;.( // // | , /`| // // |\ |\ |,| // // | (\ (\ |`| |( // (\ \\ \\ |,| ;| // . || \\ \\ |`( ;( // \\ \\ \\ \\ |.\\ (( // \\ \\ \\ \\ \\ \;/:\ // \\ \\ \'. \\_,\\ /\""-._ // \\ \\ \ \-" \/ `;._ ". // ___\\-\\-" \ \_ /, |_ "._\ // _,--""___ \ \,_ "-_"- |".|(._ ".".-. // _,-"_,--"""__ ) "."-_ "--\ \"("o\_\ "- ". // ,",-""" _.-'''_-" "-_"-.__ \ \_\_//\)__"\_) // ," ',-' ,-"" 7" _ "-.._""_>\__`""'"__ ""``-._ // ; ," ,-",'/` ,":\. ` ` `"""___`""-._ ". ) // ;,"_," ,' /`,"}}::\\ `... \____''' "\ '.|\ // ,"," : /`/{{)/:::"\__,---._ \ \_____'''\ \ // , ,"_ ; /`/ ///::::::::' ,-"-\ \__ \____''\ \ \ // ,," `;| ";; /}}/::'``':::(._``."-.__ """-- '_\ \ \ // (' ;// / {;;:'`````':; /`._.""" ""-.._ `"-. " ( ) // / )(/ <";"'`` ``/ /_.( "_ "-_"\`); // (/ <";"`` `/ /`,( "._ _".\; // |<";"` `` / /"-" " // <";"` `` / /__,; // // // // // // // // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/finalcontract.sol pragma solidity ^0.8.0; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error UnableDetermineTokenOwner(); error URIQueryForNonexistentToken(); contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal _currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function totalSupply() public view override returns (uint256) { return _currentIndex; } function tokenByIndex(uint256 index) public view override returns (uint256) { if (index >= totalSupply()) revert TokenIndexOutOfBounds(); return index; } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } // Execution should never reach this point. assert(false); return tokenIdsIdx; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert UnableDetermineTokenOwner(); } function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) revert ApprovalCallerNotOwnerNorApproved(); _approve(to, tokenId, owner); } function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); if (!_checkOnERC721Received(from, to, tokenId, _data)) revert TransferToNonERC721ReceiverImplementer(); } function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < _currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } updatedIndex++; } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) revert TransferToNonERC721ReceiverImplementer(); else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } contract LEGEND is ERC721A, Ownable{ using Strings for uint256; uint256 public constant MAX_SUPPLY = 11111; uint256 public constant MAX_PUBLIC_MINT = 5; uint256 public constant MAX_WHITELIST_MINT = 5; uint256 public PUBLIC_SALE_PRICE = .00 ether; uint256 public WHITELIST_SALE_PRICE = .00 ether; string private baseTokenUri; string public placeholderTokenUri; //deploy smart contract, toggle WL, toggle WL when done, toggle publicSale //2 days later toggle reveal bool public isRevealed; bool public publicSale; bool public whiteListSale; bool public pause; bool public teamMinted; bytes32 private merkleRoot; mapping(address => uint256) public totalPublicMint; mapping(address => uint256) public totalWhitelistMint; constructor() ERC721A("LEGENDS OF THE FIRSTBORNE", "LOTFB"){ } modifier callerIsUser() { require(tx.origin == msg.sender, "FIRSTBORNE :: Cannot be called by a contract"); _; } function mint(uint256 _quantity) external payable callerIsUser{ require(publicSale, "FIRSTBORNE :: Not Yet Active."); require((totalSupply() + _quantity) <= MAX_SUPPLY, "FIRSTBORNE :: Beyond Max Supply"); require((totalPublicMint[msg.sender] +_quantity) <= MAX_PUBLIC_MINT, "FIRSTBORNE :: Already minted 3 times!"); require(msg.value >= (PUBLIC_SALE_PRICE * _quantity), "FIRSTBORNE :: Below "); totalPublicMint[msg.sender] += _quantity; _safeMint(msg.sender, _quantity); } function whitelistMint(bytes32[] memory _merkleProof, uint256 _quantity) external payable callerIsUser{ require(whiteListSale, "FIRSTBORNE :: Minting is on Pause"); require((totalSupply() + _quantity) <= MAX_SUPPLY, "FIRSTBORNE :: Cannot mint beyond max supply"); require((totalWhitelistMint[msg.sender] + _quantity) <= MAX_WHITELIST_MINT, "FIRSTBORNE :: Cannot mint beyond whitelist max mint!"); require(msg.value >= (WHITELIST_SALE_PRICE * _quantity), "FIRSTBORNE :: Payment is below the price"); //create leaf node bytes32 sender = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, sender), "FIRSTBORNE :: You are not whitelisted"); totalWhitelistMint[msg.sender] += _quantity; _safeMint(msg.sender, _quantity); } function teamMint() external onlyOwner{ require(!teamMinted, "FIRSTBORNE :: Team already minted"); teamMinted = true; _safeMint(msg.sender, 500); } function _baseURI() internal view virtual override returns (string memory) { return baseTokenUri; } //return uri for certain token function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); uint256 trueId = tokenId + 1; if(!isRevealed){ return placeholderTokenUri; } //string memory baseURI = _baseURI(); return bytes(baseTokenUri).length > 0 ? string(abi.encodePacked(baseTokenUri, trueId.toString(), ".json")) : ""; } /// @dev walletOf() function shouldn't be called on-chain due to gas consumption function walletOf() external view returns(uint256[] memory){ address _owner = msg.sender; uint256 numberOfOwnedNFT = balanceOf(_owner); uint256[] memory ownerIds = new uint256[](numberOfOwnedNFT); for(uint256 index = 0; index < numberOfOwnedNFT; index++){ ownerIds[index] = tokenOfOwnerByIndex(_owner, index); } return ownerIds; } function setTokenUri(string memory _baseTokenUri) external onlyOwner{ baseTokenUri = _baseTokenUri; } function setPlaceHolderUri(string memory _placeholderTokenUri) external onlyOwner{ placeholderTokenUri = _placeholderTokenUri; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner{ merkleRoot = _merkleRoot; } function getMerkleRoot() external view returns (bytes32){ return merkleRoot; } function togglePause() external onlyOwner{ pause = !pause; } function toggleWhiteListSale() external onlyOwner{ whiteListSale = !whiteListSale; } function togglePublicSale() external onlyOwner{ publicSale = !publicSale; } function update_public_price(uint price) external onlyOwner { PUBLIC_SALE_PRICE = price; } function update_preSale_price(uint price) external onlyOwner { WHITELIST_SALE_PRICE = price; } function AirDrop(address[] memory _wallets, uint _count) public onlyOwner{ require(_wallets.length > 0, "mint at least one token"); require(totalSupply() + _wallets.length <= MAX_SUPPLY, "not enough tokens left"); for (uint i = 0; i < _wallets.length; i++) { _safeMint(_wallets[i], _count); } } function toggleReveal() external onlyOwner{ isRevealed = !isRevealed; } function withdraw() external onlyOwner{ uint _balance = address(this).balance; payable(owner()).transfer(_balance );//owner } } // ▓▓▓▓▓▓ // ░░▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░ // ▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓░░░░ ░░░░░░▓▓▓▓▓▓ ▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒ ▒▒░░ // ██▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓ ▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ // ▓▓▓▓ ▓▓▓▓ ░░▓▓▒▒ ▓▓▓▓▓▓▓▓▓▓▓▓ ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓ ▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██ ▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒ ▓▓▓▓▓▓▓▓▒▒▒▒▓▓▓▓▓▓▓▓ ▒▒▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░▓▓▓▓▒▒▓▓▓▓▓▓▓▓▒▒ ▓▓▓▓▓▓▓▓▒▒ ▒▒▒▒▓▓▓▓▒▒ ░░▓▓▓▓▓▓▓▓▒▒ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░▒▒ ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓ ░░▓▓▓▓▓▓▓▓▓▓ // ██▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ░░ ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ // ░░▒▒▓▓▓▓░░ ▓▓▓▓▓▓▓▓▓▓▓▓ ░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▒▒▓▓▓▓ ░░▓▓▓▓▓▓▓▓ // ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒ ░░▓▓▒▒ ▓▓▓▓▓▓▓▓▒▒ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ██ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░▓▓ ░░▓▓▓▓▓▓▓▓ // ▒▒▓▓▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▓▓░░ ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓░░ ▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▒▒ ▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓ ██ ██ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓▓▓▓▓▓ // ░░▓▓▓▓▓▓░░▓▓ ▓▓ ░░▓▓▓▓░░ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░▓▓ ▒▒▓▓ ▓▓▓▓▓▓▓▓ // ░░▓▓░░ ▓▓░░ ▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ ░░▓▓ ░░▓▓▓▓▓▓ // ██ ░░▓▓ ██ ▓▓▒▒ ██ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▓▓ ▓▓ ░░▓▓ ▓▓▓▓▓▓ // ░░ ░░▓▓ ▒▒▒▒▓▓▒▒▒▒▒▒ ▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓ ░░▓▓ ▓▓▓▓▓▓ // ▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ░░ ▓▓ ░░▓▓ ▓▓▓▓▓▓ // ██ ▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓░░▓▓▓▓ ░░▓▓ ▓▓▓▓▓▓ // ▓▓ ▒▒ ▓▓▓▓ ██▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ ░░██ ▓▓▓▓▓▓ // ▒▒▓▓ ▒▒▓▓ ░░░░ ▒▒▒▒▓▓▓▓▓▓▓▓▓▓██░░ ░░ ░░ ▓▓▓▓▓▓ // ▓▓▒▒ ▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓░░ // ▒▒▒▒ ▒▒▓▓ ▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒ ▓▓▓▓ // ░░ ▒▒▓▓░░ ▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ░░▒▒▓▓▓▓ // ▓▓ ▓▓░░ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓░░ // ▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓▓ // ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░██ ▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓▓░░ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓▓▓ // ██ ▓▓▓▓▓▓ ░░▓▓▓▓██▓▓ ▓▓▓▓ ▓▓▓▓▓▓ // ▓▓ ▓▓▓▓░░ ▓▓▓▓▓▓▒▒ ▓▓▓▓ ▓▓▓▓▒▒ // ░░ ▓▓▓▓ ░░▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓░░ // ▓▓▓▓▒▒ ░░▓▓▓▓▓▓▓▓▓▓▓▓▒▒ ▓▓▓▓▒▒ ▒▒▓▓ // ░░▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▒▒▓▓▓▓▒▒ ▓▓▓▓ // ▓▓▓▓ ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▒▒ ▓▓ // ▓▓▓▓ ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓ // ▓▓▓▓▓▓ ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██░░ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▒▒ ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓ // ░░▓▓▓▓▓▓ ░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ ░░▓▓ // ░░▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ // ░░▓▓▓▓▓▓▒▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓ // ░░░░▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░ ▓▓ // ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ // ▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▓▓░░░░ // ░░▓▓▓▓▓▓▓▓▓▓░░░░ ▓▓▓▓▓▓▓▓▓▓▓▓ ░░░░ // ░░▓▓▓▓▓▓▓▓ ░░ // ▓▓▓▓▓▓░░░░ // ▓▓▓▓▓▓░░ // ▓▓▓▓ ░░▓▓▓▓██▓▓ // ▓▓▓▓ ▓▓▓▓▓▓▓▓▒▒▒▒▒▒ // ▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▒▒ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ░░▓▓▓▓▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒ ▓▓▓▓▓▓▒▒ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓░░ ▓▓▓▓▓▓ // ░░▓▓▓▓▓▓▓▓██▓▓ ▓▓ ▓▓▓▓▓▓▓▓ // ▓▓ ░░▓▓▒▒ ▓▓ ▓▓▓▓▓▓ // ▒▒▒▒▓▓ ░░░░ ░░▒▒░░▓▓▓▓▒▒ // ▒▒▓▓▓▓▓▓ ▓▓ ▓▓▓▓▓▓ ░░░░ // ░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ░░ ░░▓▓▓▓ ░░ ░░ // ░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▓▓ ▓▓▓▓ ░░░░ ▒▒ ░░░░▒▒░░ // ░░░░░░░░░░░░▓▓▓▓▓▓▓▓ ▓▓▓▓ ░░▒▒░░▒▒▒▒░░ // ▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▓▓▓▓ ▓▓▓▓ // ▓▓▓▓▓▓▓▓▒▒▒▒▓▓░░ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓▓▓▓▓▓▓ // ▓▓▓▓▓▓▓▓ ▓▓▓▓░░ // ██▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓░░ // ██▓▓ ▓▓▓▓ ▓▓▓▓▓▓░░ // ▓▓░░ ▒▒▓▓ ▒▒▓▓▓▓▓▓ // ▓▓▒▒ ░░▓▓ ▓▓▓▓▓▓▓▓ // ▓▓ ▒▒▓▓ ▒▒▓▓▓▓▒▒░░ // ▓▓ ▒▒▓▓░░ ▒▒▓▓▓▓▓▓ // ▓▓▓▓ ▓▓▒▒▓▓▓▓░░ ▓▓▓▓▓▓░░ // ▓▓▓▓ ░░▓▓▓▓▓▓ ▓▓▓▓▓▓ // ▓▓▓▓ ▓▓▓▓▓▓██ // ▓▓▓▓ ▓▓▓▓▓▓▓▓ // ░░▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MAX_PUBLIC_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WHITELIST_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WHITELIST_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeholderTokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_placeholderTokenUri","type":"string"}],"name":"setPlaceHolderUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenUri","type":"string"}],"name":"setTokenUri","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":[],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhiteListSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"totalPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalWhitelistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_preSale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_public_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060085560006009553480156200001b57600080fd5b50604080518082018252601981527f4c4547454e4453204f4620544845204649525354424f524e45000000000000006020808301918252835180850190945260058452642627aa232160d91b9084015281519192916200007e916001916200010d565b508051620000949060029060208401906200010d565b505050620000b1620000ab620000b760201b60201c565b620000bb565b620001f0565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011b90620001b3565b90600052602060002090601f0160209004810192826200013f57600085556200018a565b82601f106200015a57805160ff19168380011785556200018a565b828001600101855582156200018a579182015b828111156200018a5782518255916020019190600101906200016d565b50620001989291506200019c565b5090565b5b808211156200019857600081556001016200019d565b600181811c90821680620001c857607f821691505b60208210811415620001ea57634e487b7160e01b600052602260045260246000fd5b50919050565b6128a880620002006000396000f3fe6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063e222c7f91161007a578063e222c7f91461075a578063e2a70eaf1461076f578063e8b5498d1461078f578063e985e9c5146107b1578063eeb9052f146107fa578063f2fde38b1461081a57600080fd5b8063b88d4fde146106da578063ba7a86b8146106fa578063bc912e1a1461070f578063c08dfd3c14610572578063c4ae316814610725578063c87b56dd1461073a57600080fd5b80638bb64a8c116101135780638bb64a8c1461063f5780638da5cb5b1461065457806395d89b4114610672578063a0712d6814610687578063a22cb4651461069a578063b0962c53146106ba57600080fd5b806370a0823114610587578063715018a6146105a75780637cb64759146105bc57806383a974a2146105dc5780638456cb59146105fe57806386a173ee1461061f57600080fd5b806332cb6b0c116101fe5780634f6ccce7116101b75780634f6ccce7146104e357806354214f69146105035780635b8ad4291461051d5780636352211e1461053257806363adc5a51461055257806365f130971461057257600080fd5b806332cb6b0c1461044f57806333bc1c5c146104655780633ccfd60b1461048457806342842e0e1461049957806349590657146104b95780634cf5f7a4146104ce57600080fd5b8063095ea7b311610250578063095ea7b31461039a57806318160ddd146103ba5780631c16521c146103cf57806323b872dd146103fc5780632904e6d91461041c5780632f745c591461042f57600080fd5b806301ffc9a7146102985780630345e3cb146102cd5780630675b7c61461030857806306fdde031461032a57806307e89ec01461034c578063081812fc14610362575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612409565b61083a565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102fa6102e836600461214f565b600f6020526000908152604090205481565b6040519081526020016102c4565b34801561031457600080fd5b50610328610323366004612443565b6108a7565b005b34801561033657600080fd5b5061033f6108f1565b6040516102c4919061260f565b34801561035857600080fd5b506102fa60085481565b34801561036e57600080fd5b5061038261037d3660046123f0565b610983565b6040516001600160a01b0390911681526020016102c4565b3480156103a657600080fd5b506103286103b5366004612290565b6109c9565b3480156103c657600080fd5b506000546102fa565b3480156103db57600080fd5b506102fa6103ea36600461214f565b600e6020526000908152604090205481565b34801561040857600080fd5b5061032861041736600461219d565b610a57565b61032861042a366004612363565b610a62565b34801561043b57600080fd5b506102fa61044a366004612290565b610d22565b34801561045b57600080fd5b506102fa612b6781565b34801561047157600080fd5b50600c546102b890610100900460ff1681565b34801561049057600080fd5b50610328610df6565b3480156104a557600080fd5b506103286104b436600461219d565b610e6b565b3480156104c557600080fd5b50600d546102fa565b3480156104da57600080fd5b5061033f610e86565b3480156104ef57600080fd5b506102fa6104fe3660046123f0565b610f14565b34801561050f57600080fd5b50600c546102b89060ff1681565b34801561052957600080fd5b50610328610f3b565b34801561053e57600080fd5b5061038261054d3660046123f0565b610f79565b34801561055e57600080fd5b5061032861056d3660046123f0565b610f8b565b34801561057e57600080fd5b506102fa600581565b34801561059357600080fd5b506102fa6105a236600461214f565b610fba565b3480156105b357600080fd5b50610328611008565b3480156105c857600080fd5b506103286105d73660046123f0565b61103e565b3480156105e857600080fd5b506105f161106d565b6040516102c491906125cb565b34801561060a57600080fd5b50600c546102b8906301000000900460ff1681565b34801561062b57600080fd5b50600c546102b89062010000900460ff1681565b34801561064b57600080fd5b5061032861110f565b34801561066057600080fd5b506007546001600160a01b0316610382565b34801561067e57600080fd5b5061033f611158565b6103286106953660046123f0565b611167565b3480156106a657600080fd5b506103286106b5366004612254565b611342565b3480156106c657600080fd5b506103286106d5366004612443565b6113d8565b3480156106e657600080fd5b506103286106f53660046121d9565b611415565b34801561070657600080fd5b5061032861144f565b34801561071b57600080fd5b506102fa60095481565b34801561073157600080fd5b506103286114ff565b34801561074657600080fd5b5061033f6107553660046123f0565b61154a565b34801561076657600080fd5b506103286116c6565b34801561077b57600080fd5b5061032861078a3660046123f0565b61170d565b34801561079b57600080fd5b50600c546102b890640100000000900460ff1681565b3480156107bd57600080fd5b506102b86107cc36600461216a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561080657600080fd5b506103286108153660046122ba565b61173c565b34801561082657600080fd5b5061032861083536600461214f565b611857565b60006001600160e01b031982166380ac58cd60e01b148061086b57506001600160e01b03198216635b5e139f60e01b145b8061088657506001600160e01b0319821663780e9d6360e01b145b806108a157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146108da5760405162461bcd60e51b81526004016108d19061266e565b60405180910390fd5b80516108ed90600a90602084019061204c565b5050565b60606001805461090090612784565b80601f016020809104026020016040519081016040528092919081815260200182805461092c90612784565b80156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b6000610990826000541190565b6109ad576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006109d482610f79565b9050806001600160a01b0316836001600160a01b03161415610a095760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a295750610a2781336107cc565b155b15610a47576040516367d9dca160e11b815260040160405180910390fd5b610a528383836118ef565b505050565b610a5283838361194b565b323314610a815760405162461bcd60e51b81526004016108d190612622565b600c5462010000900460ff16610ae35760405162461bcd60e51b815260206004820152602160248201527f4649525354424f524e45203a3a204d696e74696e67206973206f6e20506175736044820152606560f81b60648201526084016108d1565b612b6781610af060005490565b610afa91906126f6565b1115610b5c5760405162461bcd60e51b815260206004820152602b60248201527f4649525354424f524e45203a3a2043616e6e6f74206d696e74206265796f6e6460448201526a206d617820737570706c7960a81b60648201526084016108d1565b336000908152600f6020526040902054600590610b7a9083906126f6565b1115610be55760405162461bcd60e51b815260206004820152603460248201527f4649525354424f524e45203a3a2043616e6e6f74206d696e74206265796f6e646044820152732077686974656c697374206d6178206d696e742160601b60648201526084016108d1565b80600954610bf39190612722565b341015610c535760405162461bcd60e51b815260206004820152602860248201527f4649525354424f524e45203a3a205061796d656e742069732062656c6f772074604482015267686520707269636560c01b60648201526084016108d1565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c9983600d5483611b68565b610cf35760405162461bcd60e51b815260206004820152602560248201527f4649525354424f524e45203a3a20596f7520617265206e6f742077686974656c6044820152641a5cdd195960da1b60648201526084016108d1565b336000908152600f602052604081208054849290610d129084906126f6565b90915550610a5290503383611b7e565b6000610d2d83610fba565b8210610d4c576040516306ed618760e11b815260040160405180910390fd5b600080549080805b83811015610de4576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610da657805192505b876001600160a01b0316836001600160a01b03161415610ddb5786841415610dd4575093506108a192505050565b6001909301925b50600101610d54565b50610ded6127ee565b50949350505050565b6007546001600160a01b03163314610e205760405162461bcd60e51b81526004016108d19061266e565b47610e336007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156108ed573d6000803e3d6000fd5b610a5283838360405180602001604052806000815250611415565b600b8054610e9390612784565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebf90612784565b8015610f0c5780601f10610ee157610100808354040283529160200191610f0c565b820191906000526020600020905b815481529060010190602001808311610eef57829003601f168201915b505050505081565b600080548210610f37576040516329c8c00760e21b815260040160405180910390fd5b5090565b6007546001600160a01b03163314610f655760405162461bcd60e51b81526004016108d19061266e565b600c805460ff19811660ff90911615179055565b6000610f8482611b98565b5192915050565b6007546001600160a01b03163314610fb55760405162461bcd60e51b81526004016108d19061266e565b600955565b60006001600160a01b038216610fe3576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b031633146110325760405162461bcd60e51b81526004016108d19061266e565b61103c6000611c2c565b565b6007546001600160a01b031633146110685760405162461bcd60e51b81526004016108d19061266e565b600d55565b606033600061107b82610fba565b90506000816001600160401b0381111561109757611097612846565b6040519080825280602002602001820160405280156110c0578160200160208202803683370190505b50905060005b82811015611107576110d88482610d22565b8282815181106110ea576110ea612830565b6020908102919091010152806110ff816127bf565b9150506110c6565b509392505050565b6007546001600160a01b031633146111395760405162461bcd60e51b81526004016108d19061266e565b600c805462ff0000198116620100009182900460ff1615909102179055565b60606002805461090090612784565b3233146111865760405162461bcd60e51b81526004016108d190612622565b600c54610100900460ff166111dd5760405162461bcd60e51b815260206004820152601d60248201527f4649525354424f524e45203a3a204e6f7420596574204163746976652e00000060448201526064016108d1565b612b67816111ea60005490565b6111f491906126f6565b11156112425760405162461bcd60e51b815260206004820152601f60248201527f4649525354424f524e45203a3a204265796f6e64204d617820537570706c790060448201526064016108d1565b336000908152600e60205260409020546005906112609083906126f6565b11156112bc5760405162461bcd60e51b815260206004820152602560248201527f4649525354424f524e45203a3a20416c7265616479206d696e74656420332074604482015264696d65732160d81b60648201526084016108d1565b806008546112ca9190612722565b3410156113105760405162461bcd60e51b815260206004820152601460248201527302324a929aa2127a92722901d1d102132b637bb960651b60448201526064016108d1565b336000908152600e60205260408120805483929061132f9084906126f6565b9091555061133f90503382611b7e565b50565b6001600160a01b03821633141561136c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146114025760405162461bcd60e51b81526004016108d19061266e565b80516108ed90600b90602084019061204c565b61142084848461194b565b61142c84848484611c7e565b611449576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b031633146114795760405162461bcd60e51b81526004016108d19061266e565b600c54640100000000900460ff16156114de5760405162461bcd60e51b815260206004820152602160248201527f4649525354424f524e45203a3a205465616d20616c7265616479206d696e74656044820152601960fa1b60648201526084016108d1565b600c805464ff00000000191664010000000017905561103c336101f4611b7e565b6007546001600160a01b031633146115295760405162461bcd60e51b81526004016108d19061266e565b600c805463ff00000019811663010000009182900460ff1615909102179055565b6060611557826000541190565b6115bb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108d1565b60006115c88360016126f6565b600c5490915060ff1661166857600b80546115e290612784565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612784565b801561165b5780601f106116305761010080835404028352916020019161165b565b820191906000526020600020905b81548152906001019060200180831161163e57829003601f168201915b5050505050915050919050565b6000600a805461167790612784565b90501161169357604051806020016040528060008152506116bf565b600a61169e82611d8d565b6040516020016116af9291906124d3565b6040516020818303038152906040525b9392505050565b6007546001600160a01b031633146116f05760405162461bcd60e51b81526004016108d19061266e565b600c805461ff001981166101009182900460ff1615909102179055565b6007546001600160a01b031633146117375760405162461bcd60e51b81526004016108d19061266e565b600855565b6007546001600160a01b031633146117665760405162461bcd60e51b81526004016108d19061266e565b60008251116117b75760405162461bcd60e51b815260206004820152601760248201527f6d696e74206174206c65617374206f6e6520746f6b656e00000000000000000060448201526064016108d1565b612b6782516117c560005490565b6117cf91906126f6565b11156118165760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108d1565b60005b8251811015610a525761184583828151811061183757611837612830565b602002602001015183611b7e565b8061184f816127bf565b915050611819565b6007546001600160a01b031633146118815760405162461bcd60e51b81526004016108d19061266e565b6001600160a01b0381166118e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d1565b61133f81611c2c565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061195682611b98565b80519091506000906001600160a01b0316336001600160a01b0316148061198d57503361198284610983565b6001600160a01b0316145b8061199f5750815161199f90336107cc565b9050806119bf57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146119f45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611a1b57604051633a954ecd60e21b815260040160405180910390fd5b611a2b60008484600001516118ef565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b426001600160401b031602179055908601808352912054909116611b1e57611ad2816000541190565b15611b1e57825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b600082611b758584611e8a565b14949350505050565b6108ed828260405180602001604052806000815250611ef6565b6040805180820190915260008082526020820152611bb7826000541190565b611bd457604051636f96cda160e11b815260040160405180910390fd5b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611c22579392505050565b5060001901611bd6565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611d8157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cc290339089908890889060040161258e565b602060405180830381600087803b158015611cdc57600080fd5b505af1925050508015611d0c575060408051601f3d908101601f19168201909252611d0991810190612426565b60015b611d67573d808015611d3a576040519150601f19603f3d011682016040523d82523d6000602084013e611d3f565b606091505b508051611d5f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d85565b5060015b949350505050565b606081611db15750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ddb5780611dc5816127bf565b9150611dd49050600a8361270e565b9150611db5565b6000816001600160401b03811115611df557611df5612846565b6040519080825280601f01601f191660200182016040528015611e1f576020820181803683370190505b5090505b8415611d8557611e34600183612741565b9150611e41600a866127da565b611e4c9060306126f6565b60f81b818381518110611e6157611e61612830565b60200101906001600160f81b031916908160001a905350611e83600a8661270e565b9450611e23565b600081815b8451811015611107576000858281518110611eac57611eac612830565b60200260200101519050808311611ed25760008381526020829052604090209250611ee3565b600081815260208490526040902092505b5080611eee816127bf565b915050611e8f565b610a5283838360016000546001600160a01b038516611f2757604051622e076360e81b815260040160405180910390fd5b83611f455760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b426001600160401b0316021790915581905b858110156120435760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a483801561201957506120176000888488611c7e565b155b15612037576040516368d2bf6b60e11b815260040160405180910390fd5b60019182019101611fc2565b50600055611b61565b82805461205890612784565b90600052602060002090601f01602090048101928261207a57600085556120c0565b82601f1061209357805160ff19168380011785556120c0565b828001600101855582156120c0579182015b828111156120c05782518255916020019190600101906120a5565b50610f379291505b80821115610f3757600081556001016120c8565b60006001600160401b038311156120f5576120f5612846565b612108601f8401601f19166020016126a3565b905082815283838301111561211c57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461214a57600080fd5b919050565b60006020828403121561216157600080fd5b6116bf82612133565b6000806040838503121561217d57600080fd5b61218683612133565b915061219460208401612133565b90509250929050565b6000806000606084860312156121b257600080fd5b6121bb84612133565b92506121c960208501612133565b9150604084013590509250925092565b600080600080608085870312156121ef57600080fd5b6121f885612133565b935061220660208601612133565b92506040850135915060608501356001600160401b0381111561222857600080fd5b8501601f8101871361223957600080fd5b612248878235602084016120dc565b91505092959194509250565b6000806040838503121561226757600080fd5b61227083612133565b91506020830135801515811461228557600080fd5b809150509250929050565b600080604083850312156122a357600080fd5b6122ac83612133565b946020939093013593505050565b600080604083850312156122cd57600080fd5b82356001600160401b038111156122e357600080fd5b8301601f810185136122f457600080fd5b80356020612309612304836126d3565b6126a3565b80838252828201915082850189848660051b880101111561232957600080fd5b600095505b848610156123535761233f81612133565b83526001959095019491830191830161232e565b5098969091013596505050505050565b6000806040838503121561237657600080fd5b82356001600160401b0381111561238c57600080fd5b8301601f8101851361239d57600080fd5b803560206123ad612304836126d3565b80838252828201915082850189848660051b88010111156123cd57600080fd5b600095505b848610156123535780358352600195909501949183019183016123d2565b60006020828403121561240257600080fd5b5035919050565b60006020828403121561241b57600080fd5b81356116bf8161285c565b60006020828403121561243857600080fd5b81516116bf8161285c565b60006020828403121561245557600080fd5b81356001600160401b0381111561246b57600080fd5b8201601f8101841361247c57600080fd5b611d85848235602084016120dc565b600081518084526124a3816020860160208601612758565b601f01601f19169290920160200192915050565b600081516124c9818560208601612758565b9290920192915050565b600080845481600182811c9150808316806124ef57607f831692505b602080841082141561250f57634e487b7160e01b86526022600452602486fd5b818015612523576001811461253457612561565b60ff19861689528489019650612561565b60008b81526020902060005b868110156125595781548b820152908501908301612540565b505084890196505b50505050505061258561257482866124b7565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125c19083018461248b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612603578351835292840192918401916001016125e7565b50909695505050505050565b6020815260006116bf602083018461248b565b6020808252602c908201527f4649525354424f524e45203a3a2043616e6e6f742062652063616c6c6564206260408201526b1e48184818dbdb9d1c9858dd60a21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156126cb576126cb612846565b604052919050565b60006001600160401b038211156126ec576126ec612846565b5060051b60200190565b6000821982111561270957612709612804565b500190565b60008261271d5761271d61281a565b500490565b600081600019048311821515161561273c5761273c612804565b500290565b60008282101561275357612753612804565b500390565b60005b8381101561277357818101518382015260200161275b565b838111156114495750506000910152565b600181811c9082168061279857607f821691505b602082108114156127b957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127d3576127d3612804565b5060010190565b6000826127e9576127e961281a565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461133f57600080fdfea2646970667358221220978223150105f46e7847f1989da1f79f1c4d9c80a37611cacda3db9dd5f559e064736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102935760003560e01c806370a082311161015a578063b88d4fde116100c1578063e222c7f91161007a578063e222c7f91461075a578063e2a70eaf1461076f578063e8b5498d1461078f578063e985e9c5146107b1578063eeb9052f146107fa578063f2fde38b1461081a57600080fd5b8063b88d4fde146106da578063ba7a86b8146106fa578063bc912e1a1461070f578063c08dfd3c14610572578063c4ae316814610725578063c87b56dd1461073a57600080fd5b80638bb64a8c116101135780638bb64a8c1461063f5780638da5cb5b1461065457806395d89b4114610672578063a0712d6814610687578063a22cb4651461069a578063b0962c53146106ba57600080fd5b806370a0823114610587578063715018a6146105a75780637cb64759146105bc57806383a974a2146105dc5780638456cb59146105fe57806386a173ee1461061f57600080fd5b806332cb6b0c116101fe5780634f6ccce7116101b75780634f6ccce7146104e357806354214f69146105035780635b8ad4291461051d5780636352211e1461053257806363adc5a51461055257806365f130971461057257600080fd5b806332cb6b0c1461044f57806333bc1c5c146104655780633ccfd60b1461048457806342842e0e1461049957806349590657146104b95780634cf5f7a4146104ce57600080fd5b8063095ea7b311610250578063095ea7b31461039a57806318160ddd146103ba5780631c16521c146103cf57806323b872dd146103fc5780632904e6d91461041c5780632f745c591461042f57600080fd5b806301ffc9a7146102985780630345e3cb146102cd5780630675b7c61461030857806306fdde031461032a57806307e89ec01461034c578063081812fc14610362575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612409565b61083a565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102fa6102e836600461214f565b600f6020526000908152604090205481565b6040519081526020016102c4565b34801561031457600080fd5b50610328610323366004612443565b6108a7565b005b34801561033657600080fd5b5061033f6108f1565b6040516102c4919061260f565b34801561035857600080fd5b506102fa60085481565b34801561036e57600080fd5b5061038261037d3660046123f0565b610983565b6040516001600160a01b0390911681526020016102c4565b3480156103a657600080fd5b506103286103b5366004612290565b6109c9565b3480156103c657600080fd5b506000546102fa565b3480156103db57600080fd5b506102fa6103ea36600461214f565b600e6020526000908152604090205481565b34801561040857600080fd5b5061032861041736600461219d565b610a57565b61032861042a366004612363565b610a62565b34801561043b57600080fd5b506102fa61044a366004612290565b610d22565b34801561045b57600080fd5b506102fa612b6781565b34801561047157600080fd5b50600c546102b890610100900460ff1681565b34801561049057600080fd5b50610328610df6565b3480156104a557600080fd5b506103286104b436600461219d565b610e6b565b3480156104c557600080fd5b50600d546102fa565b3480156104da57600080fd5b5061033f610e86565b3480156104ef57600080fd5b506102fa6104fe3660046123f0565b610f14565b34801561050f57600080fd5b50600c546102b89060ff1681565b34801561052957600080fd5b50610328610f3b565b34801561053e57600080fd5b5061038261054d3660046123f0565b610f79565b34801561055e57600080fd5b5061032861056d3660046123f0565b610f8b565b34801561057e57600080fd5b506102fa600581565b34801561059357600080fd5b506102fa6105a236600461214f565b610fba565b3480156105b357600080fd5b50610328611008565b3480156105c857600080fd5b506103286105d73660046123f0565b61103e565b3480156105e857600080fd5b506105f161106d565b6040516102c491906125cb565b34801561060a57600080fd5b50600c546102b8906301000000900460ff1681565b34801561062b57600080fd5b50600c546102b89062010000900460ff1681565b34801561064b57600080fd5b5061032861110f565b34801561066057600080fd5b506007546001600160a01b0316610382565b34801561067e57600080fd5b5061033f611158565b6103286106953660046123f0565b611167565b3480156106a657600080fd5b506103286106b5366004612254565b611342565b3480156106c657600080fd5b506103286106d5366004612443565b6113d8565b3480156106e657600080fd5b506103286106f53660046121d9565b611415565b34801561070657600080fd5b5061032861144f565b34801561071b57600080fd5b506102fa60095481565b34801561073157600080fd5b506103286114ff565b34801561074657600080fd5b5061033f6107553660046123f0565b61154a565b34801561076657600080fd5b506103286116c6565b34801561077b57600080fd5b5061032861078a3660046123f0565b61170d565b34801561079b57600080fd5b50600c546102b890640100000000900460ff1681565b3480156107bd57600080fd5b506102b86107cc36600461216a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561080657600080fd5b506103286108153660046122ba565b61173c565b34801561082657600080fd5b5061032861083536600461214f565b611857565b60006001600160e01b031982166380ac58cd60e01b148061086b57506001600160e01b03198216635b5e139f60e01b145b8061088657506001600160e01b0319821663780e9d6360e01b145b806108a157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146108da5760405162461bcd60e51b81526004016108d19061266e565b60405180910390fd5b80516108ed90600a90602084019061204c565b5050565b60606001805461090090612784565b80601f016020809104026020016040519081016040528092919081815260200182805461092c90612784565b80156109795780601f1061094e57610100808354040283529160200191610979565b820191906000526020600020905b81548152906001019060200180831161095c57829003601f168201915b5050505050905090565b6000610990826000541190565b6109ad576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006109d482610f79565b9050806001600160a01b0316836001600160a01b03161415610a095760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a295750610a2781336107cc565b155b15610a47576040516367d9dca160e11b815260040160405180910390fd5b610a528383836118ef565b505050565b610a5283838361194b565b323314610a815760405162461bcd60e51b81526004016108d190612622565b600c5462010000900460ff16610ae35760405162461bcd60e51b815260206004820152602160248201527f4649525354424f524e45203a3a204d696e74696e67206973206f6e20506175736044820152606560f81b60648201526084016108d1565b612b6781610af060005490565b610afa91906126f6565b1115610b5c5760405162461bcd60e51b815260206004820152602b60248201527f4649525354424f524e45203a3a2043616e6e6f74206d696e74206265796f6e6460448201526a206d617820737570706c7960a81b60648201526084016108d1565b336000908152600f6020526040902054600590610b7a9083906126f6565b1115610be55760405162461bcd60e51b815260206004820152603460248201527f4649525354424f524e45203a3a2043616e6e6f74206d696e74206265796f6e646044820152732077686974656c697374206d6178206d696e742160601b60648201526084016108d1565b80600954610bf39190612722565b341015610c535760405162461bcd60e51b815260206004820152602860248201527f4649525354424f524e45203a3a205061796d656e742069732062656c6f772074604482015267686520707269636560c01b60648201526084016108d1565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050610c9983600d5483611b68565b610cf35760405162461bcd60e51b815260206004820152602560248201527f4649525354424f524e45203a3a20596f7520617265206e6f742077686974656c6044820152641a5cdd195960da1b60648201526084016108d1565b336000908152600f602052604081208054849290610d129084906126f6565b90915550610a5290503383611b7e565b6000610d2d83610fba565b8210610d4c576040516306ed618760e11b815260040160405180910390fd5b600080549080805b83811015610de4576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215610da657805192505b876001600160a01b0316836001600160a01b03161415610ddb5786841415610dd4575093506108a192505050565b6001909301925b50600101610d54565b50610ded6127ee565b50949350505050565b6007546001600160a01b03163314610e205760405162461bcd60e51b81526004016108d19061266e565b47610e336007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156108ed573d6000803e3d6000fd5b610a5283838360405180602001604052806000815250611415565b600b8054610e9390612784565b80601f0160208091040260200160405190810160405280929190818152602001828054610ebf90612784565b8015610f0c5780601f10610ee157610100808354040283529160200191610f0c565b820191906000526020600020905b815481529060010190602001808311610eef57829003601f168201915b505050505081565b600080548210610f37576040516329c8c00760e21b815260040160405180910390fd5b5090565b6007546001600160a01b03163314610f655760405162461bcd60e51b81526004016108d19061266e565b600c805460ff19811660ff90911615179055565b6000610f8482611b98565b5192915050565b6007546001600160a01b03163314610fb55760405162461bcd60e51b81526004016108d19061266e565b600955565b60006001600160a01b038216610fe3576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6007546001600160a01b031633146110325760405162461bcd60e51b81526004016108d19061266e565b61103c6000611c2c565b565b6007546001600160a01b031633146110685760405162461bcd60e51b81526004016108d19061266e565b600d55565b606033600061107b82610fba565b90506000816001600160401b0381111561109757611097612846565b6040519080825280602002602001820160405280156110c0578160200160208202803683370190505b50905060005b82811015611107576110d88482610d22565b8282815181106110ea576110ea612830565b6020908102919091010152806110ff816127bf565b9150506110c6565b509392505050565b6007546001600160a01b031633146111395760405162461bcd60e51b81526004016108d19061266e565b600c805462ff0000198116620100009182900460ff1615909102179055565b60606002805461090090612784565b3233146111865760405162461bcd60e51b81526004016108d190612622565b600c54610100900460ff166111dd5760405162461bcd60e51b815260206004820152601d60248201527f4649525354424f524e45203a3a204e6f7420596574204163746976652e00000060448201526064016108d1565b612b67816111ea60005490565b6111f491906126f6565b11156112425760405162461bcd60e51b815260206004820152601f60248201527f4649525354424f524e45203a3a204265796f6e64204d617820537570706c790060448201526064016108d1565b336000908152600e60205260409020546005906112609083906126f6565b11156112bc5760405162461bcd60e51b815260206004820152602560248201527f4649525354424f524e45203a3a20416c7265616479206d696e74656420332074604482015264696d65732160d81b60648201526084016108d1565b806008546112ca9190612722565b3410156113105760405162461bcd60e51b815260206004820152601460248201527302324a929aa2127a92722901d1d102132b637bb960651b60448201526064016108d1565b336000908152600e60205260408120805483929061132f9084906126f6565b9091555061133f90503382611b7e565b50565b6001600160a01b03821633141561136c5760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6007546001600160a01b031633146114025760405162461bcd60e51b81526004016108d19061266e565b80516108ed90600b90602084019061204c565b61142084848461194b565b61142c84848484611c7e565b611449576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6007546001600160a01b031633146114795760405162461bcd60e51b81526004016108d19061266e565b600c54640100000000900460ff16156114de5760405162461bcd60e51b815260206004820152602160248201527f4649525354424f524e45203a3a205465616d20616c7265616479206d696e74656044820152601960fa1b60648201526084016108d1565b600c805464ff00000000191664010000000017905561103c336101f4611b7e565b6007546001600160a01b031633146115295760405162461bcd60e51b81526004016108d19061266e565b600c805463ff00000019811663010000009182900460ff1615909102179055565b6060611557826000541190565b6115bb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108d1565b60006115c88360016126f6565b600c5490915060ff1661166857600b80546115e290612784565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612784565b801561165b5780601f106116305761010080835404028352916020019161165b565b820191906000526020600020905b81548152906001019060200180831161163e57829003601f168201915b5050505050915050919050565b6000600a805461167790612784565b90501161169357604051806020016040528060008152506116bf565b600a61169e82611d8d565b6040516020016116af9291906124d3565b6040516020818303038152906040525b9392505050565b6007546001600160a01b031633146116f05760405162461bcd60e51b81526004016108d19061266e565b600c805461ff001981166101009182900460ff1615909102179055565b6007546001600160a01b031633146117375760405162461bcd60e51b81526004016108d19061266e565b600855565b6007546001600160a01b031633146117665760405162461bcd60e51b81526004016108d19061266e565b60008251116117b75760405162461bcd60e51b815260206004820152601760248201527f6d696e74206174206c65617374206f6e6520746f6b656e00000000000000000060448201526064016108d1565b612b6782516117c560005490565b6117cf91906126f6565b11156118165760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016108d1565b60005b8251811015610a525761184583828151811061183757611837612830565b602002602001015183611b7e565b8061184f816127bf565b915050611819565b6007546001600160a01b031633146118815760405162461bcd60e51b81526004016108d19061266e565b6001600160a01b0381166118e65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108d1565b61133f81611c2c565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061195682611b98565b80519091506000906001600160a01b0316336001600160a01b0316148061198d57503361198284610983565b6001600160a01b0316145b8061199f5750815161199f90336107cc565b9050806119bf57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146119f45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416611a1b57604051633a954ecd60e21b815260040160405180910390fd5b611a2b60008484600001516118ef565b6001600160a01b03858116600090815260046020908152604080832080546001600160801b03198082166001600160801b03928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080546001600160e01b031916909117600160a01b426001600160401b031602179055908601808352912054909116611b1e57611ad2816000541190565b15611b1e57825160008281526003602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b600082611b758584611e8a565b14949350505050565b6108ed828260405180602001604052806000815250611ef6565b6040805180820190915260008082526020820152611bb7826000541190565b611bd457604051636f96cda160e11b815260040160405180910390fd5b815b6000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215611c22579392505050565b5060001901611bd6565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b15611d8157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611cc290339089908890889060040161258e565b602060405180830381600087803b158015611cdc57600080fd5b505af1925050508015611d0c575060408051601f3d908101601f19168201909252611d0991810190612426565b60015b611d67573d808015611d3a576040519150601f19603f3d011682016040523d82523d6000602084013e611d3f565b606091505b508051611d5f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611d85565b5060015b949350505050565b606081611db15750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ddb5780611dc5816127bf565b9150611dd49050600a8361270e565b9150611db5565b6000816001600160401b03811115611df557611df5612846565b6040519080825280601f01601f191660200182016040528015611e1f576020820181803683370190505b5090505b8415611d8557611e34600183612741565b9150611e41600a866127da565b611e4c9060306126f6565b60f81b818381518110611e6157611e61612830565b60200101906001600160f81b031916908160001a905350611e83600a8661270e565b9450611e23565b600081815b8451811015611107576000858281518110611eac57611eac612830565b60200260200101519050808311611ed25760008381526020829052604090209250611ee3565b600081815260208490526040902092505b5080611eee816127bf565b915050611e8f565b610a5283838360016000546001600160a01b038516611f2757604051622e076360e81b815260040160405180910390fd5b83611f455760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03851660008181526004602090815260408083208054600160801b6001600160801b031982166001600160801b039283168c01831690811782900483168c01909216021790558483526003909152812080546001600160e01b031916909217600160a01b426001600160401b0316021790915581905b858110156120435760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a483801561201957506120176000888488611c7e565b155b15612037576040516368d2bf6b60e11b815260040160405180910390fd5b60019182019101611fc2565b50600055611b61565b82805461205890612784565b90600052602060002090601f01602090048101928261207a57600085556120c0565b82601f1061209357805160ff19168380011785556120c0565b828001600101855582156120c0579182015b828111156120c05782518255916020019190600101906120a5565b50610f379291505b80821115610f3757600081556001016120c8565b60006001600160401b038311156120f5576120f5612846565b612108601f8401601f19166020016126a3565b905082815283838301111561211c57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461214a57600080fd5b919050565b60006020828403121561216157600080fd5b6116bf82612133565b6000806040838503121561217d57600080fd5b61218683612133565b915061219460208401612133565b90509250929050565b6000806000606084860312156121b257600080fd5b6121bb84612133565b92506121c960208501612133565b9150604084013590509250925092565b600080600080608085870312156121ef57600080fd5b6121f885612133565b935061220660208601612133565b92506040850135915060608501356001600160401b0381111561222857600080fd5b8501601f8101871361223957600080fd5b612248878235602084016120dc565b91505092959194509250565b6000806040838503121561226757600080fd5b61227083612133565b91506020830135801515811461228557600080fd5b809150509250929050565b600080604083850312156122a357600080fd5b6122ac83612133565b946020939093013593505050565b600080604083850312156122cd57600080fd5b82356001600160401b038111156122e357600080fd5b8301601f810185136122f457600080fd5b80356020612309612304836126d3565b6126a3565b80838252828201915082850189848660051b880101111561232957600080fd5b600095505b848610156123535761233f81612133565b83526001959095019491830191830161232e565b5098969091013596505050505050565b6000806040838503121561237657600080fd5b82356001600160401b0381111561238c57600080fd5b8301601f8101851361239d57600080fd5b803560206123ad612304836126d3565b80838252828201915082850189848660051b88010111156123cd57600080fd5b600095505b848610156123535780358352600195909501949183019183016123d2565b60006020828403121561240257600080fd5b5035919050565b60006020828403121561241b57600080fd5b81356116bf8161285c565b60006020828403121561243857600080fd5b81516116bf8161285c565b60006020828403121561245557600080fd5b81356001600160401b0381111561246b57600080fd5b8201601f8101841361247c57600080fd5b611d85848235602084016120dc565b600081518084526124a3816020860160208601612758565b601f01601f19169290920160200192915050565b600081516124c9818560208601612758565b9290920192915050565b600080845481600182811c9150808316806124ef57607f831692505b602080841082141561250f57634e487b7160e01b86526022600452602486fd5b818015612523576001811461253457612561565b60ff19861689528489019650612561565b60008b81526020902060005b868110156125595781548b820152908501908301612540565b505084890196505b50505050505061258561257482866124b7565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125c19083018461248b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612603578351835292840192918401916001016125e7565b50909695505050505050565b6020815260006116bf602083018461248b565b6020808252602c908201527f4649525354424f524e45203a3a2043616e6e6f742062652063616c6c6564206260408201526b1e48184818dbdb9d1c9858dd60a21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156126cb576126cb612846565b604052919050565b60006001600160401b038211156126ec576126ec612846565b5060051b60200190565b6000821982111561270957612709612804565b500190565b60008261271d5761271d61281a565b500490565b600081600019048311821515161561273c5761273c612804565b500290565b60008282101561275357612753612804565b500390565b60005b8381101561277357818101518382015260200161275b565b838111156114495750506000910152565b600181811c9082168061279857607f821691505b602082108114156127b957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156127d3576127d3612804565b5060010190565b6000826127e9576127e961281a565b500690565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461133f57600080fdfea2646970667358221220978223150105f46e7847f1989da1f79f1c4d9c80a37611cacda3db9dd5f559e064736f6c63430008070033
Deployed Bytecode Sourcemap
34171:5361:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25203:372;;;;;;;;;;-1:-1:-1;25203:372:0;;;;;:::i;:::-;;:::i;:::-;;;9576:14:1;;9569:22;9551:41;;9539:2;9524:18;25203:372:0;;;;;;;;34935:53;;;;;;;;;;-1:-1:-1;34935:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9749:25:1;;;9737:2;9722:18;34935:53:0;9603:177:1;37940:115:0;;;;;;;;;;-1:-1:-1;37940:115:0;;;;;:::i;:::-;;:::i;:::-;;26662:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34397:44::-;;;;;;;;;;;;;;;;27673:204;;;;;;;;;;-1:-1:-1;27673:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8237:32:1;;;8219:51;;8207:2;8192:18;27673:204:0;8073:203:1;27318:345:0;;;;;;;;;;-1:-1:-1;27318:345:0;;;;;:::i;:::-;;:::i;23866:101::-;;;;;;;;;;-1:-1:-1;23919:7:0;23946:13;23866:101;;34878:50;;;;;;;;;;-1:-1:-1;34878:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;28350:170;;;;;;;;;;-1:-1:-1;28350:170:0;;;;;:::i;:::-;;:::i;35758:849::-;;;;;;:::i;:::-;;:::i;24159:1036::-;;;;;;;;;;-1:-1:-1;24159:1036:0;;;;;:::i;:::-;;:::i;34245:42::-;;;;;;;;;;;;34282:5;34245:42;;34727:22;;;;;;;;;;-1:-1:-1;34727:22:0;;;;;;;;;;;39393:136;;;;;;;;;;;;;:::i;28530:185::-;;;;;;;;;;-1:-1:-1;28530:185:0;;;;;:::i;:::-;;:::i;38324:92::-;;;;;;;;;;-1:-1:-1;38398:10:0;;38324:92;;34539:35;;;;;;;;;;;;;:::i;23975:176::-;;;;;;;;;;-1:-1:-1;23975:176:0;;;;;:::i;:::-;;:::i;34698:22::-;;;;;;;;;;-1:-1:-1;34698:22:0;;;;;;;;39300:85;;;;;;;;;;;;;:::i;26528:124::-;;;;;;;;;;-1:-1:-1;26528:124:0;;;;;:::i;:::-;;:::i;38823:108::-;;;;;;;;;;-1:-1:-1;38823:108:0;;;;;:::i;:::-;;:::i;34294:43::-;;;;;;;;;;;;34336:1;34294:43;;25583:206;;;;;;;;;;-1:-1:-1;25583:206:0;;;;;:::i;:::-;;:::i;12519:103::-;;;;;;;;;;;;;:::i;38211:105::-;;;;;;;;;;-1:-1:-1;38211:105:0;;;;;:::i;:::-;;:::i;37526:406::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34788:17::-;;;;;;;;;;-1:-1:-1;34788:17:0;;;;;;;;;;;34756:25;;;;;;;;;;-1:-1:-1;34756:25:0;;;;;;;;;;;38506:98;;;;;;;;;;;;;:::i;12292:87::-;;;;;;;;;;-1:-1:-1;12365:6:0;;-1:-1:-1;;;;;12365:6:0;12292:87;;26772:104;;;;;;;;;;;;;:::i;35217:533::-;;;;;;:::i;:::-;;:::i;27887:279::-;;;;;;;;;;-1:-1:-1;27887:279:0;;;;;:::i;:::-;;:::i;38061:142::-;;;;;;;;;;-1:-1:-1;38061:142:0;;;;;:::i;:::-;;:::i;28725:308::-;;;;;;;;;;-1:-1:-1;28725:308:0;;;;;:::i;:::-;;:::i;36615:179::-;;;;;;;;;;;;;:::i;34448:47::-;;;;;;;;;;;;;;;;38424:74;;;;;;;;;;;;;:::i;36959:473::-;;;;;;;;;;-1:-1:-1;36959:473:0;;;;;:::i;:::-;;:::i;38612:89::-;;;;;;;;;;;;;:::i;38710:104::-;;;;;;;;;;-1:-1:-1;38710:104:0;;;;;:::i;:::-;;:::i;34812:22::-;;;;;;;;;;-1:-1:-1;34812:22:0;;;;;;;;;;;28176:164;;;;;;;;;;-1:-1:-1;28176:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;28297:25:0;;;28273:4;28297:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28176:164;38935:357;;;;;;;;;;-1:-1:-1;38935:357:0;;;;;:::i;:::-;;:::i;12632:201::-;;;;;;;;;;-1:-1:-1;12632:201:0;;;;;:::i;:::-;;:::i;25203:372::-;25305:4;-1:-1:-1;;;;;;25342:40:0;;-1:-1:-1;;;25342:40:0;;:105;;-1:-1:-1;;;;;;;25399:48:0;;-1:-1:-1;;;25399:48:0;25342:105;:172;;;-1:-1:-1;;;;;;;25464:50:0;;-1:-1:-1;;;25464:50:0;25342:172;:225;;;-1:-1:-1;;;;;;;;;;18034:40:0;;;25531:36;25322:245;25203:372;-1:-1:-1;;25203:372:0:o;37940:115::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;;;;;;;;;38019:28;;::::1;::::0;:12:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;;37940:115:::0;:::o;26662:100::-;26716:13;26749:5;26742:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26662:100;:::o;27673:204::-;27741:7;27766:16;27774:7;29100:4;29134:13;-1:-1:-1;29124:23:0;29043:112;27766:16;27761:64;;27791:34;;-1:-1:-1;;;27791:34:0;;;;;;;;;;;27761:64;-1:-1:-1;27845:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27845:24:0;;27673:204::o;27318:345::-;27391:13;27407:24;27423:7;27407:15;:24::i;:::-;27391:40;;27452:5;-1:-1:-1;;;;;27446:11:0;:2;-1:-1:-1;;;;;27446:11:0;;27442:48;;;27466:24;;-1:-1:-1;;;27466:24:0;;;;;;;;;;;27442:48;11771:10;-1:-1:-1;;;;;27507:21:0;;;;;;:63;;-1:-1:-1;27533:37:0;27550:5;11771:10;28176:164;:::i;27533:37::-;27532:38;27507:63;27503:111;;;27579:35;;-1:-1:-1;;;27579:35:0;;;;;;;;;;;27503:111;27627:28;27636:2;27640:7;27649:5;27627:8;:28::i;:::-;27380:283;27318:345;;:::o;28350:170::-;28484:28;28494:4;28500:2;28504:7;28484:9;:28::i;35758:849::-;35117:9;35130:10;35117:23;35109:80;;;;-1:-1:-1;;;35109:80:0;;;;;;;:::i;:::-;35879:13:::1;::::0;;;::::1;;;35871:59;;;::::0;-1:-1:-1;;;35871:59:0;;12607:2:1;35871:59:0::1;::::0;::::1;12589:21:1::0;12646:2;12626:18;;;12619:30;12685:34;12665:18;;;12658:62;-1:-1:-1;;;12736:18:1;;;12729:31;12777:19;;35871:59:0::1;12405:397:1::0;35871:59:0::1;34282:5;35966:9;35950:13;23919:7:::0;23946:13;;23866:101;35950:13:::1;:25;;;;:::i;:::-;35949:41;;35941:97;;;::::0;-1:-1:-1;;;35941:97:0;;11786:2:1;35941:97:0::1;::::0;::::1;11768:21:1::0;11825:2;11805:18;;;11798:30;11864:34;11844:18;;;11837:62;-1:-1:-1;;;11915:18:1;;;11908:41;11966:19;;35941:97:0::1;11584:407:1::0;35941:97:0::1;36077:10;36058:30;::::0;;;:18:::1;:30;::::0;;;;;34389:1:::1;::::0;36058:42:::1;::::0;36091:9;;36058:42:::1;:::i;:::-;36057:67;;36049:132;;;::::0;-1:-1:-1;;;36049:132:0;;13009:2:1;36049:132:0::1;::::0;::::1;12991:21:1::0;13048:2;13028:18;;;13021:30;13087:34;13067:18;;;13060:62;-1:-1:-1;;;13138:18:1;;;13131:50;13198:19;;36049:132:0::1;12807:416:1::0;36049:132:0::1;36237:9;36214:20;;:32;;;;:::i;:::-;36200:9;:47;;36192:100;;;::::0;-1:-1:-1;;;36192:100:0;;12198:2:1;36192:100:0::1;::::0;::::1;12180:21:1::0;12237:2;12217:18;;;12210:30;12276:34;12256:18;;;12249:62;-1:-1:-1;;;12327:18:1;;;12320:38;12375:19;;36192:100:0::1;11996:404:1::0;36192:100:0::1;36358:28;::::0;-1:-1:-1;;36375:10:0::1;6682:2:1::0;6678:15;6674:53;36358:28:0::1;::::0;::::1;6662:66:1::0;36331:14:0::1;::::0;6744:12:1;;36358:28:0::1;;;;;;;;;;;;36348:39;;;;;;36331:56;;36406:52;36425:12;36439:10;;36451:6;36406:18;:52::i;:::-;36398:102;;;::::0;-1:-1:-1;;;36398:102:0;;13430:2:1;36398:102:0::1;::::0;::::1;13412:21:1::0;13469:2;13449:18;;;13442:30;13508:34;13488:18;;;13481:62;-1:-1:-1;;;13559:18:1;;;13552:35;13604:19;;36398:102:0::1;13228:401:1::0;36398:102:0::1;36532:10;36513:30;::::0;;;:18:::1;:30;::::0;;;;:43;;36547:9;;36513:30;:43:::1;::::0;36547:9;;36513:43:::1;:::i;:::-;::::0;;;-1:-1:-1;36567:32:0::1;::::0;-1:-1:-1;36577:10:0::1;36589:9:::0;36567::::1;:32::i;24159:1036::-:0;24248:7;24281:16;24291:5;24281:9;:16::i;:::-;24272:5;:25;24268:61;;24306:23;;-1:-1:-1;;;24306:23:0;;;;;;;;;;;24268:61;24340:22;23946:13;;;24340:22;;24603:466;24623:14;24619:1;:18;24603:466;;;24663:31;24697:14;;;:11;:14;;;;;;;;;24663:48;;;;;;;;;-1:-1:-1;;;;;24663:48:0;;;;;-1:-1:-1;;;24663:48:0;;;-1:-1:-1;;;;;24663:48:0;;;;;;;;24734:28;24730:111;;24807:14;;;-1:-1:-1;24730:111:0;24884:5;-1:-1:-1;;;;;24863:26:0;:17;-1:-1:-1;;;;;24863:26:0;;24859:195;;;24933:5;24918:11;:20;24914:85;;;-1:-1:-1;24974:1:0;-1:-1:-1;24967:8:0;;-1:-1:-1;;;24967:8:0;24914:85;25021:13;;;;;24859:195;-1:-1:-1;24639:3:0;;24603:466;;;-1:-1:-1;25145:13:0;;:::i;:::-;-1:-1:-1;25176:11:0;24159:1036;-1:-1:-1;;;;24159:1036:0:o;39393:136::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;39450:21:::1;39490:7;12365:6:::0;;-1:-1:-1;;;;;12365:6:0;;12292:87;39490:7:::1;-1:-1:-1::0;;;;;39482:25:0::1;:36;39508:8;39482:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;28530:185:::0;28668:39;28685:4;28691:2;28695:7;28668:39;;;;;;;;;;;;:16;:39::i;34539:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23975:176::-;24042:7;23946:13;;24066:5;:22;24062:58;;24097:23;;-1:-1:-1;;;24097:23:0;;;;;;;;;;;24062:58;-1:-1:-1;24138:5:0;23975:176::o;39300:85::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;39367:10:::1;::::0;;-1:-1:-1;;39353:24:0;::::1;39367:10;::::0;;::::1;39366:11;39353:24;::::0;;39300:85::o;26528:124::-;26592:7;26619:20;26631:7;26619:11;:20::i;:::-;:25;;26528:124;-1:-1:-1;;26528:124:0:o;38823:108::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38895:20:::1;:28:::0;38823:108::o;25583:206::-;25647:7;-1:-1:-1;;;;;25671:19:0;;25667:60;;25699:28;;-1:-1:-1;;;25699:28:0;;;;;;;;;;;25667:60;-1:-1:-1;;;;;;25753:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;25753:27:0;;25583:206::o;12519:103::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;12584:30:::1;12611:1;12584:18;:30::i;:::-;12519:103::o:0;38211:105::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38284:10:::1;:24:::0;38211:105::o;37526:406::-;37568:16;37613:10;37596:14;37661:17;37613:10;37661:9;:17::i;:::-;37634:44;;37689:25;37731:16;-1:-1:-1;;;;;37717:31:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37717:31:0;;37689:59;;37765:13;37761:136;37792:16;37784:5;:24;37761:136;;;37851:34;37871:6;37879:5;37851:19;:34::i;:::-;37833:8;37842:5;37833:15;;;;;;;;:::i;:::-;;;;;;;;;;:52;37810:7;;;;:::i;:::-;;;;37761:136;;;-1:-1:-1;37916:8:0;37526:406;-1:-1:-1;;;37526:406:0:o;38506:98::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38583:13:::1;::::0;;-1:-1:-1;;38566:30:0;::::1;38583:13:::0;;;;::::1;;;38582:14;38566:30:::0;;::::1;;::::0;;38506:98::o;26772:104::-;26828:13;26861:7;26854:14;;;;;:::i;35217:533::-;35117:9;35130:10;35117:23;35109:80;;;;-1:-1:-1;;;35109:80:0;;;;;;;:::i;:::-;35298:10:::1;::::0;::::1;::::0;::::1;;;35290:52;;;::::0;-1:-1:-1;;;35290:52:0;;15375:2:1;35290:52:0::1;::::0;::::1;15357:21:1::0;15414:2;15394:18;;;15387:30;15453:31;15433:18;;;15426:59;15502:18;;35290:52:0::1;15173:353:1::0;35290:52:0::1;34282:5;35378:9;35362:13;23919:7:::0;23946:13;;23866:101;35362:13:::1;:25;;;;:::i;:::-;35361:41;;35353:85;;;::::0;-1:-1:-1;;;35353:85:0;;15015:2:1;35353:85:0::1;::::0;::::1;14997:21:1::0;15054:2;15034:18;;;15027:30;15093:33;15073:18;;;15066:61;15144:18;;35353:85:0::1;14813:355:1::0;35353:85:0::1;35474:10;35458:27;::::0;;;:15:::1;:27;::::0;;;;;34336:1:::1;::::0;35458:38:::1;::::0;35487:9;;35458:38:::1;:::i;:::-;35457:59;;35449:109;;;::::0;-1:-1:-1;;;35449:109:0;;10973:2:1;35449:109:0::1;::::0;::::1;10955:21:1::0;11012:2;10992:18;;;10985:30;11051:34;11031:18;;;11024:62;-1:-1:-1;;;11102:18:1;;;11095:35;11147:19;;35449:109:0::1;10771:401:1::0;35449:109:0::1;35611:9;35591:17;;:29;;;;:::i;:::-;35577:9;:44;;35569:77;;;::::0;-1:-1:-1;;;35569:77:0;;10211:2:1;35569:77:0::1;::::0;::::1;10193:21:1::0;10250:2;10230:18;;;10223:30;-1:-1:-1;;;10269:18:1;;;10262:50;10329:18;;35569:77:0::1;10009:344:1::0;35569:77:0::1;35675:10;35659:27;::::0;;;:15:::1;:27;::::0;;;;:40;;35690:9;;35659:27;:40:::1;::::0;35690:9;;35659:40:::1;:::i;:::-;::::0;;;-1:-1:-1;35710:32:0::1;::::0;-1:-1:-1;35720:10:0::1;35732:9:::0;35710::::1;:32::i;:::-;35217:533:::0;:::o;27887:279::-;-1:-1:-1;;;;;27978:24:0;;11771:10;27978:24;27974:54;;;28011:17;;-1:-1:-1;;;28011:17:0;;;;;;;;;;;27974:54;11771:10;28041:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;28041:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;28041:53:0;;;;;;;;;;28110:48;;9551:41:1;;;28041:42:0;;11771:10;28110:48;;9524:18:1;28110:48:0;;;;;;;27887:279;;:::o;38061:142::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38153:42;;::::1;::::0;:19:::1;::::0;:42:::1;::::0;::::1;::::0;::::1;:::i;28725:308::-:0;28884:28;28894:4;28900:2;28904:7;28884:9;:28::i;:::-;28928:48;28951:4;28957:2;28961:7;28970:5;28928:22;:48::i;:::-;28923:102;;28985:40;;-1:-1:-1;;;28985:40:0;;;;;;;;;;;28923:102;28725:308;;;;:::o;36615:179::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;36673:10:::1;::::0;;;::::1;;;36672:11;36664:57;;;::::0;-1:-1:-1;;;36664:57:0;;14613:2:1;36664:57:0::1;::::0;::::1;14595:21:1::0;14652:2;14632:18;;;14625:30;14691:34;14671:18;;;14664:62;-1:-1:-1;;;14742:18:1;;;14735:31;14783:19;;36664:57:0::1;14411:397:1::0;36664:57:0::1;36732:10;:17:::0;;-1:-1:-1;;36732:17:0::1;::::0;::::1;::::0;;36760:26:::1;36770:10;36782:3;36760:9;:26::i;38424:74::-:0;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38485:5:::1;::::0;;-1:-1:-1;;38476:14:0;::::1;38485:5:::0;;;;::::1;;;38484:6;38476:14:::0;;::::1;;::::0;;38424:74::o;36959:473::-;37032:13;37066:16;37074:7;29100:4;29134:13;-1:-1:-1;29124:23:0;29043:112;37066:16;37058:76;;;;-1:-1:-1;;;37058:76:0;;14197:2:1;37058:76:0;;;14179:21:1;14236:2;14216:18;;;14209:30;14275:34;14255:18;;;14248:62;-1:-1:-1;;;14326:18:1;;;14319:45;14381:19;;37058:76:0;13995:411:1;37058:76:0;37147:14;37164:11;:7;37174:1;37164:11;:::i;:::-;37192:10;;37147:28;;-1:-1:-1;37192:10:0;;37188:68;;37225:19;37218:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36959:473;;;:::o;37188:68::-;37349:1;37326:12;37320:26;;;;;:::i;:::-;;;:30;:104;;;;;;;;;;;;;;;;;37377:12;37391:17;:6;:15;:17::i;:::-;37360:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37320:104;37313:111;36959:473;-1:-1:-1;;;36959:473:0:o;38612:89::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38683:10:::1;::::0;;-1:-1:-1;;38669:24:0;::::1;38683:10;::::0;;;::::1;;;38682:11;38669:24:::0;;::::1;;::::0;;38612:89::o;38710:104::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;38781:17:::1;:25:::0;38710:104::o;38935:357::-;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;39045:1:::1;39027:8;:15;:19;39019:55;;;::::0;-1:-1:-1;;;39019:55:0;;15733:2:1;39019:55:0::1;::::0;::::1;15715:21:1::0;15772:2;15752:18;;;15745:30;15811:25;15791:18;;;15784:53;15854:18;;39019:55:0::1;15531:347:1::0;39019:55:0::1;34282:5;39109:8;:15;39093:13;23919:7:::0;23946:13;;23866:101;39093:13:::1;:31;;;;:::i;:::-;:45;;39085:80;;;::::0;-1:-1:-1;;;39085:80:0;;16085:2:1;39085:80:0::1;::::0;::::1;16067:21:1::0;16124:2;16104:18;;;16097:30;-1:-1:-1;;;16143:18:1;;;16136:52;16205:18;;39085:80:0::1;15883:346:1::0;39085:80:0::1;39181:6;39176:109;39197:8;:15;39193:1;:19;39176:109;;;39243:30;39253:8;39262:1;39253:11;;;;;;;;:::i;:::-;;;;;;;39266:6;39243:9;:30::i;:::-;39214:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39176:109;;12632:201:::0;12365:6;;-1:-1:-1;;;;;12365:6:0;11771:10;12429:23;12421:68;;;;-1:-1:-1;;;12421:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12721:22:0;::::1;12713:73;;;::::0;-1:-1:-1;;;12713:73:0;;11379:2:1;12713:73:0::1;::::0;::::1;11361:21:1::0;11418:2;11398:18;;;11391:30;11457:34;11437:18;;;11430:62;-1:-1:-1;;;11508:18:1;;;11501:36;11554:19;;12713:73:0::1;11177:402:1::0;12713:73:0::1;12797:28;12816:8;12797:18;:28::i;32852:196::-:0;32967:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;32967:29:0;-1:-1:-1;;;;;32967:29:0;;;;;;;;;33012:28;;32967:24;;33012:28;;;;;;;32852:196;;;:::o;30880:1962::-;30995:35;31033:20;31045:7;31033:11;:20::i;:::-;31108:18;;30995:58;;-1:-1:-1;31066:22:0;;-1:-1:-1;;;;;31092:34:0;11771:10;-1:-1:-1;;;;;31092:34:0;;:87;;;-1:-1:-1;11771:10:0;31143:20;31155:7;31143:11;:20::i;:::-;-1:-1:-1;;;;;31143:36:0;;31092:87;:154;;;-1:-1:-1;31213:18:0;;31196:50;;11771:10;28176:164;:::i;31196:50::-;31066:181;;31265:17;31260:66;;31291:35;;-1:-1:-1;;;31291:35:0;;;;;;;;;;;31260:66;31363:4;-1:-1:-1;;;;;31341:26:0;:13;:18;;;-1:-1:-1;;;;;31341:26:0;;31337:67;;31376:28;;-1:-1:-1;;;31376:28:0;;;;;;;;;;;31337:67;-1:-1:-1;;;;;31419:16:0;;31415:52;;31444:23;;-1:-1:-1;;;31444:23:0;;;;;;;;;;;31415:52;31588:49;31605:1;31609:7;31618:13;:18;;;31588:8;:49::i;:::-;-1:-1:-1;;;;;31933:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;;;;;31933:31:0;;;-1:-1:-1;;;;;31933:31:0;;;-1:-1:-1;;31933:31:0;;;;;;;31979:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;31979:29:0;;;;;;;;;;;;;32025:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;32070:61:0;;;;-1:-1:-1;;;32115:15:0;-1:-1:-1;;;;;32070:61:0;;;;;32405:11;;;32435:24;;;;;:29;32405:11;;32435:29;32431:295;;32503:20;32511:11;29100:4;29134:13;-1:-1:-1;29124:23:0;29043:112;32503:20;32499:212;;;32580:18;;;32548:24;;;:11;:24;;;;;;;;:50;;32663:28;;;;-1:-1:-1;;;;;32621:70:0;-1:-1:-1;;;32621:70:0;-1:-1:-1;;;;;;32621:70:0;;;-1:-1:-1;;;;;32548:50:0;;;32621:70;;;;;;;32499:212;31908:829;32773:7;32769:2;-1:-1:-1;;;;;32754:27:0;32763:4;-1:-1:-1;;;;;32754:27:0;;;;;;;;;;;32792:42;30984:1858;;30880:1962;;;:::o;5334:190::-;5459:4;5512;5483:25;5496:5;5503:4;5483:12;:25::i;:::-;:33;;5334:190;-1:-1:-1;;;;5334:190:0:o;29163:104::-;29232:27;29242:2;29246:8;29232:27;;;;;;;;;;;;:9;:27::i;26014:504::-;-1:-1:-1;;;;;;;;;;;;;;;;;26114:16:0;26122:7;29100:4;29134:13;-1:-1:-1;29124:23:0;29043:112;26114:16;26109:61;;26139:31;;-1:-1:-1;;;26139:31:0;;;;;;;;;;;26109:61;26228:7;26208:245;26275:31;26309:17;;;:11;:17;;;;;;;;;26275:51;;;;;;;;;-1:-1:-1;;;;;26275:51:0;;;;;-1:-1:-1;;;26275:51:0;;;-1:-1:-1;;;;;26275:51:0;;;;;;;;26349:28;26345:93;;26409:9;26014:504;-1:-1:-1;;;26014:504:0:o;26345:93::-;-1:-1:-1;;;26248:6:0;26208:245;;12843:191;12936:6;;;-1:-1:-1;;;;;12953:17:0;;;-1:-1:-1;;;;;;12953:17:0;;;;;;;12986:40;;12936:6;;;12953:17;12936:6;;12986:40;;12917:16;;12986:40;12906:128;12843:191;:::o;33058:765::-;33213:4;-1:-1:-1;;;;;33234:13:0;;13517:19;:23;33230:586;;33270:72;;-1:-1:-1;;;33270:72:0;;-1:-1:-1;;;;;33270:36:0;;;;;:72;;11771:10;;33321:4;;33327:7;;33336:5;;33270:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33270:72:0;;;;;;;;-1:-1:-1;;33270:72:0;;;;;;;;;;;;:::i;:::-;;;33266:495;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33516:13:0;;33512:234;;33543:40;;-1:-1:-1;;;33543:40:0;;;;;;;;;;;33512:234;33696:6;33690:13;33681:6;33677:2;33673:15;33666:38;33266:495;-1:-1:-1;;;;;;33393:55:0;-1:-1:-1;;;33393:55:0;;-1:-1:-1;33386:62:0;;33230:586;-1:-1:-1;33800:4:0;33230:586;33058:765;;;;;;:::o;6679:723::-;6735:13;6956:10;6952:53;;-1:-1:-1;;6983:10:0;;;;;;;;;;;;-1:-1:-1;;;6983:10:0;;;;;6679:723::o;6952:53::-;7030:5;7015:12;7071:78;7078:9;;7071:78;;7104:8;;;;:::i;:::-;;-1:-1:-1;7127:10:0;;-1:-1:-1;7135:2:0;7127:10;;:::i;:::-;;;7071:78;;;7159:19;7191:6;-1:-1:-1;;;;;7181:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7181:17:0;;7159:39;;7209:154;7216:10;;7209:154;;7243:11;7253:1;7243:11;;:::i;:::-;;-1:-1:-1;7312:10:0;7320:2;7312:5;:10;:::i;:::-;7299:24;;:2;:24;:::i;:::-;7286:39;;7269:6;7276;7269:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7269:56:0;;;;;;;;-1:-1:-1;7340:11:0;7349:2;7340:11;;:::i;:::-;;;7209:154;;5532:675;5615:7;5658:4;5615:7;5673:497;5697:5;:12;5693:1;:16;5673:497;;;5731:20;5754:5;5760:1;5754:8;;;;;;;;:::i;:::-;;;;;;;5731:31;;5797:12;5781;:28;5777:382;;6283:13;6333:15;;;6369:4;6362:15;;;6416:4;6400:21;;5909:57;;5777:382;;;6283:13;6333:15;;;6369:4;6362:15;;;6416:4;6400:21;;6086:57;;5777:382;-1:-1:-1;5711:3:0;;;;:::i;:::-;;;;5673:497;;29277:163;29400:32;29406:2;29410:8;29420:5;29427:4;29589:20;29612:13;-1:-1:-1;;;;;29640:16:0;;29636:48;;29665:19;;-1:-1:-1;;;29665:19:0;;;;;;;;;;;29636:48;29699:13;29695:44;;29721:18;;-1:-1:-1;;;29721:18:0;;;;;;;;;;;29695:44;-1:-1:-1;;;;;30092:16:0;;;;;;:12;:16;;;;;;;;:45;;-1:-1:-1;;;;;;;;;30092:45:0;;-1:-1:-1;;;;;30092:45:0;;;;;;;;;;30152:50;;;;;;;;;;;;;;30219:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;30269:66:0;;;;-1:-1:-1;;;30319:15:0;-1:-1:-1;;;;;30269:66:0;;;;;;30219:25;;30404:330;30424:8;30420:1;:12;30404:330;;;30463:38;;30488:12;;-1:-1:-1;;;;;30463:38:0;;;30480:1;;30463:38;;30480:1;;30463:38;30524:4;:68;;;;;30533:59;30564:1;30568:2;30572:12;30586:5;30533:22;:59::i;:::-;30532:60;30524:68;30520:164;;;30624:40;;-1:-1:-1;;;30624:40:0;;;;;;;;;;;30520:164;30704:14;;;;;30434:3;30404:330;;;-1:-1:-1;30750:13:0;:28;30802:60;28725:308;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:186::-;662:6;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;754:29;773:9;754:29;:::i;794:260::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;;1010:38;1044:2;1033:9;1029:18;1010:38;:::i;:::-;1000:48;;794:260;;;;;:::o;1059:328::-;1136:6;1144;1152;1205:2;1193:9;1184:7;1180:23;1176:32;1173:52;;;1221:1;1218;1211:12;1173:52;1244:29;1263:9;1244:29;:::i;:::-;1234:39;;1292:38;1326:2;1315:9;1311:18;1292:38;:::i;:::-;1282:48;;1377:2;1366:9;1362:18;1349:32;1339:42;;1059:328;;;;;:::o;1392:666::-;1487:6;1495;1503;1511;1564:3;1552:9;1543:7;1539:23;1535:33;1532:53;;;1581:1;1578;1571:12;1532:53;1604:29;1623:9;1604:29;:::i;:::-;1594:39;;1652:38;1686:2;1675:9;1671:18;1652:38;:::i;:::-;1642:48;;1737:2;1726:9;1722:18;1709:32;1699:42;;1792:2;1781:9;1777:18;1764:32;-1:-1:-1;;;;;1811:6:1;1808:30;1805:50;;;1851:1;1848;1841:12;1805:50;1874:22;;1927:4;1919:13;;1915:27;-1:-1:-1;1905:55:1;;1956:1;1953;1946:12;1905:55;1979:73;2044:7;2039:2;2026:16;2021:2;2017;2013:11;1979:73;:::i;:::-;1969:83;;;1392:666;;;;;;;:::o;2063:347::-;2128:6;2136;2189:2;2177:9;2168:7;2164:23;2160:32;2157:52;;;2205:1;2202;2195:12;2157:52;2228:29;2247:9;2228:29;:::i;:::-;2218:39;;2307:2;2296:9;2292:18;2279:32;2354:5;2347:13;2340:21;2333:5;2330:32;2320:60;;2376:1;2373;2366:12;2320:60;2399:5;2389:15;;;2063:347;;;;;:::o;2415:254::-;2483:6;2491;2544:2;2532:9;2523:7;2519:23;2515:32;2512:52;;;2560:1;2557;2550:12;2512:52;2583:29;2602:9;2583:29;:::i;:::-;2573:39;2659:2;2644:18;;;;2631:32;;-1:-1:-1;;;2415:254:1:o;2674:978::-;2767:6;2775;2828:2;2816:9;2807:7;2803:23;2799:32;2796:52;;;2844:1;2841;2834:12;2796:52;2884:9;2871:23;-1:-1:-1;;;;;2909:6:1;2906:30;2903:50;;;2949:1;2946;2939:12;2903:50;2972:22;;3025:4;3017:13;;3013:27;-1:-1:-1;3003:55:1;;3054:1;3051;3044:12;3003:55;3090:2;3077:16;3112:4;3136:60;3152:43;3192:2;3152:43;:::i;:::-;3136:60;:::i;:::-;3218:3;3242:2;3237:3;3230:15;3270:2;3265:3;3261:12;3254:19;;3301:2;3297;3293:11;3349:7;3344:2;3338;3335:1;3331:10;3327:2;3323:19;3319:28;3316:41;3313:61;;;3370:1;3367;3360:12;3313:61;3392:1;3383:10;;3402:169;3416:2;3413:1;3410:9;3402:169;;;3473:23;3492:3;3473:23;:::i;:::-;3461:36;;3434:1;3427:9;;;;;3517:12;;;;3549;;3402:169;;;-1:-1:-1;3590:5:1;3627:18;;;;3614:32;;-1:-1:-1;;;;;;2674:978:1:o;3657:972::-;3750:6;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3867:9;3854:23;-1:-1:-1;;;;;3892:6:1;3889:30;3886:50;;;3932:1;3929;3922:12;3886:50;3955:22;;4008:4;4000:13;;3996:27;-1:-1:-1;3986:55:1;;4037:1;4034;4027:12;3986:55;4073:2;4060:16;4095:4;4119:60;4135:43;4175:2;4135:43;:::i;4119:60::-;4201:3;4225:2;4220:3;4213:15;4253:2;4248:3;4244:12;4237:19;;4284:2;4280;4276:11;4332:7;4327:2;4321;4318:1;4314:10;4310:2;4306:19;4302:28;4299:41;4296:61;;;4353:1;4350;4343:12;4296:61;4375:1;4366:10;;4385:163;4399:2;4396:1;4393:9;4385:163;;;4456:17;;4444:30;;4417:1;4410:9;;;;;4494:12;;;;4526;;4385:163;;4634:180;4693:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:52;;;4762:1;4759;4752:12;4714:52;-1:-1:-1;4785:23:1;;4634:180;-1:-1:-1;4634:180:1:o;4819:245::-;4877:6;4930:2;4918:9;4909:7;4905:23;4901:32;4898:52;;;4946:1;4943;4936:12;4898:52;4985:9;4972:23;5004:30;5028:5;5004:30;:::i;5069:249::-;5138:6;5191:2;5179:9;5170:7;5166:23;5162:32;5159:52;;;5207:1;5204;5197:12;5159:52;5239:9;5233:16;5258:30;5282:5;5258:30;:::i;5323:450::-;5392:6;5445:2;5433:9;5424:7;5420:23;5416:32;5413:52;;;5461:1;5458;5451:12;5413:52;5501:9;5488:23;-1:-1:-1;;;;;5526:6:1;5523:30;5520:50;;;5566:1;5563;5556:12;5520:50;5589:22;;5642:4;5634:13;;5630:27;-1:-1:-1;5620:55:1;;5671:1;5668;5661:12;5620:55;5694:73;5759:7;5754:2;5741:16;5736:2;5732;5728:11;5694:73;:::i;5963:257::-;6004:3;6042:5;6036:12;6069:6;6064:3;6057:19;6085:63;6141:6;6134:4;6129:3;6125:14;6118:4;6111:5;6107:16;6085:63;:::i;:::-;6202:2;6181:15;-1:-1:-1;;6177:29:1;6168:39;;;;6209:4;6164:50;;5963:257;-1:-1:-1;;5963:257:1:o;6225:185::-;6267:3;6305:5;6299:12;6320:52;6365:6;6360:3;6353:4;6346:5;6342:16;6320:52;:::i;:::-;6388:16;;;;;6225:185;-1:-1:-1;;6225:185:1:o;6767:1301::-;7044:3;7073:1;7106:6;7100:13;7136:3;7158:1;7186:9;7182:2;7178:18;7168:28;;7246:2;7235:9;7231:18;7268;7258:61;;7312:4;7304:6;7300:17;7290:27;;7258:61;7338:2;7386;7378:6;7375:14;7355:18;7352:38;7349:165;;;-1:-1:-1;;;7413:33:1;;7469:4;7466:1;7459:15;7499:4;7420:3;7487:17;7349:165;7530:18;7557:104;;;;7675:1;7670:320;;;;7523:467;;7557:104;-1:-1:-1;;7590:24:1;;7578:37;;7635:16;;;;-1:-1:-1;7557:104:1;;7670:320;16957:1;16950:14;;;16994:4;16981:18;;7765:1;7779:165;7793:6;7790:1;7787:13;7779:165;;;7871:14;;7858:11;;;7851:35;7914:16;;;;7808:10;;7779:165;;;7783:3;;7973:6;7968:3;7964:16;7957:23;;7523:467;;;;;;;8006:56;8031:30;8057:3;8049:6;8031:30;:::i;:::-;-1:-1:-1;;;6475:20:1;;6520:1;6511:11;;6415:113;8006:56;7999:63;6767:1301;-1:-1:-1;;;;;6767:1301:1:o;8281:488::-;-1:-1:-1;;;;;8550:15:1;;;8532:34;;8602:15;;8597:2;8582:18;;8575:43;8649:2;8634:18;;8627:34;;;8697:3;8692:2;8677:18;;8670:31;;;8475:4;;8718:45;;8743:19;;8735:6;8718:45;:::i;:::-;8710:53;8281:488;-1:-1:-1;;;;;;8281:488:1:o;8774:632::-;8945:2;8997:21;;;9067:13;;8970:18;;;9089:22;;;8916:4;;8945:2;9168:15;;;;9142:2;9127:18;;;8916:4;9211:169;9225:6;9222:1;9219:13;9211:169;;;9286:13;;9274:26;;9355:15;;;;9320:12;;;;9247:1;9240:9;9211:169;;;-1:-1:-1;9397:3:1;;8774:632;-1:-1:-1;;;;;;8774:632:1:o;9785:219::-;9934:2;9923:9;9916:21;9897:4;9954:44;9994:2;9983:9;9979:18;9971:6;9954:44;:::i;10358:408::-;10560:2;10542:21;;;10599:2;10579:18;;;10572:30;10638:34;10633:2;10618:18;;10611:62;-1:-1:-1;;;10704:2:1;10689:18;;10682:42;10756:3;10741:19;;10358:408::o;13634:356::-;13836:2;13818:21;;;13855:18;;;13848:30;13914:34;13909:2;13894:18;;13887:62;13981:2;13966:18;;13634:356::o;16416:275::-;16487:2;16481:9;16552:2;16533:13;;-1:-1:-1;;16529:27:1;16517:40;;-1:-1:-1;;;;;16572:34:1;;16608:22;;;16569:62;16566:88;;;16634:18;;:::i;:::-;16670:2;16663:22;16416:275;;-1:-1:-1;16416:275:1:o;16696:183::-;16756:4;-1:-1:-1;;;;;16781:6:1;16778:30;16775:56;;;16811:18;;:::i;:::-;-1:-1:-1;16856:1:1;16852:14;16868:4;16848:25;;16696:183::o;17010:128::-;17050:3;17081:1;17077:6;17074:1;17071:13;17068:39;;;17087:18;;:::i;:::-;-1:-1:-1;17123:9:1;;17010:128::o;17143:120::-;17183:1;17209;17199:35;;17214:18;;:::i;:::-;-1:-1:-1;17248:9:1;;17143:120::o;17268:168::-;17308:7;17374:1;17370;17366:6;17362:14;17359:1;17356:21;17351:1;17344:9;17337:17;17333:45;17330:71;;;17381:18;;:::i;:::-;-1:-1:-1;17421:9:1;;17268:168::o;17441:125::-;17481:4;17509:1;17506;17503:8;17500:34;;;17514:18;;:::i;:::-;-1:-1:-1;17551:9:1;;17441:125::o;17571:258::-;17643:1;17653:113;17667:6;17664:1;17661:13;17653:113;;;17743:11;;;17737:18;17724:11;;;17717:39;17689:2;17682:10;17653:113;;;17784:6;17781:1;17778:13;17775:48;;;-1:-1:-1;;17819:1:1;17801:16;;17794:27;17571:258::o;17834:380::-;17913:1;17909:12;;;;17956;;;17977:61;;18031:4;18023:6;18019:17;18009:27;;17977:61;18084:2;18076:6;18073:14;18053:18;18050:38;18047:161;;;18130:10;18125:3;18121:20;18118:1;18111:31;18165:4;18162:1;18155:15;18193:4;18190:1;18183:15;18047:161;;17834:380;;;:::o;18219:135::-;18258:3;-1:-1:-1;;18279:17:1;;18276:43;;;18299:18;;:::i;:::-;-1:-1:-1;18346:1:1;18335:13;;18219:135::o;18359:112::-;18391:1;18417;18407:35;;18422:18;;:::i;:::-;-1:-1:-1;18456:9:1;;18359:112::o;18476:127::-;18537:10;18532:3;18528:20;18525:1;18518:31;18568:4;18565:1;18558:15;18592:4;18589:1;18582:15;18608:127;18669:10;18664:3;18660:20;18657:1;18650:31;18700:4;18697:1;18690:15;18724:4;18721:1;18714:15;18740:127;18801:10;18796:3;18792:20;18789:1;18782:31;18832:4;18829:1;18822:15;18856:4;18853:1;18846:15;18872:127;18933:10;18928:3;18924:20;18921:1;18914:31;18964:4;18961:1;18954:15;18988:4;18985:1;18978:15;19004:127;19065:10;19060:3;19056:20;19053:1;19046:31;19096:4;19093:1;19086:15;19120:4;19117:1;19110:15;19136:131;-1:-1:-1;;;;;;19210:32:1;;19200:43;;19190:71;;19257:1;19254;19247:12
Swarm Source
ipfs://978223150105f46e7847f1989da1f79f1c4d9c80a37611cacda3db9dd5f559e0
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.