Overview
ETH Balance
0.051632918192918263 ETH
Eth Value
$167.36 (@ $3,241.33/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 495 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem Token | 7468951 | 2133 days ago | IN | 0 ETH | 0.00010503 | ||||
Redeem Token | 7468874 | 2133 days ago | IN | 0 ETH | 0.00052517 | ||||
Redeem Token | 7468718 | 2133 days ago | IN | 0 ETH | 0.00010503 | ||||
Redeem Token | 7468694 | 2133 days ago | IN | 0 ETH | 0.0001049 | ||||
Redeem Token | 7468042 | 2133 days ago | IN | 0 ETH | 0.00010503 | ||||
Withdraw | 7463940 | 2134 days ago | IN | 0 ETH | 0.0002299 | ||||
Redeem Token | 6105350 | 2368 days ago | IN | 0 ETH | 0.00026258 | ||||
Redeem Token | 6105337 | 2368 days ago | IN | 0 ETH | 0.00011917 | ||||
Redeem Token | 6105278 | 2368 days ago | IN | 0 ETH | 0.00052517 | ||||
Resolve Lottery ... | 5998701 | 2386 days ago | IN | 0 ETH | 0.00054576 | ||||
Resolve Lottery ... | 5998692 | 2386 days ago | IN | 0 ETH | 0.00054576 | ||||
Buy Token | 5972622 | 2391 days ago | IN | 0.115 ETH | 0.00008447 | ||||
Buy Token | 5972605 | 2391 days ago | IN | 0.1 ETH | 0.00008447 | ||||
Add Lottery | 5948190 | 2395 days ago | IN | 0 ETH | 0.00122696 | ||||
Add Lottery | 5948174 | 2395 days ago | IN | 0 ETH | 0.00122766 | ||||
Add Lottery | 5948157 | 2395 days ago | IN | 0 ETH | 0.00122696 | ||||
Add Lottery | 5948146 | 2395 days ago | IN | 0 ETH | 0.00122696 | ||||
Add Lottery | 5948137 | 2395 days ago | IN | 0 ETH | 0.00122696 | ||||
Add Lottery | 5948078 | 2395 days ago | IN | 0 ETH | 0.00122696 | ||||
Resolve Lottery ... | 5947933 | 2395 days ago | IN | 0 ETH | 0.00076932 | ||||
Redeem Token | 5942171 | 2396 days ago | IN | 0 ETH | 0.00026258 | ||||
Resolve Lottery ... | 5942034 | 2396 days ago | IN | 0 ETH | 0.00076932 | ||||
Redeem Token | 5930747 | 2398 days ago | IN | 0 ETH | 0.00042013 | ||||
Redeem Token | 5930669 | 2398 days ago | IN | 0 ETH | 0.00026258 | ||||
Redeem Token | 5930419 | 2398 days ago | IN | 0 ETH | 0.00026258 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
7468951 | 2133 days ago | 0.080784 ETH | ||||
7468951 | 2133 days ago | 0.000816 ETH | ||||
7468874 | 2133 days ago | 0.10692 ETH | ||||
7468874 | 2133 days ago | 0.00108 ETH | ||||
7468718 | 2133 days ago | 0.022176 ETH | ||||
7468718 | 2133 days ago | 0.000224 ETH | ||||
7468694 | 2133 days ago | 0.076032 ETH | ||||
7468694 | 2133 days ago | 0.000768 ETH | ||||
7468042 | 2133 days ago | 0.066528 ETH | ||||
7468042 | 2133 days ago | 0.000672 ETH | ||||
7463940 | 2134 days ago | 0.2972 ETH | ||||
6105350 | 2368 days ago | 0.018216 ETH | ||||
6105350 | 2368 days ago | 0.000184 ETH | ||||
6105278 | 2368 days ago | 0.01976832 ETH | ||||
6105278 | 2368 days ago | 0.00019968 ETH | ||||
5942171 | 2396 days ago | 0.104544 ETH | ||||
5942171 | 2396 days ago | 0.001056 ETH | ||||
5930747 | 2398 days ago | 0.11088 ETH | ||||
5930747 | 2398 days ago | 0.00112 ETH | ||||
5930669 | 2398 days ago | 0.080784 ETH | ||||
5930669 | 2398 days ago | 0.000816 ETH | ||||
5930419 | 2398 days ago | 0.076032 ETH | ||||
5930419 | 2398 days ago | 0.000768 ETH | ||||
5930417 | 2398 days ago | 0.09504 ETH | ||||
5930417 | 2398 days ago | 0.00096 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TTGOracle
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-06-08 */ pragma solidity ^0.4.18; /* VERSION DATE: 23/03/2018 CREATED BY: CRYPTO SPORTZ UNJOY YOUR TEAM AND SPORTS AND EMAIL US IF YOU HAVE ANY QUESTIONS */ library SafeMathLib { function times(uint a, uint b) internal pure returns (uint) { uint c = a * b; require(a == 0 || c / a == b); return c; } function minus(uint a, uint b) internal pure returns (uint) { require(b <= a); return a - b; } function plus(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c>=a); return c; } function mul(uint a, uint b) internal pure returns (uint) { uint c = a * b; require(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { require(b > 0); uint c = a / b; require(a == b * c + a % b); return c; } function sub(uint a, uint b) internal pure returns (uint) { require(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c>=a && c>=b); return c; } } contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) external payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) external payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) public payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) external payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) public payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) external payable returns (bytes32 _id); function getPrice(string _datasource) public returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) public returns (uint _dsprice); function setProofType(byte _proofType) external; function setCustomGasPrice(uint _gasPrice) external; function randomDS_getSessionPubKeyHash() external constant returns(bytes32); } contract OraclizeAddrResolverI { function getAddress() public returns (address _addr); } contract usingOraclize { uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); if(address(oraclize) != OAR.getAddress()) oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool) { return oraclize_setNetwork(); networkID; // silence the warning and remain backwards compatible } function oraclize_setNetwork() internal returns(bool) { if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); return true; } return false; } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } } contract ERC721Abstract { function implementsERC721() public pure returns (bool); function balanceOf(address _owner) public view returns (uint256 balance); function ownerOf(uint256 _tokenId) public view returns (address owner); function approve(address _to, uint256 _tokenId) public; function transferFrom(address _from, address _to, uint256 _tokenId) public; function transfer(address _to, uint256 _tokenId) public; event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); // Optional // function totalSupply() public view returns (uint256 total); // function name() public view returns (string name); // function symbol() public view returns (string symbol); // function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 tokenId); // function tokenMetadata(uint256 _tokenId) public view returns (string infoUrl); } contract ERC721 is ERC721Abstract { string constant public name = "TotalGameOracle"; string constant public symbol = "TTGO"; uint256 public totalSupply; struct Token { uint256 price; // value of stake uint256 option; // [payout]96[idLottery]64[combination]32[dateBuy]0 } mapping (uint256 => Token) tokens; // A mapping from tokens IDs to the address that owns them. All tokens have some valid owner address mapping (uint256 => address) public tokenIndexToOwner; // A mapping from owner address to count of tokens that address owns. mapping (address => uint256) ownershipTokenCount; // A mapping from tokenIDs to an address that has been approved to call transferFrom(). // Each token can only have one approved address for transfer at any time. // A zero value means no approval is outstanding. mapping (uint256 => address) public tokenIndexToApproved; function implementsERC721() public pure returns (bool) { return true; } function balanceOf(address _owner) public view returns (uint256 count) { return ownershipTokenCount[_owner]; } function ownerOf(uint256 _tokenId) public view returns (address owner) { owner = tokenIndexToOwner[_tokenId]; require(owner != address(0)); } // Marks an address as being approved for transferFrom(), overwriting any previous approval. // Setting _approved to address(0) clears all transfer approval. function _approve(uint256 _tokenId, address _approved) internal { tokenIndexToApproved[_tokenId] = _approved; } // Checks if a given address currently has transferApproval for a particular token. // param _claimant the address we are confirming token is approved for. // param _tokenId token id, only valid when > 0 function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) { return tokenIndexToApproved[_tokenId] == _claimant; } function approve( address _to, uint256 _tokenId ) public { // Only an owner can grant transfer approval. require(_owns(msg.sender, _tokenId)); // Register the approval (replacing any previous approval). _approve(_tokenId, _to); // Emit approval event. Approval(msg.sender, _to, _tokenId); } function transferFrom( address _from, address _to, uint256 _tokenId ) public { // Check for approval and valid ownership require(_approvedFor(msg.sender, _tokenId)); require(_owns(_from, _tokenId)); // Reassign ownership (also clears pending approvals and emits Transfer event). _transfer(_from, _to, _tokenId); } function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) { return tokenIndexToOwner[_tokenId] == _claimant; } function _transfer(address _from, address _to, uint256 _tokenId) internal { ownershipTokenCount[_to]++; tokenIndexToOwner[_tokenId] = _to; if (_from != address(0)) { Transfer(_from, _to, _tokenId); ownershipTokenCount[_from]--; // clear any previously approved ownership exchange delete tokenIndexToApproved[_tokenId]; } } function transfer(address _to, uint256 _tokenId) public { require(_to != address(0)); require(_owns(msg.sender, _tokenId)); _transfer(msg.sender, _to, _tokenId); } } contract Owned { address private candidate; address public owner; mapping(address => bool) public admins; function Owned() public { owner = msg.sender; } function changeOwner(address newOwner) public { require(msg.sender == owner); candidate = newOwner; } function confirmOwner() public { require(candidate == msg.sender); // run by name=candidate owner = candidate; } function addAdmin(address addr) external { require(msg.sender == owner); admins[addr] = true; } function removeAdmin(address addr) external { require(msg.sender == owner); admins[addr] = false; } } contract Functional { // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal pure returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i<bresult.length; i++){ if ((bresult[i] >= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal pure returns (string) { if (i == 0) return "0"; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function strConcat(string _a, string _b, string _c) internal pure returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); string memory abc; uint k = 0; uint i; bytes memory babc; if (_ba.length==0) { abc = new string(_bc.length); babc = bytes(abc); } else { abc = new string(_ba.length + _bb.length+ _bc.length); babc = bytes(abc); for (i = 0; i < _ba.length; i++) babc[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babc[k++] = _bb[i]; } for (i = 0; i < _bc.length; i++) babc[k++] = _bc[i]; return string(babc); } function timenow() public view returns(uint32) { return uint32(block.timestamp); } } contract TTGOracle is ERC721, usingOraclize, Functional, Owned { using SafeMathLib for uint32; using SafeMathLib for uint256; uint256 public feeLottery; enum Status { NOTFOUND, //0 game not created PLAYING, //1 buying tickets PROCESSING, //2 waiting for result PAYING, //3 redeeming CANCELING //4 canceling the game } struct Game { string nameLottery; uint32 countCombinations; uint32 gameID; uint32 teamAID; uint32 teamBID; uint32 dateStopBuy; uint32 minStake; // per finney = 0.001E uint32 winCombination; uint256 betsSumIn; // amount bets uint256 feeValue; // amount fee Status status; // status of game bool isFreezing; } Game[] private game; ITTGCoin private ttgCoin; IItemToken private itemToken; uint32 private userAirDropRate = 1000; uint32 private ownerAirDropRate = 100; struct Stake { uint256 sum; // amount bets uint32 count; // count bets } mapping(uint32 => mapping (uint32 => Stake)) public betsAll; // ID-lottery => combination => Stake mapping(bytes32 => uint32) private queryRes; // ID-query => ID-lottery uint256 public ORACLIZE_GAS_LIMIT = 2000000; uint256 public ORACLIZE_GASPRICE_GWEY = 40; // 40Gwey event LogEvent(string _event, string nameLottery, uint256 value); event LogToken(string _event, address user, uint32 idLottery, uint32 idToken, uint32 combination, uint256 amount); modifier onlyOwner { require(msg.sender == owner); _; } modifier onlyAdmin { require(msg.sender == owner || admins[msg.sender]); _; } modifier onlyOraclize { require (msg.sender == oraclize_cbAddress()); _; } function setTTGCoin (address _ttgCoin) onlyOwner() public { ttgCoin = ITTGCoin(_ttgCoin); } function setItemToken (address _itemToken) onlyOwner() public { itemToken = IItemToken(_itemToken); } function getLotteryByID(uint32 _id) public view returns ( string nameLottery, uint32 countCombinations, uint32 dateStopBuy, uint32 gameID, uint32 teamAID, uint32 teamBID, uint32 minStake, uint32 winCombination, uint32 betsCount, uint256 betsSumIn, uint256 feeValue, Status status, bool isFreezing ){ Game storage gm = game[_id]; nameLottery = gm.nameLottery; countCombinations = gm.countCombinations; dateStopBuy = gm.dateStopBuy; gameID = gm.gameID; teamAID = gm.teamAID; teamBID = gm.teamBID; minStake = gm.minStake; winCombination = gm.winCombination; betsCount = getCountTokensByLottery(_id); betsSumIn = gm.betsSumIn; if (betsSumIn==0) betsSumIn = getSumInByLottery(_id); feeValue = gm.feeValue; status = gm.status; if ( status == Status.PLAYING && timenow() > dateStopBuy ) status = Status.PROCESSING; isFreezing = gm.isFreezing; } function getCountTokensByLottery(uint32 idLottery) internal view returns (uint32) { Game storage curGame = game[idLottery]; uint32 count = 0; for(uint32 i=1;i<=curGame.countCombinations;i++) count += betsAll[idLottery][i].count; return count; } function getSumInByLottery(uint32 idLottery) internal view returns (uint256) { Game storage curGame = game[idLottery]; uint256 sum = 0; for(uint32 i=1;i<=curGame.countCombinations;i++) sum += betsAll[idLottery][i].sum; return sum; } function getTokenByID(uint256 _id) public view returns ( uint256 price, uint256 payment, uint32 combination, uint32 dateBuy, uint32 idLottery, address ownerToken, bool payout, uint256 sameComboAmount, uint256 tokenID ){ Token storage tkn = tokens[_id]; price = tkn.price; uint256 packed = tkn.option; payout = uint8((packed >> (12*8)) & 0xFF)==1?true:false; idLottery = uint32((packed >> (8*8)) & 0xFFFFFFFF); combination = uint32((packed >> (4*8)) & 0xFFFFFFFF); dateBuy = uint32(packed & 0xFFFFFFFF); sameComboAmount = betsAll[idLottery][combination].sum; tokenID = _id; payment = 0; Game storage curGame = game[idLottery]; uint256 betsSumIn = curGame.betsSumIn; if (betsSumIn==0) betsSumIn = getSumInByLottery(idLottery); if (curGame.winCombination==combination) payment = betsSumIn * tkn.price / betsAll[idLottery][ curGame.winCombination ].sum; if (curGame.status == Status.CANCELING) payment = tkn.price; ownerToken = tokenIndexToOwner[_id]; } function getUserTokens(address user, uint32 count) public view returns ( string res ) { res=""; require(user!=0x0); uint32 findCount=0; for (uint256 i = totalSupply-1; i >= 0; i--) { if(i>totalSupply) break; if (user == tokenIndexToOwner[i]) { res = strConcat( res, ",", uint2str(i) ); findCount++; if (count!=0 && findCount>=count) break; } } } function getUserTokensByMatch(address user, uint32 matchID) public view returns ( string res ) { res=""; require(user!=0x0); uint32 findCount=0; for (uint256 i = totalSupply-1; i >= 0; i--) { if(i>totalSupply) break; if (user == tokenIndexToOwner[i]) { Token storage tkn = tokens[i]; uint256 packed = tkn.option; uint32 idStored = uint32((packed >> (8*8)) & 0xFFFFFFFF); if(idStored == matchID){ res = strConcat( res, ",", uint2str(i) ); findCount++; } } } } function getStatLotteries() public view returns ( uint32 countAll, uint32 countPlaying, uint32 countProcessing, string listPlaying, string listProcessing ){ countAll = uint32(game.length); countPlaying = 0; countProcessing = 0; listPlaying=""; listProcessing=""; uint32 curtime = timenow(); for (uint32 i = 0; i < countAll; i++) { if (game[i].status!=Status.PLAYING) continue; if (curtime < game[i].dateStopBuy) { countPlaying++; listPlaying = strConcat( listPlaying, ",", uint2str(i) ); } if (curtime >= game[i].dateStopBuy) { countProcessing++; listProcessing = strConcat( listProcessing, ",", uint2str(i) ); } } } function TTGOracle() public { } function setOraclizeGasPrice(uint256 priceGwey, uint256 limit) onlyAdmin public { ORACLIZE_GASPRICE_GWEY = priceGwey; ORACLIZE_GAS_LIMIT = limit; oraclize_setCustomGasPrice( uint256(ORACLIZE_GASPRICE_GWEY) * 10**9 ); } function freezeLottery(uint32 idLottery, bool freeze) public onlyAdmin { Game storage curGame = game[idLottery]; require( curGame.isFreezing != freeze ); curGame.isFreezing = freeze; } function addLottery( string _nameLottery, uint32 _dateStopBuy, uint32 _countCombinations, uint32 gameID, uint32 teamAID, uint32 teamBID, uint32 _minStakeFinney ) onlyAdmin public { require( bytes(_nameLottery).length > 2 ); require( _countCombinations > 1 ); require( _minStakeFinney > 0 ); require( _dateStopBuy > timenow() ); Game memory _game; _game.nameLottery = _nameLottery; _game.countCombinations = _countCombinations; _game.dateStopBuy = _dateStopBuy; _game.gameID = gameID; _game.minStake = _minStakeFinney; _game.status = Status.PLAYING; _game.teamAID = teamAID; _game.teamBID = teamBID; uint256 newGameId = game.push(_game) - 1; LogEvent( "AddGame", _nameLottery, newGameId ); } function () payable public { require (msg.value == 0x0); } function setUserAirDropRate(uint32 rate) onlyAdmin public{ userAirDropRate = rate; } function setOwnerAirDropRate(uint32 rate) onlyAdmin public{ ownerAirDropRate = rate; } function buyToken(uint32 idLottery, uint32 teamID, uint32 combination, address captainAddress) payable public { Game storage curGame = game[idLottery]; require( curGame.status == Status.PLAYING ); require( timenow() < curGame.dateStopBuy ); require( combination > 0 && combination <= curGame.countCombinations ); require( captainAddress != msg.sender ); require( curGame.isFreezing == false ); // check money for stake require( msg.value >= curGame.minStake * 1 finney ); uint256 userStake = msg.value; uint256 airDropAmountUser = userStake.mul(userAirDropRate); if(airDropAmountUser > 1000*10**18) airDropAmountUser = 1000*10**18; ttgCoin.airDrop(this, msg.sender, airDropAmountUser); address teamOwner = itemToken.ownerOf(teamID); if(teamOwner!=0x0){ uint256 airDropAmountOwner = userStake.mul(ownerAirDropRate); if(airDropAmountOwner > 1000*10**18) airDropAmountOwner = 1000*10**18; ttgCoin.airDrop(this, teamOwner, airDropAmountOwner); //for team owner } uint256 feeValue = userStake.mul(4).div(100); // 4% fee for contract userStake = userStake.minus(feeValue); if (captainAddress!=0x0) { //uint256 captainValue = feeValue.mul(20).div(100); // bonus for captain = 1% // feeValue = feeValue - captainValue; // require(feeValue + captainValue + userStake == msg.value); // captainAddress.transfer(captainValue); ttgCoin.airDrop(this, captainAddress, airDropAmountOwner); //team owner } curGame.feeValue = curGame.feeValue.add(feeValue); betsAll[idLottery][combination].sum += userStake; betsAll[idLottery][combination].count++; uint128 packed; packed = ( uint128(idLottery) << 64 ) + ( uint128(combination) << 32 ) + uint128(block.timestamp); Token memory _token = Token({ price: userStake, option : packed }); uint256 newTokenId = totalSupply++; tokens[newTokenId] = _token; _transfer(0, msg.sender, newTokenId); LogToken( "Buy", msg.sender, idLottery, uint32(newTokenId), combination, userStake); } // take win money or money for canceling lottery function redeemToken(uint256 _tokenId, uint32 teamID) public { Token storage tkn = tokens[_tokenId]; uint256 packed = tkn.option; bool payout = uint8((packed >> (96)) & 0xFF)==1?true:false; uint32 idLottery = uint32((packed >> (64)) & 0xFFFFFFFF); uint32 combination = uint32((packed >> (32)) & 0xFFFFFFFF); Game storage curGame = game[idLottery]; require( curGame.status == Status.PAYING || curGame.status == Status.CANCELING); require( msg.sender == tokenIndexToOwner[_tokenId] ); // only onwer`s token require( payout == false ); // has not paid require( combination == curGame.winCombination || curGame.status == Status.CANCELING ); uint256 sumPayment = 0; if ( curGame.status == Status.CANCELING ) sumPayment = tkn.price; if ( curGame.status == Status.PAYING ){ sumPayment = curGame.betsSumIn * tkn.price / betsAll[idLottery][curGame.winCombination].sum; address teamOwner = itemToken.ownerOf(teamID); if(teamOwner!=0x0){ teamOwner.transfer(sumPayment.div(100)); sumPayment = sumPayment.mul(99).div(100); } } payout = true; packed += uint128(payout?1:0) << 96; tkn.option = packed; msg.sender.transfer(sumPayment); LogToken( "Redeem", msg.sender, idLottery, uint32(_tokenId), combination, sumPayment); } function cancelLottery(uint32 idLottery) public { Game storage curGame = game[idLottery]; require( curGame.status == Status.PLAYING ); // only owner/admin or anybody after 7 days require( msg.sender == owner || admins[msg.sender] || timenow() > curGame.dateStopBuy.add(7 * 24*60*60) ); curGame.status = Status.CANCELING; LogEvent( "CancelLottery", curGame.nameLottery, idLottery ); takeFee(idLottery); } function __callback(bytes32 queryId, string _result) onlyOraclize public { uint32 idLottery = queryRes[queryId]; require( idLottery != 0 ); Game storage curGame = game[idLottery]; require( curGame.status == Status.PLAYING ); require( timenow() > curGame.dateStopBuy ); uint32 tmpCombination = uint32(parseInt(_result,0)); string memory error = "callback"; if ( tmpCombination==0 ) error = "callback_result_not_found"; if ( tmpCombination > curGame.countCombinations ) { tmpCombination = 0; error = "callback_result_limit"; } LogEvent( error, curGame.nameLottery, tmpCombination ); if (tmpCombination!=0) { curGame.winCombination = tmpCombination; checkWinNobody(idLottery); } } function resolveLotteryByOraclize(uint32 idLottery, uint32 delaySec) onlyAdmin public payable { Game storage curGame = game[idLottery]; uint oraclizeFee = oraclize_getPrice( "URL", ORACLIZE_GAS_LIMIT ); require(msg.value + curGame.feeValue > oraclizeFee); // if contract has not enought money to do query curGame.feeValue = curGame.feeValue + msg.value - oraclizeFee; LogEvent( "ResolveLotteryByOraclize", curGame.nameLottery, delaySec ); string memory tmpQuery; tmpQuery = strConcat( "json(https://totalgame.io/api/v2/game/", uint2str(idLottery), "/result.json).result" ); uint32 delay; if ( timenow() < curGame.dateStopBuy ) delay = curGame.dateStopBuy - timenow() + delaySec; //TODO:need to convert to safe math else delay = delaySec; bytes32 queryId = oraclize_query(delay, "URL", tmpQuery, ORACLIZE_GAS_LIMIT); queryRes[queryId] = idLottery; } function resolveLotteryByHand(uint32 idLottery, uint32 combination) onlyAdmin public { Game storage curGame = game[idLottery]; require( curGame.status == Status.PLAYING ); require( combination <= curGame.countCombinations ); require( combination != 0 ); //require( timenow() > curGame.dateStopBuy + 2*60*60 ); //TODO: remove comment curGame.winCombination = combination; LogEvent( "ResolveLotteryByHand", curGame.nameLottery, curGame.winCombination ); checkWinNobody(idLottery); } function checkWinNobody(uint32 idLottery) internal { Game storage curGame = game[idLottery]; curGame.status = Status.PAYING; curGame.betsSumIn = getSumInByLottery(idLottery); // nobody win = send all to feeLottery if ( betsAll[idLottery][curGame.winCombination].count == 0 ) { if (curGame.betsSumIn+curGame.feeValue!=0) feeLottery = feeLottery.add(curGame.betsSumIn).add(curGame.feeValue); LogEvent( "NOBODYWIN", curGame.nameLottery, curGame.betsSumIn+curGame.feeValue ); } else takeFee(idLottery); } function takeFee(uint32 idLottery) internal { Game storage curGame = game[idLottery]; // take fee if ( curGame.feeValue > 0 ) { feeLottery = feeLottery + curGame.feeValue; LogEvent( "TakeFee", curGame.nameLottery, curGame.feeValue ); } } function withdraw() onlyOwner public { require( feeLottery > 0 ); uint256 tmpFeeLottery = feeLottery; feeLottery = 0; owner.transfer(tmpFeeLottery); LogEvent( "WITHDRAW", "", tmpFeeLottery); } } interface ITTGCoin { function airDrop(address transmitter, address receiver, uint amount) public returns (uint actual); } interface IItemToken { function ownerOf (uint256 _itemId) public view returns (address _owner); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getTokenByID","outputs":[{"name":"price","type":"uint256"},{"name":"payment","type":"uint256"},{"name":"combination","type":"uint32"},{"name":"dateBuy","type":"uint32"},{"name":"idLottery","type":"uint32"},{"name":"ownerToken","type":"address"},{"name":"payout","type":"bool"},{"name":"sameComboAmount","type":"uint256"},{"name":"tokenID","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"}],"name":"cancelLottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"name":"betsAll","outputs":[{"name":"sum","type":"uint256"},{"name":"count","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokenIndexToOwner","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":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"queryId","type":"bytes32"},{"name":"_result","type":"string"}],"name":"__callback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint32"}],"name":"setUserAirDropRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timenow","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"priceGwey","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"setOraclizeGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ORACLIZE_GAS_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeLottery","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"freeze","type":"bool"}],"name":"freezeLottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_ttgCoin","type":"address"}],"name":"setTTGCoin","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":"addr","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"combination","type":"uint32"}],"name":"resolveLotteryByHand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"delaySec","type":"uint32"}],"name":"resolveLotteryByOraclize","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint32"}],"name":"setOwnerAirDropRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"teamID","type":"uint32"}],"name":"redeemToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nameLottery","type":"string"},{"name":"_dateStopBuy","type":"uint32"},{"name":"_countCombinations","type":"uint32"},{"name":"gameID","type":"uint32"},{"name":"teamAID","type":"uint32"},{"name":"teamBID","type":"uint32"},{"name":"_minStakeFinney","type":"uint32"}],"name":"addLottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"count","type":"uint32"}],"name":"getUserTokens","outputs":[{"name":"res","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"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":"","type":"uint256"}],"name":"tokenIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"_itemToken","type":"address"}],"name":"setItemToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"matchID","type":"uint32"}],"name":"getUserTokensByMatch","outputs":[{"name":"res","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"confirmOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint32"}],"name":"getLotteryByID","outputs":[{"name":"nameLottery","type":"string"},{"name":"countCombinations","type":"uint32"},{"name":"dateStopBuy","type":"uint32"},{"name":"gameID","type":"uint32"},{"name":"teamAID","type":"uint32"},{"name":"teamBID","type":"uint32"},{"name":"minStake","type":"uint32"},{"name":"winCombination","type":"uint32"},{"name":"betsCount","type":"uint32"},{"name":"betsSumIn","type":"uint256"},{"name":"feeValue","type":"uint256"},{"name":"status","type":"uint8"},{"name":"isFreezing","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idLottery","type":"uint32"},{"name":"teamID","type":"uint32"},{"name":"combination","type":"uint32"},{"name":"captainAddress","type":"address"}],"name":"buyToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"ORACLIZE_GASPRICE_GWEY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStatLotteries","outputs":[{"name":"countAll","type":"uint32"},{"name":"countPlaying","type":"uint32"},{"name":"countProcessing","type":"uint32"},{"name":"listPlaying","type":"string"},{"name":"listProcessing","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_event","type":"string"},{"indexed":false,"name":"nameLottery","type":"string"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_event","type":"string"},{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"idLottery","type":"uint32"},{"indexed":false,"name":"idToken","type":"uint32"},{"indexed":false,"name":"combination","type":"uint32"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogToken","type":"event"},{"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"}]
Contract Creation Code
6080604052600d805460a060020a63ffffffff0219167503e800000000000000000000000000000000000000001760c060020a63ffffffff0219167864000000000000000000000000000000000000000000000000179055621e8480601055602860115534801561006f57600080fd5b5060088054600160a060020a031916331790556144fc806100916000396000f3006080604052600436106101df5763ffffffff60e060020a60003504166306fdde0381146101ec578063087205f014610276578063095ea7b3146102ea5780631051db341461030e57806311ac20c0146103375780631209a849146103555780631785f53c1461039757806318160ddd146103b85780631d36e06c146103df57806323b872dd1461041357806327dc297e1461043d5780632ece07c31461049b5780633ccfd60b146104b95780633fae1928146104ce57806340adf94e146104fc578063429b62e5146105175780634eb8ffb4146105385780635387a2331461054d57806356f99fcb146105625780636336ac19146105855780636352211e146105a657806370480275146105be57806370a08231146105df57806372b81b1c1461060057806373f1e6d7146106245780637461dbff1461063b57806377a9e15214610659578063874d73a71461067a5780638cc57368146107015780638da5cb5b1461072b57806395d89b4114610740578063a6f9dae114610755578063a8bd9c3214610776578063a9059cbb1461078e578063ac0496e1146107b2578063aec651fb146107d3578063bd9b6d86146107fd578063be60988e14610812578063c0e1e2721461092c578063d03e102114610955578063e4e663a91461096a575b34156101ea57600080fd5b005b3480156101f857600080fd5b50610201610a96565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028257600080fd5b5061028e600435610acd565b60408051998a5260208a019890985263ffffffff968716898901529486166060890152929094166080870152600160a060020a031660a086015291151560c085015260e084019190915261010083015251908190036101200190f35b3480156102f657600080fd5b506101ea600160a060020a0360043516602435610c7e565b34801561031a57600080fd5b50610323610cd9565b604080519115158252519081900360200190f35b34801561034357600080fd5b506101ea63ffffffff60043516610cdf565b34801561036157600080fd5b5061037963ffffffff60043581169060243516610e92565b6040805192835263ffffffff90911660208301528051918290030190f35b3480156103a357600080fd5b506101ea600160a060020a0360043516610ebc565b3480156103c457600080fd5b506103cd610ef4565b60408051918252519081900360200190f35b3480156103eb57600080fd5b506103f7600435610efa565b60408051600160a060020a039092168252519081900360200190f35b34801561041f57600080fd5b506101ea600160a060020a0360043581169060243516604435610f15565b34801561044957600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101ea958335953695604494919390910191908190840183828082843750949750610f4f9650505050505050565b3480156104a757600080fd5b506101ea63ffffffff60043516611240565b3480156104c557600080fd5b506101ea6112bb565b3480156104da57600080fd5b506104e3611392565b6040805163ffffffff9092168252519081900360200190f35b34801561050857600080fd5b506101ea600435602435611396565b34801561052357600080fd5b50610323600160a060020a03600435166113e2565b34801561054457600080fd5b506103cd6113f7565b34801561055957600080fd5b506103cd6113fd565b34801561056e57600080fd5b506101ea63ffffffff600435166024351515611403565b34801561059157600080fd5b506101ea600160a060020a036004351661149d565b3480156105b257600080fd5b506103f76004356114d6565b3480156105ca57600080fd5b506101ea600160a060020a03600435166114ff565b3480156105eb57600080fd5b506103cd600160a060020a036004351661153a565b34801561060c57600080fd5b506101ea63ffffffff60043581169060243516611555565b6101ea63ffffffff60043581169060243516611727565b34801561064757600080fd5b506101ea63ffffffff60043516611a40565b34801561066557600080fd5b506101ea60043563ffffffff60243516611aae565b34801561068657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101ea9436949293602493928401919081908401838280828437509497505063ffffffff853581169650602086013581169560408101358216955060608101358216945060808101358216935060a00135169050611e57565b34801561070d57600080fd5b50610201600160a060020a036004351663ffffffff602435166121ed565b34801561073757600080fd5b506103f76122ca565b34801561074c57600080fd5b506102016122d9565b34801561076157600080fd5b506101ea600160a060020a0360043516612310565b34801561078257600080fd5b506103f7600435612349565b34801561079a57600080fd5b506101ea600160a060020a0360043516602435612364565b3480156107be57600080fd5b506101ea600160a060020a0360043516612399565b3480156107df57600080fd5b50610201600160a060020a036004351663ffffffff602435166123d2565b34801561080957600080fd5b506101ea6124c0565b34801561081e57600080fd5b5061083063ffffffff600435166124fb565b6040805163ffffffff808f1660208301528d8116928201929092528b821660608201528a8216608082015289821660a082015288821660c082015287821660e08201529086166101008201526101208101859052610140810184905280610160810184600481111561089e57fe5b60ff1681526020018315151515815260200182810382528f818151815260200191508051906020019080838360005b838110156108e55781810151838201526020016108cd565b50505050905090810190601f1680156109125780820380516001836020036101000a031916815260200191505b509e50505050505050505050505050505060405180910390f35b6101ea63ffffffff60043581169060243581169060443516600160a060020a03606435166126fd565b34801561096157600080fd5b506103cd612d16565b34801561097657600080fd5b5061097f612d1c565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156109f65781810151838201526020016109de565b50505050905090810190601f168015610a235780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610a56578181015183820152602001610a3e565b50505050905090810190601f168015610a835780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b60408051808201909152600f81527f546f74616c47616d654f7261636c650000000000000000000000000000000000602082015281565b60008181526001602081905260408220805481830154909392839283928392839283928392839291908390819060ff6c0100000000000000000000000085041614610b19576000610b1c565b60015b96506040839060020a900463ffffffff1698506020839060020a900463ffffffff169a508263ffffffff169950600e60008a63ffffffff1663ffffffff16815260200190815260200160002060008c63ffffffff1663ffffffff1681526020019081526020016000206000015495508d945060009b50600b8963ffffffff16815481101515610ba757fe5b90600052602060002090600502019150816002015490508060001415610bd357610bd089612ea4565b90505b600182015463ffffffff8c811660c060020a909204161415610c2f5763ffffffff808a166000908152600e60209081526040808320600187015460c060020a90049094168352929052205484548202811515610c2b57fe5b049b505b60048281015460ff1681811115610c4257fe5b1415610c4d5783549b505b50505060009a8b5250600260205260409099205497999698959794969395600160a060020a03909516949193909250565b610c883382612f25565b1515610c9357600080fd5b610c9d8183612f45565b6040518190600160a060020a0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590600090a45050565b60015b90565b6000600b8263ffffffff16815481101515610cf657fe5b600091825260209091206005909102019050600160048083015460ff1690811115610d1d57fe5b14610d2757600080fd5b600854600160a060020a0316331480610d4f57503360009081526009602052604090205460ff165b80610d8957506001810154610d799063ffffffff608060020a90910481169062093a8090612f7316565b610d81611392565b63ffffffff16115b1515610d9457600080fd5b6004818101805460ff191690911790556040805163ffffffff8416918101919091526060808252600d908201527f43616e63656c4c6f747465727900000000000000000000000000000000000000608082015260a0602082018181528354600260018216156101000260001901909116049183018290526000805160206144b18339815191529284928692829160c083019086908015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b505094505050505060405180910390a1610e8e82612f9a565b5050565b600e6020908152600092835260408084209091529082529020805460019091015463ffffffff1682565b600854600160a060020a03163314610ed357600080fd5b600160a060020a03166000908152600960205260409020805460ff19169055565b60005481565b600260205260009081526040902054600160a060020a031681565b610f1f33826130bd565b1515610f2a57600080fd5b610f348382612f25565b1515610f3f57600080fd5b610f4a8383836130dd565b505050565b60008060006060610f5e6131a3565b600160a060020a03163314610f7257600080fd5b6000868152600f602052604090205463ffffffff169350831515610f9557600080fd5b600b805463ffffffff8616908110610fa957fe5b600091825260209091206005909102019250600160048085015460ff1690811115610fd057fe5b14610fda57600080fd5b6001830154608060020a900463ffffffff16610ff4611392565b63ffffffff161161100457600080fd5b61100f856000613398565b60408051808201909152600881527f63616c6c6261636b0000000000000000000000000000000000000000000000006020820152909250905063ffffffff8216151561108b575060408051808201909152601981527f63616c6c6261636b5f726573756c745f6e6f745f666f756e640000000000000060208201525b600183015463ffffffff90811690831611156110db57505060408051808201909152601581527f63616c6c6261636b5f726573756c745f6c696d6974000000000000000000000060208201526000905b6000805160206144b18339815191528184600001846040518080602001806020018463ffffffff168152602001838103835286818151815260200191508051906020019080838360005b8381101561113d578181015183820152602001611125565b50505050905090810190601f16801561116a5780820380516001836020036101000a031916815260200191505b508381038252855460026000196101006001841615020190911604808252602090910190869080156111dd5780601f106111b2576101008083540402835291602001916111dd565b820191906000526020600020905b8154815290600101906020018083116111c057829003601f168201915b50509550505050505060405180910390a163ffffffff821615611238576001830180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff8516021790556112388461350a565b505050505050565b600854600160a060020a031633148061126857503360009081526009602052604090205460ff165b151561127357600080fd5b600d805463ffffffff909216740100000000000000000000000000000000000000000277ffffffff000000000000000000000000000000000000000019909216919091179055565b600854600090600160a060020a031633146112d557600080fd5b600a546000106112e457600080fd5b50600a80546000918290556008546040519192600160a060020a039091169183156108fc0291849190818181858888f1935050505015801561132a573d6000803e3d6000fd5b506040805180820183905260608082526008908201527f5749544844524157000000000000000000000000000000000000000000000000608082015260a06020820181905260009082015290516000805160206144b18339815191529181900360e00190a150565b4290565b600854600160a060020a03163314806113be57503360009081526009602052604090205460ff165b15156113c957600080fd5b60118290556010819055610e8e633b9aca0083026136c1565b60096020526000908152604090205460ff1681565b60105481565b600a5481565b600854600090600160a060020a031633148061142e57503360009081526009602052604090205460ff165b151561143957600080fd5b600b805463ffffffff851690811061144d57fe5b906000526020600020906005020190508115158160040160019054906101000a900460ff1615151415151561148157600080fd5b60040180549115156101000261ff001990921691909117905550565b600854600160a060020a031633146114b457600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600081815260026020526040902054600160a060020a03168015156114fa57600080fd5b919050565b600854600160a060020a0316331461151657600080fd5b600160a060020a03166000908152600960205260409020805460ff19166001179055565b600160a060020a031660009081526003602052604090205490565b600854600090600160a060020a031633148061158057503360009081526009602052604090205460ff165b151561158b57600080fd5b600b805463ffffffff851690811061159f57fe5b600091825260209091206005909102019050600160048083015460ff16908111156115c657fe5b146115d057600080fd5b600181015463ffffffff90811690831611156115eb57600080fd5b63ffffffff821615156115fd57600080fd5b600181810180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff86811682029290921792839055604080519190930490911691810182905260608082526014908201527f5265736f6c76654c6f7474657279427948616e64000000000000000000000000608082015260a0602082018181528554600261010096821615969096026000190116949094049082018190526000805160206144b1833981519152938593929182919060c08301908690801561170e5780601f106116e35761010080835404028352916020019161170e565b820191906000526020600020905b8154815290600101906020018083116116f157829003601f168201915b505094505050505060405180910390a1610f4a8361350a565b600854600090819060609082908190600160a060020a031633148061175b57503360009081526009602052604090205460ff165b151561176657600080fd5b600b805463ffffffff891690811061177a57fe5b906000526020600020906005020194506117cb6040805190810160405280600381526020017f55524c00000000000000000000000000000000000000000000000000000000008152506010546138b0565b935083856003015434011115156117e157600080fd5b600385018054340185900390556040805163ffffffff88169181019190915260608082526018908201527f5265736f6c76654c6f747465727942794f7261636c697a650000000000000000608082015260a0602082018181528754600260001961010060018416150201909116049183018290526000805160206144b18339815191529288928a92829160c0830190869080156118bf5780601f10611894576101008083540402835291602001916118bf565b820191906000526020600020905b8154815290600101906020018083116118a257829003601f168201915b505094505050505060405180910390a1611977606060405190810160405280602681526020017f6a736f6e2868747470733a2f2f746f74616c67616d652e696f2f6170692f763281526020017f2f67616d652f000000000000000000000000000000000000000000000000000081525061193e8963ffffffff16613b21565b60408051808201909152601481527f2f726573756c742e6a736f6e292e726573756c740000000000000000000000006020820152613c14565b6001860154909350608060020a900463ffffffff16611994611392565b63ffffffff1610156119c457856119a9611392565b6001870154608060020a900463ffffffff16030191506119c8565b8591505b611a118263ffffffff166040805190810160405280600381526020017f55524c000000000000000000000000000000000000000000000000000000000081525085601054613de3565b6000908152600f60205260409020805463ffffffff191663ffffffff9890981697909717909655505050505050565b600854600160a060020a0316331480611a6857503360009081526009602052604090205460ff165b1515611a7357600080fd5b600d805463ffffffff90921660c060020a027bffffffff00000000000000000000000000000000000000000000000019909216919091179055565b6000828152600160208190526040822080820154909290918190819081908190819060ff6c0100000000000000000000000089041614611aef576000611af2565b60015b600b805491975063ffffffff680100000000000000008a04811697506401000000008a041695509086908110611b2457fe5b600091825260209091206005909102019250600360048085015460ff1690811115611b4b57fe5b1480611b67575060048381015460ff1681811115611b6557fe5b145b1515611b7257600080fd5b60008a815260026020526040902054600160a060020a03163314611b9557600080fd5b8515611ba057600080fd5b600183015463ffffffff85811660c060020a909204161480611bd2575060048381015460ff1681811115611bd057fe5b145b1515611bdd57600080fd5b6004838101546000935060ff1681811115611bf457fe5b1415611bff57875491505b600360048085015460ff1690811115611c1457fe5b1415611d735763ffffffff8086166000908152600e60209081526040808320600188015460c060020a9004909416835292905220548854600285015402811515611c5a57fe5b600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8e1660048201529051939092049450600160a060020a031691636352211e916024808201926020929091908290030181600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b505050506040513d6020811015611cf457600080fd5b50519050600160a060020a03811615611d7357600160a060020a0381166108fc611d2584606463ffffffff6141e916565b6040518115909202916000818181858888f19350505050158015611d4d573d6000803e3d6000fd5b50611d706064611d6484606363ffffffff61422316565b9063ffffffff6141e916565b91505b6c01000000000000000000000000969096016001888101829055604051919790965090339083156108fc029084906000818181858888f19350505050158015611dc0573d6000803e3d6000fd5b506040805133602082015263ffffffff80881682840152808d1660608301528616608082015260a0810184905260c08082526006908201527f52656465656d000000000000000000000000000000000000000000000000000060e082015290517f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d918190036101000190a150505050505050505050565b611e5f61439d565b600854600090600160a060020a0316331480611e8a57503360009081526009602052604090205460ff165b1515611e9557600080fd5b8851600210611ea357600080fd5b600163ffffffff881611611eb657600080fd5b600063ffffffff841611611ec957600080fd5b611ed1611392565b63ffffffff168863ffffffff16111515611eea57600080fd5b88825263ffffffff878116602084015288811660a08401528681166040840152831660c0830152600161014083018190525063ffffffff808616606084015284166080830152600b8054600181810180845560009390935284518051919392869260059091027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90191611f8291839160200190614401565b5060208201516001828101805460408601516060870151608088015160a089015160c08a015160e08b015163ffffffff1990961663ffffffff998a161767ffffffff000000001916640100000000958a1695909502949094176bffffffff000000000000000019166801000000000000000093891693909302929092176fffffffff00000000000000000000000019166c01000000000000000000000000918816919091021773ffffffff000000000000000000000000000000001916608060020a918716919091021777ffffffff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000091861691909102177bffffffff000000000000000000000000000000000000000000000000191660c060020a94909116939093029290921790915561010083015160028301556101208301516003830155610140830151600480840180549293909260ff19169184908111156120ef57fe5b02179055506101608201518160040160016101000a81548160ff02191690831515021790555050500390506000805160206144b18339815191528982604051808060200180602001848152602001838103835260078152602001807f41646447616d6500000000000000000000000000000000000000000000000000815250602001838103825285818151815260200191508051906020019080838360005b838110156121a657818101518382015260200161218e565b50505050905090810190601f1680156121d35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050505050505050565b6040805160208101909152600080825280600160a060020a038516151561221357600080fd5b505060008054600019015b600081106122c257600054811115612235576122c2565b600081815260026020526040902054600160a060020a03868116911614156122b9576122868360408051908101604052806001815260200160fa60020a600b0281525061228184613b21565b613c14565b925060019091019063ffffffff8416158015906122af57508363ffffffff168263ffffffff1610155b156122b9576122c2565b6000190161221e565b505092915050565b600854600160a060020a031681565b60408051808201909152600481527f5454474f00000000000000000000000000000000000000000000000000000000602082015281565b600854600160a060020a0316331461232757600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b600460205260009081526040902054600160a060020a031681565b600160a060020a038216151561237957600080fd5b6123833382612f25565b151561238e57600080fd5b610e8e3383836130dd565b600854600160a060020a031633146123b057600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b6040805160208101909152600080825280808080600160a060020a03881615156123fb57600080fd5b6000945060016000540393505b600084106124b55760005484111561241f576124b5565b600084815260026020526040902054600160a060020a03898116911614156124a95750505060008181526001602081905260409091209081015463ffffffff68010000000000000000820481169087168114156124a9576124a08660408051908101604052806001815260200160fa60020a600b0281525061228187613b21565b95506001909401935b60001990930192612408565b505050505092915050565b600754600160a060020a031633146124d757600080fd5b60075460088054600160a060020a031916600160a060020a03909216919091179055565b60606000806000806000806000806000806000806000600b8f63ffffffff1681548110151561252657fe5b60009182526020918290206005919091020180546040805160026001841615610100026000190190931692909204601f8101859004850283018501909152808252919350918391908301828280156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b50505050509d508060010160009054906101000a900463ffffffff169c508060010160109054906101000a900463ffffffff169b508060010160049054906101000a900463ffffffff169a508060010160089054906101000a900463ffffffff16995080600101600c9054906101000a900463ffffffff1698508060010160149054906101000a900463ffffffff1697508060010160189054906101000a900463ffffffff1696506126708f614247565b955080600201549450846000141561268e5761268b8f612ea4565b94505b6003810154600482015490945060ff16925060018360048111156126ae57fe5b1480156126cd57508b63ffffffff166126c5611392565b63ffffffff16115b156126d757600292505b8060040160019054906101000a900460ff1691505091939597999b9d90929496989a9c50565b600080600080600080600061271061447f565b6000600b8d63ffffffff1681548110151561272757fe5b60009182526020909120600590910201985060016004808b015460ff169081111561274e57fe5b1461275857600080fd5b6001890154608060020a900463ffffffff16612772611392565b63ffffffff161061278257600080fd5b60008b63ffffffff161180156127a65750600189015463ffffffff908116908c1611155b15156127b157600080fd5b600160a060020a038a163314156127c757600080fd5b6004890154610100900460ff16156127de57600080fd5b600189015474010000000000000000000000000000000000000000900463ffffffff1666038d7ea4c680000266ffffffffffffff1634101561281f57600080fd5b600d5434985061285290899063ffffffff7401000000000000000000000000000000000000000090910481169061422316565b9650683635c9adc5dea0000087111561287257683635c9adc5dea0000096505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018a90529051600160a060020a03909216916332c0fba5916064808201926020929091908290030181600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b505050506040513d602081101561290f57600080fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8f1660048201529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b505050506040513d60208110156129a757600080fd5b50519550600160a060020a03861615612a9b57600d546129d990899063ffffffff60c060020a90910481169061422316565b9450683635c9adc5dea000008511156129f957683635c9adc5dea0000094505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03898116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b505050506040513d6020811015612a9857600080fd5b50505b612ab16064611d648a600463ffffffff61422316565b9350612ac3888563ffffffff6142c716565b9750600160a060020a038a1615612b7657600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038d8116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612b4957600080fd5b505af1158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50505b6003890154612b8b908563ffffffff612f7316565b60038a015550505063ffffffff808b166000818152600e602090815260408083208d861680855290835281842080548c01815560019081018054808916830190981663ffffffff1990981697909717909655815180830183528b8152680100000000000000009095026401000000009091020142016fffffffffffffffffffffffffffffffff81168584019081528454808801865580865293879052918420855181559151919095015590612c419033836130dd565b7f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d338e838e8c604051808060200187600160a060020a0316600160a060020a031681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff168152602001838152602001828103825260038152602001807f4275790000000000000000000000000000000000000000000000000000000000815250602001965050505050505060405180910390a150505050505050505050505050565b60115481565b600b546040805160208181018352600080835283519182019093528281528291908280612d47611392565b9150600090505b8663ffffffff168163ffffffff161015612e9b576001600b805463ffffffff8416908110612d7857fe5b60009182526020909120600460059092020181015460ff1690811115612d9a57fe5b14612da457612e93565b600b805463ffffffff8316908110612db857fe5b600091825260209091206001600590920201015463ffffffff608060020a90910481169083161015612e1c5760408051808201909152600180825260fa60020a600b02602083015290960195612e1990859061228163ffffffff8516613b21565b93505b600b805463ffffffff8316908110612e3057fe5b600091825260209091206001600590920201015463ffffffff608060020a909104811690831610612e935760408051808201909152600180825260fa60020a600b02602083015290950194612e9090849061228163ffffffff8516613b21565b92505b600101612d4e565b50509091929394565b600080600080600b8563ffffffff16815481101515612ebf57fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e60209081526040808320938516835292905220549190910190600101612ed8565b509392505050565b600090815260026020526040902054600160a060020a0391821691161490565b6000918252600460205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828201838110801590612f885750828110155b1515612f9357600080fd5b9392505050565b6000600b8263ffffffff16815481101515612fb157fe5b90600052602060002090600502019050600081600301541115610e8e57600381018054600a80549091019055546040805190810182905260608082526007908201527f54616b6546656500000000000000000000000000000000000000000000000000608082015260a0602082018181528454600260001961010060018416150201909116049183018290526000805160206144b183398151915293859390929091829160c0830190869080156130a95780601f1061307e576101008083540402835291602001916130a9565b820191906000526020600020905b81548152906001019060200180831161308c57829003601f168201915b505094505050505060405180910390a15050565b600090815260046020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260036020908152604080832080546001019055858352600290915290208054600160a060020a0319169091179055831615610f4a578082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600160a060020a03831660009081526003602090815260408083208054600019019055838352600490915290208054600160a060020a0319169055505050565b600554600090600160a060020a031615806131d057506005546131ce90600160a060020a03166142dc565b155b156131e1576131df60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b505050506040513d602081101561325e57600080fd5b5051600654600160a060020a0390811691161461331457600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156132c857600080fd5b505af11580156132dc573d6000803e3d6000fd5b505050506040513d60208110156132f257600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600660009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561336757600080fd5b505af115801561337b573d6000803e3d6000fd5b505050506040513d602081101561339157600080fd5b5051905090565b6000828180805b83518110156134ed5783517f3000000000000000000000000000000000000000000000000000000000000000908590839081106133d857fe5b90602001015160f860020a900460f860020a02600160f860020a0319161015801561344e575083517f39000000000000000000000000000000000000000000000000000000000000009085908390811061342e57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b156134a757811561346d57851515613465576134ed565b600019909501945b600a830292506030848281518110151561348357fe5b90602001015160f860020a900460f860020a0260f860020a900403830192506134e5565b83818151811015156134b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a0214156134e557600191505b60010161339f565b60008611156134ff5785600a0a830292505b509095945050505050565b6000600b8263ffffffff1681548110151561352157fe5b600091825260209091206004600590920201908101805460ff19166003179055905061354c82612ea4565b600282015563ffffffff8083166000908152600e6020908152604080832060018087015460c060020a900486168552925290912001541615156136b8576003810154600282015401156135ca576135c681600301546135ba8360020154600a54612f7390919063ffffffff16565b9063ffffffff612f7316565b600a555b6003810154600280830154604080519190930192810183905260608082526009908201527f4e4f424f445957494e0000000000000000000000000000000000000000000000608082015260a06020820181815285546000196101006001831615020116939093049082018190526000805160206144b183398151915293859390929182919060c0830190869080156136a35780601f10613678576101008083540402835291602001916136a3565b820191906000526020600020905b81548152906001019060200180831161368657829003601f168201915b505094505050505060405180910390a1610e8e565b610e8e82612f9a565b600554600160a060020a031615806136eb57506005546136e990600160a060020a03166142dc565b155b156136fc576136fa60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561374f57600080fd5b505af1158015613763573d6000803e3d6000fd5b505050506040513d602081101561377957600080fd5b5051600654600160a060020a0390811691161461382f57600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156137e357600080fd5b505af11580156137f7573d6000803e3d6000fd5b505050506040513d602081101561380d57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517fca6ad1e4000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163ca6ad1e49160248082019260009290919082900301818387803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b5050505050565b600554600090600160a060020a031615806138dd57506005546138db90600160a060020a03166142dc565b155b156138ee576138ec60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561394157600080fd5b505af1158015613955573d6000803e3d6000fd5b505050506040513d602081101561396b57600080fd5b5051600654600160a060020a03908116911614613a2157600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d60208110156139ff57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810185905260048101918252855160448201528551600160a060020a0390931692632ef3accc9287928792829160640190602086019080838360005b83811015613aa1578181015183820152602001613a89565b50505050905090810190601f168015613ace5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b505050506040513d6020811015613b1857600080fd5b50519392505050565b60606000808281851515613b6a5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450613c0b565b8593505b8315613b8557600190920191600a84049350613b6e565b826040519080825280601f01601f191660200182016040528015613bb3578160200160208202803883390190505b5091505060001982015b8515613c0757815160001982019160f860020a6030600a8a060102918491908110613be457fe5b906020010190600160f860020a031916908160001a905350600a86049550613bbd565b8194505b50505050919050565b82516060908490849084908490600090819083901515613c685784516040519080825280601f01601f191660200182016040528015613c5d578160200160208202803883390190505b509350839050613d6f565b84518651885101016040519080825280601f01601f191660200182016040528015613c9d578160200160208202803883390190505b509350839050600091505b8651821015613d09578682815181101515613cbf57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613ce657fe5b906020010190600160f860020a031916908160001a905350600190910190613ca8565b600091505b8551821015613d6f578582815181101515613d2557fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613d4c57fe5b906020010190600160f860020a031916908160001a905350600190910190613d0e565b600091505b8451821015613dd5578482815181101515613d8b57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613db257fe5b906020010190600160f860020a031916908160001a905350600190910190613d74565b9a9950505050505050505050565b6005546000908190600160a060020a03161580613e125750600554613e1090600160a060020a03166142dc565b155b15613e2357613e2160006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613e7657600080fd5b505af1158015613e8a573d6000803e3d6000fd5b505050506040513d6020811015613ea057600080fd5b5051600654600160a060020a03908116911614613f5657600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613f0a57600080fd5b505af1158015613f1e573d6000803e3d6000fd5b505050506040513d6020811015613f3457600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810186905260048101918252875160448201528751600160a060020a0390931692632ef3accc9289928892829160640190602086019080838360005b83811015613fd6578181015183820152602001613fbe565b50505050905090810190601f1680156140035780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b505050506040513d602081101561404d57600080fd5b50519050670de0b6b3a76400003a84020181111561406e57600091506141e0565b6006546040517fc51be90f0000000000000000000000000000000000000000000000000000000081526004810188815260648201869052608060248301908152885160848401528851600160a060020a039094169363c51be90f9386938c938c938c938c939291604482019160a40190602088019080838360005b838110156141015781810151838201526020016140e9565b50505050905090810190601f16801561412e5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015614161578181015183820152602001614149565b50505050905090810190601f16801561418e5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156141b057600080fd5b505af11580156141c4573d6000803e3d6000fd5b50505050506040513d60208110156141db57600080fd5b505191505b50949350505050565b6000808083116141f857600080fd5b828481151561420357fe5b049050828481151561421157fe5b068184020184141515612f9357600080fd5b6000828202831580612f88575082848281151561423c57fe5b0414612f9357600080fd5b600080600080600b8563ffffffff1681548110151561426257fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e602090815260408083208585168452909152902060019081015490911692909201910161427b565b6000828211156142d657600080fd5b50900390565b3b90565b60006142ea6142f0565b92915050565b600080614310731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed6142dc565b1115614344575060058054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed1790556001610cdc565b600061436373c03a2615d5efaf5f49f60b7bb6583eaec212fdf16142dc565b1115614397575060058054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf11790556001610cdc565b50600090565b6040805161018081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052906101408201908152600060209091015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061444257805160ff191683800117855561446f565b8280016001018555821561446f579182015b8281111561446f578251825591602001919060010190614454565b5061447b929150614496565b5090565b604080518082019091526000808252602082015290565b610cdc91905b8082111561447b576000815560010161449c5600d7fd1f721dc8644a44be50ee5bce1d6b7ac2ffd81759add00d58b2efc0e9f050a165627a7a72305820d69389096a003e24fa77667ca479bd7cd64e22c52a5c7fcabbcfde6b1fc98f350029
Deployed Bytecode
0x6080604052600436106101df5763ffffffff60e060020a60003504166306fdde0381146101ec578063087205f014610276578063095ea7b3146102ea5780631051db341461030e57806311ac20c0146103375780631209a849146103555780631785f53c1461039757806318160ddd146103b85780631d36e06c146103df57806323b872dd1461041357806327dc297e1461043d5780632ece07c31461049b5780633ccfd60b146104b95780633fae1928146104ce57806340adf94e146104fc578063429b62e5146105175780634eb8ffb4146105385780635387a2331461054d57806356f99fcb146105625780636336ac19146105855780636352211e146105a657806370480275146105be57806370a08231146105df57806372b81b1c1461060057806373f1e6d7146106245780637461dbff1461063b57806377a9e15214610659578063874d73a71461067a5780638cc57368146107015780638da5cb5b1461072b57806395d89b4114610740578063a6f9dae114610755578063a8bd9c3214610776578063a9059cbb1461078e578063ac0496e1146107b2578063aec651fb146107d3578063bd9b6d86146107fd578063be60988e14610812578063c0e1e2721461092c578063d03e102114610955578063e4e663a91461096a575b34156101ea57600080fd5b005b3480156101f857600080fd5b50610201610a96565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028257600080fd5b5061028e600435610acd565b60408051998a5260208a019890985263ffffffff968716898901529486166060890152929094166080870152600160a060020a031660a086015291151560c085015260e084019190915261010083015251908190036101200190f35b3480156102f657600080fd5b506101ea600160a060020a0360043516602435610c7e565b34801561031a57600080fd5b50610323610cd9565b604080519115158252519081900360200190f35b34801561034357600080fd5b506101ea63ffffffff60043516610cdf565b34801561036157600080fd5b5061037963ffffffff60043581169060243516610e92565b6040805192835263ffffffff90911660208301528051918290030190f35b3480156103a357600080fd5b506101ea600160a060020a0360043516610ebc565b3480156103c457600080fd5b506103cd610ef4565b60408051918252519081900360200190f35b3480156103eb57600080fd5b506103f7600435610efa565b60408051600160a060020a039092168252519081900360200190f35b34801561041f57600080fd5b506101ea600160a060020a0360043581169060243516604435610f15565b34801561044957600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101ea958335953695604494919390910191908190840183828082843750949750610f4f9650505050505050565b3480156104a757600080fd5b506101ea63ffffffff60043516611240565b3480156104c557600080fd5b506101ea6112bb565b3480156104da57600080fd5b506104e3611392565b6040805163ffffffff9092168252519081900360200190f35b34801561050857600080fd5b506101ea600435602435611396565b34801561052357600080fd5b50610323600160a060020a03600435166113e2565b34801561054457600080fd5b506103cd6113f7565b34801561055957600080fd5b506103cd6113fd565b34801561056e57600080fd5b506101ea63ffffffff600435166024351515611403565b34801561059157600080fd5b506101ea600160a060020a036004351661149d565b3480156105b257600080fd5b506103f76004356114d6565b3480156105ca57600080fd5b506101ea600160a060020a03600435166114ff565b3480156105eb57600080fd5b506103cd600160a060020a036004351661153a565b34801561060c57600080fd5b506101ea63ffffffff60043581169060243516611555565b6101ea63ffffffff60043581169060243516611727565b34801561064757600080fd5b506101ea63ffffffff60043516611a40565b34801561066557600080fd5b506101ea60043563ffffffff60243516611aae565b34801561068657600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101ea9436949293602493928401919081908401838280828437509497505063ffffffff853581169650602086013581169560408101358216955060608101358216945060808101358216935060a00135169050611e57565b34801561070d57600080fd5b50610201600160a060020a036004351663ffffffff602435166121ed565b34801561073757600080fd5b506103f76122ca565b34801561074c57600080fd5b506102016122d9565b34801561076157600080fd5b506101ea600160a060020a0360043516612310565b34801561078257600080fd5b506103f7600435612349565b34801561079a57600080fd5b506101ea600160a060020a0360043516602435612364565b3480156107be57600080fd5b506101ea600160a060020a0360043516612399565b3480156107df57600080fd5b50610201600160a060020a036004351663ffffffff602435166123d2565b34801561080957600080fd5b506101ea6124c0565b34801561081e57600080fd5b5061083063ffffffff600435166124fb565b6040805163ffffffff808f1660208301528d8116928201929092528b821660608201528a8216608082015289821660a082015288821660c082015287821660e08201529086166101008201526101208101859052610140810184905280610160810184600481111561089e57fe5b60ff1681526020018315151515815260200182810382528f818151815260200191508051906020019080838360005b838110156108e55781810151838201526020016108cd565b50505050905090810190601f1680156109125780820380516001836020036101000a031916815260200191505b509e50505050505050505050505050505060405180910390f35b6101ea63ffffffff60043581169060243581169060443516600160a060020a03606435166126fd565b34801561096157600080fd5b506103cd612d16565b34801561097657600080fd5b5061097f612d1c565b604051808663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff1681526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156109f65781810151838201526020016109de565b50505050905090810190601f168015610a235780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610a56578181015183820152602001610a3e565b50505050905090810190601f168015610a835780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b60408051808201909152600f81527f546f74616c47616d654f7261636c650000000000000000000000000000000000602082015281565b60008181526001602081905260408220805481830154909392839283928392839283928392839291908390819060ff6c0100000000000000000000000085041614610b19576000610b1c565b60015b96506040839060020a900463ffffffff1698506020839060020a900463ffffffff169a508263ffffffff169950600e60008a63ffffffff1663ffffffff16815260200190815260200160002060008c63ffffffff1663ffffffff1681526020019081526020016000206000015495508d945060009b50600b8963ffffffff16815481101515610ba757fe5b90600052602060002090600502019150816002015490508060001415610bd357610bd089612ea4565b90505b600182015463ffffffff8c811660c060020a909204161415610c2f5763ffffffff808a166000908152600e60209081526040808320600187015460c060020a90049094168352929052205484548202811515610c2b57fe5b049b505b60048281015460ff1681811115610c4257fe5b1415610c4d5783549b505b50505060009a8b5250600260205260409099205497999698959794969395600160a060020a03909516949193909250565b610c883382612f25565b1515610c9357600080fd5b610c9d8183612f45565b6040518190600160a060020a0384169033907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590600090a45050565b60015b90565b6000600b8263ffffffff16815481101515610cf657fe5b600091825260209091206005909102019050600160048083015460ff1690811115610d1d57fe5b14610d2757600080fd5b600854600160a060020a0316331480610d4f57503360009081526009602052604090205460ff165b80610d8957506001810154610d799063ffffffff608060020a90910481169062093a8090612f7316565b610d81611392565b63ffffffff16115b1515610d9457600080fd5b6004818101805460ff191690911790556040805163ffffffff8416918101919091526060808252600d908201527f43616e63656c4c6f747465727900000000000000000000000000000000000000608082015260a0602082018181528354600260018216156101000260001901909116049183018290526000805160206144b18339815191529284928692829160c083019086908015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b505094505050505060405180910390a1610e8e82612f9a565b5050565b600e6020908152600092835260408084209091529082529020805460019091015463ffffffff1682565b600854600160a060020a03163314610ed357600080fd5b600160a060020a03166000908152600960205260409020805460ff19169055565b60005481565b600260205260009081526040902054600160a060020a031681565b610f1f33826130bd565b1515610f2a57600080fd5b610f348382612f25565b1515610f3f57600080fd5b610f4a8383836130dd565b505050565b60008060006060610f5e6131a3565b600160a060020a03163314610f7257600080fd5b6000868152600f602052604090205463ffffffff169350831515610f9557600080fd5b600b805463ffffffff8616908110610fa957fe5b600091825260209091206005909102019250600160048085015460ff1690811115610fd057fe5b14610fda57600080fd5b6001830154608060020a900463ffffffff16610ff4611392565b63ffffffff161161100457600080fd5b61100f856000613398565b60408051808201909152600881527f63616c6c6261636b0000000000000000000000000000000000000000000000006020820152909250905063ffffffff8216151561108b575060408051808201909152601981527f63616c6c6261636b5f726573756c745f6e6f745f666f756e640000000000000060208201525b600183015463ffffffff90811690831611156110db57505060408051808201909152601581527f63616c6c6261636b5f726573756c745f6c696d6974000000000000000000000060208201526000905b6000805160206144b18339815191528184600001846040518080602001806020018463ffffffff168152602001838103835286818151815260200191508051906020019080838360005b8381101561113d578181015183820152602001611125565b50505050905090810190601f16801561116a5780820380516001836020036101000a031916815260200191505b508381038252855460026000196101006001841615020190911604808252602090910190869080156111dd5780601f106111b2576101008083540402835291602001916111dd565b820191906000526020600020905b8154815290600101906020018083116111c057829003601f168201915b50509550505050505060405180910390a163ffffffff821615611238576001830180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff8516021790556112388461350a565b505050505050565b600854600160a060020a031633148061126857503360009081526009602052604090205460ff165b151561127357600080fd5b600d805463ffffffff909216740100000000000000000000000000000000000000000277ffffffff000000000000000000000000000000000000000019909216919091179055565b600854600090600160a060020a031633146112d557600080fd5b600a546000106112e457600080fd5b50600a80546000918290556008546040519192600160a060020a039091169183156108fc0291849190818181858888f1935050505015801561132a573d6000803e3d6000fd5b506040805180820183905260608082526008908201527f5749544844524157000000000000000000000000000000000000000000000000608082015260a06020820181905260009082015290516000805160206144b18339815191529181900360e00190a150565b4290565b600854600160a060020a03163314806113be57503360009081526009602052604090205460ff165b15156113c957600080fd5b60118290556010819055610e8e633b9aca0083026136c1565b60096020526000908152604090205460ff1681565b60105481565b600a5481565b600854600090600160a060020a031633148061142e57503360009081526009602052604090205460ff165b151561143957600080fd5b600b805463ffffffff851690811061144d57fe5b906000526020600020906005020190508115158160040160019054906101000a900460ff1615151415151561148157600080fd5b60040180549115156101000261ff001990921691909117905550565b600854600160a060020a031633146114b457600080fd5b600c8054600160a060020a031916600160a060020a0392909216919091179055565b600081815260026020526040902054600160a060020a03168015156114fa57600080fd5b919050565b600854600160a060020a0316331461151657600080fd5b600160a060020a03166000908152600960205260409020805460ff19166001179055565b600160a060020a031660009081526003602052604090205490565b600854600090600160a060020a031633148061158057503360009081526009602052604090205460ff165b151561158b57600080fd5b600b805463ffffffff851690811061159f57fe5b600091825260209091206005909102019050600160048083015460ff16908111156115c657fe5b146115d057600080fd5b600181015463ffffffff90811690831611156115eb57600080fd5b63ffffffff821615156115fd57600080fd5b600181810180547bffffffff000000000000000000000000000000000000000000000000191660c060020a63ffffffff86811682029290921792839055604080519190930490911691810182905260608082526014908201527f5265736f6c76654c6f7474657279427948616e64000000000000000000000000608082015260a0602082018181528554600261010096821615969096026000190116949094049082018190526000805160206144b1833981519152938593929182919060c08301908690801561170e5780601f106116e35761010080835404028352916020019161170e565b820191906000526020600020905b8154815290600101906020018083116116f157829003601f168201915b505094505050505060405180910390a1610f4a8361350a565b600854600090819060609082908190600160a060020a031633148061175b57503360009081526009602052604090205460ff165b151561176657600080fd5b600b805463ffffffff891690811061177a57fe5b906000526020600020906005020194506117cb6040805190810160405280600381526020017f55524c00000000000000000000000000000000000000000000000000000000008152506010546138b0565b935083856003015434011115156117e157600080fd5b600385018054340185900390556040805163ffffffff88169181019190915260608082526018908201527f5265736f6c76654c6f747465727942794f7261636c697a650000000000000000608082015260a0602082018181528754600260001961010060018416150201909116049183018290526000805160206144b18339815191529288928a92829160c0830190869080156118bf5780601f10611894576101008083540402835291602001916118bf565b820191906000526020600020905b8154815290600101906020018083116118a257829003601f168201915b505094505050505060405180910390a1611977606060405190810160405280602681526020017f6a736f6e2868747470733a2f2f746f74616c67616d652e696f2f6170692f763281526020017f2f67616d652f000000000000000000000000000000000000000000000000000081525061193e8963ffffffff16613b21565b60408051808201909152601481527f2f726573756c742e6a736f6e292e726573756c740000000000000000000000006020820152613c14565b6001860154909350608060020a900463ffffffff16611994611392565b63ffffffff1610156119c457856119a9611392565b6001870154608060020a900463ffffffff16030191506119c8565b8591505b611a118263ffffffff166040805190810160405280600381526020017f55524c000000000000000000000000000000000000000000000000000000000081525085601054613de3565b6000908152600f60205260409020805463ffffffff191663ffffffff9890981697909717909655505050505050565b600854600160a060020a0316331480611a6857503360009081526009602052604090205460ff165b1515611a7357600080fd5b600d805463ffffffff90921660c060020a027bffffffff00000000000000000000000000000000000000000000000019909216919091179055565b6000828152600160208190526040822080820154909290918190819081908190819060ff6c0100000000000000000000000089041614611aef576000611af2565b60015b600b805491975063ffffffff680100000000000000008a04811697506401000000008a041695509086908110611b2457fe5b600091825260209091206005909102019250600360048085015460ff1690811115611b4b57fe5b1480611b67575060048381015460ff1681811115611b6557fe5b145b1515611b7257600080fd5b60008a815260026020526040902054600160a060020a03163314611b9557600080fd5b8515611ba057600080fd5b600183015463ffffffff85811660c060020a909204161480611bd2575060048381015460ff1681811115611bd057fe5b145b1515611bdd57600080fd5b6004838101546000935060ff1681811115611bf457fe5b1415611bff57875491505b600360048085015460ff1690811115611c1457fe5b1415611d735763ffffffff8086166000908152600e60209081526040808320600188015460c060020a9004909416835292905220548854600285015402811515611c5a57fe5b600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8e1660048201529051939092049450600160a060020a031691636352211e916024808201926020929091908290030181600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b505050506040513d6020811015611cf457600080fd5b50519050600160a060020a03811615611d7357600160a060020a0381166108fc611d2584606463ffffffff6141e916565b6040518115909202916000818181858888f19350505050158015611d4d573d6000803e3d6000fd5b50611d706064611d6484606363ffffffff61422316565b9063ffffffff6141e916565b91505b6c01000000000000000000000000969096016001888101829055604051919790965090339083156108fc029084906000818181858888f19350505050158015611dc0573d6000803e3d6000fd5b506040805133602082015263ffffffff80881682840152808d1660608301528616608082015260a0810184905260c08082526006908201527f52656465656d000000000000000000000000000000000000000000000000000060e082015290517f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d918190036101000190a150505050505050505050565b611e5f61439d565b600854600090600160a060020a0316331480611e8a57503360009081526009602052604090205460ff165b1515611e9557600080fd5b8851600210611ea357600080fd5b600163ffffffff881611611eb657600080fd5b600063ffffffff841611611ec957600080fd5b611ed1611392565b63ffffffff168863ffffffff16111515611eea57600080fd5b88825263ffffffff878116602084015288811660a08401528681166040840152831660c0830152600161014083018190525063ffffffff808616606084015284166080830152600b8054600181810180845560009390935284518051919392869260059091027f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90191611f8291839160200190614401565b5060208201516001828101805460408601516060870151608088015160a089015160c08a015160e08b015163ffffffff1990961663ffffffff998a161767ffffffff000000001916640100000000958a1695909502949094176bffffffff000000000000000019166801000000000000000093891693909302929092176fffffffff00000000000000000000000019166c01000000000000000000000000918816919091021773ffffffff000000000000000000000000000000001916608060020a918716919091021777ffffffff000000000000000000000000000000000000000019167401000000000000000000000000000000000000000091861691909102177bffffffff000000000000000000000000000000000000000000000000191660c060020a94909116939093029290921790915561010083015160028301556101208301516003830155610140830151600480840180549293909260ff19169184908111156120ef57fe5b02179055506101608201518160040160016101000a81548160ff02191690831515021790555050500390506000805160206144b18339815191528982604051808060200180602001848152602001838103835260078152602001807f41646447616d6500000000000000000000000000000000000000000000000000815250602001838103825285818151815260200191508051906020019080838360005b838110156121a657818101518382015260200161218e565b50505050905090810190601f1680156121d35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050505050505050565b6040805160208101909152600080825280600160a060020a038516151561221357600080fd5b505060008054600019015b600081106122c257600054811115612235576122c2565b600081815260026020526040902054600160a060020a03868116911614156122b9576122868360408051908101604052806001815260200160fa60020a600b0281525061228184613b21565b613c14565b925060019091019063ffffffff8416158015906122af57508363ffffffff168263ffffffff1610155b156122b9576122c2565b6000190161221e565b505092915050565b600854600160a060020a031681565b60408051808201909152600481527f5454474f00000000000000000000000000000000000000000000000000000000602082015281565b600854600160a060020a0316331461232757600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b600460205260009081526040902054600160a060020a031681565b600160a060020a038216151561237957600080fd5b6123833382612f25565b151561238e57600080fd5b610e8e3383836130dd565b600854600160a060020a031633146123b057600080fd5b600d8054600160a060020a031916600160a060020a0392909216919091179055565b6040805160208101909152600080825280808080600160a060020a03881615156123fb57600080fd5b6000945060016000540393505b600084106124b55760005484111561241f576124b5565b600084815260026020526040902054600160a060020a03898116911614156124a95750505060008181526001602081905260409091209081015463ffffffff68010000000000000000820481169087168114156124a9576124a08660408051908101604052806001815260200160fa60020a600b0281525061228187613b21565b95506001909401935b60001990930192612408565b505050505092915050565b600754600160a060020a031633146124d757600080fd5b60075460088054600160a060020a031916600160a060020a03909216919091179055565b60606000806000806000806000806000806000806000600b8f63ffffffff1681548110151561252657fe5b60009182526020918290206005919091020180546040805160026001841615610100026000190190931692909204601f8101859004850283018501909152808252919350918391908301828280156125bf5780601f10612594576101008083540402835291602001916125bf565b820191906000526020600020905b8154815290600101906020018083116125a257829003601f168201915b50505050509d508060010160009054906101000a900463ffffffff169c508060010160109054906101000a900463ffffffff169b508060010160049054906101000a900463ffffffff169a508060010160089054906101000a900463ffffffff16995080600101600c9054906101000a900463ffffffff1698508060010160149054906101000a900463ffffffff1697508060010160189054906101000a900463ffffffff1696506126708f614247565b955080600201549450846000141561268e5761268b8f612ea4565b94505b6003810154600482015490945060ff16925060018360048111156126ae57fe5b1480156126cd57508b63ffffffff166126c5611392565b63ffffffff16115b156126d757600292505b8060040160019054906101000a900460ff1691505091939597999b9d90929496989a9c50565b600080600080600080600061271061447f565b6000600b8d63ffffffff1681548110151561272757fe5b60009182526020909120600590910201985060016004808b015460ff169081111561274e57fe5b1461275857600080fd5b6001890154608060020a900463ffffffff16612772611392565b63ffffffff161061278257600080fd5b60008b63ffffffff161180156127a65750600189015463ffffffff908116908c1611155b15156127b157600080fd5b600160a060020a038a163314156127c757600080fd5b6004890154610100900460ff16156127de57600080fd5b600189015474010000000000000000000000000000000000000000900463ffffffff1666038d7ea4c680000266ffffffffffffff1634101561281f57600080fd5b600d5434985061285290899063ffffffff7401000000000000000000000000000000000000000090910481169061422316565b9650683635c9adc5dea0000087111561287257683635c9adc5dea0000096505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018a90529051600160a060020a03909216916332c0fba5916064808201926020929091908290030181600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b505050506040513d602081101561290f57600080fd5b5050600d54604080517f6352211e00000000000000000000000000000000000000000000000000000000815263ffffffff8f1660048201529051600160a060020a0390921691636352211e916024808201926020929091908290030181600087803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b505050506040513d60208110156129a757600080fd5b50519550600160a060020a03861615612a9b57600d546129d990899063ffffffff60c060020a90910481169061422316565b9450683635c9adc5dea000008511156129f957683635c9adc5dea0000094505b600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03898116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612a6e57600080fd5b505af1158015612a82573d6000803e3d6000fd5b505050506040513d6020811015612a9857600080fd5b50505b612ab16064611d648a600463ffffffff61422316565b9350612ac3888563ffffffff6142c716565b9750600160a060020a038a1615612b7657600c54604080517f32c0fba5000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038d8116602483015260448201899052915191909216916332c0fba59160648083019260209291908290030181600087803b158015612b4957600080fd5b505af1158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50505b6003890154612b8b908563ffffffff612f7316565b60038a015550505063ffffffff808b166000818152600e602090815260408083208d861680855290835281842080548c01815560019081018054808916830190981663ffffffff1990981697909717909655815180830183528b8152680100000000000000009095026401000000009091020142016fffffffffffffffffffffffffffffffff81168584019081528454808801865580865293879052918420855181559151919095015590612c419033836130dd565b7f222fd1da48a94bc94aa8e2e60a0d9eb7e0467b7938f6e4a1d4dcdeac20c1cd8d338e838e8c604051808060200187600160a060020a0316600160a060020a031681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018463ffffffff1663ffffffff168152602001838152602001828103825260038152602001807f4275790000000000000000000000000000000000000000000000000000000000815250602001965050505050505060405180910390a150505050505050505050505050565b60115481565b600b546040805160208181018352600080835283519182019093528281528291908280612d47611392565b9150600090505b8663ffffffff168163ffffffff161015612e9b576001600b805463ffffffff8416908110612d7857fe5b60009182526020909120600460059092020181015460ff1690811115612d9a57fe5b14612da457612e93565b600b805463ffffffff8316908110612db857fe5b600091825260209091206001600590920201015463ffffffff608060020a90910481169083161015612e1c5760408051808201909152600180825260fa60020a600b02602083015290960195612e1990859061228163ffffffff8516613b21565b93505b600b805463ffffffff8316908110612e3057fe5b600091825260209091206001600590920201015463ffffffff608060020a909104811690831610612e935760408051808201909152600180825260fa60020a600b02602083015290950194612e9090849061228163ffffffff8516613b21565b92505b600101612d4e565b50509091929394565b600080600080600b8563ffffffff16815481101515612ebf57fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e60209081526040808320938516835292905220549190910190600101612ed8565b509392505050565b600090815260026020526040902054600160a060020a0391821691161490565b6000918252600460205260409091208054600160a060020a031916600160a060020a03909216919091179055565b6000828201838110801590612f885750828110155b1515612f9357600080fd5b9392505050565b6000600b8263ffffffff16815481101515612fb157fe5b90600052602060002090600502019050600081600301541115610e8e57600381018054600a80549091019055546040805190810182905260608082526007908201527f54616b6546656500000000000000000000000000000000000000000000000000608082015260a0602082018181528454600260001961010060018416150201909116049183018290526000805160206144b183398151915293859390929091829160c0830190869080156130a95780601f1061307e576101008083540402835291602001916130a9565b820191906000526020600020905b81548152906001019060200180831161308c57829003601f168201915b505094505050505060405180910390a15050565b600090815260046020526040902054600160a060020a0391821691161490565b600160a060020a03808316600081815260036020908152604080832080546001019055858352600290915290208054600160a060020a0319169091179055831615610f4a578082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4600160a060020a03831660009081526003602090815260408083208054600019019055838352600490915290208054600160a060020a0319169055505050565b600554600090600160a060020a031615806131d057506005546131ce90600160a060020a03166142dc565b155b156131e1576131df60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b505050506040513d602081101561325e57600080fd5b5051600654600160a060020a0390811691161461331457600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156132c857600080fd5b505af11580156132dc573d6000803e3d6000fd5b505050506040513d60208110156132f257600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600660009054906101000a9004600160a060020a0316600160a060020a031663c281d19e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561336757600080fd5b505af115801561337b573d6000803e3d6000fd5b505050506040513d602081101561339157600080fd5b5051905090565b6000828180805b83518110156134ed5783517f3000000000000000000000000000000000000000000000000000000000000000908590839081106133d857fe5b90602001015160f860020a900460f860020a02600160f860020a0319161015801561344e575083517f39000000000000000000000000000000000000000000000000000000000000009085908390811061342e57fe5b90602001015160f860020a900460f860020a02600160f860020a03191611155b156134a757811561346d57851515613465576134ed565b600019909501945b600a830292506030848281518110151561348357fe5b90602001015160f860020a900460f860020a0260f860020a900403830192506134e5565b83818151811015156134b557fe5b90602001015160f860020a900460f860020a02600160f860020a031916602e60f860020a0214156134e557600191505b60010161339f565b60008611156134ff5785600a0a830292505b509095945050505050565b6000600b8263ffffffff1681548110151561352157fe5b600091825260209091206004600590920201908101805460ff19166003179055905061354c82612ea4565b600282015563ffffffff8083166000908152600e6020908152604080832060018087015460c060020a900486168552925290912001541615156136b8576003810154600282015401156135ca576135c681600301546135ba8360020154600a54612f7390919063ffffffff16565b9063ffffffff612f7316565b600a555b6003810154600280830154604080519190930192810183905260608082526009908201527f4e4f424f445957494e0000000000000000000000000000000000000000000000608082015260a06020820181815285546000196101006001831615020116939093049082018190526000805160206144b183398151915293859390929182919060c0830190869080156136a35780601f10613678576101008083540402835291602001916136a3565b820191906000526020600020905b81548152906001019060200180831161368657829003601f168201915b505094505050505060405180910390a1610e8e565b610e8e82612f9a565b600554600160a060020a031615806136eb57506005546136e990600160a060020a03166142dc565b155b156136fc576136fa60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561374f57600080fd5b505af1158015613763573d6000803e3d6000fd5b505050506040513d602081101561377957600080fd5b5051600654600160a060020a0390811691161461382f57600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156137e357600080fd5b505af11580156137f7573d6000803e3d6000fd5b505050506040513d602081101561380d57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517fca6ad1e4000000000000000000000000000000000000000000000000000000008152600481018490529051600160a060020a039092169163ca6ad1e49160248082019260009290919082900301818387803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b5050505050565b600554600090600160a060020a031615806138dd57506005546138db90600160a060020a03166142dc565b155b156138ee576138ec60006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561394157600080fd5b505af1158015613955573d6000803e3d6000fd5b505050506040513d602081101561396b57600080fd5b5051600654600160a060020a03908116911614613a2157600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d60208110156139ff57600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810185905260048101918252855160448201528551600160a060020a0390931692632ef3accc9287928792829160640190602086019080838360005b83811015613aa1578181015183820152602001613a89565b50505050905090810190601f168015613ace5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015613aee57600080fd5b505af1158015613b02573d6000803e3d6000fd5b505050506040513d6020811015613b1857600080fd5b50519392505050565b60606000808281851515613b6a5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450613c0b565b8593505b8315613b8557600190920191600a84049350613b6e565b826040519080825280601f01601f191660200182016040528015613bb3578160200160208202803883390190505b5091505060001982015b8515613c0757815160001982019160f860020a6030600a8a060102918491908110613be457fe5b906020010190600160f860020a031916908160001a905350600a86049550613bbd565b8194505b50505050919050565b82516060908490849084908490600090819083901515613c685784516040519080825280601f01601f191660200182016040528015613c5d578160200160208202803883390190505b509350839050613d6f565b84518651885101016040519080825280601f01601f191660200182016040528015613c9d578160200160208202803883390190505b509350839050600091505b8651821015613d09578682815181101515613cbf57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613ce657fe5b906020010190600160f860020a031916908160001a905350600190910190613ca8565b600091505b8551821015613d6f578582815181101515613d2557fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613d4c57fe5b906020010190600160f860020a031916908160001a905350600190910190613d0e565b600091505b8451821015613dd5578482815181101515613d8b57fe5b90602001015160f860020a900460f860020a028184806001019550815181101515613db257fe5b906020010190600160f860020a031916908160001a905350600190910190613d74565b9a9950505050505050505050565b6005546000908190600160a060020a03161580613e125750600554613e1090600160a060020a03166142dc565b155b15613e2357613e2160006142e0565b505b600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613e7657600080fd5b505af1158015613e8a573d6000803e3d6000fd5b505050506040513d6020811015613ea057600080fd5b5051600654600160a060020a03908116911614613f5657600560009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613f0a57600080fd5b505af1158015613f1e573d6000803e3d6000fd5b505050506040513d6020811015613f3457600080fd5b505160068054600160a060020a031916600160a060020a039092169190911790555b600654604080517f2ef3accc0000000000000000000000000000000000000000000000000000000081526024810186905260048101918252875160448201528751600160a060020a0390931692632ef3accc9289928892829160640190602086019080838360005b83811015613fd6578181015183820152602001613fbe565b50505050905090810190601f1680156140035780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b505050506040513d602081101561404d57600080fd5b50519050670de0b6b3a76400003a84020181111561406e57600091506141e0565b6006546040517fc51be90f0000000000000000000000000000000000000000000000000000000081526004810188815260648201869052608060248301908152885160848401528851600160a060020a039094169363c51be90f9386938c938c938c938c939291604482019160a40190602088019080838360005b838110156141015781810151838201526020016140e9565b50505050905090810190601f16801561412e5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015614161578181015183820152602001614149565b50505050905090810190601f16801561418e5780820380516001836020036101000a031916815260200191505b5096505050505050506020604051808303818588803b1580156141b057600080fd5b505af11580156141c4573d6000803e3d6000fd5b50505050506040513d60208110156141db57600080fd5b505191505b50949350505050565b6000808083116141f857600080fd5b828481151561420357fe5b049050828481151561421157fe5b068184020184141515612f9357600080fd5b6000828202831580612f88575082848281151561423c57fe5b0414612f9357600080fd5b600080600080600b8563ffffffff1681548110151561426257fe5b9060005260206000209060050201925060009150600190505b600183015463ffffffff90811690821611612f1d5763ffffffff8086166000908152600e602090815260408083208585168452909152902060019081015490911692909201910161427b565b6000828211156142d657600080fd5b50900390565b3b90565b60006142ea6142f0565b92915050565b600080614310731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed6142dc565b1115614344575060058054600160a060020a031916731d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed1790556001610cdc565b600061436373c03a2615d5efaf5f49f60b7bb6583eaec212fdf16142dc565b1115614397575060058054600160a060020a03191673c03a2615d5efaf5f49f60b7bb6583eaec212fdf11790556001610cdc565b50600090565b6040805161018081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052906101408201908152600060209091015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061444257805160ff191683800117855561446f565b8280016001018555821561446f579182015b8281111561446f578251825591602001919060010190614454565b5061447b929150614496565b5090565b604080518082019091526000808252602082015290565b610cdc91905b8082111561447b576000815560010161449c5600d7fd1f721dc8644a44be50ee5bce1d6b7ac2ffd81759add00d58b2efc0e9f050a165627a7a72305820d69389096a003e24fa77667ca479bd7cd64e22c52a5c7fcabbcfde6b1fc98f350029
Swarm Source
bzzr://d69389096a003e24fa77667ca479bd7cd64e22c52a5c7fcabbcfde6b1fc98f35
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,241.07 | 0.0516 | $167.35 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.