ETH Price: $2,342.39 (+0.01%)

Contract

0x46EC27b571B3D157b153C7C9219dd5A2E31cBb8d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Virus Def97758922020-03-30 23:03:271624 days ago1585609407IN
0x46EC27b5...2E31cBb8d
0 ETH0.000176052
Add Virus Def93448792020-01-24 13:54:241691 days ago1579874064IN
0x46EC27b5...2E31cBb8d
0 ETH0.000088021
Add Virus Def92439652020-01-09 3:05:061706 days ago1578539106IN
0x46EC27b5...2E31cBb8d
0 ETH0.000245563
Add Virus Def92439322020-01-09 2:59:331706 days ago1578538773IN
0x46EC27b5...2E31cBb8d
0 ETH0.000245563
Add Virus Def89459202019-11-16 18:27:581759 days ago1573928878IN
0x46EC27b5...2E31cBb8d
0 ETH0.000078471
Add Virus Def88226522019-10-27 16:35:481780 days ago1572194148IN
0x46EC27b5...2E31cBb8d
0 ETH0.000063931
Add Virus Def88082942019-10-25 9:09:331782 days ago1571994573IN
0x46EC27b5...2E31cBb8d
0 ETH0.000078931
Add Virus Def87977142019-10-23 16:20:021784 days ago1571847602IN
0x46EC27b5...2E31cBb8d
0 ETH0.000394665
Add Virus Def80416362019-06-27 18:48:571901 days ago1561661337IN
0x46EC27b5...2E31cBb8d
0 ETH0.000157862
Add Virus Def79889592019-06-19 13:19:551910 days ago1560950395IN
0x46EC27b5...2E31cBb8d
0 ETH0.00039535
Add Virus Def77546982019-05-13 22:31:361946 days ago1557786696IN
0x46EC27b5...2E31cBb8d
0 ETH0.000070391.1
Add Virus Def77037132019-05-05 22:57:241954 days ago1557097044IN
0x46EC27b5...2E31cBb8d
0 ETH0.000070391.1
Add Virus Def76212562019-04-23 2:52:591967 days ago1555987979IN
0x46EC27b5...2E31cBb8d
0 ETH0.000083191.3
Attack76093912019-04-21 6:42:281969 days ago1555828948IN
0x46EC27b5...2E31cBb8d
0 ETH0.000149121
Attack76092842019-04-21 6:18:311969 days ago1555827511IN
0x46EC27b5...2E31cBb8d
0 ETH0.000147061
Attack76091202019-04-21 5:43:031969 days ago1555825383IN
0x46EC27b5...2E31cBb8d
0 ETH0.000162061
Add Virus Def76083862019-04-21 2:50:401969 days ago1555815040IN
0x46EC27b5...2E31cBb8d
0 ETH0.000064081
Attack76027332019-04-20 5:28:061970 days ago1555738086IN
0x46EC27b5...2E31cBb8d
0 ETH0.000149121
Attack76025592019-04-20 4:50:381970 days ago1555735838IN
0x46EC27b5...2E31cBb8d
0 ETH0.000146991
Attack76024552019-04-20 4:29:031970 days ago1555734543IN
0x46EC27b5...2E31cBb8d
0 ETH0.000162061
Add Virus Def76024292019-04-20 4:23:341970 days ago1555734214IN
0x46EC27b5...2E31cBb8d
0 ETH0.000083191.3
Attack76008302019-04-19 22:22:251970 days ago1555712545IN
0x46EC27b5...2E31cBb8d
0 ETH0.00082
Attack76007742019-04-19 22:10:421970 days ago1555711842IN
0x46EC27b5...2E31cBb8d
0 ETH0.00082
Attack75943682019-04-18 22:24:371971 days ago1555626277IN
0x46EC27b5...2E31cBb8d
0 ETH0.000149061
Attack75941382019-04-18 21:37:451971 days ago1555623465IN
0x46EC27b5...2E31cBb8d
0 ETH0.000147061
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoArena

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-02-13
*/

pragma solidity ^0.4.25;

/*
* CryptoMiningWar - Build your own empire on Blockchain
* Author: InspiGames
* Website: https://cryptominingwar.github.io/
*/

library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    /**
    * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }
}
contract CryptoMiningWarInterface {
    uint256 public roundNumber;
    uint256 public deadline; 
    function addHashrate( address /*_addr*/, uint256 /*_value*/ ) external pure {}
    function subCrystal( address /*_addr*/, uint256 /*_value*/ ) external pure {}
    function addCrystal( address /*_addr*/, uint256 /*_value*/ ) external pure {}
    function isMiningWarContract() external pure returns(bool);
}
interface CryptoEngineerInterface {
    function addVirus(address /*_addr*/, uint256 /*_value*/) external pure;
    function subVirus(address /*_addr*/, uint256 /*_value*/) external pure;

    function isContractMiniGame() external pure returns( bool /*_isContractMiniGame*/);
    function isEngineerContract() external pure returns(bool);
    function calCurrentVirus(address /*_addr*/) external view returns(uint256 /*_currentVirus*/);
    function calCurrentCrystals(address /*_addr*/) external pure returns(uint256 /*_currentCrystals*/);
}
interface CryptoProgramFactoryInterface {
    function isContractMiniGame() external pure returns( bool /*_isContractMiniGame*/ );
    function isProgramFactoryContract() external pure returns(bool);

    function subPrograms(address /*_addr*/, uint256[] /*_programs*/) external;
    function getData(address _addr) external pure returns(uint256 /*_factoryLevel*/, uint256 /*_factoryTime*/, uint256[] /*memory _programs*/);
    function getProgramsValue() external pure returns(uint256[]);
}
interface MiniGameInterface {
    function isContractMiniGame() external pure returns( bool /*_isContractMiniGame*/ );
    function fallback() external payable;
}
interface MemoryArenaInterface {
    function setVirusDef(address /*_addr*/, uint256 /*_value*/) external pure;
    function setNextTimeAtk(address /*_addr*/, uint256 /*_value*/) external pure;
    function setEndTimeUnequalledDef(address /*_addr*/, uint256 /*_value*/) external pure;
    function setNextTimeArenaBonus(address /*_addr*/, uint256 /*_value*/) external pure;
    function setBonusPoint(address /*_addr*/, uint256 /*_value*/) external pure;

    function getData(address _addr) external view returns(uint256 /*virusDef*/, uint256 /*nextTimeAtk*/, uint256 /*endTimeUnequalledDef*/, uint256 /*nextTimeArenaBonus*/, uint256 /*bonusPoint*/);
    function isMemoryArenaContract() external pure returns(bool);
}
contract CryptoArena {
	using SafeMath for uint256;

	address public administrator;

    uint256 private VIRUS_NORMAL = 0;
    uint256 private HALF_TIME_ATK= 60 * 15;  
    uint256 private CRTSTAL_MINING_PERIOD = 86400;
    uint256 private VIRUS_MINING_PERIOD   = 86400;
    uint256 private ROUND_TIME_MINING_WAR = 86400 * 7;
    uint256 private TIME_DAY = 24 hours;

    CryptoMiningWarInterface      public MiningWar;
    CryptoEngineerInterface       public Engineer;
    CryptoProgramFactoryInterface public Factory;
    MemoryArenaInterface          public MemoryArena;

    // factory info
    mapping(uint256 => Virus)   public viruses;
     // minigame info
    mapping(address => bool)    public miniGames; 

    mapping(uint256 => uint256) public arenaBonus; 
   
    struct Virus {
        uint256 atk;
        uint256 def;
    }
    modifier isAdministrator()
    {
        require(msg.sender == administrator);
        _;
    }
    modifier onlyContractsMiniGame() 
    {
        require(miniGames[msg.sender] == true);
        _;
    }
    event Attack(address atkAddress, address defAddress, bool victory, uint256 reward, uint256 virusAtkDead, uint256 virusDefDead, uint256 atk, uint256 def, uint256 round); // 1 : crystals, 2: hashrate, 3: virus
    event Programs(uint256 programLv1, uint256 programLv2, uint256 programLv3, uint256 programLv4);
    event ArenaBonus(address player, uint256 bonus);

    constructor() public {
        administrator = msg.sender;
        // set interface contract
        setMiningWarInterface(0x1b002cd1ba79dfad65e8abfbb3a97826e4960fe5);
        setEngineerInterface(0xd7afbf5141a7f1d6b0473175f7a6b0a7954ed3d2);
        setFactoryInterface(0x0498e54b6598e96b7a42ade3d238378dc57b5bb2);
        setMemoryArenaInterface(0x5fafca56f6860dceeb6e7495a74a806545802895);

         // setting virusupd
        viruses[VIRUS_NORMAL] = Virus(1,1);
        // init arena bonus
        initArenaBonus();
    }
    function initArenaBonus() private 
    {
        arenaBonus[0] = 15000;
        arenaBonus[1] = 50000;
        arenaBonus[2] = 100000;
        arenaBonus[3] = 200000;
        arenaBonus[4] = 350000;
        arenaBonus[5] = 500000;
        arenaBonus[6] = 1500000;
    }
    function () public payable
    {
        
    }
    /** 
    * @dev MainContract used this function to verify game's contract
    */
    function isContractMiniGame() public pure returns( bool _isContractMiniGame )
    {
    	_isContractMiniGame = true;
    }
    function isArenaContract() public pure returns(bool)
    {
        return true;
    }
    function upgrade(address addr) public isAdministrator
    {
        selfdestruct(addr);
    }
    /** 
    * @dev Main Contract call this function to setup mini game.
    */
    function setupMiniGame( uint256 /*_miningWarRoundNumber*/, uint256 /*_miningWarDeadline*/ ) public pure
    {

    }
    //--------------------------------------------------------------------------
    // ADMIN ACTION
    //--------------------------------------------------------------------------
    function setArenaBonus(uint256 idx, uint256 _value) public isAdministrator
    {
        arenaBonus[idx] = _value;
    }
    //--------------------------------------------------------------------------
    // SETTING CONTRACT MINI GAME 
    //--------------------------------------------------------------------------
    function setContractsMiniGame( address _addr ) public isAdministrator 
    {
        MiniGameInterface MiniGame = MiniGameInterface( _addr );
        if( MiniGame.isContractMiniGame() == false ) revert(); 

        miniGames[_addr] = true;
    }
    /**
    * @dev remove mini game contract from main contract
    * @param _addr mini game contract address
    */
    function removeContractMiniGame(address _addr) public isAdministrator
    {
        miniGames[_addr] = false;
    }
    // ---------------------------------------------------------------------------------------
    // SET INTERFACE CONTRACT
    // ---------------------------------------------------------------------------------------
    
    function setMiningWarInterface(address _addr) public isAdministrator
    {
        CryptoMiningWarInterface miningWarInterface = CryptoMiningWarInterface(_addr);

        require(miningWarInterface.isMiningWarContract() == true);
                
        MiningWar = miningWarInterface;
    }
    function setEngineerInterface(address _addr) public isAdministrator
    {
        CryptoEngineerInterface engineerInterface = CryptoEngineerInterface(_addr);
        
        require(engineerInterface.isEngineerContract() == true);

        Engineer = engineerInterface;
    }
    
    function setFactoryInterface(address _addr) public isAdministrator
    {
        CryptoProgramFactoryInterface factoryInterface = CryptoProgramFactoryInterface(_addr);
        
        // require(factoryInterface.isProgramFactoryContract() == true);

        Factory = factoryInterface;
    }
    function setMemoryArenaInterface(address _addr) public isAdministrator
    {
        MemoryArenaInterface memoryArenaInterface = MemoryArenaInterface(_addr);
        
        require(memoryArenaInterface.isMemoryArenaContract() == true);

        MemoryArena = memoryArenaInterface;
    }

    // --------------------------------------------------------------------------------------------------------------
    // FUCTION FOR NEXT VERSION
    // --------------------------------------------------------------------------------------------------------------
    /**
    * @dev additional time unequalled defence 
    * @param _addr player address 
    */
    function setVirusDef(address _addr, uint256 _value) public isAdministrator
    {
        MemoryArena.setVirusDef(_addr, SafeMath.mul(_value, VIRUS_MINING_PERIOD));
    }
    function setAtkNowForPlayer(address _addr) public onlyContractsMiniGame
    {
        MemoryArena.setNextTimeAtk(_addr, now);
    }
    function setPlayerVirusDef(address _addr, uint256 _value) public onlyContractsMiniGame
    {     
        MemoryArena.setVirusDef(_addr, SafeMath.mul(_value, VIRUS_MINING_PERIOD));
    } 
    function addVirusDef(address _addr, uint256 _virus) public
    {
        require(miniGames[msg.sender] == true || msg.sender == _addr);

        Engineer.subVirus(_addr, _virus);
        
        uint256 virusDef;
        (virusDef, , , ,) = MemoryArena.getData(_addr);
        virusDef += SafeMath.mul(_virus, VIRUS_MINING_PERIOD);

        MemoryArena.setVirusDef(_addr, virusDef);
    }
    function subVirusDef(address _addr, uint256 _virus) public onlyContractsMiniGame
    {        
        _virus = SafeMath.mul(_virus, VIRUS_MINING_PERIOD);
        uint256 virusDef;
        (virusDef, , , ,) = MemoryArena.getData(_addr);

        if (virusDef < _virus) revert();

        virusDef -= _virus;
        MemoryArena.setVirusDef(_addr, virusDef);
    }
    function addTimeUnequalledDefence(address _addr, uint256 _value) public onlyContractsMiniGame
    {
        uint256 endTimeUnequalledDef;
        (,,endTimeUnequalledDef,,) = MemoryArena.getData(_addr);
        if (endTimeUnequalledDef < now) endTimeUnequalledDef = now;
        
        MemoryArena.setEndTimeUnequalledDef(_addr, SafeMath.add(endTimeUnequalledDef, _value));
    }
    // --------------------------------------------------------------------------------------------------------------
    // MAIN CONTENT
    // --------------------------------------------------------------------------------------------------------------
    function setVirusInfo(uint256 _atk, uint256 _def) public isAdministrator
    {
        Virus storage v = viruses[VIRUS_NORMAL];
        v.atk = _atk;
        v.def = _def;
    }

    /**
    * @dev ATTACK
    * _programs[0]: + 10% _virus;
    * _programs[1]: revival 15 % _virus if this atk lose(not use item before)
    * _programs[2]: + 20% dame
    * _programs[3]: -5% virus defence of player you want attack
    */
    function attack(address _defAddress, uint256 _virus, uint256[] _programs) public
    {
        require(validateAttack(msg.sender, _defAddress) == true);
        require(_programs.length == 4);
        require(validatePrograms(_programs) == true);

        Factory.subPrograms(msg.sender, _programs);

        MemoryArena.setNextTimeAtk(msg.sender, now + HALF_TIME_ATK);
        uint256 virusDef; // def of player def
        (virusDef, , , ,) = MemoryArena.getData(_defAddress);
        if (virusDef == 0) return endAttack(_defAddress, true, 0, 0, SafeMath.mul(_virus, VIRUS_MINING_PERIOD), 0, 1, _programs);

        Engineer.subVirus(msg.sender, _virus);

        uint256[] memory programsValue = Factory.getProgramsValue(); 

        firstAttack(_defAddress, SafeMath.mul(_virus, VIRUS_MINING_PERIOD), _programs, programsValue, virusDef);
    }
    function firstAttack(address _defAddress, uint256 _virus, uint256[] _programs, uint256[] programsValue, uint256 virusDef) 
    private 
    {
        uint256 atk;
        uint256 def;
        uint256 virusAtkDead;
        uint256 virusDefDead;
        bool victory;
        
        (atk, def, virusAtkDead, virusDefDead, victory) = getResultAtk(msg.sender, _defAddress, _virus, _programs, programsValue, virusDef, true);

        if (_virus > virusAtkDead)
            Engineer.addVirus(msg.sender, SafeMath.div(SafeMath.sub(_virus, virusAtkDead), VIRUS_MINING_PERIOD));
        
        endAttack(_defAddress, victory, SafeMath.div(virusAtkDead, VIRUS_MINING_PERIOD), SafeMath.div(virusDefDead, VIRUS_MINING_PERIOD), atk, def, 1, _programs);

        if (victory == false && _programs[1] == 1)
            againAttack(_defAddress, SafeMath.div(SafeMath.mul(SafeMath.mul(_virus, VIRUS_MINING_PERIOD), programsValue[1]), 100), programsValue); // revival 15 % _virus if this atk lose(not use item before)
    }
    function againAttack(address _defAddress, uint256 _virus, uint256[] programsValue) private returns(bool victory)
    {
        uint256 virusDef; // def of player def
        (virusDef, , , ,) = MemoryArena.getData(_defAddress);
        uint256[] memory programs;
        
        uint256 atk;
        uint256 def;
        uint256 virusDefDead;
        
        (atk, def, , virusDefDead, victory) = getResultAtk(msg.sender, _defAddress, _virus, programs, programsValue, virusDef, false);

        endAttack(_defAddress, victory, 0,  SafeMath.div(virusDefDead, VIRUS_MINING_PERIOD), atk, def, 2, programs);
    }
    function getResultAtk(address atkAddress, address defAddress, uint256 _virus, uint256[] _programs, uint256[] programsValue, uint256 virusDef, bool isFirstAttack)
    private  
    returns(
        uint256 atk,
        uint256 def,
        uint256 virusAtkDead,
        uint256 virusDefDead,
        bool victory
    ){
        atk             = _virus; 
        uint256 rateAtk = 50 + randomNumber(atkAddress, 1, 101);
        uint256 rateDef = 50 + randomNumber(defAddress, rateAtk, 101);
        
        if (_programs[0] == 1 && isFirstAttack == true) // + 10% _virus;
            atk += SafeMath.div(SafeMath.mul(atk, programsValue[0]), 100); 
        if (_programs[3] == 1 && isFirstAttack == true) {// -5% virus defence of player you want attack
            virusDef = SafeMath.sub(virusDef, SafeMath.div(SafeMath.mul(virusDef, programsValue[3]), 100)); 
            MemoryArena.setVirusDef(defAddress, virusDef); 
        }    
        atk = SafeMath.div(SafeMath.mul(SafeMath.mul(atk, viruses[VIRUS_NORMAL].atk), rateAtk), 100);
        def = SafeMath.div(SafeMath.mul(SafeMath.mul(virusDef, viruses[VIRUS_NORMAL].def), rateDef), 100);

        if (_programs[2] == 1 && isFirstAttack == true)  //+ 20% dame
            atk += SafeMath.div(SafeMath.mul(atk, programsValue[2]), 100);

        if (atk >= def) {
            virusAtkDead = SafeMath.min(_virus, SafeMath.div(SafeMath.mul(def, 100), SafeMath.mul(viruses[VIRUS_NORMAL].atk, rateAtk)));
            virusDefDead = virusDef;
            victory      = true;
        } else {
            virusAtkDead = _virus;
            virusDefDead = SafeMath.min(virusDef, SafeMath.div(SafeMath.mul(atk, 100), SafeMath.mul(viruses[VIRUS_NORMAL].def, rateDef)));
        }

        MemoryArena.setVirusDef(defAddress, SafeMath.sub(virusDef, virusDefDead));
    }
    function endAttack(address _defAddress, bool victory, uint256 virusAtkDead, uint256 virusDefDead, uint256 atk, uint256 def, uint256 round, uint256[] programs) private 
    {
        uint256 reward = 0;
        if (victory == true) {
            uint256 pDefCrystals = Engineer.calCurrentCrystals(_defAddress);
            // subtract random 10% to 50% current crystals of player defence
            uint256 rate = 10 + randomNumber(_defAddress, pDefCrystals, 41);
            reward = SafeMath.div(SafeMath.mul(pDefCrystals, rate),100);

            if (reward > 0) {
                MiningWar.subCrystal(_defAddress, reward);    
                MiningWar.addCrystal(msg.sender, reward);
            }
            updateBonusPoint(msg.sender);
        }
        emit Attack(msg.sender, _defAddress, victory, reward, virusAtkDead, virusDefDead, atk, def, round);
        if (round == 1) emit Programs( programs[0], programs[1], programs[2], programs[3]);
    }
    function updateBonusPoint(address _addr) private
    {
        uint256 nextTimeArenaBonus;
        uint256 bonusPoint;
        (,,,nextTimeArenaBonus, bonusPoint) = MemoryArena.getData(_addr);

        if (now >= nextTimeArenaBonus) {
            bonusPoint += 1;
        }
        if (bonusPoint == 3) {
            bonusPoint = 0;
            nextTimeArenaBonus = now + TIME_DAY;
            uint256 noDayStartMiningWar = getNoDayStartMiningWar();
            MiningWar.addCrystal(_addr, arenaBonus[noDayStartMiningWar - 1]);

            emit ArenaBonus(_addr, arenaBonus[noDayStartMiningWar - 1]);
        }
        MemoryArena.setNextTimeArenaBonus(_addr, nextTimeArenaBonus);
        MemoryArena.setBonusPoint(_addr, bonusPoint);
    }
    function validateAttack(address _atkAddress, address _defAddress) private view returns(bool _status) 
    {
        uint256 nextTimeAtk;
        (,nextTimeAtk,,,) = MemoryArena.getData(_atkAddress); 
        if (
            _atkAddress != _defAddress &&
            nextTimeAtk <= now &&
            canAttack(_defAddress) == true
            ) {
            _status = true;
        }
    } 
    function validatePrograms(uint256[] _programs) private pure returns(bool _status)
    {
        _status = true;
        for(uint256 idx = 0; idx < _programs.length; idx++) {
            if (_programs[idx] != 0 && _programs[idx] != 1) _status = false;
        }
    }
    function canAttack(address _addr) private view returns(bool _canAtk)
    {
        uint256 endTimeUnequalledDef;
        (,,endTimeUnequalledDef,,) = MemoryArena.getData(_addr); 
        if ( 
            endTimeUnequalledDef < now &&
            Engineer.calCurrentCrystals(_addr) >= 5000
            ) {
            _canAtk = true;
        }
    }
    // --------------------------------------------------------------------------------------------------------------
    // CALL FUNCTION
    // --------------------------------------------------------------------------------------------------------------
    function getData(address _addr) 
    public
    view
    returns(
        uint256 _virusDef,
        uint256 _nextTimeAtk,
        uint256 _endTimeUnequalledDef,
        bool    _canAtk,
        // engineer
        uint256 _currentVirus, 
        // mingin war
        uint256 _currentCrystals
    ) {
        (_virusDef, _nextTimeAtk, _endTimeUnequalledDef, ,) = MemoryArena.getData(_addr);
        _virusDef            = SafeMath.div(_virusDef, VIRUS_MINING_PERIOD);
        _currentVirus        = SafeMath.div(Engineer.calCurrentVirus(_addr), VIRUS_MINING_PERIOD);
        _currentCrystals     = Engineer.calCurrentCrystals(_addr);
        _canAtk              = canAttack(_addr);
    }
    function getDataForUI(address _addr) 
    public
    view
    returns(
        uint256 _virusDef,
        uint256 _nextTimeAtk,
        uint256 _endTimeUnequalledDef,
        uint256 _nextTimeArenaBonus,
        uint256 _bonusPoint,
        bool    _canAtk,
        // engineer
        uint256 _currentVirus, 
        // mingin war
        uint256 _currentCrystals
    ) {
        (_virusDef, _nextTimeAtk, _endTimeUnequalledDef, _nextTimeArenaBonus, _bonusPoint) = MemoryArena.getData(_addr);
        _virusDef            = SafeMath.div(_virusDef, VIRUS_MINING_PERIOD);
        _currentVirus        = SafeMath.div(Engineer.calCurrentVirus(_addr), VIRUS_MINING_PERIOD);
        _currentCrystals     = Engineer.calCurrentCrystals(_addr);
        _canAtk              = canAttack(_addr);
    }
    // --------------------------------------------------------------------------------------------------------------
    // INTERNAL FUNCTION
    // --------------------------------------------------------------------------------------------------------------
    function randomNumber(address _addr, uint256 randNonce, uint256 _maxNumber) private view returns(uint256)
    {
        return uint256(keccak256(abi.encodePacked(now, _addr, randNonce))) % _maxNumber;
    }
    function getNoDayStartMiningWar() public view returns(uint256)
    {
        uint256 deadline = MiningWar.deadline();
        if (deadline < now) return 7;
        uint256 timeEndMiningWar  = deadline - now;
        uint256 noDayEndMiningWar = SafeMath.div(timeEndMiningWar, TIME_DAY);
        return SafeMath.sub(7, noDayEndMiningWar);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setFactoryInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"viruses","outputs":[{"name":"atk","type":"uint256"},{"name":"def","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idx","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"setArenaBonus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isContractMiniGame","outputs":[{"name":"_isContractMiniGame","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_virus","type":"uint256"}],"name":"addVirusDef","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getData","outputs":[{"name":"_virusDef","type":"uint256"},{"name":"_nextTimeAtk","type":"uint256"},{"name":"_endTimeUnequalledDef","type":"uint256"},{"name":"_canAtk","type":"bool"},{"name":"_currentVirus","type":"uint256"},{"name":"_currentCrystals","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_atk","type":"uint256"},{"name":"_def","type":"uint256"}],"name":"setVirusInfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MemoryArena","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"setPlayerVirusDef","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setAtkNowForPlayer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setContractsMiniGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setMemoryArenaInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isArenaContract","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setMiningWarInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_virus","type":"uint256"}],"name":"subVirusDef","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"removeContractMiniGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"arenaBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"miniGames","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"Engineer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"setupMiniGame","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MiningWar","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"Factory","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"getDataForUI","outputs":[{"name":"_virusDef","type":"uint256"},{"name":"_nextTimeAtk","type":"uint256"},{"name":"_endTimeUnequalledDef","type":"uint256"},{"name":"_nextTimeArenaBonus","type":"uint256"},{"name":"_bonusPoint","type":"uint256"},{"name":"_canAtk","type":"bool"},{"name":"_currentVirus","type":"uint256"},{"name":"_currentCrystals","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"setVirusDef","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_value","type":"uint256"}],"name":"addTimeUnequalledDefence","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"administrator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNoDayStartMiningWar","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_defAddress","type":"address"},{"name":"_virus","type":"uint256"},{"name":"_programs","type":"uint256[]"}],"name":"attack","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setEngineerInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"atkAddress","type":"address"},{"indexed":false,"name":"defAddress","type":"address"},{"indexed":false,"name":"victory","type":"bool"},{"indexed":false,"name":"reward","type":"uint256"},{"indexed":false,"name":"virusAtkDead","type":"uint256"},{"indexed":false,"name":"virusDefDead","type":"uint256"},{"indexed":false,"name":"atk","type":"uint256"},{"indexed":false,"name":"def","type":"uint256"},{"indexed":false,"name":"round","type":"uint256"}],"name":"Attack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"programLv1","type":"uint256"},{"indexed":false,"name":"programLv2","type":"uint256"},{"indexed":false,"name":"programLv3","type":"uint256"},{"indexed":false,"name":"programLv4","type":"uint256"}],"name":"Programs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"bonus","type":"uint256"}],"name":"ArenaBonus","type":"event"}]

60806040526000600155610384600255620151806003556201518060045562093a80600555620151806006553480156200003857600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000a7731b002cd1ba79dfad65e8abfbb3a97826e4960fe562000193640100000000026401000000009004565b620000d573d7afbf5141a7f1d6b0473175f7a6b0a7954ed3d2620002ee640100000000026401000000009004565b62000103730498e54b6598e96b7a42ade3d238378dc57b5bb262000449640100000000026401000000009004565b62000131735fafca56f6860dceeb6e7495a74a806545802895620004ef640100000000026401000000009004565b6040805190810160405280600181526020016001815250600b6000600154815260200190815260200160002060008201518160000155602082015181600101559050506200018d6200064a640100000000026401000000009004565b6200070d565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620001f157600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663688b5c2b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156200025d57600080fd5b505af115801562000272573d6000803e3d6000fd5b505050506040513d60208110156200028957600080fd5b81019080805190602001909291905050501515141515620002a957600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200034c57600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663b9a59b836040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620003b857600080fd5b505af1158015620003cd573d6000803e3d6000fd5b505050506040513d6020811015620003e457600080fd5b810190808051906020019092919050505015151415156200040457600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515620004a757600080fd5b81905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200054d57600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663d83cecfc6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620005b957600080fd5b505af1158015620005ce573d6000803e3d6000fd5b505050506040513d6020811015620005e557600080fd5b810190808051906020019092919050505015151415156200060557600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b613a98600d60008081526020019081526020016000208190555061c350600d60006001815260200190815260200160002081905550620186a0600d6000600281526020019081526020016000208190555062030d40600d6000600381526020019081526020016000208190555062055730600d600060048152602001908152602001600020819055506207a120600d600060058152602001908152602001600020819055506216e360600d60006006815260200190815260200160002081905550565b6144ae806200071d6000396000f300608060405260043610610180576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f0101461018257806319afa824146101c55780631bb57b9614610208578063298b0457146102505780633281d57614610287578063374e164c146102b657806338266b22146103035780634bbb58b2146103815780636daf547b146103b85780637df841cd1461040f5780637f3e4d1b1461045c57806384ffcb5d1461049f5780638877ccd5146104e25780638890e13d146105255780638a56b2301461055457806398598905146105975780639ff12bba146105e4578063a94b7ea114610627578063b239dac614610668578063b4bd7d41146106c3578063be7ccd7e1461071a578063c3f656f114610751578063c83dd231146107a8578063e7597784146107ff578063e9c0b8f61461088b578063f0af0844146108d8578063f53d0a8e14610925578063fb75dc9f1461097c578063feb31939146109a7578063ffa651b614610a37575b005b34801561018e57600080fd5b506101c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a7a565b005b3480156101d157600080fd5b50610206600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aee565b005b34801561021457600080fd5b5061023360048036038101908080359060200190929190505050610b93565b604051808381526020018281526020019250505060405180910390f35b34801561025c57600080fd5b506102856004803603810190808035906020019092919080359060200190929190505050610bb7565b005b34801561029357600080fd5b5061029c610c2e565b604051808215151515815260200191505060405180910390f35b3480156102c257600080fd5b50610301600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c37565b005b34801561030f57600080fd5b50610344600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fcb565b6040518087815260200186815260200185815260200184151515158152602001838152602001828152602001965050505050505060405180910390f35b34801561038d57600080fd5b506103b66004803603810190808035906020019092919080359060200190929190505050611324565b005b3480156103c457600080fd5b506103cd6113af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041b57600080fd5b5061045a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113d5565b005b34801561046857600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611520565b005b3480156104ab57600080fd5b506104e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b3480156104ee57600080fd5b50610523600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117cb565b005b34801561053157600080fd5b5061053a611921565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b50610595600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061192a565b005b3480156105a357600080fd5b506105e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a80565b005b3480156105f057600080fd5b50610625600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d11565b005b34801561063357600080fd5b5061065260048036038101908080359060200190929190505050611dc7565b6040518082815260200191505060405180910390f35b34801561067457600080fd5b506106a9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ddf565b604051808215151515815260200191505060405180910390f35b3480156106cf57600080fd5b506106d8611dff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072657600080fd5b5061074f6004803603810190808035906020019092919080359060200190929190505050611e25565b005b34801561075d57600080fd5b50610766611e29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b457600080fd5b506107bd611e4f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080b57600080fd5b50610840600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e75565b60405180898152602001888152602001878152602001868152602001858152602001841515151581526020018381526020018281526020019850505050505050505060405180910390f35b34801561089757600080fd5b506108d6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121d8565b005b3480156108e457600080fd5b50610923600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061231f565b005b34801561093157600080fd5b5061093a6125a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098857600080fd5b506109916125cc565b6040518082815260200191505060405180910390f35b3480156109b357600080fd5b50610a35600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506126cd565b005b348015610a4357600080fd5b50610a78600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c88565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ad557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16ff5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b4b57600080fd5b81905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600b6020528060005260406000206000915090508060000154908060010154905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1257600080fd5b80600d6000848152602001908152602001600020819055505050565b60006001905090565b600060011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610cc357508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610cce57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663920775d484846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d9357600080fd5b505af1158015610da7573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b505050506040513d60a0811015610e9257600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091925090915090505080915050610ee582600454612dde565b81019050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f684836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610fae57600080fd5b505af1158015610fc2573d6000803e3d6000fd5b50505050505050565b600080600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b505050506040513d60a08110156110bb57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090505080965081975082985050505061110f86600454612e19565b9550611214600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378f55622896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156111d157600080fd5b505af11580156111e5573d6000803e3d6000fd5b505050506040513d60208110156111fb57600080fd5b8101908080519060200190929190505050600454612e19565b9150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a02886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506040513d60208110156112fd57600080fd5b8101908080519060200190929190505050905061131987612e34565b925091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561138157600080fd5b600b600060015481526020019081526020016000209050828160000181905550818160010181905550505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561143457600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68361147f84600454612dde565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561150457600080fd5b505af1158015611518573d6000803e3d6000fd5b505050505050565b60011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561157f57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f872334682426040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561164457600080fd5b505af1158015611658573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116bc57600080fd5b819050600015158173ffffffffffffffffffffffffffffffffffffffff16633281d5766040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b81019080805190602001909291905050501515141561176f57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561182857600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663d83cecfc6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b810190808051906020019092919050505015151415156118dc57600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006001905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561198757600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663688b5c2b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156119f257600080fd5b505af1158015611a06573d6000803e3d6000fd5b505050506040513d6020811015611a1c57600080fd5b81019080805190602001909291905050501515141515611a3b57600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611ae157600080fd5b611aed82600454612dde565b9150600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015611bac57600080fd5b505af1158015611bc0573d6000803e3d6000fd5b505050506040513d60a0811015611bd657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192509091509050508091505081811015611c2a57600080fd5b8181039050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f684836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611cf457600080fd5b505af1158015611d08573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d6c57600080fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915090505481565b600c6020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b228a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b505050506040513d60a0811015611f6857600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050809850819950829a50839b50849c505050505050611fc188600454612e19565b97506120c6600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378f556228b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561208357600080fd5b505af1158015612097573d6000803e3d6000fd5b505050506040513d60208110156120ad57600080fd5b8101908080519060200190929190505050600454612e19565b9150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a028a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561218557600080fd5b505af1158015612199573d6000803e3d6000fd5b505050506040513d60208110156121af57600080fd5b810190808051906020019092919050505090506121cb89612e34565b9250919395975091939597565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561223357600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68361227e84600454612dde565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561230357600080fd5b505af1158015612317573d6000803e3d6000fd5b505050505050565b600060011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561238057600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b15801561243d57600080fd5b505af1158015612451573d6000803e3d6000fd5b505050506040513d60a081101561246757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293509091925090505080915050428110156124bc574290505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663805851c284612505848661307f565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561258a57600080fd5b505af115801561259e573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329dcb0cf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561265857600080fd5b505af115801561266c573d6000803e3d6000fd5b505050506040513d602081101561268257600080fd5b81019080805190602001909291905050509250428310156126a657600793506126c7565b42830391506126b782600654612e19565b90506126c460078261309d565b93505b50505090565b60006060600115156126df33876130b6565b15151415156126ed57600080fd5b600483511415156126fd57600080fd5b6001151561270a8461324d565b151514151561271857600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632222e43a33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156127f85780820151818401526020810190506127dd565b505050509050019350505050600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87233463360025442016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156128ff57600080fd5b505af1158015612913573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b1580156129d457600080fd5b505af11580156129e8573d6000803e3d6000fd5b505050506040513d60a08110156129fe57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919250909150905050809250506000821415612a7257612a6d856001600080612a6389600454612dde565b600060018a6132bf565b612c81565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663920775d433866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612b3757600080fd5b505af1158015612b4b573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663669a828b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015612bd557600080fd5b505af1158015612be9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612c1357600080fd5b810190808051640100000000811115612c2b57600080fd5b82810190506020810184811115612c4157600080fd5b8151856020820283011164010000000082111715612c5e57600080fd5b50509291905050509050612c8085612c7886600454612dde565b85848661375c565b5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ce557600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663b9a59b836040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612d5057600080fd5b505af1158015612d64573d6000803e3d6000fd5b505050506040513d6020811015612d7a57600080fd5b81019080805190602001909291905050501515141515612d9957600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000806000841415612df35760009150612e12565b8284029050828482811515612e0457fe5b04141515612e0e57fe5b8091505b5092915050565b6000808284811515612e2757fe5b0490508091505092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b505050506040513d60a0811015612f1e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293509091925090505080915050428110801561306f5750611388600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a02856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561303157600080fd5b505af1158015613045573d6000803e3d6000fd5b505050506040513d602081101561305b57600080fd5b810190808051906020019092919050505010155b1561307957600191505b50919050565b600080828401905083811015151561309357fe5b8091505092915050565b60008282111515156130ab57fe5b818303905092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b15801561317657600080fd5b505af115801561318a573d6000803e3d6000fd5b505050506040513d60a08110156131a057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929350909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132245750428111155b801561323c57506001151561323884612e34565b1515145b1561324657600191505b5092915050565b60008060019150600090505b82518110156132b9576000838281518110151561327257fe5b90602001906020020151141580156132a257506001838281518110151561329557fe5b9060200190602002015114155b156132ac57600091505b8080600101915050613259565b50919050565b6000806000809250600115158a151514156135c357600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a028c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561339157600080fd5b505af11580156133a5573d6000803e3d6000fd5b505050506040513d60208110156133bb57600080fd5b810190808051906020019092919050505091506133da8b836029613929565b600a0190506133f36133ec8383612dde565b6064612e19565b925060008311156135b957600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b04eb6398c856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156134c357600080fd5b505af11580156134d7573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6e212ea33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156135a057600080fd5b505af11580156135b4573d6000803e3d6000fd5b505050505b6135c233613a10565b5b7fb521f84624afe810424a8cbb85a0740a5999831e697a75fa208455349473e7c7338c8c868d8d8d8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188151515158152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390a1600185141561374f577fe71af83b34f734e9b87bbcb0fba4bf4e7c28c768c814fe98932dc7ce791d0fb68460008151811015156136cf57fe5b906020019060200201518560018151811015156136e857fe5b9060200190602002015186600281518110151561370157fe5b9060200190602002015187600381518110151561371a57fe5b906020019060200201516040518085815260200184815260200183815260200182815260200194505050505060405180910390a15b5050505050505050505050565b6000806000806000613774338b8b8b8b8b6001613eac565b80955081965082975083985084995050505050508289111561388257600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec6f772d336137e46137dc8d8861309d565b600454612e19565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561386957600080fd5b505af115801561387d573d6000803e3d6000fd5b505050505b6138a98a8261389386600454612e19565b61389f86600454612e19565b898960018f6132bf565b600015158115151480156138d5575060018860018151811015156138c957fe5b90602001906020020151145b1561391d5761391b8a61391561390e6138f08d600454612dde565b8b60018151811015156138ff57fe5b90602001906020020151612dde565b6064612e19565b896142e5565b505b50505050505050505050565b600081428585604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156139cc57805182526020820191506020810190506020830392506139a7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060019004811515613a0657fe5b0690509392505050565b6000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b505050506040513d60a0811015613afc57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293509091925090915080935081945050508242101515613b59576001820191505b6003821415613cec576000915060065442019250613b756125cc565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6e212ea85600d6000600186038152602001908152602001600020546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613c5257600080fd5b505af1158015613c66573d6000803e3d6000fd5b505050507fea7cd0de76ac8eb0d5724fb1899c743126230de73befa0953b014e1be7d159ea84600d600060018503815260200190815260200160002054604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c1c840885856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613db157600080fd5b505af1158015613dc5573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b419e98385846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613e8e57600080fd5b505af1158015613ea2573d6000803e3d6000fd5b5050505050505050565b60008060008060008060008b9650613ec78e60016065613929565b6032019150613ed88d836065613929565b603201905060018b6000815181101515613eee57fe5b90602001906020020151148015613f09575060011515881515145b15613f3f57613f3a613f33888c6000815181101515613f2457fe5b90602001906020020151612dde565b6064612e19565b870196505b60018b6003815181101515613f5057fe5b90602001906020020151148015613f6b575060011515881515145b1561408557613fa589613fa0613f998c8e6003815181101515613f8a57fe5b90602001906020020151612dde565b6064612e19565b61309d565b9850600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68e8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561406c57600080fd5b505af1158015614080573d6000803e3d6000fd5b505050505b6140ba6140b36140ad89600b6000600154815260200190815260200160002060000154612dde565b84612dde565b6064612e19565b96506140f16140ea6140e48b600b6000600154815260200190815260200160002060010154612dde565b83612dde565b6064612e19565b955060018b600281518110151561410457fe5b9060200190602002015114801561411f575060011515881515145b1561415557614150614149888c600281518110151561413a57fe5b90602001906020020151612dde565b6064612e19565b870196505b85871015156141aa5761419c8c614197614170896064612dde565b614192600b600060015481526020019081526020016000206000015487612dde565b612e19565b614469565b9450889350600192506141ee565b8b94506141eb896141e66141bf8a6064612dde565b6141e1600b600060015481526020019081526020016000206001015486612dde565b612e19565b614469565b93505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68e6142378c8861309d565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156142bc57600080fd5b505af11580156142d0573d6000803e3d6000fd5b50505050505097509750975097509792505050565b60008060606000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b228a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b1580156143ac57600080fd5b505af11580156143c0573d6000803e3d6000fd5b505050506040513d60a08110156143d657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192509091509050508095505061442d338a8a878b8a6000613eac565b9091508099508194508295508396505050505061445d8987600061445385600454612e19565b878760028b6132bf565b50505050509392505050565b6000818310614478578161447a565b825b9050929150505600a165627a7a723058203826de86df67238e25a96e679a9b4e6f5b1fc7eaefd6782b42b9f898d689cbee0029

Deployed Bytecode

0x608060405260043610610180576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f0101461018257806319afa824146101c55780631bb57b9614610208578063298b0457146102505780633281d57614610287578063374e164c146102b657806338266b22146103035780634bbb58b2146103815780636daf547b146103b85780637df841cd1461040f5780637f3e4d1b1461045c57806384ffcb5d1461049f5780638877ccd5146104e25780638890e13d146105255780638a56b2301461055457806398598905146105975780639ff12bba146105e4578063a94b7ea114610627578063b239dac614610668578063b4bd7d41146106c3578063be7ccd7e1461071a578063c3f656f114610751578063c83dd231146107a8578063e7597784146107ff578063e9c0b8f61461088b578063f0af0844146108d8578063f53d0a8e14610925578063fb75dc9f1461097c578063feb31939146109a7578063ffa651b614610a37575b005b34801561018e57600080fd5b506101c3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a7a565b005b3480156101d157600080fd5b50610206600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610aee565b005b34801561021457600080fd5b5061023360048036038101908080359060200190929190505050610b93565b604051808381526020018281526020019250505060405180910390f35b34801561025c57600080fd5b506102856004803603810190808035906020019092919080359060200190929190505050610bb7565b005b34801561029357600080fd5b5061029c610c2e565b604051808215151515815260200191505060405180910390f35b3480156102c257600080fd5b50610301600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c37565b005b34801561030f57600080fd5b50610344600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fcb565b6040518087815260200186815260200185815260200184151515158152602001838152602001828152602001965050505050505060405180910390f35b34801561038d57600080fd5b506103b66004803603810190808035906020019092919080359060200190929190505050611324565b005b3480156103c457600080fd5b506103cd6113af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041b57600080fd5b5061045a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113d5565b005b34801561046857600080fd5b5061049d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611520565b005b3480156104ab57600080fd5b506104e0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165f565b005b3480156104ee57600080fd5b50610523600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117cb565b005b34801561053157600080fd5b5061053a611921565b604051808215151515815260200191505060405180910390f35b34801561056057600080fd5b50610595600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061192a565b005b3480156105a357600080fd5b506105e2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a80565b005b3480156105f057600080fd5b50610625600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d11565b005b34801561063357600080fd5b5061065260048036038101908080359060200190929190505050611dc7565b6040518082815260200191505060405180910390f35b34801561067457600080fd5b506106a9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ddf565b604051808215151515815260200191505060405180910390f35b3480156106cf57600080fd5b506106d8611dff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072657600080fd5b5061074f6004803603810190808035906020019092919080359060200190929190505050611e25565b005b34801561075d57600080fd5b50610766611e29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b457600080fd5b506107bd611e4f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561080b57600080fd5b50610840600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e75565b60405180898152602001888152602001878152602001868152602001858152602001841515151581526020018381526020018281526020019850505050505050505060405180910390f35b34801561089757600080fd5b506108d6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121d8565b005b3480156108e457600080fd5b50610923600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061231f565b005b34801561093157600080fd5b5061093a6125a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098857600080fd5b506109916125cc565b6040518082815260200191505060405180910390f35b3480156109b357600080fd5b50610a35600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506126cd565b005b348015610a4357600080fd5b50610a78600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c88565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ad557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16ff5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b4b57600080fd5b81905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600b6020528060005260406000206000915090508060000154908060010154905082565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c1257600080fd5b80600d6000848152602001908152602001600020819055505050565b60006001905090565b600060011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480610cc357508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610cce57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663920775d484846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d9357600080fd5b505af1158015610da7573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015610e6857600080fd5b505af1158015610e7c573d6000803e3d6000fd5b505050506040513d60a0811015610e9257600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091925090915090505080915050610ee582600454612dde565b81019050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f684836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610fae57600080fd5b505af1158015610fc2573d6000803e3d6000fd5b50505050505050565b600080600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b15801561109157600080fd5b505af11580156110a5573d6000803e3d6000fd5b505050506040513d60a08110156110bb57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090505080965081975082985050505061110f86600454612e19565b9550611214600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378f55622896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156111d157600080fd5b505af11580156111e5573d6000803e3d6000fd5b505050506040513d60208110156111fb57600080fd5b8101908080519060200190929190505050600454612e19565b9150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a02886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506040513d60208110156112fd57600080fd5b8101908080519060200190929190505050905061131987612e34565b925091939550919395565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561138157600080fd5b600b600060015481526020019081526020016000209050828160000181905550818160010181905550505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561143457600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68361147f84600454612dde565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561150457600080fd5b505af1158015611518573d6000803e3d6000fd5b505050505050565b60011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561157f57600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f872334682426040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561164457600080fd5b505af1158015611658573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116bc57600080fd5b819050600015158173ffffffffffffffffffffffffffffffffffffffff16633281d5766040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b81019080805190602001909291905050501515141561176f57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561182857600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663d83cecfc6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050506040513d60208110156118bd57600080fd5b810190808051906020019092919050505015151415156118dc57600080fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006001905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561198757600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663688b5c2b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156119f257600080fd5b505af1158015611a06573d6000803e3d6000fd5b505050506040513d6020811015611a1c57600080fd5b81019080805190602001909291905050501515141515611a3b57600080fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611ae157600080fd5b611aed82600454612dde565b9150600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015611bac57600080fd5b505af1158015611bc0573d6000803e3d6000fd5b505050506040513d60a0811015611bd657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192509091509050508091505081811015611c2a57600080fd5b8181039050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f684836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611cf457600080fd5b505af1158015611d08573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d6c57600080fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d6020528060005260406000206000915090505481565b600c6020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b228a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015611f3e57600080fd5b505af1158015611f52573d6000803e3d6000fd5b505050506040513d60a0811015611f6857600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050809850819950829a50839b50849c505050505050611fc188600454612e19565b97506120c6600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166378f556228b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561208357600080fd5b505af1158015612097573d6000803e3d6000fd5b505050506040513d60208110156120ad57600080fd5b8101908080519060200190929190505050600454612e19565b9150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a028a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561218557600080fd5b505af1158015612199573d6000803e3d6000fd5b505050506040513d60208110156121af57600080fd5b810190808051906020019092919050505090506121cb89612e34565b9250919395975091939597565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561223357600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68361227e84600454612dde565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561230357600080fd5b505af1158015612317573d6000803e3d6000fd5b505050505050565b600060011515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561238057600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b15801561243d57600080fd5b505af1158015612451573d6000803e3d6000fd5b505050506040513d60a081101561246757600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293509091925090505080915050428110156124bc574290505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663805851c284612505848661307f565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561258a57600080fd5b505af115801561259e573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329dcb0cf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561265857600080fd5b505af115801561266c573d6000803e3d6000fd5b505050506040513d602081101561268257600080fd5b81019080805190602001909291905050509250428310156126a657600793506126c7565b42830391506126b782600654612e19565b90506126c460078261309d565b93505b50505090565b60006060600115156126df33876130b6565b15151415156126ed57600080fd5b600483511415156126fd57600080fd5b6001151561270a8461324d565b151514151561271857600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632222e43a33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156127f85780820151818401526020810190506127dd565b505050509050019350505050600060405180830381600087803b15801561281e57600080fd5b505af1158015612832573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87233463360025442016040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156128ff57600080fd5b505af1158015612913573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b1580156129d457600080fd5b505af11580156129e8573d6000803e3d6000fd5b505050506040513d60a08110156129fe57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919250909150905050809250506000821415612a7257612a6d856001600080612a6389600454612dde565b600060018a6132bf565b612c81565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663920775d433866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612b3757600080fd5b505af1158015612b4b573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663669a828b6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015612bd557600080fd5b505af1158015612be9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506020811015612c1357600080fd5b810190808051640100000000811115612c2b57600080fd5b82810190506020810184811115612c4157600080fd5b8151856020820283011164010000000082111715612c5e57600080fd5b50509291905050509050612c8085612c7886600454612dde565b85848661375c565b5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ce557600080fd5b819050600115158173ffffffffffffffffffffffffffffffffffffffff1663b9a59b836040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015612d5057600080fd5b505af1158015612d64573d6000803e3d6000fd5b505050506040513d6020811015612d7a57600080fd5b81019080805190602001909291905050501515141515612d9957600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000806000841415612df35760009150612e12565b8284029050828482811515612e0457fe5b04141515612e0e57fe5b8091505b5092915050565b6000808284811515612e2757fe5b0490508091505092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b505050506040513d60a0811015612f1e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293509091925090505080915050428110801561306f5750611388600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a02856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561303157600080fd5b505af1158015613045573d6000803e3d6000fd5b505050506040513d602081101561305b57600080fd5b810190808051906020019092919050505010155b1561307957600191505b50919050565b600080828401905083811015151561309357fe5b8091505092915050565b60008282111515156130ab57fe5b818303905092915050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b15801561317657600080fd5b505af115801561318a573d6000803e3d6000fd5b505050506040513d60a08110156131a057600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929350909150905050809150508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156132245750428111155b801561323c57506001151561323884612e34565b1515145b1561324657600191505b5092915050565b60008060019150600090505b82518110156132b9576000838281518110151561327257fe5b90602001906020020151141580156132a257506001838281518110151561329557fe5b9060200190602002015114155b156132ac57600091505b8080600101915050613259565b50919050565b6000806000809250600115158a151514156135c357600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395360a028c6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561339157600080fd5b505af11580156133a5573d6000803e3d6000fd5b505050506040513d60208110156133bb57600080fd5b810190808051906020019092919050505091506133da8b836029613929565b600a0190506133f36133ec8383612dde565b6064612e19565b925060008311156135b957600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b04eb6398c856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156134c357600080fd5b505af11580156134d7573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6e212ea33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156135a057600080fd5b505af11580156135b4573d6000803e3d6000fd5b505050505b6135c233613a10565b5b7fb521f84624afe810424a8cbb85a0740a5999831e697a75fa208455349473e7c7338c8c868d8d8d8d8d604051808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188151515158152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390a1600185141561374f577fe71af83b34f734e9b87bbcb0fba4bf4e7c28c768c814fe98932dc7ce791d0fb68460008151811015156136cf57fe5b906020019060200201518560018151811015156136e857fe5b9060200190602002015186600281518110151561370157fe5b9060200190602002015187600381518110151561371a57fe5b906020019060200201516040518085815260200184815260200183815260200182815260200194505050505060405180910390a15b5050505050505050505050565b6000806000806000613774338b8b8b8b8b6001613eac565b80955081965082975083985084995050505050508289111561388257600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec6f772d336137e46137dc8d8861309d565b600454612e19565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561386957600080fd5b505af115801561387d573d6000803e3d6000fd5b505050505b6138a98a8261389386600454612e19565b61389f86600454612e19565b898960018f6132bf565b600015158115151480156138d5575060018860018151811015156138c957fe5b90602001906020020151145b1561391d5761391b8a61391561390e6138f08d600454612dde565b8b60018151811015156138ff57fe5b90602001906020020151612dde565b6064612e19565b896142e5565b505b50505050505050505050565b600081428585604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140182815260200193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156139cc57805182526020820191506020810190506020830392506139a7565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060019004811515613a0657fe5b0690509392505050565b6000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b22856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b158015613ad257600080fd5b505af1158015613ae6573d6000803e3d6000fd5b505050506040513d60a0811015613afc57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505090919293509091925090915080935081945050508242101515613b59576001820191505b6003821415613cec576000915060065442019250613b756125cc565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6e212ea85600d6000600186038152602001908152602001600020546040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613c5257600080fd5b505af1158015613c66573d6000803e3d6000fd5b505050507fea7cd0de76ac8eb0d5724fb1899c743126230de73befa0953b014e1be7d159ea84600d600060018503815260200190815260200160002054604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c1c840885856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613db157600080fd5b505af1158015613dc5573d6000803e3d6000fd5b50505050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b419e98385846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613e8e57600080fd5b505af1158015613ea2573d6000803e3d6000fd5b5050505050505050565b60008060008060008060008b9650613ec78e60016065613929565b6032019150613ed88d836065613929565b603201905060018b6000815181101515613eee57fe5b90602001906020020151148015613f09575060011515881515145b15613f3f57613f3a613f33888c6000815181101515613f2457fe5b90602001906020020151612dde565b6064612e19565b870196505b60018b6003815181101515613f5057fe5b90602001906020020151148015613f6b575060011515881515145b1561408557613fa589613fa0613f998c8e6003815181101515613f8a57fe5b90602001906020020151612dde565b6064612e19565b61309d565b9850600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68e8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561406c57600080fd5b505af1158015614080573d6000803e3d6000fd5b505050505b6140ba6140b36140ad89600b6000600154815260200190815260200160002060000154612dde565b84612dde565b6064612e19565b96506140f16140ea6140e48b600b6000600154815260200190815260200160002060010154612dde565b83612dde565b6064612e19565b955060018b600281518110151561410457fe5b9060200190602002015114801561411f575060011515881515145b1561415557614150614149888c600281518110151561413a57fe5b90602001906020020151612dde565b6064612e19565b870196505b85871015156141aa5761419c8c614197614170896064612dde565b614192600b600060015481526020019081526020016000206000015487612dde565b612e19565b614469565b9450889350600192506141ee565b8b94506141eb896141e66141bf8a6064612dde565b6141e1600b600060015481526020019081526020016000206001015486612dde565b612e19565b614469565b93505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e9c0b8f68e6142378c8861309d565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156142bc57600080fd5b505af11580156142d0573d6000803e3d6000fd5b50505050505097509750975097509792505050565b60008060606000806000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338266b228a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060a060405180830381600087803b1580156143ac57600080fd5b505af11580156143c0573d6000803e3d6000fd5b505050506040513d60a08110156143d657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192509091509050508095505061442d338a8a878b8a6000613eac565b9091508099508194508295508396505050505061445d8987600061445385600454612e19565b878760028b6132bf565b50505050509392505050565b6000818310614478578161447a565b825b9050929150505600a165627a7a723058203826de86df67238e25a96e679a9b4e6f5b1fc7eaefd6782b42b9f898d689cbee0029

Swarm Source

bzzr://3826de86df67238e25a96e679a9b4e6f5b1fc7eaefd6782b42b9f898d689cbee

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.