Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
803 COSMAS
Holders
179
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 COSMASLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CosmoMasks
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; import "./utils/Ownable.sol"; import "./CosmoMasksERC721.sol"; interface IERC20BurnTransfer { function burn(uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } interface ICosmoTokenMint { function mintToFund(uint256 amount) external returns (bool); } interface ICosmoMasks { function isMintedBeforeReveal(uint256 index) external view returns (bool); } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } // https://eips.ethereum.org/EIPS/eip-721 tokenURI /** * @title CosmoMasks contract * @dev Extends ERC721 Non-Fungible Token Standard basic implementation */ contract CosmoMasks is Ownable, CosmoMasksERC721, ICosmoMasks { using SafeMath for uint256; // This is the provenance record of all CosmoMasks artwork in existence uint256 public constant SECONDS_IN_A_DAY = 86400; uint256 public constant NAME_CHANGE_PRICE = 1830e18; uint256 public constant MAX_SUPPLY = 16410; string public constant PROVENANCE = "c1c4d72a3c4fa87202de25d67710b46331426d6fe6932ba4fdcce6effb3fdefe"; uint256 public constant SALE_START_TIMESTAMP = 1615734000; // "2021-03-14T15:00:00.000Z" // Time after which CosmoMasks are randomized and allotted uint256 public constant REVEAL_TIMESTAMP = 1616943600; // "2021-03-28T15:00:00.000Z" uint256 public startingIndexBlock; uint256 public startingIndex; address private _cosmoToken; // Mapping from token ID to name mapping(uint256 => string) private _tokenName; // Mapping if certain name string has already been reserved mapping(string => bool) private _nameReserved; // Mapping from token ID to whether the CosmoMask was minted before reveal mapping(uint256 => bool) private _mintedBeforeReveal; // CosmoMasks Power address address private _cmpAddress; address proxyRegistryAddress; string private _contractURI; event NameChange(uint256 indexed tokenId, string newName); event SetStartingIndexBlock(uint256 startingIndexBlock); event SetStartingIndex(uint256 startingIndex); constructor(address cmpAddress, address _proxyRegistryAddress) public CosmoMasksERC721("CosmoMasks", "COSMAS") { _cmpAddress = cmpAddress; proxyRegistryAddress = _proxyRegistryAddress; _setBaseURI("https://TheCosmoMasks.com/cosmomasks-metadata/"); _setURL("https://TheCosmoMasks.com/"); _contractURI = "https://TheCosmoMasks.com/cosmomasks-contract-metadata.json"; } function getCosmoToken() public view returns (address) { return _cosmoToken; } function contractURI() public view returns (string memory) { return _contractURI; } /** * @dev Returns name of the CosmoMask at index. */ function tokenNameByIndex(uint256 index) public view returns (string memory) { return _tokenName[index]; } /** * @dev Returns if the name has been reserved. */ function isNameReserved(string memory nameString) public view returns (bool) { return _nameReserved[toLower(nameString)]; } /** * @dev Returns if the CosmoMask has been minted before reveal phase */ function isMintedBeforeReveal(uint256 index) public view override returns (bool) { return _mintedBeforeReveal[index]; } /** * @dev Gets current CosmoMask Price */ function getPrice() public view returns (uint256) { require(block.timestamp >= SALE_START_TIMESTAMP, "CosmoMasks: sale has not started"); require(totalSupply() < MAX_SUPPLY, "CosmoMasks: sale has already ended"); uint256 currentSupply = totalSupply(); if (currentSupply >= 16409) { return 1000000e18; } else if (currentSupply >= 16407) { return 100000e18; } else if (currentSupply >= 16400) { return 10000e18; } else if (currentSupply >= 16381) { return 1000e18; } else if (currentSupply >= 16000) { return 100e18; } else if (currentSupply >= 15000) { return 17e18; } else if (currentSupply >= 11000) { return 9e18; } else if (currentSupply >= 7000) { return 5e18; } else if (currentSupply >= 3000) { return 3e18; } else { return 1e18; } } /** * @dev Mints CosmoMasks */ function mint(uint256 numberOfMasks) public payable { require(totalSupply() < MAX_SUPPLY, "CosmoMasks: sale has already ended"); require(numberOfMasks > 0, "CosmoMasks: numberOfMasks cannot be 0"); require(numberOfMasks <= 20, "CosmoMasks: You may not buy more than 20 CosmoMasks at once"); require(totalSupply().add(numberOfMasks) <= MAX_SUPPLY, "CosmoMasks: Exceeds MAX_SUPPLY"); require(getPrice().mul(numberOfMasks) == msg.value, "CosmoMasks: Ether value sent is not correct"); for (uint256 i = 0; i < numberOfMasks; i++) { uint256 mintIndex = totalSupply(); if (block.timestamp < REVEAL_TIMESTAMP) { _mintedBeforeReveal[mintIndex] = true; } _safeMint(msg.sender, mintIndex); ICosmoTokenMint(_cosmoToken).mintToFund(1e24); } if (startingIndex == 0 && (totalSupply() == MAX_SUPPLY || block.timestamp >= REVEAL_TIMESTAMP)) { _setStartingIndex(); } } function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } /** * @dev Finalize starting index */ function finalizeStartingIndex() public { require(startingIndex == 0, "CosmoMasks: starting index is already set"); require(block.timestamp >= REVEAL_TIMESTAMP, "CosmoMasks: Too early"); _setStartingIndex(); } function _setStartingIndex() internal { startingIndexBlock = block.number - 1; emit SetStartingIndexBlock(startingIndexBlock); startingIndex = uint256(blockhash(startingIndexBlock)) % 16400; // Prevent default sequence if (startingIndex == 0) { startingIndex = startingIndex.add(1); } emit SetStartingIndex(startingIndex); } /** * @dev Changes the name for CosmoMask tokenId */ function changeName(uint256 tokenId, string memory newName) public { address owner = ownerOf(tokenId); require(_msgSender() == owner, "CosmoMasks: caller is not the token owner"); require(validateName(newName) == true, "CosmoMasks: not a valid new name"); require(sha256(bytes(newName)) != sha256(bytes(_tokenName[tokenId])), "CosmoMasks: new name is same as the current one"); require(isNameReserved(newName) == false, "CosmoMasks: name already reserved"); IERC20BurnTransfer(_cmpAddress).transferFrom(msg.sender, address(this), NAME_CHANGE_PRICE); // If already named, dereserve old name if (bytes(_tokenName[tokenId]).length > 0) { toggleReserveName(_tokenName[tokenId], false); } toggleReserveName(newName, true); _tokenName[tokenId] = newName; IERC20BurnTransfer(_cmpAddress).burn(NAME_CHANGE_PRICE); emit NameChange(tokenId, newName); } /** * @dev Withdraw ether from this contract (Callable by owner) */ function withdraw() public onlyOwner { uint256 balance = address(this).balance; msg.sender.transfer(balance); } /** * @dev Reserves the name if isReserve is set to true, de-reserves if set to false */ function toggleReserveName(string memory str, bool isReserve) internal { _nameReserved[toLower(str)] = isReserve; } /** * @dev Check if the name string is valid (Alphanumeric and spaces without leading or trailing space) */ function validateName(string memory str) public pure returns (bool) { bytes memory b = bytes(str); if (b.length < 1) return false; // Cannot be longer than 25 characters if (b.length > 25) return false; // Leading space if (b[0] == 0x20) return false; // Trailing space if (b[b.length - 1] == 0x20) return false; bytes1 lastChar = b[0]; for (uint256 i; i < b.length; i++) { bytes1 char = b[i]; // Cannot contain continous spaces if (char == 0x20 && lastChar == 0x20) return false; if ( !(char >= 0x30 && char <= 0x39) && //9-0 !(char >= 0x41 && char <= 0x5A) && //A-Z !(char >= 0x61 && char <= 0x7A) && //a-z !(char == 0x20) //space ) return false; lastChar = char; } return true; } /** * @dev Converts the string to lowercase */ function toLower(string memory str) public pure returns (string memory) { bytes memory bStr = bytes(str); bytes memory bLower = new bytes(bStr.length); for (uint256 i = 0; i < bStr.length; i++) { // Uppercase character if ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) bLower[i] = bytes1(uint8(bStr[i]) + 32); else bLower[i] = bStr[i]; } return string(bLower); } function setCosmoToken(address token) public onlyOwner { require(_cosmoToken == address(0), "CosmoMasks: CosmosToken has already setted"); require(token != address(0), "CosmoMasks: CosmoToken is the zero address"); _cosmoToken = token; } function setBaseURI(string memory baseURI_) public onlyOwner { _setBaseURI(baseURI_); } function setContractURI(string memory contractURI_) public onlyOwner { _contractURI = contractURI_; } function setURL(string memory newUrl) public onlyOwner { _setURL(newUrl); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./libraries/SafeMath.sol"; import "./libraries/Address.sol"; import "./libraries/EnumerableSet.sol"; import "./libraries/EnumerableMap.sol"; import "./libraries/Strings.sol"; import "./utils/Context.sol"; interface ICosmoMasksERC721 { // IERC165 function supportsInterface(bytes4 interfaceId) external view returns (bool); // IERC721Enumerable 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); // IERC721Metadata function name() external view returns (string memory _name); function symbol() external view returns (string memory _symbol); function tokenURI(uint256 _tokenId) external view returns (string memory); // ERC721 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); function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; 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); } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ abstract contract CosmoMasksERC721 is Context, ICosmoMasksERC721 { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // ERC165 bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_METADATA_SHORT = 0x93254542; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; mapping(address => EnumerableSet.UintSet) private _holderTokens; EnumerableMap.UintToAddressMap private _tokenOwners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; string private _name; string private _symbol; string private _baseURI; string private _url; constructor(string memory name_, string memory symbol_) internal { _name = name_; _symbol = symbol_; _registerInterface(_INTERFACE_ID_ERC165); _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_METADATA_SHORT); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "CosmoMasks: balance query for the zero address"); return _holderTokens[owner].length(); } function ownerOf(uint256 tokenId) public view override returns (address) { return _tokenOwners.get(tokenId, "CosmoMasks: owner query for nonexistent token"); } function name() public view override returns (string memory) { return _name; } function symbol() public view override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "CosmoMasks: URI query for nonexistent token"); string memory base = baseURI(); return string(abi.encodePacked(base, tokenId.toString(), ".json")); } function baseURI() public view returns (string memory) { return _baseURI; } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { return _holderTokens[owner].at(index); } function totalSupply() public view override returns (uint256) { return _tokenOwners.length(); } function tokenByIndex(uint256 index) public view override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); require(to != owner, "CosmoMasks: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "CosmoMasks: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "CosmoMasks: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "CosmoMasks: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom(address from, address to, uint256 tokenId) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "CosmoMasks: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override { require(_isApprovedOrOwner(_msgSender(), tokenId), "CosmoMasks: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "CosmoMasks: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view returns (bool) { return _tokenOwners.contains(tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { require(_exists(tokenId), "CosmoMasks: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } function _safeMint(address to, uint256 tokenId, bytes memory _data) internal { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "CosmoMasks: transfer to non ERC721Receiver implementer"); } function _mint(address to, uint256 tokenId) internal { require(to != address(0), "CosmoMasks: mint to the zero address"); require(!_exists(tokenId), "CosmoMasks: token already minted"); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal { address owner = ownerOf(tokenId); _approve(address(0), tokenId); _holderTokens[owner].remove(tokenId); _tokenOwners.remove(tokenId); emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from, "CosmoMasks: transfer of token that is not own"); require(to != address(0), "CosmoMasks: transfer to the zero address"); _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setBaseURI(string memory baseURI_) internal { _baseURI = baseURI_; } 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 ), "CosmoMasks: 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(ownerOf(tokenId), to, tokenId); } function _setURL(string memory newUrl) internal { _url = newUrl; } // ERC165 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "CosmoMasks: invalid interface id"); _supportedInterfaces[interfaceId] = true; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } 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, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Library for managing an enumerable variant of Solidity's * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`] * type. */ library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { MapEntry[] _entries; mapping(bytes32 => uint256) _indexes; } function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { map._entries.push(MapEntry({_key: key, _value: value})); map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } function _remove(Map storage map, bytes32 key) private returns (bool) { uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; MapEntry storage lastEntry = map._entries[lastIndex]; map._entries[toDeleteIndex] = lastEntry; map._indexes[lastEntry._key] = toDeleteIndex + 1; map._entries.pop(); delete map._indexes[key]; return true; } else { return false; } } function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } function _length(Map storage map) private view returns (uint256) { return map._entries.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); } function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); return (true, map._entries[keyIndex - 1]._value); } function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); return map._entries[keyIndex - 1]._value; } function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); return map._entries[keyIndex - 1]._value; } // UintToAddressMap struct UintToAddressMap { Map _inner; } function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } 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)))); } 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)))); } 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)))); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. */ library EnumerableSet { struct Set { bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; set._values[toDeleteIndex] = lastvalue; set._indexes[lastvalue] = toDeleteIndex + 1; set._values.pop(); 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]; } // UintSet struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } 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)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. */ library SafeMath { 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 sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev String operations. */ library Strings { function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); uint256 index = digits - 1; temp = value; while (temp != 0) { buffer[index--] = bytes1(uint8(48 + (temp % 10))); temp /= 10; } return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction. */ abstract contract Context { function _msgSender() internal view returns (address payable) { return msg.sender; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() internal { 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; } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 999999 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"cmpAddress","type":"address"},{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"newName","type":"string"}],"name":"NameChange","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":false,"internalType":"uint256","name":"startingIndex","type":"uint256"}],"name":"SetStartingIndex","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startingIndexBlock","type":"uint256"}],"name":"SetStartingIndexBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME_CHANGE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_START_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_IN_A_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newName","type":"string"}],"name":"changeName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeStartingIndex","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":[],"name":"getCosmoToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","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":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isMintedBeforeReveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nameString","type":"string"}],"name":"isNameReserved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMasks","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractURI_","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setCosmoToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUrl","type":"string"}],"name":"setURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"toLower","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenNameByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"validateName","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620050a3380380620050a3833981810160405260408110156200003757600080fd5b508051602091820151604080518082018252600a815269436f736d6f4d61736b7360b01b8186015281518083019092526006825265434f534d415360d01b948201949094529192909160006200008c6200022b565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508151620000eb906007906020850190620002e0565b50805162000101906008906020840190620002e0565b50620001146301ffc9a760e01b6200022f565b620001266380ac58cd60e01b6200022f565b62000138635b5e139f60e01b6200022f565b6200014a634992a2a160e11b6200022f565b6200015c63780e9d6360e01b6200022f565b5050601180546001600160a01b038085166001600160a01b03199283161790925560128054928416929091169190911790556040805160608101909152602e808252620001b39190620050756020830139620002b7565b60408051808201909152601a81527f68747470733a2f2f546865436f736d6f4d61736b732e636f6d2f0000000000006020820152620001f290620002d0565b6040518060600160405280603b81526020016200503a603b913980516200022291601391602090910190620002e0565b5050506200038c565b3390565b6001600160e01b031980821614156200028f576040805162461bcd60e51b815260206004820181905260248201527f436f736d6f4d61736b733a20696e76616c696420696e74657266616365206964604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b8051620002cc906009906020840190620002e0565b5050565b8051620002cc90600a9060208401905b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000318576000855562000363565b82601f106200033357805160ff191683800117855562000363565b8280016001018555821562000363579182015b828111156200036357825182559160200191906001019062000346565b506200037192915062000375565b5090565b5b8082111562000371576000815560010162000376565b614c9e806200039c6000396000f3fe6080604052600436106102e75760003560e01c806374df39c911610184578063b88d4fde116100d6578063e36d64981161008a578063f2fde38b11610064578063f2fde38b14610e59578063f9cfa06f14610e99578063fbadd30814610eae576102e7565b8063e36d649814610de7578063e8a3d48514610dfc578063e985e9c514610e11576102e7565b8063c39cbef1116100bb578063c39cbef114610cee578063c87b56dd14610da8578063cb774d4714610dd2576102e7565b8063b88d4fde14610be4578063bc28d70214610cc4576102e7565b8063946807fd116101385780639ffdb65a116101125780639ffdb65a14610acc578063a0712d6814610b7f578063a22cb46514610b9c576102e7565b8063946807fd14610a8d57806395d89b4114610aa257806398d5fdca14610ab7576102e7565b80638da5cb5b116101695780638da5cb5b14610912578063938e3d7b146109275780639416b423146109da576102e7565b806374df39c91461084a578063773434081461085f576102e7565b80633ccfd60b1161023d5780636352211e116101f15780636d522418116101cb5780636d522418146107cb57806370a08231146107f5578063715018a614610835576102e7565b80636352211e146107775780636373a6b1146107a15780636c0360eb146107b6576102e7565b80634f6ccce7116102225780634f6ccce71461068557806354b6f161146106af57806355f804b3146106c4576102e7565b80633ccfd60b1461062057806342842e0e14610635576102e7565b806318160ddd1161029f57806323b872dd1161027957806323b872dd146105755780632f745c59146105c557806332cb6b0c1461060b576102e7565b806318160ddd1461052457806318e20a381461054b5780631929a42b14610560576102e7565b8063081812fc116102d0578063081812fc146103d6578063095ea7b31461042957806315b56d1014610471576102e7565b806301ffc9a7146102ec57806306fdde031461034c575b600080fd5b3480156102f857600080fd5b506103386004803603602081101561030f57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610eee565b604080519115158252519081900360200190f35b34801561035857600080fd5b50610361610f29565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561039b578181015183820152602001610383565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103e257600080fd5b50610400600480360360208110156103f957600080fd5b5035610fde565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561043557600080fd5b5061046f6004803603604081101561044c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611067565b005b34801561047d57600080fd5b506103386004803603602081101561049457600080fd5b8101906020810181356401000000008111156104af57600080fd5b8201836020820111156104c157600080fd5b803590602001918460018302840111640100000000831117156104e357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506111aa945050505050565b34801561053057600080fd5b50610539611259565b60408051918252519081900360200190f35b34801561055757600080fd5b5061053961126a565b34801561056c57600080fd5b50610400611272565b34801561058157600080fd5b5061046f6004803603606081101561059857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561128e565b3480156105d157600080fd5b50610539600480360360408110156105e857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356112ff565b34801561061757600080fd5b50610539611337565b34801561062c57600080fd5b5061046f61133d565b34801561064157600080fd5b5061046f6004803603606081101561065857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611418565b34801561069157600080fd5b50610539600480360360208110156106a857600080fd5b5035611433565b3480156106bb57600080fd5b50610539611449565b3480156106d057600080fd5b5061046f600480360360208110156106e757600080fd5b81019060208101813564010000000081111561070257600080fd5b82018360208201111561071457600080fd5b8035906020019184600183028401116401000000008311171561073657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611456945050505050565b34801561078357600080fd5b506104006004803603602081101561079a57600080fd5b503561150a565b3480156107ad57600080fd5b50610361611532565b3480156107c257600080fd5b5061036161154e565b3480156107d757600080fd5b50610361600480360360208110156107ee57600080fd5b50356115cd565b34801561080157600080fd5b506105396004803603602081101561081857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661168c565b34801561084157600080fd5b5061046f611728565b34801561085657600080fd5b5061046f61183f565b34801561086b57600080fd5b5061046f6004803603602081101561088257600080fd5b81019060208101813564010000000081111561089d57600080fd5b8201836020820111156108af57600080fd5b803590602001918460018302840111640100000000831117156108d157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611915945050505050565b34801561091e57600080fd5b506104006119c6565b34801561093357600080fd5b5061046f6004803603602081101561094a57600080fd5b81019060208101813564010000000081111561096557600080fd5b82018360208201111561097757600080fd5b8035906020019184600183028401116401000000008311171561099957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506119e2945050505050565b3480156109e657600080fd5b50610361600480360360208110156109fd57600080fd5b810190602081018135640100000000811115610a1857600080fd5b820183602082011115610a2a57600080fd5b80359060200191846001830284011164010000000083111715610a4c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a9d945050505050565b348015610a9957600080fd5b50610539611bf0565b348015610aae57600080fd5b50610361611bf8565b348015610ac357600080fd5b50610539611c77565b348015610ad857600080fd5b5061033860048036036020811015610aef57600080fd5b810190602081018135640100000000811115610b0a57600080fd5b820183602082011115610b1c57600080fd5b80359060200191846001830284011164010000000083111715610b3e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e60945050505050565b61046f60048036036020811015610b9557600080fd5b503561229e565b348015610ba857600080fd5b5061046f60048036036040811015610bbf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156125e8565b348015610bf057600080fd5b5061046f60048036036080811015610c0757600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610c4f57600080fd5b820183602082011115610c6157600080fd5b80359060200191846001830284011164010000000083111715610c8357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612759945050505050565b348015610cd057600080fd5b5061033860048036036020811015610ce757600080fd5b50356127d1565b348015610cfa57600080fd5b5061046f60048036036040811015610d1157600080fd5b81359190810190604081016020820135640100000000811115610d3357600080fd5b820183602082011115610d4557600080fd5b80359060200191846001830284011164010000000083111715610d6757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506127e6945050505050565b348015610db457600080fd5b5061036160048036036020811015610dcb57600080fd5b5035612e46565b348015610dde57600080fd5b5061053961302f565b348015610df357600080fd5b50610539613035565b348015610e0857600080fd5b5061036161303b565b348015610e1d57600080fd5b5061033860048036036040811015610e3457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166130ba565b348015610e6557600080fd5b5061046f60048036036020811015610e7c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613198565b348015610ea557600080fd5b50610539613339565b348015610eba57600080fd5b5061046f60048036036020811015610ed157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613340565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205460ff165b919050565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b820191906000526020600020905b815481529060010190602001808311610fb657829003601f168201915b505050505090505b90565b6000610fe98261350a565b61103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180614b4f6030913960400191505060405180910390fd5b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006110728261150a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614b2a6025913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611118613517565b73ffffffffffffffffffffffffffffffffffffffff161480611146575061114681611141613517565b6130ba565b61119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180614a30603c913960400191505060405180910390fd5b6111a5838361351b565b505050565b6000600f6111b783611a9d565b6040518082805190602001908083835b6020831061120457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016111c7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205460ff16949350505050565b600061126560036135bb565b905090565b63606099f081565b600d5473ffffffffffffffffffffffffffffffffffffffff1690565b61129f611299613517565b826135c6565b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806148756035913960400191505060405180910390fd5b6111a58383836136b0565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812061132e9083613880565b90505b92915050565b61401a81565b611345613517565b73ffffffffffffffffffffffffffffffffffffffff166113636119c6565b73ffffffffffffffffffffffffffffffffffffffff16146113e557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040514790339082156108fc029083906000818181858888f19350505050158015611414573d6000803e3d6000fd5b5050565b6111a583838360405180602001604052806000815250612759565b60008061144160038461388c565b509392505050565b6863345a083e94d8000081565b61145e613517565b73ffffffffffffffffffffffffffffffffffffffff1661147c6119c6565b73ffffffffffffffffffffffffffffffffffffffff16146114fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611507816138a8565b50565b6000611331826040518060600160405280602d8152602001614c3c602d9139600391906138bb565b604051806060016040528060408152602001614b7f6040913981565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b6000818152600e602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116805780601f1061165557610100808354040283529160200191611680565b820191906000526020600020905b81548152906001019060200180831161166357829003601f168201915b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff82166116fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806147f2602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260409020611331906135bb565b611730613517565b73ffffffffffffffffffffffffffffffffffffffff1661174e6119c6565b73ffffffffffffffffffffffffffffffffffffffff16146117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5415611898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806149476029913960400191505060405180910390fd5b63606099f042101561190b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f436f736d6f4d61736b733a20546f6f206561726c790000000000000000000000604482015290519081900360640190fd5b6119136138d2565b565b61191d613517565b73ffffffffffffffffffffffffffffffffffffffff1661193b6119c6565b73ffffffffffffffffffffffffffffffffffffffff16146119bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61150781613987565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6119ea613517565b73ffffffffffffffffffffffffffffffffffffffff16611a086119c6565b73ffffffffffffffffffffffffffffffffffffffff1614611a8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8051611414906013906020840190614737565b606060008290506000815167ffffffffffffffff81118015611abe57600080fd5b506040519080825280601f01601f191660200182016040528015611ae9576020820181803683370190505b50905060005b8251811015611441576041838281518110611b0657fe5b016020015160f81c10801590611b305750605a838281518110611b2557fe5b016020015160f81c11155b15611b9557828181518110611b4157fe5b602001015160f81c60f81b60f81c60200160f81b828281518110611b6157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be8565b828181518110611ba157fe5b602001015160f81c60f81b828281518110611bb857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600101611aef565b63604e24f081565b60088054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b600063604e24f0421015611cec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f4d61736b733a2073616c6520686173206e6f742073746172746564604482015290519081900360640190fd5b61401a611cf7611259565b10611d4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148aa6022913960400191505060405180910390fd5b6000611d57611259565b90506140198110611d755769d3c21bcecceda1000000915050610fdb565b6140178110611d915769152d02c7e14af6800000915050610fdb565b6140108110611dad5769021e19e0c9bab2400000915050610fdb565b613ffd8110611dc857683635c9adc5dea00000915050610fdb565b613e808110611de35768056bc75e2d63100000915050610fdb565b613a988110611dfd5767ebec21ee1da40000915050610fdb565b612af88110611e1757677ce66c50e2840000915050610fdb565b611b588110611e3157674563918244f40000915050610fdb565b610bb88110611e4b576729a2241af62c0000915050610fdb565b670de0b6b3a7640000915050610fdb565b5090565b600080829050600181511015611e7a576000915050610f24565b601981511115611e8e576000915050610f24565b80600081518110611e9b57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f20000000000000000000000000000000000000000000000000000000000000001415611ef4576000915050610f24565b80600182510381518110611f0457fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f20000000000000000000000000000000000000000000000000000000000000001415611f5d576000915050610f24565b600081600081518110611f6c57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016905060005b8251811015612293576000838281518110611faf57fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f20000000000000000000000000000000000000000000000000000000000000008114801561204857507f20000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008416145b1561205a576000945050505050610f24565b7f30000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216108015906120ee57507f39000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b15801561218c57507f41000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061218a57507f5a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b801561222957507f61000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061222757507f7a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b801561227757507f20000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821614155b15612289576000945050505050610f24565b9150600101611f98565b506001949350505050565b61401a6122a9611259565b106122ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148aa6022913960400191505060405180910390fd5b60008111612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806149706025913960400191505060405180910390fd5b60148111156123b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180614aef603b913960400191505060405180910390fd5b61401a6123c7826123c1611259565b9061399a565b111561243457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f436f736d6f4d61736b733a2045786365656473204d41585f535550504c590000604482015290519081900360640190fd5b3461244782612441611c77565b90613a0e565b1461249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614a6c602b913960400191505060405180910390fd5b60005b818110156125b45760006124b2611259565b905063606099f04210156124f857600081815260106020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6125023382613a81565b600d54604080517f12fc61dd00000000000000000000000000000000000000000000000000000000815269d3c21bcecceda10000006004820152905173ffffffffffffffffffffffffffffffffffffffff909216916312fc61dd916024808201926020929091908290030181600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050506040513d60208110156125a957600080fd5b5050506001016124a0565b50600c541580156125db575061401a6125cb611259565b14806125db575063606099f04210155b15611507576115076138d2565b6125f0613517565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f436f736d6f4d61736b733a20617070726f766520746f2063616c6c6572000000604482015290519081900360640190fd5b8060066000612697613517565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612706613517565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61276a612764613517565b836135c6565b6127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806148756035913960400191505060405180910390fd5b6127cb84848484613a9b565b50505050565b60009081526010602052604090205460ff1690565b60006127f18361150a565b90508073ffffffffffffffffffffffffffffffffffffffff16612812613517565b73ffffffffffffffffffffffffffffffffffffffff161461287e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614c136029913960400191505060405180910390fd5b61288782611e60565b15156001146128f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f4d61736b733a206e6f7420612076616c6964206e6577206e616d65604482015290519081900360640190fd5b6002600e600085815260200190815260200160002060405180828054600181600116156101000203166002900480156129675780601f10612945576101008083540402835291820191612967565b820191906000526020600020905b815481529060010190602001808311612953575b5050915050602060405180830381855afa158015612989573d6000803e3d6000fd5b5050506040513d602081101561299e57600080fd5b505160405183516002918591819060208401908083835b602083106129f257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016129b5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015612a4f573d6000803e3d6000fd5b5050506040513d6020811015612a6457600080fd5b50511415612abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614846602f913960400191505060405180910390fd5b612ac6826111aa565b15612b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149026021913960400191505060405180910390fd5b601154604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526863345a083e94d800006044820152905173ffffffffffffffffffffffffffffffffffffffff909216916323b872dd916064808201926020929091908290030181600087803b158015612ba457600080fd5b505af1158015612bb8573d6000803e3d6000fd5b505050506040513d6020811015612bce57600080fd5b50506000838152600e602052604090205460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415612cd5576000838152600e602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452612cd59392830182828015612cc95780601f10612c9e57610100808354040283529160200191612cc9565b820191906000526020600020905b815481529060010190602001808311612cac57829003601f168201915b50505050506000613b07565b612ce0826001613b07565b6000838152600e602090815260409091208351612cff92850190614737565b50601154604080517f42966c680000000000000000000000000000000000000000000000000000000081526863345a083e94d800006004820152905173ffffffffffffffffffffffffffffffffffffffff909216916342966c68916024808201926020929091908290030181600087803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b505050506040513d6020811015612da657600080fd5b5050604080516020808252845182820152845186937f7e632a301794d8d4a81ea7e20f37d1947158d36e66403af04ba85dd194b66f1b9387939092839283019185019080838360005b83811015612e07578181015183820152602001612def565b50505050905090810190601f168015612e345780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b6060612e518261350a565b612ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614ac4602b913960400191505060405180910390fd5b6000612eb061154e565b905080612ebc84613bdd565b6040516020018083805190602001908083835b60208310612f0c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ecf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b60208310612f9057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f53565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790527f2e6a736f6e000000000000000000000000000000000000000000000000000000920191825250604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5018152600590920190529695505050505050565b600c5481565b600b5481565b60138054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b601254604080517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561313457600080fd5b505afa158015613148573d6000803e3d6000fd5b505050506040513d602081101561315e57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415613186576001915050611331565b6131908484613d0a565b949350505050565b6131a0613517565b73ffffffffffffffffffffffffffffffffffffffff166131be6119c6565b73ffffffffffffffffffffffffffffffffffffffff161461324057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148206026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6201518081565b613348613517565b73ffffffffffffffffffffffffffffffffffffffff166133666119c6565b73ffffffffffffffffffffffffffffffffffffffff16146133e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d5473ffffffffffffffffffffffffffffffffffffffff1615613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614be9602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166134c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614bbf602a913960400191505060405180910390fd5b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611331600383613d45565b3390565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906135758261150a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061133182613d51565b60006135d18261350a565b613626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806149b76030913960400191505060405180910390fd5b60006136318361150a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806136a057508373ffffffffffffffffffffffffffffffffffffffff1661368884610fde565b73ffffffffffffffffffffffffffffffffffffffff16145b80613190575061319081856130ba565b8273ffffffffffffffffffffffffffffffffffffffff166136d08261150a565b73ffffffffffffffffffffffffffffffffffffffff161461373c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614a97602d913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166137a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806149e76028913960400191505060405180910390fd5b6137b360008261351b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604090206137e29082613d55565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206138129082613d61565b5061381f60038284613d6d565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061132e8383613d90565b600080808061389b8686613e0e565b9097909650945050505050565b8051611414906009906020840190614737565b60006138c8848484613ea3565b90505b9392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4301600b81905560408051918252517f1ebf104b139b44bd4c7fbbaf3a5f40960db3488203e805d3e4cfa0867f7fd4bf9181900360200190a1600b54614010904006600c81905561395057600c5461394c90600161399a565b600c555b600c5460408051918252517f7527e881a8a314f68a0941c7319ae764e91afbf6a0c93d179e74e9282c75b6e29181900360200190a1565b805161141490600a906020840190614737565b60008282018381101561132e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613a1d57506000611331565b82820282848281613a2a57fe5b041461132e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a0f6021913960400191505060405180910390fd5b611414828260405180602001604052806000815250613f87565b613aa68484846136b0565b613ab284848484613ff3565b6127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806148cc6036913960400191505060405180910390fd5b80600f613b1384611a9d565b6040518082805190602001908083835b60208310613b6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b23565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490030190922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925550505050565b606081613c1e575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610f24565b8160005b8115613c3657600101600a82049150613c22565b60008167ffffffffffffffff81118015613c4f57600080fd5b506040519080825280601f01601f191660200182016040528015613c7a576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8315613d0157600a840660300160f81b82828060019003935081518110613cc757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613ca4565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b600061132e8383614203565b5490565b600061132e838361421b565b600061132e83836142ff565b60006138c8848473ffffffffffffffffffffffffffffffffffffffff8516614349565b81546000908210613dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806147d06022913960400191505060405180910390fd5b826000018281548110613dfb57fe5b9060005260206000200154905092915050565b815460009081908310613e6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149956022913960400191505060405180910390fd5b6000846000018481548110613e7d57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281613f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f1d578181015183820152602001613f05565b50505050905090810190601f168015613f4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110613f6b57fe5b9060005260206000209060020201600101549150509392505050565b613f9183836143e0565b613f9e6000848484613ff3565b6111a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806148cc6036913960400191505060405180910390fd5b60006140148473ffffffffffffffffffffffffffffffffffffffff16614547565b61402057506001613190565b60006141987f150b7a020000000000000000000000000000000000000000000000000000000061404e613517565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156140cf5781810151838201526020016140b7565b50505050905090810190601f1680156140fc5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603681526020016148cc6036913973ffffffffffffffffffffffffffffffffffffffff8816919061454d565b905060008180602001905160208110156141b157600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b600081815260018301602052604081205480156142f55783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061426c57fe5b906000526020600020015490508087600001848154811061428957fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806142b957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611331565b6000915050611331565b600061430b8383614203565b61434157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611331565b506000611331565b6000828152600184016020526040812054806143ae5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556138cb565b828560000160018303815481106143c157fe5b90600052602060002090600202016001018190555060009150506138cb565b73ffffffffffffffffffffffffffffffffffffffff821661444c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806149236024913960400191505060405180910390fd5b6144558161350a565b156144c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f4d61736b733a20746f6b656e20616c7265616479206d696e746564604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206144f09082613d61565b506144fd60038284613d6d565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b60606138c884846000858561456185614547565b6145cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061463557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016145f8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614697576040519150601f19603f3d011682016040523d82523d6000602084013e61469c565b606091505b50915091506146ac8282866146b7565b979650505050505050565b606083156146c65750816138cb565b8251156146d65782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315613f1d578181015183820152602001613f05565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261476d57600085556147b3565b82601f1061478657805160ff19168380011785556147b3565b828001600101855582156147b3579182015b828111156147b3578251825591602001919060010190614798565b50611e5c9291505b80821115611e5c57600081556001016147bb56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473436f736d6f4d61736b733a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f736d6f4d61736b733a206e6577206e616d652069732073616d65206173207468652063757272656e74206f6e65436f736d6f4d61736b733a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564436f736d6f4d61736b733a2073616c652068617320616c726561647920656e646564436f736d6f4d61736b733a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572436f736d6f4d61736b733a206e616d6520616c7265616479207265736572766564436f736d6f4d61736b733a206d696e7420746f20746865207a65726f2061646472657373436f736d6f4d61736b733a207374617274696e6720696e64657820697320616c726561647920736574436f736d6f4d61736b733a206e756d6265724f664d61736b732063616e6e6f742062652030456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473436f736d6f4d61736b733a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f4d61736b733a207472616e7366657220746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f736d6f4d61736b733a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c436f736d6f4d61736b733a2045746865722076616c75652073656e74206973206e6f7420636f7272656374436f736d6f4d61736b733a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e436f736d6f4d61736b733a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f4d61736b733a20596f75206d6179206e6f7420627579206d6f7265207468616e20323020436f736d6f4d61736b73206174206f6e6365436f736d6f4d61736b733a20617070726f76616c20746f2063757272656e74206f776e6572436f736d6f4d61736b733a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e63316334643732613363346661383732303264653235643637373130623436333331343236643666653639333262613466646363653665666662336664656665436f736d6f4d61736b733a20436f736d6f546f6b656e20697320746865207a65726f2061646472657373436f736d6f4d61736b733a20436f736d6f73546f6b656e2068617320616c726561647920736574746564436f736d6f4d61736b733a2063616c6c6572206973206e6f742074686520746f6b656e206f776e6572436f736d6f4d61736b733a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220158c2e627107ada0e4ee3253e82c3175e9d8f69b568d19b72348c351856e6e5264736f6c6343000706003368747470733a2f2f546865436f736d6f4d61736b732e636f6d2f636f736d6f6d61736b732d636f6e74726163742d6d657461646174612e6a736f6e68747470733a2f2f546865436f736d6f4d61736b732e636f6d2f636f736d6f6d61736b732d6d657461646174612f000000000000000000000000b9fdc13f7f747baedcc356e9da13ab883ffa719b000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode
0x6080604052600436106102e75760003560e01c806374df39c911610184578063b88d4fde116100d6578063e36d64981161008a578063f2fde38b11610064578063f2fde38b14610e59578063f9cfa06f14610e99578063fbadd30814610eae576102e7565b8063e36d649814610de7578063e8a3d48514610dfc578063e985e9c514610e11576102e7565b8063c39cbef1116100bb578063c39cbef114610cee578063c87b56dd14610da8578063cb774d4714610dd2576102e7565b8063b88d4fde14610be4578063bc28d70214610cc4576102e7565b8063946807fd116101385780639ffdb65a116101125780639ffdb65a14610acc578063a0712d6814610b7f578063a22cb46514610b9c576102e7565b8063946807fd14610a8d57806395d89b4114610aa257806398d5fdca14610ab7576102e7565b80638da5cb5b116101695780638da5cb5b14610912578063938e3d7b146109275780639416b423146109da576102e7565b806374df39c91461084a578063773434081461085f576102e7565b80633ccfd60b1161023d5780636352211e116101f15780636d522418116101cb5780636d522418146107cb57806370a08231146107f5578063715018a614610835576102e7565b80636352211e146107775780636373a6b1146107a15780636c0360eb146107b6576102e7565b80634f6ccce7116102225780634f6ccce71461068557806354b6f161146106af57806355f804b3146106c4576102e7565b80633ccfd60b1461062057806342842e0e14610635576102e7565b806318160ddd1161029f57806323b872dd1161027957806323b872dd146105755780632f745c59146105c557806332cb6b0c1461060b576102e7565b806318160ddd1461052457806318e20a381461054b5780631929a42b14610560576102e7565b8063081812fc116102d0578063081812fc146103d6578063095ea7b31461042957806315b56d1014610471576102e7565b806301ffc9a7146102ec57806306fdde031461034c575b600080fd5b3480156102f857600080fd5b506103386004803603602081101561030f57600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610eee565b604080519115158252519081900360200190f35b34801561035857600080fd5b50610361610f29565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561039b578181015183820152602001610383565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103e257600080fd5b50610400600480360360208110156103f957600080fd5b5035610fde565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561043557600080fd5b5061046f6004803603604081101561044c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611067565b005b34801561047d57600080fd5b506103386004803603602081101561049457600080fd5b8101906020810181356401000000008111156104af57600080fd5b8201836020820111156104c157600080fd5b803590602001918460018302840111640100000000831117156104e357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506111aa945050505050565b34801561053057600080fd5b50610539611259565b60408051918252519081900360200190f35b34801561055757600080fd5b5061053961126a565b34801561056c57600080fd5b50610400611272565b34801561058157600080fd5b5061046f6004803603606081101561059857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561128e565b3480156105d157600080fd5b50610539600480360360408110156105e857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356112ff565b34801561061757600080fd5b50610539611337565b34801561062c57600080fd5b5061046f61133d565b34801561064157600080fd5b5061046f6004803603606081101561065857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611418565b34801561069157600080fd5b50610539600480360360208110156106a857600080fd5b5035611433565b3480156106bb57600080fd5b50610539611449565b3480156106d057600080fd5b5061046f600480360360208110156106e757600080fd5b81019060208101813564010000000081111561070257600080fd5b82018360208201111561071457600080fd5b8035906020019184600183028401116401000000008311171561073657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611456945050505050565b34801561078357600080fd5b506104006004803603602081101561079a57600080fd5b503561150a565b3480156107ad57600080fd5b50610361611532565b3480156107c257600080fd5b5061036161154e565b3480156107d757600080fd5b50610361600480360360208110156107ee57600080fd5b50356115cd565b34801561080157600080fd5b506105396004803603602081101561081857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661168c565b34801561084157600080fd5b5061046f611728565b34801561085657600080fd5b5061046f61183f565b34801561086b57600080fd5b5061046f6004803603602081101561088257600080fd5b81019060208101813564010000000081111561089d57600080fd5b8201836020820111156108af57600080fd5b803590602001918460018302840111640100000000831117156108d157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611915945050505050565b34801561091e57600080fd5b506104006119c6565b34801561093357600080fd5b5061046f6004803603602081101561094a57600080fd5b81019060208101813564010000000081111561096557600080fd5b82018360208201111561097757600080fd5b8035906020019184600183028401116401000000008311171561099957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506119e2945050505050565b3480156109e657600080fd5b50610361600480360360208110156109fd57600080fd5b810190602081018135640100000000811115610a1857600080fd5b820183602082011115610a2a57600080fd5b80359060200191846001830284011164010000000083111715610a4c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a9d945050505050565b348015610a9957600080fd5b50610539611bf0565b348015610aae57600080fd5b50610361611bf8565b348015610ac357600080fd5b50610539611c77565b348015610ad857600080fd5b5061033860048036036020811015610aef57600080fd5b810190602081018135640100000000811115610b0a57600080fd5b820183602082011115610b1c57600080fd5b80359060200191846001830284011164010000000083111715610b3e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e60945050505050565b61046f60048036036020811015610b9557600080fd5b503561229e565b348015610ba857600080fd5b5061046f60048036036040811015610bbf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156125e8565b348015610bf057600080fd5b5061046f60048036036080811015610c0757600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610c4f57600080fd5b820183602082011115610c6157600080fd5b80359060200191846001830284011164010000000083111715610c8357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612759945050505050565b348015610cd057600080fd5b5061033860048036036020811015610ce757600080fd5b50356127d1565b348015610cfa57600080fd5b5061046f60048036036040811015610d1157600080fd5b81359190810190604081016020820135640100000000811115610d3357600080fd5b820183602082011115610d4557600080fd5b80359060200191846001830284011164010000000083111715610d6757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506127e6945050505050565b348015610db457600080fd5b5061036160048036036020811015610dcb57600080fd5b5035612e46565b348015610dde57600080fd5b5061053961302f565b348015610df357600080fd5b50610539613035565b348015610e0857600080fd5b5061036161303b565b348015610e1d57600080fd5b5061033860048036036040811015610e3457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166130ba565b348015610e6557600080fd5b5061046f60048036036020811015610e7c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613198565b348015610ea557600080fd5b50610539613339565b348015610eba57600080fd5b5061046f60048036036020811015610ed157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613340565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205460ff165b919050565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b820191906000526020600020905b815481529060010190602001808311610fb657829003601f168201915b505050505090505b90565b6000610fe98261350a565b61103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180614b4f6030913960400191505060405180910390fd5b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006110728261150a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614b2a6025913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611118613517565b73ffffffffffffffffffffffffffffffffffffffff161480611146575061114681611141613517565b6130ba565b61119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180614a30603c913960400191505060405180910390fd5b6111a5838361351b565b505050565b6000600f6111b783611a9d565b6040518082805190602001908083835b6020831061120457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016111c7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205460ff16949350505050565b600061126560036135bb565b905090565b63606099f081565b600d5473ffffffffffffffffffffffffffffffffffffffff1690565b61129f611299613517565b826135c6565b6112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806148756035913960400191505060405180910390fd5b6111a58383836136b0565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040812061132e9083613880565b90505b92915050565b61401a81565b611345613517565b73ffffffffffffffffffffffffffffffffffffffff166113636119c6565b73ffffffffffffffffffffffffffffffffffffffff16146113e557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040514790339082156108fc029083906000818181858888f19350505050158015611414573d6000803e3d6000fd5b5050565b6111a583838360405180602001604052806000815250612759565b60008061144160038461388c565b509392505050565b6863345a083e94d8000081565b61145e613517565b73ffffffffffffffffffffffffffffffffffffffff1661147c6119c6565b73ffffffffffffffffffffffffffffffffffffffff16146114fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611507816138a8565b50565b6000611331826040518060600160405280602d8152602001614c3c602d9139600391906138bb565b604051806060016040528060408152602001614b7f6040913981565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b6000818152600e602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156116805780601f1061165557610100808354040283529160200191611680565b820191906000526020600020905b81548152906001019060200180831161166357829003601f168201915b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff82166116fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806147f2602e913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260409020611331906135bb565b611730613517565b73ffffffffffffffffffffffffffffffffffffffff1661174e6119c6565b73ffffffffffffffffffffffffffffffffffffffff16146117d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5415611898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806149476029913960400191505060405180910390fd5b63606099f042101561190b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f436f736d6f4d61736b733a20546f6f206561726c790000000000000000000000604482015290519081900360640190fd5b6119136138d2565b565b61191d613517565b73ffffffffffffffffffffffffffffffffffffffff1661193b6119c6565b73ffffffffffffffffffffffffffffffffffffffff16146119bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61150781613987565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6119ea613517565b73ffffffffffffffffffffffffffffffffffffffff16611a086119c6565b73ffffffffffffffffffffffffffffffffffffffff1614611a8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8051611414906013906020840190614737565b606060008290506000815167ffffffffffffffff81118015611abe57600080fd5b506040519080825280601f01601f191660200182016040528015611ae9576020820181803683370190505b50905060005b8251811015611441576041838281518110611b0657fe5b016020015160f81c10801590611b305750605a838281518110611b2557fe5b016020015160f81c11155b15611b9557828181518110611b4157fe5b602001015160f81c60f81b60f81c60200160f81b828281518110611b6157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be8565b828181518110611ba157fe5b602001015160f81c60f81b828281518110611bb857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600101611aef565b63604e24f081565b60088054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b600063604e24f0421015611cec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f4d61736b733a2073616c6520686173206e6f742073746172746564604482015290519081900360640190fd5b61401a611cf7611259565b10611d4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148aa6022913960400191505060405180910390fd5b6000611d57611259565b90506140198110611d755769d3c21bcecceda1000000915050610fdb565b6140178110611d915769152d02c7e14af6800000915050610fdb565b6140108110611dad5769021e19e0c9bab2400000915050610fdb565b613ffd8110611dc857683635c9adc5dea00000915050610fdb565b613e808110611de35768056bc75e2d63100000915050610fdb565b613a988110611dfd5767ebec21ee1da40000915050610fdb565b612af88110611e1757677ce66c50e2840000915050610fdb565b611b588110611e3157674563918244f40000915050610fdb565b610bb88110611e4b576729a2241af62c0000915050610fdb565b670de0b6b3a7640000915050610fdb565b5090565b600080829050600181511015611e7a576000915050610f24565b601981511115611e8e576000915050610f24565b80600081518110611e9b57fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f20000000000000000000000000000000000000000000000000000000000000001415611ef4576000915050610f24565b80600182510381518110611f0457fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f20000000000000000000000000000000000000000000000000000000000000001415611f5d576000915050610f24565b600081600081518110611f6c57fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016905060005b8251811015612293576000838281518110611faf57fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f20000000000000000000000000000000000000000000000000000000000000008114801561204857507f20000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008416145b1561205a576000945050505050610f24565b7f30000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216108015906120ee57507f39000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b15801561218c57507f41000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061218a57507f5a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b801561222957507f61000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061222757507f7a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b801561227757507f20000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821614155b15612289576000945050505050610f24565b9150600101611f98565b506001949350505050565b61401a6122a9611259565b106122ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148aa6022913960400191505060405180910390fd5b60008111612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806149706025913960400191505060405180910390fd5b60148111156123b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180614aef603b913960400191505060405180910390fd5b61401a6123c7826123c1611259565b9061399a565b111561243457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f436f736d6f4d61736b733a2045786365656473204d41585f535550504c590000604482015290519081900360640190fd5b3461244782612441611c77565b90613a0e565b1461249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614a6c602b913960400191505060405180910390fd5b60005b818110156125b45760006124b2611259565b905063606099f04210156124f857600081815260106020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6125023382613a81565b600d54604080517f12fc61dd00000000000000000000000000000000000000000000000000000000815269d3c21bcecceda10000006004820152905173ffffffffffffffffffffffffffffffffffffffff909216916312fc61dd916024808201926020929091908290030181600087803b15801561257f57600080fd5b505af1158015612593573d6000803e3d6000fd5b505050506040513d60208110156125a957600080fd5b5050506001016124a0565b50600c541580156125db575061401a6125cb611259565b14806125db575063606099f04210155b15611507576115076138d2565b6125f0613517565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f436f736d6f4d61736b733a20617070726f766520746f2063616c6c6572000000604482015290519081900360640190fd5b8060066000612697613517565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612706613517565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b61276a612764613517565b836135c6565b6127bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806148756035913960400191505060405180910390fd5b6127cb84848484613a9b565b50505050565b60009081526010602052604090205460ff1690565b60006127f18361150a565b90508073ffffffffffffffffffffffffffffffffffffffff16612812613517565b73ffffffffffffffffffffffffffffffffffffffff161461287e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614c136029913960400191505060405180910390fd5b61288782611e60565b15156001146128f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f4d61736b733a206e6f7420612076616c6964206e6577206e616d65604482015290519081900360640190fd5b6002600e600085815260200190815260200160002060405180828054600181600116156101000203166002900480156129675780601f10612945576101008083540402835291820191612967565b820191906000526020600020905b815481529060010190602001808311612953575b5050915050602060405180830381855afa158015612989573d6000803e3d6000fd5b5050506040513d602081101561299e57600080fd5b505160405183516002918591819060208401908083835b602083106129f257805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016129b5565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015612a4f573d6000803e3d6000fd5b5050506040513d6020811015612a6457600080fd5b50511415612abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614846602f913960400191505060405180910390fd5b612ac6826111aa565b15612b1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149026021913960400191505060405180910390fd5b601154604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526863345a083e94d800006044820152905173ffffffffffffffffffffffffffffffffffffffff909216916323b872dd916064808201926020929091908290030181600087803b158015612ba457600080fd5b505af1158015612bb8573d6000803e3d6000fd5b505050506040513d6020811015612bce57600080fd5b50506000838152600e602052604090205460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415612cd5576000838152600e602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001861615020190931692909204918201849004840281018401909452808452612cd59392830182828015612cc95780601f10612c9e57610100808354040283529160200191612cc9565b820191906000526020600020905b815481529060010190602001808311612cac57829003601f168201915b50505050506000613b07565b612ce0826001613b07565b6000838152600e602090815260409091208351612cff92850190614737565b50601154604080517f42966c680000000000000000000000000000000000000000000000000000000081526863345a083e94d800006004820152905173ffffffffffffffffffffffffffffffffffffffff909216916342966c68916024808201926020929091908290030181600087803b158015612d7c57600080fd5b505af1158015612d90573d6000803e3d6000fd5b505050506040513d6020811015612da657600080fd5b5050604080516020808252845182820152845186937f7e632a301794d8d4a81ea7e20f37d1947158d36e66403af04ba85dd194b66f1b9387939092839283019185019080838360005b83811015612e07578181015183820152602001612def565b50505050905090810190601f168015612e345780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b6060612e518261350a565b612ea6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614ac4602b913960400191505060405180910390fd5b6000612eb061154e565b905080612ebc84613bdd565b6040516020018083805190602001908083835b60208310612f0c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612ecf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b60208310612f9057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f53565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790527f2e6a736f6e000000000000000000000000000000000000000000000000000000920191825250604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5018152600590920190529695505050505050565b600c5481565b600b5481565b60138054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610fd35780601f10610fa857610100808354040283529160200191610fd3565b601254604080517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561313457600080fd5b505afa158015613148573d6000803e3d6000fd5b505050506040513d602081101561315e57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161415613186576001915050611331565b6131908484613d0a565b949350505050565b6131a0613517565b73ffffffffffffffffffffffffffffffffffffffff166131be6119c6565b73ffffffffffffffffffffffffffffffffffffffff161461324057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148206026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6201518081565b613348613517565b73ffffffffffffffffffffffffffffffffffffffff166133666119c6565b73ffffffffffffffffffffffffffffffffffffffff16146133e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600d5473ffffffffffffffffffffffffffffffffffffffff1615613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614be9602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166134c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614bbf602a913960400191505060405180910390fd5b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611331600383613d45565b3390565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906135758261150a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061133182613d51565b60006135d18261350a565b613626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806149b76030913960400191505060405180910390fd5b60006136318361150a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806136a057508373ffffffffffffffffffffffffffffffffffffffff1661368884610fde565b73ffffffffffffffffffffffffffffffffffffffff16145b80613190575061319081856130ba565b8273ffffffffffffffffffffffffffffffffffffffff166136d08261150a565b73ffffffffffffffffffffffffffffffffffffffff161461373c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614a97602d913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166137a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806149e76028913960400191505060405180910390fd5b6137b360008261351b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604090206137e29082613d55565b5073ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206138129082613d61565b5061381f60038284613d6d565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061132e8383613d90565b600080808061389b8686613e0e565b9097909650945050505050565b8051611414906009906020840190614737565b60006138c8848484613ea3565b90505b9392505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4301600b81905560408051918252517f1ebf104b139b44bd4c7fbbaf3a5f40960db3488203e805d3e4cfa0867f7fd4bf9181900360200190a1600b54614010904006600c81905561395057600c5461394c90600161399a565b600c555b600c5460408051918252517f7527e881a8a314f68a0941c7319ae764e91afbf6a0c93d179e74e9282c75b6e29181900360200190a1565b805161141490600a906020840190614737565b60008282018381101561132e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613a1d57506000611331565b82820282848281613a2a57fe5b041461132e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614a0f6021913960400191505060405180910390fd5b611414828260405180602001604052806000815250613f87565b613aa68484846136b0565b613ab284848484613ff3565b6127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806148cc6036913960400191505060405180910390fd5b80600f613b1384611a9d565b6040518082805190602001908083835b60208310613b6057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613b23565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490030190922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925550505050565b606081613c1e575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610f24565b8160005b8115613c3657600101600a82049150613c22565b60008167ffffffffffffffff81118015613c4f57600080fd5b506040519080825280601f01601f191660200182016040528015613c7a576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8315613d0157600a840660300160f81b82828060019003935081518110613cc757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613ca4565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b600061132e8383614203565b5490565b600061132e838361421b565b600061132e83836142ff565b60006138c8848473ffffffffffffffffffffffffffffffffffffffff8516614349565b81546000908210613dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806147d06022913960400191505060405180910390fd5b826000018281548110613dfb57fe5b9060005260206000200154905092915050565b815460009081908310613e6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149956022913960400191505060405180910390fd5b6000846000018481548110613e7d57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281613f58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f1d578181015183820152602001613f05565b50505050905090810190601f168015613f4a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110613f6b57fe5b9060005260206000209060020201600101549150509392505050565b613f9183836143e0565b613f9e6000848484613ff3565b6111a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806148cc6036913960400191505060405180910390fd5b60006140148473ffffffffffffffffffffffffffffffffffffffff16614547565b61402057506001613190565b60006141987f150b7a020000000000000000000000000000000000000000000000000000000061404e613517565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156140cf5781810151838201526020016140b7565b50505050905090810190601f1680156140fc5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603681526020016148cc6036913973ffffffffffffffffffffffffffffffffffffffff8816919061454d565b905060008180602001905160208110156141b157600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b600081815260018301602052604081205480156142f55783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061426c57fe5b906000526020600020015490508087600001848154811061428957fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806142b957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611331565b6000915050611331565b600061430b8383614203565b61434157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611331565b506000611331565b6000828152600184016020526040812054806143ae5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556138cb565b828560000160018303815481106143c157fe5b90600052602060002090600202016001018190555060009150506138cb565b73ffffffffffffffffffffffffffffffffffffffff821661444c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806149236024913960400191505060405180910390fd5b6144558161350a565b156144c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f4d61736b733a20746f6b656e20616c7265616479206d696e746564604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206144f09082613d61565b506144fd60038284613d6d565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b3b151590565b60606138c884846000858561456185614547565b6145cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061463557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016145f8565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614697576040519150601f19603f3d011682016040523d82523d6000602084013e61469c565b606091505b50915091506146ac8282866146b7565b979650505050505050565b606083156146c65750816138cb565b8251156146d65782518084602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152845160248401528451859391928392604401919085019080838360008315613f1d578181015183820152602001613f05565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261476d57600085556147b3565b82601f1061478657805160ff19168380011785556147b3565b828001600101855582156147b3579182015b828111156147b3578251825591602001919060010190614798565b50611e5c9291505b80821115611e5c57600081556001016147bb56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473436f736d6f4d61736b733a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f736d6f4d61736b733a206e6577206e616d652069732073616d65206173207468652063757272656e74206f6e65436f736d6f4d61736b733a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564436f736d6f4d61736b733a2073616c652068617320616c726561647920656e646564436f736d6f4d61736b733a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572436f736d6f4d61736b733a206e616d6520616c7265616479207265736572766564436f736d6f4d61736b733a206d696e7420746f20746865207a65726f2061646472657373436f736d6f4d61736b733a207374617274696e6720696e64657820697320616c726561647920736574436f736d6f4d61736b733a206e756d6265724f664d61736b732063616e6e6f742062652030456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473436f736d6f4d61736b733a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f4d61736b733a207472616e7366657220746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f736d6f4d61736b733a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c436f736d6f4d61736b733a2045746865722076616c75652073656e74206973206e6f7420636f7272656374436f736d6f4d61736b733a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e436f736d6f4d61736b733a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f4d61736b733a20596f75206d6179206e6f7420627579206d6f7265207468616e20323020436f736d6f4d61736b73206174206f6e6365436f736d6f4d61736b733a20617070726f76616c20746f2063757272656e74206f776e6572436f736d6f4d61736b733a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e63316334643732613363346661383732303264653235643637373130623436333331343236643666653639333262613466646363653665666662336664656665436f736d6f4d61736b733a20436f736d6f546f6b656e20697320746865207a65726f2061646472657373436f736d6f4d61736b733a20436f736d6f73546f6b656e2068617320616c726561647920736574746564436f736d6f4d61736b733a2063616c6c6572206973206e6f742074686520746f6b656e206f776e6572436f736d6f4d61736b733a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220158c2e627107ada0e4ee3253e82c3175e9d8f69b568d19b72348c351856e6e5264736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b9fdc13f7f747baedcc356e9da13ab883ffa719b000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
-----Decoded View---------------
Arg [0] : cmpAddress (address): 0xB9FDc13F7f747bAEdCc356e9Da13Ab883fFa719B
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b9fdc13f7f747baedcc356e9da13ab883ffa719b
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.