Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 15165889 | 743 days ago | IN | 0 ETH | 0.0275758 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Items
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.7; import { ERC721MM } from "./ERC721MM.sol"; contract Items is ERC721MM { string constant public name = "Meta & Magic Items"; string constant public symbol = "ITEMS"; mapping(uint256 => address) statsAddress; mapping(uint256 => uint256) bossSupplies; uint256 lastTokenIdMinted; /*/////////////////////////////////////////////////////////////// INITIALIZATION //////////////////////////////////////////////////////////////*/ function initialize(address stats_1, address stats_2, address stats_3, address stats_4, address stats_5, address renderer_) external { require(msg.sender == _owner(), "not authorized"); statsAddress[0] = stats_1; statsAddress[1] = stats_2; statsAddress[2] = stats_3; statsAddress[3] = stats_4; statsAddress[9] = stats_5; renderer = renderer_; // Setting boss drop supplies bossSupplies[1] = 1000; bossSupplies[2] = 900; bossSupplies[3] = 800; bossSupplies[4] = 700; bossSupplies[5] = 600; bossSupplies[6] = 500; bossSupplies[7] = 400; bossSupplies[8] = 300; bossSupplies[9] = 200; } function setLastTokenIdMinted(uint256 _tokenId) external { require(msg.sender == _owner(), "not authorized"); lastTokenIdMinted = _tokenId; } /*/////////////////////////////////////////////////////////////// VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ function getStats(uint256 id_) external view virtual returns(bytes10[6] memory stats_) { uint256 seed = entropySeed; require(seed != 0, "Not revealed"); stats_ = StatsLike(statsAddress[id_ > 10000 ? 9 : (id_ % 4)]).getStats(_traits(seed, id_)); } function isSpecial(uint256 id) external view returns(bool sp) { return _isSpecial(id, entropySeed); } function tokenURI(uint256 id) external view returns (string memory) { uint256 seed = entropySeed; if (seed == 0) return RendererLike(renderer).getPlaceholder(2); return RendererLike(renderer).getUri(id, _traits(seed, id), _getCategory(id,seed)); } /*/////////////////////////////////////////////////////////////// MINT FUNCTIONS //////////////////////////////////////////////////////////////*/ function mintDrop(uint256 boss, address to) external virtual returns(uint256 id) { require(auth[msg.sender], "not authorized"); id = _bossDropStart(boss) + bossSupplies[boss]--; // Note boss drops are predictable because the entropy seed is known _mint(to, id, 2); } function burnFrom(address from, uint256 id) external returns (bool) { require(auth[msg.sender], "not authorized"); _burn(from, id); return true; } function mint(address to, uint256 amount, uint256 stage) external override returns(uint256 id) { require(auth[msg.sender], "not authorized"); for (uint256 i = 0; i < amount; i++) { id = lastTokenIdMinted + 1; lastTokenIdMinted++; _mint(to, id, stage); } } /*/////////////////////////////////////////////////////////////// TRAIT FUNCTIONS //////////////////////////////////////////////////////////////*/ function _traits(uint256 seed_, uint256 id_) internal pure override returns (uint256[6] memory traits) { require(seed_ != uint256(0), "seed not set"); if (_isSpecial(id_, seed_)) return _getSpecialTraits(id_); traits = [_getTier(id_, seed_, "LEVEL"), _getTier(id_, seed_, "KIND"), _getTier(id_, seed_, "MATERIAL"), _getTier(id_, seed_, "RARITY"), _getTier(id_, seed_, "QUALITY"), _getElement(id_, seed_, "ELEMENT")]; uint256 boss = _getBossForId(id_); if (boss > 0) { traits[1] = 10 + boss; traits[4] = 0; // Boss traits doesnt have material type } } function _getSpecialTraits(uint256 id_) internal pure returns (uint256[6] memory t) { uint256 spc = (id_ / 1250) + 1; uint256 traitIndcator = spc * 10 + spc; t = [traitIndcator,traitIndcator,traitIndcator,traitIndcator,traitIndcator,traitIndcator]; } function _getElement(uint256 id_, uint256 seed, bytes32 salt) internal pure returns (uint256 class_) { if (id_ % 4 == 3) return _getTier(id_, seed, "POTENCY"); uint256 rdn = uint256(keccak256(abi.encode(id_, seed, salt))) % 100_0000 + 1; if (rdn <= 50_0000) return 1; return (rdn % 5) + 2; } function _bossDropStart(uint256 boss) internal pure returns(uint256 start) { if (boss == 1) start = 10000; if (boss == 2) start = 11000; if (boss == 3) start = 11900; if (boss == 4) start = 12700; if (boss == 5) start = 13400; if (boss == 6) start = 14000; if (boss == 7) start = 14500; if (boss == 8) start = 14900; if (boss == 9) start = 15200; } function _getBossForId(uint256 id) internal pure returns(uint256 boss) { if (id <= 10000) return 0; if (id <= 11000) return 1; if (id <= 11900) return 2; if (id <= 12700) return 3; if (id <= 13400) return 4; if (id <= 14000) return 5; if (id <= 14500) return 6; if (id <= 14900) return 7; if (id <= 15200) return 8; if (id <= 15400) return 9; } function _isSpecial(uint256 id, uint256 seed) internal pure returns (bool special) { uint256 rdn = _getRndForSpecial(seed); for (uint256 i = 0; i < 9; i++) { if (id == rdn + (1250 * i)) { special = true; break; } } } function _getSpecialCategory(uint256 id, uint256 seed) internal pure returns (uint256 spc) { uint256 num = (id / 1250) + 1; spc = num + 5 + (num - 1); } function _getCategory(uint256 id, uint256 seed) internal pure returns (uint256 cat) { // Boss Drop if (id > 10000) return cat = 4; if (_isSpecial(id, seed)) return _getSpecialCategory(id, seed); return 2; } function _getRndForSpecial(uint256 seed) internal pure virtual returns (uint256 rdn) { rdn = uint256(keccak256(abi.encode(seed, "SPECIAL"))) % 1250 + 1; } } interface RendererLike { function getUri(uint256 id, uint256[6] calldata traits, uint256 cat) external view returns (string memory meta); function getPlaceholder(uint256 cat) external pure returns (string memory meta); } interface StatsLike { function getStats(uint256[6] calldata attributes) external view returns (bytes10[6] memory stats_); } interface VRFCoordinatorV2Interface { function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.8.7; /// @notice Modern and gas efficient ERC-721 + ERC-20/EIP-2612-like implementation, /// Modified version inspired by ERC721A abstract contract ERC721MM { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*/////////////////////////////////////////////////////////////// ERC-721 STORAGE //////////////////////////////////////////////////////////////*/ struct AddressData { uint128 balance; uint64 listMinted; uint64 publicMinted; } uint256 public totalSupply; uint256 public entropySeed; mapping(address => bool) public auth; mapping(address => AddressData) public datas; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; // Rendering information address public renderer; // Oracle information address public VRFcoord; uint64 public subId; bytes32 public keyhash; /*/////////////////////////////////////////////////////////////// VIRTUAL FUNCTIONS //////////////////////////////////////////////////////////////*/ function _traits(uint256 entropy_, uint256 id_) internal pure virtual returns (uint256[6] memory traits_); /*/////////////////////////////////////////////////////////////// VIEW FUNCTION //////////////////////////////////////////////////////////////*/ function owner() external view returns (address owner_) { return _owner(); } function balanceOf(address add) external view returns(uint256 balance_) { balance_ = datas[add].balance; } function listMinted(address add) external view returns(uint256 minted_) { minted_ = datas[add].listMinted; } function publicMinted(address add) external view returns(uint256 minted_) { minted_ = datas[add].publicMinted; } /*/////////////////////////////////////////////////////////////// M&M SPECIFIC LOGIC //////////////////////////////////////////////////////////////*/ function setAuth(address add_, bool auth_) external { require(_owner() == msg.sender, "not authorized"); auth[add_] = auth_; } function mint(address to, uint256 amount, uint256 stage) external virtual returns(uint256 id) { require(auth[msg.sender], "not authorized"); for (uint256 i = 0; i < amount; i++) { id = totalSupply + 1; _mint(to, id, stage); } } function setUpOracle(address vrf_, bytes32 keyHash, uint64 subscriptionId) external { require(msg.sender == _owner()); VRFcoord = vrf_; keyhash = keyHash; subId = subscriptionId; } function requestEntropy() external { require(msg.sender == _owner(), "not auth"); require(entropySeed == 0, "already requested"); VRFCoordinatorV2Interface(VRFcoord).requestRandomWords(keyhash, subId, 3, 200000, 1); } function rawFulfillRandomWords(uint256 , uint256[] memory randomWords) external { require(msg.sender == VRFcoord, "not allowed"); require(entropySeed == 0); entropySeed = randomWords[0]; } function getTraits(uint256 id_) external view returns (uint256[6] memory traits_) { return _traits(entropySeed, id_); } function _getTier(uint256 id_, uint256 seed, bytes32 salt) internal pure returns (uint256 t_) { uint256 rdn = uint256(keccak256(abi.encode(id_, seed, salt))) % 100_0000 + 1; if (rdn <= 28_9333) return 1; if (rdn <= 52_8781) return 2; if (rdn <= 71_8344) return 3; if (rdn <= 85_8022) return 4; if (rdn <= 94_7815) return 5; return 6; } /*/////////////////////////////////////////////////////////////// ERC-721 LOGIC //////////////////////////////////////////////////////////////*/ function transfer(address to, uint256 tokenId) external returns (bool) { require(msg.sender == ownerOf[tokenId], "NOT_OWNER"); _transfer(msg.sender, to, tokenId); return true; } function supportsInterface(bytes4 interfaceId) external pure returns (bool supported) { supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function approve(address spender, uint256 tokenId) external { address owner_ = ownerOf[tokenId]; require(msg.sender == owner_ || isApprovedForAll[owner_][msg.sender], "NOT_APPROVED"); getApproved[tokenId] = spender; emit Approval(owner_, spender, tokenId); } function setApprovalForAll(address operator, bool approved) external { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom(address from, address to, uint256 tokenId) public returns (bool){ require( msg.sender == from || msg.sender == getApproved[tokenId] || isApprovedForAll[from][msg.sender] || auth[msg.sender], "NOT_APPROVED" ); _transfer(from, to, tokenId); return true; } function safeTransferFrom(address from, address to, uint256 tokenId) external { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public { transferFrom(from, to, tokenId); if (to.code.length != 0) { // selector = `onERC721Received(address,address,uint,bytes)` (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, address(0), tokenId, data)); bytes4 selector = abi.decode(returned, (bytes4)); require(selector == 0x150b7a02, "NOT_ERC721_RECEIVER"); } } /*/////////////////////////////////////////////////////////////// INTERNAL UTILS //////////////////////////////////////////////////////////////*/ function _owner() internal view returns (address owner_) { bytes32 slot = bytes32(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103); assembly { owner_ := sload(slot) } } function _transfer(address from, address to, uint256 tokenId) internal { require(ownerOf[tokenId] == from, "not owner"); datas[from].balance--; datas[to].balance++; delete getApproved[tokenId]; ownerOf[tokenId] = to; emit Transfer(from, to, tokenId); } function _mint(address to, uint256 tokenId, uint256 stage) internal { require(ownerOf[tokenId] == address(0), "ALREADY_MINTED"); totalSupply++; // This is safe because the sum of all user // balances can't exceed type(uint256).max! unchecked { datas[to].balance++; stage == 1 ? datas[to].listMinted++ : datas[to].publicMinted++; } ownerOf[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(address acc, uint256 tokenId) internal { address owner_ = ownerOf[tokenId]; require(acc == owner_, "NOT_OWNER"); require(ownerOf[tokenId] != address(0), "NOT_MINTED"); totalSupply--; datas[owner_].balance--; delete ownerOf[tokenId]; emit Transfer(owner_, address(0), tokenId); } } interface VRFCoordinatorV2Interface { function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"VRFcoord","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"datas","outputs":[{"internalType":"uint128","name":"balance","type":"uint128"},{"internalType":"uint64","name":"listMinted","type":"uint64"},{"internalType":"uint64","name":"publicMinted","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"entropySeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getStats","outputs":[{"internalType":"bytes10[6]","name":"stats_","type":"bytes10[6]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getTraits","outputs":[{"internalType":"uint256[6]","name":"traits_","type":"uint256[6]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stats_1","type":"address"},{"internalType":"address","name":"stats_2","type":"address"},{"internalType":"address","name":"stats_3","type":"address"},{"internalType":"address","name":"stats_4","type":"address"},{"internalType":"address","name":"stats_5","type":"address"},{"internalType":"address","name":"renderer_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isSpecial","outputs":[{"internalType":"bool","name":"sp","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyhash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"listMinted","outputs":[{"internalType":"uint256","name":"minted_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stage","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"boss","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintDrop","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"publicMinted","outputs":[{"internalType":"uint256","name":"minted_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renderer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"add_","type":"address"},{"internalType":"bool","name":"auth_","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"setLastTokenIdMinted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vrf_","type":"address"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"internalType":"uint64","name":"subscriptionId","type":"uint64"}],"name":"setUpOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506125df806100206000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063b13038a1116100b8578063cd5d21181161007c578063cd5d2118146105d6578063d4d46e50146105f9578063e1dc07611461060c578063e985e9c51461062c578063eb1d28bb1461065a57600080fd5b8063b13038a114610582578063b88d4fde1461058a578063c87b56dd1461059d578063cba57e38146105b0578063cc2a9a5b146105c357600080fd5b80638da5cb5b116100ff5780638da5cb5b1461051d57806395d89b4114610525578063a22cb46514610549578063a859e33a1461055c578063a9059cbb1461056f57600080fd5b806370a08231146104a557806379cc6790146104d75780637b303965146104ea5780638ada6b0f1461050a57600080fd5b80631fe543e3116101b357806342842e0e1161018257806342842e0e146103e3578063468f9b14146103f65780636352211e146103ff57806368a6cdf21461042857806369ebe78e1461049c57600080fd5b80631fe543e31461039757806323b872dd146103aa57806332ed5391146103bd57806335599310146103d057600080fd5b80630b44a218116101fa5780630b44a218146102e85780631015805b146102fb578063156e29f61461034257806318160ddd146103555780631d02f7b81461035e57600080fd5b806301ffc9a71461022c57806306fdde0314610254578063081812fc14610292578063095ea7b3146102d3575b600080fd5b61023f61023a3660046120a3565b61068c565b60405190151581526020015b60405180910390f35b610285604051806040016040528060128152602001714d6574612026204d61676963204974656d7360701b81525081565b60405161024b9190612348565b6102bb6102a036600461214a565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b6102e66102e1366004611fa9565b6106c3565b005b6102e66102f6366004611f21565b6107a8565b610334610309366004611d79565b6001600160a01b0316600090815260036020526040902054600160c01b90046001600160401b031690565b60405190815260200161024b565b610334610350366004611fd3565b610810565b61033460005481565b61033461036c366004611d79565b6001600160a01b0316600090815260036020526040902054600160801b90046001600160401b031690565b6102e66103a536600461219f565b610894565b61023f6103b8366004611e3b565b61090e565b6102e66103cb366004611f5d565b6109d6565b6103346103de36600461217c565b610a3e565b6102e66103f1366004611e3b565b610aac565b61033460015481565b6102bb61040d36600461214a565b6004602052600090815260409020546001600160a01b031681565b61046d610436366004611d79565b6003602052600090815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b604080516001600160801b0390941684526001600160401b03928316602085015291169082015260600161024b565b61033460095481565b6103346104b3366004611d79565b6001600160a01b03166000908152600360205260409020546001600160801b031690565b61023f6104e5366004611fa9565b610acc565b6104fd6104f836600461214a565b610b0e565b60405161024b91906122ff565b6007546102bb906001600160a01b031681565b6102bb610c0a565b610285604051806040016040528060058152602001644954454d5360d81b81525081565b6102e6610557366004611f21565b610c27565b6102e661056a36600461214a565b610c93565b61023f61057d366004611fa9565b610cd8565b6102e6610d35565b6102e6610598366004611e77565b610e85565b6102856105ab36600461214a565b610fbe565b61023f6105be36600461214a565b61108e565b6102e66105d1366004611dc7565b61109c565b61023f6105e4366004611d79565b60026020526000908152604090205460ff1681565b6008546102bb906001600160a01b031681565b61061f61061a36600461214a565b61133c565b60405161024b919061233a565b61023f61063a366004611d94565b600660209081526000928352604080842090915290825290205460ff1681565b60085461067490600160a01b90046001600160401b031681565b6040516001600160401b03909116815260200161024b565b60006380ac58cd60e01b6001600160e01b0319831614806106bd5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000818152600460205260409020546001600160a01b03163381148061070c57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b61074c5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336107bf60008051602061258a8339815191525490565b6001600160a01b0316146107e55760405162461bcd60e51b81526004016107439061235b565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b3360009081526002602052604081205460ff1661083f5760405162461bcd60e51b81526004016107439061235b565b60005b8381101561088c57600c546108589060016123fd565b600c8054919350600061086a836124ec565b919050555061087a858385611350565b80610884816124ec565b915050610842565b509392505050565b6008546001600160a01b031633146108dc5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610743565b600154156108e957600080fd5b806000815181106108fc576108fc612547565b60200260200101516001819055505050565b6000336001600160a01b038516148061093d57506000828152600560205260409020546001600160a01b031633145b8061096b57506001600160a01b038416600090815260066020908152604080832033845290915290205460ff165b8061098557503360009081526002602052604090205460ff165b6109c05760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b6044820152606401610743565b6109cb8484846114f6565b5060015b9392505050565b60008051602061258a833981519152546001600160a01b0316336001600160a01b031614610a0357600080fd5b600880546009939093556001600160401b03909116600160a01b026001600160e01b03199092166001600160a01b0390931692909217179055565b3360009081526002602052604081205460ff16610a6d5760405162461bcd60e51b81526004016107439061235b565b6000838152600b60205260408120805491610a87836124ae565b91905055610a9484611654565b610a9e91906123fd565b90506106bd82826002611350565b610ac783838360405180602001604052806000815250610e85565b505050565b3360009081526002602052604081205460ff16610afb5760405162461bcd60e51b81526004016107439061235b565b610b0583836116d9565b50600192915050565b610b16611d44565b60015480610b555760405162461bcd60e51b815260206004820152600c60248201526b139bdd081c995d99585b195960a21b6044820152606401610743565b600a60006127108511610b7257610b6d600486612507565b610b75565b60095b81526020810191909152604001600020546001600160a01b031663ecac6724610b9e838661183b565b6040518263ffffffff1660e01b8152600401610bba919061233a565b60c06040518083038186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf9190612006565b6000610c2260008051602061258a8339815191525490565b905090565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008051602061258a833981519152546001600160a01b0316336001600160a01b031614610cd35760405162461bcd60e51b81526004016107439061235b565b600c55565b6000818152600460205260408120546001600160a01b03163314610d2a5760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610743565b610b053384846114f6565b60008051602061258a833981519152546001600160a01b0316336001600160a01b031614610d905760405162461bcd60e51b81526020600482015260086024820152670dcdee840c2eae8d60c31b6044820152606401610743565b60015415610dd45760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995c5d595cdd1959607a1b6044820152606401610743565b6008546009546040516305d3b1d360e41b81526004810191909152600160a01b82046001600160401b031660248201526003604482015262030d406064820152600160848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e829190612163565b50565b610e9084848461090e565b506001600160a01b0383163b15610fb8576000836001600160a01b031663150b7a023360008686604051602401610eca94939291906122c2565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610f0391906122a6565b600060405180830381855afa9150503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b50915050600081806020019051810190610f5d91906120c0565b9050630a85bd0160e11b6001600160e01b0319821614610fb55760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b6044820152606401610743565b50505b50505050565b6001546060908061104a576007546040516302fa6c9b60e11b8152600260048201526001600160a01b03909116906305f4d936906024015b60006040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cf91908101906120dd565b6007546001600160a01b0316630c3501be84611066848261183b565b6110708786611971565b6040518463ffffffff1660e01b8152600401610ff693929190612383565b60006106bd826001546119a7565b60008051602061258a833981519152546001600160a01b0316336001600160a01b0316146110dc5760405162461bcd60e51b81526004016107439061235b565b7f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380546001600160a01b03199081166001600160a01b03988916179091557fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc780548216968816969096179095557fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba880548616948716949094179093557fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa3975980548516928616929092179091557f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb28480548416918516919091179055600780549092169216919091179055600b6020526103e87f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf556103847fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634556103207f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e556102bc7f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c784556102587febae6141bae5521e99e0a8d610356b0f501fea54980b59c84841db43ba7204f4556101f47f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc556101907ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a965561012c7f71f482bdabd1ea844d62c952b094e632959690d7448ca2aab34034ec9856935855600960005260c87fe12d5ff10640a555479d85b7ab5f83b5dbd3cf6ac615eec77e24e0984b75a03855565b611344611d44565b6106bd6001548361183b565b6000828152600460205260409020546001600160a01b0316156113a65760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610743565b6000805490806113b5836124ec565b90915550506001600160a01b038316600090815260036020526040902080546fffffffffffffffffffffffffffffffff19811660016001600160801b03928316810190921617909155811461144f576001600160a01b038316600090815260036020526040902080546001600160c01b038116600160c01b918290046001600160401b03908116600181019091169092021790915561149b565b6001600160a01b0383166000908152600360205260409020805467ffffffffffffffff60801b198116600160801b918290046001600160401b0390811660018101909116909202179091555b5060008281526004602052604080822080546001600160a01b0319166001600160a01b03871690811790915590518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b6000818152600460205260409020546001600160a01b0384811691161461154b5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610743565b6001600160a01b038316600090815260036020526040812080546001600160801b0316916115788361248b565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0384166000908152600360205260408120805490921692506115c0836124c5565b82546001600160801b039182166101009390930a928302919092021990911617905550600081815260056020908152604080832080546001600160a01b0319908116909155600490925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000816001141561166457506127105b81600214156116725750612af85b81600314156116805750612e7c5b816004141561168e575061319c5b816005141561169c57506134585b81600614156116aa57506136b05b81600714156116b857506138a45b81600814156116c65750613a345b81600914156116d45750613b605b919050565b6000818152600460205260409020546001600160a01b0390811690831681146117305760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610743565b6000828152600460205260409020546001600160a01b03166117815760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610743565b600080549080611790836124ae565b90915550506001600160a01b038116600090815260036020526040812080546001600160801b0316916117c28361248b565b82546001600160801b039182166101009390930a92830291909202199091161790555060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b611843611d44565b8261187f5760405162461bcd60e51b815260206004820152600c60248201526b1cd95959081b9bdd081cd95d60a21b6044820152606401610743565b61188982846119a7565b1561189e5761189782611a01565b90506106bd565b6040518060c001604052806118bc848664131155915360da1b611a74565b81526020016118d384866312d2539160e21b611a74565b81526020016118ee848667135055115492505360c21b611a74565b815260200161190784866552415249545960d01b611a74565b81526020016119218486665155414c49545960c81b611a74565b815260200161193b8486661153115351539560ca1b611b38565b90529050600061194a83611bef565b9050801561196a5761195d81600a6123fd565b6020830152600060808301525b5092915050565b6000612710831115611985575060046106bd565b61198f83836119a7565b1561199e576118978383611c9b565b50600292915050565b6000806119b383611cdf565b905060005b60098110156119f9576119cd816104e2612429565b6119d790836123fd565b8514156119e757600192506119f9565b806119f1816124ec565b9150506119b8565b505092915050565b611a09611d44565b6000611a176104e284612415565b611a229060016123fd565b9050600081611a3281600a612429565b611a3c91906123fd565b90506040518060c001604052808281526020018281526020018281526020018281526020018281526020018281525092505050919050565b6040805160208101859052908101839052606081018290526000908190620f4240906080016040516020818303038152906040528051906020012060001c611abc9190612507565b611ac79060016123fd565b905062046a358111611add5760019150506109cf565b6208118d8111611af15760029150506109cf565b620af6088111611b055760039150506109cf565b620d17a68111611b195760049150506109cf565b620e76678111611b2d5760059150506109cf565b506006949350505050565b6000611b45600485612507565b60031415611b6957611b62848466504f54454e435960c81b611a74565b90506109cf565b604080516020810186905290810184905260608101839052600090620f4240906080016040516020818303038152906040528051906020012060001c611baf9190612507565b611bba9060016123fd565b90506207a1208111611bd05760019150506109cf565b611bdb600582612507565b611be69060026123fd565b95945050505050565b60006127108211611c0257506000919050565b612af88211611c1357506001919050565b612e7c8211611c2457506002919050565b61319c8211611c3557506003919050565b6134588211611c4657506004919050565b6136b08211611c5757506005919050565b6138a48211611c6857506006919050565b613a348211611c7957506007919050565b613b608211611c8a57506008919050565b613c2882116116d457506009919050565b600080611caa6104e285612415565b611cb59060016123fd565b9050611cc2600182612448565b611ccd8260056123fd565b611cd791906123fd565b949350505050565b60006104e282604051602001611d169181526040602082018190526007908201526614d41150d2505360ca1b606082015260800190565b6040516020818303038152906040528051906020012060001c611d399190612507565b6106bd9060016123fd565b6040518060c001604052806006906020820280368337509192915050565b80356001600160a01b03811681146116d457600080fd5b600060208284031215611d8b57600080fd5b6109cf82611d62565b60008060408385031215611da757600080fd5b611db083611d62565b9150611dbe60208401611d62565b90509250929050565b60008060008060008060c08789031215611de057600080fd5b611de987611d62565b9550611df760208801611d62565b9450611e0560408801611d62565b9350611e1360608801611d62565b9250611e2160808801611d62565b9150611e2f60a08801611d62565b90509295509295509295565b600080600060608486031215611e5057600080fd5b611e5984611d62565b9250611e6760208501611d62565b9150604084013590509250925092565b60008060008060808587031215611e8d57600080fd5b611e9685611d62565b9350611ea460208601611d62565b92506040850135915060608501356001600160401b03811115611ec657600080fd5b8501601f81018713611ed757600080fd5b8035611eea611ee5826123d6565b6123a6565b818152886020838501011115611eff57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611f3457600080fd5b611f3d83611d62565b915060208301358015158114611f5257600080fd5b809150509250929050565b600080600060608486031215611f7257600080fd5b611f7b84611d62565b92506020840135915060408401356001600160401b0381168114611f9e57600080fd5b809150509250925092565b60008060408385031215611fbc57600080fd5b611fc583611d62565b946020939093013593505050565b600080600060608486031215611fe857600080fd5b611ff184611d62565b95602085013595506040909401359392505050565b600060c0828403121561201857600080fd5b82601f83011261202757600080fd5b60405160c081018181106001600160401b03821117156120495761204961255d565b604052808360c0810186101561205e57600080fd5b6000805b60068110156120975782516001600160b01b031981168114612082578283fd5b84526020938401939290920191600101612062565b50929695505050505050565b6000602082840312156120b557600080fd5b81356109cf81612573565b6000602082840312156120d257600080fd5b81516109cf81612573565b6000602082840312156120ef57600080fd5b81516001600160401b0381111561210557600080fd5b8201601f8101841361211657600080fd5b8051612124611ee5826123d6565b81815285602083850101111561213957600080fd5b611be682602083016020860161245f565b60006020828403121561215c57600080fd5b5035919050565b60006020828403121561217557600080fd5b5051919050565b6000806040838503121561218f57600080fd5b82359150611dbe60208401611d62565b600080604083850312156121b257600080fd5b823591506020808401356001600160401b03808211156121d157600080fd5b818601915086601f8301126121e557600080fd5b8135818111156121f7576121f761255d565b8060051b91506122088483016123a6565b8181528481019084860184860187018b101561222357600080fd5b600095505b83861015612246578035835260019590950194918601918601612228565b508096505050505050509250929050565b8060005b6006811015610fb857815184526020938401939091019060010161225b565b6000815180845261229281602086016020860161245f565b601f01601f19169290920160200192915050565b600082516122b881846020870161245f565b9190910192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122f59083018461227a565b9695505050505050565b60c08101818360005b60068110156123315781516001600160b01b031916835260209283019290910190600101612308565b50505092915050565b60c081016106bd8284612257565b6020815260006109cf602083018461227a565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b83815261010081016123986020830185612257565b8260e0830152949350505050565b604051601f8201601f191681016001600160401b03811182821017156123ce576123ce61255d565b604052919050565b60006001600160401b038211156123ef576123ef61255d565b50601f01601f191660200190565b600082198211156124105761241061251b565b500190565b60008261242457612424612531565b500490565b60008160001904831182151516156124435761244361251b565b500290565b60008282101561245a5761245a61251b565b500390565b60005b8381101561247a578181015183820152602001612462565b83811115610fb85750506000910152565b60006001600160801b038216806124a4576124a461251b565b6000190192915050565b6000816124bd576124bd61251b565b506000190190565b60006001600160801b03808316818114156124e2576124e261251b565b6001019392505050565b60006000198214156125005761250061251b565b5060010190565b60008261251657612516612531565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e8257600080fdfeb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a26469706673582212206562a797d3518c12345ed6bb4dff2185d7613d9336e60cea2e1ac66b1c775d5964736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063b13038a1116100b8578063cd5d21181161007c578063cd5d2118146105d6578063d4d46e50146105f9578063e1dc07611461060c578063e985e9c51461062c578063eb1d28bb1461065a57600080fd5b8063b13038a114610582578063b88d4fde1461058a578063c87b56dd1461059d578063cba57e38146105b0578063cc2a9a5b146105c357600080fd5b80638da5cb5b116100ff5780638da5cb5b1461051d57806395d89b4114610525578063a22cb46514610549578063a859e33a1461055c578063a9059cbb1461056f57600080fd5b806370a08231146104a557806379cc6790146104d75780637b303965146104ea5780638ada6b0f1461050a57600080fd5b80631fe543e3116101b357806342842e0e1161018257806342842e0e146103e3578063468f9b14146103f65780636352211e146103ff57806368a6cdf21461042857806369ebe78e1461049c57600080fd5b80631fe543e31461039757806323b872dd146103aa57806332ed5391146103bd57806335599310146103d057600080fd5b80630b44a218116101fa5780630b44a218146102e85780631015805b146102fb578063156e29f61461034257806318160ddd146103555780631d02f7b81461035e57600080fd5b806301ffc9a71461022c57806306fdde0314610254578063081812fc14610292578063095ea7b3146102d3575b600080fd5b61023f61023a3660046120a3565b61068c565b60405190151581526020015b60405180910390f35b610285604051806040016040528060128152602001714d6574612026204d61676963204974656d7360701b81525081565b60405161024b9190612348565b6102bb6102a036600461214a565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b6102e66102e1366004611fa9565b6106c3565b005b6102e66102f6366004611f21565b6107a8565b610334610309366004611d79565b6001600160a01b0316600090815260036020526040902054600160c01b90046001600160401b031690565b60405190815260200161024b565b610334610350366004611fd3565b610810565b61033460005481565b61033461036c366004611d79565b6001600160a01b0316600090815260036020526040902054600160801b90046001600160401b031690565b6102e66103a536600461219f565b610894565b61023f6103b8366004611e3b565b61090e565b6102e66103cb366004611f5d565b6109d6565b6103346103de36600461217c565b610a3e565b6102e66103f1366004611e3b565b610aac565b61033460015481565b6102bb61040d36600461214a565b6004602052600090815260409020546001600160a01b031681565b61046d610436366004611d79565b6003602052600090815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b604080516001600160801b0390941684526001600160401b03928316602085015291169082015260600161024b565b61033460095481565b6103346104b3366004611d79565b6001600160a01b03166000908152600360205260409020546001600160801b031690565b61023f6104e5366004611fa9565b610acc565b6104fd6104f836600461214a565b610b0e565b60405161024b91906122ff565b6007546102bb906001600160a01b031681565b6102bb610c0a565b610285604051806040016040528060058152602001644954454d5360d81b81525081565b6102e6610557366004611f21565b610c27565b6102e661056a36600461214a565b610c93565b61023f61057d366004611fa9565b610cd8565b6102e6610d35565b6102e6610598366004611e77565b610e85565b6102856105ab36600461214a565b610fbe565b61023f6105be36600461214a565b61108e565b6102e66105d1366004611dc7565b61109c565b61023f6105e4366004611d79565b60026020526000908152604090205460ff1681565b6008546102bb906001600160a01b031681565b61061f61061a36600461214a565b61133c565b60405161024b919061233a565b61023f61063a366004611d94565b600660209081526000928352604080842090915290825290205460ff1681565b60085461067490600160a01b90046001600160401b031681565b6040516001600160401b03909116815260200161024b565b60006380ac58cd60e01b6001600160e01b0319831614806106bd5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000818152600460205260409020546001600160a01b03163381148061070c57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b61074c5760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b60448201526064015b60405180910390fd5b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336107bf60008051602061258a8339815191525490565b6001600160a01b0316146107e55760405162461bcd60e51b81526004016107439061235b565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b3360009081526002602052604081205460ff1661083f5760405162461bcd60e51b81526004016107439061235b565b60005b8381101561088c57600c546108589060016123fd565b600c8054919350600061086a836124ec565b919050555061087a858385611350565b80610884816124ec565b915050610842565b509392505050565b6008546001600160a01b031633146108dc5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401610743565b600154156108e957600080fd5b806000815181106108fc576108fc612547565b60200260200101516001819055505050565b6000336001600160a01b038516148061093d57506000828152600560205260409020546001600160a01b031633145b8061096b57506001600160a01b038416600090815260066020908152604080832033845290915290205460ff165b8061098557503360009081526002602052604090205460ff165b6109c05760405162461bcd60e51b815260206004820152600c60248201526b1393d517d054141493d5915160a21b6044820152606401610743565b6109cb8484846114f6565b5060015b9392505050565b60008051602061258a833981519152546001600160a01b0316336001600160a01b031614610a0357600080fd5b600880546009939093556001600160401b03909116600160a01b026001600160e01b03199092166001600160a01b0390931692909217179055565b3360009081526002602052604081205460ff16610a6d5760405162461bcd60e51b81526004016107439061235b565b6000838152600b60205260408120805491610a87836124ae565b91905055610a9484611654565b610a9e91906123fd565b90506106bd82826002611350565b610ac783838360405180602001604052806000815250610e85565b505050565b3360009081526002602052604081205460ff16610afb5760405162461bcd60e51b81526004016107439061235b565b610b0583836116d9565b50600192915050565b610b16611d44565b60015480610b555760405162461bcd60e51b815260206004820152600c60248201526b139bdd081c995d99585b195960a21b6044820152606401610743565b600a60006127108511610b7257610b6d600486612507565b610b75565b60095b81526020810191909152604001600020546001600160a01b031663ecac6724610b9e838661183b565b6040518263ffffffff1660e01b8152600401610bba919061233a565b60c06040518083038186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cf9190612006565b6000610c2260008051602061258a8339815191525490565b905090565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60008051602061258a833981519152546001600160a01b0316336001600160a01b031614610cd35760405162461bcd60e51b81526004016107439061235b565b600c55565b6000818152600460205260408120546001600160a01b03163314610d2a5760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610743565b610b053384846114f6565b60008051602061258a833981519152546001600160a01b0316336001600160a01b031614610d905760405162461bcd60e51b81526020600482015260086024820152670dcdee840c2eae8d60c31b6044820152606401610743565b60015415610dd45760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481c995c5d595cdd1959607a1b6044820152606401610743565b6008546009546040516305d3b1d360e41b81526004810191909152600160a01b82046001600160401b031660248201526003604482015262030d406064820152600160848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e829190612163565b50565b610e9084848461090e565b506001600160a01b0383163b15610fb8576000836001600160a01b031663150b7a023360008686604051602401610eca94939291906122c2565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051610f0391906122a6565b600060405180830381855afa9150503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b50915050600081806020019051810190610f5d91906120c0565b9050630a85bd0160e11b6001600160e01b0319821614610fb55760405162461bcd60e51b81526020600482015260136024820152722727aa2fa2a9219b9918afa922a1a2a4ab22a960691b6044820152606401610743565b50505b50505050565b6001546060908061104a576007546040516302fa6c9b60e11b8152600260048201526001600160a01b03909116906305f4d936906024015b60006040518083038186803b15801561100e57600080fd5b505afa158015611022573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cf91908101906120dd565b6007546001600160a01b0316630c3501be84611066848261183b565b6110708786611971565b6040518463ffffffff1660e01b8152600401610ff693929190612383565b60006106bd826001546119a7565b60008051602061258a833981519152546001600160a01b0316336001600160a01b0316146110dc5760405162461bcd60e51b81526004016107439061235b565b7f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e380546001600160a01b03199081166001600160a01b03988916179091557fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc780548216968816969096179095557fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba880548616948716949094179093557fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa3975980548516928616929092179091557f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb28480548416918516919091179055600780549092169216919091179055600b6020526103e87f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf556103847fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91634556103207f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e556102bc7f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c784556102587febae6141bae5521e99e0a8d610356b0f501fea54980b59c84841db43ba7204f4556101f47f0387e9d1203691d8e3362a7e4c6723de358a4010d7f31ecbec3fbfc61d1c75fc556101907ff5559028dc9ba50d75343c779b2f75e13a84a14662932fc67a486f263ca31a965561012c7f71f482bdabd1ea844d62c952b094e632959690d7448ca2aab34034ec9856935855600960005260c87fe12d5ff10640a555479d85b7ab5f83b5dbd3cf6ac615eec77e24e0984b75a03855565b611344611d44565b6106bd6001548361183b565b6000828152600460205260409020546001600160a01b0316156113a65760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610743565b6000805490806113b5836124ec565b90915550506001600160a01b038316600090815260036020526040902080546fffffffffffffffffffffffffffffffff19811660016001600160801b03928316810190921617909155811461144f576001600160a01b038316600090815260036020526040902080546001600160c01b038116600160c01b918290046001600160401b03908116600181019091169092021790915561149b565b6001600160a01b0383166000908152600360205260409020805467ffffffffffffffff60801b198116600160801b918290046001600160401b0390811660018101909116909202179091555b5060008281526004602052604080822080546001600160a01b0319166001600160a01b03871690811790915590518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b6000818152600460205260409020546001600160a01b0384811691161461154b5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b6044820152606401610743565b6001600160a01b038316600090815260036020526040812080546001600160801b0316916115788361248b565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b0384166000908152600360205260408120805490921692506115c0836124c5565b82546001600160801b039182166101009390930a928302919092021990911617905550600081815260056020908152604080832080546001600160a01b0319908116909155600490925280832080546001600160a01b038781169190941681179091559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000816001141561166457506127105b81600214156116725750612af85b81600314156116805750612e7c5b816004141561168e575061319c5b816005141561169c57506134585b81600614156116aa57506136b05b81600714156116b857506138a45b81600814156116c65750613a345b81600914156116d45750613b605b919050565b6000818152600460205260409020546001600160a01b0390811690831681146117305760405162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b6044820152606401610743565b6000828152600460205260409020546001600160a01b03166117815760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610743565b600080549080611790836124ae565b90915550506001600160a01b038116600090815260036020526040812080546001600160801b0316916117c28361248b565b82546001600160801b039182166101009390930a92830291909202199091161790555060008281526004602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505050565b611843611d44565b8261187f5760405162461bcd60e51b815260206004820152600c60248201526b1cd95959081b9bdd081cd95d60a21b6044820152606401610743565b61188982846119a7565b1561189e5761189782611a01565b90506106bd565b6040518060c001604052806118bc848664131155915360da1b611a74565b81526020016118d384866312d2539160e21b611a74565b81526020016118ee848667135055115492505360c21b611a74565b815260200161190784866552415249545960d01b611a74565b81526020016119218486665155414c49545960c81b611a74565b815260200161193b8486661153115351539560ca1b611b38565b90529050600061194a83611bef565b9050801561196a5761195d81600a6123fd565b6020830152600060808301525b5092915050565b6000612710831115611985575060046106bd565b61198f83836119a7565b1561199e576118978383611c9b565b50600292915050565b6000806119b383611cdf565b905060005b60098110156119f9576119cd816104e2612429565b6119d790836123fd565b8514156119e757600192506119f9565b806119f1816124ec565b9150506119b8565b505092915050565b611a09611d44565b6000611a176104e284612415565b611a229060016123fd565b9050600081611a3281600a612429565b611a3c91906123fd565b90506040518060c001604052808281526020018281526020018281526020018281526020018281526020018281525092505050919050565b6040805160208101859052908101839052606081018290526000908190620f4240906080016040516020818303038152906040528051906020012060001c611abc9190612507565b611ac79060016123fd565b905062046a358111611add5760019150506109cf565b6208118d8111611af15760029150506109cf565b620af6088111611b055760039150506109cf565b620d17a68111611b195760049150506109cf565b620e76678111611b2d5760059150506109cf565b506006949350505050565b6000611b45600485612507565b60031415611b6957611b62848466504f54454e435960c81b611a74565b90506109cf565b604080516020810186905290810184905260608101839052600090620f4240906080016040516020818303038152906040528051906020012060001c611baf9190612507565b611bba9060016123fd565b90506207a1208111611bd05760019150506109cf565b611bdb600582612507565b611be69060026123fd565b95945050505050565b60006127108211611c0257506000919050565b612af88211611c1357506001919050565b612e7c8211611c2457506002919050565b61319c8211611c3557506003919050565b6134588211611c4657506004919050565b6136b08211611c5757506005919050565b6138a48211611c6857506006919050565b613a348211611c7957506007919050565b613b608211611c8a57506008919050565b613c2882116116d457506009919050565b600080611caa6104e285612415565b611cb59060016123fd565b9050611cc2600182612448565b611ccd8260056123fd565b611cd791906123fd565b949350505050565b60006104e282604051602001611d169181526040602082018190526007908201526614d41150d2505360ca1b606082015260800190565b6040516020818303038152906040528051906020012060001c611d399190612507565b6106bd9060016123fd565b6040518060c001604052806006906020820280368337509192915050565b80356001600160a01b03811681146116d457600080fd5b600060208284031215611d8b57600080fd5b6109cf82611d62565b60008060408385031215611da757600080fd5b611db083611d62565b9150611dbe60208401611d62565b90509250929050565b60008060008060008060c08789031215611de057600080fd5b611de987611d62565b9550611df760208801611d62565b9450611e0560408801611d62565b9350611e1360608801611d62565b9250611e2160808801611d62565b9150611e2f60a08801611d62565b90509295509295509295565b600080600060608486031215611e5057600080fd5b611e5984611d62565b9250611e6760208501611d62565b9150604084013590509250925092565b60008060008060808587031215611e8d57600080fd5b611e9685611d62565b9350611ea460208601611d62565b92506040850135915060608501356001600160401b03811115611ec657600080fd5b8501601f81018713611ed757600080fd5b8035611eea611ee5826123d6565b6123a6565b818152886020838501011115611eff57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611f3457600080fd5b611f3d83611d62565b915060208301358015158114611f5257600080fd5b809150509250929050565b600080600060608486031215611f7257600080fd5b611f7b84611d62565b92506020840135915060408401356001600160401b0381168114611f9e57600080fd5b809150509250925092565b60008060408385031215611fbc57600080fd5b611fc583611d62565b946020939093013593505050565b600080600060608486031215611fe857600080fd5b611ff184611d62565b95602085013595506040909401359392505050565b600060c0828403121561201857600080fd5b82601f83011261202757600080fd5b60405160c081018181106001600160401b03821117156120495761204961255d565b604052808360c0810186101561205e57600080fd5b6000805b60068110156120975782516001600160b01b031981168114612082578283fd5b84526020938401939290920191600101612062565b50929695505050505050565b6000602082840312156120b557600080fd5b81356109cf81612573565b6000602082840312156120d257600080fd5b81516109cf81612573565b6000602082840312156120ef57600080fd5b81516001600160401b0381111561210557600080fd5b8201601f8101841361211657600080fd5b8051612124611ee5826123d6565b81815285602083850101111561213957600080fd5b611be682602083016020860161245f565b60006020828403121561215c57600080fd5b5035919050565b60006020828403121561217557600080fd5b5051919050565b6000806040838503121561218f57600080fd5b82359150611dbe60208401611d62565b600080604083850312156121b257600080fd5b823591506020808401356001600160401b03808211156121d157600080fd5b818601915086601f8301126121e557600080fd5b8135818111156121f7576121f761255d565b8060051b91506122088483016123a6565b8181528481019084860184860187018b101561222357600080fd5b600095505b83861015612246578035835260019590950194918601918601612228565b508096505050505050509250929050565b8060005b6006811015610fb857815184526020938401939091019060010161225b565b6000815180845261229281602086016020860161245f565b601f01601f19169290920160200192915050565b600082516122b881846020870161245f565b9190910192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122f59083018461227a565b9695505050505050565b60c08101818360005b60068110156123315781516001600160b01b031916835260209283019290910190600101612308565b50505092915050565b60c081016106bd8284612257565b6020815260006109cf602083018461227a565b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b83815261010081016123986020830185612257565b8260e0830152949350505050565b604051601f8201601f191681016001600160401b03811182821017156123ce576123ce61255d565b604052919050565b60006001600160401b038211156123ef576123ef61255d565b50601f01601f191660200190565b600082198211156124105761241061251b565b500190565b60008261242457612424612531565b500490565b60008160001904831182151516156124435761244361251b565b500290565b60008282101561245a5761245a61251b565b500390565b60005b8381101561247a578181015183820152602001612462565b83811115610fb85750506000910152565b60006001600160801b038216806124a4576124a461251b565b6000190192915050565b6000816124bd576124bd61251b565b506000190190565b60006001600160801b03808316818114156124e2576124e261251b565b6001019392505050565b60006000198214156125005761250061251b565b5060010190565b60008261251657612516612531565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610e8257600080fdfeb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a26469706673582212206562a797d3518c12345ed6bb4dff2185d7613d9336e60cea2e1ac66b1c775d5964736f6c63430008070033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.