Overview
TokenID
398
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CosmoBugs
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 "./CosmoBugsERC721.sol"; interface IERC20BurnTransfer { function burn(uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } interface ICosmoBugs { 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 CosmoBugs contract * @dev Extends ERC721 Non-Fungible Token Standard basic implementation */ contract CosmoBugs is Ownable, CosmoBugsERC721, ICosmoBugs { using SafeMath for uint256; // This is the provenance record of all CosmoBugs artwork in existence uint256 public constant COSMO_PRICE = 1_000_000_000_000e18; uint256 public constant CMP_PRICE = 5_000e18; uint256 public constant NAME_CHANGE_PRICE = 1_830e18; uint256 public constant SECONDS_IN_A_DAY = 86400; uint256 public constant MAX_SUPPLY = 16410; string public constant PROVENANCE = "0a03c03e36aa3757228e9d185f794f25953c643110c8bb3eb5ef892d062b07ab"; uint256 public constant SALE_START_TIMESTAMP = 1623682800; // "2021-06-14T15:00:00.000Z" // Time after which CosmoBugs are randomized and allotted uint256 public constant REVEAL_TIMESTAMP = 1624892400; // "2021-06-28T15:00:00.000Z" uint256 public startingIndexBlock; uint256 public startingIndex; // tokens address public nftPower; address public constant tokenCosmo = 0x27cd7375478F189bdcF55616b088BE03d9c4339c; address public constant tokenCmp = 0xB9FDc13F7f747bAEdCc356e9Da13Ab883fFa719B; address public proxyRegistryAddress; string private _contractURI; // 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; event NameChange(uint256 indexed tokenId, string newName); event SetStartingIndexBlock(uint256 startingIndexBlock); event SetStartingIndex(uint256 startingIndex); constructor(address _nftPowerAddress, address _proxyRegistryAddress) public CosmoBugsERC721("CosmoBugs", "COSBUG") { nftPower = _nftPowerAddress; proxyRegistryAddress = _proxyRegistryAddress; _setURL("https://cosmobugs.com/"); _setBaseURI("https://cosmobugs.com/metadata/"); _contractURI = "https://cosmobugs.com/metadata/contract.json"; } 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, "CosmoBugs: sale has not started"); require(totalSupply() < MAX_SUPPLY, "CosmoBugs: sale has already ended"); uint256 currentSupply = totalSupply(); if (currentSupply >= 16409) { return 2_000_000e18; } else if (currentSupply >= 16407) { return 200_000e18; } else if (currentSupply >= 16400) { return 20_000e18; } else if (currentSupply >= 16381) { return 2_000e18; } else if (currentSupply >= 16000) { return 200e18; } else if (currentSupply >= 15000) { return 34e18; } else if (currentSupply >= 11000) { return 18e18; } else if (currentSupply >= 7000) { return 10e18; } else if (currentSupply >= 3000) { return 6e18; } else { return 2e18; } } /** * @dev Mints CosmoBugs */ function mint(uint256 numberOfMasks) public payable { require(totalSupply() < MAX_SUPPLY, "CosmoBugs: sale has already ended"); require(numberOfMasks > 0, "CosmoBugs: numberOfMasks cannot be 0"); require(numberOfMasks <= 20, "CosmoBugs: You may not buy more than 20 CosmoBugs at once"); require(totalSupply().add(numberOfMasks) <= MAX_SUPPLY, "CosmoBugs: Exceeds MAX_SUPPLY"); require(getPrice().mul(numberOfMasks) == msg.value, "CosmoBugs: 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); } if (startingIndex == 0 && (totalSupply() == MAX_SUPPLY || block.timestamp >= REVEAL_TIMESTAMP)) { _setStartingIndex(); } } function mintByCosmo(uint256 numberOfMasks) public { require(totalSupply() < MAX_SUPPLY, "CosmoBugs: sale has already ended"); require(numberOfMasks > 0, "CosmoBugs: numberOfMasks cannot be 0"); require(numberOfMasks <= 20, "CosmoBugs: You may not buy more than 20 CosmoBugs at once"); require(totalSupply().add(numberOfMasks) <= (MAX_SUPPLY - 10), "CosmoBugs: The last 10 masks can only be purchased for ETH"); uint256 purchaseAmount = COSMO_PRICE.mul(numberOfMasks); require( IERC20BurnTransfer(tokenCosmo).transferFrom(msg.sender, address(this), purchaseAmount), "CosmoBugs: Transfer COSMO amount exceeds allowance" ); for (uint256 i = 0; i < numberOfMasks; i++) { uint256 mintIndex = totalSupply(); if (block.timestamp < REVEAL_TIMESTAMP) { _mintedBeforeReveal[mintIndex] = true; } _safeMint(msg.sender, mintIndex); } if (startingIndex == 0 && (totalSupply() == MAX_SUPPLY || block.timestamp >= REVEAL_TIMESTAMP)) { _setStartingIndex(); } IERC20BurnTransfer(tokenCosmo).burn(purchaseAmount); } function mintByCmp(uint256 numberOfMasks) public { require(totalSupply() < MAX_SUPPLY, "CosmoBugs: sale has already ended"); require(numberOfMasks > 0, "CosmoBugs: numberOfMasks cannot be 0"); require(numberOfMasks <= 20, "CosmoBugs: You may not buy more than 20 CosmoBugs at once"); require(totalSupply().add(numberOfMasks) <= (MAX_SUPPLY - 10), "CosmoBugs: The last 10 masks can only be purchased for ETH"); uint256 purchaseAmount = CMP_PRICE.mul(numberOfMasks); require( IERC20BurnTransfer(tokenCmp).transferFrom(msg.sender, address(this), purchaseAmount), "CosmoBugs: Transfer CMP amount exceeds allowance" ); for (uint256 i = 0; i < numberOfMasks; i++) { uint256 mintIndex = totalSupply(); if (block.timestamp < REVEAL_TIMESTAMP) { _mintedBeforeReveal[mintIndex] = true; } _safeMint(msg.sender, mintIndex); } if (startingIndex == 0 && (totalSupply() == MAX_SUPPLY || block.timestamp >= REVEAL_TIMESTAMP)) { _setStartingIndex(); } IERC20BurnTransfer(tokenCmp).burn(purchaseAmount); } 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, "CosmoBugs: starting index is already set"); require(block.timestamp >= REVEAL_TIMESTAMP, "CosmoBugs: 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, "CosmoBugs: caller is not the token owner"); require(validateName(newName) == true, "CosmoBugs: not a valid new name"); require(sha256(bytes(newName)) != sha256(bytes(_tokenName[tokenId])), "CosmoBugs: new name is same as the current one"); require(isNameReserved(newName) == false, "CosmoBugs: name already reserved"); IERC20BurnTransfer(nftPower).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(nftPower).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 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 ICosmoBugsERC721 { // 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 CosmoBugsERC721 is Context, ICosmoBugsERC721 { 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), "CosmoBugs: balance query for the zero address"); return _holderTokens[owner].length(); } function ownerOf(uint256 tokenId) public view override returns (address) { return _tokenOwners.get(tokenId, "CosmoBugs: 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), "CosmoBugs: 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, "CosmoBugs: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "CosmoBugs: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "CosmoBugs: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "CosmoBugs: 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), "CosmoBugs: 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), "CosmoBugs: 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), "CosmoBugs: 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), "CosmoBugs: 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), "CosmoBugs: transfer to non ERC721Receiver implementer"); } function _mint(address to, uint256 tokenId) internal { require(to != address(0), "CosmoBugs: mint to the zero address"); require(!_exists(tokenId), "CosmoBugs: 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, "CosmoBugs: transfer of token that is not own"); require(to != address(0), "CosmoBugs: 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 ), "CosmoBugs: 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, "CosmoBugs: 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":"_nftPowerAddress","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":"CMP_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COSMO_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":[{"internalType":"uint256","name":"numberOfMasks","type":"uint256"}],"name":"mintByCmp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMasks","type":"uint256"}],"name":"mintByCosmo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPower","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"proxyRegistryAddress","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":"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":[],"name":"tokenCmp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCosmo","outputs":[{"internalType":"address","name":"","type":"address"}],"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
60806040523480156200001157600080fd5b50604051620056bc380380620056bc833981810160405260408110156200003757600080fd5b5080516020918201516040805180820182526009815268436f736d6f4275677360b81b8186015281518083019092526006825265434f5342554760d01b948201949094529192909160006200008b62000244565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508151620000ea906007906020850190620002f9565b50805162000100906008906020840190620002f9565b50620001136301ffc9a760e01b62000248565b620001256380ac58cd60e01b62000248565b62000137635b5e139f60e01b62000248565b62000149634992a2a160e11b62000248565b6200015b63780e9d6360e01b62000248565b5050600d80546001600160a01b038085166001600160a01b031992831617909255600e80549284169290911691909117905560408051808201909152601681527f68747470733a2f2f636f736d6f627567732e636f6d2f000000000000000000006020820152620001cc90620002d0565b60408051808201909152601f81527f68747470733a2f2f636f736d6f627567732e636f6d2f6d657461646174612f0060208201526200020b90620002e9565b6040518060600160405280602c815260200162005690602c913980516200023b91600f91602090910190620002f9565b505050620003a5565b3390565b6001600160e01b03198082161415620002a8576040805162461bcd60e51b815260206004820152601f60248201527f436f736d6f427567733a20696e76616c696420696e7465726661636520696400604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b8051620002e590600a906020840190620002f9565b5050565b8051620002e59060099060208401905b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200033157600085556200037c565b82601f106200034c57805160ff19168380011785556200037c565b828001600101855582156200037c579182015b828111156200037c5782518255916020019190600101906200035f565b506200038a9291506200038e565b5090565b5b808211156200038a57600081556001016200038f565b6152db80620003b56000396000f3fe6080604052600436106103295760003560e01c806377343408116101a5578063b88d4fde116100ec578063cb774d4711610095578063e8a3d4851161006f578063e8a3d48514610efb578063e985e9c514610f10578063f2fde38b14610f58578063f9cfa06f14610f9857610329565b8063cb774d4714610ebc578063cd7c032614610ed1578063e36d649814610ee657610329565b8063bd793307116100c6578063bd79330714610dae578063c39cbef114610dd8578063c87b56dd14610e9257610329565b8063b88d4fde14610c8f578063bc28d70214610d6f578063bd10fb3b14610d9957610329565b806395d89b411161014e578063a0712d6811610128578063a0712d6814610c15578063a22cb46514610c32578063b4673bf414610c7a57610329565b806395d89b4114610b3857806398d5fdca14610b4d5780639ffdb65a14610b6257610329565b8063938e3d7b1161017f578063938e3d7b146109bd5780639416b42314610a70578063946807fd14610b2357610329565b806377343408146108e05780637bd7edc2146109935780638da5cb5b146109a857610329565b8063413b5993116102745780636373a6b11161021d57806370a08231116101f757806370a0823114610861578063715018a6146108a157806374df39c9146108b657806375394829146108cb57610329565b80636373a6b11461080d5780636c0360eb146108225780636d5224181461083757610329565b806354b6f1611161024e57806354b6f1611461071b57806355f804b3146107305780636352211e146107e357610329565b8063413b59931461068c57806342842e0e146106a15780634f6ccce7146106f157610329565b806318160ddd116102d65780632f745c59116102b05780632f745c591461061c57806332cb6b0c146106625780633ccfd60b1461067757610329565b806318160ddd1461059057806318e20a38146105b757806323b872dd146105cc57610329565b80630896dfd6116103075780630896dfd61461046b578063095ea7b31461049757806315b56d10146104dd57610329565b806301ffc9a71461032e57806306fdde031461038e578063081812fc14610418575b600080fd5b34801561033a57600080fd5b5061037a6004803603602081101561035157600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610fad565b604080519115158252519081900360200190f35b34801561039a57600080fd5b506103a3610fe8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103dd5781810151838201526020016103c5565b50505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042457600080fd5b506104426004803603602081101561043b57600080fd5b503561109d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561047757600080fd5b506104956004803603602081101561048e57600080fd5b5035611126565b005b3480156104a357600080fd5b50610495600480360360408110156104ba57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356114f6565b3480156104e957600080fd5b5061037a6004803603602081101561050057600080fd5b81019060208101813564010000000081111561051b57600080fd5b82018360208201111561052d57600080fd5b8035906020019184600183028401116401000000008311171561054f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611639945050505050565b34801561059c57600080fd5b506105a56116e8565b60408051918252519081900360200190f35b3480156105c357600080fd5b506105a56116f9565b3480156105d857600080fd5b50610495600480360360608110156105ef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611701565b34801561062857600080fd5b506105a56004803603604081101561063f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611772565b34801561066e57600080fd5b506105a56117aa565b34801561068357600080fd5b506104956117b0565b34801561069857600080fd5b5061044261188b565b3480156106ad57600080fd5b50610495600480360360608110156106c457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356118a3565b3480156106fd57600080fd5b506105a56004803603602081101561071457600080fd5b50356118be565b34801561072757600080fd5b506105a56118d4565b34801561073c57600080fd5b506104956004803603602081101561075357600080fd5b81019060208101813564010000000081111561076e57600080fd5b82018360208201111561078057600080fd5b803590602001918460018302840111640100000000831117156107a257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118e1945050505050565b3480156107ef57600080fd5b506104426004803603602081101561080657600080fd5b5035611995565b34801561081957600080fd5b506103a36119bd565b34801561082e57600080fd5b506103a36119d9565b34801561084357600080fd5b506103a36004803603602081101561085a57600080fd5b5035611a58565b34801561086d57600080fd5b506105a56004803603602081101561088457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b17565b3480156108ad57600080fd5b50610495611bb3565b3480156108c257600080fd5b50610495611cca565b3480156108d757600080fd5b506105a5611da0565b3480156108ec57600080fd5b506104956004803603602081101561090357600080fd5b81019060208101813564010000000081111561091e57600080fd5b82018360208201111561093057600080fd5b8035906020019184600183028401116401000000008311171561095257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611dae945050505050565b34801561099f57600080fd5b506105a5611e5f565b3480156109b457600080fd5b50610442611e70565b3480156109c957600080fd5b50610495600480360360208110156109e057600080fd5b8101906020810181356401000000008111156109fb57600080fd5b820183602082011115610a0d57600080fd5b80359060200191846001830284011164010000000083111715610a2f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e8c945050505050565b348015610a7c57600080fd5b506103a360048036036020811015610a9357600080fd5b810190602081018135640100000000811115610aae57600080fd5b820183602082011115610ac057600080fd5b80359060200191846001830284011164010000000083111715610ae257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f47945050505050565b348015610b2f57600080fd5b506105a561209a565b348015610b4457600080fd5b506103a36120a2565b348015610b5957600080fd5b506105a5612121565b348015610b6e57600080fd5b5061037a60048036036020811015610b8557600080fd5b810190602081018135640100000000811115610ba057600080fd5b820183602082011115610bb257600080fd5b80359060200191846001830284011164010000000083111715610bd457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061230c945050505050565b61049560048036036020811015610c2b57600080fd5b503561274a565b348015610c3e57600080fd5b5061049560048036036040811015610c5557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156129e5565b348015610c8657600080fd5b50610442612b56565b348015610c9b57600080fd5b5061049560048036036080811015610cb257600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610cfa57600080fd5b820183602082011115610d0c57600080fd5b80359060200191846001830284011164010000000083111715610d2e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b6e945050505050565b348015610d7b57600080fd5b5061037a60048036036020811015610d9257600080fd5b5035612be0565b348015610da557600080fd5b50610442612bf5565b348015610dba57600080fd5b5061049560048036036020811015610dd157600080fd5b5035612c11565b348015610de457600080fd5b5061049560048036036040811015610dfb57600080fd5b81359190810190604081016020820135640100000000811115610e1d57600080fd5b820183602082011115610e2f57600080fd5b80359060200191846001830284011164010000000083111715610e5157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612fa8945050505050565b348015610e9e57600080fd5b506103a360048036036020811015610eb557600080fd5b503561361e565b348015610ec857600080fd5b506105a5613807565b348015610edd57600080fd5b5061044261380d565b348015610ef257600080fd5b506105a5613829565b348015610f0757600080fd5b506103a361382f565b348015610f1c57600080fd5b5061037a60048036036040811015610f3357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166138ae565b348015610f6457600080fd5b5061049560048036036020811015610f7b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661398c565b348015610fa457600080fd5b506105a5613b2d565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205460ff165b919050565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b820191906000526020600020905b81548152906001019060200180831161107557829003601f168201915b505050505090505b90565b60006110a882613b34565b6110fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614f40602f913960400191505060405180910390fd5b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61401a6111316116e8565b10611187576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b600081116111e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ee16024913960400191505060405180910390fd5b601481111561123a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150c46039913960400191505060405180910390fd5b61401061124f826112496116e8565b90613b41565b11156112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614f9d603a913960400191505060405180910390fd5b60006112bf6c0c9f2c9cd04674edea4000000083613bb5565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905290519192507327cd7375478f189bdcf55616b088be03d9c4339c916323b872dd916064808201926020929091908290030181600087803b15801561133c57600080fd5b505af1158015611350573d6000803e3d6000fd5b505050506040513d602081101561136657600080fd5b50516113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806152746032913960400191505060405180910390fd5b60005b8281101561142b5760006113d26116e8565b90506360d9e3f042101561141857600081815260126020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6114223382613c28565b506001016113c0565b50600c54158015611452575061401a6114426116e8565b148061145257506360d9e3f04210155b1561145f5761145f613c42565b7327cd7375478f189bdcf55616b088be03d9c4339c73ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156114c657600080fd5b505af11580156114da573d6000803e3d6000fd5b505050506040513d60208110156114f057600080fd5b50505050565b600061150182611995565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061512c6024913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166115a7613cf7565b73ffffffffffffffffffffffffffffffffffffffff1614806115d557506115d5816115d0613cf7565b6138ae565b61162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180614f05603b913960400191505060405180910390fd5b6116348383613cfb565b505050565b6000601161164683611f47565b6040518082805190602001908083835b6020831061169357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611656565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205460ff16949350505050565b60006116f46003613d9b565b905090565b6360d9e3f081565b61171261170c613cf7565b82613da6565b611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061502d6034913960400191505060405180910390fd5b611634838383613e90565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081206117a19083614060565b90505b92915050565b61401a81565b6117b8613cf7565b73ffffffffffffffffffffffffffffffffffffffff166117d6611e70565b73ffffffffffffffffffffffffffffffffffffffff161461185857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040514790339082156108fc029083906000818181858888f19350505050158015611887573d6000803e3d6000fd5b5050565b73b9fdc13f7f747baedcc356e9da13ab883ffa719b81565b61163483838360405180602001604052806000815250612b6e565b6000806118cc60038461406c565b509392505050565b6863345a083e94d8000081565b6118e9613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611907611e70565b73ffffffffffffffffffffffffffffffffffffffff161461198957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61199281614088565b50565b60006117a4826040518060600160405280602c8152602001614fd7602c91396003919061409b565b6040518060600160405280604081526020016150616040913981565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b60008181526010602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015611b0b5780601f10611ae057610100808354040283529160200191611b0b565b820191906000526020600020905b815481529060010190602001808311611aee57829003601f168201915b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff8216611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614e46602d913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206117a490613d9b565b611bbb613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611bd9611e70565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5415611d23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c36028913960400191505060405180910390fd5b6360d9e3f0421015611d9657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f736d6f427567733a20546f6f206561726c79000000000000000000000000604482015290519081900360640190fd5b611d9e613c42565b565b69010f0cf064dd5920000081565b611db6613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611dd4611e70565b73ffffffffffffffffffffffffffffffffffffffff1614611e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611992816140b2565b6c0c9f2c9cd04674edea4000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b611e94613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611eb2611e70565b73ffffffffffffffffffffffffffffffffffffffff1614611f3457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b805161188790600f906020840190614d61565b606060008290506000815167ffffffffffffffff81118015611f6857600080fd5b506040519080825280601f01601f191660200182016040528015611f93576020820181803683370190505b50905060005b82518110156118cc576041838281518110611fb057fe5b016020015160f81c10801590611fda5750605a838281518110611fcf57fe5b016020015160f81c11155b1561203f57828181518110611feb57fe5b602001015160f81c60f81b60f81c60200160f81b82828151811061200b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612092565b82818151811061204b57fe5b602001015160f81c60f81b82828151811061206257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600101611f99565b6360c76ef081565b60088054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b60006360c76ef042101561219657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f736d6f427567733a2073616c6520686173206e6f74207374617274656400604482015290519081900360640190fd5b61401a6121a16116e8565b106121f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b60006122016116e8565b90506140198110612220576a01a784379d99db4200000091505061109a565b614017811061223c57692a5a058fc295ed00000091505061109a565b61401081106122585769043c33c193756480000091505061109a565b613ffd811061227357686c6b935b8bbd40000091505061109a565b613e80811061228e57680ad78ebc5ac620000091505061109a565b613a9881106122a9576801d7d843dc3b48000091505061109a565b612af881106122c35767f9ccd8a1c508000091505061109a565b611b5881106122dd57678ac7230489e8000091505061109a565b610bb881106122f7576753444835ec58000091505061109a565b671bc16d674ec8000091505061109a565b5090565b600080829050600181511015612326576000915050610fe3565b60198151111561233a576000915050610fe3565b8060008151811061234757fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f200000000000000000000000000000000000000000000000000000000000000014156123a0576000915050610fe3565b806001825103815181106123b057fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f20000000000000000000000000000000000000000000000000000000000000001415612409576000915050610fe3565b60008160008151811061241857fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016905060005b825181101561273f57600083828151811061245b57fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f2000000000000000000000000000000000000000000000000000000000000000811480156124f457507f20000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008416145b15612506576000945050505050610fe3565b7f30000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061259a57507f39000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b15801561263857507f41000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061263657507f5a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b80156126d557507f61000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216108015906126d357507f7a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b801561272357507f20000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821614155b15612735576000945050505050610fe3565b9150600101612444565b506001949350505050565b61401a6127556116e8565b106127ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b60008111612804576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ee16024913960400191505060405180910390fd5b601481111561285e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150c46039913960400191505060405180910390fd5b61401a61286d826112496116e8565b11156128da57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f436f736d6f427567733a2045786365656473204d41585f535550504c59000000604482015290519081900360640190fd5b346128ed826128e7612121565b90613bb5565b14612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614e1c602a913960400191505060405180910390fd5b60005b818110156129b15760006129586116e8565b90506360d9e3f042101561299e57600081815260126020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6129a83382613c28565b50600101612946565b50600c541580156129d8575061401a6129c86116e8565b14806129d857506360d9e3f04210155b1561199257611992613c42565b6129ed613cf7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f436f736d6f427567733a20617070726f766520746f2063616c6c657200000000604482015290519081900360640190fd5b8060066000612a94613cf7565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612b03613cf7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b7327cd7375478f189bdcf55616b088be03d9c4339c81565b612b7f612b79613cf7565b83613da6565b612bd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061502d6034913960400191505060405180910390fd5b6114f0848484846140c5565b60009081526012602052604090205460ff1690565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b61401a612c1c6116e8565b10612c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b60008111612ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ee16024913960400191505060405180910390fd5b6014811115612d25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150c46039913960400191505060405180910390fd5b614010612d34826112496116e8565b1115612d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614f9d603a913960400191505060405180910390fd5b6000612da169010f0cf064dd5920000083613bb5565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052905191925073b9fdc13f7f747baedcc356e9da13ab883ffa719b916323b872dd916064808201926020929091908290030181600087803b158015612e1e57600080fd5b505af1158015612e32573d6000803e3d6000fd5b505050506040513d6020811015612e4857600080fd5b5051612e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806151936030913960400191505060405180910390fd5b60005b82811015612f0d576000612eb46116e8565b90506360d9e3f0421015612efa57600081815260126020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b612f043382613c28565b50600101612ea2565b50600c54158015612f34575061401a612f246116e8565b1480612f3457506360d9e3f04210155b15612f4157612f41613c42565b73b9fdc13f7f747baedcc356e9da13ab883ffa719b73ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156114c657600080fd5b6000612fb383611995565b90508073ffffffffffffffffffffffffffffffffffffffff16612fd4613cf7565b73ffffffffffffffffffffffffffffffffffffffff1614613040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524c6028913960400191505060405180910390fd5b6130498261230c565b15156001146130b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f736d6f427567733a206e6f7420612076616c6964206e6577206e616d6500604482015290519081900360640190fd5b60026010600085815260200190815260200160002060405180828054600181600116156101000203166002900480156131295780601f10613107576101008083540402835291820191613129565b820191906000526020600020905b815481529060010190602001808311613115575b5050915050602060405180830381855afa15801561314b573d6000803e3d6000fd5b5050506040513d602081101561316057600080fd5b505160405183516002918591819060208401908083835b602083106131b457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613177565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015613211573d6000803e3d6000fd5b5050506040513d602081101561322657600080fd5b5051141561327f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614f6f602e913960400191505060405180910390fd5b61328882611639565b156132f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f427567733a206e616d6520616c7265616479207265736572766564604482015290519081900360640190fd5b600d54604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526863345a083e94d800006044820152905173ffffffffffffffffffffffffffffffffffffffff909216916323b872dd916064808201926020929091908290030181600087803b15801561337c57600080fd5b505af1158015613390573d6000803e3d6000fd5b505050506040513d60208110156133a657600080fd5b505060008381526010602052604090205460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604156134ad5760008381526010602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018616150201909316929092049182018490048402810184019094528084526134ad93928301828280156134a15780601f10613476576101008083540402835291602001916134a1565b820191906000526020600020905b81548152906001019060200180831161348457829003601f168201915b50505050506000614131565b6134b8826001614131565b600083815260106020908152604090912083516134d792850190614d61565b50600d54604080517f42966c680000000000000000000000000000000000000000000000000000000081526863345a083e94d800006004820152905173ffffffffffffffffffffffffffffffffffffffff909216916342966c68916024808201926020929091908290030181600087803b15801561355457600080fd5b505af1158015613568573d6000803e3d6000fd5b505050506040513d602081101561357e57600080fd5b5050604080516020808252845182820152845186937f7e632a301794d8d4a81ea7e20f37d1947158d36e66403af04ba85dd194b66f1b9387939092839283019185019080838360005b838110156135df5781810151838201526020016135c7565b50505050905090810190601f16801561360c5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b606061362982613b34565b61367e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615003602a913960400191505060405180910390fd5b60006136886119d9565b90508061369484614207565b6040516020018083805190602001908083835b602083106136e457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016136a7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061376857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161372b565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790527f2e6a736f6e000000000000000000000000000000000000000000000000000000920191825250604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5018152600590920190529695505050505050565b600c5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b600e54604080517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561392857600080fd5b505afa15801561393c573d6000803e3d6000fd5b505050506040513d602081101561395257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561397a5760019150506117a4565b6139848484614334565b949350505050565b613994613cf7565b73ffffffffffffffffffffffffffffffffffffffff166139b2611e70565b73ffffffffffffffffffffffffffffffffffffffff1614613a3457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614e9a6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6201518081565b60006117a460038361436f565b6000828201838110156117a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613bc4575060006117a4565b82820282848281613bd157fe5b04146117a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151726021913960400191505060405180910390fd5b61188782826040518060200160405280600081525061437b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4301600b81905560408051918252517f1ebf104b139b44bd4c7fbbaf3a5f40960db3488203e805d3e4cfa0867f7fd4bf9181900360200190a1600b54614010904006600c819055613cc057600c54613cbc906001613b41565b600c555b600c5460408051918252517f7527e881a8a314f68a0941c7319ae764e91afbf6a0c93d179e74e9282c75b6e29181900360200190a1565b3390565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190613d5582611995565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117a4826143e7565b6000613db182613b34565b613e06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150fd602f913960400191505060405180910390fd5b6000613e1183611995565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613e8057508373ffffffffffffffffffffffffffffffffffffffff16613e688461109d565b73ffffffffffffffffffffffffffffffffffffffff16145b80613984575061398481856138ae565b8273ffffffffffffffffffffffffffffffffffffffff16613eb082611995565b73ffffffffffffffffffffffffffffffffffffffff1614613f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615220602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614e736027913960400191505060405180910390fd5b613f93600082613cfb565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020613fc290826143eb565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260409020613ff290826143f7565b50613fff60038284614403565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006117a18383614426565b600080808061407b86866144a4565b9097909650945050505050565b8051611887906009906020840190614d61565b60006140a8848484614539565b90505b9392505050565b805161188790600a906020840190614d61565b6140d0848484613e90565b6140dc8484848461461d565b6114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806151eb6035913960400191505060405180910390fd5b80601161413d84611f47565b6040518082805190602001908083835b6020831061418a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161414d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490030190922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925550505050565b606081614248575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610fe3565b8160005b811561426057600101600a8204915061424c565b60008167ffffffffffffffff8111801561427957600080fd5b506040519080825280601f01601f1916602001820160405280156142a4576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561432b57600a840660300160f81b828280600190039350815181106142f157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506142ce565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b60006117a1838361482d565b6143858383614845565b614392600084848461461d565b611634576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806151eb6035913960400191505060405180910390fd5b5490565b60006117a183836149ac565b60006117a18383614a90565b60006140a8848473ffffffffffffffffffffffffffffffffffffffff8516614ada565b81546000908210614482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614dfa6022913960400191505060405180910390fd5b82600001828154811061449157fe5b9060005260206000200154905092915050565b815460009081908310614502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806151506022913960400191505060405180910390fd5b600084600001848154811061451357fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816145ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145b357818101518382015260200161459b565b50505050905090810190601f1680156145e05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061460157fe5b9060005260206000209060020201600101549150509392505050565b600061463e8473ffffffffffffffffffffffffffffffffffffffff16614b71565b61464a57506001613984565b60006147c27f150b7a0200000000000000000000000000000000000000000000000000000000614678613cf7565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156146f95781810151838201526020016146e1565b50505050905090810190601f1680156147265780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603581526020016151eb6035913973ffffffffffffffffffffffffffffffffffffffff88169190614b77565b905060008180602001905160208110156147db57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b73ffffffffffffffffffffffffffffffffffffffff82166148b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150a16023913960400191505060405180910390fd5b6148ba81613b34565b1561492657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f736d6f427567733a20746f6b656e20616c7265616479206d696e74656400604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902061495590826143f7565b5061496260038284614403565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008181526001830160205260408120548015614a865783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80830191908101906000908790839081106149fd57fe5b9060005260206000200154905080876000018481548110614a1a57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614a4a57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506117a4565b60009150506117a4565b6000614a9c838361482d565b614ad2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556117a4565b5060006117a4565b600082815260018401602052604081205480614b3f5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556140ab565b82856000016001830381548110614b5257fe5b90600052602060002090600202016001018190555060009150506140ab565b3b151590565b60606140a8848460008585614b8b85614b71565b614bf657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614c5f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614cc1576040519150601f19603f3d011682016040523d82523d6000602084013e614cc6565b606091505b5091509150614cd6828286614ce1565b979650505050505050565b60608315614cf05750816140ab565b825115614d005782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156145b357818101518382015260200161459b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614d975760008555614ddd565b82601f10614db057805160ff1916838001178555614ddd565b82800160010185558215614ddd579182015b82811115614ddd578251825591602001919060010190614dc2565b506123089291505b808211156123085760008155600101614de556fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473436f736d6f427567733a2045746865722076616c75652073656e74206973206e6f7420636f7272656374436f736d6f427567733a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373436f736d6f427567733a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f736d6f427567733a2073616c652068617320616c726561647920656e646564436f736d6f427567733a206e756d6265724f664d61736b732063616e6e6f742062652030436f736d6f427567733a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c436f736d6f427567733a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a206e6577206e616d652069732073616d65206173207468652063757272656e74206f6e65436f736d6f427567733a20546865206c617374203130206d61736b732063616e206f6e6c792062652070757263686173656420666f7220455448436f736d6f427567733a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656430613033633033653336616133373537323238653964313835663739346632353935336336343331313063386262336562356566383932643036326230376162436f736d6f427567733a206d696e7420746f20746865207a65726f2061646472657373436f736d6f427567733a20596f75206d6179206e6f7420627579206d6f7265207468616e20323020436f736d6f42756773206174206f6e6365436f736d6f427567733a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a20617070726f76616c20746f2063757272656e74206f776e6572456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f736d6f427567733a205472616e7366657220434d5020616d6f756e74206578636565647320616c6c6f77616e6365436f736d6f427567733a207374617274696e6720696e64657820697320616c726561647920736574436f736d6f427567733a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572436f736d6f427567733a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e436f736d6f427567733a2063616c6c6572206973206e6f742074686520746f6b656e206f776e6572436f736d6f427567733a205472616e7366657220434f534d4f20616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220bd43f78b6eb95fd273e7d2ff51855d7900c567ae0fd1d7470e67117b6ac5364f64736f6c6343000706003368747470733a2f2f636f736d6f627567732e636f6d2f6d657461646174612f636f6e74726163742e6a736f6e000000000000000000000000d6319d0d2bc6d58066f61c1f82715564b31dd864000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode
0x6080604052600436106103295760003560e01c806377343408116101a5578063b88d4fde116100ec578063cb774d4711610095578063e8a3d4851161006f578063e8a3d48514610efb578063e985e9c514610f10578063f2fde38b14610f58578063f9cfa06f14610f9857610329565b8063cb774d4714610ebc578063cd7c032614610ed1578063e36d649814610ee657610329565b8063bd793307116100c6578063bd79330714610dae578063c39cbef114610dd8578063c87b56dd14610e9257610329565b8063b88d4fde14610c8f578063bc28d70214610d6f578063bd10fb3b14610d9957610329565b806395d89b411161014e578063a0712d6811610128578063a0712d6814610c15578063a22cb46514610c32578063b4673bf414610c7a57610329565b806395d89b4114610b3857806398d5fdca14610b4d5780639ffdb65a14610b6257610329565b8063938e3d7b1161017f578063938e3d7b146109bd5780639416b42314610a70578063946807fd14610b2357610329565b806377343408146108e05780637bd7edc2146109935780638da5cb5b146109a857610329565b8063413b5993116102745780636373a6b11161021d57806370a08231116101f757806370a0823114610861578063715018a6146108a157806374df39c9146108b657806375394829146108cb57610329565b80636373a6b11461080d5780636c0360eb146108225780636d5224181461083757610329565b806354b6f1611161024e57806354b6f1611461071b57806355f804b3146107305780636352211e146107e357610329565b8063413b59931461068c57806342842e0e146106a15780634f6ccce7146106f157610329565b806318160ddd116102d65780632f745c59116102b05780632f745c591461061c57806332cb6b0c146106625780633ccfd60b1461067757610329565b806318160ddd1461059057806318e20a38146105b757806323b872dd146105cc57610329565b80630896dfd6116103075780630896dfd61461046b578063095ea7b31461049757806315b56d10146104dd57610329565b806301ffc9a71461032e57806306fdde031461038e578063081812fc14610418575b600080fd5b34801561033a57600080fd5b5061037a6004803603602081101561035157600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610fad565b604080519115158252519081900360200190f35b34801561039a57600080fd5b506103a3610fe8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103dd5781810151838201526020016103c5565b50505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042457600080fd5b506104426004803603602081101561043b57600080fd5b503561109d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561047757600080fd5b506104956004803603602081101561048e57600080fd5b5035611126565b005b3480156104a357600080fd5b50610495600480360360408110156104ba57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356114f6565b3480156104e957600080fd5b5061037a6004803603602081101561050057600080fd5b81019060208101813564010000000081111561051b57600080fd5b82018360208201111561052d57600080fd5b8035906020019184600183028401116401000000008311171561054f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611639945050505050565b34801561059c57600080fd5b506105a56116e8565b60408051918252519081900360200190f35b3480156105c357600080fd5b506105a56116f9565b3480156105d857600080fd5b50610495600480360360608110156105ef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611701565b34801561062857600080fd5b506105a56004803603604081101561063f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611772565b34801561066e57600080fd5b506105a56117aa565b34801561068357600080fd5b506104956117b0565b34801561069857600080fd5b5061044261188b565b3480156106ad57600080fd5b50610495600480360360608110156106c457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356118a3565b3480156106fd57600080fd5b506105a56004803603602081101561071457600080fd5b50356118be565b34801561072757600080fd5b506105a56118d4565b34801561073c57600080fd5b506104956004803603602081101561075357600080fd5b81019060208101813564010000000081111561076e57600080fd5b82018360208201111561078057600080fd5b803590602001918460018302840111640100000000831117156107a257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506118e1945050505050565b3480156107ef57600080fd5b506104426004803603602081101561080657600080fd5b5035611995565b34801561081957600080fd5b506103a36119bd565b34801561082e57600080fd5b506103a36119d9565b34801561084357600080fd5b506103a36004803603602081101561085a57600080fd5b5035611a58565b34801561086d57600080fd5b506105a56004803603602081101561088457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b17565b3480156108ad57600080fd5b50610495611bb3565b3480156108c257600080fd5b50610495611cca565b3480156108d757600080fd5b506105a5611da0565b3480156108ec57600080fd5b506104956004803603602081101561090357600080fd5b81019060208101813564010000000081111561091e57600080fd5b82018360208201111561093057600080fd5b8035906020019184600183028401116401000000008311171561095257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611dae945050505050565b34801561099f57600080fd5b506105a5611e5f565b3480156109b457600080fd5b50610442611e70565b3480156109c957600080fd5b50610495600480360360208110156109e057600080fd5b8101906020810181356401000000008111156109fb57600080fd5b820183602082011115610a0d57600080fd5b80359060200191846001830284011164010000000083111715610a2f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611e8c945050505050565b348015610a7c57600080fd5b506103a360048036036020811015610a9357600080fd5b810190602081018135640100000000811115610aae57600080fd5b820183602082011115610ac057600080fd5b80359060200191846001830284011164010000000083111715610ae257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611f47945050505050565b348015610b2f57600080fd5b506105a561209a565b348015610b4457600080fd5b506103a36120a2565b348015610b5957600080fd5b506105a5612121565b348015610b6e57600080fd5b5061037a60048036036020811015610b8557600080fd5b810190602081018135640100000000811115610ba057600080fd5b820183602082011115610bb257600080fd5b80359060200191846001830284011164010000000083111715610bd457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061230c945050505050565b61049560048036036020811015610c2b57600080fd5b503561274a565b348015610c3e57600080fd5b5061049560048036036040811015610c5557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156129e5565b348015610c8657600080fd5b50610442612b56565b348015610c9b57600080fd5b5061049560048036036080811015610cb257600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359190810190608081016060820135640100000000811115610cfa57600080fd5b820183602082011115610d0c57600080fd5b80359060200191846001830284011164010000000083111715610d2e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b6e945050505050565b348015610d7b57600080fd5b5061037a60048036036020811015610d9257600080fd5b5035612be0565b348015610da557600080fd5b50610442612bf5565b348015610dba57600080fd5b5061049560048036036020811015610dd157600080fd5b5035612c11565b348015610de457600080fd5b5061049560048036036040811015610dfb57600080fd5b81359190810190604081016020820135640100000000811115610e1d57600080fd5b820183602082011115610e2f57600080fd5b80359060200191846001830284011164010000000083111715610e5157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612fa8945050505050565b348015610e9e57600080fd5b506103a360048036036020811015610eb557600080fd5b503561361e565b348015610ec857600080fd5b506105a5613807565b348015610edd57600080fd5b5061044261380d565b348015610ef257600080fd5b506105a5613829565b348015610f0757600080fd5b506103a361382f565b348015610f1c57600080fd5b5061037a60048036036040811015610f3357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166138ae565b348015610f6457600080fd5b5061049560048036036020811015610f7b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661398c565b348015610fa457600080fd5b506105a5613b2d565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205460ff165b919050565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b820191906000526020600020905b81548152906001019060200180831161107557829003601f168201915b505050505090505b90565b60006110a882613b34565b6110fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180614f40602f913960400191505060405180910390fd5b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61401a6111316116e8565b10611187576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b600081116111e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ee16024913960400191505060405180910390fd5b601481111561123a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150c46039913960400191505060405180910390fd5b61401061124f826112496116e8565b90613b41565b11156112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614f9d603a913960400191505060405180910390fd5b60006112bf6c0c9f2c9cd04674edea4000000083613bb5565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905290519192507327cd7375478f189bdcf55616b088be03d9c4339c916323b872dd916064808201926020929091908290030181600087803b15801561133c57600080fd5b505af1158015611350573d6000803e3d6000fd5b505050506040513d602081101561136657600080fd5b50516113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806152746032913960400191505060405180910390fd5b60005b8281101561142b5760006113d26116e8565b90506360d9e3f042101561141857600081815260126020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6114223382613c28565b506001016113c0565b50600c54158015611452575061401a6114426116e8565b148061145257506360d9e3f04210155b1561145f5761145f613c42565b7327cd7375478f189bdcf55616b088be03d9c4339c73ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156114c657600080fd5b505af11580156114da573d6000803e3d6000fd5b505050506040513d60208110156114f057600080fd5b50505050565b600061150182611995565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061512c6024913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166115a7613cf7565b73ffffffffffffffffffffffffffffffffffffffff1614806115d557506115d5816115d0613cf7565b6138ae565b61162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180614f05603b913960400191505060405180910390fd5b6116348383613cfb565b505050565b6000601161164683611f47565b6040518082805190602001908083835b6020831061169357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611656565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205460ff16949350505050565b60006116f46003613d9b565b905090565b6360d9e3f081565b61171261170c613cf7565b82613da6565b611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061502d6034913960400191505060405180910390fd5b611634838383613e90565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604081206117a19083614060565b90505b92915050565b61401a81565b6117b8613cf7565b73ffffffffffffffffffffffffffffffffffffffff166117d6611e70565b73ffffffffffffffffffffffffffffffffffffffff161461185857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040514790339082156108fc029083906000818181858888f19350505050158015611887573d6000803e3d6000fd5b5050565b73b9fdc13f7f747baedcc356e9da13ab883ffa719b81565b61163483838360405180602001604052806000815250612b6e565b6000806118cc60038461406c565b509392505050565b6863345a083e94d8000081565b6118e9613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611907611e70565b73ffffffffffffffffffffffffffffffffffffffff161461198957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61199281614088565b50565b60006117a4826040518060600160405280602c8152602001614fd7602c91396003919061409b565b6040518060600160405280604081526020016150616040913981565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b60008181526010602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600186161502019093169290920491820184900484028101840190945280845260609392830182828015611b0b5780601f10611ae057610100808354040283529160200191611b0b565b820191906000526020600020905b815481529060010190602001808311611aee57829003601f168201915b50505050509050919050565b600073ffffffffffffffffffffffffffffffffffffffff8216611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614e46602d913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090206117a490613d9b565b611bbb613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611bd9611e70565b73ffffffffffffffffffffffffffffffffffffffff1614611c5b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5415611d23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c36028913960400191505060405180910390fd5b6360d9e3f0421015611d9657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f736d6f427567733a20546f6f206561726c79000000000000000000000000604482015290519081900360640190fd5b611d9e613c42565b565b69010f0cf064dd5920000081565b611db6613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611dd4611e70565b73ffffffffffffffffffffffffffffffffffffffff1614611e5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611992816140b2565b6c0c9f2c9cd04674edea4000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b611e94613cf7565b73ffffffffffffffffffffffffffffffffffffffff16611eb2611e70565b73ffffffffffffffffffffffffffffffffffffffff1614611f3457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b805161188790600f906020840190614d61565b606060008290506000815167ffffffffffffffff81118015611f6857600080fd5b506040519080825280601f01601f191660200182016040528015611f93576020820181803683370190505b50905060005b82518110156118cc576041838281518110611fb057fe5b016020015160f81c10801590611fda5750605a838281518110611fcf57fe5b016020015160f81c11155b1561203f57828181518110611feb57fe5b602001015160f81c60f81b60f81c60200160f81b82828151811061200b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612092565b82818151811061204b57fe5b602001015160f81c60f81b82828151811061206257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600101611f99565b6360c76ef081565b60088054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b60006360c76ef042101561219657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f736d6f427567733a2073616c6520686173206e6f74207374617274656400604482015290519081900360640190fd5b61401a6121a16116e8565b106121f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b60006122016116e8565b90506140198110612220576a01a784379d99db4200000091505061109a565b614017811061223c57692a5a058fc295ed00000091505061109a565b61401081106122585769043c33c193756480000091505061109a565b613ffd811061227357686c6b935b8bbd40000091505061109a565b613e80811061228e57680ad78ebc5ac620000091505061109a565b613a9881106122a9576801d7d843dc3b48000091505061109a565b612af881106122c35767f9ccd8a1c508000091505061109a565b611b5881106122dd57678ac7230489e8000091505061109a565b610bb881106122f7576753444835ec58000091505061109a565b671bc16d674ec8000091505061109a565b5090565b600080829050600181511015612326576000915050610fe3565b60198151111561233a576000915050610fe3565b8060008151811061234757fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f200000000000000000000000000000000000000000000000000000000000000014156123a0576000915050610fe3565b806001825103815181106123b057fe5b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f20000000000000000000000000000000000000000000000000000000000000001415612409576000915050610fe3565b60008160008151811061241857fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016905060005b825181101561273f57600083828151811061245b57fe5b01602001517fff000000000000000000000000000000000000000000000000000000000000001690507f2000000000000000000000000000000000000000000000000000000000000000811480156124f457507f20000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008416145b15612506576000945050505050610fe3565b7f30000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061259a57507f39000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b15801561263857507f41000000000000000000000000000000000000000000000000000000000000007fff0000000000000000000000000000000000000000000000000000000000000082161080159061263657507f5a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b80156126d557507f61000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216108015906126d357507f7a000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821611155b155b801561272357507f20000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821614155b15612735576000945050505050610fe3565b9150600101612444565b506001949350505050565b61401a6127556116e8565b106127ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b60008111612804576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ee16024913960400191505060405180910390fd5b601481111561285e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150c46039913960400191505060405180910390fd5b61401a61286d826112496116e8565b11156128da57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f436f736d6f427567733a2045786365656473204d41585f535550504c59000000604482015290519081900360640190fd5b346128ed826128e7612121565b90613bb5565b14612943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614e1c602a913960400191505060405180910390fd5b60005b818110156129b15760006129586116e8565b90506360d9e3f042101561299e57600081815260126020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b6129a83382613c28565b50600101612946565b50600c541580156129d8575061401a6129c86116e8565b14806129d857506360d9e3f04210155b1561199257611992613c42565b6129ed613cf7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f436f736d6f427567733a20617070726f766520746f2063616c6c657200000000604482015290519081900360640190fd5b8060066000612a94613cf7565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612b03613cf7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b7327cd7375478f189bdcf55616b088be03d9c4339c81565b612b7f612b79613cf7565b83613da6565b612bd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061502d6034913960400191505060405180910390fd5b6114f0848484846140c5565b60009081526012602052604090205460ff1690565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b61401a612c1c6116e8565b10612c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ec06021913960400191505060405180910390fd5b60008111612ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614ee16024913960400191505060405180910390fd5b6014811115612d25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806150c46039913960400191505060405180910390fd5b614010612d34826112496116e8565b1115612d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614f9d603a913960400191505060405180910390fd5b6000612da169010f0cf064dd5920000083613bb5565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052905191925073b9fdc13f7f747baedcc356e9da13ab883ffa719b916323b872dd916064808201926020929091908290030181600087803b158015612e1e57600080fd5b505af1158015612e32573d6000803e3d6000fd5b505050506040513d6020811015612e4857600080fd5b5051612e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806151936030913960400191505060405180910390fd5b60005b82811015612f0d576000612eb46116e8565b90506360d9e3f0421015612efa57600081815260126020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b612f043382613c28565b50600101612ea2565b50600c54158015612f34575061401a612f246116e8565b1480612f3457506360d9e3f04210155b15612f4157612f41613c42565b73b9fdc13f7f747baedcc356e9da13ab883ffa719b73ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156114c657600080fd5b6000612fb383611995565b90508073ffffffffffffffffffffffffffffffffffffffff16612fd4613cf7565b73ffffffffffffffffffffffffffffffffffffffff1614613040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061524c6028913960400191505060405180910390fd5b6130498261230c565b15156001146130b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f736d6f427567733a206e6f7420612076616c6964206e6577206e616d6500604482015290519081900360640190fd5b60026010600085815260200190815260200160002060405180828054600181600116156101000203166002900480156131295780601f10613107576101008083540402835291820191613129565b820191906000526020600020905b815481529060010190602001808311613115575b5050915050602060405180830381855afa15801561314b573d6000803e3d6000fd5b5050506040513d602081101561316057600080fd5b505160405183516002918591819060208401908083835b602083106131b457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613177565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015613211573d6000803e3d6000fd5b5050506040513d602081101561322657600080fd5b5051141561327f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614f6f602e913960400191505060405180910390fd5b61328882611639565b156132f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f436f736d6f427567733a206e616d6520616c7265616479207265736572766564604482015290519081900360640190fd5b600d54604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526863345a083e94d800006044820152905173ffffffffffffffffffffffffffffffffffffffff909216916323b872dd916064808201926020929091908290030181600087803b15801561337c57600080fd5b505af1158015613390573d6000803e3d6000fd5b505050506040513d60208110156133a657600080fd5b505060008381526010602052604090205460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604156134ad5760008381526010602090815260409182902080548351601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018616150201909316929092049182018490048402810184019094528084526134ad93928301828280156134a15780601f10613476576101008083540402835291602001916134a1565b820191906000526020600020905b81548152906001019060200180831161348457829003601f168201915b50505050506000614131565b6134b8826001614131565b600083815260106020908152604090912083516134d792850190614d61565b50600d54604080517f42966c680000000000000000000000000000000000000000000000000000000081526863345a083e94d800006004820152905173ffffffffffffffffffffffffffffffffffffffff909216916342966c68916024808201926020929091908290030181600087803b15801561355457600080fd5b505af1158015613568573d6000803e3d6000fd5b505050506040513d602081101561357e57600080fd5b5050604080516020808252845182820152845186937f7e632a301794d8d4a81ea7e20f37d1947158d36e66403af04ba85dd194b66f1b9387939092839283019185019080838360005b838110156135df5781810151838201526020016135c7565b50505050905090810190601f16801561360c5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b606061362982613b34565b61367e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615003602a913960400191505060405180910390fd5b60006136886119d9565b90508061369484614207565b6040516020018083805190602001908083835b602083106136e457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016136a7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905285519190930192850191508083835b6020831061376857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161372b565b5181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990911692169190911790527f2e6a736f6e000000000000000000000000000000000000000000000000000000920191825250604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5018152600590920190529695505050505050565b600c5481565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600f8054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110925780601f1061106757610100808354040283529160200191611092565b600e54604080517fc455279100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561392857600080fd5b505afa15801561393c573d6000803e3d6000fd5b505050506040513d602081101561395257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561397a5760019150506117a4565b6139848484614334565b949350505050565b613994613cf7565b73ffffffffffffffffffffffffffffffffffffffff166139b2611e70565b73ffffffffffffffffffffffffffffffffffffffff1614613a3457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116613aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614e9a6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6201518081565b60006117a460038361436f565b6000828201838110156117a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082613bc4575060006117a4565b82820282848281613bd157fe5b04146117a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806151726021913960400191505060405180910390fd5b61188782826040518060200160405280600081525061437b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4301600b81905560408051918252517f1ebf104b139b44bd4c7fbbaf3a5f40960db3488203e805d3e4cfa0867f7fd4bf9181900360200190a1600b54614010904006600c819055613cc057600c54613cbc906001613b41565b600c555b600c5460408051918252517f7527e881a8a314f68a0941c7319ae764e91afbf6a0c93d179e74e9282c75b6e29181900360200190a1565b3390565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190613d5582611995565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117a4826143e7565b6000613db182613b34565b613e06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806150fd602f913960400191505060405180910390fd5b6000613e1183611995565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613e8057508373ffffffffffffffffffffffffffffffffffffffff16613e688461109d565b73ffffffffffffffffffffffffffffffffffffffff16145b80613984575061398481856138ae565b8273ffffffffffffffffffffffffffffffffffffffff16613eb082611995565b73ffffffffffffffffffffffffffffffffffffffff1614613f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615220602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180614e736027913960400191505060405180910390fd5b613f93600082613cfb565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020613fc290826143eb565b5073ffffffffffffffffffffffffffffffffffffffff82166000908152600260205260409020613ff290826143f7565b50613fff60038284614403565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006117a18383614426565b600080808061407b86866144a4565b9097909650945050505050565b8051611887906009906020840190614d61565b60006140a8848484614539565b90505b9392505050565b805161188790600a906020840190614d61565b6140d0848484613e90565b6140dc8484848461461d565b6114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806151eb6035913960400191505060405180910390fd5b80601161413d84611f47565b6040518082805190602001908083835b6020831061418a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161414d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199092169116179052920194855250604051938490030190922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925550505050565b606081614248575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610fe3565b8160005b811561426057600101600a8204915061424c565b60008167ffffffffffffffff8111801561427957600080fd5b506040519080825280601f01601f1916602001820160405280156142a4576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561432b57600a840660300160f81b828280600190039350815181106142f157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506142ce565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b60006117a1838361482d565b6143858383614845565b614392600084848461461d565b611634576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806151eb6035913960400191505060405180910390fd5b5490565b60006117a183836149ac565b60006117a18383614a90565b60006140a8848473ffffffffffffffffffffffffffffffffffffffff8516614ada565b81546000908210614482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614dfa6022913960400191505060405180910390fd5b82600001828154811061449157fe5b9060005260206000200154905092915050565b815460009081908310614502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806151506022913960400191505060405180910390fd5b600084600001848154811061451357fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816145ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145b357818101518382015260200161459b565b50505050905090810190601f1680156145e05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061460157fe5b9060005260206000209060020201600101549150509392505050565b600061463e8473ffffffffffffffffffffffffffffffffffffffff16614b71565b61464a57506001613984565b60006147c27f150b7a0200000000000000000000000000000000000000000000000000000000614678613cf7565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156146f95781810151838201526020016146e1565b50505050905090810190601f1680156147265780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603581526020016151eb6035913973ffffffffffffffffffffffffffffffffffffffff88169190614b77565b905060008180602001905160208110156147db57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b73ffffffffffffffffffffffffffffffffffffffff82166148b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150a16023913960400191505060405180910390fd5b6148ba81613b34565b1561492657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f736d6f427567733a20746f6b656e20616c7265616479206d696e74656400604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902061495590826143f7565b5061496260038284614403565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008181526001830160205260408120548015614a865783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80830191908101906000908790839081106149fd57fe5b9060005260206000200154905080876000018481548110614a1a57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614a4a57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506117a4565b60009150506117a4565b6000614a9c838361482d565b614ad2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556117a4565b5060006117a4565b600082815260018401602052604081205480614b3f5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556140ab565b82856000016001830381548110614b5257fe5b90600052602060002090600202016001018190555060009150506140ab565b3b151590565b60606140a8848460008585614b8b85614b71565b614bf657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614c5f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614cc1576040519150601f19603f3d011682016040523d82523d6000602084013e614cc6565b606091505b5091509150614cd6828286614ce1565b979650505050505050565b60608315614cf05750816140ab565b825115614d005782518084602001fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528451602484015284518593919283926044019190850190808383600083156145b357818101518382015260200161459b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614d975760008555614ddd565b82601f10614db057805160ff1916838001178555614ddd565b82800160010185558215614ddd579182015b82811115614ddd578251825591602001919060010190614dc2565b506123089291505b808211156123085760008155600101614de556fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473436f736d6f427567733a2045746865722076616c75652073656e74206973206e6f7420636f7272656374436f736d6f427567733a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373436f736d6f427567733a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373436f736d6f427567733a2073616c652068617320616c726561647920656e646564436f736d6f427567733a206e756d6265724f664d61736b732063616e6e6f742062652030436f736d6f427567733a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c436f736d6f427567733a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a206e6577206e616d652069732073616d65206173207468652063757272656e74206f6e65436f736d6f427567733a20546865206c617374203130206d61736b732063616e206f6e6c792062652070757263686173656420666f7220455448436f736d6f427567733a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656430613033633033653336616133373537323238653964313835663739346632353935336336343331313063386262336562356566383932643036326230376162436f736d6f427567733a206d696e7420746f20746865207a65726f2061646472657373436f736d6f427567733a20596f75206d6179206e6f7420627579206d6f7265207468616e20323020436f736d6f42756773206174206f6e6365436f736d6f427567733a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e436f736d6f427567733a20617070726f76616c20746f2063757272656e74206f776e6572456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f736d6f427567733a205472616e7366657220434d5020616d6f756e74206578636565647320616c6c6f77616e6365436f736d6f427567733a207374617274696e6720696e64657820697320616c726561647920736574436f736d6f427567733a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572436f736d6f427567733a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e436f736d6f427567733a2063616c6c6572206973206e6f742074686520746f6b656e206f776e6572436f736d6f427567733a205472616e7366657220434f534d4f20616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220bd43f78b6eb95fd273e7d2ff51855d7900c567ae0fd1d7470e67117b6ac5364f64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d6319d0d2bc6d58066f61c1f82715564b31dd864000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
-----Decoded View---------------
Arg [0] : _nftPowerAddress (address): 0xd6319D0d2Bc6D58066F61C1f82715564B31DD864
Arg [1] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d6319d0d2bc6d58066f61c1f82715564b31dd864
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Loading...
Loading
Loading...
Loading
[ 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.