Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,024 Evoh-CRV
Holders
703
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
0 Evoh-CRVLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EvohClaimable
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-07 */ // SPDX-License-Identifier: NONE pragma solidity 0.8.3; // Part: ERC721TokenReceiver /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02. interface ERC721TokenReceiver { /// @notice Handle the receipt of an NFT /// @dev The ERC721 smart contract calls this function on the recipient /// after a `transfer`. This function MAY throw to revert and reject the /// transfer. Return of other than the magic value MUST result in the /// transaction being reverted. /// Note: the contract address is always the message sender. /// @param _operator The address which called `safeTransferFrom` function /// @param _from The address which previously owned the token /// @param _tokenId The NFT identifier which is being transferred /// @param _data Additional data with no specified format /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` /// unless throwing function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns(bytes4); } // Part: EvohERC721 contract EvohERC721 { string public name; string public symbol; uint256 public totalSupply; mapping(bytes4 => bool) public supportsInterface; struct UserData { uint256 balance; uint256[4] ownership; } mapping(address => UserData) userData; address[1024] tokenOwners; address[1024] tokenApprovals; mapping(uint256 => string) tokenURIs; mapping (address => mapping (address => bool)) private operatorApprovals; bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; 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); constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; supportsInterface[_INTERFACE_ID_ERC165] = true; supportsInterface[_INTERFACE_ID_ERC721] = true; supportsInterface[_INTERFACE_ID_ERC721_METADATA] = true; supportsInterface[_INTERFACE_ID_ERC721_ENUMERABLE] = true; } /// @notice Count all NFTs assigned to an owner function balanceOf(address _owner) external view returns (uint256) { require(_owner != address(0), "Query for zero address"); return userData[_owner].balance; } /// @notice Find the owner of an NFT function ownerOf(uint256 tokenId) public view returns (address) { if (tokenId < 1024) { address owner = tokenOwners[tokenId]; if (owner != address(0)) return owner; } revert("Query for nonexistent tokenId"); } function _transfer(address _from, address _to, uint256 _tokenId) internal { require(_from != address(0)); require(_to != address(0)); address owner = ownerOf(_tokenId); if ( msg.sender == owner || getApproved(_tokenId) == msg.sender || isApprovedForAll(owner, msg.sender) ) { delete tokenApprovals[_tokenId]; removeOwnership(_from, _tokenId); addOwnership(_to, _tokenId); emit Transfer(_from, _to, _tokenId); return; } revert("Caller is not owner nor approved"); } /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param _data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public { _transfer(_from, _to, _tokenId); require(_checkOnERC721Received(_from, _to, _tokenId, _data), "Transfer to non ERC721 receiver"); } function removeOwnership(address _owner, uint256 _tokenId) internal { UserData storage data = userData[_owner]; data.balance -= 1; uint256 idx = _tokenId / 256; uint256 bitfield = data.ownership[idx]; data.ownership[idx] = bitfield & ~(uint256(1) << (_tokenId % 256)); } function addOwnership(address _owner, uint256 _tokenId) internal { tokenOwners[_tokenId] = _owner; UserData storage data = userData[_owner]; data.balance += 1; uint256 idx = _tokenId / 256; uint256 bitfield = data.ownership[idx]; data.ownership[idx] = bitfield | uint256(1) << (_tokenId % 256); } /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external { safeTransferFrom(_from, _to, _tokenId, bytes("")); } /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external { _transfer(_from, _to, _tokenId); } /// @notice Change or reaffirm the approved address for an NFT function approve(address approved, uint256 tokenId) public { address owner = ownerOf(tokenId); require(msg.sender == owner || isApprovedForAll(owner, msg.sender), "Not owner nor approved for all" ); tokenApprovals[tokenId] = approved; emit Approval(owner, approved, tokenId); } /// @notice Get the approved address for a single NFT function getApproved(uint256 tokenId) public view returns (address) { ownerOf(tokenId); return tokenApprovals[tokenId]; } /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets function setApprovalForAll(address operator, bool approved) external { operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Query if an address is an authorized operator for another address function isApprovedForAll(address owner, address operator) public view returns (bool) { return operatorApprovals[owner][operator]; } /// @notice Concatenates tokenId to baseURI and returns the string. function tokenURI(uint256 tokenId) public view returns (string memory) { ownerOf(tokenId); return tokenURIs[tokenId]; } /// @notice Enumerate valid NFTs function tokenByIndex(uint256 _index) external view returns (uint256) { require(_index < totalSupply, "Index out of bounds"); return _index; } /// @notice Enumerate NFTs assigned to an owner function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256) { UserData storage data = userData[_owner]; require (_index < data.balance, "Index out of bounds"); uint256 bitfield; uint256 count; for (uint256 i = 0; i < 1024; i++) { uint256 key = i % 256; if (key == 0) { bitfield = data.ownership[i / 256]; } if ((bitfield >> key) & uint256(1) == 1) { if (count == _index) { return i; } count++; } } revert(); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(to) } if (size == 0) { return true; } (bool success, bytes memory returnData) = to.call{ value: 0 }( abi.encodeWithSelector( ERC721TokenReceiver(to).onERC721Received.selector, msg.sender, from, tokenId, _data ) ); require(success, "Transfer to non ERC721 receiver"); bytes4 returnValue = abi.decode(returnData, (bytes4)); return (returnValue == _ERC721_RECEIVED); } } // File: Claimable.sol contract EvohClaimable is EvohERC721 { uint256 public maxTotalSupply; bytes32 public hashRoot; address public owner; uint256 public startTime; struct ClaimData { bytes32 root; uint256 count; uint256 limit; mapping(address => bool) claimed; } ClaimData[] public claimData; constructor( string memory _name, string memory _symbol, bytes32 _hashRoot, uint256 _maxTotalSupply, uint256 _startTime ) EvohERC721(_name, _symbol) { owner = msg.sender; hashRoot = _hashRoot; maxTotalSupply = _maxTotalSupply; startTime = _startTime; } function addClaimRoots(bytes32[] calldata _merkleRoots, uint256[] calldata _claimLimits) external { require(msg.sender == owner); for (uint256 i = 0; i < _merkleRoots.length; i++) { ClaimData storage data = claimData.push(); data.root = _merkleRoots[i]; data.limit = _claimLimits[i]; } } function isClaimed(uint256 _claimIndex, address _account) public view returns (bool) { return claimData[_claimIndex].claimed[_account]; } /** @notice Claim an NFT using an eligible account @param _claimIndex Index of the claim hash to validate `_claimProof` against @param _claimProof Proof to validate against the claim root */ function claim( uint256 _claimIndex, bytes32[] calldata _claimProof ) external { require(block.timestamp >= startTime, "Cannot claim before start time"); uint256 claimed = totalSupply; require(maxTotalSupply > claimed, "All NFTs claimed"); // Verify the claim bytes32 node = keccak256(abi.encodePacked(msg.sender)); ClaimData storage data = claimData[_claimIndex]; require(_claimIndex < claimData.length, "Invalid merkleIndex"); require(data.count < data.limit, "All NFTs claimed in this airdrop"); require(!data.claimed[msg.sender], "User has claimed in this airdrop"); require(verify(_claimProof, data.root, node), "Invalid claim proof"); // Mark as claimed, write the hash and send the token. data.count++; data.claimed[msg.sender] = true; addOwnership(msg.sender, claimed); emit Transfer(address(0), msg.sender, claimed); totalSupply = claimed + 1; } /** @notice Submit NFT hashes on-chain. @param _indexes Indexes of the hashes being added. @param _hashes IPFS hashes being added. @param _proofs Proofs for the IPFS hashes. These are checked against `hashRoot`. */ function submitHashes( uint256[] calldata _indexes, string[] calldata _hashes, bytes32[][] calldata _proofs ) external { require(_indexes.length == _proofs.length); bytes32 root = hashRoot; for (uint256 i = 0; i < _indexes.length; i++) { bytes32 node = keccak256(abi.encodePacked(_indexes[i], _hashes[i])); require(verify(_proofs[i], root, node), "Invalid hash proof"); tokenURIs[_indexes[i]] = _hashes[i]; } } function verify( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"bytes32","name":"_hashRoot","type":"bytes32"},{"internalType":"uint256","name":"_maxTotalSupply","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleRoots","type":"bytes32[]"},{"internalType":"uint256[]","name":"_claimLimits","type":"uint256[]"}],"name":"addClaimRoots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"approved","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimIndex","type":"uint256"},{"internalType":"bytes32[]","name":"_claimProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimData","outputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hashRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimIndex","type":"uint256"},{"internalType":"address","name":"_account","type":"address"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_indexes","type":"uint256[]"},{"internalType":"string[]","name":"_hashes","type":"string[]"},{"internalType":"bytes32[][]","name":"_proofs","type":"bytes32[][]"}],"name":"submitHashes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","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":"uint256","name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001ef038038062001ef08339810160408190526200003491620002a8565b8451859085906200004d9060009060208501906200014f565b508051620000639060019060208401906200014f565b50506003602052507f28b0ef64f7e82d3b26f3fd404bd0151552f792965f39c29ae82c0a78df67af9c805460ff1990811660019081179092557f41a75b24256f422320613da5706c374a0a7eea8e8d418281bda8820c6b34435680548216831790557fcca39824a677cee72cd3539fc56c0e5a676a28b60617ea00a9d38305722c8b64805482168317905563780e9d6360e01b6000527f785e4d925c4778965a1107f0c202069d496d641ab5dd08a13bd2b783950e105f8054909116909117905561080980546001600160a01b03191633179055610808929092556108075561080a55506200037d9050565b8280546200015d906200032a565b90600052602060002090601f016020900481019282620001815760008555620001cc565b82601f106200019c57805160ff1916838001178555620001cc565b82800160010185558215620001cc579182015b82811115620001cc578251825591602001919060010190620001af565b50620001da929150620001de565b5090565b5b80821115620001da5760008155600101620001df565b600082601f83011262000206578081fd5b81516001600160401b038082111562000223576200022362000367565b604051601f8301601f19908116603f011681019082821181831017156200024e576200024e62000367565b816040528381526020925086838588010111156200026a578485fd5b8491505b838210156200028d57858201830151818301840152908201906200026e565b838211156200029e57848385830101525b9695505050505050565b600080600080600060a08688031215620002c0578081fd5b85516001600160401b0380821115620002d7578283fd5b620002e589838a01620001f5565b96506020880151915080821115620002fb578283fd5b506200030a88828901620001f5565b60408801516060890151608090990151979a919950979695509350505050565b600181811c908216806200033f57607f821691505b602082108114156200036157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611b63806200038d6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806354ef224b116100de578063a22cb46511610097578063c6f0308c11610071578063c6f0308c14610327578063c87b56dd14610355578063d2ef079514610368578063e985e9c51461037b57610173565b8063a22cb465146102f7578063b29a31051461030a578063b88d4fde1461031457610173565b806354ef224b146102985780636352211e146102ab57806370a08231146102be57806378e97925146102d15780638da5cb5b146102db57806395d89b41146102ef57610173565b806323b872dd1161013057806323b872dd1461022f5780632ab4d052146102425780632f52ebb71461024c5780632f745c591461025f57806342842e0e146102725780634f6ccce71461028557610173565b806301ffc9a71461017857806306fdde03146101b0578063081812fc146101c5578063095ea7b3146101f057806318160ddd1461020557806319e41c7e1461021c575b600080fd5b61019b6101863660046117fe565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101b861038e565b6040516101a79190611959565b6101d86101d3366004611836565b61041c565b6040516001600160a01b0390911681526020016101a7565b6102036101fe3660046116d6565b61045e565b005b61020e60025481565b6040519081526020016101a7565b61020361022a366004611768565b61054f565b61020361023d36600461158c565b610704565b61020e6108075481565b61020361025a366004611870565b610714565b61020e61026d3660046116d6565b6109f4565b61020361028036600461158c565b610afa565b61020e610293366004611836565b610b15565b6102036102a63660046116ff565b610b62565b6101d86102b9366004611836565b610c30565b61020e6102cc366004611539565b610cc4565b61020e61080a5481565b610809546101d8906001600160a01b031681565b6101b8610d31565b61020361030536600461169c565b610d3e565b61020e6108085481565b6102036103223660046115c7565b610dab565b61033a610335366004611836565b610e14565b604080519384526020840192909252908201526060016101a7565b6101b8610363366004611836565b610e48565b61019b61037636600461184e565b610ef3565b61019b61038936600461155a565b610f4b565b6000805461039b90611a68565b80601f01602080910402602001604051908101604052809291908181526020018280546103c790611a68565b80156104145780601f106103e957610100808354040283529160200191610414565b820191906000526020600020905b8154815290600101906020018083116103f757829003601f168201915b505050505081565b600061042782610c30565b5061040582610400811061044b57634e487b7160e01b600052603260045260246000fd5b01546001600160a01b031690505b919050565b600061046982610c30565b9050336001600160a01b038216148061048757506104878133610f4b565b6104d85760405162461bcd60e51b815260206004820152601e60248201527f4e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c000060448201526064015b60405180910390fd5b826104058361040081106104fc57634e487b7160e01b600052603260045260246000fd5b0180546001600160a01b0319166001600160a01b03928316179055604051839185811691908416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590600090a4505050565b84811461055b57600080fd5b6108085460005b868110156106fa57600088888381811061058c57634e487b7160e01b600052603260045260246000fd5b905060200201358787848181106105b357634e487b7160e01b600052603260045260246000fd5b90506020028101906105c591906119b4565b6040516020016105d793929190611902565b60405160208183030381529060405280519060200120905061062b85858481811061061257634e487b7160e01b600052603260045260246000fd5b9050602002810190610624919061196c565b8584610f7a565b61066c5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b2103430b9b410383937b7b360711b60448201526064016104cf565b86868381811061068c57634e487b7160e01b600052603260045260246000fd5b905060200281019061069e91906119b4565b61080560008c8c878181106106c357634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002091906106e5929190611448565b505080806106f290611aa3565b915050610562565b5050505050505050565b61070f838383611038565b505050565b61080a544210156107675760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f7420636c61696d206265666f72652073746172742074696d65000060448201526064016104cf565b6002546108075481106107af5760405162461bcd60e51b815260206004820152601060248201526f105b1b081391951cc818db185a5b595960821b60448201526064016104cf565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050600061080b868154811061080c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201905061080b8054905086106108675760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840dacae4d6d8ca92dcc8caf606b1b60448201526064016104cf565b80600201548160010154106108be5760405162461bcd60e51b815260206004820181905260248201527f416c6c204e46547320636c61696d656420696e20746869732061697264726f7060448201526064016104cf565b33600090815260038201602052604090205460ff16156109205760405162461bcd60e51b815260206004820181905260248201527f557365722068617320636c61696d656420696e20746869732061697264726f7060448201526064016104cf565b6109308585836000015485610f7a565b6109725760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21031b630b4b690383937b7b360691b60448201526064016104cf565b60018101805490600061098483611aa3565b90915550503360008181526003830160205260409020805460ff191660011790556109af908461117c565b604051839033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46109e98360016119f9565b600255505050505050565b6001600160a01b038216600090815260046020526040812080548310610a525760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b60448201526064016104cf565b60008060005b610400811015610aee576000610a7061010083611abe565b905080610aaa5760018501610a8761010084611a11565b60048110610aa557634e487b7160e01b600052603260045260246000fd5b015493505b60018185901c1660011415610adb5786831415610acd57509350610af492505050565b82610ad781611aa3565b9350505b5080610ae681611aa3565b915050610a58565b50600080fd5b92915050565b61070f83838360405180602001604052806000815250610dab565b60006002548210610b5e5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b60448201526064016104cf565b5090565b610809546001600160a01b03163314610b7a57600080fd5b60005b83811015610c295761080b80546001810182556000919091526004027f49269584b067be73383c276ccddb229298ef6883c3f229e0e1f150dc5ed2f9f801858583818110610bdb57634e487b7160e01b600052603260045260246000fd5b6020029190910135825550838383818110610c0657634e487b7160e01b600052603260045260246000fd5b905060200201358160020181905550508080610c2190611aa3565b915050610b7d565b5050505050565b6000610400821015610c7c5760006005836104008110610c6057634e487b7160e01b600052603260045260246000fd5b01546001600160a01b031690508015610c7a579050610459565b505b60405162461bcd60e51b815260206004820152601d60248201527f517565727920666f72206e6f6e6578697374656e7420746f6b656e496400000060448201526064016104cf565b60006001600160a01b038216610d155760405162461bcd60e51b8152602060048201526016602482015275517565727920666f72207a65726f206164647265737360501b60448201526064016104cf565b506001600160a01b031660009081526004602052604090205490565b6001805461039b90611a68565b336000818152610806602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610db6848484611038565b610dc28484848461125c565b610e0e5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f206e6f6e204552433732312072656365697665720060448201526064016104cf565b50505050565b61080b8181548110610e2557600080fd5b600091825260209091206004909102018054600182015460029092015490925083565b6060610e5382610c30565b506000828152610805602052604090208054610e6e90611a68565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90611a68565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b50505050509050919050565b600061080b8381548110610f1757634e487b7160e01b600052603260045260246000fd5b600091825260208083206001600160a01b03861684526003600490930201919091019052604090205460ff16905092915050565b6001600160a01b0391821660009081526108066020908152604080832093909416825291909152205460ff1690565b600081815b8581101561102a576000878783818110610fa957634e487b7160e01b600052603260045260246000fd5b905060200201359050808311610fea576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611017565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061102281611aa3565b915050610f7f565b50831490505b949350505050565b6001600160a01b03831661104b57600080fd5b6001600160a01b03821661105e57600080fd5b600061106982610c30565b9050336001600160a01b03821614806110925750336110878361041c565b6001600160a01b0316145b806110a257506110a28133610f4b565b15611134576104058261040081106110ca57634e487b7160e01b600052603260045260246000fd5b0180546001600160a01b03191690556110e384836113a6565b6110ed838361117c565b81836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45061070f565b60405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526064016104cf565b81600582610400811061119f57634e487b7160e01b600052603260045260246000fd5b0180546001600160a01b0319166001600160a01b0392831617905582166000908152600460205260408120805490916001918391906111df9084906119f9565b90915550600090506111f361010084611a11565b9050600082600101826004811061121a57634e487b7160e01b600052603260045260246000fd5b0154905061122a61010085611abe565b6001901b811783600101836004811061125357634e487b7160e01b600052603260045260246000fd5b01555050505050565b6000833b8061126f576001915050611030565b600080866001600160a01b0316600063150b7a0260e01b338b8a8a60405160240161129d949392919061191c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112db91906118e6565b60006040518083038185875af1925050503d8060008114611318576040519150601f19603f3d011682016040523d82523d6000602084013e61131d565b606091505b50915091508161136f5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f206e6f6e204552433732312072656365697665720060448201526064016104cf565b600081806020019051810190611385919061181a565b6001600160e01b031916630a85bd0160e11b14945050505050949350505050565b6001600160a01b0382166000908152600460205260408120805490916001918391906113d3908490611a25565b90915550600090506113e761010084611a11565b9050600082600101826004811061140e57634e487b7160e01b600052603260045260246000fd5b0154905061141e61010085611abe565b6001901b19811683600101836004811061125357634e487b7160e01b600052603260045260246000fd5b82805461145490611a68565b90600052602060002090601f01602090048101928261147657600085556114bc565b82601f1061148f5782800160ff198235161785556114bc565b828001600101855582156114bc579182015b828111156114bc5782358255916020019190600101906114a1565b50610b5e9291505b80821115610b5e57600081556001016114c4565b80356001600160a01b038116811461045957600080fd5b60008083601f840112611500578081fd5b50813567ffffffffffffffff811115611517578182fd5b6020830191508360208260051b850101111561153257600080fd5b9250929050565b60006020828403121561154a578081fd5b611553826114d8565b9392505050565b6000806040838503121561156c578081fd5b611575836114d8565b9150611583602084016114d8565b90509250929050565b6000806000606084860312156115a0578081fd5b6115a9846114d8565b92506115b7602085016114d8565b9150604084013590509250925092565b600080600080608085870312156115dc578081fd5b6115e5856114d8565b93506115f3602086016114d8565b925060408501359150606085013567ffffffffffffffff80821115611616578283fd5b818701915087601f830112611629578283fd5b81358181111561163b5761163b611afe565b604051601f8201601f19908116603f0116810190838211818310171561166357611663611afe565b816040528281528a602084870101111561167b578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080604083850312156116ae578182fd5b6116b7836114d8565b9150602083013580151581146116cb578182fd5b809150509250929050565b600080604083850312156116e8578182fd5b6116f1836114d8565b946020939093013593505050565b60008060008060408587031215611714578384fd5b843567ffffffffffffffff8082111561172b578586fd5b611737888389016114ef565b9096509450602087013591508082111561174f578384fd5b5061175c878288016114ef565b95989497509550505050565b60008060008060008060608789031215611780578182fd5b863567ffffffffffffffff80821115611797578384fd5b6117a38a838b016114ef565b909850965060208901359150808211156117bb578384fd5b6117c78a838b016114ef565b909650945060408901359150808211156117df578384fd5b506117ec89828a016114ef565b979a9699509497509295939492505050565b60006020828403121561180f578081fd5b813561155381611b14565b60006020828403121561182b578081fd5b815161155381611b14565b600060208284031215611847578081fd5b5035919050565b60008060408385031215611860578182fd5b82359150611583602084016114d8565b600080600060408486031215611884578081fd5b83359250602084013567ffffffffffffffff8111156118a1578182fd5b6118ad868287016114ef565b9497909650939450505050565b600081518084526118d2816020860160208601611a3c565b601f01601f19169290920160200192915050565b600082516118f8818460208701611a3c565b9190910192915050565b600084825282846020840137910160200190815292915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061194f908301846118ba565b9695505050505050565b60006020825261155360208301846118ba565b6000808335601e19843603018112611982578283fd5b83018035915067ffffffffffffffff82111561199c578283fd5b6020019150600581901b360382131561153257600080fd5b6000808335601e198436030181126119ca578182fd5b83018035915067ffffffffffffffff8211156119e4578283fd5b60200191503681900382131561153257600080fd5b60008219821115611a0c57611a0c611ad2565b500190565b600082611a2057611a20611ae8565b500490565b600082821015611a3757611a37611ad2565b500390565b60005b83811015611a57578181015183820152602001611a3f565b83811115610e0e5750506000910152565b600181811c90821680611a7c57607f821691505b60208210811415611a9d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611ab757611ab7611ad2565b5060010190565b600082611acd57611acd611ae8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b2a57600080fd5b5056fea2646970667358221220c9e02a5e461939ae5097cac77464dd08d9eb2ac85a1c2d20c6e0e5381859ddbd64736f6c6343000803003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e03e2e1311030af1d6fc0fcb2ffb3f7504c5e252f9b3fbc25c3a4663dee876efc200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000060e704e0000000000000000000000000000000000000000000000000000000000000001145766f683a204c6c616d61204672656e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000845766f682d435256000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806354ef224b116100de578063a22cb46511610097578063c6f0308c11610071578063c6f0308c14610327578063c87b56dd14610355578063d2ef079514610368578063e985e9c51461037b57610173565b8063a22cb465146102f7578063b29a31051461030a578063b88d4fde1461031457610173565b806354ef224b146102985780636352211e146102ab57806370a08231146102be57806378e97925146102d15780638da5cb5b146102db57806395d89b41146102ef57610173565b806323b872dd1161013057806323b872dd1461022f5780632ab4d052146102425780632f52ebb71461024c5780632f745c591461025f57806342842e0e146102725780634f6ccce71461028557610173565b806301ffc9a71461017857806306fdde03146101b0578063081812fc146101c5578063095ea7b3146101f057806318160ddd1461020557806319e41c7e1461021c575b600080fd5b61019b6101863660046117fe565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101b861038e565b6040516101a79190611959565b6101d86101d3366004611836565b61041c565b6040516001600160a01b0390911681526020016101a7565b6102036101fe3660046116d6565b61045e565b005b61020e60025481565b6040519081526020016101a7565b61020361022a366004611768565b61054f565b61020361023d36600461158c565b610704565b61020e6108075481565b61020361025a366004611870565b610714565b61020e61026d3660046116d6565b6109f4565b61020361028036600461158c565b610afa565b61020e610293366004611836565b610b15565b6102036102a63660046116ff565b610b62565b6101d86102b9366004611836565b610c30565b61020e6102cc366004611539565b610cc4565b61020e61080a5481565b610809546101d8906001600160a01b031681565b6101b8610d31565b61020361030536600461169c565b610d3e565b61020e6108085481565b6102036103223660046115c7565b610dab565b61033a610335366004611836565b610e14565b604080519384526020840192909252908201526060016101a7565b6101b8610363366004611836565b610e48565b61019b61037636600461184e565b610ef3565b61019b61038936600461155a565b610f4b565b6000805461039b90611a68565b80601f01602080910402602001604051908101604052809291908181526020018280546103c790611a68565b80156104145780601f106103e957610100808354040283529160200191610414565b820191906000526020600020905b8154815290600101906020018083116103f757829003601f168201915b505050505081565b600061042782610c30565b5061040582610400811061044b57634e487b7160e01b600052603260045260246000fd5b01546001600160a01b031690505b919050565b600061046982610c30565b9050336001600160a01b038216148061048757506104878133610f4b565b6104d85760405162461bcd60e51b815260206004820152601e60248201527f4e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c000060448201526064015b60405180910390fd5b826104058361040081106104fc57634e487b7160e01b600052603260045260246000fd5b0180546001600160a01b0319166001600160a01b03928316179055604051839185811691908416907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590600090a4505050565b84811461055b57600080fd5b6108085460005b868110156106fa57600088888381811061058c57634e487b7160e01b600052603260045260246000fd5b905060200201358787848181106105b357634e487b7160e01b600052603260045260246000fd5b90506020028101906105c591906119b4565b6040516020016105d793929190611902565b60405160208183030381529060405280519060200120905061062b85858481811061061257634e487b7160e01b600052603260045260246000fd5b9050602002810190610624919061196c565b8584610f7a565b61066c5760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b2103430b9b410383937b7b360711b60448201526064016104cf565b86868381811061068c57634e487b7160e01b600052603260045260246000fd5b905060200281019061069e91906119b4565b61080560008c8c878181106106c357634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002091906106e5929190611448565b505080806106f290611aa3565b915050610562565b5050505050505050565b61070f838383611038565b505050565b61080a544210156107675760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f7420636c61696d206265666f72652073746172742074696d65000060448201526064016104cf565b6002546108075481106107af5760405162461bcd60e51b815260206004820152601060248201526f105b1b081391951cc818db185a5b595960821b60448201526064016104cf565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050600061080b868154811061080c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201905061080b8054905086106108675760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840dacae4d6d8ca92dcc8caf606b1b60448201526064016104cf565b80600201548160010154106108be5760405162461bcd60e51b815260206004820181905260248201527f416c6c204e46547320636c61696d656420696e20746869732061697264726f7060448201526064016104cf565b33600090815260038201602052604090205460ff16156109205760405162461bcd60e51b815260206004820181905260248201527f557365722068617320636c61696d656420696e20746869732061697264726f7060448201526064016104cf565b6109308585836000015485610f7a565b6109725760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21031b630b4b690383937b7b360691b60448201526064016104cf565b60018101805490600061098483611aa3565b90915550503360008181526003830160205260409020805460ff191660011790556109af908461117c565b604051839033906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46109e98360016119f9565b600255505050505050565b6001600160a01b038216600090815260046020526040812080548310610a525760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b60448201526064016104cf565b60008060005b610400811015610aee576000610a7061010083611abe565b905080610aaa5760018501610a8761010084611a11565b60048110610aa557634e487b7160e01b600052603260045260246000fd5b015493505b60018185901c1660011415610adb5786831415610acd57509350610af492505050565b82610ad781611aa3565b9350505b5080610ae681611aa3565b915050610a58565b50600080fd5b92915050565b61070f83838360405180602001604052806000815250610dab565b60006002548210610b5e5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b60448201526064016104cf565b5090565b610809546001600160a01b03163314610b7a57600080fd5b60005b83811015610c295761080b80546001810182556000919091526004027f49269584b067be73383c276ccddb229298ef6883c3f229e0e1f150dc5ed2f9f801858583818110610bdb57634e487b7160e01b600052603260045260246000fd5b6020029190910135825550838383818110610c0657634e487b7160e01b600052603260045260246000fd5b905060200201358160020181905550508080610c2190611aa3565b915050610b7d565b5050505050565b6000610400821015610c7c5760006005836104008110610c6057634e487b7160e01b600052603260045260246000fd5b01546001600160a01b031690508015610c7a579050610459565b505b60405162461bcd60e51b815260206004820152601d60248201527f517565727920666f72206e6f6e6578697374656e7420746f6b656e496400000060448201526064016104cf565b60006001600160a01b038216610d155760405162461bcd60e51b8152602060048201526016602482015275517565727920666f72207a65726f206164647265737360501b60448201526064016104cf565b506001600160a01b031660009081526004602052604090205490565b6001805461039b90611a68565b336000818152610806602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610db6848484611038565b610dc28484848461125c565b610e0e5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f206e6f6e204552433732312072656365697665720060448201526064016104cf565b50505050565b61080b8181548110610e2557600080fd5b600091825260209091206004909102018054600182015460029092015490925083565b6060610e5382610c30565b506000828152610805602052604090208054610e6e90611a68565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90611a68565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b50505050509050919050565b600061080b8381548110610f1757634e487b7160e01b600052603260045260246000fd5b600091825260208083206001600160a01b03861684526003600490930201919091019052604090205460ff16905092915050565b6001600160a01b0391821660009081526108066020908152604080832093909416825291909152205460ff1690565b600081815b8581101561102a576000878783818110610fa957634e487b7160e01b600052603260045260246000fd5b905060200201359050808311610fea576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611017565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061102281611aa3565b915050610f7f565b50831490505b949350505050565b6001600160a01b03831661104b57600080fd5b6001600160a01b03821661105e57600080fd5b600061106982610c30565b9050336001600160a01b03821614806110925750336110878361041c565b6001600160a01b0316145b806110a257506110a28133610f4b565b15611134576104058261040081106110ca57634e487b7160e01b600052603260045260246000fd5b0180546001600160a01b03191690556110e384836113a6565b6110ed838361117c565b81836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45061070f565b60405162461bcd60e51b815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656460448201526064016104cf565b81600582610400811061119f57634e487b7160e01b600052603260045260246000fd5b0180546001600160a01b0319166001600160a01b0392831617905582166000908152600460205260408120805490916001918391906111df9084906119f9565b90915550600090506111f361010084611a11565b9050600082600101826004811061121a57634e487b7160e01b600052603260045260246000fd5b0154905061122a61010085611abe565b6001901b811783600101836004811061125357634e487b7160e01b600052603260045260246000fd5b01555050505050565b6000833b8061126f576001915050611030565b600080866001600160a01b0316600063150b7a0260e01b338b8a8a60405160240161129d949392919061191c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112db91906118e6565b60006040518083038185875af1925050503d8060008114611318576040519150601f19603f3d011682016040523d82523d6000602084013e61131d565b606091505b50915091508161136f5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f206e6f6e204552433732312072656365697665720060448201526064016104cf565b600081806020019051810190611385919061181a565b6001600160e01b031916630a85bd0160e11b14945050505050949350505050565b6001600160a01b0382166000908152600460205260408120805490916001918391906113d3908490611a25565b90915550600090506113e761010084611a11565b9050600082600101826004811061140e57634e487b7160e01b600052603260045260246000fd5b0154905061141e61010085611abe565b6001901b19811683600101836004811061125357634e487b7160e01b600052603260045260246000fd5b82805461145490611a68565b90600052602060002090601f01602090048101928261147657600085556114bc565b82601f1061148f5782800160ff198235161785556114bc565b828001600101855582156114bc579182015b828111156114bc5782358255916020019190600101906114a1565b50610b5e9291505b80821115610b5e57600081556001016114c4565b80356001600160a01b038116811461045957600080fd5b60008083601f840112611500578081fd5b50813567ffffffffffffffff811115611517578182fd5b6020830191508360208260051b850101111561153257600080fd5b9250929050565b60006020828403121561154a578081fd5b611553826114d8565b9392505050565b6000806040838503121561156c578081fd5b611575836114d8565b9150611583602084016114d8565b90509250929050565b6000806000606084860312156115a0578081fd5b6115a9846114d8565b92506115b7602085016114d8565b9150604084013590509250925092565b600080600080608085870312156115dc578081fd5b6115e5856114d8565b93506115f3602086016114d8565b925060408501359150606085013567ffffffffffffffff80821115611616578283fd5b818701915087601f830112611629578283fd5b81358181111561163b5761163b611afe565b604051601f8201601f19908116603f0116810190838211818310171561166357611663611afe565b816040528281528a602084870101111561167b578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080604083850312156116ae578182fd5b6116b7836114d8565b9150602083013580151581146116cb578182fd5b809150509250929050565b600080604083850312156116e8578182fd5b6116f1836114d8565b946020939093013593505050565b60008060008060408587031215611714578384fd5b843567ffffffffffffffff8082111561172b578586fd5b611737888389016114ef565b9096509450602087013591508082111561174f578384fd5b5061175c878288016114ef565b95989497509550505050565b60008060008060008060608789031215611780578182fd5b863567ffffffffffffffff80821115611797578384fd5b6117a38a838b016114ef565b909850965060208901359150808211156117bb578384fd5b6117c78a838b016114ef565b909650945060408901359150808211156117df578384fd5b506117ec89828a016114ef565b979a9699509497509295939492505050565b60006020828403121561180f578081fd5b813561155381611b14565b60006020828403121561182b578081fd5b815161155381611b14565b600060208284031215611847578081fd5b5035919050565b60008060408385031215611860578182fd5b82359150611583602084016114d8565b600080600060408486031215611884578081fd5b83359250602084013567ffffffffffffffff8111156118a1578182fd5b6118ad868287016114ef565b9497909650939450505050565b600081518084526118d2816020860160208601611a3c565b601f01601f19169290920160200192915050565b600082516118f8818460208701611a3c565b9190910192915050565b600084825282846020840137910160200190815292915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061194f908301846118ba565b9695505050505050565b60006020825261155360208301846118ba565b6000808335601e19843603018112611982578283fd5b83018035915067ffffffffffffffff82111561199c578283fd5b6020019150600581901b360382131561153257600080fd5b6000808335601e198436030181126119ca578182fd5b83018035915067ffffffffffffffff8211156119e4578283fd5b60200191503681900382131561153257600080fd5b60008219821115611a0c57611a0c611ad2565b500190565b600082611a2057611a20611ae8565b500490565b600082821015611a3757611a37611ad2565b500390565b60005b83811015611a57578181015183820152602001611a3f565b83811115610e0e5750506000910152565b600181811c90821680611a7c57607f821691505b60208210811415611a9d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611ab757611ab7611ad2565b5060010190565b600082611acd57611acd611ae8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b2a57600080fd5b5056fea2646970667358221220c9e02a5e461939ae5097cac77464dd08d9eb2ac85a1c2d20c6e0e5381859ddbd64736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e03e2e1311030af1d6fc0fcb2ffb3f7504c5e252f9b3fbc25c3a4663dee876efc200000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000060e704e0000000000000000000000000000000000000000000000000000000000000001145766f683a204c6c616d61204672656e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000845766f682d435256000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Evoh: Llama Frens
Arg [1] : _symbol (string): Evoh-CRV
Arg [2] : _hashRoot (bytes32): 0x3e2e1311030af1d6fc0fcb2ffb3f7504c5e252f9b3fbc25c3a4663dee876efc2
Arg [3] : _maxTotalSupply (uint256): 1024
Arg [4] : _startTime (uint256): 1625752800
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 3e2e1311030af1d6fc0fcb2ffb3f7504c5e252f9b3fbc25c3a4663dee876efc2
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [4] : 0000000000000000000000000000000000000000000000000000000060e704e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [6] : 45766f683a204c6c616d61204672656e73000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [8] : 45766f682d435256000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.