Overview
Max Total Supply
56,537 EMONA
Holders
5,647
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
6 EMONALoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EtheremonMonsterToken
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-08-28 */ pragma solidity ^0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } interface ERC165 { function supportsInterface(bytes4 _interfaceID) external view returns (bool); } contract SupportsInterface is ERC165 { mapping(bytes4 => bool) internal supportedInterfaces; constructor() public { supportedInterfaces[0x01ffc9a7] = true; // ERC165 } function supportsInterface(bytes4 _interfaceID) external view returns (bool) { return supportedInterfaces[_interfaceID]; } } interface ERC721 { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; function transferFrom(address _from, address _to, uint256 _tokenId) external; function transfer(address _to, uint256 _tokenId) external; function approve(address _approved, uint256 _tokenId) external; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); } interface ERC721Enumerable { function totalSupply() external view returns (uint256); function tokenByIndex(uint256 _index) external view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256); } interface ERC721Metadata { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) external view returns (string); } interface ERC721TokenReceiver { function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4); } contract BasicAccessControl { address public owner; // address[] public moderators; uint16 public totalModerators = 0; mapping (address => bool) public moderators; bool public isMaintaining = false; constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } modifier onlyModerators() { require(msg.sender == owner || moderators[msg.sender] == true); _; } modifier isActive { require(!isMaintaining); _; } function ChangeOwner(address _newOwner) onlyOwner public { if (_newOwner != address(0)) { owner = _newOwner; } } function AddModerator(address _newModerator) onlyOwner public { if (moderators[_newModerator] == false) { moderators[_newModerator] = true; totalModerators += 1; } } function RemoveModerator(address _oldModerator) onlyOwner public { if (moderators[_oldModerator] == true) { moderators[_oldModerator] = false; totalModerators -= 1; } } function UpdateMaintaining(bool _isMaintaining) onlyOwner public { isMaintaining = _isMaintaining; } } contract EtheremonEnum { enum ResultCode { SUCCESS, ERROR_CLASS_NOT_FOUND, ERROR_LOW_BALANCE, ERROR_SEND_FAIL, ERROR_NOT_TRAINER, ERROR_NOT_ENOUGH_MONEY, ERROR_INVALID_AMOUNT } enum ArrayType { CLASS_TYPE, STAT_STEP, STAT_START, STAT_BASE, OBJ_SKILL } enum PropertyType { ANCESTOR, XFACTOR } } contract EtheremonDataBase { uint64 public totalMonster; uint32 public totalClass; // write function withdrawEther(address _sendTo, uint _amount) external returns(EtheremonEnum.ResultCode); function addElementToArrayType(EtheremonEnum.ArrayType _type, uint64 _id, uint8 _value) external returns(uint); function updateIndexOfArrayType(EtheremonEnum.ArrayType _type, uint64 _id, uint _index, uint8 _value) external returns(uint); function setMonsterClass(uint32 _classId, uint256 _price, uint256 _returnPrice, bool _catchable) external returns(uint32); function addMonsterObj(uint32 _classId, address _trainer, string _name) external returns(uint64); function setMonsterObj(uint64 _objId, string _name, uint32 _exp, uint32 _createIndex, uint32 _lastClaimIndex) external; function increaseMonsterExp(uint64 _objId, uint32 amount) external; function decreaseMonsterExp(uint64 _objId, uint32 amount) external; function removeMonsterIdMapping(address _trainer, uint64 _monsterId) external; function addMonsterIdMapping(address _trainer, uint64 _monsterId) external; function clearMonsterReturnBalance(uint64 _monsterId) external returns(uint256 amount); function collectAllReturnBalance(address _trainer) external returns(uint256 amount); function transferMonster(address _from, address _to, uint64 _monsterId) external returns(EtheremonEnum.ResultCode); function addExtraBalance(address _trainer, uint256 _amount) external returns(uint256); function deductExtraBalance(address _trainer, uint256 _amount) external returns(uint256); function setExtraBalance(address _trainer, uint256 _amount) external; // read function getSizeArrayType(EtheremonEnum.ArrayType _type, uint64 _id) constant external returns(uint); function getElementInArrayType(EtheremonEnum.ArrayType _type, uint64 _id, uint _index) constant external returns(uint8); function getMonsterClass(uint32 _classId) constant external returns(uint32 classId, uint256 price, uint256 returnPrice, uint32 total, bool catchable); function getMonsterObj(uint64 _objId) constant external returns(uint64 objId, uint32 classId, address trainer, uint32 exp, uint32 createIndex, uint32 lastClaimIndex, uint createTime); function getMonsterName(uint64 _objId) constant external returns(string name); function getExtraBalance(address _trainer) constant external returns(uint256); function getMonsterDexSize(address _trainer) constant external returns(uint); function getMonsterObjId(address _trainer, uint index) constant external returns(uint64); function getExpectedBalance(address _trainer) constant external returns(uint256); function getMonsterReturn(uint64 _objId) constant external returns(uint256 current, uint256 total); } interface EtheremonBattle { function isOnBattle(uint64 _objId) constant external returns(bool); } interface EtheremonTradeInterface { function isOnTrading(uint64 _objId) constant external returns(bool); } contract EtheremonMonsterTokenBasic is ERC721, SupportsInterface, BasicAccessControl { using SafeMath for uint256; using AddressUtils for address; struct MonsterClassAcc { uint32 classId; uint256 price; uint256 returnPrice; uint32 total; bool catchable; } struct MonsterObjAcc { uint64 monsterId; uint32 classId; address trainer; string name; uint32 exp; uint32 createIndex; uint32 lastClaimIndex; uint createTime; } // data contract address public dataContract; address public battleContract; address public tradeContract; // Mapping from NFT ID to approved address. mapping (uint256 => address) internal idToApprovals; // Mapping from owner address to mapping of operator addresses. mapping (address => mapping (address => bool)) internal ownerToOperators; /** * @dev Magic value of a smart contract that can recieve NFT. * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")). */ bytes4 constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02; event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); // internal function function _canOperate(address _tokenOwner) constant internal { require(_tokenOwner == msg.sender || ownerToOperators[_tokenOwner][msg.sender]); } function _canTransfer(uint256 _tokenId, address _tokenOwner) constant internal { EtheremonBattle battle = EtheremonBattle(battleContract); EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract); require(!battle.isOnBattle(uint64(_tokenId)) && !trade.isOnTrading(uint64(_tokenId))); require(_tokenOwner != address(0)); require(_tokenOwner == msg.sender || idToApprovals[_tokenId] == msg.sender || ownerToOperators[_tokenOwner][msg.sender]); } function setOperationContracts(address _dataContract, address _battleContract, address _tradeContract) onlyModerators external { dataContract = _dataContract; battleContract = _battleContract; tradeContract = _tradeContract; } // public function constructor() public { supportedInterfaces[0x80ac58cd] = true; // ERC721 } function isApprovable(address _owner, uint256 _tokenId) public constant returns(bool) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); if (obj.monsterId != uint64(_tokenId)) return false; if (obj.trainer != _owner) return false; // check battle & trade contract EtheremonBattle battle = EtheremonBattle(battleContract); EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract); return (!battle.isOnBattle(obj.monsterId) && !trade.isOnTrading(obj.monsterId)); } function balanceOf(address _owner) external view returns (uint256) { require(_owner != address(0)); EtheremonDataBase data = EtheremonDataBase(dataContract); return data.getMonsterDexSize(_owner); } function ownerOf(uint256 _tokenId) external view returns (address _owner) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, _owner, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(_owner != address(0)); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external { _safeTransferFrom(_from, _to, _tokenId, _data); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) external { _safeTransferFrom(_from, _to, _tokenId, ""); } function transferFrom(address _from, address _to, uint256 _tokenId) external { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(obj.trainer != address(0)); _canTransfer(_tokenId, obj.trainer); require(obj.trainer == _from); require(_to != address(0)); _transfer(obj.trainer, _to, _tokenId); } function transfer(address _to, uint256 _tokenId) external { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(obj.trainer != address(0)); _canTransfer(_tokenId, obj.trainer); require(obj.trainer == msg.sender); require(_to != address(0)); _transfer(obj.trainer, _to, _tokenId); } function approve(address _approved, uint256 _tokenId) external { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(obj.trainer != address(0)); _canOperate(obj.trainer); EtheremonBattle battle = EtheremonBattle(battleContract); EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract); if(battle.isOnBattle(obj.monsterId) || trade.isOnTrading(obj.monsterId)) revert(); require(_approved != obj.trainer); idToApprovals[_tokenId] = _approved; emit Approval(obj.trainer, _approved, _tokenId); } function setApprovalForAll(address _operator, bool _approved) external { require(_operator != address(0)); ownerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } function getApproved(uint256 _tokenId) public view returns (address) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(obj.trainer != address(0)); return idToApprovals[_tokenId]; } function isApprovedForAll(address _owner, address _operator) external view returns (bool) { require(_owner != address(0)); require(_operator != address(0)); return ownerToOperators[_owner][_operator]; } function _safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) internal { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(obj.trainer != address(0)); _canTransfer(_tokenId, obj.trainer); require(obj.trainer == _from); require(_to != address(0)); _transfer(obj.trainer, _to, _tokenId); if (_to.isContract()) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == MAGIC_ON_ERC721_RECEIVED); } } function _transfer(address _from, address _to, uint256 _tokenId) private { _clearApproval(_tokenId); EtheremonDataBase data = EtheremonDataBase(dataContract); data.removeMonsterIdMapping(_from, uint64(_tokenId)); data.addMonsterIdMapping(_to, uint64(_tokenId)); emit Transfer(_from, _to, _tokenId); } function _burn(uint256 _tokenId) internal { _clearApproval(_tokenId); EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(uint64(_tokenId)); require(obj.trainer != address(0)); EtheremonBattle battle = EtheremonBattle(battleContract); EtheremonTradeInterface trade = EtheremonTradeInterface(tradeContract); if(battle.isOnBattle(obj.monsterId) || trade.isOnTrading(obj.monsterId)) revert(); data.removeMonsterIdMapping(obj.trainer, uint64(_tokenId)); emit Transfer(obj.trainer, address(0), _tokenId); } function _clearApproval(uint256 _tokenId) internal { if(idToApprovals[_tokenId] != 0) { delete idToApprovals[_tokenId]; } } } contract EtheremonMonsterEnumerable is EtheremonMonsterTokenBasic, ERC721Enumerable { constructor() public { supportedInterfaces[0x780e9d63] = true; // ERC721Enumerable } function totalSupply() external view returns (uint256) { EtheremonDataBase data = EtheremonDataBase(dataContract); return data.totalMonster(); } function tokenByIndex(uint256 _index) external view returns (uint256) { return _index; } function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256) { require(_owner != address(0)); EtheremonDataBase data = EtheremonDataBase(dataContract); return data.getMonsterObjId(_owner, _index); } } contract EtheremonMonsterStandard is EtheremonMonsterEnumerable, ERC721Metadata { string internal nftName; string internal nftSymbol; mapping (uint256 => string) internal idToUri; constructor(string _name, string _symbol) public { nftName = _name; nftSymbol = _symbol; supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata } function _burn(uint256 _tokenId) internal { super._burn(_tokenId); if (bytes(idToUri[_tokenId]).length != 0) { delete idToUri[_tokenId]; } } function _setTokenUri(uint256 _tokenId, string _uri) internal { idToUri[_tokenId] = _uri; } function name() external view returns (string _name) { _name = nftName; } function symbol() external view returns (string _symbol) { _symbol = nftSymbol; } function tokenURI(uint256 _tokenId) external view returns (string) { return idToUri[_tokenId]; } } contract EtheremonMonsterToken is EtheremonMonsterStandard("EtheremonMonster", "EMONA") { uint8 constant public STAT_COUNT = 6; uint8 constant public STAT_MAX = 32; uint seed = 0; mapping(uint8 => uint32) public levelExps; mapping(uint32 => bool) classWhitelist; mapping(address => bool) addressWhitelist; uint public gapFactor = 0.001 ether; uint16 public priceIncreasingRatio = 1000; function setPriceIncreasingRatio(uint16 _ratio) onlyModerators external { priceIncreasingRatio = _ratio; } function setFactor(uint _gapFactor) onlyModerators public { gapFactor = _gapFactor; } function genLevelExp() onlyModerators external { uint8 level = 1; uint32 requirement = 100; uint32 sum = requirement; while(level <= 100) { levelExps[level] = sum; level += 1; requirement = (requirement * 11) / 10 + 5; sum += requirement; } } function setClassWhitelist(uint32 _classId, bool _status) onlyModerators external { classWhitelist[_classId] = _status; } function setAddressWhitelist(address _smartcontract, bool _status) onlyModerators external { addressWhitelist[_smartcontract] = _status; } function setTokenURI(uint256 _tokenId, string _uri) onlyModerators external { _setTokenUri(_tokenId, _uri); } function withdrawEther(address _sendTo, uint _amount) onlyOwner public { if (_amount > address(this).balance) { revert(); } _sendTo.transfer(_amount); } function mintMonster(uint32 _classId, address _trainer, string _name) onlyModerators external returns(uint){ EtheremonDataBase data = EtheremonDataBase(dataContract); // add monster uint64 objId = data.addMonsterObj(_classId, _trainer, _name); uint8 value; seed = getRandom(_trainer, block.number-1, seed, objId); // generate base stat for the previous one for (uint i=0; i < STAT_COUNT; i+= 1) { value = uint8(seed % STAT_MAX) + data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_START, uint64(_classId), i); data.addElementToArrayType(EtheremonEnum.ArrayType.STAT_BASE, objId, value); } emit Transfer(address(0), _trainer, objId); return objId; } function burnMonster(uint64 _tokenId) onlyModerators external { _burn(_tokenId); } function clearApproval(uint _tokenId) onlyModerators external { _clearApproval(_tokenId); } function triggerTransferEvent(address _from, address _to, uint _tokenId) onlyModerators external { _clearApproval(_tokenId); emit Transfer(_from, _to, _tokenId); } // public api function getRandom(address _player, uint _block, uint _seed, uint _count) view public returns(uint) { return uint(keccak256(abi.encodePacked(blockhash(_block), _player, _seed, _count))); } function getLevel(uint32 exp) view public returns (uint8) { uint8 minIndex = 1; uint8 maxIndex = 100; uint8 currentIndex; while (minIndex < maxIndex) { currentIndex = (minIndex + maxIndex) / 2; if (exp < levelExps[currentIndex]) maxIndex = currentIndex; else minIndex = currentIndex + 1; } return minIndex; } function getMonsterBaseStats(uint64 _monsterId) constant external returns(uint hp, uint pa, uint pd, uint sa, uint sd, uint speed) { EtheremonDataBase data = EtheremonDataBase(dataContract); uint[6] memory stats; for(uint i=0; i < STAT_COUNT; i+=1) { stats[i] = data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_BASE, _monsterId, i); } return (stats[0], stats[1], stats[2], stats[3], stats[4], stats[5]); } function getMonsterCurrentStats(uint64 _monsterId) constant external returns(uint exp, uint level, uint hp, uint pa, uint pd, uint sa, uint sd, uint speed) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_monsterId); uint[6] memory stats; uint i = 0; level = getLevel(obj.exp); for(i=0; i < STAT_COUNT; i+=1) { stats[i] = data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_BASE, _monsterId, i); } for(i=0; i < STAT_COUNT; i++) { stats[i] += uint(data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_STEP, obj.classId, i)) * level * 3; } return (obj.exp, level, stats[0], stats[1], stats[2], stats[3], stats[4], stats[5]); } function getMonsterCP(uint64 _monsterId) constant external returns(uint cp) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_monsterId); uint[6] memory stats; uint i = 0; cp = getLevel(obj.exp); for(i=0; i < STAT_COUNT; i+=1) { stats[i] = data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_BASE, _monsterId, i); } for(i=0; i < STAT_COUNT; i++) { stats[i] += uint(data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_STEP, obj.classId, i)) * cp * 3; } cp = (stats[0] + stats[1] + stats[2] + stats[3] + stats[4] + stats[5]) / 6; } function getPrice(uint32 _classId) constant external returns(bool catchable, uint price) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterClassAcc memory class; (class.classId, class.price, class.returnPrice, class.total, class.catchable) = data.getMonsterClass(_classId); price = class.price; if (class.total > 0) price += class.price*(class.total-1)/priceIncreasingRatio; if (class.catchable == false) { if (addressWhitelist[msg.sender] == true && classWhitelist[_classId] == true) { return (true, price); } } return (class.catchable, price); } function getMonsterClassBasic(uint32 _classId) constant external returns(uint256, uint256, uint256, bool) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterClassAcc memory class; (class.classId, class.price, class.returnPrice, class.total, class.catchable) = data.getMonsterClass(_classId); return (class.price, class.returnPrice, class.total, class.catchable); } function renameMonster(uint64 _objId, string name) isActive external { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterObjAcc memory obj; (obj.monsterId, obj.classId, obj.trainer, obj.exp, obj.createIndex, obj.lastClaimIndex, obj.createTime) = data.getMonsterObj(_objId); if (obj.monsterId != _objId || obj.trainer != msg.sender) { revert(); } data.setMonsterObj(_objId, name, obj.exp, obj.createIndex, obj.lastClaimIndex); } function catchMonster(address _player, uint32 _classId, string _name) isActive external payable returns(uint tokenId) { EtheremonDataBase data = EtheremonDataBase(dataContract); MonsterClassAcc memory class; (class.classId, class.price, class.returnPrice, class.total, class.catchable) = data.getMonsterClass(_classId); if (class.classId == 0) { revert(); } if (class.catchable == false) { if (addressWhitelist[msg.sender] == false || classWhitelist[_classId] == false) { revert(); } } uint price = class.price; if (class.total > 0) price += class.price*(class.total-1)/priceIncreasingRatio; if (msg.value + gapFactor < price) { revert(); } // add new monster uint64 objId = data.addMonsterObj(_classId, _player, _name); uint8 value; seed = getRandom(_player, block.number-1, seed, objId); // generate base stat for the previous one for (uint i=0; i < STAT_COUNT; i+= 1) { value = uint8(seed % STAT_MAX) + data.getElementInArrayType(EtheremonEnum.ArrayType.STAT_START, uint64(_classId), i); data.addElementToArrayType(EtheremonEnum.ArrayType.STAT_BASE, objId, value); } emit Transfer(address(0), _player, objId); return objId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_monsterId","type":"uint64"}],"name":"getMonsterCP","outputs":[{"name":"cp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_approved","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_trainer","type":"address"},{"name":"_name","type":"string"}],"name":"mintMonster","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_player","type":"address"},{"name":"_block","type":"uint256"},{"name":"_seed","type":"uint256"},{"name":"_count","type":"uint256"}],"name":"getRandom","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_dataContract","type":"address"},{"name":"_battleContract","type":"address"},{"name":"_tradeContract","type":"address"}],"name":"setOperationContracts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dataContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"moderators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_uri","type":"string"}],"name":"setTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"genLevelExp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_monsterId","type":"uint64"}],"name":"getMonsterCurrentStats","outputs":[{"name":"exp","type":"uint256"},{"name":"level","type":"uint256"},{"name":"hp","type":"uint256"},{"name":"pa","type":"uint256"},{"name":"pd","type":"uint256"},{"name":"sa","type":"uint256"},{"name":"sd","type":"uint256"},{"name":"speed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"battleContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_classId","type":"uint32"},{"name":"_status","type":"bool"}],"name":"setClassWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_isMaintaining","type":"bool"}],"name":"UpdateMaintaining","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STAT_MAX","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalModerators","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sendTo","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ratio","type":"uint16"}],"name":"setPriceIncreasingRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newModerator","type":"address"}],"name":"AddModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint8"}],"name":"levelExps","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"clearApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gapFactor","type":"uint256"}],"name":"setFactor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint64"}],"name":"burnMonster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"isApprovable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_objId","type":"uint64"},{"name":"name","type":"string"}],"name":"renameMonster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getMonsterClassBasic","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_smartcontract","type":"address"},{"name":"_status","type":"bool"}],"name":"setAddressWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"exp","type":"uint32"}],"name":"getLevel","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_oldModerator","type":"address"}],"name":"RemoveModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_player","type":"address"},{"name":"_classId","type":"uint32"},{"name":"_name","type":"string"}],"name":"catchMonster","outputs":[{"name":"tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"gapFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"triggerTransferEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_monsterId","type":"uint64"}],"name":"getMonsterBaseStats","outputs":[{"name":"hp","type":"uint256"},{"name":"pa","type":"uint256"},{"name":"pd","type":"uint256"},{"name":"sa","type":"uint256"},{"name":"sd","type":"uint256"},{"name":"speed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STAT_COUNT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_classId","type":"uint32"}],"name":"getPrice","outputs":[{"name":"catchable","type":"bool"},{"name":"price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceIncreasingRatio","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMaintaining","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"ChangeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
600180546003805460ff199081169091556000600b81905566038d7ea4c68000600f556010805461ffff19166103e817815560808181527f4574686572656d6f6e4d6f6e737465720000000000000000000000000000000060a0908152610100604052600560c09081527f454d4f4e4100000000000000000000000000000000000000000000000000000060e05260208590527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c58054871689179055600160b060020a0319909616331787557ff7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed78080080548616881790557f780e9d63000000000000000000000000000000000000000000000000000000009093527f77b7bbe0e49b76487c9476b5db3354cf5270619d0037ccb899c2a4c4a75b43188054909416909517909255620001539160089190620001c7565b50805162000169906009906020840190620001c7565b50507f5b5e139f000000000000000000000000000000000000000000000000000000006000908152602052507f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df805460ff191660011790556200026c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200020a57805160ff19168380011785556200023a565b828001600101855582156200023a579182015b828111156200023a5782518255916020019190600101906200021d565b50620002489291506200024c565b5090565b6200026991905b8082111562000248576000815560010162000253565b90565b614091806200027c6000396000f3006080604052600436106102795763ffffffff60e060020a60003504166301ffc9a7811461027e5780630672859b146102c957806306fdde03146102fd578063081812fc14610387578063095ea7b3146103bb5780630963d4b7146103e15780630a92b264146104185780630afd548d146104425780630d6688181461046f57806314d0f1ba14610484578063162094c4146104a557806318160ddd146104c957806323b872dd146104de5780632f745c591461050857806333ced3211461052c5780633c6e592714610541578063423b1ca3146105a457806342842e0e146105b95780634661bb98146105e357806348ef5aa8146106065780634e3dc2f1146106205780634efb023e1461064b5780634f6ccce714610677578063522f68151461068f57806357918052146106b35780636352211e146106cf5780636c81fd6d146106e757806370a082311461070857806378b475a8146107295780637fdd54031461075d578063817e9d311461077557806381b230421461078d5780638a0520fb146107af5780638d1d22d8146107d35780638da5cb5b1461080157806394f6ba1c1461081657806395d89b411461085c578063a22cb46514610871578063a9059cbb14610897578063af4c14ee146108bb578063b2cad9b7146108e1578063b85d6275146108ff578063b88d4fde14610920578063c0845e8a14610959578063c10be52114610983578063c463b00814610998578063c87b56dd146109c2578063d29cbd60146109da578063d98e14bd14610a2f578063da26663a14610a44578063e19bb96414610a7d578063e985e9c514610a92578063ee4e441614610ab9578063f285329214610ace578063ffa640d814610aef575b600080fd5b34801561028a57600080fd5b506102b57bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516610b04565b604080519115158252519081900360200190f35b3480156102d557600080fd5b506102eb67ffffffffffffffff60043516610b38565b60408051918252519081900360200190f35b34801561030957600080fd5b50610312610dfe565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034c578181015183820152602001610334565b50505050905090810190601f1680156103795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039357600080fd5b5061039f600435610e94565b60408051600160a060020a039092168252519081900360200190f35b3480156103c757600080fd5b506103df600160a060020a0360043516602435610fbf565b005b3480156103ed57600080fd5b506102eb6004803563ffffffff169060248035600160a060020a0316916044359182019101356112a7565b34801561042457600080fd5b506102eb600160a060020a036004351660243560443560643561157a565b34801561044e57600080fd5b506103df600160a060020a036004358116906024358116906044351661162c565b34801561047b57600080fd5b5061039f6116c6565b34801561049057600080fd5b506102b5600160a060020a03600435166116da565b3480156104b157600080fd5b506103df6004803590602480359081019101356116ef565b3480156104d557600080fd5b506102eb611766565b3480156104ea57600080fd5b506103df600160a060020a03600435811690602435166044356117fc565b34801561051457600080fd5b506102eb600160a060020a0360043516602435611961565b34801561053857600080fd5b506103df611a2e565b34801561054d57600080fd5b5061056367ffffffffffffffff60043516611acb565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b3480156105b057600080fd5b5061039f611de6565b3480156105c557600080fd5b506103df600160a060020a0360043581169060243516604435611df5565b3480156105ef57600080fd5b506103df63ffffffff600435166024351515611e11565b34801561061257600080fd5b506103df6004351515611e71565b34801561062c57600080fd5b50610635611e9b565b6040805160ff9092168252519081900360200190f35b34801561065757600080fd5b50610660611ea0565b6040805161ffff9092168252519081900360200190f35b34801561068357600080fd5b506102eb600435611ec2565b34801561069b57600080fd5b506103df600160a060020a0360043516602435611ec5565b3480156106bf57600080fd5b506103df61ffff60043516611f20565b3480156106db57600080fd5b5061039f600435611f70565b3480156106f357600080fd5b506103df600160a060020a0360043516612075565b34801561071457600080fd5b506102eb600160a060020a036004351661211c565b34801561073557600080fd5b5061074460ff600435166121d7565b6040805163ffffffff9092168252519081900360200190f35b34801561076957600080fd5b506103df6004356121ef565b34801561078157600080fd5b506103df600435612230565b34801561079957600080fd5b506103df67ffffffffffffffff6004351661226d565b3480156107bb57600080fd5b506102b5600160a060020a03600435166024356122b8565b3480156107df57600080fd5b506103df6004803567ffffffffffffffff16906024803590810191013561253e565b34801561080d57600080fd5b5061039f612758565b34801561082257600080fd5b5061083463ffffffff60043516612767565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561086857600080fd5b50610312612866565b34801561087d57600080fd5b506103df600160a060020a036004351660243515156128c7565b3480156108a357600080fd5b506103df600160a060020a036004351660243561294a565b3480156108c757600080fd5b506103df600160a060020a03600435166024351515612aa3565b3480156108ed57600080fd5b5061063563ffffffff60043516612b06565b34801561090b57600080fd5b506103df600160a060020a0360043516612b69565b34801561092c57600080fd5b506103df600160a060020a0360048035821691602480359091169160443591606435908101910135612c10565b6102eb60048035600160a060020a0316906024803563ffffffff1691604435918201910135612c4c565b34801561098f57600080fd5b506102eb61307b565b3480156109a457600080fd5b506103df600160a060020a0360043581169060243516604435613081565b3480156109ce57600080fd5b506103126004356130f6565b3480156109e657600080fd5b506109fc67ffffffffffffffff60043516613197565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610a3b57600080fd5b506106356132a6565b348015610a5057600080fd5b50610a6263ffffffff600435166132ab565b60408051921515835260208301919091528051918290030190f35b348015610a8957600080fd5b50610660613438565b348015610a9e57600080fd5b506102b5600160a060020a0360043581169060243516613442565b348015610ac557600080fd5b506102b561349d565b348015610ada57600080fd5b506103df600160a060020a03600435166134a6565b348015610afb57600080fd5b5061039f6134f9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b600080610b43613ee1565b610b4b613f24565b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169450600091859163072024609160248083019260e092919082900301818787803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b505050506040513d60e0811015610bd657600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a01819052600160a060020a039091169189019190915293169086015267ffffffffffffffff16845260009150610c5190612b06565b60ff169450600090505b6006811015610d0f576040805160e060020a6362b21ad70281526003600482015267ffffffffffffffff88166024820152604481018390529051600160a060020a038616916362b21ad79160648083019260209291908290030181600087803b158015610cc757600080fd5b505af1158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b505160ff16828260068110610d0257fe5b6020020152600101610c5b565b5060005b6006811015610dd1576020838101516040805160e060020a6362b21ad70281526001600482015263ffffffff909216602483015260448201849052518792600160a060020a038816926362b21ad792606480830193928290030181600087803b158015610d7f57600080fd5b505af1158015610d93573d6000803e3d6000fd5b505050506040513d6020811015610da957600080fd5b505160ff1602600302828260068110610dbe57fe5b6020020180519091019052600101610d13565b5060a081015160808201516060830151604084015160208501519451600695010101010104949350505050565b60088054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b5050505050905090565b600080610e9f613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b158015610eff57600080fd5b505af1158015610f13573d6000803e3d6000fd5b505050506040513d60e0811015610f2957600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff1682521515610f9d57600080fd5b600084815260066020526040902054600160a060020a031692505b5050919050565b6000610fc9613ee1565b600080600360019054906101000a9004600160a060020a0316935083600160a060020a03166307202460866040518263ffffffff1660e060020a028152600401808267ffffffffffffffff1667ffffffffffffffff16815260200191505060e060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d60e081101561106b57600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880181905293169086015267ffffffffffffffff16845215156110df57600080fd5b6110ec8360400151613508565b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050506040513d602081101561118157600080fd5b50518061120d575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b1580156111e057600080fd5b505af11580156111f4573d6000803e3d6000fd5b505050506040513d602081101561120a57600080fd5b50515b1561121757600080fd5b6040830151600160a060020a038781169116141561123457600080fd5b600085815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038a811691821790925586830151925189949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050505050565b6001546000908190819081908190600160a060020a03163314806112df57503360009081526002602052604090205460ff1615156001145b15156112ea57600080fd5b6003546040517ffc4d20f500000000000000000000000000000000000000000000000000000000815263ffffffff8b1660048201908152600160a060020a038b81166024840152606060448401908152606484018b9052610100909404169650869263fc4d20f5928d928d928d928d929190608401848480828437820191505095505050505050602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d60208110156113b557600080fd5b5051600b549093506113d990899060001943019067ffffffffffffffff871661157a565b600b555060005b6006811015611534576040805160e060020a6362b21ad70281526002600482015263ffffffff8b166024820152604481018390529051600160a060020a038616916362b21ad79160648083019260209291908290030181600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b505050506040513d602081101561147257600080fd5b5051600b546020900601915083600160a060020a03166326bda739600385856040518463ffffffff1660e060020a028152600401808460048111156114b357fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b15801561150057600080fd5b505af1158015611514573d6000803e3d6000fd5b505050506040513d602081101561152a57600080fd5b50506001016113e0565b60405167ffffffffffffffff841690600160a060020a038a1690600090600080516020614046833981519152908290a4505067ffffffffffffffff169695505050505050565b6040805184406020808301919091526c01000000000000000000000000600160a060020a0388160282840152605482018590526074808301859052835180840390910181526094909201928390528151600093918291908401908083835b602083106115f75780518252601f1990920191602091820191016115d8565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b600154600160a060020a031633148061165957503360009081526002602052604090205460ff1615156001145b151561166457600080fd5b60038054600160a060020a039485166101000274ffffffffffffffffffffffffffffffffffffffff00199091161790556004805492841673ffffffffffffffffffffffffffffffffffffffff1993841617905560058054919093169116179055565b6003546101009004600160a060020a031681565b60026020526000908152604090205460ff1681565b600154600160a060020a031633148061171c57503360009081526002602052604090205460ff1615156001145b151561172757600080fd5b6117618383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375061354d945050505050565b505050565b600080600360019054906101000a9004600160a060020a0316905080600160a060020a0316637a09defe6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156117bf57600080fd5b505af11580156117d3573d6000803e3d6000fd5b505050506040513d60208110156117e957600080fd5b505167ffffffffffffffff1691505b5090565b6000611806613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff861660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b15801561186657600080fd5b505af115801561187a573d6000803e3d6000fd5b505050506040513d60e081101561189057600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff168252151561190457600080fd5b61191283826040015161356c565b84600160a060020a03168160400151600160a060020a031614151561193657600080fd5b600160a060020a038416151561194b57600080fd5b61195a8160400151858561370e565b5050505050565b600080600160a060020a038416151561197957600080fd5b50600354604080517f75fe2e33000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820186905291516101009093049091169182916375fe2e339160448083019260209291908290030181600087803b1580156119f057600080fd5b505af1158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b505167ffffffffffffffff16949350505050565b60015460009081908190600160a060020a0316331480611a6257503360009081526002602052604090205460ff1615156001145b1515611a6d57600080fd5b506001915060649050805b606460ff8416116117615760ff83166000908152600c60205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611a78565b6000806000806000806000806000611ae1613ee1565b611ae9613f24565b6003546040805160e560020a6239012302815267ffffffffffffffff8f1660048201529051610100909204600160a060020a03169450600091859163072024609160248083019260e092919082900301818787803b158015611b4a57600080fd5b505af1158015611b5e573d6000803e3d6000fd5b505050506040513d60e0811015611b7457600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a01819052600160a060020a039091169189019190915293169086015267ffffffffffffffff16845260009150611bef90612b06565b60ff169a50600090505b6006811015611cc65783600160a060020a03166362b21ad760038f846040518463ffffffff1660e060020a02815260040180846004811115611c3757fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c7e57600080fd5b505af1158015611c92573d6000803e3d6000fd5b505050506040513d6020811015611ca857600080fd5b505160ff16828260068110611cb957fe5b6020020152600101611bf9565b5060005b6006811015611d88576020838101516040805160e060020a6362b21ad70281526001600482015263ffffffff909216602483015260448201849052518d92600160a060020a038816926362b21ad792606480830193928290030181600087803b158015611d3657600080fd5b505af1158015611d4a573d6000803e3d6000fd5b505050506040513d6020811015611d6057600080fd5b505160ff1602600302828260068110611d7557fe5b6020020180519091019052600101611cca565b60808301518b8360006020020151846001602002015185600260200201518660036020020151876004602002015188600560200201518763ffffffff1697509b509b509b509b509b509b509b509b5050505050919395975091939597565b600454600160a060020a031681565b6117618383836020604051908101604052806000815250613871565b600154600160a060020a0316331480611e3e57503360009081526002602052604090205460ff1615156001145b1515611e4957600080fd5b63ffffffff919091166000908152600d60205260409020805460ff1916911515919091179055565b600154600160a060020a03163314611e8857600080fd5b6003805460ff1916911515919091179055565b602081565b60015474010000000000000000000000000000000000000000900461ffff1681565b90565b600154600160a060020a03163314611edc57600080fd5b3031811115611eea57600080fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015611761573d6000803e3d6000fd5b600154600160a060020a0316331480611f4d57503360009081526002602052604090205460ff1615156001145b1515611f5857600080fd5b6010805461ffff191661ffff92909216919091179055565b600080611f7b613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b158015611fdb57600080fd5b505af1158015611fef573d6000803e3d6000fd5b505050506040513d60e081101561200557600080fd5b5080516020808301516040840151606085015160808087015160a08089015160c0998a015160e08c015263ffffffff908116998b0199909952908816908901529086169087015293169084015267ffffffffffffffff1682529250600160a060020a0383161515610fb857600080fd5b600154600160a060020a0316331461208c57600080fd5b600160a060020a03811660009081526002602052604090205460ff16151561211957600160a060020a0381166000908152600260205260409020805460ff19166001908117909155805461ffff74010000000000000000000000000000000000000000808304821684019091160275ffff0000000000000000000000000000000000000000199091161790555b50565b600080600160a060020a038316151561213457600080fd5b50600354604080517f47c17bac000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015291516101009093049091169182916347c17bac9160248083019260209291908290030181600087803b1580156121a457600080fd5b505af11580156121b8573d6000803e3d6000fd5b505050506040513d60208110156121ce57600080fd5b50519392505050565b600c6020526000908152604090205463ffffffff1681565b600154600160a060020a031633148061221c57503360009081526002602052604090205460ff1615156001145b151561222757600080fd5b61211981613b4b565b600154600160a060020a031633148061225d57503360009081526002602052604090205460ff1615156001145b151561226857600080fd5b600f55565b600154600160a060020a031633148061229a57503360009081526002602052604090205460ff1615156001145b15156122a557600080fd5b6121198167ffffffffffffffff16613b93565b6000806122c3613ee1565b600080600360019054906101000a9004600160a060020a0316935083600160a060020a03166307202460876040518263ffffffff1660e060020a028152600401808267ffffffffffffffff1667ffffffffffffffff16815260200191505060e060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505050506040513d60e081101561236557600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880152929092169185019190915267ffffffffffffffff908116808552908716146123e55760009450612534565b86600160a060020a03168360400151600160a060020a031614151561240d5760009450612534565b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b505050506040513d60208110156124a257600080fd5b5051158015612531575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b15801561250357600080fd5b505af1158015612517573d6000803e3d6000fd5b505050506040513d602081101561252d57600080fd5b5051155b94505b5050505092915050565b6000612548613ee1565b60035460ff161561255857600080fd5b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b1580156125b857600080fd5b505af11580156125cc573d6000803e3d6000fd5b505050506040513d60e08110156125e257600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860152929092169183019190915267ffffffffffffffff90811680835290861614158061266e57506040810151600160a060020a03163314155b1561267857600080fd5b608081015160a08083015160c08401516040517f32666a3100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8a166004820190815263ffffffff80871660448401528085166064840152831660848301526024820194855260a48201899052600160a060020a038816956332666a31958c958c958c959394919390929060c4018787808284378201915050975050505050505050600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050505050505050565b600154600160a060020a031681565b6000806000806000612777613f43565b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201529051610100909204600160a060020a031693508391639d29cac49160248082019260a0929091908290030181600087803b1580156127ea57600080fd5b505af11580156127fe573d6000803e3d6000fd5b505050506040513d60a081101561281457600080fd5b508051602080830151604080850151606080870151608097880151151597890188905263ffffffff90811691890182905292880182905293870183905293169094529299909850919650945092505050565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b600160a060020a03821615156128dc57600080fd5b336000818152600760209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6000612954613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff861660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b505050506040513d60e08110156129de57600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff1682521515612a5257600080fd5b612a6083826040015161356c565b6040810151600160a060020a03163314612a7957600080fd5b600160a060020a0384161515612a8e57600080fd5b612a9d8160400151858561370e565b50505050565b600154600160a060020a0316331480612ad057503360009081526002602052604090205460ff1615156001145b1515612adb57600080fd5b600160a060020a03919091166000908152600e60205260409020805460ff1916911515919091179055565b600060016064825b8160ff168360ff161015612b6057600260ff848401160460ff81166000908152600c602052604090205490915063ffffffff9081169086161015612b5457809150612b5b565b8060010192505b612b0e565b50909392505050565b600154600160a060020a03163314612b8057600080fd5b600160a060020a03811660009081526002602052604090205460ff1615156001141561211957600160a060020a03166000908152600260205260409020805460ff191690556001805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b61195a85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843750613871945050505050565b600080612c57613f43565b60035460009081908190819060ff1615612c7057600080fd5b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff8d1660048201529051610100909204600160a060020a031697508791639d29cac49160248082019260a0929091908290030181600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d60a0811015612d0d57600080fd5b5080516020808301516040808501516060808701516080978801511515978d019790975263ffffffff968716908c0152908a015290880152168086521515612d5457600080fd5b60808501511515612d9e57336000908152600e602052604090205460ff161580612d94575063ffffffff8a166000908152600d602052604090205460ff16155b15612d9e57600080fd5b846020015193506000856060015163ffffffff161115612de8576010546060860151602087015161ffff9092169160001990910163ffffffff1602811515612de257fe5b04840193505b83600f5434011015612df957600080fd5b85600160a060020a031663fc4d20f58b8d8c8c6040518563ffffffff1660e060020a028152600401808563ffffffff1663ffffffff16815260200184600160a060020a0316600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505095505050505050602060405180830381600087803b158015612e8a57600080fd5b505af1158015612e9e573d6000803e3d6000fd5b505050506040513d6020811015612eb457600080fd5b5051600b54909350612ed8908c9060001943019067ffffffffffffffff871661157a565b600b555060005b6006811015613033576040805160e060020a6362b21ad70281526002600482015263ffffffff8c166024820152604481018390529051600160a060020a038816916362b21ad79160648083019260209291908290030181600087803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b505050506040513d6020811015612f7157600080fd5b5051600b546020900601915085600160a060020a03166326bda739600385856040518463ffffffff1660e060020a02815260040180846004811115612fb257fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b158015612fff57600080fd5b505af1158015613013573d6000803e3d6000fd5b505050506040513d602081101561302957600080fd5b5050600101612edf565b60405167ffffffffffffffff841690600160a060020a038d1690600090600080516020614046833981519152908290a4505067ffffffffffffffff1698975050505050505050565b600f5481565b600154600160a060020a03163314806130ae57503360009081526002602052604090205460ff1615156001145b15156130b957600080fd5b6130c281613b4b565b8082600160a060020a031684600160a060020a031660008051602061404683398151915260405160405180910390a4505050565b6000818152600a602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561318b5780601f106131605761010080835404028352916020019161318b565b820191906000526020600020905b81548152906001019060200180831161316e57829003601f168201915b50505050509050919050565b60008060008060008060006131aa613f24565b6003546101009004600160a060020a0316915060005b6006811015613274576040805160e060020a6362b21ad70281526003600482015267ffffffffffffffff8c166024820152604481018390529051600160a060020a038516916362b21ad79160648083019260209291908290030181600087803b15801561322c57600080fd5b505af1158015613240573d6000803e3d6000fd5b505050506040513d602081101561325657600080fd5b505160ff1682826006811061326757fe5b60200201526001016131c0565b508051602082015160408301516060840151608085015160a090950151939d929c50909a509850919650945092505050565b600681565b60008060006132b8613f43565b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff881660048201529051610100909204600160a060020a031693508391639d29cac49160248082019260a0929091908290030181600087803b15801561332b57600080fd5b505af115801561333f573d6000803e3d6000fd5b505050506040513d60a081101561335557600080fd5b50805160208083015160408085015160608087015160809788015115159789019790975263ffffffff96871690880181905291870152918501819052929091168352909350600010156133d2576010546060820151602083015161ffff9092169160001990910163ffffffff16028115156133cc57fe5b04830192505b6080810151151561342957336000908152600e602052604090205460ff161515600114801561341b575063ffffffff85166000908152600d602052604090205460ff1615156001145b156134295760019350613431565b608081015193505b5050915091565b60105461ffff1681565b6000600160a060020a038316151561345957600080fd5b600160a060020a038216151561346e57600080fd5b50600160a060020a03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60035460ff1681565b600154600160a060020a031633146134bd57600080fd5b600160a060020a038116156121195760018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600554600160a060020a031681565b600160a060020a0381163314806135425750600160a060020a038116600090815260076020908152604080832033845290915290205460ff165b151561211957600080fd5b6000828152600a60209081526040909120825161176192840190613f71565b600480546005546040805160e060020a6335f097f302815267ffffffffffffffff87169481019490945251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505115801561368857506040805160e260020a632a11e9c702815267ffffffffffffffff861660048201529051600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b15801561365a57600080fd5b505af115801561366e573d6000803e3d6000fd5b505050506040513d602081101561368457600080fd5b5051155b151561369357600080fd5b600160a060020a03831615156136a857600080fd5b600160a060020a0383163314806136d55750600084815260066020526040902054600160a060020a031633145b806137035750600160a060020a038316600090815260076020908152604080832033845290915290205460ff165b1515612a9d57600080fd5b600061371982613b4b565b50600354604080517f60c6ccb2000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015267ffffffffffffffff8516602483015291516101009093049091169182916360c6ccb291604480830192600092919082900301818387803b15801561379857600080fd5b505af11580156137ac573d6000803e3d6000fd5b5050604080517f9248019e000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015267ffffffffffffffff8716602483015291519185169350639248019e925060448082019260009290919082900301818387803b15801561382457600080fd5b505af1158015613838573d6000803e3d6000fd5b505050508183600160a060020a031685600160a060020a031660008051602061404683398151915260405160405180910390a450505050565b600061387b613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350600091849163072024609160248083019260e092919082900301818787803b1580156138dc57600080fd5b505af11580156138f0573d6000803e3d6000fd5b505050506040513d60e081101561390657600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08e015263ffffffff9081169a8d019a909a52908916908b015290871690890152600160a060020a031690870181905293169085015267ffffffffffffffff168352151561397a57600080fd5b61398885836040015161356c565b86600160a060020a03168260400151600160a060020a03161415156139ac57600080fd5b600160a060020a03861615156139c157600080fd5b6139d08260400151878761370e565b6139e286600160a060020a0316613bda565b15613b42576040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a038a8116602485015260448401899052608060648501908152885160848601528851918b169463150b7a0294938d938c938c93909160a490910190602085019080838360005b83811015613a7a578181015183820152602001613a62565b50505050905090810190601f168015613aa75780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613ac957600080fd5b505af1158015613add573d6000803e3d6000fd5b505050506040513d6020811015613af357600080fd5b505190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981167f150b7a020000000000000000000000000000000000000000000000000000000014613b4257600080fd5b50505050505050565b600081815260066020526040902054600160a060020a031615612119576000908152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b613b9c81613be2565b6000818152600a60205260409020546002600019610100600184161502019091160415612119576000818152600a6020526040812061211991613feb565b6000903b1190565b6000613bec613ee1565b600080613bf885613b4b565b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169550859163072024609160248082019260e0929091908290030181600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b505050506040513d60e0811015613c8257600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880181905293169086015267ffffffffffffffff1684521515613cf657600080fd5b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b505050506040513d6020811015613d8b57600080fd5b505180613e17575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b158015613dea57600080fd5b505af1158015613dfe573d6000803e3d6000fd5b505050506040513d6020811015613e1457600080fd5b50515b15613e2157600080fd5b60408084015181517f60c6ccb2000000000000000000000000000000000000000000000000000000008152600160a060020a03918216600482015267ffffffffffffffff881660248201529151908616916360c6ccb291604480830192600092919082900301818387803b158015613e9857600080fd5b505af1158015613eac573d6000803e3d6000fd5b5050506040808501519051879250600091600160a060020a031690600080516020614046833981519152908390a45050505050565b60408051610100810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c0810182905260e081019190915290565b60c0604051908101604052806006906020820280388339509192915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613fb257805160ff1916838001178555613fdf565b82800160010185558215613fdf579182015b82811115613fdf578251825591602001919060010190613fc4565b506117f892915061402b565b50805460018160011615610100020316600290046000825580601f106140115750612119565b601f01602090049060005260206000209081019061211991905b611ec291905b808211156117f857600081556001016140315600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582089a567cea9b3bb8422cf1b9a2493b8775bc1007b0c9f0a20c9626c790722f9b60029
Deployed Bytecode
0x6080604052600436106102795763ffffffff60e060020a60003504166301ffc9a7811461027e5780630672859b146102c957806306fdde03146102fd578063081812fc14610387578063095ea7b3146103bb5780630963d4b7146103e15780630a92b264146104185780630afd548d146104425780630d6688181461046f57806314d0f1ba14610484578063162094c4146104a557806318160ddd146104c957806323b872dd146104de5780632f745c591461050857806333ced3211461052c5780633c6e592714610541578063423b1ca3146105a457806342842e0e146105b95780634661bb98146105e357806348ef5aa8146106065780634e3dc2f1146106205780634efb023e1461064b5780634f6ccce714610677578063522f68151461068f57806357918052146106b35780636352211e146106cf5780636c81fd6d146106e757806370a082311461070857806378b475a8146107295780637fdd54031461075d578063817e9d311461077557806381b230421461078d5780638a0520fb146107af5780638d1d22d8146107d35780638da5cb5b1461080157806394f6ba1c1461081657806395d89b411461085c578063a22cb46514610871578063a9059cbb14610897578063af4c14ee146108bb578063b2cad9b7146108e1578063b85d6275146108ff578063b88d4fde14610920578063c0845e8a14610959578063c10be52114610983578063c463b00814610998578063c87b56dd146109c2578063d29cbd60146109da578063d98e14bd14610a2f578063da26663a14610a44578063e19bb96414610a7d578063e985e9c514610a92578063ee4e441614610ab9578063f285329214610ace578063ffa640d814610aef575b600080fd5b34801561028a57600080fd5b506102b57bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1960043516610b04565b604080519115158252519081900360200190f35b3480156102d557600080fd5b506102eb67ffffffffffffffff60043516610b38565b60408051918252519081900360200190f35b34801561030957600080fd5b50610312610dfe565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561034c578181015183820152602001610334565b50505050905090810190601f1680156103795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039357600080fd5b5061039f600435610e94565b60408051600160a060020a039092168252519081900360200190f35b3480156103c757600080fd5b506103df600160a060020a0360043516602435610fbf565b005b3480156103ed57600080fd5b506102eb6004803563ffffffff169060248035600160a060020a0316916044359182019101356112a7565b34801561042457600080fd5b506102eb600160a060020a036004351660243560443560643561157a565b34801561044e57600080fd5b506103df600160a060020a036004358116906024358116906044351661162c565b34801561047b57600080fd5b5061039f6116c6565b34801561049057600080fd5b506102b5600160a060020a03600435166116da565b3480156104b157600080fd5b506103df6004803590602480359081019101356116ef565b3480156104d557600080fd5b506102eb611766565b3480156104ea57600080fd5b506103df600160a060020a03600435811690602435166044356117fc565b34801561051457600080fd5b506102eb600160a060020a0360043516602435611961565b34801561053857600080fd5b506103df611a2e565b34801561054d57600080fd5b5061056367ffffffffffffffff60043516611acb565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b3480156105b057600080fd5b5061039f611de6565b3480156105c557600080fd5b506103df600160a060020a0360043581169060243516604435611df5565b3480156105ef57600080fd5b506103df63ffffffff600435166024351515611e11565b34801561061257600080fd5b506103df6004351515611e71565b34801561062c57600080fd5b50610635611e9b565b6040805160ff9092168252519081900360200190f35b34801561065757600080fd5b50610660611ea0565b6040805161ffff9092168252519081900360200190f35b34801561068357600080fd5b506102eb600435611ec2565b34801561069b57600080fd5b506103df600160a060020a0360043516602435611ec5565b3480156106bf57600080fd5b506103df61ffff60043516611f20565b3480156106db57600080fd5b5061039f600435611f70565b3480156106f357600080fd5b506103df600160a060020a0360043516612075565b34801561071457600080fd5b506102eb600160a060020a036004351661211c565b34801561073557600080fd5b5061074460ff600435166121d7565b6040805163ffffffff9092168252519081900360200190f35b34801561076957600080fd5b506103df6004356121ef565b34801561078157600080fd5b506103df600435612230565b34801561079957600080fd5b506103df67ffffffffffffffff6004351661226d565b3480156107bb57600080fd5b506102b5600160a060020a03600435166024356122b8565b3480156107df57600080fd5b506103df6004803567ffffffffffffffff16906024803590810191013561253e565b34801561080d57600080fd5b5061039f612758565b34801561082257600080fd5b5061083463ffffffff60043516612767565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561086857600080fd5b50610312612866565b34801561087d57600080fd5b506103df600160a060020a036004351660243515156128c7565b3480156108a357600080fd5b506103df600160a060020a036004351660243561294a565b3480156108c757600080fd5b506103df600160a060020a03600435166024351515612aa3565b3480156108ed57600080fd5b5061063563ffffffff60043516612b06565b34801561090b57600080fd5b506103df600160a060020a0360043516612b69565b34801561092c57600080fd5b506103df600160a060020a0360048035821691602480359091169160443591606435908101910135612c10565b6102eb60048035600160a060020a0316906024803563ffffffff1691604435918201910135612c4c565b34801561098f57600080fd5b506102eb61307b565b3480156109a457600080fd5b506103df600160a060020a0360043581169060243516604435613081565b3480156109ce57600080fd5b506103126004356130f6565b3480156109e657600080fd5b506109fc67ffffffffffffffff60043516613197565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b348015610a3b57600080fd5b506106356132a6565b348015610a5057600080fd5b50610a6263ffffffff600435166132ab565b60408051921515835260208301919091528051918290030190f35b348015610a8957600080fd5b50610660613438565b348015610a9e57600080fd5b506102b5600160a060020a0360043581169060243516613442565b348015610ac557600080fd5b506102b561349d565b348015610ada57600080fd5b506103df600160a060020a03600435166134a6565b348015610afb57600080fd5b5061039f6134f9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b600080610b43613ee1565b610b4b613f24565b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169450600091859163072024609160248083019260e092919082900301818787803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b505050506040513d60e0811015610bd657600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a01819052600160a060020a039091169189019190915293169086015267ffffffffffffffff16845260009150610c5190612b06565b60ff169450600090505b6006811015610d0f576040805160e060020a6362b21ad70281526003600482015267ffffffffffffffff88166024820152604481018390529051600160a060020a038616916362b21ad79160648083019260209291908290030181600087803b158015610cc757600080fd5b505af1158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b505160ff16828260068110610d0257fe5b6020020152600101610c5b565b5060005b6006811015610dd1576020838101516040805160e060020a6362b21ad70281526001600482015263ffffffff909216602483015260448201849052518792600160a060020a038816926362b21ad792606480830193928290030181600087803b158015610d7f57600080fd5b505af1158015610d93573d6000803e3d6000fd5b505050506040513d6020811015610da957600080fd5b505160ff1602600302828260068110610dbe57fe5b6020020180519091019052600101610d13565b5060a081015160808201516060830151604084015160208501519451600695010101010104949350505050565b60088054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b5050505050905090565b600080610e9f613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b158015610eff57600080fd5b505af1158015610f13573d6000803e3d6000fd5b505050506040513d60e0811015610f2957600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff1682521515610f9d57600080fd5b600084815260066020526040902054600160a060020a031692505b5050919050565b6000610fc9613ee1565b600080600360019054906101000a9004600160a060020a0316935083600160a060020a03166307202460866040518263ffffffff1660e060020a028152600401808267ffffffffffffffff1667ffffffffffffffff16815260200191505060e060405180830381600087803b15801561104157600080fd5b505af1158015611055573d6000803e3d6000fd5b505050506040513d60e081101561106b57600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880181905293169086015267ffffffffffffffff16845215156110df57600080fd5b6110ec8360400151613508565b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b15801561115757600080fd5b505af115801561116b573d6000803e3d6000fd5b505050506040513d602081101561118157600080fd5b50518061120d575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b1580156111e057600080fd5b505af11580156111f4573d6000803e3d6000fd5b505050506040513d602081101561120a57600080fd5b50515b1561121757600080fd5b6040830151600160a060020a038781169116141561123457600080fd5b600085815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038a811691821790925586830151925189949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050505050565b6001546000908190819081908190600160a060020a03163314806112df57503360009081526002602052604090205460ff1615156001145b15156112ea57600080fd5b6003546040517ffc4d20f500000000000000000000000000000000000000000000000000000000815263ffffffff8b1660048201908152600160a060020a038b81166024840152606060448401908152606484018b9052610100909404169650869263fc4d20f5928d928d928d928d929190608401848480828437820191505095505050505050602060405180830381600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d60208110156113b557600080fd5b5051600b549093506113d990899060001943019067ffffffffffffffff871661157a565b600b555060005b6006811015611534576040805160e060020a6362b21ad70281526002600482015263ffffffff8b166024820152604481018390529051600160a060020a038616916362b21ad79160648083019260209291908290030181600087803b15801561144857600080fd5b505af115801561145c573d6000803e3d6000fd5b505050506040513d602081101561147257600080fd5b5051600b546020900601915083600160a060020a03166326bda739600385856040518463ffffffff1660e060020a028152600401808460048111156114b357fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b15801561150057600080fd5b505af1158015611514573d6000803e3d6000fd5b505050506040513d602081101561152a57600080fd5b50506001016113e0565b60405167ffffffffffffffff841690600160a060020a038a1690600090600080516020614046833981519152908290a4505067ffffffffffffffff169695505050505050565b6040805184406020808301919091526c01000000000000000000000000600160a060020a0388160282840152605482018590526074808301859052835180840390910181526094909201928390528151600093918291908401908083835b602083106115f75780518252601f1990920191602091820191016115d8565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912098975050505050505050565b600154600160a060020a031633148061165957503360009081526002602052604090205460ff1615156001145b151561166457600080fd5b60038054600160a060020a039485166101000274ffffffffffffffffffffffffffffffffffffffff00199091161790556004805492841673ffffffffffffffffffffffffffffffffffffffff1993841617905560058054919093169116179055565b6003546101009004600160a060020a031681565b60026020526000908152604090205460ff1681565b600154600160a060020a031633148061171c57503360009081526002602052604090205460ff1615156001145b151561172757600080fd5b6117618383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375061354d945050505050565b505050565b600080600360019054906101000a9004600160a060020a0316905080600160a060020a0316637a09defe6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156117bf57600080fd5b505af11580156117d3573d6000803e3d6000fd5b505050506040513d60208110156117e957600080fd5b505167ffffffffffffffff1691505b5090565b6000611806613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff861660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b15801561186657600080fd5b505af115801561187a573d6000803e3d6000fd5b505050506040513d60e081101561189057600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff168252151561190457600080fd5b61191283826040015161356c565b84600160a060020a03168160400151600160a060020a031614151561193657600080fd5b600160a060020a038416151561194b57600080fd5b61195a8160400151858561370e565b5050505050565b600080600160a060020a038416151561197957600080fd5b50600354604080517f75fe2e33000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820186905291516101009093049091169182916375fe2e339160448083019260209291908290030181600087803b1580156119f057600080fd5b505af1158015611a04573d6000803e3d6000fd5b505050506040513d6020811015611a1a57600080fd5b505167ffffffffffffffff16949350505050565b60015460009081908190600160a060020a0316331480611a6257503360009081526002602052604090205460ff1615156001145b1515611a6d57600080fd5b506001915060649050805b606460ff8416116117615760ff83166000908152600c60205260409020805463ffffffff191663ffffffff83811691909117909155600190930192600a90600b8402160460050191508181019050611a78565b6000806000806000806000806000611ae1613ee1565b611ae9613f24565b6003546040805160e560020a6239012302815267ffffffffffffffff8f1660048201529051610100909204600160a060020a03169450600091859163072024609160248083019260e092919082900301818787803b158015611b4a57600080fd5b505af1158015611b5e573d6000803e3d6000fd5b505050506040513d60e0811015611b7457600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a01819052600160a060020a039091169189019190915293169086015267ffffffffffffffff16845260009150611bef90612b06565b60ff169a50600090505b6006811015611cc65783600160a060020a03166362b21ad760038f846040518463ffffffff1660e060020a02815260040180846004811115611c3757fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611c7e57600080fd5b505af1158015611c92573d6000803e3d6000fd5b505050506040513d6020811015611ca857600080fd5b505160ff16828260068110611cb957fe5b6020020152600101611bf9565b5060005b6006811015611d88576020838101516040805160e060020a6362b21ad70281526001600482015263ffffffff909216602483015260448201849052518d92600160a060020a038816926362b21ad792606480830193928290030181600087803b158015611d3657600080fd5b505af1158015611d4a573d6000803e3d6000fd5b505050506040513d6020811015611d6057600080fd5b505160ff1602600302828260068110611d7557fe5b6020020180519091019052600101611cca565b60808301518b8360006020020151846001602002015185600260200201518660036020020151876004602002015188600560200201518763ffffffff1697509b509b509b509b509b509b509b509b5050505050919395975091939597565b600454600160a060020a031681565b6117618383836020604051908101604052806000815250613871565b600154600160a060020a0316331480611e3e57503360009081526002602052604090205460ff1615156001145b1515611e4957600080fd5b63ffffffff919091166000908152600d60205260409020805460ff1916911515919091179055565b600154600160a060020a03163314611e8857600080fd5b6003805460ff1916911515919091179055565b602081565b60015474010000000000000000000000000000000000000000900461ffff1681565b90565b600154600160a060020a03163314611edc57600080fd5b3031811115611eea57600080fd5b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015611761573d6000803e3d6000fd5b600154600160a060020a0316331480611f4d57503360009081526002602052604090205460ff1615156001145b1515611f5857600080fd5b6010805461ffff191661ffff92909216919091179055565b600080611f7b613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b158015611fdb57600080fd5b505af1158015611fef573d6000803e3d6000fd5b505050506040513d60e081101561200557600080fd5b5080516020808301516040840151606085015160808087015160a08089015160c0998a015160e08c015263ffffffff908116998b0199909952908816908901529086169087015293169084015267ffffffffffffffff1682529250600160a060020a0383161515610fb857600080fd5b600154600160a060020a0316331461208c57600080fd5b600160a060020a03811660009081526002602052604090205460ff16151561211957600160a060020a0381166000908152600260205260409020805460ff19166001908117909155805461ffff74010000000000000000000000000000000000000000808304821684019091160275ffff0000000000000000000000000000000000000000199091161790555b50565b600080600160a060020a038316151561213457600080fd5b50600354604080517f47c17bac000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015291516101009093049091169182916347c17bac9160248083019260209291908290030181600087803b1580156121a457600080fd5b505af11580156121b8573d6000803e3d6000fd5b505050506040513d60208110156121ce57600080fd5b50519392505050565b600c6020526000908152604090205463ffffffff1681565b600154600160a060020a031633148061221c57503360009081526002602052604090205460ff1615156001145b151561222757600080fd5b61211981613b4b565b600154600160a060020a031633148061225d57503360009081526002602052604090205460ff1615156001145b151561226857600080fd5b600f55565b600154600160a060020a031633148061229a57503360009081526002602052604090205460ff1615156001145b15156122a557600080fd5b6121198167ffffffffffffffff16613b93565b6000806122c3613ee1565b600080600360019054906101000a9004600160a060020a0316935083600160a060020a03166307202460876040518263ffffffff1660e060020a028152600401808267ffffffffffffffff1667ffffffffffffffff16815260200191505060e060405180830381600087803b15801561233b57600080fd5b505af115801561234f573d6000803e3d6000fd5b505050506040513d60e081101561236557600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880152929092169185019190915267ffffffffffffffff908116808552908716146123e55760009450612534565b86600160a060020a03168360400151600160a060020a031614151561240d5760009450612534565b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b505050506040513d60208110156124a257600080fd5b5051158015612531575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b15801561250357600080fd5b505af1158015612517573d6000803e3d6000fd5b505050506040513d602081101561252d57600080fd5b5051155b94505b5050505092915050565b6000612548613ee1565b60035460ff161561255857600080fd5b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b1580156125b857600080fd5b505af11580156125cc573d6000803e3d6000fd5b505050506040513d60e08110156125e257600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860152929092169183019190915267ffffffffffffffff90811680835290861614158061266e57506040810151600160a060020a03163314155b1561267857600080fd5b608081015160a08083015160c08401516040517f32666a3100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8a166004820190815263ffffffff80871660448401528085166064840152831660848301526024820194855260a48201899052600160a060020a038816956332666a31958c958c958c959394919390929060c4018787808284378201915050975050505050505050600060405180830381600087803b15801561273957600080fd5b505af115801561274d573d6000803e3d6000fd5b505050505050505050565b600154600160a060020a031681565b6000806000806000612777613f43565b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff8a1660048201529051610100909204600160a060020a031693508391639d29cac49160248082019260a0929091908290030181600087803b1580156127ea57600080fd5b505af11580156127fe573d6000803e3d6000fd5b505050506040513d60a081101561281457600080fd5b508051602080830151604080850151606080870151608097880151151597890188905263ffffffff90811691890182905292880182905293870183905293169094529299909850919650945092505050565b60098054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b600160a060020a03821615156128dc57600080fd5b336000818152600760209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b6000612954613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff861660048201529051610100909204600160a060020a03169350839163072024609160248082019260e0929091908290030181600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b505050506040513d60e08110156129de57600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08d015263ffffffff9081169a8c019a909a52908916908a015290871690880152600160a060020a031690860181905293169084015267ffffffffffffffff1682521515612a5257600080fd5b612a6083826040015161356c565b6040810151600160a060020a03163314612a7957600080fd5b600160a060020a0384161515612a8e57600080fd5b612a9d8160400151858561370e565b50505050565b600154600160a060020a0316331480612ad057503360009081526002602052604090205460ff1615156001145b1515612adb57600080fd5b600160a060020a03919091166000908152600e60205260409020805460ff1916911515919091179055565b600060016064825b8160ff168360ff161015612b6057600260ff848401160460ff81166000908152600c602052604090205490915063ffffffff9081169086161015612b5457809150612b5b565b8060010192505b612b0e565b50909392505050565b600154600160a060020a03163314612b8057600080fd5b600160a060020a03811660009081526002602052604090205460ff1615156001141561211957600160a060020a03166000908152600260205260409020805460ff191690556001805475ffff0000000000000000000000000000000000000000198116740100000000000000000000000000000000000000009182900461ffff9081166000190116909102179055565b61195a85858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843750613871945050505050565b600080612c57613f43565b60035460009081908190819060ff1615612c7057600080fd5b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff8d1660048201529051610100909204600160a060020a031697508791639d29cac49160248082019260a0929091908290030181600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d60a0811015612d0d57600080fd5b5080516020808301516040808501516060808701516080978801511515978d019790975263ffffffff968716908c0152908a015290880152168086521515612d5457600080fd5b60808501511515612d9e57336000908152600e602052604090205460ff161580612d94575063ffffffff8a166000908152600d602052604090205460ff16155b15612d9e57600080fd5b846020015193506000856060015163ffffffff161115612de8576010546060860151602087015161ffff9092169160001990910163ffffffff1602811515612de257fe5b04840193505b83600f5434011015612df957600080fd5b85600160a060020a031663fc4d20f58b8d8c8c6040518563ffffffff1660e060020a028152600401808563ffffffff1663ffffffff16815260200184600160a060020a0316600160a060020a03168152602001806020018281038252848482818152602001925080828437820191505095505050505050602060405180830381600087803b158015612e8a57600080fd5b505af1158015612e9e573d6000803e3d6000fd5b505050506040513d6020811015612eb457600080fd5b5051600b54909350612ed8908c9060001943019067ffffffffffffffff871661157a565b600b555060005b6006811015613033576040805160e060020a6362b21ad70281526002600482015263ffffffff8c166024820152604481018390529051600160a060020a038816916362b21ad79160648083019260209291908290030181600087803b158015612f4757600080fd5b505af1158015612f5b573d6000803e3d6000fd5b505050506040513d6020811015612f7157600080fd5b5051600b546020900601915085600160a060020a03166326bda739600385856040518463ffffffff1660e060020a02815260040180846004811115612fb257fe5b60ff1681526020018367ffffffffffffffff1667ffffffffffffffff1681526020018260ff1660ff1681526020019350505050602060405180830381600087803b158015612fff57600080fd5b505af1158015613013573d6000803e3d6000fd5b505050506040513d602081101561302957600080fd5b5050600101612edf565b60405167ffffffffffffffff841690600160a060020a038d1690600090600080516020614046833981519152908290a4505067ffffffffffffffff1698975050505050505050565b600f5481565b600154600160a060020a03163314806130ae57503360009081526002602052604090205460ff1615156001145b15156130b957600080fd5b6130c281613b4b565b8082600160a060020a031684600160a060020a031660008051602061404683398151915260405160405180910390a4505050565b6000818152600a602090815260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084526060939283018282801561318b5780601f106131605761010080835404028352916020019161318b565b820191906000526020600020905b81548152906001019060200180831161316e57829003601f168201915b50505050509050919050565b60008060008060008060006131aa613f24565b6003546101009004600160a060020a0316915060005b6006811015613274576040805160e060020a6362b21ad70281526003600482015267ffffffffffffffff8c166024820152604481018390529051600160a060020a038516916362b21ad79160648083019260209291908290030181600087803b15801561322c57600080fd5b505af1158015613240573d6000803e3d6000fd5b505050506040513d602081101561325657600080fd5b505160ff1682826006811061326757fe5b60200201526001016131c0565b508051602082015160408301516060840151608085015160a090950151939d929c50909a509850919650945092505050565b600681565b60008060006132b8613f43565b600354604080517f9d29cac400000000000000000000000000000000000000000000000000000000815263ffffffff881660048201529051610100909204600160a060020a031693508391639d29cac49160248082019260a0929091908290030181600087803b15801561332b57600080fd5b505af115801561333f573d6000803e3d6000fd5b505050506040513d60a081101561335557600080fd5b50805160208083015160408085015160608087015160809788015115159789019790975263ffffffff96871690880181905291870152918501819052929091168352909350600010156133d2576010546060820151602083015161ffff9092169160001990910163ffffffff16028115156133cc57fe5b04830192505b6080810151151561342957336000908152600e602052604090205460ff161515600114801561341b575063ffffffff85166000908152600d602052604090205460ff1615156001145b156134295760019350613431565b608081015193505b5050915091565b60105461ffff1681565b6000600160a060020a038316151561345957600080fd5b600160a060020a038216151561346e57600080fd5b50600160a060020a03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60035460ff1681565b600154600160a060020a031633146134bd57600080fd5b600160a060020a038116156121195760018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911617905550565b600554600160a060020a031681565b600160a060020a0381163314806135425750600160a060020a038116600090815260076020908152604080832033845290915290205460ff165b151561211957600080fd5b6000828152600a60209081526040909120825161176192840190613f71565b600480546005546040805160e060020a6335f097f302815267ffffffffffffffff87169481019490945251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b1580156135d157600080fd5b505af11580156135e5573d6000803e3d6000fd5b505050506040513d60208110156135fb57600080fd5b505115801561368857506040805160e260020a632a11e9c702815267ffffffffffffffff861660048201529051600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b15801561365a57600080fd5b505af115801561366e573d6000803e3d6000fd5b505050506040513d602081101561368457600080fd5b5051155b151561369357600080fd5b600160a060020a03831615156136a857600080fd5b600160a060020a0383163314806136d55750600084815260066020526040902054600160a060020a031633145b806137035750600160a060020a038316600090815260076020908152604080832033845290915290205460ff165b1515612a9d57600080fd5b600061371982613b4b565b50600354604080517f60c6ccb2000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015267ffffffffffffffff8516602483015291516101009093049091169182916360c6ccb291604480830192600092919082900301818387803b15801561379857600080fd5b505af11580156137ac573d6000803e3d6000fd5b5050604080517f9248019e000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015267ffffffffffffffff8716602483015291519185169350639248019e925060448082019260009290919082900301818387803b15801561382457600080fd5b505af1158015613838573d6000803e3d6000fd5b505050508183600160a060020a031685600160a060020a031660008051602061404683398151915260405160405180910390a450505050565b600061387b613ee1565b6003546040805160e560020a6239012302815267ffffffffffffffff871660048201529051610100909204600160a060020a03169350600091849163072024609160248083019260e092919082900301818787803b1580156138dc57600080fd5b505af11580156138f0573d6000803e3d6000fd5b505050506040513d60e081101561390657600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08e015263ffffffff9081169a8d019a909a52908916908b015290871690890152600160a060020a031690870181905293169085015267ffffffffffffffff168352151561397a57600080fd5b61398885836040015161356c565b86600160a060020a03168260400151600160a060020a03161415156139ac57600080fd5b600160a060020a03861615156139c157600080fd5b6139d08260400151878761370e565b6139e286600160a060020a0316613bda565b15613b42576040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a038a8116602485015260448401899052608060648501908152885160848601528851918b169463150b7a0294938d938c938c93909160a490910190602085019080838360005b83811015613a7a578181015183820152602001613a62565b50505050905090810190601f168015613aa75780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613ac957600080fd5b505af1158015613add573d6000803e3d6000fd5b505050506040513d6020811015613af357600080fd5b505190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981167f150b7a020000000000000000000000000000000000000000000000000000000014613b4257600080fd5b50505050505050565b600081815260066020526040902054600160a060020a031615612119576000908152600660205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055565b613b9c81613be2565b6000818152600a60205260409020546002600019610100600184161502019091160415612119576000818152600a6020526040812061211991613feb565b6000903b1190565b6000613bec613ee1565b600080613bf885613b4b565b6003546040805160e560020a6239012302815267ffffffffffffffff881660048201529051610100909204600160a060020a03169550859163072024609160248082019260e0929091908290030181600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b505050506040513d60e0811015613c8257600080fd5b508051602080830151604080850151606086015160808088015160a0808a015160c09a8b015160e08f015263ffffffff9081169a8e019a909a52908916908c0152908716908a0152600160a060020a031690880181905293169086015267ffffffffffffffff1684521515613cf657600080fd5b50506004805460055483516040805160e060020a6335f097f302815267ffffffffffffffff909216948201949094529251600160a060020a0392831693919092169183916335f097f39160248083019260209291908290030181600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b505050506040513d6020811015613d8b57600080fd5b505180613e17575082516040805160e260020a632a11e9c702815267ffffffffffffffff909216600483015251600160a060020a0383169163a847a71c9160248083019260209291908290030181600087803b158015613dea57600080fd5b505af1158015613dfe573d6000803e3d6000fd5b505050506040513d6020811015613e1457600080fd5b50515b15613e2157600080fd5b60408084015181517f60c6ccb2000000000000000000000000000000000000000000000000000000008152600160a060020a03918216600482015267ffffffffffffffff881660248201529151908616916360c6ccb291604480830192600092919082900301818387803b158015613e9857600080fd5b505af1158015613eac573d6000803e3d6000fd5b5050506040808501519051879250600091600160a060020a031690600080516020614046833981519152908390a45050505050565b60408051610100810182526000808252602082018190529181018290526060808201526080810182905260a0810182905260c0810182905260e081019190915290565b60c0604051908101604052806006906020820280388339509192915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613fb257805160ff1916838001178555613fdf565b82800160010185558215613fdf579182015b82811115613fdf578251825591602001919060010190613fc4565b506117f892915061402b565b50805460018160011615610100020316600290046000825580601f106140115750612119565b601f01602090049060005260206000209081019061211991905b611ec291905b808211156117f857600081556001016140315600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582089a567cea9b3bb8422cf1b9a2493b8775bc1007b0c9f0a20c9626c790722f9b60029
Swarm Source
bzzr://89a567cea9b3bb8422cf1b9a2493b8775bc1007b0c9f0a20c9626c790722f9b6
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.