ERC-721
NFT
Overview
Max Total Supply
1,073 BMACYAN1OF1
Holders
687
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
2 BMACYAN1OF1Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BlvckMarketCyan
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2022-01-20 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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) external; function transferFrom(address from, address to, uint256 tokenId) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); } 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); } interface IERC721Enumerable is IERC721 { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } 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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { // Storage of map keys and values MapEntry[] _entries; // Position of the entry defined by a key in the `entries` array, plus 1 // because index 0 means a key is not in the map. mapping (bytes32 => uint256) _indexes; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); // The entry is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } /** * @dev Removes a key-value pair from a map. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function _remove(Map storage map, bytes32 key) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one // in the array, and then remove the last entry (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. MapEntry storage lastEntry = map._entries[lastIndex]; // Move the last entry to the index where the entry to delete is map._entries[toDeleteIndex] = lastEntry; // Update the index for the moved entry map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved entry was stored map._entries.pop(); // Delete the index for the deleted slot delete map._indexes[key]; return true; } else { return false; } } /** * @dev Returns true if the key is in the map. O(1). */ function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } /** * @dev Returns the number of key-value pairs in the map. O(1). */ function _length(Map storage map) private view returns (uint256) { return map._entries.length; } /** * @dev Returns the key-value pair stored at position `index` in the map. O(1). * * Note that there are no guarantees on the ordering of entries inside the * array, and it may change when more entries are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. */ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } /** * @dev Same as {_get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {_tryGet}. */ function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } // UintToAddressMap struct UintToAddressMap { Map _inner; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } /** * @dev Returns true if the key is in the map. O(1). */ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } /** * @dev Returns the number of elements in the map. O(1). */ function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. * * _Available since v3.4._ */ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens mapping (address => EnumerableSet.UintSet) private _holderTokens; // Mapping from owner to list of owned token IDs mapping (address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Enumerable mapping from token ids to their owners EnumerableMap.UintToAddressMap private _tokenOwners; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Base URI string private _baseURI; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } modifier canTransfer(uint256 _tokenId) { require(_isApprovedOrOwner(msg.sender, _tokenId)); _; } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _holderTokens[owner].length(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } function totalSupplyString() public view virtual returns (string memory) { return _tokenOwners.length().toString(); } function addTokenTo(address _to, uint256 _tokenId) internal { uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].pop(); ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds return _tokenOwners.length(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId); } function _safeTransfer(address from, address to, uint256 tokenId) internal virtual { _transfer(from, to, tokenId); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _mint(to, tokenId); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); allTokensIndex[tokenId] = allTokens.length; allTokens.push(tokenId); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); removeTokenFrom(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); removeTokenFrom(from, tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } contract Ownable is Context { address public _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract BlvckMarketCyan is Ownable, ERC721 { using Strings for string; using Strings for uint256; using SafeMath for uint256; constructor () ERC721("BlvckMarketCyan" ,"BMACYAN1OF1"){} struct SnakeNFT { string ipfsHash; address publisher; uint id; } address payable public artistWallet = payable(0x43bF6C711ceA984e55926fCa73D602309769aBF6); address payable public teamWallet = payable(0x7E66E23b0Cc2eB712a1af1dE9b6aF0FbABbd42C3); address payable public treasuryWallet = payable(0x1196f89b8DA779CF24613cA7572B991927d3E9ad); address payable public taxWallet = payable(0xD5d8B27a62b46e4e4fA78F38aE8C843F1fD69b79); address payable public BMAWallet = payable(0x25f67d7e553174F8c170Cfa48A794FC5090e197F); uint public artistTax = 22; uint public teamTax = 6; uint public treasuryTax = 11; uint public taxTax = 50; uint public BMATax = 11; bool public enableSecurityPayment = false; bool public enableDutchAuction = true; uint256 public priceMint = 1000000000000000000; uint256 public priceMint1 = 1000000000000000000; uint256 public priceMint2 = 2000000000000000000; uint256 public priceMint3 = 3000000000000000000; uint256 public priceMint4 = 4000000000000000000; uint256 public mintCount = 0; uint256 public MAX_SNAKE = 10000; string public baseExtension = ".json"; bool public pauseMint = true; SnakeNFT[] public snakesNFTs; mapping (string => uint256) ipfsHashToTokenId; mapping (address => uint256) internal publishedTokensCount; mapping (address => uint256[]) internal publishedTokens; mapping(address => mapping (uint256 => uint256)) internal publishedTokensIndex; function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function withdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function setBaseExtension(string memory _value) public onlyOwner { baseExtension = _value; } function setPricesDutchAuction( uint256 _value1, uint256 _value2, uint256 _value3, uint256 _value4 ) public onlyOwner { priceMint1 = _value1; priceMint2 = _value2; priceMint3 = _value3; priceMint4 = _value4; } function setPriceMint(uint256 _value) public onlyOwner { priceMint = _value; } function setBaseURI(string memory _value) public onlyOwner { _setBaseURI(_value); } function setPauseMint(bool _value) public onlyOwner { pauseMint = _value; } function setEnableSecurityPayment(bool _value) public onlyOwner { enableSecurityPayment = _value; } function setEnableDutchAuction(bool _value) public onlyOwner { enableDutchAuction = _value; } function setBMATax(uint _value) public onlyOwner { BMATax = _value; } function setTaxTax(uint _value) public onlyOwner { taxTax = _value; } function setTreasuryTax(uint _value) public onlyOwner { treasuryTax = _value; } function setTeamTax(uint _value) public onlyOwner { teamTax = _value; } function setArtistTax(uint _value) public onlyOwner { artistTax = _value; } function setBMAWallet(address payable _value) public onlyOwner { BMAWallet = _value; } function setTaxWallet(address payable _value) public onlyOwner { taxWallet = _value; } function setTreasuryWallet(address payable _value) public onlyOwner { treasuryWallet = _value; } function setTeamWallet(address payable _value) public onlyOwner { teamWallet = _value; } function setArtistWallet(address payable _value) public onlyOwner { artistWallet = _value; } function getIpfsHashToTokenId(string memory _string) public view returns (uint256){ return ipfsHashToTokenId[_string]; } function getOwnedTokens(address _owner) public view returns (uint256[] memory) { return ownedTokens[_owner]; } function mintNFT(uint256 _amount) public payable { require(!pauseMint, "Mint paused."); require(totalSupply().add(_amount) <= MAX_SNAKE, "Limit exceeded."); if(mintCount == 7998) { setPauseMint(true); } uint256 priceItemEther; if(enableDutchAuction){ require(msg.value == calculateDutchAuction().mul(_amount <= 0 ? 1 : _amount)); priceItemEther = calculateDutchAuction().mul(_amount <= 0 ? 1 : _amount); }else{ require(msg.value == priceMint.mul(_amount <= 0 ? 1 : _amount)); priceItemEther = priceMint; } if(enableSecurityPayment){ BMAWallet.transfer(priceItemEther); }else{ artistWallet.transfer(priceItemEther.mul(artistTax).div(100)); teamWallet.transfer(priceItemEther.mul(teamTax).div(100)); treasuryWallet.transfer(priceItemEther.mul(treasuryTax).div(100)); taxWallet.transfer(priceItemEther.mul(taxTax).div(100)); BMAWallet.transfer(priceItemEther.mul(BMATax).div(100)); } for(uint256 i = 0; i < _amount; i++){ SnakeNFT memory _snakesNFT = SnakeNFT({ ipfsHash: " ", publisher: msg.sender, id: 0 }); snakesNFTs.push(_snakesNFT); uint256 newSnakesNFTId = snakesNFTs.length - 1; snakesNFTs[newSnakesNFTId].id = newSnakesNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newSnakesNFTId.toString() , baseExtension)); snakesNFTs[newSnakesNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newSnakesNFTId; _mint(msg.sender, newSnakesNFTId); publishedTokensCount[msg.sender]++; uint256 length = publishedTokens[msg.sender].length; publishedTokens[msg.sender].push(newSnakesNFTId); publishedTokensIndex[msg.sender][newSnakesNFTId] = length; mintCount++; } } function generateSnakes(address[] memory _addresses) public onlyOwner { require(totalSupply() <= MAX_SNAKE, "Limit exceeded."); for(uint256 i = 0; i < _addresses.length; i++){ SnakeNFT memory _snakesNFT = SnakeNFT({ ipfsHash: " ", publisher: _addresses[i], id: 0 }); snakesNFTs.push(_snakesNFT); uint256 newSnakesNFTId = snakesNFTs.length - 1; snakesNFTs[newSnakesNFTId].id = newSnakesNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newSnakesNFTId.toString() , baseExtension)); snakesNFTs[newSnakesNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newSnakesNFTId; _mint(_addresses[i], newSnakesNFTId); publishedTokensCount[_addresses[i]]++; uint256 length = publishedTokens[_addresses[i]].length; publishedTokens[_addresses[i]].push(newSnakesNFTId); publishedTokensIndex[_addresses[i]][newSnakesNFTId] = length; mintCount++; } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function calculateDutchAuction() public view returns (uint256) { uint256 price = mintCount <= 1333 ? priceMint1 : mintCount > 1333 && mintCount <= 3999 ? priceMint2 : mintCount > 3999 && mintCount <= 7998 ? priceMint3 : mintCount > 7998 ? priceMint4 : priceMint1; return price; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BMATax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BMAWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SNAKE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"artistTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"artistWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateDutchAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableDutchAuction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSecurityPayment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"generateSnakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_string","type":"string"}],"name":"getIpfsHashToTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOwnedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintNFT","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":"pauseMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setArtistTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setArtistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBMATax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setBMAWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setEnableDutchAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setEnableSecurityPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPriceMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value1","type":"uint256"},{"internalType":"uint256","name":"_value2","type":"uint256"},{"internalType":"uint256","name":"_value3","type":"uint256"},{"internalType":"uint256","name":"_value4","type":"uint256"}],"name":"setPricesDutchAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTaxTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTeamTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTreasuryTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"snakesNFTs","outputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"address","name":"publisher","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600f80546001600160a01b03199081167343bf6c711cea984e55926fca73d602309769abf617909155601080548216737e66e23b0cc2eb712a1af1de9b6af0fbabbd42c3179055601180548216731196f89b8da779cf24613ca7572b991927d3e9ad17905560128054821673d5d8b27a62b46e4e4fa78f38ae8c843f1fd69b79179055601380549091167325f67d7e553174f8c170cfa48a794fc5090e197f179055601660148190556006601555600b9081905560326017556018556019805461ffff1916610100179055670de0b6b3a7640000601a819055601b55671bc16d674ec80000601c556729a2241af62c0000601d55673782dace9d900000601e556000601f5561271060205560c06040526005608081905264173539b7b760d91b60a0908152620001339160219190620002ec565b506022805460ff191660011790553480156200014e57600080fd5b506040518060400160405280600f81526020016e21363b31b5a6b0b935b2ba21bcb0b760891b8152506040518060400160405280600b81526020016a424d414359414e314f463160a81b8152506000620001ad6200026160201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200020c906009906020850190620002ec565b5080516200022290600a906020840190620002ec565b50620002356380ac58cd60e01b62000265565b62000247635b5e139f60e01b62000265565b6200025963780e9d6360e01b62000265565b5050620003cf565b3390565b6001600160e01b03198082161415620002c45760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054620002fa9062000392565b90600052602060002090601f0160209004810192826200031e576000855562000369565b82601f106200033957805160ff191683800117855562000369565b8280016001018555821562000369579182015b82811115620003695782518255916020019190600101906200034c565b50620003779291506200037b565b5090565b5b808211156200037757600081556001016200037c565b600181811c90821680620003a757607f821691505b60208210811415620003c957634e487b7160e01b600052602260045260246000fd5b50919050565b61373380620003df6000396000f3fe6080604052600436106103e45760003560e01c8063715018a611610208578063cd85cdb511610118578063ddcdaa94116100ab578063ecfeb5ba1161007a578063ecfeb5ba14610b6b578063f2fde38b14610b81578063f59e26d014610ba1578063f73fb6d814610bc1578063fce57fd914610bdb57600080fd5b8063ddcdaa9414610acc578063df38fd4114610aec578063e985e9c514610b02578063ea414b2814610b4b57600080fd5b8063d862686b116100e7578063d862686b14610a61578063d9d6165514610a77578063da3ef23f14610a97578063da6fa46c14610ab757600080fd5b8063cd85cdb5146109f2578063d122ae1314610a0c578063d1fe033d14610a22578063d34a6a3314610a4157600080fd5b8063a3342fba1161019b578063b2bdfa7b1161016a578063b2bdfa7b1461095d578063b3eb58351461097d578063c66828621461099d578063c87b56dd146109b2578063cd6840d5146109d257600080fd5b8063a3342fba146108d8578063a40f232f146108f8578063a5b5904314610927578063a8602fea1461093d57600080fd5b8063932733c7116101d7578063932733c71461087757806395d89b411461088d5780639659867e146108a2578063a22cb465146108b857600080fd5b8063715018a61461081b5780637cd1c310146108305780638da5cb5b14610846578063926427441461086457600080fd5b80633ccfd60b1161030357806355f804b3116102965780636352211e116102655780636352211e146107865780636bb4c459146107a65780636c0360eb146107c657806370a08231146107db578063710b3cdb146107fb57600080fd5b806355f804b31461071057806356ea64ad1461073057806359927044146107505780635f7b144a1461077057600080fd5b80634626402b116102d25780634626402b146106a45780634f6ccce7146106c457806354be1714146106e457806354ed458a146106fa57600080fd5b80633ccfd60b1461062257806342842e0e14610637578063438b63001461065757806345136c4b1461068457600080fd5b806318160ddd1161037b5780632dc0562d1161034a5780632dc0562d146105ac5780632f745c59146105cc5780632fe5cba1146105ec578063334635f01461060c57600080fd5b806318160ddd1461053757806323b872dd1461054c57806327ea2df01461056c57806329f3265b1461058c57600080fd5b8063095ea7b3116103b7578063095ea7b3146104b4578063098154d2146104d45780630dee18e4146104f75780631525ff7d1461051757600080fd5b806301ffc9a7146103e95780630256276d1461043857806306fdde031461045a578063081812fc1461047c575b600080fd5b3480156103f557600080fd5b50610423610404366004613203565b6001600160e01b03191660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561044457600080fd5b506104586104533660046132c2565b610bfb565b005b34801561046657600080fd5b5061046f610c33565b60405161042f919061345d565b34801561048857600080fd5b5061049c6104973660046132c2565b610cc5565b6040516001600160a01b03909116815260200161042f565b3480156104c057600080fd5b506104586104cf366004613103565b610d4d565b3480156104e057600080fd5b506104e9610e63565b60405190815260200161042f565b34801561050357600080fd5b506104586105123660046132c2565b610edd565b34801561052357600080fd5b50610458610532366004613037565b610f0c565b34801561054357600080fd5b506104e9610f58565b34801561055857600080fd5b5061045861056736600461308d565b610f69565b34801561057857600080fd5b506104e961058736600461322d565b610f9b565b34801561059857600080fd5b506104586105a736600461312f565b610fc3565b3480156105b857600080fd5b5060125461049c906001600160a01b031681565b3480156105d857600080fd5b506104e96105e7366004613103565b61138a565b3480156105f857600080fd5b5060135461049c906001600160a01b031681565b34801561061857600080fd5b506104e9601d5481565b34801561062e57600080fd5b506104586113b3565b34801561064357600080fd5b5061045861065236600461308d565b61140c565b34801561066357600080fd5b50610677610672366004613037565b61143c565b60405161042f9190613419565b34801561069057600080fd5b5061045861069f366004613037565b6114de565b3480156106b057600080fd5b5060115461049c906001600160a01b031681565b3480156106d057600080fd5b506104e96106df3660046132c2565b61152a565b3480156106f057600080fd5b506104e960185481565b34801561070657600080fd5b506104e9601c5481565b34801561071c57600080fd5b5061045861072b36600461322d565b611538565b34801561073c57600080fd5b5061045861074b3660046132c2565b61156b565b34801561075c57600080fd5b5060105461049c906001600160a01b031681565b34801561077c57600080fd5b506104e960175481565b34801561079257600080fd5b5061049c6107a13660046132c2565b61159a565b3480156107b257600080fd5b506104586107c13660046132c2565b6115c2565b3480156107d257600080fd5b5061046f6115f1565b3480156107e757600080fd5b506104e96107f6366004613037565b611600565b34801561080757600080fd5b506104586108163660046132db565b61168c565b34801561082757600080fd5b506104586116ca565b34801561083c57600080fd5b506104e9601e5481565b34801561085257600080fd5b506000546001600160a01b031661049c565b6104586108723660046132c2565b61173e565b34801561088357600080fd5b506104e960155481565b34801561089957600080fd5b5061046f611c6b565b3480156108ae57600080fd5b506104e9601f5481565b3480156108c457600080fd5b506104586108d33660046130ce565b611c7a565b3480156108e457600080fd5b50600f5461049c906001600160a01b031681565b34801561090457600080fd5b506109186109133660046132c2565b611d3f565b60405161042f93929190613470565b34801561093357600080fd5b506104e9601a5481565b34801561094957600080fd5b50610458610958366004613037565b611e0b565b34801561096957600080fd5b5060005461049c906001600160a01b031681565b34801561098957600080fd5b506104586109983660046132c2565b611e57565b3480156109a957600080fd5b5061046f611e86565b3480156109be57600080fd5b5061046f6109cd3660046132c2565b611f14565b3480156109de57600080fd5b506104586109ed3660046132c2565b611fe1565b3480156109fe57600080fd5b506022546104239060ff1681565b348015610a1857600080fd5b506104e9601b5481565b348015610a2e57600080fd5b5060195461042390610100900460ff1681565b348015610a4d57600080fd5b50610458610a5c3660046131e8565b612010565b348015610a6d57600080fd5b506104e960145481565b348015610a8357600080fd5b50610677610a92366004613037565b61204d565b348015610aa357600080fd5b50610458610ab236600461322d565b6120b9565b348015610ac357600080fd5b5061046f6120f6565b348015610ad857600080fd5b50610458610ae73660046131e8565b61210a565b348015610af857600080fd5b506104e960205481565b348015610b0e57600080fd5b50610423610b1d366004613054565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610b5757600080fd5b50610458610b66366004613037565b61214e565b348015610b7757600080fd5b506104e960165481565b348015610b8d57600080fd5b50610458610b9c366004613037565b61219a565b348015610bad57600080fd5b50610458610bbc3660046131e8565b612284565b348015610bcd57600080fd5b506019546104239060ff1681565b348015610be757600080fd5b50610458610bf6366004613037565b6122c1565b6000546001600160a01b03163314610c2e5760405162461bcd60e51b8152600401610c259061349e565b60405180910390fd5b601555565b606060098054610c42906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e906135e7565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050505050905090565b6000610cd08261230d565b610d315760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c25565b506000908152600760205260409020546001600160a01b031690565b6000610d588261159a565b9050806001600160a01b0316836001600160a01b03161415610dc65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c25565b336001600160a01b0382161480610de25750610de28133610b1d565b610e545760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c25565b610e5e838361231a565b505050565b600080610535601f541115610ed357610535601f54118015610e895750610f9f601f5411155b610ecb57610f9f601f54118015610ea45750611f3e601f5411155b610ec357611f3e601f5411610ebb57601b54610ed7565b601e54610ed7565b601d54610ed7565b601c54610ed7565b601b545b92915050565b6000546001600160a01b03163314610f075760405162461bcd60e51b8152600401610c259061349e565b601a55565b6000546001600160a01b03163314610f365760405162461bcd60e51b8152600401610c259061349e565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f646005612388565b905090565b610f74335b82612392565b610f905760405162461bcd60e51b8152600401610c25906134d3565b610e5e83838361247c565b6000602482604051610fad9190613339565b9081526020016040518091039020549050919050565b6000546001600160a01b03163314610fed5760405162461bcd60e51b8152600401610c259061349e565b602054610ff8610f58565b11156110385760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610c25565b60005b81518110156113865760006040518060600160405280604051806040016040528060018152602001600160fd1b815250815260200184848151811061108257611082613693565b6020908102919091018101516001600160a01b03168252600091810182905260238054600181018255925282518051939450849360039093027fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f423001926110eb9284920190612f89565b506020820151600182810180546001600160a01b0319166001600160a01b039093169290921790915560409092015160029091015560235460009161112f916135a0565b9050806023828154811061114557611145613693565b90600052602060002090600302016002018190555060006111646115f1565b905060008161117284612611565b602160405160200161118693929190613355565b604051602081830303815290604052905080602384815481106111ab576111ab613693565b906000526020600020906003020160000190805190602001906111cf929190612f89565b50826024826040516111e19190613339565b90815260200160405180910390208190555061121686868151811061120857611208613693565b60200260200101518461270f565b6025600087878151811061122c5761122c613693565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600081548092919061126590613622565b919050555060006026600088888151811061128257611282613693565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020805490509050602660008888815181106112c6576112c6613693565b6020908102919091018101516001600160a01b031682528181019290925260400160009081208054600181018255908252918120909101859055875182916027918a908a90811061131957611319613693565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600086815260200190815260200160002081905550601f600081548092919061136990613622565b91905055505050505050808061137e90613622565b91505061103b565b5050565b6001600160a01b03821660009081526002602052604081206113ac9083612871565b9392505050565b6000546001600160a01b031633146113dd5760405162461bcd60e51b8152600401610c259061349e565b60405133904780156108fc02916000818181858888f19350505050158015611409573d6000803e3d6000fd5b50565b61141533610f6e565b6114315760405162461bcd60e51b8152600401610c25906134d3565b610e5e838383610f90565b6060600061144983611600565b905060008167ffffffffffffffff811115611466576114666136a9565b60405190808252806020026020018201604052801561148f578160200160208202803683370190505b50905060005b828110156114d6576114a7858261138a565b8282815181106114b9576114b9613693565b6020908102919091010152806114ce81613622565b915050611495565b509392505050565b6000546001600160a01b031633146115085760405162461bcd60e51b8152600401610c259061349e565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000806114d660058461287d565b6000546001600160a01b031633146115625760405162461bcd60e51b8152600401610c259061349e565b61140981612899565b6000546001600160a01b031633146115955760405162461bcd60e51b8152600401610c259061349e565b601455565b6000610ed7826040518060600160405280602981526020016136d560299139600591906128ac565b6000546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610c259061349e565b601855565b6060600e8054610c42906135e7565b60006001600160a01b03821661166b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c25565b6001600160a01b0382166000908152600260205260409020610ed790612388565b6000546001600160a01b031633146116b65760405162461bcd60e51b8152600401610c259061349e565b601b93909355601c91909155601d55601e55565b6000546001600160a01b031633146116f45760405162461bcd60e51b8152600401610c259061349e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60225460ff16156117805760405162461bcd60e51b815260206004820152600c60248201526b26b4b73a103830bab9b2b21760a11b6044820152606401610c25565b6020546117958261178f610f58565b906128b9565b11156117d55760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610c25565b601f54611f3e14156117eb576117eb6001612284565b601954600090610100900460ff161561183f5761181e821561180d5782611810565b60015b611818610e63565b90612918565b341461182957600080fd5b611838821561180d5782611810565b905061186a565b61185a821561184e5782611851565b60015b601a5490612918565b341461186557600080fd5b50601a545b60195460ff16156118b5576013546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156118af573d6000803e3d6000fd5b50611a51565b600f546014546001600160a01b03909116906108fc906118e3906064906118dd908690612918565b90612997565b6040518115909202916000818181858888f1935050505015801561190b573d6000803e3d6000fd5b506010546015546001600160a01b03909116906108fc90611934906064906118dd908690612918565b6040518115909202916000818181858888f1935050505015801561195c573d6000803e3d6000fd5b506011546016546001600160a01b03909116906108fc90611985906064906118dd908690612918565b6040518115909202916000818181858888f193505050501580156119ad573d6000803e3d6000fd5b506012546017546001600160a01b03909116906108fc906119d6906064906118dd908690612918565b6040518115909202916000818181858888f193505050501580156119fe573d6000803e3d6000fd5b506013546018546001600160a01b03909116906108fc90611a27906064906118dd908690612918565b6040518115909202916000818181858888f19350505050158015611a4f573d6000803e3d6000fd5b505b60005b82811015610e5e576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052602380549283018155909352815180519293849360039093027fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300192611ad69284920190612f89565b506020820151600182810180546001600160a01b0319166001600160a01b0390931692909217909155604090920151600290910155602354600091611b1a916135a0565b90508060238281548110611b3057611b30613693565b9060005260206000209060030201600201819055506000611b4f6115f1565b9050600081611b5d84612611565b6021604051602001611b7193929190613355565b60405160208183030381529060405290508060238481548110611b9657611b96613693565b90600052602060002090600302016000019080519060200190611bba929190612f89565b5082602482604051611bcc9190613339565b90815260405190819003602001902055611be6338461270f565b336000908152602560205260408120805491611c0183613622565b909155505033600081815260266020908152604080832080546001810182559084528284208101889055938352602782528083208784529091528120829055601f805491611c4e83613622565b919050555050505050508080611c6390613622565b915050611a54565b6060600a8054610c42906135e7565b6001600160a01b038216331415611cd35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c25565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60238181548110611d4f57600080fd5b9060005260206000209060030201600091509050806000018054611d72906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9e906135e7565b8015611deb5780601f10611dc057610100808354040283529160200191611deb565b820191906000526020600020905b815481529060010190602001808311611dce57829003601f168201915b50505050600183015460029093015491926001600160a01b031691905083565b6000546001600160a01b03163314611e355760405162461bcd60e51b8152600401610c259061349e565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e815760405162461bcd60e51b8152600401610c259061349e565b601755565b60218054611e93906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611ebf906135e7565b8015611f0c5780601f10611ee157610100808354040283529160200191611f0c565b820191906000526020600020905b815481529060010190602001808311611eef57829003601f168201915b505050505081565b6060611f1f8261230d565b611f835760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c25565b6000611f8d6115f1565b90506000815111611fad57604051806020016040528060008152506113ac565b80611fb784612611565b6021604051602001611fcb93929190613355565b6040516020818303038152906040529392505050565b6000546001600160a01b0316331461200b5760405162461bcd60e51b8152600401610c259061349e565b601655565b6000546001600160a01b0316331461203a5760405162461bcd60e51b8152600401610c259061349e565b6019805460ff1916911515919091179055565b6001600160a01b0381166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156120ad57602002820191906000526020600020905b815481526020019060010190808311612099575b50505050509050919050565b6000546001600160a01b031633146120e35760405162461bcd60e51b8152600401610c259061349e565b8051611386906021906020840190612f89565b6060610f646121056005612388565b612611565b6000546001600160a01b031633146121345760405162461bcd60e51b8152600401610c259061349e565b601980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146121785760405162461bcd60e51b8152600401610c259061349e565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121c45760405162461bcd60e51b8152600401610c259061349e565b6001600160a01b0381166122295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c25565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122ae5760405162461bcd60e51b8152600401610c259061349e565b6022805460ff1916911515919091179055565b6000546001600160a01b031633146122eb5760405162461bcd60e51b8152600401610c259061349e565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ed76005836129f2565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061234f8261159a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610ed7825490565b600061239d8261230d565b6123fe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c25565b60006124098361159a565b9050806001600160a01b0316846001600160a01b031614806124445750836001600160a01b031661243984610cc5565b6001600160a01b0316145b8061247457506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661248f8261159a565b6001600160a01b0316146124f75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c25565b6001600160a01b0382166125595760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c25565b61256460008261231a565b6001600160a01b03831660009081526002602052604090206125869082612a0a565b506001600160a01b03821660009081526002602052604090206125a99082612a16565b506125b48382612a22565b6125be8282612b6c565b6125ca60058284612ba8565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060816126355750506040805180820190915260018152600360fc1b602082015290565b8160005b811561265f578061264981613622565b91506126589050600a8361356d565b9150612639565b60008167ffffffffffffffff81111561267a5761267a6136a9565b6040519080825280601f01601f1916602001820160405280156126a4576020820181803683370190505b5090505b8415612474576126b96001836135a0565b91506126c6600a8661363d565b6126d1906030613555565b60f81b8183815181106126e6576126e6613693565b60200101906001600160f81b031916908160001a905350612708600a8661356d565b94506126a8565b6001600160a01b0382166127655760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c25565b61276e8161230d565b156127bb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c25565b600c80546000838152600d60209081526040808320849055600184019094557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79092018490556001600160a01b038516815260029091522061281d9082612a16565b506128288282612b6c565b61283460058284612ba8565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006113ac8383612bbe565b600080808061288c8686612c44565b9097909650945050505050565b805161138690600e906020840190612f89565b6000612474848484612ce1565b6000806128c68385613555565b9050838110156113ac5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c25565b60008261292757506000610ed7565b60006129338385613581565b905082612940858361356d565b146113ac5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c25565b60008082116129e85760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610c25565b6113ac828461356d565b600081815260018301602052604081205415156113ac565b60006113ac8383612d4a565b60006113ac8383612e3d565b6000818152600460209081526040808320546001600160a01b03861684526003909252822054909190612a56906001612e8c565b6001600160a01b03851660009081526003602052604081208054929350909183908110612a8557612a85613693565b906000526020600020015490508060036000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612ac957612ac9613693565b60009182526020808320909101929092556001600160a01b0387168152600390915260408120805484908110612b0157612b01613693565b60009182526020808320909101929092556001600160a01b0387168152600390915260409020805480612b3657612b3661367d565b60008281526020808220830160001990810183905590920190925594815260049094526040808520859055908452909220555050565b6001600160a01b039091166000908152600360209081526040808320805460018101825590845282842081018590559383526004909152902055565b600061247484846001600160a01b038516612ee8565b81546000908210612c1c5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c25565b826000018281548110612c3157612c31613693565b9060005260206000200154905092915050565b815460009081908310612ca45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c25565b6000846000018481548110612cbb57612cbb613693565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612d115760405162461bcd60e51b8152600401610c25919061345d565b5084612d1e6001836135a0565b81548110612d2e57612d2e613693565b9060005260206000209060020201600101549150509392505050565b60008181526001830160205260408120548015612e33576000612d6e6001836135a0565b8554909150600090612d82906001906135a0565b90506000866000018281548110612d9b57612d9b613693565b9060005260206000200154905080876000018481548110612dbe57612dbe613693565b600091825260209091200155612dd5836001613555565b60008281526001890160205260409020558654879080612df757612df761367d565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ed7565b6000915050610ed7565b6000818152600183016020526040812054612e8457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ed7565b506000610ed7565b600082821115612ede5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610c25565b6113ac82846135a0565b600082815260018401602052604081205480612f4d5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556113ac565b8285612f5a6001846135a0565b81548110612f6a57612f6a613693565b90600052602060002090600202016001018190555060009150506113ac565b828054612f95906135e7565b90600052602060002090601f016020900481019282612fb75760008555612ffd565b82601f10612fd057805160ff1916838001178555612ffd565b82800160010185558215612ffd579182015b82811115612ffd578251825591602001919060010190612fe2565b5061300992915061300d565b5090565b5b80821115613009576000815560010161300e565b8035801515811461303257600080fd5b919050565b60006020828403121561304957600080fd5b81356113ac816136bf565b6000806040838503121561306757600080fd5b8235613072816136bf565b91506020830135613082816136bf565b809150509250929050565b6000806000606084860312156130a257600080fd5b83356130ad816136bf565b925060208401356130bd816136bf565b929592945050506040919091013590565b600080604083850312156130e157600080fd5b82356130ec816136bf565b91506130fa60208401613022565b90509250929050565b6000806040838503121561311657600080fd5b8235613121816136bf565b946020939093013593505050565b6000602080838503121561314257600080fd5b823567ffffffffffffffff8082111561315a57600080fd5b818501915085601f83011261316e57600080fd5b813581811115613180576131806136a9565b8060051b9150613191848301613524565b8181528481019084860184860187018a10156131ac57600080fd5b600095505b838610156131db57803594506131c6856136bf565b848352600195909501949186019186016131b1565b5098975050505050505050565b6000602082840312156131fa57600080fd5b6113ac82613022565b60006020828403121561321557600080fd5b81356001600160e01b0319811681146113ac57600080fd5b6000602080838503121561324057600080fd5b823567ffffffffffffffff8082111561325857600080fd5b818501915085601f83011261326c57600080fd5b81358181111561327e5761327e6136a9565b613290601f8201601f19168501613524565b915080825286848285010111156132a657600080fd5b8084840185840137600090820190930192909252509392505050565b6000602082840312156132d457600080fd5b5035919050565b600080600080608085870312156132f157600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526133258160208601602086016135b7565b601f01601f19169290920160200192915050565b6000825161334b8184602087016135b7565b9190910192915050565b6000845160206133688285838a016135b7565b85519184019161337b8184848a016135b7565b8554920191600090600181811c908083168061339857607f831692505b8583108114156133b657634e487b7160e01b85526022600452602485fd5b8080156133ca57600181146133db57613408565b60ff19851688528388019550613408565b60008b81526020902060005b858110156134005781548a8201529084019088016133e7565b505083880195505b50939b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561345157835183529284019291840191600101613435565b50909695505050505050565b6020815260006113ac602083018461330d565b606081526000613483606083018661330d565b6001600160a01b039490941660208301525060400152919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561354d5761354d6136a9565b604052919050565b6000821982111561356857613568613651565b500190565b60008261357c5761357c613667565b500490565b600081600019048311821515161561359b5761359b613651565b500290565b6000828210156135b2576135b2613651565b500390565b60005b838110156135d25781810151838201526020016135ba565b838111156135e1576000848401525b50505050565b600181811c908216806135fb57607f821691505b6020821081141561361c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561363657613636613651565b5060010190565b60008261364c5761364c613667565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461140957600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212209c3cb38fa63da5009ed6cb55306a31bf4e000136c2f67d685d156a5f9cd1f5a064736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103e45760003560e01c8063715018a611610208578063cd85cdb511610118578063ddcdaa94116100ab578063ecfeb5ba1161007a578063ecfeb5ba14610b6b578063f2fde38b14610b81578063f59e26d014610ba1578063f73fb6d814610bc1578063fce57fd914610bdb57600080fd5b8063ddcdaa9414610acc578063df38fd4114610aec578063e985e9c514610b02578063ea414b2814610b4b57600080fd5b8063d862686b116100e7578063d862686b14610a61578063d9d6165514610a77578063da3ef23f14610a97578063da6fa46c14610ab757600080fd5b8063cd85cdb5146109f2578063d122ae1314610a0c578063d1fe033d14610a22578063d34a6a3314610a4157600080fd5b8063a3342fba1161019b578063b2bdfa7b1161016a578063b2bdfa7b1461095d578063b3eb58351461097d578063c66828621461099d578063c87b56dd146109b2578063cd6840d5146109d257600080fd5b8063a3342fba146108d8578063a40f232f146108f8578063a5b5904314610927578063a8602fea1461093d57600080fd5b8063932733c7116101d7578063932733c71461087757806395d89b411461088d5780639659867e146108a2578063a22cb465146108b857600080fd5b8063715018a61461081b5780637cd1c310146108305780638da5cb5b14610846578063926427441461086457600080fd5b80633ccfd60b1161030357806355f804b3116102965780636352211e116102655780636352211e146107865780636bb4c459146107a65780636c0360eb146107c657806370a08231146107db578063710b3cdb146107fb57600080fd5b806355f804b31461071057806356ea64ad1461073057806359927044146107505780635f7b144a1461077057600080fd5b80634626402b116102d25780634626402b146106a45780634f6ccce7146106c457806354be1714146106e457806354ed458a146106fa57600080fd5b80633ccfd60b1461062257806342842e0e14610637578063438b63001461065757806345136c4b1461068457600080fd5b806318160ddd1161037b5780632dc0562d1161034a5780632dc0562d146105ac5780632f745c59146105cc5780632fe5cba1146105ec578063334635f01461060c57600080fd5b806318160ddd1461053757806323b872dd1461054c57806327ea2df01461056c57806329f3265b1461058c57600080fd5b8063095ea7b3116103b7578063095ea7b3146104b4578063098154d2146104d45780630dee18e4146104f75780631525ff7d1461051757600080fd5b806301ffc9a7146103e95780630256276d1461043857806306fdde031461045a578063081812fc1461047c575b600080fd5b3480156103f557600080fd5b50610423610404366004613203565b6001600160e01b03191660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561044457600080fd5b506104586104533660046132c2565b610bfb565b005b34801561046657600080fd5b5061046f610c33565b60405161042f919061345d565b34801561048857600080fd5b5061049c6104973660046132c2565b610cc5565b6040516001600160a01b03909116815260200161042f565b3480156104c057600080fd5b506104586104cf366004613103565b610d4d565b3480156104e057600080fd5b506104e9610e63565b60405190815260200161042f565b34801561050357600080fd5b506104586105123660046132c2565b610edd565b34801561052357600080fd5b50610458610532366004613037565b610f0c565b34801561054357600080fd5b506104e9610f58565b34801561055857600080fd5b5061045861056736600461308d565b610f69565b34801561057857600080fd5b506104e961058736600461322d565b610f9b565b34801561059857600080fd5b506104586105a736600461312f565b610fc3565b3480156105b857600080fd5b5060125461049c906001600160a01b031681565b3480156105d857600080fd5b506104e96105e7366004613103565b61138a565b3480156105f857600080fd5b5060135461049c906001600160a01b031681565b34801561061857600080fd5b506104e9601d5481565b34801561062e57600080fd5b506104586113b3565b34801561064357600080fd5b5061045861065236600461308d565b61140c565b34801561066357600080fd5b50610677610672366004613037565b61143c565b60405161042f9190613419565b34801561069057600080fd5b5061045861069f366004613037565b6114de565b3480156106b057600080fd5b5060115461049c906001600160a01b031681565b3480156106d057600080fd5b506104e96106df3660046132c2565b61152a565b3480156106f057600080fd5b506104e960185481565b34801561070657600080fd5b506104e9601c5481565b34801561071c57600080fd5b5061045861072b36600461322d565b611538565b34801561073c57600080fd5b5061045861074b3660046132c2565b61156b565b34801561075c57600080fd5b5060105461049c906001600160a01b031681565b34801561077c57600080fd5b506104e960175481565b34801561079257600080fd5b5061049c6107a13660046132c2565b61159a565b3480156107b257600080fd5b506104586107c13660046132c2565b6115c2565b3480156107d257600080fd5b5061046f6115f1565b3480156107e757600080fd5b506104e96107f6366004613037565b611600565b34801561080757600080fd5b506104586108163660046132db565b61168c565b34801561082757600080fd5b506104586116ca565b34801561083c57600080fd5b506104e9601e5481565b34801561085257600080fd5b506000546001600160a01b031661049c565b6104586108723660046132c2565b61173e565b34801561088357600080fd5b506104e960155481565b34801561089957600080fd5b5061046f611c6b565b3480156108ae57600080fd5b506104e9601f5481565b3480156108c457600080fd5b506104586108d33660046130ce565b611c7a565b3480156108e457600080fd5b50600f5461049c906001600160a01b031681565b34801561090457600080fd5b506109186109133660046132c2565b611d3f565b60405161042f93929190613470565b34801561093357600080fd5b506104e9601a5481565b34801561094957600080fd5b50610458610958366004613037565b611e0b565b34801561096957600080fd5b5060005461049c906001600160a01b031681565b34801561098957600080fd5b506104586109983660046132c2565b611e57565b3480156109a957600080fd5b5061046f611e86565b3480156109be57600080fd5b5061046f6109cd3660046132c2565b611f14565b3480156109de57600080fd5b506104586109ed3660046132c2565b611fe1565b3480156109fe57600080fd5b506022546104239060ff1681565b348015610a1857600080fd5b506104e9601b5481565b348015610a2e57600080fd5b5060195461042390610100900460ff1681565b348015610a4d57600080fd5b50610458610a5c3660046131e8565b612010565b348015610a6d57600080fd5b506104e960145481565b348015610a8357600080fd5b50610677610a92366004613037565b61204d565b348015610aa357600080fd5b50610458610ab236600461322d565b6120b9565b348015610ac357600080fd5b5061046f6120f6565b348015610ad857600080fd5b50610458610ae73660046131e8565b61210a565b348015610af857600080fd5b506104e960205481565b348015610b0e57600080fd5b50610423610b1d366004613054565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610b5757600080fd5b50610458610b66366004613037565b61214e565b348015610b7757600080fd5b506104e960165481565b348015610b8d57600080fd5b50610458610b9c366004613037565b61219a565b348015610bad57600080fd5b50610458610bbc3660046131e8565b612284565b348015610bcd57600080fd5b506019546104239060ff1681565b348015610be757600080fd5b50610458610bf6366004613037565b6122c1565b6000546001600160a01b03163314610c2e5760405162461bcd60e51b8152600401610c259061349e565b60405180910390fd5b601555565b606060098054610c42906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e906135e7565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050505050905090565b6000610cd08261230d565b610d315760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c25565b506000908152600760205260409020546001600160a01b031690565b6000610d588261159a565b9050806001600160a01b0316836001600160a01b03161415610dc65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c25565b336001600160a01b0382161480610de25750610de28133610b1d565b610e545760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c25565b610e5e838361231a565b505050565b600080610535601f541115610ed357610535601f54118015610e895750610f9f601f5411155b610ecb57610f9f601f54118015610ea45750611f3e601f5411155b610ec357611f3e601f5411610ebb57601b54610ed7565b601e54610ed7565b601d54610ed7565b601c54610ed7565b601b545b92915050565b6000546001600160a01b03163314610f075760405162461bcd60e51b8152600401610c259061349e565b601a55565b6000546001600160a01b03163314610f365760405162461bcd60e51b8152600401610c259061349e565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f646005612388565b905090565b610f74335b82612392565b610f905760405162461bcd60e51b8152600401610c25906134d3565b610e5e83838361247c565b6000602482604051610fad9190613339565b9081526020016040518091039020549050919050565b6000546001600160a01b03163314610fed5760405162461bcd60e51b8152600401610c259061349e565b602054610ff8610f58565b11156110385760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610c25565b60005b81518110156113865760006040518060600160405280604051806040016040528060018152602001600160fd1b815250815260200184848151811061108257611082613693565b6020908102919091018101516001600160a01b03168252600091810182905260238054600181018255925282518051939450849360039093027fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f423001926110eb9284920190612f89565b506020820151600182810180546001600160a01b0319166001600160a01b039093169290921790915560409092015160029091015560235460009161112f916135a0565b9050806023828154811061114557611145613693565b90600052602060002090600302016002018190555060006111646115f1565b905060008161117284612611565b602160405160200161118693929190613355565b604051602081830303815290604052905080602384815481106111ab576111ab613693565b906000526020600020906003020160000190805190602001906111cf929190612f89565b50826024826040516111e19190613339565b90815260200160405180910390208190555061121686868151811061120857611208613693565b60200260200101518461270f565b6025600087878151811061122c5761122c613693565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600081548092919061126590613622565b919050555060006026600088888151811061128257611282613693565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020805490509050602660008888815181106112c6576112c6613693565b6020908102919091018101516001600160a01b031682528181019290925260400160009081208054600181018255908252918120909101859055875182916027918a908a90811061131957611319613693565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600086815260200190815260200160002081905550601f600081548092919061136990613622565b91905055505050505050808061137e90613622565b91505061103b565b5050565b6001600160a01b03821660009081526002602052604081206113ac9083612871565b9392505050565b6000546001600160a01b031633146113dd5760405162461bcd60e51b8152600401610c259061349e565b60405133904780156108fc02916000818181858888f19350505050158015611409573d6000803e3d6000fd5b50565b61141533610f6e565b6114315760405162461bcd60e51b8152600401610c25906134d3565b610e5e838383610f90565b6060600061144983611600565b905060008167ffffffffffffffff811115611466576114666136a9565b60405190808252806020026020018201604052801561148f578160200160208202803683370190505b50905060005b828110156114d6576114a7858261138a565b8282815181106114b9576114b9613693565b6020908102919091010152806114ce81613622565b915050611495565b509392505050565b6000546001600160a01b031633146115085760405162461bcd60e51b8152600401610c259061349e565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000806114d660058461287d565b6000546001600160a01b031633146115625760405162461bcd60e51b8152600401610c259061349e565b61140981612899565b6000546001600160a01b031633146115955760405162461bcd60e51b8152600401610c259061349e565b601455565b6000610ed7826040518060600160405280602981526020016136d560299139600591906128ac565b6000546001600160a01b031633146115ec5760405162461bcd60e51b8152600401610c259061349e565b601855565b6060600e8054610c42906135e7565b60006001600160a01b03821661166b5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c25565b6001600160a01b0382166000908152600260205260409020610ed790612388565b6000546001600160a01b031633146116b65760405162461bcd60e51b8152600401610c259061349e565b601b93909355601c91909155601d55601e55565b6000546001600160a01b031633146116f45760405162461bcd60e51b8152600401610c259061349e565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60225460ff16156117805760405162461bcd60e51b815260206004820152600c60248201526b26b4b73a103830bab9b2b21760a11b6044820152606401610c25565b6020546117958261178f610f58565b906128b9565b11156117d55760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610c25565b601f54611f3e14156117eb576117eb6001612284565b601954600090610100900460ff161561183f5761181e821561180d5782611810565b60015b611818610e63565b90612918565b341461182957600080fd5b611838821561180d5782611810565b905061186a565b61185a821561184e5782611851565b60015b601a5490612918565b341461186557600080fd5b50601a545b60195460ff16156118b5576013546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156118af573d6000803e3d6000fd5b50611a51565b600f546014546001600160a01b03909116906108fc906118e3906064906118dd908690612918565b90612997565b6040518115909202916000818181858888f1935050505015801561190b573d6000803e3d6000fd5b506010546015546001600160a01b03909116906108fc90611934906064906118dd908690612918565b6040518115909202916000818181858888f1935050505015801561195c573d6000803e3d6000fd5b506011546016546001600160a01b03909116906108fc90611985906064906118dd908690612918565b6040518115909202916000818181858888f193505050501580156119ad573d6000803e3d6000fd5b506012546017546001600160a01b03909116906108fc906119d6906064906118dd908690612918565b6040518115909202916000818181858888f193505050501580156119fe573d6000803e3d6000fd5b506013546018546001600160a01b03909116906108fc90611a27906064906118dd908690612918565b6040518115909202916000818181858888f19350505050158015611a4f573d6000803e3d6000fd5b505b60005b82811015610e5e576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052602380549283018155909352815180519293849360039093027fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300192611ad69284920190612f89565b506020820151600182810180546001600160a01b0319166001600160a01b0390931692909217909155604090920151600290910155602354600091611b1a916135a0565b90508060238281548110611b3057611b30613693565b9060005260206000209060030201600201819055506000611b4f6115f1565b9050600081611b5d84612611565b6021604051602001611b7193929190613355565b60405160208183030381529060405290508060238481548110611b9657611b96613693565b90600052602060002090600302016000019080519060200190611bba929190612f89565b5082602482604051611bcc9190613339565b90815260405190819003602001902055611be6338461270f565b336000908152602560205260408120805491611c0183613622565b909155505033600081815260266020908152604080832080546001810182559084528284208101889055938352602782528083208784529091528120829055601f805491611c4e83613622565b919050555050505050508080611c6390613622565b915050611a54565b6060600a8054610c42906135e7565b6001600160a01b038216331415611cd35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c25565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60238181548110611d4f57600080fd5b9060005260206000209060030201600091509050806000018054611d72906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d9e906135e7565b8015611deb5780601f10611dc057610100808354040283529160200191611deb565b820191906000526020600020905b815481529060010190602001808311611dce57829003601f168201915b50505050600183015460029093015491926001600160a01b031691905083565b6000546001600160a01b03163314611e355760405162461bcd60e51b8152600401610c259061349e565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611e815760405162461bcd60e51b8152600401610c259061349e565b601755565b60218054611e93906135e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611ebf906135e7565b8015611f0c5780601f10611ee157610100808354040283529160200191611f0c565b820191906000526020600020905b815481529060010190602001808311611eef57829003601f168201915b505050505081565b6060611f1f8261230d565b611f835760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c25565b6000611f8d6115f1565b90506000815111611fad57604051806020016040528060008152506113ac565b80611fb784612611565b6021604051602001611fcb93929190613355565b6040516020818303038152906040529392505050565b6000546001600160a01b0316331461200b5760405162461bcd60e51b8152600401610c259061349e565b601655565b6000546001600160a01b0316331461203a5760405162461bcd60e51b8152600401610c259061349e565b6019805460ff1916911515919091179055565b6001600160a01b0381166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156120ad57602002820191906000526020600020905b815481526020019060010190808311612099575b50505050509050919050565b6000546001600160a01b031633146120e35760405162461bcd60e51b8152600401610c259061349e565b8051611386906021906020840190612f89565b6060610f646121056005612388565b612611565b6000546001600160a01b031633146121345760405162461bcd60e51b8152600401610c259061349e565b601980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146121785760405162461bcd60e51b8152600401610c259061349e565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146121c45760405162461bcd60e51b8152600401610c259061349e565b6001600160a01b0381166122295760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c25565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122ae5760405162461bcd60e51b8152600401610c259061349e565b6022805460ff1916911515919091179055565b6000546001600160a01b031633146122eb5760405162461bcd60e51b8152600401610c259061349e565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ed76005836129f2565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061234f8261159a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610ed7825490565b600061239d8261230d565b6123fe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c25565b60006124098361159a565b9050806001600160a01b0316846001600160a01b031614806124445750836001600160a01b031661243984610cc5565b6001600160a01b0316145b8061247457506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661248f8261159a565b6001600160a01b0316146124f75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c25565b6001600160a01b0382166125595760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c25565b61256460008261231a565b6001600160a01b03831660009081526002602052604090206125869082612a0a565b506001600160a01b03821660009081526002602052604090206125a99082612a16565b506125b48382612a22565b6125be8282612b6c565b6125ca60058284612ba8565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060816126355750506040805180820190915260018152600360fc1b602082015290565b8160005b811561265f578061264981613622565b91506126589050600a8361356d565b9150612639565b60008167ffffffffffffffff81111561267a5761267a6136a9565b6040519080825280601f01601f1916602001820160405280156126a4576020820181803683370190505b5090505b8415612474576126b96001836135a0565b91506126c6600a8661363d565b6126d1906030613555565b60f81b8183815181106126e6576126e6613693565b60200101906001600160f81b031916908160001a905350612708600a8661356d565b94506126a8565b6001600160a01b0382166127655760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c25565b61276e8161230d565b156127bb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c25565b600c80546000838152600d60209081526040808320849055600184019094557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79092018490556001600160a01b038516815260029091522061281d9082612a16565b506128288282612b6c565b61283460058284612ba8565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006113ac8383612bbe565b600080808061288c8686612c44565b9097909650945050505050565b805161138690600e906020840190612f89565b6000612474848484612ce1565b6000806128c68385613555565b9050838110156113ac5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c25565b60008261292757506000610ed7565b60006129338385613581565b905082612940858361356d565b146113ac5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c25565b60008082116129e85760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610c25565b6113ac828461356d565b600081815260018301602052604081205415156113ac565b60006113ac8383612d4a565b60006113ac8383612e3d565b6000818152600460209081526040808320546001600160a01b03861684526003909252822054909190612a56906001612e8c565b6001600160a01b03851660009081526003602052604081208054929350909183908110612a8557612a85613693565b906000526020600020015490508060036000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612ac957612ac9613693565b60009182526020808320909101929092556001600160a01b0387168152600390915260408120805484908110612b0157612b01613693565b60009182526020808320909101929092556001600160a01b0387168152600390915260409020805480612b3657612b3661367d565b60008281526020808220830160001990810183905590920190925594815260049094526040808520859055908452909220555050565b6001600160a01b039091166000908152600360209081526040808320805460018101825590845282842081018590559383526004909152902055565b600061247484846001600160a01b038516612ee8565b81546000908210612c1c5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c25565b826000018281548110612c3157612c31613693565b9060005260206000200154905092915050565b815460009081908310612ca45760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c25565b6000846000018481548110612cbb57612cbb613693565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612d115760405162461bcd60e51b8152600401610c25919061345d565b5084612d1e6001836135a0565b81548110612d2e57612d2e613693565b9060005260206000209060020201600101549150509392505050565b60008181526001830160205260408120548015612e33576000612d6e6001836135a0565b8554909150600090612d82906001906135a0565b90506000866000018281548110612d9b57612d9b613693565b9060005260206000200154905080876000018481548110612dbe57612dbe613693565b600091825260209091200155612dd5836001613555565b60008281526001890160205260409020558654879080612df757612df761367d565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ed7565b6000915050610ed7565b6000818152600183016020526040812054612e8457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ed7565b506000610ed7565b600082821115612ede5760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610c25565b6113ac82846135a0565b600082815260018401602052604081205480612f4d5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556113ac565b8285612f5a6001846135a0565b81548110612f6a57612f6a613693565b90600052602060002090600202016001018190555060009150506113ac565b828054612f95906135e7565b90600052602060002090601f016020900481019282612fb75760008555612ffd565b82601f10612fd057805160ff1916838001178555612ffd565b82800160010185558215612ffd579182015b82811115612ffd578251825591602001919060010190612fe2565b5061300992915061300d565b5090565b5b80821115613009576000815560010161300e565b8035801515811461303257600080fd5b919050565b60006020828403121561304957600080fd5b81356113ac816136bf565b6000806040838503121561306757600080fd5b8235613072816136bf565b91506020830135613082816136bf565b809150509250929050565b6000806000606084860312156130a257600080fd5b83356130ad816136bf565b925060208401356130bd816136bf565b929592945050506040919091013590565b600080604083850312156130e157600080fd5b82356130ec816136bf565b91506130fa60208401613022565b90509250929050565b6000806040838503121561311657600080fd5b8235613121816136bf565b946020939093013593505050565b6000602080838503121561314257600080fd5b823567ffffffffffffffff8082111561315a57600080fd5b818501915085601f83011261316e57600080fd5b813581811115613180576131806136a9565b8060051b9150613191848301613524565b8181528481019084860184860187018a10156131ac57600080fd5b600095505b838610156131db57803594506131c6856136bf565b848352600195909501949186019186016131b1565b5098975050505050505050565b6000602082840312156131fa57600080fd5b6113ac82613022565b60006020828403121561321557600080fd5b81356001600160e01b0319811681146113ac57600080fd5b6000602080838503121561324057600080fd5b823567ffffffffffffffff8082111561325857600080fd5b818501915085601f83011261326c57600080fd5b81358181111561327e5761327e6136a9565b613290601f8201601f19168501613524565b915080825286848285010111156132a657600080fd5b8084840185840137600090820190930192909252509392505050565b6000602082840312156132d457600080fd5b5035919050565b600080600080608085870312156132f157600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526133258160208601602086016135b7565b601f01601f19169290920160200192915050565b6000825161334b8184602087016135b7565b9190910192915050565b6000845160206133688285838a016135b7565b85519184019161337b8184848a016135b7565b8554920191600090600181811c908083168061339857607f831692505b8583108114156133b657634e487b7160e01b85526022600452602485fd5b8080156133ca57600181146133db57613408565b60ff19851688528388019550613408565b60008b81526020902060005b858110156134005781548a8201529084019088016133e7565b505083880195505b50939b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561345157835183529284019291840191600101613435565b50909695505050505050565b6020815260006113ac602083018461330d565b606081526000613483606083018661330d565b6001600160a01b039490941660208301525060400152919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561354d5761354d6136a9565b604052919050565b6000821982111561356857613568613651565b500190565b60008261357c5761357c613667565b500490565b600081600019048311821515161561359b5761359b613651565b500290565b6000828210156135b2576135b2613651565b500390565b60005b838110156135d25781810151838201526020016135ba565b838111156135e1576000848401525b50505050565b600181811c908216806135fb57607f821691505b6020821081141561361c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561363657613636613651565b5060010190565b60008261364c5761364c613667565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461140957600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212209c3cb38fa63da5009ed6cb55306a31bf4e000136c2f67d685d156a5f9cd1f5a064736f6c63430008070033
Deployed Bytecode Sourcemap
38106:8801:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:150;;;;;;;;;;-1:-1:-1;2292:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;;2401:33:0;2377:4;2401:33;;;:20;:33;;;;;;;;;2292:150;;;;8352:14:1;;8345:22;8327:41;;8315:2;8300:18;2292:150:0;;;;;;;;41728:85;;;;;;;;;;-1:-1:-1;41728:85:0;;;;;:::i;:::-;;:::i;:::-;;27601:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31246:221::-;;;;;;;;;;-1:-1:-1;31246:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7282:32:1;;;7264:51;;7252:2;7237:18;31246:221:0;7118:203:1;30776:404:0;;;;;;;;;;-1:-1:-1;30776:404:0;;;;;:::i;:::-;;:::i;46516:387::-;;;;;;;;;;;;;:::i;:::-;;;17659:25:1;;;17647:2;17632:18;46516:387:0;17513:177:1;40907:92:0;;;;;;;;;;-1:-1:-1;40907:92:0;;;;;:::i;:::-;;:::i;42252:102::-;;;;;;;;;;-1:-1:-1;42252:102:0;;;;;:::i;:::-;;:::i;30254:211::-;;;;;;;;;;;;;:::i;32136:313::-;;;;;;;;;;-1:-1:-1;32136:313:0;;;;;:::i;:::-;;:::i;42476:134::-;;;;;;;;;;-1:-1:-1;42476:134:0;;;;;:::i;:::-;;:::i;44922:1188::-;;;;;;;;;;-1:-1:-1;44922:1188:0;;;;;:::i;:::-;;:::i;38716:86::-;;;;;;;;;;-1:-1:-1;38716:86:0;;;;-1:-1:-1;;;;;38716:86:0;;;30016:162;;;;;;;;;;-1:-1:-1;30016:162:0;;;;;:::i;:::-;;:::i;38809:86::-;;;;;;;;;;-1:-1:-1;38809:86:0;;;;-1:-1:-1;;;;;38809:86:0;;;39322:47;;;;;;;;;;;;;;;;40385:107;;;;;;;;;;;;;:::i;32520:258::-;;;;;;;;;;-1:-1:-1;32520:258:0;;;;;:::i;:::-;;:::i;46118:390::-;;;;;;;;;;-1:-1:-1;46118:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;41918:100::-;;;;;;;;;;-1:-1:-1;41918:100:0;;;;;:::i;:::-;;:::i;38618:91::-;;;;;;;;;;-1:-1:-1;38618:91:0;;;;-1:-1:-1;;;;;38618:91:0;;;30542:172;;;;;;;;;;-1:-1:-1;30542:172:0;;;;;:::i;:::-;;:::i;39032:23::-;;;;;;;;;;;;;;;;39268:47;;;;;;;;;;;;;;;;41007:97;;;;;;;;;;-1:-1:-1;41007:97:0;;;;;:::i;:::-;;:::i;41821:89::-;;;;;;;;;;-1:-1:-1;41821:89:0;;;;;:::i;:::-;;:::i;38524:87::-;;;;;;;;;;-1:-1:-1;38524:87:0;;;;-1:-1:-1;;;;;38524:87:0;;;39002:23;;;;;;;;;;;;;;;;27357:177;;;;;;;;;;-1:-1:-1;27357:177:0;;;;;:::i;:::-;;:::i;41445:83::-;;;;;;;;;;-1:-1:-1;41445:83:0;;;;;:::i;:::-;;:::i;28976:97::-;;;;;;;;;;;;;:::i;27074:221::-;;;;;;;;;;-1:-1:-1;27074:221:0;;;;;:::i;:::-;;:::i;40614:285::-;;;;;;;;;;-1:-1:-1;40614:285:0;;;;;:::i;:::-;;:::i;37699:148::-;;;;;;;;;;;;;:::i;39376:47::-;;;;;;;;;;;;;;;;37476:87;;;;;;;;;;-1:-1:-1;37522:7:0;37549:6;-1:-1:-1;;;;;37549:6:0;37476:87;;42750:2164;;;;;;:::i;:::-;;:::i;38937:23::-;;;;;;;;;;;;;;;;27770:104;;;;;;;;;;;;;:::i;39432:28::-;;;;;;;;;;;;;;;;31539:295;;;;;;;;;;-1:-1:-1;31539:295:0;;;;;:::i;:::-;;:::i;38428:89::-;;;;;;;;;;-1:-1:-1;38428:89:0;;;;-1:-1:-1;;;;;38428:89:0;;;39590:28;;;;;;;;;;-1:-1:-1;39590:28:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;39158:47::-;;;;;;;;;;;;;;;;42134:110;;;;;;;;;;-1:-1:-1;42134:110:0;;;;;:::i;:::-;;:::i;37192:21::-;;;;;;;;;;-1:-1:-1;37192:21:0;;;;-1:-1:-1;;;;;37192:21:0;;;41536:83;;;;;;;;;;-1:-1:-1;41536:83:0;;;;;:::i;:::-;;:::i;39508:37::-;;;;;;;;;;;;;:::i;39895:482::-;;;;;;;;;;-1:-1:-1;39895:482:0;;;;;:::i;:::-;;:::i;41627:93::-;;;;;;;;;;-1:-1:-1;41627:93:0;;;;;:::i;:::-;;:::i;39552:28::-;;;;;;;;;;-1:-1:-1;39552:28:0;;;;;;;;39214:47;;;;;;;;;;;;;;;;39112:37;;;;;;;;;;-1:-1:-1;39112:37:0;;;;;;;;;;;41209:113;;;;;;;;;;-1:-1:-1;41209:113:0;;;;;:::i;:::-;;:::i;38904:26::-;;;;;;;;;;;;;;;;42618:124;;;;;;;;;;-1:-1:-1;42618:124:0;;;;;:::i;:::-;;:::i;40500:106::-;;;;;;;;;;-1:-1:-1;40500:106:0;;;;;:::i;:::-;;:::i;29081:131::-;;;;;;;;;;;;;:::i;41330:107::-;;;;;;;;;;-1:-1:-1;41330:107:0;;;;;:::i;:::-;;:::i;39469:32::-;;;;;;;;;;;;;;;;31905:164;;;;;;;;;;-1:-1:-1;31905:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31905:164;42026:100;;;;;;;;;;-1:-1:-1;42026:100:0;;;;;:::i;:::-;;:::i;38967:28::-;;;;;;;;;;;;;;;;37855:244;;;;;;;;;;-1:-1:-1;37855:244:0;;;;;:::i;:::-;;:::i;41112:89::-;;;;;;;;;;-1:-1:-1;41112:89:0;;;;;:::i;:::-;;:::i;39064:41::-;;;;;;;;;;-1:-1:-1;39064:41:0;;;;;;;;42362:106;;;;;;;;;;-1:-1:-1;42362:106:0;;;;;:::i;:::-;;:::i;41728:85::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;;;;;;;;;41789:7:::1;:16:::0;41728:85::o;27601:100::-;27655:13;27688:5;27681:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27601:100;:::o;31246:221::-;31322:7;31350:16;31358:7;31350;:16::i;:::-;31342:73;;;;-1:-1:-1;;;31342:73:0;;15295:2:1;31342:73:0;;;15277:21:1;15334:2;15314:18;;;15307:30;15373:34;15353:18;;;15346:62;-1:-1:-1;;;15424:18:1;;;15417:42;15476:19;;31342:73:0;15093:408:1;31342:73:0;-1:-1:-1;31435:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31435:24:0;;31246:221::o;30776:404::-;30857:13;30873:23;30888:7;30873:14;:23::i;:::-;30857:39;;30921:5;-1:-1:-1;;;;;30915:11:0;:2;-1:-1:-1;;;;;30915:11:0;;;30907:57;;;;-1:-1:-1;;;30907:57:0;;16895:2:1;30907:57:0;;;16877:21:1;16934:2;16914:18;;;16907:30;16973:34;16953:18;;;16946:62;-1:-1:-1;;;17024:18:1;;;17017:31;17065:19;;30907:57:0;16693:397:1;30907:57:0;191:10;-1:-1:-1;;;;;30985:21:0;;;;:69;;-1:-1:-1;31010:44:0;31034:5;191:10;31905:164;:::i;31010:44::-;30977:161;;;;-1:-1:-1;;;30977:161:0;;13293:2:1;30977:161:0;;;13275:21:1;13332:2;13312:18;;;13305:30;13371:34;13351:18;;;13344:62;13442:26;13422:18;;;13415:54;13486:19;;30977:161:0;13091:420:1;30977:161:0;31151:21;31160:2;31164:7;31151:8;:21::i;:::-;30846:334;30776:404;;:::o;46516:387::-;46570:7;46591:13;46621:4;46608:9;;:17;;:262;;46680:4;46668:9;;:16;:37;;;;;46701:4;46688:9;;:17;;46668:37;:202;;46760:4;46748:9;;:16;:37;;;;;46781:4;46768:9;;:17;;46748:37;:122;;46840:4;46828:9;;:16;:42;;46860:10;;46608:262;;46828:42;46847:10;;46608:262;;46748:122;46788:10;;46608:262;;46668:202;46708:10;;46608:262;;;46628:10;;46608:262;46591:279;46516:387;-1:-1:-1;;46516:387:0:o;40907:92::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40973:9:::1;:18:::0;40907:92::o;42252:102::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42327:10:::1;:19:::0;;-1:-1:-1;;;;;;42327:19:0::1;-1:-1:-1::0;;;;;42327:19:0;;;::::1;::::0;;;::::1;::::0;;42252:102::o;30254:211::-;30315:7;30436:21;:12;:19;:21::i;:::-;30429:28;;30254:211;:::o;32136:313::-;32297:41;191:10;32316:12;32330:7;32297:18;:41::i;:::-;32289:103;;;;-1:-1:-1;;;32289:103:0;;;;;;;:::i;:::-;32413:28;32423:4;32429:2;32433:7;32413:9;:28::i;42476:134::-;42550:7;42576:17;42594:7;42576:26;;;;;;:::i;:::-;;;;;;;;;;;;;;42569:33;;42476:134;;;:::o;44922:1188::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;45028:9:::1;;45011:13;:11;:13::i;:::-;:26;;45003:54;;;::::0;-1:-1:-1;;;45003:54:0;;12181:2:1;45003:54:0::1;::::0;::::1;12163:21:1::0;12220:2;12200:18;;;12193:30;-1:-1:-1;;;12239:18:1;;;12232:45;12294:18;;45003:54:0::1;11979:339:1::0;45003:54:0::1;45074:9;45070:1033;45093:10;:17;45089:1;:21;45070:1033;;;45131:26;45160:126;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;45160:126:0::1;;::::0;::::1;;;;45232:10;45243:1;45232:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;45160:126:0::1;::::0;;45269:1:::1;45160:126:::0;;::::1;::::0;;;45303:10:::1;:27:::0;;::::1;::::0;::::1;::::0;;;;;;;;45131:155;;-1:-1:-1;45131:155:0;;45303:27:::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;45303:27:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;45303:27:0::1;-1:-1:-1::0;;;;;45303:27:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;45372:10:::1;:17:::0;-1:-1:-1;;45372:21:0::1;::::0;::::1;:::i;:::-;45347:46;;45440:14;45408:10;45419:14;45408:26;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:46;;;;45469:21;45493:9;:7;:9::i;:::-;45469:33;;45517:26;45570:7;45579:25;:14;:23;:25::i;:::-;45607:13;45553:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45517:105;;45675:12;45637:10;45648:14;45637:26;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;:50;;;;;;;;;;;;:::i;:::-;;45736:14;45702:17;45720:12;45702:31;;;;;;:::i;:::-;;;;;;;;;;;;;:48;;;;45765:36;45771:10;45782:1;45771:13;;;;;;;;:::i;:::-;;;;;;;45786:14;45765:5;:36::i;:::-;45818:20;:35;45839:10;45850:1;45839:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;45818:35:0::1;-1:-1:-1::0;;;;;45818:35:0::1;;;;;;;;;;;;;:37;;;;;;;;;:::i;:::-;;;;;;45870:14;45887:15;:30;45903:10;45914:1;45903:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;45887:30:0::1;-1:-1:-1::0;;;;;45887:30:0::1;;;;;;;;;;;;:37;;;;45870:54;;45939:15;:30;45955:10;45966:1;45955:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;45939:30:0::1;::::0;;;;::::1;::::0;;;;;;-1:-1:-1;45939:30:0;;;:51;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;;46026:13;;46059:6;;46005:20:::1;::::0;46026:10;;46037:1;;46026:13;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46005:35:0::1;-1:-1:-1::0;;;;;46005:35:0::1;;;;;;;;;;;;:51;46041:14;46005:51;;;;;;;;;;;:60;;;;46080:9;;:11;;;;;;;;;:::i;:::-;;;;;;45116:987;;;;;45112:3;;;;;:::i;:::-;;;;45070:1033;;;;44922:1188:::0;:::o;30016:162::-;-1:-1:-1;;;;;30140:20:0;;30113:7;30140:20;;;:13;:20;;;;;:30;;30164:5;30140:23;:30::i;:::-;30133:37;30016:162;-1:-1:-1;;;30016:162:0:o;40385:107::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40433:51:::1;::::0;40441:10:::1;::::0;40462:21:::1;40433:51:::0;::::1;;;::::0;::::1;::::0;;;40462:21;40441:10;40433:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40385:107::o:0;32520:258::-;32632:41;191:10;32651:12;95:115;32632:41;32624:103;;;;-1:-1:-1;;;32624:103:0;;;;;;;:::i;:::-;32738:32;32752:4;32758:2;32762:7;32738:13;:32::i;46118:390::-;46205:16;46239:23;46265:17;46275:6;46265:9;:17::i;:::-;46239:43;;46293:25;46335:15;46321:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46321:30:0;;46293:58;;46367:9;46362:113;46382:15;46378:1;:19;46362:113;;;46433:30;46453:6;46461:1;46433:19;:30::i;:::-;46419:8;46428:1;46419:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;46399:3;;;;:::i;:::-;;;;46362:113;;;-1:-1:-1;46492:8:0;46118:390;-1:-1:-1;;;46118:390:0:o;41918:100::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41992:9:::1;:18:::0;;-1:-1:-1;;;;;;41992:18:0::1;-1:-1:-1::0;;;;;41992:18:0;;;::::1;::::0;;;::::1;::::0;;41918:100::o;30542:172::-;30617:7;;30659:22;:12;30675:5;30659:15;:22::i;41007:97::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41077:19:::1;41089:6;41077:11;:19::i;41821:89::-:0;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41884:9:::1;:18:::0;41821:89::o;27357:177::-;27429:7;27456:70;27473:7;27456:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;41445:83::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41505:6:::1;:15:::0;41445:83::o;28976:97::-;29024:13;29057:8;29050:15;;;;;:::i;27074:221::-;27146:7;-1:-1:-1;;;;;27174:19:0;;27166:74;;;;-1:-1:-1;;;27166:74:0;;13718:2:1;27166:74:0;;;13700:21:1;13757:2;13737:18;;;13730:30;13796:34;13776:18;;;13769:62;-1:-1:-1;;;13847:18:1;;;13840:40;13897:19;;27166:74:0;13516:406:1;27166:74:0;-1:-1:-1;;;;;27258:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;40614:285::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40778:10:::1;:20:::0;;;;40809:10:::1;:20:::0;;;;40840:10:::1;:20:::0;40871:10:::1;:20:::0;40614:285::o;37699:148::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;37806:1:::1;37790:6:::0;;37769:40:::1;::::0;-1:-1:-1;;;;;37790:6:0;;::::1;::::0;37769:40:::1;::::0;37806:1;;37769:40:::1;37837:1;37820:19:::0;;-1:-1:-1;;;;;;37820:19:0::1;::::0;;37699:148::o;42750:2164::-;42819:9;;;;42818:10;42810:35;;;;-1:-1:-1;;;42810:35:0;;10009:2:1;42810:35:0;;;9991:21:1;10048:2;10028:18;;;10021:30;-1:-1:-1;;;10067:18:1;;;10060:42;10119:18;;42810:35:0;9807:336:1;42810:35:0;42894:9;;42864:26;42882:7;42864:13;:11;:13::i;:::-;:17;;:26::i;:::-;:39;;42856:67;;;;-1:-1:-1;;;42856:67:0;;12181:2:1;42856:67:0;;;12163:21:1;12220:2;12200:18;;;12193:30;-1:-1:-1;;;12239:18:1;;;12232:45;12294:18;;42856:67:0;11979:339:1;42856:67:0;42939:9;;42952:4;42939:17;42936:67;;;42973:18;42986:4;42973:12;:18::i;:::-;43053;;43015:22;;43053:18;;;;;43050:348;;;43108:55;43136:12;;:26;;43155:7;43136:26;;;43151:1;43136:26;43108:23;:21;:23::i;:::-;:27;;:55::i;:::-;43095:9;:68;43087:77;;;;;;43196:55;43224:12;;:26;;43243:7;43224:26;;43196:55;43179:72;;43050:348;;;43303:41;43317:12;;:26;;43336:7;43317:26;;;43332:1;43317:26;43303:9;;;:13;:41::i;:::-;43290:9;:54;43282:63;;;;;;-1:-1:-1;43377:9:0;;43050:348;43415:21;;;;43412:470;;;43452:9;;:34;;-1:-1:-1;;;;;43452:9:0;;;;:34;;;;;43471:14;;43452:9;:34;:9;:34;43471:14;43452:9;:34;;;;;;;;;;;;;;;;;;;;;43412:470;;;43517:12;;43558:9;;-1:-1:-1;;;;;43517:12:0;;;;:61;;43539:38;;43573:3;;43539:29;;:14;;:18;:29::i;:::-;:33;;:38::i;:::-;43517:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43593:10:0;;43632:7;;-1:-1:-1;;;;;43593:10:0;;;;:57;;43613:36;;43645:3;;43613:27;;:14;;:18;:27::i;:36::-;43593:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43665:14:0;;43708:11;;-1:-1:-1;;;;;43665:14:0;;;;:65;;43689:40;;43725:3;;43689:31;;:14;;:18;:31::i;:40::-;43665:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43745:9:0;;43783:6;;-1:-1:-1;;;;;43745:9:0;;;;:55;;43764:35;;43795:3;;43764:26;;:14;;:18;:26::i;:35::-;43745:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43815:9:0;;43853:6;;-1:-1:-1;;;;;43815:9:0;;;;:55;;43834:35;;43865:3;;43834:26;;:14;;:18;:26::i;:35::-;43815:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43412:470;43906:9;43902:1005;43925:7;43921:1;:11;43902:1005;;;43982:123;;;;;;;;;;;;;;;-1:-1:-1;;;43982:123:0;;;;;;44054:10;43982:123;;;;;;;;43953:26;43982:123;;;;;;44122:10;:27;;;;;;;;;;;;;;43982:123;;;;44122:27;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;44122:27:0;;;;;;;;;;-1:-1:-1;;;;;;44122:27:0;-1:-1:-1;;;;;44122:27:0;;;;;;;;;;;;;;;;;;;;44191:10;:17;-1:-1:-1;;44191:21:0;;;:::i;:::-;44166:46;;44259:14;44227:10;44238:14;44227:26;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:46;;;;44288:21;44312:9;:7;:9::i;:::-;44288:33;;44336:26;44389:7;44398:25;:14;:23;:25::i;:::-;44426:13;44372:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44336:105;;44494:12;44456:10;44467:14;44456:26;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;:50;;;;;;;;;;;;:::i;:::-;;44555:14;44521:17;44539:12;44521:31;;;;;;:::i;:::-;;;;;;;;;;;;;;:48;44584:33;44590:10;44602:14;44584:5;:33::i;:::-;44655:10;44634:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;;44716:10:0;44683:14;44700:27;;;:15;:27;;;;;;;;:34;;44749:48;;;;;;;;;;;;;;;;44812:32;;;:20;:32;;;;;:48;;;;;;;;:57;;;44884:9;:11;;;;;;:::i;:::-;;;;;;43938:969;;;;;43934:3;;;;;:::i;:::-;;;;43902:1005;;27770:104;27826:13;27859:7;27852:14;;;;;:::i;31539:295::-;-1:-1:-1;;;;;31642:24:0;;191:10;31642:24;;31634:62;;;;-1:-1:-1;;;31634:62:0;;11468:2:1;31634:62:0;;;11450:21:1;11507:2;11487:18;;;11480:30;11546:27;11526:18;;;11519:55;11591:18;;31634:62:0;11266:349:1;31634:62:0;191:10;31709:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31709:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31709:53:0;;;;;;;;;;31778:48;;8327:41:1;;;31709:42:0;;191:10;31778:48;;8300:18:1;31778:48:0;;;;;;;31539:295;;:::o;39590:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;39590:28:0;;;;;;;;;;;-1:-1:-1;;;;;39590:28:0;;;-1:-1:-1;39590:28:0;:::o;42134:110::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42213:14:::1;:23:::0;;-1:-1:-1;;;;;;42213:23:0::1;-1:-1:-1::0;;;;;42213:23:0;;;::::1;::::0;;;::::1;::::0;;42134:110::o;41536:83::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41596:6:::1;:15:::0;41536:83::o;39508:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39895:482::-;40013:13;40062:16;40070:7;40062;:16::i;:::-;40044:105;;;;-1:-1:-1;;;40044:105:0;;16479:2:1;40044:105:0;;;16461:21:1;16518:2;16498:18;;;16491:30;16557:34;16537:18;;;16530:62;-1:-1:-1;;;16608:18:1;;;16601:45;16663:19;;40044:105:0;16277:411:1;40044:105:0;40170:28;40201:9;:7;:9::i;:::-;40170:40;;40259:1;40234:14;40228:28;:32;:141;;;;;;;;;;;;;;;;;40300:14;40316:18;:7;:16;:18::i;:::-;40336:13;40283:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40221:148;39895:482;-1:-1:-1;;;39895:482:0:o;41627:93::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41692:11:::1;:20:::0;41627:93::o;41209:113::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41284:21:::1;:30:::0;;-1:-1:-1;;41284:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41209:113::o;42618:124::-;-1:-1:-1;;;;;42715:19:0;;;;;;:11;:19;;;;;;;;;42708:26;;;;;;;;;;;;;;;;;42679:16;;42708:26;;;42715:19;42708:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42618:124;;;:::o;40500:106::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40576:22;;::::1;::::0;:13:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;29081:131::-:0;29139:13;29172:32;:21;:12;:19;:21::i;:::-;:30;:32::i;41330:107::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41402:18:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;41402:27:0;;::::1;::::0;;;::::1;::::0;;41330:107::o;42026:100::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42100:9:::1;:18:::0;;-1:-1:-1;;;;;;42100:18:0::1;-1:-1:-1::0;;;;;42100:18:0;;;::::1;::::0;;;::::1;::::0;;42026:100::o;37855:244::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37944:22:0;::::1;37936:73;;;::::0;-1:-1:-1;;;37936:73:0;;9602:2:1;37936:73:0::1;::::0;::::1;9584:21:1::0;9641:2;9621:18;;;9614:30;9680:34;9660:18;;;9653:62;-1:-1:-1;;;9731:18:1;;;9724:36;9777:19;;37936:73:0::1;9400:402:1::0;37936:73:0::1;38046:6;::::0;;38025:38:::1;::::0;-1:-1:-1;;;;;38025:38:0;;::::1;::::0;38046:6;::::1;::::0;38025:38:::1;::::0;::::1;38074:6;:17:::0;;-1:-1:-1;;;;;;38074:17:0::1;-1:-1:-1::0;;;;;38074:17:0;;;::::1;::::0;;;::::1;::::0;;37855:244::o;41112:89::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41175:9:::1;:18:::0;;-1:-1:-1;;41175:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41112:89::o;42362:106::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42439:12:::1;:21:::0;;-1:-1:-1;;;;;;42439:21:0::1;-1:-1:-1::0;;;;;42439:21:0;;;::::1;::::0;;;::::1;::::0;;42362:106::o;32924:127::-;32989:4;33013:30;:12;33035:7;33013:21;:30::i;36866:183::-;36932:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36932:29:0;-1:-1:-1;;;;;36932:29:0;;;;;;;;:24;;36986:23;36932:24;36986:14;:23::i;:::-;-1:-1:-1;;;;;36977:46:0;;;;;;;;;;;36866:183;;:::o;21082:123::-;21151:7;21178:19;21186:3;17744:19;;17661:110;33061:355;33154:4;33179:16;33187:7;33179;:16::i;:::-;33171:73;;;;-1:-1:-1;;;33171:73:0;;12525:2:1;33171:73:0;;;12507:21:1;12564:2;12544:18;;;12537:30;12603:34;12583:18;;;12576:62;-1:-1:-1;;;12654:18:1;;;12647:42;12706:19;;33171:73:0;12323:408:1;33171:73:0;33255:13;33271:23;33286:7;33271:14;:23::i;:::-;33255:39;;33324:5;-1:-1:-1;;;;;33313:16:0;:7;-1:-1:-1;;;;;33313:16:0;;:51;;;;33357:7;-1:-1:-1;;;;;33333:31:0;:20;33345:7;33333:11;:20::i;:::-;-1:-1:-1;;;;;33333:31:0;;33313:51;:94;;;-1:-1:-1;;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33368:39;33305:103;33061:355;-1:-1:-1;;;;33061:355:0:o;34672:684::-;34797:4;-1:-1:-1;;;;;34770:31:0;:23;34785:7;34770:14;:23::i;:::-;-1:-1:-1;;;;;34770:31:0;;34762:85;;;;-1:-1:-1;;;34762:85:0;;16069:2:1;34762:85:0;;;16051:21:1;16108:2;16088:18;;;16081:30;16147:34;16127:18;;;16120:62;-1:-1:-1;;;16198:18:1;;;16191:39;16247:19;;34762:85:0;15867:405:1;34762:85:0;-1:-1:-1;;;;;34884:16:0;;34876:65;;;;-1:-1:-1;;;34876:65:0;;11063:2:1;34876:65:0;;;11045:21:1;11102:2;11082:18;;;11075:30;11141:34;11121:18;;;11114:62;-1:-1:-1;;;11192:18:1;;;11185:34;11236:19;;34876:65:0;10861:400:1;34876:65:0;35058:29;35075:1;35079:7;35058:8;:29::i;:::-;-1:-1:-1;;;;;35100:19:0;;;;;;:13;:19;;;;;:35;;35127:7;35100:26;:35::i;:::-;-1:-1:-1;;;;;;35146:17:0;;;;;;:13;:17;;;;;:30;;35168:7;35146:21;:30::i;:::-;;35189;35205:4;35211:7;35189:15;:30::i;:::-;35230:23;35241:2;35245:7;35230:10;:23::i;:::-;35274:29;:12;35291:7;35300:2;35274:16;:29::i;:::-;;35340:7;35336:2;-1:-1:-1;;;;;35321:27:0;35330:4;-1:-1:-1;;;;;35321:27:0;;;;;;;;;;;34672:684;;;:::o;22669:723::-;22725:13;22946:10;22942:53;;-1:-1:-1;;22973:10:0;;;;;;;;;;;;-1:-1:-1;;;22973:10:0;;;;;22669:723::o;22942:53::-;23020:5;23005:12;23061:78;23068:9;;23061:78;;23094:8;;;;:::i;:::-;;-1:-1:-1;23117:10:0;;-1:-1:-1;23125:2:0;23117:10;;:::i;:::-;;;23061:78;;;23149:19;23181:6;23171:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23171:17:0;;23149:39;;23199:154;23206:10;;23199:154;;23233:11;23243:1;23233:11;;:::i;:::-;;-1:-1:-1;23302:10:0;23310:2;23302:5;:10;:::i;:::-;23289:24;;:2;:24;:::i;:::-;23276:39;;23259:6;23266;23259:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;23259:56:0;;;;;;;;-1:-1:-1;23330:11:0;23339:2;23330:11;;:::i;:::-;;;23199:154;;33534:529;-1:-1:-1;;;;;33614:16:0;;33606:61;;;;-1:-1:-1;;;33606:61:0;;14532:2:1;33606:61:0;;;14514:21:1;;;14551:18;;;14544:30;14610:34;14590:18;;;14583:62;14662:18;;33606:61:0;14330:356:1;33606:61:0;33687:16;33695:7;33687;:16::i;:::-;33686:17;33678:58;;;;-1:-1:-1;;;33678:58:0;;10350:2:1;33678:58:0;;;10332:21:1;10389:2;10369:18;;;10362:30;10428;10408:18;;;10401:58;10476:18;;33678:58:0;10148:352:1;33678:58:0;33775:9;:16;;33749:23;;;;:14;:23;;;;;;;;:42;;;33802:23;;;;;;;;;;;;;-1:-1:-1;;;;;33896:17:0;;;;:13;:17;;;;:30;;33749:23;33896:21;:30::i;:::-;;33939:23;33950:2;33954:7;33939:10;:23::i;:::-;33975:29;:12;33992:7;34001:2;33975:16;:29::i;:::-;-1:-1:-1;34022:33:0;;34047:7;;-1:-1:-1;;;;;34022:33:0;;;34039:1;;34022:33;;34039:1;;34022:33;33534:529;;:::o;14165:137::-;14236:7;14271:22;14275:3;14287:5;14271:3;:22::i;21215:236::-;21295:7;;;;21355:22;21359:3;21371:5;21355:3;:22::i;:::-;21324:53;;;;-1:-1:-1;21215:236:0;-1:-1:-1;;;;;21215:236:0:o;35589:100::-;35662:19;;;;:8;;:19;;;;;:::i;22223:213::-;22330:7;22381:44;22386:3;22406;22412:12;22381:4;:44::i;3590:179::-;3648:7;;3680:5;3684:1;3680;:5;:::i;:::-;3668:17;;3709:1;3704;:6;;3696:46;;;;-1:-1:-1;;;3696:46:0;;10707:2:1;3696:46:0;;;10689:21:1;10746:2;10726:18;;;10719:30;10785:29;10765:18;;;10758:57;10832:18;;3696:46:0;10505:351:1;3943:220:0;4001:7;4025:6;4021:20;;-1:-1:-1;4040:1:0;4033:8;;4021:20;4052:9;4064:5;4068:1;4064;:5;:::i;:::-;4052:17;-1:-1:-1;4097:1:0;4088:5;4092:1;4052:17;4088:5;:::i;:::-;:10;4080:56;;;;-1:-1:-1;;;4080:56:0;;14893:2:1;4080:56:0;;;14875:21:1;14932:2;14912:18;;;14905:30;14971:34;14951:18;;;14944:62;-1:-1:-1;;;15022:18:1;;;15015:31;15063:19;;4080:56:0;14691:397:1;4171:153:0;4229:7;4261:1;4257;:5;4249:44;;;;-1:-1:-1;;;4249:44:0;;12938:2:1;4249:44:0;;;12920:21:1;12977:2;12957:18;;;12950:30;13016:28;12996:18;;;12989:56;13062:18;;4249:44:0;12736:350:1;4249:44:0;4311:5;4315:1;4311;:5;:::i;20843:151::-;20927:4;17536:17;;;:12;;;:17;;;;;;:22;;20951:35;17441:125;13588:137;13658:4;13682:35;13690:3;13710:5;13682:7;:35::i;13281:131::-;13348:4;13372:32;13377:3;13397:5;13372:4;:32::i;29435:499::-;29513:18;29534:26;;;:16;:26;;;;;;;;;-1:-1:-1;;;;;29596:18:0;;;;:11;:18;;;;;:25;29534:26;;29513:18;29596:32;;29626:1;29596:29;:32::i;:::-;-1:-1:-1;;;;;29659:18:0;;29639:17;29659:18;;;:11;:18;;;;;:34;;29571:57;;-1:-1:-1;29639:17:0;;29571:57;;29659:34;;;;;;:::i;:::-;;;;;;;;;29639:54;;29739:9;29706:11;:18;29718:5;-1:-1:-1;;;;;29706:18:0;-1:-1:-1;;;;;29706:18:0;;;;;;;;;;;;29725:10;29706:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:42;;;;-1:-1:-1;;;;;29759:18:0;;;;:11;:18;;;;;;:34;;29778:14;;29759:34;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;-1:-1:-1;;;;;29810:18:0;;;;:11;:18;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;29810:24:0;;;;;;;;;;;;29845:26;;;:16;:26;;;;;;;:30;;;29886:27;;;;;;:40;-1:-1:-1;;29435:499:0:o;29220:207::-;-1:-1:-1;;;;;29308:16:0;;;29291:14;29308:16;;;:11;:16;;;;;;;;:23;;29342:31;;;;;;;;;;;;;;;;29384:26;;;:16;:26;;;;;:35;29220:207::o;20266:185::-;20355:4;20379:64;20384:3;20404;-1:-1:-1;;;;;20418:23:0;;20379:4;:64::i;10877:204::-;10972:18;;10944:7;;10972:26;-1:-1:-1;10964:73:0;;;;-1:-1:-1;;;10964:73:0;;9199:2:1;10964:73:0;;;9181:21:1;9238:2;9218:18;;;9211:30;9277:34;9257:18;;;9250:62;-1:-1:-1;;;9328:18:1;;;9321:32;9370:19;;10964:73:0;8997:398:1;10964:73:0;11055:3;:11;;11067:5;11055:18;;;;;;;;:::i;:::-;;;;;;;;;11048:25;;10877:204;;;;:::o;18126:279::-;18230:19;;18193:7;;;;18230:27;-1:-1:-1;18222:74:0;;;;-1:-1:-1;;;18222:74:0;;14129:2:1;18222:74:0;;;14111:21:1;14168:2;14148:18;;;14141:30;14207:34;14187:18;;;14180:62;-1:-1:-1;;;14258:18:1;;;14251:32;14300:19;;18222:74:0;13927:398:1;18222:74:0;18309:22;18334:3;:12;;18347:5;18334:19;;;;;;;;:::i;:::-;;;;;;;;;;;18309:44;;18372:5;:10;;;18384:5;:12;;;18364:33;;;;;18126:279;;;;;:::o;19623:319::-;19717:7;19756:17;;;:12;;;:17;;;;;;19807:12;19792:13;19784:36;;;;-1:-1:-1;;;19784:36:0;;;;;;;;:::i;:::-;-1:-1:-1;19874:3:0;19887:12;19898:1;19887:8;:12;:::i;:::-;19874:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;19867:40;;;19623:319;;;;;:::o;9587:1026::-;9653:4;9792:19;;;:12;;;:19;;;;;;9828:15;;9824:782;;9900:21;9924:14;9937:1;9924:10;:14;:::i;:::-;9973:18;;9900:38;;-1:-1:-1;9953:17:0;;9973:22;;9994:1;;9973:22;:::i;:::-;9953:42;;10012:17;10032:3;:11;;10044:9;10032:22;;;;;;;;:::i;:::-;;;;;;;;;10012:42;;10178:9;10149:3;:11;;10161:13;10149:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;10281:17;:13;10297:1;10281:17;:::i;:::-;10255:23;;;;:12;;;:23;;;;;:43;10407:17;;10255:3;;10407:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10502:3;:12;;:19;10515:5;10502:19;;;;;;;;;;;10495:26;;;10545:4;10538:11;;;;;;;;9824:782;10589:5;10582:12;;;;;9165:414;9228:4;17536:17;;;:12;;;:17;;;;;;9245:327;;-1:-1:-1;9288:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;9471:18;;9449:19;;;:12;;;:19;;;;;;:40;;;;9504:11;;9245:327;-1:-1:-1;9555:5:0;9548:12;;3777:158;3835:7;3868:1;3863;:6;;3855:49;;;;-1:-1:-1;;;3855:49:0;;11822:2:1;3855:49:0;;;11804:21:1;11861:2;11841:18;;;11834:30;11900:32;11880:18;;;11873:60;11950:18;;3855:49:0;11620:354:1;3855:49:0;3922:5;3926:1;3922;:5;:::i;14941:692::-;15017:4;15152:17;;;:12;;;:17;;;;;;15186:13;15182:444;;-1:-1:-1;;15271:38:0;;;;;;;;;;;;;;;;;;15253:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;15468:19;;15448:17;;;:12;;;:17;;;;;;;:39;15502:11;;15182:444;15582:5;15546:3;15559:12;15570:1;15559:8;:12;:::i;:::-;15546:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;15609:5;15602:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:160:1;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:1032::-;2269:6;2300:2;2343;2331:9;2322:7;2318:23;2314:32;2311:52;;;2359:1;2356;2349:12;2311:52;2399:9;2386:23;2428:18;2469:2;2461:6;2458:14;2455:34;;;2485:1;2482;2475:12;2455:34;2523:6;2512:9;2508:22;2498:32;;2568:7;2561:4;2557:2;2553:13;2549:27;2539:55;;2590:1;2587;2580:12;2539:55;2626:2;2613:16;2648:2;2644;2641:10;2638:36;;;2654:18;;:::i;:::-;2700:2;2697:1;2693:10;2683:20;;2723:28;2747:2;2743;2739:11;2723:28;:::i;:::-;2785:15;;;2816:12;;;;2848:11;;;2878;;;2874:20;;2871:33;-1:-1:-1;2868:53:1;;;2917:1;2914;2907:12;2868:53;2939:1;2930:10;;2949:238;2963:2;2960:1;2957:9;2949:238;;;3034:3;3021:17;3008:30;;3051:31;3076:5;3051:31;:::i;:::-;3095:18;;;2981:1;2974:9;;;;;3133:12;;;;3165;;2949:238;;;-1:-1:-1;3206:5:1;2185:1032;-1:-1:-1;;;;;;;;2185:1032:1:o;3222:180::-;3278:6;3331:2;3319:9;3310:7;3306:23;3302:32;3299:52;;;3347:1;3344;3337:12;3299:52;3370:26;3386:9;3370:26;:::i;3407:286::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:52;;;3534:1;3531;3524:12;3486:52;3560:23;;-1:-1:-1;;;;;;3612:32:1;;3602:43;;3592:71;;3659:1;3656;3649:12;3698:764;3767:6;3798:2;3841;3829:9;3820:7;3816:23;3812:32;3809:52;;;3857:1;3854;3847:12;3809:52;3897:9;3884:23;3926:18;3967:2;3959:6;3956:14;3953:34;;;3983:1;3980;3973:12;3953:34;4021:6;4010:9;4006:22;3996:32;;4066:7;4059:4;4055:2;4051:13;4047:27;4037:55;;4088:1;4085;4078:12;4037:55;4124:2;4111:16;4146:2;4142;4139:10;4136:36;;;4152:18;;:::i;:::-;4194:53;4237:2;4218:13;;-1:-1:-1;;4214:27:1;4210:36;;4194:53;:::i;:::-;4181:66;;4270:2;4263:5;4256:17;4310:7;4305:2;4300;4296;4292:11;4288:20;4285:33;4282:53;;;4331:1;4328;4321:12;4282:53;4386:2;4381;4377;4373:11;4368:2;4361:5;4357:14;4344:45;4430:1;4409:14;;;4405:23;;;4398:34;;;;-1:-1:-1;4413:5:1;3698:764;-1:-1:-1;;;3698:764:1:o;4467:180::-;4526:6;4579:2;4567:9;4558:7;4554:23;4550:32;4547:52;;;4595:1;4592;4585:12;4547:52;-1:-1:-1;4618:23:1;;4467:180;-1:-1:-1;4467:180:1:o;4652:385::-;4738:6;4746;4754;4762;4815:3;4803:9;4794:7;4790:23;4786:33;4783:53;;;4832:1;4829;4822:12;4783:53;-1:-1:-1;;4855:23:1;;;4925:2;4910:18;;4897:32;;-1:-1:-1;4976:2:1;4961:18;;4948:32;;5027:2;5012:18;4999:32;;-1:-1:-1;4652:385:1;-1:-1:-1;4652:385:1:o;5042:258::-;5084:3;5122:5;5116:12;5149:6;5144:3;5137:19;5165:63;5221:6;5214:4;5209:3;5205:14;5198:4;5191:5;5187:16;5165:63;:::i;:::-;5282:2;5261:15;-1:-1:-1;;5257:29:1;5248:39;;;;5289:4;5244:50;;5042:258;-1:-1:-1;;5042:258:1:o;5305:276::-;5436:3;5474:6;5468:13;5490:53;5536:6;5531:3;5524:4;5516:6;5512:17;5490:53;:::i;:::-;5559:16;;;;;5305:276;-1:-1:-1;;5305:276:1:o;5586:1527::-;5810:3;5848:6;5842:13;5874:4;5887:51;5931:6;5926:3;5921:2;5913:6;5909:15;5887:51;:::i;:::-;6001:13;;5960:16;;;;6023:55;6001:13;5960:16;6045:15;;;6023:55;:::i;:::-;6167:13;;6100:20;;;6140:1;;6227;6249:18;;;;6302;;;;6329:93;;6407:4;6397:8;6393:19;6381:31;;6329:93;6470:2;6460:8;6457:16;6437:18;6434:40;6431:167;;;-1:-1:-1;;;6497:33:1;;6553:4;6550:1;6543:15;6583:4;6504:3;6571:17;6431:167;6614:18;6641:110;;;;6765:1;6760:328;;;;6607:481;;6641:110;-1:-1:-1;;6676:24:1;;6662:39;;6721:20;;;;-1:-1:-1;6641:110:1;;6760:328;18048:1;18041:14;;;18085:4;18072:18;;6855:1;6869:169;6883:8;6880:1;6877:15;6869:169;;;6965:14;;6950:13;;;6943:37;7008:16;;;;6900:10;;6869:169;;;6873:3;;7069:8;7062:5;7058:20;7051:27;;6607:481;-1:-1:-1;7104:3:1;;5586:1527;-1:-1:-1;;;;;;;;;;;5586:1527:1:o;7550:632::-;7721:2;7773:21;;;7843:13;;7746:18;;;7865:22;;;7692:4;;7721:2;7944:15;;;;7918:2;7903:18;;;7692:4;7987:169;8001:6;7998:1;7995:13;7987:169;;;8062:13;;8050:26;;8131:15;;;;8096:12;;;;8023:1;8016:9;7987:169;;;-1:-1:-1;8173:3:1;;7550:632;-1:-1:-1;;;;;;7550:632:1:o;8379:220::-;8528:2;8517:9;8510:21;8491:4;8548:45;8589:2;8578:9;8574:18;8566:6;8548:45;:::i;8604:388::-;8809:2;8798:9;8791:21;8772:4;8829:45;8870:2;8859:9;8855:18;8847:6;8829:45;:::i;:::-;-1:-1:-1;;;;;8910:32:1;;;;8905:2;8890:18;;8883:60;-1:-1:-1;8974:2:1;8959:18;8952:34;8821:53;8604:388;-1:-1:-1;8604:388:1:o;15506:356::-;15708:2;15690:21;;;15727:18;;;15720:30;15786:34;15781:2;15766:18;;15759:62;15853:2;15838:18;;15506:356::o;17095:413::-;17297:2;17279:21;;;17336:2;17316:18;;;17309:30;17375:34;17370:2;17355:18;;17348:62;-1:-1:-1;;;17441:2:1;17426:18;;17419:47;17498:3;17483:19;;17095:413::o;17695:275::-;17766:2;17760:9;17831:2;17812:13;;-1:-1:-1;;17808:27:1;17796:40;;17866:18;17851:34;;17887:22;;;17848:62;17845:88;;;17913:18;;:::i;:::-;17949:2;17942:22;17695:275;;-1:-1:-1;17695:275:1:o;18101:128::-;18141:3;18172:1;18168:6;18165:1;18162:13;18159:39;;;18178:18;;:::i;:::-;-1:-1:-1;18214:9:1;;18101:128::o;18234:120::-;18274:1;18300;18290:35;;18305:18;;:::i;:::-;-1:-1:-1;18339:9:1;;18234:120::o;18359:168::-;18399:7;18465:1;18461;18457:6;18453:14;18450:1;18447:21;18442:1;18435:9;18428:17;18424:45;18421:71;;;18472:18;;:::i;:::-;-1:-1:-1;18512:9:1;;18359:168::o;18532:125::-;18572:4;18600:1;18597;18594:8;18591:34;;;18605:18;;:::i;:::-;-1:-1:-1;18642:9:1;;18532:125::o;18662:258::-;18734:1;18744:113;18758:6;18755:1;18752:13;18744:113;;;18834:11;;;18828:18;18815:11;;;18808:39;18780:2;18773:10;18744:113;;;18875:6;18872:1;18869:13;18866:48;;;18910:1;18901:6;18896:3;18892:16;18885:27;18866:48;;18662:258;;;:::o;18925:380::-;19004:1;19000:12;;;;19047;;;19068:61;;19122:4;19114:6;19110:17;19100:27;;19068:61;19175:2;19167:6;19164:14;19144:18;19141:38;19138:161;;;19221:10;19216:3;19212:20;19209:1;19202:31;19256:4;19253:1;19246:15;19284:4;19281:1;19274:15;19138:161;;18925:380;;;:::o;19310:135::-;19349:3;-1:-1:-1;;19370:17:1;;19367:43;;;19390:18;;:::i;:::-;-1:-1:-1;19437:1:1;19426:13;;19310:135::o;19450:112::-;19482:1;19508;19498:35;;19513:18;;:::i;:::-;-1:-1:-1;19547:9:1;;19450:112::o;19567:127::-;19628:10;19623:3;19619:20;19616:1;19609:31;19659:4;19656:1;19649:15;19683:4;19680:1;19673:15;19699:127;19760:10;19755:3;19751:20;19748:1;19741:31;19791:4;19788:1;19781:15;19815:4;19812:1;19805:15;19831:127;19892:10;19887:3;19883:20;19880:1;19873:31;19923:4;19920:1;19913:15;19947:4;19944:1;19937:15;19963:127;20024:10;20019:3;20015:20;20012:1;20005:31;20055:4;20052:1;20045:15;20079:4;20076:1;20069:15;20095:127;20156:10;20151:3;20147:20;20144:1;20137:31;20187:4;20184:1;20177:15;20211:4;20208:1;20201:15;20227:131;-1:-1:-1;;;;;20302:31:1;;20292:42;;20282:70;;20348:1;20345;20338:12
Swarm Source
ipfs://9c3cb38fa63da5009ed6cb55306a31bf4e000136c2f67d685d156a5f9cd1f5a0
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.