ERC-721
Overview
Max Total Supply
0 🌷
Holders
79
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 🌷Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EtherTulip
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; // This is a revised version of the revised version of the original EtherRock contract 0x41f28833Be34e6EDe3c58D1f597bef429861c4E2 with all the rocks removed and rock properties replaced by tulips. // The original contract at 0x41f28833Be34e6EDe3c58D1f597bef429861c4E2 had a simple mistake in the buyRock() function where it would mint a rock and not a tulip. The line: // require(rocks[rockNumber].currentlyForSale == true); // Had to check for the existance of a tulip, as follows: // require(tulips[tulipNumber].currentlyForSale == true); // Therefore in the original contract, anyone could buy anyone elses rock whereas they should have been buying a tulip (regardless of whether the owner chose to sell it or not) contract EtherTulip is ERC721("EtherTulip", unicode"🌷") { struct Tulip { uint256 listingTime; uint256 price; uint256 timesSold; } mapping(uint256 => Tulip) public tulips; uint256 public latestNewTulipForSale; address public immutable feeRecipient; event TulipForSale(uint256 tulipNumber, address owner, uint256 price); event TulipNotForSale(uint256 tulipNumber, address owner); event TulipSold(uint256 tulipNumber, address buyer, uint256 price); constructor(address _feeRecipient) { // set fee recipient feeRecipient = _feeRecipient; // mint founder tulip to yours and only ERC721._mint(address(0x777B0884f97Fd361c55e472530272Be61cEb87c8), 0); // initialize auction for second tulip latestNewTulipForSale = 1; tulips[latestNewTulipForSale].listingTime = block.timestamp; } // Dutch-ish Auction function currentPrice(uint256 tulipNumber) public view returns (uint256 price) { if (tulipNumber == latestNewTulipForSale) { // if currently in auction uint256 initialPrice = 1000 ether; uint256 decayPeriod = 1 days; // price = initial_price - initial_price * (current_time - start_time) / decay_period uint256 elapsedTime = block.timestamp - tulips[tulipNumber].listingTime; if (elapsedTime >= decayPeriod) return 0; return initialPrice - ((initialPrice * elapsedTime) / decayPeriod); } else { // if not in auction return tulips[tulipNumber].price; } } // ERC721 function _baseURI() internal pure override returns (string memory) { return "ipfs://"; } function tokenURI(uint256 tokenId) public view override returns (string memory) { string memory bulbURI = "bafkreiamkokggzkchkosx5jvz6fduzwcn7qugkp7pytmk327sblrtwa4ze"; string[100] memory tulipURIs = [ "bafkreiajlq3nd3nc7xu245eqwnoqkh4fz25rdkinw7wkjtqp54xcbxdski", "bafkreickj5f3dw6abk4ezj6vvephroacnizpt474jxjffccklci4bm7ulu", "bafkreid3ckzlcv3p6zh3o3cwbryno3keqvzyagptnxtoer3awuvyeydz4u", "bafkreid43dy6zwtnvwo6skonl4tcechlhnu7rihp2gnvoaydpxn3qw6yva", "bafkreicnjnnu6w3crbzxkoa2g625avmnecrh4ptmuvj2q5izygeqhttjny", "bafkreiaefcjmmploftqi6ao3dzrpjttnrhay2hqit5pxtzpwkismviwi7e", "bafkreid2jrk7rquxayxdfvyg3w447wqssoutoybqeihuunmau4n5ourj4i", "bafkreicvpenpqezcdehpcd2snsgj4ysl2la44fzqdolblr6evpps3uujcm", "bafkreihuxku32udn2eolrdivdugr2dd5sot2u7cvth3qpsjoqbkllbwkgy", "bafkreidumlyzcwbuaajaeeycq6e6y2zcr4jwq2amy35nsh7laphiecbyvi", "bafkreigjkkhwb3rtdgvbhjc6aoarrlqmyfe7f4d67fvtxprqns3r5zu6jm", "bafkreigmgqiafi4obtmtzzsocylrfcctjtemm3tdvecr3lobo6sqz73o3u", "bafkreig5b6rx3mdxwyrtnumyehvuetzrs3dwkxv76wtqhfayammh2hlsve", "bafkreicvhumzmjl7bo4uqhngwxfpk6upry4waxm3csk7wgkkyzjejgcwai", "bafkreiehn3tovb6wa2nt6nsouavmy6vrijc4z775hk4hjzdn7b5y5lkiya", "bafkreid6lxzktumy535tvzedks3acaqzrqirim4migkbxrp5erx5g6mfeu", "bafkreihk3mimxxqimwkowm2arpfaewz7m5o76wcvw4acyixhtun673az34", "bafkreidrrmeujlvad7oigztu45yeqxwcb6wpo464vwxqst4qo3itwk6ld4", "bafkreihl6hl2ufborow5cfiypdtkk2segp3vxfetupapsjnjvzwxlq2che", "bafkreidnv2t75e3kx6ugajs23l4736assxkzrggsocz2dvygsjlvhvntza", "bafkreih2hhoeruntbfy4ufngko3wbdp4m6gz7otu3hntuvntlflyehkejq", "bafkreieiqmc2t62t2pgabenfkeiclb4gsifcwgqvmkcwqc7lkaxm4vqvai", "bafkreieqi56ie7iyl4rne2r7ypnvrbcpvxxqp346c74smgd3vypgspdwdi", "bafkreidfw4bmdl3rcoehnak43beoeoucbbvtkxlagisvnuchug4foprhpq", "bafkreiasg674cri4woi2nmf2be27i24gdegxhc5hgahpygd7vqcrqvz4va", "bafkreidn3ocz3m6lzgu7whiooq74mtczbget5fie7dldzwhafdkty5yje4", "bafkreieg474qoeg5mykld7dpego4oy4tvjorlgtpjacw3cjrl7oogsfs6a", "bafkreiclbj3ujgxgh5i3plai5t24p7g2aavfzahu2gxq4mavena5ojxfsm", "bafkreia2vekumcnyswh2w62htqu7vedtksepokixpqn4qwzxhefj2bdniq", "bafkreia5456ribmisd555cwt6vzu57oqqkonugozywjuozsoxlo7ffoqxi", "bafkreiekctvro262pk4uz67jpqivxtniebqk3gyfqkclw2vqy3m3iocw6e", "bafkreigtxjoh4rx62uzlx4t23txqk3owvn3ckhy766mjiwgvy3fny2ozza", "bafkreifui4jzaffl74zakibwmt2js2w2qosm7yzgimecwvqpqxpz2psnmu", "bafkreif7426cefprxiupxwggnkjbtht3f3uiaeci2qc3irlppuy7kqoenq", "bafkreigdimqwjrkoklbfiigbkfpvmrniealdjr2bv52jb72sfbk6aqorqy", "bafkreidy2eohxrecrk3si4coolxawlcdmqrvhskhkal4d6bvxjfmds2m24", "bafkreie3qfepdl4pkse6uu3iqwfb2fqusfp3qsp2rh7ynvptps3bbnqzdm", "bafkreih2hv3vjipj2kibpynrmulnnoxj5737cbeg2bjl42zc3bhcfdzf2u", "bafkreiba3227uclzobdglmkvyz4b5da6gp3p3ehtfqznuprlgu3lt7j6nq", "bafkreiakbrgj7y2hzb7dhrpub6c6i72i3cp6ygsrof55t5ueb7wtg33bae", "bafkreig5x3r3dqllt2ndhxpahni5fjeeo2obq4ffls4hkbi7a2cfqtappi", "bafkreihfiplwjo4rdszuhnvjynx7iesij3borjd3rf5onlfgkwlqqjpbou", "bafkreicpnd4dysoaov3ra3jxsnoanyfyg3d56ntuzljro77a2bpgbzo6nu", "bafkreicdlambpulyaytsiffl2yra55ejhdcchpzlx3trutkoc4tinkiomq", "bafkreia57yvsl5esloc7fsn7uiw5q6opkk477f7qgh2sd2mibl66dwgz4m", "bafkreigpxggeedsw2y7rd5dqzhhf4qxq3hw3y5qqnmzgmbg5225z32ke6e", "bafkreihnezodqrdgshpkx5mkkebiz472y6r3xjnhjtrea75td6jxobf7ha", "bafkreiabrwr6bj62rwayp2nvaa7welt24h3rfrsiilj6f6qav4ryjceb4q", "bafkreiddvsn24iswrmxt3ceo7pngsvm44qzzknqto2hz4meytsbqw2q2yy", "bafkreibu53ggwhoojqkqws3l6nampmzxyczkymw5ozfz6q4t7tpwimha4y", "bafkreigwpa25qyx7f23v7t2nbdzywfigwp324dez2kvfrwyibeckl7kmry", "bafkreidjlqycv7hkvn6zmsnwbjy7l563pya2fwtnj5mmiqzosjzyuvv7ay", "bafkreibphjjkaarzd6kknwwmjtooccup7p3wyuvahmaemcyfjnbdbjci24", "bafkreie3unp25d6yx7yvi7bohox2mftpq5rirhl444ylep5ivijovybs5u", "bafkreifwh5ih76ed44cy545vyjovzre2esgk7a6m2njeb2qo5ofzus6q34", "bafkreie3h3ltvvnokylzyzcpultd7a5ba5ldp4ui4ejlhr7lbucklj4zfu", "bafkreiho2ufocna6dgavys6w3hzjudcppni7fnmo5pdes3cn3m7ndiu3b4", "bafkreigdwveaxxfl4sfdnyedx4nnnfv7fzspjmmr3j4eozjfv7tjsovwma", "bafkreidfixu2x5svom4aivbzbwyszrt7etpy7vm4deiepxgfyzshzn2ypi", "bafkreialq7tz66rwqift3hwfhs7mkpjraqp24lk4kk2amlnh535zzkizzy", "bafkreieay36cd2bsrn2tipb4zijvkylnfj7dinsaz342gnope7wsrrypjq", "bafkreieo6nbwxyahaafswfbe4sahqby3h7ru2hfitzru6iqyxqgch7nrzq", "bafkreicsv6fe4ykonns6hxctcjht7bqx5646cbpgbsug4xr6zg5rbthdj4", "bafkreihsgdzvuirts3jt3g26lto73qqu4bg7n4qu72dgmkujjkenee7e7a", "bafkreigkjwzzhv4cndw3ehsmsbmixzrxxvrpqj2e2yemxnnlwkew5f6gs4", "bafkreic5k7u2m4g3yufqpin7ofnb7hgl5vdtmto36l33bw6sjw5hktmo5a", "bafkreihxcdefq5k4vomblxkuj75d3b3ixasxvhuobag4whkrwyahfyfidq", "bafkreicjwz7p6dpvcqs7ordhzwslabcwuj3y3hehk4pl63jktebjmncjfy", "bafkreiakfuy3pabipys3ese6uerduczphy5rdkccguhyhsgyprmn7qz3ke", "bafkreialjw6gr3smsmhmrvcdvlsxxvgroyubz7fk2wrvpcrmomx7pdnjoe", "bafkreieqchumy7zibxq4mqppdqcdvfawq6ot7dxpbz3v5fue2bwyp5ivsm", "bafkreicev7nx7s75yqv2jpttw4rrukztwtr4kubxrs3wv3v4qlkz4nq4uy", "bafkreid2itljfobnxpvjfxnsas2fqbly5dyn7tkogvcojjxmb7muqiejta", "bafkreibmiuznmb5lk7gsg6376b4z6orbn2b535u6wnimiq5hwe5scref6u", "bafkreigxvddcurbaxgubrenqeahen47dktm4om535kaedeqenx7p6zodty", "bafkreibtwpwhksgskwqshwuqehwfm772pu7rfxjcxpijpu5ikh2cwvczvq", "bafkreic6j5qpgw326wdt6wyaf6efmbzzcw4rl5zfjiken3uxhu4s65hc2e", "bafkreibzl22el47bco2hi6wj6zovosteowcdkzifegbg3xncdhd3d3pjnu", "bafkreiew3gjv2dgldfzw5kfsginkvqz5rzktd5d4n6a2fnmuqjjk7hhcim", "bafkreigbjzymbt3fmlmfta5oror25swedugp2drdvsjb3juahn6e33r6l4", "bafkreicpzyumn7fo7negxdwb3anljwf2lqyseqeh7yogcoiyi75kfbtqky", "bafkreihsznkosxzsgfkutuuzhh442k7esjduylhda5ausfbautruuazzmm", "bafkreidbg24dnbt5to5vl6m5ektfwstwhp2djhsllf5mtciizlgg4lse6y", "bafkreidefsxxb5i4nvdblya2mh7h4uo47dwuthb5jqmartgg4svwrvx2xe", "bafkreic3qsb5mn22xy46gkg3whiqhvb2lqjmucbquiq27fyf76b7gpf3kq", "bafkreiaej6mkm6jjixeqtheomqtbpc4xp3yrtp66vnmcywxler5qlgidw4", "bafkreidhgkhkuwp5qqxzdmga7uh52qzeveu53zt4a2ahoauur6gaorf3sq", "bafkreibbw4oyakigmurscj3aknyq4tq4b43jjk2wsoszo4672shsog4ssu", "bafkreibbhcuhxye2ga3yblf4vmxsq4n3aofxckbyl66axugczb3e6dansu", "bafkreibxvv6oipwxyaejwvf4vnftsd6n3bf6ixnvubyus4q5nqud4plcve", "bafkreiahwdvpwtzcn2t45rswol5gka42yd2zkn37tn4mscq7mesuwngqyq", "bafkreig3mw4xebzxvrj7w5yvkg6o5a55tf2nlenbpruf7oyo3gauqjhtim", "bafkreihkaovv3fj2usy3kkzp4hspkisaqymki56pljvqm7yrv2ijta3pbq", "bafkreicytcw572hqzksn3zrdut22xo7wjxkf4ovjijokhpkx6vnc3nax7i", "bafkreidsfwztyha6q7i5temqm44mlhslcxerjhasj2kdfqhkssl5yfrgnu", "bafkreibsvhu3jxeyohswwic7u3xtzwwzbgssqrmmwzyj2fwhnykwpuu7eu", "bafkreibexexusac5lrtzmk26f4gc7pg2hzdf4upmd7ks37rteazol76ccy", "bafkreiguleybtirhrwdfp3bmmkm7xwq63so3waxgbwyh277uh62dbh55n4", "bafkreig7bdme4w26it2vhpdu2ahxbtl2svul5i3h5xhlpbdrxnmrnomqze", "bafkreicjehn5krr3lcnyl65eyh3njrfw5atepdzfmjaga44fmangdv5t6q" ]; require(tokenId < 100, "Enter a tokenId from 0 to 99. Only 100 tulips."); if (tokenId >= latestNewTulipForSale) { return string(abi.encodePacked(_baseURI(), bulbURI)); } else { return string(abi.encodePacked(_baseURI(), tulipURIs[tokenId])); } } function _beforeTokenTransfer( address, address, uint256 tokenId ) internal override { // unlist tulip tulips[tokenId].listingTime = 0; // emit event emit TulipNotForSale(tokenId, msg.sender); } // ETHERROCK function getTulipInfo(uint256 tulipNumber) public view returns ( address owner, uint256 listingTime, uint256 price, uint256 timesSold ) { return ( ERC721.ownerOf(tulipNumber), tulips[tulipNumber].listingTime, currentPrice(tulipNumber), tulips[tulipNumber].timesSold ); } function buyTulip(uint256 tulipNumber) public payable { // check sellable require(tulips[tulipNumber].listingTime != 0); require(tulipNumber < 100, "Enter a tokenId from 0 to 99. Only 100 tulips."); // check for sufficient payment require(msg.value >= currentPrice(tulipNumber)); // unlist and update metadata tulips[tulipNumber].listingTime = 0; tulips[tulipNumber].timesSold++; // swap ownership for payment if (tulipNumber >= latestNewTulipForSale) { // if new, _mint() uint256 _latestNewTulipForSale = latestNewTulipForSale; // update auction if (latestNewTulipForSale < 99) { latestNewTulipForSale++; tulips[latestNewTulipForSale].listingTime = block.timestamp; } else { latestNewTulipForSale++; } // mint and transfer payment ERC721._mint(msg.sender, _latestNewTulipForSale); payable(feeRecipient).transfer(msg.value); } else { // if old, _transfer() address seller = ERC721.ownerOf(tulipNumber); ERC721._transfer(seller, msg.sender, tulipNumber); payable(seller).transfer(msg.value); } // emit event emit TulipSold(tulipNumber, msg.sender, msg.value); } function sellTulip(uint256 tulipNumber, uint256 price) public { require(msg.sender == ERC721.ownerOf(tulipNumber)); require(price > 0); tulips[tulipNumber].price = price; tulips[tulipNumber].listingTime = block.timestamp; // emit event emit TulipForSale(tulipNumber, msg.sender, price); } function dontSellTulip(uint256 tulipNumber) public { require(msg.sender == ERC721.ownerOf(tulipNumber)); tulips[tulipNumber].listingTime = 0; // emit event emit TulipNotForSale(tulipNumber, msg.sender); } function giftTulip(uint256 tulipNumber, address receiver) public { ERC721.transferFrom(msg.sender, receiver, tulipNumber); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_feeRecipient","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":"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tulipNumber","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"TulipForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tulipNumber","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"TulipNotForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tulipNumber","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"TulipSold","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tulipNumber","type":"uint256"}],"name":"buyTulip","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tulipNumber","type":"uint256"}],"name":"currentPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tulipNumber","type":"uint256"}],"name":"dontSellTulip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tulipNumber","type":"uint256"}],"name":"getTulipInfo","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"listingTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timesSold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tulipNumber","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"giftTulip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestNewTulipForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"tulipNumber","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"sellTulip","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":"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":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tulips","outputs":[{"internalType":"uint256","name":"listingTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timesSold","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620059db380380620059db8339818101604052810190620000379190620004db565b6040518060400160405280600a81526020017f457468657254756c6970000000000000000000000000000000000000000000008152506040518060400160405280600481526020017ff09f8cb7000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb92919062000414565b508060019080519060200190620000d492919062000414565b5050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506200013a73777b0884f97fd361c55e472530272be61ceb87c860006200016660201b62001f251760201c565b60016007819055504260066000600754815260200190815260200160002060000181905550506200079f565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d0906200059f565b60405180910390fd5b620001ea816200034c60201b60201c565b156200022d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000224906200057d565b60405180910390fd5b6200024160008383620003b860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002939190620005ff565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600060066000838152602001908152602001600020600001819055507fba0927a5f9738a31a455429494626d5b656982903846684db43ca64c39c0c7ec813360405162000407929190620005c1565b60405180910390a1505050565b82805462000422906200069a565b90600052602060002090601f01602090048101928262000446576000855562000492565b82601f106200046157805160ff191683800117855562000492565b8280016001018555821562000492579182015b828111156200049157825182559160200191906001019062000474565b5b509050620004a19190620004a5565b5090565b5b80821115620004c0576000816000905550600101620004a6565b5090565b600081519050620004d58162000785565b92915050565b600060208284031215620004f457620004f36200072e565b5b60006200050484828501620004c4565b91505092915050565b62000518816200065c565b82525050565b60006200052d601c83620005ee565b91506200053a8262000733565b602082019050919050565b600062000554602083620005ee565b915062000561826200075c565b602082019050919050565b620005778162000690565b82525050565b6000602082019050818103600083015262000598816200051e565b9050919050565b60006020820190508181036000830152620005ba8162000545565b9050919050565b6000604082019050620005d860008301856200056c565b620005e760208301846200050d565b9392505050565b600082825260208201905092915050565b60006200060c8262000690565b9150620006198362000690565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006515762000650620006d0565b5b828201905092915050565b6000620006698262000670565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620006b357607f821691505b60208210811415620006ca57620006c9620006ff565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000790816200065c565b81146200079c57600080fd5b50565b60805160601c615216620007c5600039600081816107940152610c4b01526152166000f3fe6080604052600436106101355760003560e01c80636352211e116100ab578063a22cb4651161006f578063a22cb4651461043e578063af794a4f14610467578063b88d4fde146104a6578063c87b56dd146104cf578063ddc1d1b21461050c578063e985e9c51461053757610135565b80636352211e14610333578063672dca621461037057806370a08231146103995780637a3c4c17146103d657806395d89b411461041357610135565b806321495e84116100fd57806321495e841461022457806323b872dd1461026457806327a664e91461028d578063425864f8146102b657806342842e0e146102df578063469048401461030857610135565b806301ffc9a71461013a578063060384901461017757806306fdde0314610193578063081812fc146101be578063095ea7b3146101fb575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612afd565b610574565b60405161016e9190612f8e565b60405180910390f35b610191600480360381019061018c9190612b57565b610656565b005b34801561019f57600080fd5b506101a861089e565b6040516101b59190612fa9565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612b57565b610930565b6040516101f29190612ee2565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190612abd565b6109b5565b005b34801561023057600080fd5b5061024b60048036038101906102469190612b57565b610acd565b60405161025b9493929190612f49565b60405180910390f35b34801561027057600080fd5b5061028b600480360381019061028691906129a7565b610b22565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b84565b610b82565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612b57565b610b91565b005b3480156102eb57600080fd5b50610306600480360381019061030191906129a7565b610c29565b005b34801561031457600080fd5b5061031d610c49565b60405161032a9190612ee2565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612b57565b610c6d565b6040516103679190612ee2565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190612bc4565b610d1f565b005b3480156103a557600080fd5b506103c060048036038101906103bb919061293a565b610de1565b6040516103cd919061318b565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612b57565b610e99565b60405161040a919061318b565b60405180910390f35b34801561041f57600080fd5b50610428610f3f565b6040516104359190612fa9565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612a7d565b610fd1565b005b34801561047357600080fd5b5061048e60048036038101906104899190612b57565b611152565b60405161049d93929190613206565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906129fa565b61117c565b005b3480156104db57600080fd5b506104f660048036038101906104f19190612b57565b6111de565b6040516105039190612fa9565b60405180910390f35b34801561051857600080fd5b50610521611e8b565b60405161052e919061318b565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612967565b611e91565b60405161056b9190612f8e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061064f575061064e826120f3565b5b9050919050565b60006006600083815260200190815260200160002060000154141561067a57600080fd5b606481106106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b4906130ab565b60405180910390fd5b6106c681610e99565b3410156106d257600080fd5b6000600660008381526020019081526020016000206000018190555060066000828152602001908152602001600020600201600081548092919061071590613504565b919050555060075481106107ff57600060075490506063600754101561076f576007600081548092919061074890613504565b91905055504260066000600754815260200190815260200160002060000181905550610788565b6007600081548092919061078290613504565b91905055505b6107923382611f25565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156107f8573d6000803e3d6000fd5b5050610860565b600061080a82610c6d565b905061081781338461215d565b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561085d573d6000803e3d6000fd5b50505b7ffc24b0dc1790ce16fa7b0d129f7fdcc2a23da18a2dfd558c47201d2c4a958122813334604051610893939291906131cf565b60405180910390a150565b6060600080546108ad906134a1565b80601f01602080910402602001604051908101604052809291908181526020018280546108d9906134a1565b80156109265780601f106108fb57610100808354040283529160200191610926565b820191906000526020600020905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b600061093b826123b9565b61097a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109719061310b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c082610c6d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a289061314b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a50612425565b73ffffffffffffffffffffffffffffffffffffffff161480610a7f5750610a7e81610a79612425565b611e91565b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59061306b565b60405180910390fd5b610ac8838361242d565b505050565b600080600080610adc85610c6d565b6006600087815260200190815260200160002060000154610afc87610e99565b600660008981526020019081526020016000206002015493509350935093509193509193565b610b33610b2d612425565b826124e6565b610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b699061316b565b60405180910390fd5b610b7d83838361215d565b505050565b610b8d338284610b22565b5050565b610b9a81610c6d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bd157600080fd5b600060066000838152602001908152602001600020600001819055507fba0927a5f9738a31a455429494626d5b656982903846684db43ca64c39c0c7ec8133604051610c1e9291906131a6565b60405180910390a150565b610c448383836040518060200160405280600081525061117c565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d906130cb565b60405180910390fd5b80915050919050565b610d2882610c6d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f57600080fd5b60008111610d6c57600080fd5b8060066000848152602001908152602001600020600101819055504260066000848152602001908152602001600020600001819055507f32feaaef15eb5bbacc4618e0336f1b6c13ccbcc7f2d6d53a0ba8d2dcf54536fa823383604051610dd5939291906131cf565b60405180910390a15050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e499061308b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600754821415610f20576000683635c9adc5dea00000905060006201518090506000600660008681526020019081526020016000206000015442610edf91906133b7565b9050818110610ef45760009350505050610f3a565b818184610f01919061335d565b610f0b919061332c565b83610f1691906133b7565b9350505050610f3a565b600660008381526020019081526020016000206001015490505b919050565b606060018054610f4e906134a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7a906134a1565b8015610fc75780601f10610f9c57610100808354040283529160200191610fc7565b820191906000526020600020905b815481529060010190602001808311610faa57829003601f168201915b5050505050905090565b610fd9612425565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e9061302b565b60405180910390fd5b8060056000611054612425565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611101612425565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111469190612f8e565b60405180910390a35050565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b61118d611187612425565b836124e6565b6111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061316b565b60405180910390fd5b6111d8848484846125c4565b50505050565b606060006040518060600160405280603b815260200161507f603b91399050600060405180610c8001604052806040518060600160405280603b8152602001613d23603b913981526020016040518060600160405280603b8152602001614448603b913981526020016040518060600160405280603b8152602001613dd4603b913981526020016040518060600160405280603b8152602001614c59603b913981526020016040518060600160405280603b81526020016145e5603b913981526020016040518060600160405280603b8152602001613f36603b913981526020016040518060600160405280603b8152602001614397603b913981526020016040518060600160405280603b8152602001614a46603b913981526020016040518060600160405280603b81526020016144f9603b913981526020016040518060600160405280603b8152602001614f58603b913981526020016040518060600160405280603b8152602001614149603b913981526020016040518060600160405280603b81526020016143d2603b913981526020016040518060600160405280603b8152602001614be3603b913981526020016040518060600160405280603b8152602001614b6d603b913981526020016040518060600160405280603b8152602001613e85603b913981526020016040518060600160405280603b8152602001615130603b913981526020016040518060600160405280603b8152602001613ad5603b913981526020016040518060600160405280603b8152602001614c94603b913981526020016040518060600160405280603b8152602001614abc603b913981526020016040518060600160405280603b81526020016141bf603b913981526020016040518060600160405280603b8152602001614534603b913981526020016040518060600160405280603b81526020016142ab603b913981526020016040518060600160405280603b81526020016141fa603b913981526020016040518060600160405280603b8152602001614c1e603b913981526020016040518060600160405280603b8152602001614782603b913981526020016040518060600160405280603b8152602001614620603b913981526020016040518060600160405280603b81526020016146d1603b913981526020016040518060600160405280603b8152602001614995603b913981526020016040518060600160405280603b8152602001614fce603b913981526020016040518060600160405280603b8152602001614696603b913981526020016040518060600160405280603b8152602001614d0a603b913981526020016040518060600160405280603b815260200161440d603b913981526020016040518060600160405280603b8152602001614e31603b913981526020016040518060600160405280603b8152602001614b32603b913981526020016040518060600160405280603b8152602001613ce8603b913981526020016040518060600160405280603b8152602001615009603b913981526020016040518060600160405280603b81526020016147f8603b913981526020016040518060600160405280603b81526020016142e6603b913981526020016040518060600160405280603b8152602001614a81603b913981526020016040518060600160405280603b8152602001613d5e603b913981526020016040518060600160405280603b8152602001614dbb603b913981526020016040518060600160405280603b8152602001613b10603b913981526020016040518060600160405280603b8152602001613bfc603b913981526020016040518060600160405280603b8152602001614f1d603b913981526020016040518060600160405280603b8152602001613efb603b913981526020016040518060600160405280603b81526020016147bd603b913981526020016040518060600160405280603b8152602001613bc1603b913981526020016040518060600160405280603b8152602001613f71603b913981526020016040518060600160405280603b81526020016145aa603b913981526020016040518060600160405280603b815260200161495a603b913981526020016040518060600160405280603b815260200161465b603b913981526020016040518060600160405280603b8152602001613a9a603b913981526020016040518060600160405280603b8152602001613d99603b913981526020016040518060600160405280603b8152602001613cad603b913981526020016040518060600160405280603b8152602001614184603b913981526020016040518060600160405280603b8152602001614483603b913981526020016040518060600160405280603b81526020016144be603b913981526020016040518060600160405280603b8152602001614ba8603b913981526020016040518060600160405280603b8152602001613ec0603b913981526020016040518060600160405280603b815260200161491f603b913981526020016040518060600160405280603b8152602001614e6c603b913981526020016040518060600160405280603b81526020016151a6603b913981526020016040518060600160405280603b8152602001614df6603b913981526020016040518060600160405280603b8152602001613fe7603b913981526020016040518060600160405280603b815260200161456f603b913981526020016040518060600160405280603b815260200161486e603b913981526020016040518060600160405280603b8152602001614098603b913981526020016040518060600160405280603b8152602001614f93603b913981526020016040518060600160405280603b815260200161410e603b913981526020016040518060600160405280603b81526020016148a9603b913981526020016040518060600160405280603b8152602001614235603b913981526020016040518060600160405280603b8152602001614321603b913981526020016040518060600160405280603b81526020016150f5603b913981526020016040518060600160405280603b8152602001614ccf603b913981526020016040518060600160405280603b8152602001614ee2603b913981526020016040518060600160405280603b815260200161470c603b913981526020016040518060600160405280603b8152602001613b4b603b913981526020016040518060600160405280603b8152602001613e0f603b913981526020016040518060600160405280603b8152602001613e4a603b913981526020016040518060600160405280603b8152602001614833603b913981526020016040518060600160405280603b8152602001614270603b913981526020016040518060600160405280603b8152602001614af7603b913981526020016040518060600160405280603b81526020016150ba603b913981526020016040518060600160405280603b81526020016149d0603b913981526020016040518060600160405280603b8152602001614d45603b913981526020016040518060600160405280603b8152602001613c37603b913981526020016040518060600160405280603b8152602001614747603b913981526020016040518060600160405280603b8152602001614a0b603b913981526020016040518060600160405280603b8152602001613b86603b913981526020016040518060600160405280603b8152602001614d80603b913981526020016040518060600160405280603b8152602001613fac603b913981526020016040518060600160405280603b8152602001615044603b913981526020016040518060600160405280603b815260200161435c603b913981526020016040518060600160405280603b8152602001613c72603b913981526020016040518060600160405280603b8152602001614022603b913981526020016040518060600160405280603b81526020016140d3603b913981526020016040518060600160405280603b8152602001614ea7603b913981526020016040518060600160405280603b815260200161516b603b913981526020016040518060600160405280603b815260200161405d603b913981526020016040518060600160405280603b81526020016148e4603b9139815250905060648410611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd906130ab565b60405180910390fd5b6007548410611e4157611e17612620565b82604051602001611e29929190612ebe565b60405160208183030381529060405292505050611e86565b611e49612620565b818560648110611e5c57611e5b6135da565b5b6020020151604051602001611e72929190612ebe565b604051602081830303815290604052925050505b919050565b60075481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c906130eb565b60405180910390fd5b611f9e816123b9565b15611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590612feb565b60405180910390fd5b611fea6000838361265d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203a91906132d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8273ffffffffffffffffffffffffffffffffffffffff1661217d82610c6d565b73ffffffffffffffffffffffffffffffffffffffff16146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca9061312b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a9061300b565b60405180910390fd5b61224e83838361265d565b61225960008261242d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a991906133b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230091906132d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124a083610c6d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124f1826123b9565b612530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125279061304b565b60405180910390fd5b600061253b83610c6d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125aa57508373ffffffffffffffffffffffffffffffffffffffff1661259284610930565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bb57506125ba8185611e91565b5b91505092915050565b6125cf84848461215d565b6125db848484846126b7565b61261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190612fcb565b60405180910390fd5b50505050565b60606040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250905090565b600060066000838152602001908152602001600020600001819055507fba0927a5f9738a31a455429494626d5b656982903846684db43ca64c39c0c7ec81336040516126aa9291906131a6565b60405180910390a1505050565b60006126d88473ffffffffffffffffffffffffffffffffffffffff1661284e565b15612841578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612701612425565b8786866040518563ffffffff1660e01b81526004016127239493929190612efd565b602060405180830381600087803b15801561273d57600080fd5b505af192505050801561276e57506040513d601f19601f8201168201806040525081019061276b9190612b2a565b60015b6127f1573d806000811461279e576040519150601f19603f3d011682016040523d82523d6000602084013e6127a3565b606091505b506000815114156127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090612fcb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612846565b600190505b949350505050565b600080823b905060008111915050919050565b600061287461286f84613262565b61323d565b9050828152602081018484840111156128905761288f61363d565b5b61289b84828561345f565b509392505050565b6000813590506128b281613a3d565b92915050565b6000813590506128c781613a54565b92915050565b6000813590506128dc81613a6b565b92915050565b6000815190506128f181613a6b565b92915050565b600082601f83011261290c5761290b613638565b5b813561291c848260208601612861565b91505092915050565b60008135905061293481613a82565b92915050565b6000602082840312156129505761294f613647565b5b600061295e848285016128a3565b91505092915050565b6000806040838503121561297e5761297d613647565b5b600061298c858286016128a3565b925050602061299d858286016128a3565b9150509250929050565b6000806000606084860312156129c0576129bf613647565b5b60006129ce868287016128a3565b93505060206129df868287016128a3565b92505060406129f086828701612925565b9150509250925092565b60008060008060808587031215612a1457612a13613647565b5b6000612a22878288016128a3565b9450506020612a33878288016128a3565b9350506040612a4487828801612925565b925050606085013567ffffffffffffffff811115612a6557612a64613642565b5b612a71878288016128f7565b91505092959194509250565b60008060408385031215612a9457612a93613647565b5b6000612aa2858286016128a3565b9250506020612ab3858286016128b8565b9150509250929050565b60008060408385031215612ad457612ad3613647565b5b6000612ae2858286016128a3565b9250506020612af385828601612925565b9150509250929050565b600060208284031215612b1357612b12613647565b5b6000612b21848285016128cd565b91505092915050565b600060208284031215612b4057612b3f613647565b5b6000612b4e848285016128e2565b91505092915050565b600060208284031215612b6d57612b6c613647565b5b6000612b7b84828501612925565b91505092915050565b60008060408385031215612b9b57612b9a613647565b5b6000612ba985828601612925565b9250506020612bba858286016128a3565b9150509250929050565b60008060408385031215612bdb57612bda613647565b5b6000612be985828601612925565b9250506020612bfa85828601612925565b9150509250929050565b612c0d816133eb565b82525050565b612c1c816133fd565b82525050565b6000612c2d82613293565b612c3781856132a9565b9350612c4781856020860161346e565b612c508161364c565b840191505092915050565b6000612c668261329e565b612c7081856132ba565b9350612c8081856020860161346e565b612c898161364c565b840191505092915050565b6000612c9f8261329e565b612ca981856132cb565b9350612cb981856020860161346e565b80840191505092915050565b6000612cd26032836132ba565b9150612cdd8261365d565b604082019050919050565b6000612cf5601c836132ba565b9150612d00826136ac565b602082019050919050565b6000612d186024836132ba565b9150612d23826136d5565b604082019050919050565b6000612d3b6019836132ba565b9150612d4682613724565b602082019050919050565b6000612d5e602c836132ba565b9150612d698261374d565b604082019050919050565b6000612d816038836132ba565b9150612d8c8261379c565b604082019050919050565b6000612da4602a836132ba565b9150612daf826137eb565b604082019050919050565b6000612dc7602e836132ba565b9150612dd28261383a565b604082019050919050565b6000612dea6029836132ba565b9150612df582613889565b604082019050919050565b6000612e0d6020836132ba565b9150612e18826138d8565b602082019050919050565b6000612e30602c836132ba565b9150612e3b82613901565b604082019050919050565b6000612e536029836132ba565b9150612e5e82613950565b604082019050919050565b6000612e766021836132ba565b9150612e818261399f565b604082019050919050565b6000612e996031836132ba565b9150612ea4826139ee565b604082019050919050565b612eb881613455565b82525050565b6000612eca8285612c94565b9150612ed68284612c94565b91508190509392505050565b6000602082019050612ef76000830184612c04565b92915050565b6000608082019050612f126000830187612c04565b612f1f6020830186612c04565b612f2c6040830185612eaf565b8181036060830152612f3e8184612c22565b905095945050505050565b6000608082019050612f5e6000830187612c04565b612f6b6020830186612eaf565b612f786040830185612eaf565b612f856060830184612eaf565b95945050505050565b6000602082019050612fa36000830184612c13565b92915050565b60006020820190508181036000830152612fc38184612c5b565b905092915050565b60006020820190508181036000830152612fe481612cc5565b9050919050565b6000602082019050818103600083015261300481612ce8565b9050919050565b6000602082019050818103600083015261302481612d0b565b9050919050565b6000602082019050818103600083015261304481612d2e565b9050919050565b6000602082019050818103600083015261306481612d51565b9050919050565b6000602082019050818103600083015261308481612d74565b9050919050565b600060208201905081810360008301526130a481612d97565b9050919050565b600060208201905081810360008301526130c481612dba565b9050919050565b600060208201905081810360008301526130e481612ddd565b9050919050565b6000602082019050818103600083015261310481612e00565b9050919050565b6000602082019050818103600083015261312481612e23565b9050919050565b6000602082019050818103600083015261314481612e46565b9050919050565b6000602082019050818103600083015261316481612e69565b9050919050565b6000602082019050818103600083015261318481612e8c565b9050919050565b60006020820190506131a06000830184612eaf565b92915050565b60006040820190506131bb6000830185612eaf565b6131c86020830184612c04565b9392505050565b60006060820190506131e46000830186612eaf565b6131f16020830185612c04565b6131fe6040830184612eaf565b949350505050565b600060608201905061321b6000830186612eaf565b6132286020830185612eaf565b6132356040830184612eaf565b949350505050565b6000613247613258565b905061325382826134d3565b919050565b6000604051905090565b600067ffffffffffffffff82111561327d5761327c613609565b5b6132868261364c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132e182613455565b91506132ec83613455565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133215761332061354d565b5b828201905092915050565b600061333782613455565b915061334283613455565b9250826133525761335161357c565b5b828204905092915050565b600061336882613455565b915061337383613455565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133ac576133ab61354d565b5b828202905092915050565b60006133c282613455565b91506133cd83613455565b9250828210156133e0576133df61354d565b5b828203905092915050565b60006133f682613435565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561348c578082015181840152602081019050613471565b8381111561349b576000848401525b50505050565b600060028204905060018216806134b957607f821691505b602082108114156134cd576134cc6135ab565b5b50919050565b6134dc8261364c565b810181811067ffffffffffffffff821117156134fb576134fa613609565b5b80604052505050565b600061350f82613455565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135425761354161354d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f456e746572206120746f6b656e49642066726f6d203020746f2039392e204f6e60008201527f6c79203130302074756c6970732e000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a46816133eb565b8114613a5157600080fd5b50565b613a5d816133fd565b8114613a6857600080fd5b50565b613a7481613409565b8114613a7f57600080fd5b50565b613a8b81613455565b8114613a9657600080fd5b5056fe6261666b726569646a6c7179637637686b766e367a6d736e77626a79376c353633707961326677746e6a356d6d69717a6f736a7a797576763761796261666b726569686b336d696d787871696d776b6f776d32617270666165777a376d356f3736776376773461637969786874756e363733617a33346261666b726569686669706c776a6f347264737a75686e766a796e7837696573696a33626f726a64337266356f6e6c66676b776c71716a70626f756261666b72656963366a357170677733323677647436777961663665666d627a7a637734726c357a666a696b656e337578687534733635686332656261666b7265696262686375687879653267613379626c6634766d787371346e33616f6678636b62796c363661787567637a6233653664616e73756261666b726569686e657a6f64717264677368706b78356d6b6b6562697a34373279367233786a6e686a7472656137357464366a786f62663768616261666b72656963706e64346479736f616f76337261336a78736e6f616e79667967336435366e74757a6c6a726f37376132627067627a6f366e756261666b72656961656a366d6b6d366a6a697865717468656f6d717462706334787033797274703636766e6d637977786c657235716c67696477346261666b726569637974637735373268717a6b736e337a726475743232786f37776a786b66346f766a696a6f6b68706b7836766e63336e617837696261666b7265696533756e703235643679783779766937626f686f78326d6674707135726972686c343434796c6570356976696a6f7679627335756261666b7265696764696d71776a726b6f6b6c6266696967626b6670766d726e6965616c646a7232627635326a6237327366626b3661716f7271796261666b726569616a6c71336e64336e633778753234356571776e6f716b6834667a323572646b696e7737776b6a74717035347863627864736b696261666b726569616b6272676a377932687a62376468727075623663366937326933637036796773726f66353574357565623777746733336261656261666b7265696270686a6a6b6161727a64366b6b6e77776d6a746f6f636375703770337779757661686d61656d6379666a6e6264626a636932346261666b7265696433636b7a6c63763370367a68336f3363776272796e6f336b6571767a79616770746e78746f65723361777576796579647a34756261666b726569627a6c3232656c343762636f32686936776a367a6f766f7374656f7763646b7a69666567626733786e63646864336433706a6e756261666b726569657733676a763264676c64667a77356b667367696e6b76717a35727a6b74643564346e366132666e6d75716a6a6b37686863696d6261666b72656965686e33746f7662367761326e74366e736f7561766d79367672696a63347a373735686b34686a7a646e37623579356c6b6979616261666b726569646669787532783573766f6d34616976627a627779737a7274376574707937766d346465696570786766797a73687a6e327970696261666b7265696135377976736c3565736c6f633766736e377569773571366f706b6b3437376637716768327364326d69626c36366477677a346d6261666b726569616566636a6d6d706c6f6674716936616f33647a72706a74746e726861793268716974357078747a70776b69736d7669776937656261666b726569616272777236626a36327277617970326e7661613777656c74323468337266727369696c6a3666367161763472796a63656234716261666b72656961687764767077747a636e327434357273776f6c35676b6134327964327a6b6e3337746e346d736371376d657375776e677179716261666b726569687367647a767569727473336a74336732366c746f3733717175346267376e347175373264676d6b756a6a6b656e6565376537616261666b726569647366777a74796861367137693574656d716d34346d6c68736c637865726a6861736a326b646671686b73736c35796672676e756261666b726569673762646d653477323669743276687064753261687862746c327376756c356933683578686c70626472786e6d726e6f6d717a656261666b72656968786364656671356b34766f6d626c786b756a37356433623369786173787668756f6261673477686b72777961686679666964716261666b7265696273766875336a7865796f68737777696337753378747a77777a6267737371726d6d777a796a326677686e796b777075753765756261666b726569616b667579337061626970797333657365367565726475637a7068793572646b6363677568796873677970726d6e37717a336b656261666b726569676a6b6b68776233727464677662686a6336616f6172726c716d796665376634643637667674787072716e733372357a75366a6d6261666b726569667768356968373665643434637935343576796a6f767a7265326573676b3761366d326e6a656232716f356f667a7573367133346261666b726569646e763274373565336b78367567616a7332336c34373336617373786b7a726767736f637a3264767967736a6c7668766e747a616261666b726569657169353669653769796c34726e6532723779706e76726263707678787170333436633734736d676433767970677370647764696261666b72656965716368756d79377a69627871346d717070647163647666617771366f7437647870627a3376356675653262777970356976736d6261666b72656963707a79756d6e37666f376e65677864776233616e6c6a7766326c7179736571656837796f67636f69796937356b666274716b796261666b7265696569716d6332743632743270676162656e666b6569636c62346773696663776771766d6b63777163376c6b61786d3476717661696261666b7265696832687633766a69706a326b696270796e726d756c6e6e6f786a353733376362656732626a6c34327a633362686366647a6632756261666b726569636576376e7837733735797176326a70747477347272756b7a74777472346b7562787273337776337634716c6b7a346e713475796261666b726569686b616f767633666a32757379336b6b7a70346873706b69736171796d6b693536706c6a76716d3779727632696a7461337062716261666b72656964326a726b377271757861797864667679673377343437777173736f75746f79627165696875756e6d6175346e356f75726a34696261666b726569676d677169616669346f62746d747a7a736f63796c72666363746a74656d6d33746476656372336c6f626f3673717a37336f33756261666b7265696774786a6f683472783632757a6c78347432337478716b336f77766e33636b68793736366d6a697767767933666e79326f7a7a616261666b726569636b6a35663364773661626b34657a6a367676657068726f61636e697a70743437346a786a666663636b6c636934626d37756c756261666b726569653368336c7476766e6f6b796c7a797a6370756c74643761356261356c647034756934656a6c6872376c6275636b6c6a347a66756261666b726569686f3275666f636e6136646761767973367733687a6a75646370706e6937666e6d6f357064657333636e336d376e6469753362346261666b7265696875786b75333275646e32656f6c726469766475677232646435736f7432753763767468337170736a6f71626b6c6c62776b67796261666b726569683268686f6572756e746266793475666e676b6f3377626470346d36677a376f747533686e7475766e746c666c7965686b656a716261666b726569676b6a777a7a687634636e6477336568736d73626d69787a727878767270716a32653279656d786e6e6c776b65773566366773346261666b726569646476736e3234697377726d78743363656f37706e6773766d3434717a7a6b6e71746f32687a346d6579747362717732713279796261666b726569636e6a6e6e753677336372627a786b6f61326736323561766d6e656372683470746d75766a327135697a796765716874746a6e796261666b726569646e336f637a336d366c7a6775377768696f6f7137346d74637a626765743566696537646c647a77686166646b747935796a65346261666b72656967777061323571797837663233763774326e62647a7977666967777033323464657a326b7666727779696265636b6c376b6d72796261666b72656961353435367269626d69736435353563777436767a7535376f71716b6f6e75676f7a79776a756f7a736f786c6f3766666f7178696261666b7265696567343734716f6567356d796b6c6437647065676f346f793474766a6f726c6774706a61637733636a726c376f6f6773667336616261666b7265696274777077686b7367736b77717368777571656877666d3737327075377266786a637870696a707535696b6832637776637a76716261666b7265696468676b686b757770357171787a646d67613775683532717a6576657535337a7434613261686f617575723667616f72663373716261666b72656961736736373463726934776f69326e6d66326265323769323467646567786863356867616870796764377671637271767a3476616261666b7265696770786767656564737732793772643564717a6868663471787133687733793571716e6d7a676d6267353232357a33326b6536656261666b726569653371666570646c34706b7365367575336971776662326671757366703371737032726837796e76707470733362626e717a646d6261666b72656967626a7a796d627433666d6c6d667461356f726f723235737765647567703264726476736a62336a7561686e3665333372366c346261666b72656963356b3775326d3467337975667170696e376f666e623768676c357664746d746f33366c3333627736736a7735686b746d6f35616261666b726569616c6a7736677233736d736d686d72766364766c7378787667726f7975627a37666b327772767063726d6f6d783770646e6a6f656261666b726569636a65686e356b7272336c636e796c3635657968336e6a7266773561746570647a666d6a6167613434666d616e676476357436716261666b726569616c7137747a3636727771696674336877666873376d6b706a7261717032346c6b346b6b32616d6c6e683533357a7a6b697a7a796261666b72656962753533676777686f6f6a716b717773336c366e616d706d7a7879637a6b796d77356f7a667a3671347437747077696d686134796261666b726569636c626a33756a67786768356933706c61693574323470376732616176667a61687532677871346d6176656e61356f6a7866736d6261666b726569646566737878623569346e7664626c7961326d68376834756f3437647775746862356a716d6172746767347376777276783278656261666b726569626277346f79616b69676d757273636a33616b6e7971347471346234336a6a6b3277736f737a6f343637327368736f67347373756261666b726569637670656e7071657a6364656870636432736e73676a3479736c326c613434667a71646f6c626c723665767070733375756a636d6261666b72656962613332323775636c7a6f6264676c6d6b76797a346235646136677033703365687466717a6e7570726c6775336c74376a366e716261666b726569686c36686c327566626f726f7735636669797064746b6b327365677033767866657475706170736a6e6a767a77786c71326368656261666b72656968737a6e6b6f73787a7367666b757475757a68683434326b3765736a6475796c686461356175736662617574727575617a7a6d6d6261666b7265696637343236636566707278697570787767676e6b6a627468743366337569616563693271633369726c70707579376b716f656e716261666b726569637668756d7a6d6a6c37626f347571686e67777866706b3675707279347761786d3363736b3777676b6b797a6a656a67637761696261666b7265696764777665617878666c347366646e79656478346e6e6e667637667a73706a6d6d72336a34656f7a6a667637746a736f76776d616261666b726569673562367278336d6478777972746e756d796568767565747a72733364776b7876373677747168666179616d6d6832686c7376656261666b72656964667734626d646c3372636f65686e616b343362656f656f7563626276746b786c61676973766e756368756734666f70726870716261666b7265696434336479367a77746e76776f36736b6f6e6c3474636563686c686e75377269687032676e766f61796470786e337177367976616261666b7265696472726d65756a6c766164376f69677a74753435796571787763623677706f34363476777871737434716f336974776b366c64346261666b726569626d69757a6e6d62356c6b376773673633373662347a366f72626e32623533357536776e696d69713568776535736372656636756261666b726569656b637476726f323632706b34757a36376a7071697678746e696562716b33677966716b636c7732767179336d33696f637736656261666b7265696333717362356d6e323278793436676b673377686971687662326c716a6d75636271756971323766796637366237677066336b716261666b72656962787676366f697077787961656a77766634766e66747364366e3362663669786e7675627975733471356e71756434706c6376656261666b72656967357833723364716c6c74326e6468787061686e6935666a65656f326f62713466666c7334686b626937613263667174617070696261666b72656963737636666534796b6f6e6e733668786374636a687437627178353634366362706762737567347872367a673572627468646a346261666b726569667569346a7a6166666c37347a616b6962776d74326a73327732716f736d37797a67696d6563777671707178707a3270736e6d756261666b72656965617933366364326273726e3274697062347a696a766b796c6e666a3764696e73617a333432676e6f7065377773727279706a716261666b726569626578657875736163356c72747a6d6b32366634676337706732687a64663475706d64376b733337727465617a6f6c37366363796261666b726569677876646463757262617867756272656e71656168656e3437646b746d346f6d3533356b6165646571656e783770367a6f6474796261666b72656963646c616d6270756c79617974736966666c327972613535656a6864636368707a6c7833747275746b6f633474696e6b696f6d716261666b72656964756d6c797a6377627561616a61656579637136653679327a6372346a777132616d7933356e7368376c617068696563627976696261666b726569636a777a377036647076637173376f7264687a77736c61626377756a3379336865686b34706c36336a6b7465626a6d6e636a66796261666b726569613276656b756d636e79737768327736326874717537766564746b7365706f6b697870716e3471777a786865666a3262646e69716261666b726569647932656f6878726563726b33736934636f6f6c7861776c63646d71727668736b686b616c3464366276786a666d6473326d32346261666b72656967336d77347865627a7876726a37773579766b67366f356135357466326e6c656e6270727566376f796f33676175716a6874696d6261666b726569616d6b6f6b67677a6b63686b6f7378356a767a366664757a77636e377175676b70377079746d6b33323773626c72747761347a656261666b7265696462673234646e627435746f35766c366d35656b746677737477687032646a68736c6c66356d746369697a6c6767346c736536796261666b726569643269746c6a666f626e7870766a66786e736173326671626c793564796e37746b6f6776636f6a6a786d62376d757169656a74616261666b72656964366c787a6b74756d7935333574767a65646b7333616361717a72716972696d346d69676b62787270356572783567366d6665756261666b72656967756c65796274697268727764667033626d6d6b6d377877713633736f3377617867627779683237377568363264626835356e346261666b726569656f366e627778796168616166737766626534736168716279336837727532686669747a7275366971797871676368376e727a71a264697066735822122096e6010b640216a82f54512f6f5c0bcc884cd571a21674840a7e2e8bfa32755864736f6c63430008070033000000000000000000000000e69cf6b2f44e67a7bea652a6f73e72bb163d3d69
Deployed Bytecode
0x6080604052600436106101355760003560e01c80636352211e116100ab578063a22cb4651161006f578063a22cb4651461043e578063af794a4f14610467578063b88d4fde146104a6578063c87b56dd146104cf578063ddc1d1b21461050c578063e985e9c51461053757610135565b80636352211e14610333578063672dca621461037057806370a08231146103995780637a3c4c17146103d657806395d89b411461041357610135565b806321495e84116100fd57806321495e841461022457806323b872dd1461026457806327a664e91461028d578063425864f8146102b657806342842e0e146102df578063469048401461030857610135565b806301ffc9a71461013a578063060384901461017757806306fdde0314610193578063081812fc146101be578063095ea7b3146101fb575b600080fd5b34801561014657600080fd5b50610161600480360381019061015c9190612afd565b610574565b60405161016e9190612f8e565b60405180910390f35b610191600480360381019061018c9190612b57565b610656565b005b34801561019f57600080fd5b506101a861089e565b6040516101b59190612fa9565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612b57565b610930565b6040516101f29190612ee2565b60405180910390f35b34801561020757600080fd5b50610222600480360381019061021d9190612abd565b6109b5565b005b34801561023057600080fd5b5061024b60048036038101906102469190612b57565b610acd565b60405161025b9493929190612f49565b60405180910390f35b34801561027057600080fd5b5061028b600480360381019061028691906129a7565b610b22565b005b34801561029957600080fd5b506102b460048036038101906102af9190612b84565b610b82565b005b3480156102c257600080fd5b506102dd60048036038101906102d89190612b57565b610b91565b005b3480156102eb57600080fd5b50610306600480360381019061030191906129a7565b610c29565b005b34801561031457600080fd5b5061031d610c49565b60405161032a9190612ee2565b60405180910390f35b34801561033f57600080fd5b5061035a60048036038101906103559190612b57565b610c6d565b6040516103679190612ee2565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190612bc4565b610d1f565b005b3480156103a557600080fd5b506103c060048036038101906103bb919061293a565b610de1565b6040516103cd919061318b565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190612b57565b610e99565b60405161040a919061318b565b60405180910390f35b34801561041f57600080fd5b50610428610f3f565b6040516104359190612fa9565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612a7d565b610fd1565b005b34801561047357600080fd5b5061048e60048036038101906104899190612b57565b611152565b60405161049d93929190613206565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906129fa565b61117c565b005b3480156104db57600080fd5b506104f660048036038101906104f19190612b57565b6111de565b6040516105039190612fa9565b60405180910390f35b34801561051857600080fd5b50610521611e8b565b60405161052e919061318b565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612967565b611e91565b60405161056b9190612f8e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061063f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061064f575061064e826120f3565b5b9050919050565b60006006600083815260200190815260200160002060000154141561067a57600080fd5b606481106106bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b4906130ab565b60405180910390fd5b6106c681610e99565b3410156106d257600080fd5b6000600660008381526020019081526020016000206000018190555060066000828152602001908152602001600020600201600081548092919061071590613504565b919050555060075481106107ff57600060075490506063600754101561076f576007600081548092919061074890613504565b91905055504260066000600754815260200190815260200160002060000181905550610788565b6007600081548092919061078290613504565b91905055505b6107923382611f25565b7f000000000000000000000000e69cf6b2f44e67a7bea652a6f73e72bb163d3d6973ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156107f8573d6000803e3d6000fd5b5050610860565b600061080a82610c6d565b905061081781338461215d565b8073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561085d573d6000803e3d6000fd5b50505b7ffc24b0dc1790ce16fa7b0d129f7fdcc2a23da18a2dfd558c47201d2c4a958122813334604051610893939291906131cf565b60405180910390a150565b6060600080546108ad906134a1565b80601f01602080910402602001604051908101604052809291908181526020018280546108d9906134a1565b80156109265780601f106108fb57610100808354040283529160200191610926565b820191906000526020600020905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b600061093b826123b9565b61097a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109719061310b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c082610c6d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a289061314b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a50612425565b73ffffffffffffffffffffffffffffffffffffffff161480610a7f5750610a7e81610a79612425565b611e91565b5b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab59061306b565b60405180910390fd5b610ac8838361242d565b505050565b600080600080610adc85610c6d565b6006600087815260200190815260200160002060000154610afc87610e99565b600660008981526020019081526020016000206002015493509350935093509193509193565b610b33610b2d612425565b826124e6565b610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b699061316b565b60405180910390fd5b610b7d83838361215d565b505050565b610b8d338284610b22565b5050565b610b9a81610c6d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bd157600080fd5b600060066000838152602001908152602001600020600001819055507fba0927a5f9738a31a455429494626d5b656982903846684db43ca64c39c0c7ec8133604051610c1e9291906131a6565b60405180910390a150565b610c448383836040518060200160405280600081525061117c565b505050565b7f000000000000000000000000e69cf6b2f44e67a7bea652a6f73e72bb163d3d6981565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d906130cb565b60405180910390fd5b80915050919050565b610d2882610c6d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5f57600080fd5b60008111610d6c57600080fd5b8060066000848152602001908152602001600020600101819055504260066000848152602001908152602001600020600001819055507f32feaaef15eb5bbacc4618e0336f1b6c13ccbcc7f2d6d53a0ba8d2dcf54536fa823383604051610dd5939291906131cf565b60405180910390a15050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e499061308b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600754821415610f20576000683635c9adc5dea00000905060006201518090506000600660008681526020019081526020016000206000015442610edf91906133b7565b9050818110610ef45760009350505050610f3a565b818184610f01919061335d565b610f0b919061332c565b83610f1691906133b7565b9350505050610f3a565b600660008381526020019081526020016000206001015490505b919050565b606060018054610f4e906134a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7a906134a1565b8015610fc75780601f10610f9c57610100808354040283529160200191610fc7565b820191906000526020600020905b815481529060010190602001808311610faa57829003601f168201915b5050505050905090565b610fd9612425565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e9061302b565b60405180910390fd5b8060056000611054612425565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611101612425565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111469190612f8e565b60405180910390a35050565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b61118d611187612425565b836124e6565b6111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c39061316b565b60405180910390fd5b6111d8848484846125c4565b50505050565b606060006040518060600160405280603b815260200161507f603b91399050600060405180610c8001604052806040518060600160405280603b8152602001613d23603b913981526020016040518060600160405280603b8152602001614448603b913981526020016040518060600160405280603b8152602001613dd4603b913981526020016040518060600160405280603b8152602001614c59603b913981526020016040518060600160405280603b81526020016145e5603b913981526020016040518060600160405280603b8152602001613f36603b913981526020016040518060600160405280603b8152602001614397603b913981526020016040518060600160405280603b8152602001614a46603b913981526020016040518060600160405280603b81526020016144f9603b913981526020016040518060600160405280603b8152602001614f58603b913981526020016040518060600160405280603b8152602001614149603b913981526020016040518060600160405280603b81526020016143d2603b913981526020016040518060600160405280603b8152602001614be3603b913981526020016040518060600160405280603b8152602001614b6d603b913981526020016040518060600160405280603b8152602001613e85603b913981526020016040518060600160405280603b8152602001615130603b913981526020016040518060600160405280603b8152602001613ad5603b913981526020016040518060600160405280603b8152602001614c94603b913981526020016040518060600160405280603b8152602001614abc603b913981526020016040518060600160405280603b81526020016141bf603b913981526020016040518060600160405280603b8152602001614534603b913981526020016040518060600160405280603b81526020016142ab603b913981526020016040518060600160405280603b81526020016141fa603b913981526020016040518060600160405280603b8152602001614c1e603b913981526020016040518060600160405280603b8152602001614782603b913981526020016040518060600160405280603b8152602001614620603b913981526020016040518060600160405280603b81526020016146d1603b913981526020016040518060600160405280603b8152602001614995603b913981526020016040518060600160405280603b8152602001614fce603b913981526020016040518060600160405280603b8152602001614696603b913981526020016040518060600160405280603b8152602001614d0a603b913981526020016040518060600160405280603b815260200161440d603b913981526020016040518060600160405280603b8152602001614e31603b913981526020016040518060600160405280603b8152602001614b32603b913981526020016040518060600160405280603b8152602001613ce8603b913981526020016040518060600160405280603b8152602001615009603b913981526020016040518060600160405280603b81526020016147f8603b913981526020016040518060600160405280603b81526020016142e6603b913981526020016040518060600160405280603b8152602001614a81603b913981526020016040518060600160405280603b8152602001613d5e603b913981526020016040518060600160405280603b8152602001614dbb603b913981526020016040518060600160405280603b8152602001613b10603b913981526020016040518060600160405280603b8152602001613bfc603b913981526020016040518060600160405280603b8152602001614f1d603b913981526020016040518060600160405280603b8152602001613efb603b913981526020016040518060600160405280603b81526020016147bd603b913981526020016040518060600160405280603b8152602001613bc1603b913981526020016040518060600160405280603b8152602001613f71603b913981526020016040518060600160405280603b81526020016145aa603b913981526020016040518060600160405280603b815260200161495a603b913981526020016040518060600160405280603b815260200161465b603b913981526020016040518060600160405280603b8152602001613a9a603b913981526020016040518060600160405280603b8152602001613d99603b913981526020016040518060600160405280603b8152602001613cad603b913981526020016040518060600160405280603b8152602001614184603b913981526020016040518060600160405280603b8152602001614483603b913981526020016040518060600160405280603b81526020016144be603b913981526020016040518060600160405280603b8152602001614ba8603b913981526020016040518060600160405280603b8152602001613ec0603b913981526020016040518060600160405280603b815260200161491f603b913981526020016040518060600160405280603b8152602001614e6c603b913981526020016040518060600160405280603b81526020016151a6603b913981526020016040518060600160405280603b8152602001614df6603b913981526020016040518060600160405280603b8152602001613fe7603b913981526020016040518060600160405280603b815260200161456f603b913981526020016040518060600160405280603b815260200161486e603b913981526020016040518060600160405280603b8152602001614098603b913981526020016040518060600160405280603b8152602001614f93603b913981526020016040518060600160405280603b815260200161410e603b913981526020016040518060600160405280603b81526020016148a9603b913981526020016040518060600160405280603b8152602001614235603b913981526020016040518060600160405280603b8152602001614321603b913981526020016040518060600160405280603b81526020016150f5603b913981526020016040518060600160405280603b8152602001614ccf603b913981526020016040518060600160405280603b8152602001614ee2603b913981526020016040518060600160405280603b815260200161470c603b913981526020016040518060600160405280603b8152602001613b4b603b913981526020016040518060600160405280603b8152602001613e0f603b913981526020016040518060600160405280603b8152602001613e4a603b913981526020016040518060600160405280603b8152602001614833603b913981526020016040518060600160405280603b8152602001614270603b913981526020016040518060600160405280603b8152602001614af7603b913981526020016040518060600160405280603b81526020016150ba603b913981526020016040518060600160405280603b81526020016149d0603b913981526020016040518060600160405280603b8152602001614d45603b913981526020016040518060600160405280603b8152602001613c37603b913981526020016040518060600160405280603b8152602001614747603b913981526020016040518060600160405280603b8152602001614a0b603b913981526020016040518060600160405280603b8152602001613b86603b913981526020016040518060600160405280603b8152602001614d80603b913981526020016040518060600160405280603b8152602001613fac603b913981526020016040518060600160405280603b8152602001615044603b913981526020016040518060600160405280603b815260200161435c603b913981526020016040518060600160405280603b8152602001613c72603b913981526020016040518060600160405280603b8152602001614022603b913981526020016040518060600160405280603b81526020016140d3603b913981526020016040518060600160405280603b8152602001614ea7603b913981526020016040518060600160405280603b815260200161516b603b913981526020016040518060600160405280603b815260200161405d603b913981526020016040518060600160405280603b81526020016148e4603b9139815250905060648410611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd906130ab565b60405180910390fd5b6007548410611e4157611e17612620565b82604051602001611e29929190612ebe565b60405160208183030381529060405292505050611e86565b611e49612620565b818560648110611e5c57611e5b6135da565b5b6020020151604051602001611e72929190612ebe565b604051602081830303815290604052925050505b919050565b60075481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c906130eb565b60405180910390fd5b611f9e816123b9565b15611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd590612feb565b60405180910390fd5b611fea6000838361265d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203a91906132d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8273ffffffffffffffffffffffffffffffffffffffff1661217d82610c6d565b73ffffffffffffffffffffffffffffffffffffffff16146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca9061312b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a9061300b565b60405180910390fd5b61224e83838361265d565b61225960008261242d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a991906133b7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230091906132d6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124a083610c6d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124f1826123b9565b612530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125279061304b565b60405180910390fd5b600061253b83610c6d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125aa57508373ffffffffffffffffffffffffffffffffffffffff1661259284610930565b73ffffffffffffffffffffffffffffffffffffffff16145b806125bb57506125ba8185611e91565b5b91505092915050565b6125cf84848461215d565b6125db848484846126b7565b61261a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261190612fcb565b60405180910390fd5b50505050565b60606040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250905090565b600060066000838152602001908152602001600020600001819055507fba0927a5f9738a31a455429494626d5b656982903846684db43ca64c39c0c7ec81336040516126aa9291906131a6565b60405180910390a1505050565b60006126d88473ffffffffffffffffffffffffffffffffffffffff1661284e565b15612841578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612701612425565b8786866040518563ffffffff1660e01b81526004016127239493929190612efd565b602060405180830381600087803b15801561273d57600080fd5b505af192505050801561276e57506040513d601f19601f8201168201806040525081019061276b9190612b2a565b60015b6127f1573d806000811461279e576040519150601f19603f3d011682016040523d82523d6000602084013e6127a3565b606091505b506000815114156127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090612fcb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612846565b600190505b949350505050565b600080823b905060008111915050919050565b600061287461286f84613262565b61323d565b9050828152602081018484840111156128905761288f61363d565b5b61289b84828561345f565b509392505050565b6000813590506128b281613a3d565b92915050565b6000813590506128c781613a54565b92915050565b6000813590506128dc81613a6b565b92915050565b6000815190506128f181613a6b565b92915050565b600082601f83011261290c5761290b613638565b5b813561291c848260208601612861565b91505092915050565b60008135905061293481613a82565b92915050565b6000602082840312156129505761294f613647565b5b600061295e848285016128a3565b91505092915050565b6000806040838503121561297e5761297d613647565b5b600061298c858286016128a3565b925050602061299d858286016128a3565b9150509250929050565b6000806000606084860312156129c0576129bf613647565b5b60006129ce868287016128a3565b93505060206129df868287016128a3565b92505060406129f086828701612925565b9150509250925092565b60008060008060808587031215612a1457612a13613647565b5b6000612a22878288016128a3565b9450506020612a33878288016128a3565b9350506040612a4487828801612925565b925050606085013567ffffffffffffffff811115612a6557612a64613642565b5b612a71878288016128f7565b91505092959194509250565b60008060408385031215612a9457612a93613647565b5b6000612aa2858286016128a3565b9250506020612ab3858286016128b8565b9150509250929050565b60008060408385031215612ad457612ad3613647565b5b6000612ae2858286016128a3565b9250506020612af385828601612925565b9150509250929050565b600060208284031215612b1357612b12613647565b5b6000612b21848285016128cd565b91505092915050565b600060208284031215612b4057612b3f613647565b5b6000612b4e848285016128e2565b91505092915050565b600060208284031215612b6d57612b6c613647565b5b6000612b7b84828501612925565b91505092915050565b60008060408385031215612b9b57612b9a613647565b5b6000612ba985828601612925565b9250506020612bba858286016128a3565b9150509250929050565b60008060408385031215612bdb57612bda613647565b5b6000612be985828601612925565b9250506020612bfa85828601612925565b9150509250929050565b612c0d816133eb565b82525050565b612c1c816133fd565b82525050565b6000612c2d82613293565b612c3781856132a9565b9350612c4781856020860161346e565b612c508161364c565b840191505092915050565b6000612c668261329e565b612c7081856132ba565b9350612c8081856020860161346e565b612c898161364c565b840191505092915050565b6000612c9f8261329e565b612ca981856132cb565b9350612cb981856020860161346e565b80840191505092915050565b6000612cd26032836132ba565b9150612cdd8261365d565b604082019050919050565b6000612cf5601c836132ba565b9150612d00826136ac565b602082019050919050565b6000612d186024836132ba565b9150612d23826136d5565b604082019050919050565b6000612d3b6019836132ba565b9150612d4682613724565b602082019050919050565b6000612d5e602c836132ba565b9150612d698261374d565b604082019050919050565b6000612d816038836132ba565b9150612d8c8261379c565b604082019050919050565b6000612da4602a836132ba565b9150612daf826137eb565b604082019050919050565b6000612dc7602e836132ba565b9150612dd28261383a565b604082019050919050565b6000612dea6029836132ba565b9150612df582613889565b604082019050919050565b6000612e0d6020836132ba565b9150612e18826138d8565b602082019050919050565b6000612e30602c836132ba565b9150612e3b82613901565b604082019050919050565b6000612e536029836132ba565b9150612e5e82613950565b604082019050919050565b6000612e766021836132ba565b9150612e818261399f565b604082019050919050565b6000612e996031836132ba565b9150612ea4826139ee565b604082019050919050565b612eb881613455565b82525050565b6000612eca8285612c94565b9150612ed68284612c94565b91508190509392505050565b6000602082019050612ef76000830184612c04565b92915050565b6000608082019050612f126000830187612c04565b612f1f6020830186612c04565b612f2c6040830185612eaf565b8181036060830152612f3e8184612c22565b905095945050505050565b6000608082019050612f5e6000830187612c04565b612f6b6020830186612eaf565b612f786040830185612eaf565b612f856060830184612eaf565b95945050505050565b6000602082019050612fa36000830184612c13565b92915050565b60006020820190508181036000830152612fc38184612c5b565b905092915050565b60006020820190508181036000830152612fe481612cc5565b9050919050565b6000602082019050818103600083015261300481612ce8565b9050919050565b6000602082019050818103600083015261302481612d0b565b9050919050565b6000602082019050818103600083015261304481612d2e565b9050919050565b6000602082019050818103600083015261306481612d51565b9050919050565b6000602082019050818103600083015261308481612d74565b9050919050565b600060208201905081810360008301526130a481612d97565b9050919050565b600060208201905081810360008301526130c481612dba565b9050919050565b600060208201905081810360008301526130e481612ddd565b9050919050565b6000602082019050818103600083015261310481612e00565b9050919050565b6000602082019050818103600083015261312481612e23565b9050919050565b6000602082019050818103600083015261314481612e46565b9050919050565b6000602082019050818103600083015261316481612e69565b9050919050565b6000602082019050818103600083015261318481612e8c565b9050919050565b60006020820190506131a06000830184612eaf565b92915050565b60006040820190506131bb6000830185612eaf565b6131c86020830184612c04565b9392505050565b60006060820190506131e46000830186612eaf565b6131f16020830185612c04565b6131fe6040830184612eaf565b949350505050565b600060608201905061321b6000830186612eaf565b6132286020830185612eaf565b6132356040830184612eaf565b949350505050565b6000613247613258565b905061325382826134d3565b919050565b6000604051905090565b600067ffffffffffffffff82111561327d5761327c613609565b5b6132868261364c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132e182613455565b91506132ec83613455565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133215761332061354d565b5b828201905092915050565b600061333782613455565b915061334283613455565b9250826133525761335161357c565b5b828204905092915050565b600061336882613455565b915061337383613455565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133ac576133ab61354d565b5b828202905092915050565b60006133c282613455565b91506133cd83613455565b9250828210156133e0576133df61354d565b5b828203905092915050565b60006133f682613435565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561348c578082015181840152602081019050613471565b8381111561349b576000848401525b50505050565b600060028204905060018216806134b957607f821691505b602082108114156134cd576134cc6135ab565b5b50919050565b6134dc8261364c565b810181811067ffffffffffffffff821117156134fb576134fa613609565b5b80604052505050565b600061350f82613455565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135425761354161354d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f456e746572206120746f6b656e49642066726f6d203020746f2039392e204f6e60008201527f6c79203130302074756c6970732e000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613a46816133eb565b8114613a5157600080fd5b50565b613a5d816133fd565b8114613a6857600080fd5b50565b613a7481613409565b8114613a7f57600080fd5b50565b613a8b81613455565b8114613a9657600080fd5b5056fe6261666b726569646a6c7179637637686b766e367a6d736e77626a79376c353633707961326677746e6a356d6d69717a6f736a7a797576763761796261666b726569686b336d696d787871696d776b6f776d32617270666165777a376d356f3736776376773461637969786874756e363733617a33346261666b726569686669706c776a6f347264737a75686e766a796e7837696573696a33626f726a64337266356f6e6c66676b776c71716a70626f756261666b72656963366a357170677733323677647436777961663665666d627a7a637734726c357a666a696b656e337578687534733635686332656261666b7265696262686375687879653267613379626c6634766d787371346e33616f6678636b62796c363661787567637a6233653664616e73756261666b726569686e657a6f64717264677368706b78356d6b6b6562697a34373279367233786a6e686a7472656137357464366a786f62663768616261666b72656963706e64346479736f616f76337261336a78736e6f616e79667967336435366e74757a6c6a726f37376132627067627a6f366e756261666b72656961656a366d6b6d366a6a697865717468656f6d717462706334787033797274703636766e6d637977786c657235716c67696477346261666b726569637974637735373268717a6b736e337a726475743232786f37776a786b66346f766a696a6f6b68706b7836766e63336e617837696261666b7265696533756e703235643679783779766937626f686f78326d6674707135726972686c343434796c6570356976696a6f7679627335756261666b7265696764696d71776a726b6f6b6c6266696967626b6670766d726e6965616c646a7232627635326a6237327366626b3661716f7271796261666b726569616a6c71336e64336e633778753234356571776e6f716b6834667a323572646b696e7737776b6a74717035347863627864736b696261666b726569616b6272676a377932687a62376468727075623663366937326933637036796773726f66353574357565623777746733336261656261666b7265696270686a6a6b6161727a64366b6b6e77776d6a746f6f636375703770337779757661686d61656d6379666a6e6264626a636932346261666b7265696433636b7a6c63763370367a68336f3363776272796e6f336b6571767a79616770746e78746f65723361777576796579647a34756261666b726569627a6c3232656c343762636f32686936776a367a6f766f7374656f7763646b7a69666567626733786e63646864336433706a6e756261666b726569657733676a763264676c64667a77356b667367696e6b76717a35727a6b74643564346e366132666e6d75716a6a6b37686863696d6261666b72656965686e33746f7662367761326e74366e736f7561766d79367672696a63347a373735686b34686a7a646e37623579356c6b6979616261666b726569646669787532783573766f6d34616976627a627779737a7274376574707937766d346465696570786766797a73687a6e327970696261666b7265696135377976736c3565736c6f633766736e377569773571366f706b6b3437376637716768327364326d69626c36366477677a346d6261666b726569616566636a6d6d706c6f6674716936616f33647a72706a74746e726861793268716974357078747a70776b69736d7669776937656261666b726569616272777236626a36327277617970326e7661613777656c74323468337266727369696c6a3666367161763472796a63656234716261666b72656961687764767077747a636e327434357273776f6c35676b6134327964327a6b6e3337746e346d736371376d657375776e677179716261666b726569687367647a767569727473336a74336732366c746f3733717175346267376e347175373264676d6b756a6a6b656e6565376537616261666b726569647366777a74796861367137693574656d716d34346d6c68736c637865726a6861736a326b646671686b73736c35796672676e756261666b726569673762646d653477323669743276687064753261687862746c327376756c356933683578686c70626472786e6d726e6f6d717a656261666b72656968786364656671356b34766f6d626c786b756a37356433623369786173787668756f6261673477686b72777961686679666964716261666b7265696273766875336a7865796f68737777696337753378747a77777a6267737371726d6d777a796a326677686e796b777075753765756261666b726569616b667579337061626970797333657365367565726475637a7068793572646b6363677568796873677970726d6e37717a336b656261666b726569676a6b6b68776233727464677662686a6336616f6172726c716d796665376634643637667674787072716e733372357a75366a6d6261666b726569667768356968373665643434637935343576796a6f767a7265326573676b3761366d326e6a656232716f356f667a7573367133346261666b726569646e763274373565336b78367567616a7332336c34373336617373786b7a726767736f637a3264767967736a6c7668766e747a616261666b726569657169353669653769796c34726e6532723779706e76726263707678787170333436633734736d676433767970677370647764696261666b72656965716368756d79377a69627871346d717070647163647666617771366f7437647870627a3376356675653262777970356976736d6261666b72656963707a79756d6e37666f376e65677864776233616e6c6a7766326c7179736571656837796f67636f69796937356b666274716b796261666b7265696569716d6332743632743270676162656e666b6569636c62346773696663776771766d6b63777163376c6b61786d3476717661696261666b7265696832687633766a69706a326b696270796e726d756c6e6e6f786a353733376362656732626a6c34327a633362686366647a6632756261666b726569636576376e7837733735797176326a70747477347272756b7a74777472346b7562787273337776337634716c6b7a346e713475796261666b726569686b616f767633666a32757379336b6b7a70346873706b69736171796d6b693536706c6a76716d3779727632696a7461337062716261666b72656964326a726b377271757861797864667679673377343437777173736f75746f79627165696875756e6d6175346e356f75726a34696261666b726569676d677169616669346f62746d747a7a736f63796c72666363746a74656d6d33746476656372336c6f626f3673717a37336f33756261666b7265696774786a6f683472783632757a6c78347432337478716b336f77766e33636b68793736366d6a697767767933666e79326f7a7a616261666b726569636b6a35663364773661626b34657a6a367676657068726f61636e697a70743437346a786a666663636b6c636934626d37756c756261666b726569653368336c7476766e6f6b796c7a797a6370756c74643761356261356c647034756934656a6c6872376c6275636b6c6a347a66756261666b726569686f3275666f636e6136646761767973367733687a6a75646370706e6937666e6d6f357064657333636e336d376e6469753362346261666b7265696875786b75333275646e32656f6c726469766475677232646435736f7432753763767468337170736a6f71626b6c6c62776b67796261666b726569683268686f6572756e746266793475666e676b6f3377626470346d36677a376f747533686e7475766e746c666c7965686b656a716261666b726569676b6a777a7a687634636e6477336568736d73626d69787a727878767270716a32653279656d786e6e6c776b65773566366773346261666b726569646476736e3234697377726d78743363656f37706e6773766d3434717a7a6b6e71746f32687a346d6579747362717732713279796261666b726569636e6a6e6e753677336372627a786b6f61326736323561766d6e656372683470746d75766a327135697a796765716874746a6e796261666b726569646e336f637a336d366c7a6775377768696f6f7137346d74637a626765743566696537646c647a77686166646b747935796a65346261666b72656967777061323571797837663233763774326e62647a7977666967777033323464657a326b7666727779696265636b6c376b6d72796261666b72656961353435367269626d69736435353563777436767a7535376f71716b6f6e75676f7a79776a756f7a736f786c6f3766666f7178696261666b7265696567343734716f6567356d796b6c6437647065676f346f793474766a6f726c6774706a61637733636a726c376f6f6773667336616261666b7265696274777077686b7367736b77717368777571656877666d3737327075377266786a637870696a707535696b6832637776637a76716261666b7265696468676b686b757770357171787a646d67613775683532717a6576657535337a7434613261686f617575723667616f72663373716261666b72656961736736373463726934776f69326e6d66326265323769323467646567786863356867616870796764377671637271767a3476616261666b7265696770786767656564737732793772643564717a6868663471787133687733793571716e6d7a676d6267353232357a33326b6536656261666b726569653371666570646c34706b7365367575336971776662326671757366703371737032726837796e76707470733362626e717a646d6261666b72656967626a7a796d627433666d6c6d667461356f726f723235737765647567703264726476736a62336a7561686e3665333372366c346261666b72656963356b3775326d3467337975667170696e376f666e623768676c357664746d746f33366c3333627736736a7735686b746d6f35616261666b726569616c6a7736677233736d736d686d72766364766c7378787667726f7975627a37666b327772767063726d6f6d783770646e6a6f656261666b726569636a65686e356b7272336c636e796c3635657968336e6a7266773561746570647a666d6a6167613434666d616e676476357436716261666b726569616c7137747a3636727771696674336877666873376d6b706a7261717032346c6b346b6b32616d6c6e683533357a7a6b697a7a796261666b72656962753533676777686f6f6a716b717773336c366e616d706d7a7879637a6b796d77356f7a667a3671347437747077696d686134796261666b726569636c626a33756a67786768356933706c61693574323470376732616176667a61687532677871346d6176656e61356f6a7866736d6261666b726569646566737878623569346e7664626c7961326d68376834756f3437647775746862356a716d6172746767347376777276783278656261666b726569626277346f79616b69676d757273636a33616b6e7971347471346234336a6a6b3277736f737a6f343637327368736f67347373756261666b726569637670656e7071657a6364656870636432736e73676a3479736c326c613434667a71646f6c626c723665767070733375756a636d6261666b72656962613332323775636c7a6f6264676c6d6b76797a346235646136677033703365687466717a6e7570726c6775336c74376a366e716261666b726569686c36686c327566626f726f7735636669797064746b6b327365677033767866657475706170736a6e6a767a77786c71326368656261666b72656968737a6e6b6f73787a7367666b757475757a68683434326b3765736a6475796c686461356175736662617574727575617a7a6d6d6261666b7265696637343236636566707278697570787767676e6b6a627468743366337569616563693271633369726c70707579376b716f656e716261666b726569637668756d7a6d6a6c37626f347571686e67777866706b3675707279347761786d3363736b3777676b6b797a6a656a67637761696261666b7265696764777665617878666c347366646e79656478346e6e6e667637667a73706a6d6d72336a34656f7a6a667637746a736f76776d616261666b726569673562367278336d6478777972746e756d796568767565747a72733364776b7876373677747168666179616d6d6832686c7376656261666b72656964667734626d646c3372636f65686e616b343362656f656f7563626276746b786c61676973766e756368756734666f70726870716261666b7265696434336479367a77746e76776f36736b6f6e6c3474636563686c686e75377269687032676e766f61796470786e337177367976616261666b7265696472726d65756a6c766164376f69677a74753435796571787763623677706f34363476777871737434716f336974776b366c64346261666b726569626d69757a6e6d62356c6b376773673633373662347a366f72626e32623533357536776e696d69713568776535736372656636756261666b726569656b637476726f323632706b34757a36376a7071697678746e696562716b33677966716b636c7732767179336d33696f637736656261666b7265696333717362356d6e323278793436676b673377686971687662326c716a6d75636271756971323766796637366237677066336b716261666b72656962787676366f697077787961656a77766634766e66747364366e3362663669786e7675627975733471356e71756434706c6376656261666b72656967357833723364716c6c74326e6468787061686e6935666a65656f326f62713466666c7334686b626937613263667174617070696261666b72656963737636666534796b6f6e6e733668786374636a687437627178353634366362706762737567347872367a673572627468646a346261666b726569667569346a7a6166666c37347a616b6962776d74326a73327732716f736d37797a67696d6563777671707178707a3270736e6d756261666b72656965617933366364326273726e3274697062347a696a766b796c6e666a3764696e73617a333432676e6f7065377773727279706a716261666b726569626578657875736163356c72747a6d6b32366634676337706732687a64663475706d64376b733337727465617a6f6c37366363796261666b726569677876646463757262617867756272656e71656168656e3437646b746d346f6d3533356b6165646571656e783770367a6f6474796261666b72656963646c616d6270756c79617974736966666c327972613535656a6864636368707a6c7833747275746b6f633474696e6b696f6d716261666b72656964756d6c797a6377627561616a61656579637136653679327a6372346a777132616d7933356e7368376c617068696563627976696261666b726569636a777a377036647076637173376f7264687a77736c61626377756a3379336865686b34706c36336a6b7465626a6d6e636a66796261666b726569613276656b756d636e79737768327736326874717537766564746b7365706f6b697870716e3471777a786865666a3262646e69716261666b726569647932656f6878726563726b33736934636f6f6c7861776c63646d71727668736b686b616c3464366276786a666d6473326d32346261666b72656967336d77347865627a7876726a37773579766b67366f356135357466326e6c656e6270727566376f796f33676175716a6874696d6261666b726569616d6b6f6b67677a6b63686b6f7378356a767a366664757a77636e377175676b70377079746d6b33323773626c72747761347a656261666b7265696462673234646e627435746f35766c366d35656b746677737477687032646a68736c6c66356d746369697a6c6767346c736536796261666b726569643269746c6a666f626e7870766a66786e736173326671626c793564796e37746b6f6776636f6a6a786d62376d757169656a74616261666b72656964366c787a6b74756d7935333574767a65646b7333616361717a72716972696d346d69676b62787270356572783567366d6665756261666b72656967756c65796274697268727764667033626d6d6b6d377877713633736f3377617867627779683237377568363264626835356e346261666b726569656f366e627778796168616166737766626534736168716279336837727532686669747a7275366971797871676368376e727a71a264697066735822122096e6010b640216a82f54512f6f5c0bcc884cd571a21674840a7e2e8bfa32755864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e69cf6b2f44e67a7bea652a6f73e72bb163d3d69
-----Decoded View---------------
Arg [0] : _feeRecipient (address): 0xe69CF6B2F44e67A7bEA652A6F73E72BB163D3D69
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e69cf6b2f44e67a7bea652a6f73e72bb163d3d69
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.