ETH Price: $3,309.32 (-1.67%)
 

Overview

ETH Balance

0.024301939112976048 ETH

Eth Value

$80.42 (@ $3,309.32/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Lottery59713962018-07-15 22:57:472369 days ago1531695467IN
0xdBbd9e60...Df8d238Cb
0 ETH0.003224665
Get Free Miner59420862018-07-11 1:30:252374 days ago1531272625IN
0xdBbd9e60...Df8d238Cb
0 ETH0.000193572.1
Buy Miner59420282018-07-11 1:16:212374 days ago1531271781IN
0xdBbd9e60...Df8d238Cb
0 ETH0.000539822.42
Buy Miner59324552018-07-09 9:46:182375 days ago1531129578IN
0xdBbd9e60...Df8d238Cb
0 ETH0.000364915
Buy Miner59295552018-07-08 21:47:172376 days ago1531086437IN
0xdBbd9e60...Df8d238Cb
0 ETH0.001555037
Buy Miner59295342018-07-08 21:43:132376 days ago1531086193IN
0xdBbd9e60...Df8d238Cb
0 ETH0.001497387
Buy Miner59292592018-07-08 20:34:562376 days ago1531082096IN
0xdBbd9e60...Df8d238Cb
0 ETH0.001679738
Withdraw Sell De...59290252018-07-08 19:39:292376 days ago1531078769IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0004745211
Buy Crystal59290042018-07-08 19:34:272376 days ago1531078467IN
0xdBbd9e60...Df8d238Cb
0.00000001 ETH0.0008160611
Get Free Miner59289962018-07-08 19:32:242376 days ago1531078344IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0008571911
Buy Crystal59289462018-07-08 19:21:052376 days ago1531077665IN
0xdBbd9e60...Df8d238Cb
0.00000001 ETH0.0008160611
Get Free Miner59289372018-07-08 19:19:092376 days ago1531077549IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0012673511
Buy Crystal59289022018-07-08 19:09:002376 days ago1531076940IN
0xdBbd9e60...Df8d238Cb
0.00000001 ETH0.0008160611
Get Free Miner59288912018-07-08 19:06:102376 days ago1531076770IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0005107511
Buy Crystal59288442018-07-08 18:56:452376 days ago1531076205IN
0xdBbd9e60...Df8d238Cb
0.00000001 ETH0.0008160611
Sell Crystal Dem...59288362018-07-08 18:53:502376 days ago1531076030IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0012696411
Get Free Miner59288282018-07-08 18:50:432376 days ago1531075843IN
0xdBbd9e60...Df8d238Cb
0 ETH0.000511111
Get Free Miner59288152018-07-08 18:46:402376 days ago1531075600IN
0xdBbd9e60...Df8d238Cb
0 ETH0.000511111
Lottery59287622018-07-08 18:34:492376 days ago1531074889IN
0xdBbd9e60...Df8d238Cb
0 ETH0.008072712
Lottery58858532018-07-01 9:42:362383 days ago1530438156IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0221695752
Buy Miner58858352018-07-01 9:37:482383 days ago1530437868IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0109392100
Buy Miner58858332018-07-01 9:37:352383 days ago1530437855IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0321464100
Buy Miner58858332018-07-01 9:37:352383 days ago1530437855IN
0xdBbd9e60...Df8d238Cb
0 ETH0.02499100
Buy Miner58858332018-07-01 9:37:352383 days ago1530437855IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0312898100
Buy Miner58858332018-07-01 9:37:352383 days ago1530437855IN
0xdBbd9e60...Df8d238Cb
0 ETH0.0305044100
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
59713962018-07-15 22:57:472369 days ago1531695467
0xdBbd9e60...Df8d238Cb
0.00517674 ETH
59713962018-07-15 22:57:472369 days ago1531695467
0xdBbd9e60...Df8d238Cb
0.00647093 ETH
59713962018-07-15 22:57:472369 days ago1531695467
0xdBbd9e60...Df8d238Cb
0.01294186 ETH
59713962018-07-15 22:57:472369 days ago1531695467
0xdBbd9e60...Df8d238Cb
0.01941279 ETH
59713962018-07-15 22:57:472369 days ago1531695467
0xdBbd9e60...Df8d238Cb
0.00359496 ETH
59290042018-07-08 19:34:272376 days ago1531078467
0xdBbd9e60...Df8d238Cb
0 ETH
59290042018-07-08 19:34:272376 days ago1531078467
0xdBbd9e60...Df8d238Cb
0 ETH
59290042018-07-08 19:34:272376 days ago1531078467
0xdBbd9e60...Df8d238Cb
0 ETH
59289462018-07-08 19:21:052376 days ago1531077665
0xdBbd9e60...Df8d238Cb
0 ETH
59289462018-07-08 19:21:052376 days ago1531077665
0xdBbd9e60...Df8d238Cb
0 ETH
59289462018-07-08 19:21:052376 days ago1531077665
0xdBbd9e60...Df8d238Cb
0 ETH
59289022018-07-08 19:09:002376 days ago1531076940
0xdBbd9e60...Df8d238Cb
0 ETH
59289022018-07-08 19:09:002376 days ago1531076940
0xdBbd9e60...Df8d238Cb
0 ETH
59289022018-07-08 19:09:002376 days ago1531076940
0xdBbd9e60...Df8d238Cb
0 ETH
59288442018-07-08 18:56:452376 days ago1531076205
0xdBbd9e60...Df8d238Cb
0 ETH
59288442018-07-08 18:56:452376 days ago1531076205
0xdBbd9e60...Df8d238Cb
0 ETH
59288442018-07-08 18:56:452376 days ago1531076205
0xdBbd9e60...Df8d238Cb
0 ETH
59287622018-07-08 18:34:492376 days ago1531074889
0xdBbd9e60...Df8d238Cb
0.00378416 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.06811504 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.06811504 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.06811504 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.06811504 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.06811504 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.09536106 ETH
58858532018-07-01 9:42:362383 days ago1530438156
0xdBbd9e60...Df8d238Cb
0.10898406 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Minewar

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-24
*/

pragma solidity ^0.4.2;

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;
    }
}

//--------------------------------------------------------------------------
// EtherMinewar
// copyright by mark_hu 
// http://www.etherminewar.com/
//--------------------------------------------------------------------------
contract Minewar {
    bool public initialized = false;
    uint256 public roundNumber = 0;
    uint256 public deadline;
    uint256 public CRTSTAL_MINING_PERIOD = 86400; 
    uint256 public HALF_TIME = 8 hours;
    uint256 public ROUND_TIME = 86400 * 7;
    uint256 BASE_PRICE = 0.005 ether;
    uint256 RANK_LIST_LIMIT = 10000;
    uint256 MINIMUM_LIMIT_SELL = 5000000;
    //miner info
    mapping(uint256 => MinerData) private minerData;
    uint256 private numberOfMiners;
    // plyer info
    mapping(address => PlyerData) private players;
    //booster info
    uint256 private numberOfBoosts;
    mapping(uint256 => BoostData) private boostData;
    //order info
    uint256 private numberOfOrders;
    mapping(uint256 => BuyOrderData) private buyOrderData;
    mapping(uint256 => SellOrderData) private sellOrderData;
    uint256 private numberOfRank;
    address[21] rankList;
    address public sponsor;
    uint256 public sponsorLevel;
    address public administrator;
    /*** DATATYPES ***/
    struct PlyerData {
        uint256 roundNumber;
        mapping(uint256 => uint256) minerCount;
        uint256 hashrate;
        uint256 crystals;
        uint256 lastUpdateTime;
        uint256 referral_count;
    }
    struct MinerData {
        uint256 basePrice;
        uint256 baseProduct;
        uint256 limit;
    }
    struct BoostData {
        address owner;
        uint256 boostRate;
        uint256 startingLevel;
        uint256 startingTime;
        uint256 halfLife;
    }
    struct BuyOrderData {
        address owner;
        string title;
        string description;
        uint256 unitPrice;
        uint256 amount;
    }
    struct SellOrderData {
        address owner;
        string title;
        string description;
        uint256 unitPrice;
        uint256 amount;
    }
    modifier isNotOver() 
    {
        require(now <= deadline);
        require(tx.origin == msg.sender);
        _;
    }
    modifier isCurrentRound() 
    {
        require(players[msg.sender].roundNumber == roundNumber);
        _;
    }
    modifier limitSell() 
    {
        PlyerData storage p = players[msg.sender];
        if(p.hashrate <= MINIMUM_LIMIT_SELL){
            _;
        }else{
            uint256 limit_hashrate = 0;
            if(rankList[9] != 0){
                PlyerData storage rank_player = players[rankList[9]];
                limit_hashrate = SafeMath.mul(rank_player.hashrate, 5);
            }
            require(p.hashrate <= limit_hashrate);
            _;
        }
    }
    function Minewar() public
    {
        administrator = msg.sender;
        numberOfMiners = 8;
        numberOfBoosts = 5;
        numberOfOrders = 5;
        numberOfRank = 21;
        //init miner data
        //                      price,          prod.     limit
        minerData[0] = MinerData(10,            10,         10);   //lv1
        minerData[1] = MinerData(100,           200,        2);    //lv2
        minerData[2] = MinerData(400,           800,        4);    //lv3
        minerData[3] = MinerData(1600,          3200,       8);    //lv4 
        minerData[4] = MinerData(6400,          9600,       16);   //lv5 
        minerData[5] = MinerData(25600,         38400,      32);   //lv6 
        minerData[6] = MinerData(204800,        204800,     64);   //lv7 
        minerData[7] = MinerData(1638400,       819200,     65536); //lv8
    }
    function () public payable
    {

    }
    function startGame() public
    {
        require(msg.sender == administrator);
        require(!initialized);
        startNewRound();
        initialized = true;
    }

    function startNewRound() private 
    {
        deadline = SafeMath.add(now, ROUND_TIME);
        roundNumber = SafeMath.add(roundNumber, 1);
        initData();
    }
    function initData() private
    {
        sponsor = administrator;
        sponsorLevel = 6;
        //init booster data
        boostData[0] = BoostData(0, 150, 1, now, HALF_TIME);
        boostData[1] = BoostData(0, 175, 1, now, HALF_TIME);
        boostData[2] = BoostData(0, 200, 1, now, HALF_TIME);
        boostData[3] = BoostData(0, 225, 1, now, HALF_TIME);
        boostData[4] = BoostData(msg.sender, 250, 2, now, HALF_TIME);
        //init order data
        uint256 idx;
        for (idx = 0; idx < numberOfOrders; idx++) {
            buyOrderData[idx] = BuyOrderData(0, "title", "description", 0, 0);
            sellOrderData[idx] = SellOrderData(0, "title", "description", 0, 0);
        }
        for (idx = 0; idx < numberOfRank; idx++) {
            rankList[idx] = 0;
        }
    }
    function lottery() public 
    {
        require(now > deadline);
        require(tx.origin == msg.sender);
        uint256 balance = SafeMath.div(SafeMath.mul(this.balance, 90), 100);
        administrator.send(SafeMath.div(SafeMath.mul(this.balance, 5), 100));
        uint8[10] memory profit = [30,20,10,8,7,5,5,5,5,5];
        for(uint256 idx = 0; idx < 10; idx++){
            if(rankList[idx] != 0){
                rankList[idx].send(SafeMath.div(SafeMath.mul(balance,profit[idx]),100));
            }
        }
        startNewRound();
    }
    function getRankList() public view returns(address[21])
    {
        return rankList;
    }
    //sponser
    function becomeSponsor() public isNotOver isCurrentRound payable
    {
        require(msg.value >= getSponsorFee());
        sponsor.send(getCurrentPrice(sponsorLevel));
        sponsor = msg.sender;
        sponsorLevel = SafeMath.add(sponsorLevel, 1);
    }
    function getSponsorFee() public view returns(uint256 sponsorFee)
    {
        sponsorFee = getCurrentPrice(SafeMath.add(sponsorLevel, 1));
    }
    //--------------------------------------------------------------------------
    // Miner 
    //--------------------------------------------------------------------------
    function getFreeMiner(address ref) isNotOver public 
    {
        require(players[msg.sender].roundNumber != roundNumber);
        PlyerData storage p = players[msg.sender];
        //reset player data
        if(p.hashrate > 0){
            for (uint idx = 1; idx < numberOfMiners; idx++) {
                p.minerCount[idx] = 0;
            }
        }
        p.crystals = 0;
        p.roundNumber = roundNumber;
        //free miner
        p.lastUpdateTime = now;
        p.referral_count = 0;
        p.minerCount[0] = 1;
        MinerData storage m0 = minerData[0];
        p.hashrate = m0.baseProduct;
        //send referral 
        if (ref != msg.sender) {
            PlyerData storage referral = players[ref];
            if(referral.roundNumber == roundNumber){ 
                updateCrytal(ref);
                p.referral_count = 1;
                referral.referral_count = SafeMath.add(referral.referral_count, 1);
            }
        }
    }
    function buyMiner(uint256[] minerNumbers) public isNotOver isCurrentRound
    {   
        require(minerNumbers.length == numberOfMiners);
        uint256 minerIdx = 0;
        MinerData memory m;
        for (; minerIdx < numberOfMiners; minerIdx++) {
            m = minerData[minerIdx];
            if(minerNumbers[minerIdx] > m.limit || minerNumbers[minerIdx] < 0){
                revert();
            }
        }
        updateCrytal(msg.sender);
        PlyerData storage p = players[msg.sender];
        uint256 price = 0;
        uint256 minerNumber = 0;
        for (minerIdx = 0; minerIdx < numberOfMiners; minerIdx++) {
            minerNumber = minerNumbers[minerIdx];
            if (minerNumber > 0) {
                m = minerData[minerIdx];
                price = SafeMath.add(price, SafeMath.mul(m.basePrice, minerNumber));
            }
        }
        price = SafeMath.mul(price, CRTSTAL_MINING_PERIOD);
        if(p.crystals < price){
            revert();
        }
        for (minerIdx = 0; minerIdx < numberOfMiners; minerIdx++) {
            minerNumber = minerNumbers[minerIdx];
            if (minerNumber > 0) {
                m = minerData[minerIdx];
                p.minerCount[minerIdx] = SafeMath.min(m.limit, SafeMath.add(p.minerCount[minerIdx], minerNumber));
            }
        }
        p.crystals = SafeMath.sub(p.crystals, price);
        updateHashrate(msg.sender);
    }
    function getPlayerData(address addr) public view
    returns (uint256 crystals, uint256 lastupdate, uint256 hashratePerDay, uint256[8] miners, uint256 hasBoost, uint256 referral_count)
    {
        PlyerData storage p = players[addr];
        if(p.roundNumber != roundNumber){
            p = players[0];
        }
        crystals = SafeMath.div(p.crystals, CRTSTAL_MINING_PERIOD);
        lastupdate = p.lastUpdateTime;
        hashratePerDay = addReferralHashrate(addr, p.hashrate);
        uint256 i = 0;
        for(i = 0; i < numberOfMiners; i++)
        {
            miners[i] = p.minerCount[i];
        }
        hasBoost = hasBooster(addr);
        referral_count = p.referral_count;
    }
    function getHashratePerDay(address minerAddr) public view returns (uint256 personalProduction)
    {
        PlyerData storage p = players[minerAddr];   
        personalProduction = addReferralHashrate(minerAddr, p.hashrate);
        uint256 boosterIdx = hasBooster(minerAddr);
        if (boosterIdx != 999) {
            BoostData storage b = boostData[boosterIdx];
            personalProduction = SafeMath.div(SafeMath.mul(personalProduction, b.boostRate), 100);
        }
    }
    //--------------------------------------------------------------------------
    // BOOSTER 
    //--------------------------------------------------------------------------
    function buyBooster(uint256 idx) public isNotOver isCurrentRound payable 
    {
        require(idx < numberOfBoosts);
        BoostData storage b = boostData[idx];
        if(msg.value < getBoosterPrice(idx) || msg.sender == b.owner){
            revert();
        }
        address beneficiary = b.owner;
        sponsor.send(devFee(getBoosterPrice(idx)));
        if(beneficiary != 0){
            beneficiary.send(SafeMath.div(SafeMath.mul(getBoosterPrice(idx), 55), 100));
        }
        updateCrytal(msg.sender);
        updateCrytal(beneficiary);
        uint256 level = getCurrentLevel(b.startingLevel, b.startingTime, b.halfLife);
        b.startingLevel = SafeMath.add(level, 1);
        b.startingTime = now;
        // transfer ownership    
        b.owner = msg.sender;
    }
    function getBoosterData(uint256 idx) public view returns (address owner,uint256 boostRate, uint256 startingLevel, 
        uint256 startingTime, uint256 currentPrice, uint256 halfLife)
    {
        require(idx < numberOfBoosts);
        owner            = boostData[idx].owner;
        boostRate        = boostData[idx].boostRate; 
        startingLevel    = boostData[idx].startingLevel;
        startingTime     = boostData[idx].startingTime;
        currentPrice     = getBoosterPrice(idx);
        halfLife         = boostData[idx].halfLife;
    }
    function getBoosterPrice(uint256 index) public view returns (uint256)
    {
        BoostData storage booster = boostData[index];
        return getCurrentPrice(getCurrentLevel(booster.startingLevel, booster.startingTime, booster.halfLife));
    }
    function hasBooster(address addr) public view returns (uint256 boostIdx)
    {         
        boostIdx = 999;
        for(uint256 i = 0; i < numberOfBoosts; i++){
            uint256 revert_i = numberOfBoosts - i - 1;
            if(boostData[revert_i].owner == addr){
                boostIdx = revert_i;
                break;
            }
        }
    }
    //--------------------------------------------------------------------------
    // Market 
    //--------------------------------------------------------------------------
    function buyCrystalDemand(uint256 amount, uint256 unitPrice,string title, string description) public isNotOver isCurrentRound payable 
    {
        require(unitPrice > 0);
        require(amount >= 1000);
        require(amount * unitPrice <= msg.value);
        uint256 lowestIdx = getLowestUnitPriceIdxFromBuy();
        BuyOrderData storage o = buyOrderData[lowestIdx];
        if(o.amount > 10 && unitPrice <= o.unitPrice){
            revert();
        }
        uint256 balance = SafeMath.mul(o.amount, o.unitPrice);
        if (o.owner != 0){
            o.owner.send(balance);
        }
        o.owner = msg.sender;
        o.unitPrice = unitPrice;
        o.title = title;
        o.description = description;
        o.amount = amount;
    }
    function sellCrystal(uint256 amount, uint256 index) public isNotOver isCurrentRound limitSell
    {
        require(index < numberOfOrders);
        require(amount > 0);
        BuyOrderData storage o = buyOrderData[index];
        require(amount <= o.amount);
        updateCrytal(msg.sender);
        PlyerData storage seller = players[msg.sender];
        PlyerData storage buyer = players[o.owner];
        require(seller.crystals >= amount * CRTSTAL_MINING_PERIOD);
        uint256 price = SafeMath.mul(amount, o.unitPrice);
        uint256 fee = devFee(price);
        sponsor.send(fee);
        administrator.send(fee);
        buyer.crystals = SafeMath.add(buyer.crystals, amount * CRTSTAL_MINING_PERIOD);
        seller.crystals = SafeMath.sub(seller.crystals, amount * CRTSTAL_MINING_PERIOD);
        o.amount = SafeMath.sub(o.amount, amount);
        msg.sender.send(SafeMath.div(price, 2));
    }
    function withdrawBuyDemand(uint256 index) public isNotOver isCurrentRound
    {
        require(index < numberOfOrders);
        BuyOrderData storage o = buyOrderData[index];
        require(o.owner == msg.sender);
        if(o.amount > 0){
            uint256 balance = SafeMath.mul(o.amount, o.unitPrice);
            o.owner.send(balance);
        }
        o.unitPrice = 0;
        o.amount = 0;  
        o.title = "title";
        o.description = "description";
        o.owner = 0;
    }
    function getBuyDemand(uint256 index) public view returns(address owner, string title, string description,
     uint256 amount, uint256 unitPrice)
    {
        require(index < numberOfOrders);
        BuyOrderData storage o = buyOrderData[index];
        owner = o.owner;
        title = o.title;
        description = o.description;
        amount = o.amount;
        unitPrice = o.unitPrice;
    }
    function getLowestUnitPriceIdxFromBuy() public returns(uint256 lowestIdx)
    {
        uint256 lowestPrice = 2**256 - 1;
        for (uint256 idx = 0; idx < numberOfOrders; idx++) {
            BuyOrderData storage o = buyOrderData[idx];
            //if empty
            if (o.unitPrice == 0 || o.amount < 10) {
                return idx;
            }else if (o.unitPrice < lowestPrice) {
                lowestPrice = o.unitPrice;
                lowestIdx = idx;
            }
        }
    }
    //-------------------------Sell-----------------------------
    function sellCrystalDemand(uint256 amount, uint256 unitPrice, string title, string description) 
    public isNotOver isCurrentRound limitSell
    {
        require(amount >= 1000);
        require(unitPrice > 0);
        updateCrytal(msg.sender);
        PlyerData storage seller = players[msg.sender];
        if(seller.crystals < amount * CRTSTAL_MINING_PERIOD){
            revert();
        }
        uint256 highestIdx = getHighestUnitPriceIdxFromSell();
        SellOrderData storage o = sellOrderData[highestIdx];
        if(o.amount > 10 && unitPrice >= o.unitPrice){
            revert();
        }
        if (o.owner != 0){
            PlyerData storage prev = players[o.owner];
            prev.crystals = SafeMath.add(prev.crystals, o.amount * CRTSTAL_MINING_PERIOD);
        }
        o.owner = msg.sender;
        o.unitPrice = unitPrice;
        o.title = title;
        o.description = description;
        o.amount = amount;
        //sub crystals
        seller.crystals = SafeMath.sub(seller.crystals, amount * CRTSTAL_MINING_PERIOD);
    }
    function buyCrystal(uint256 amount, uint256 index) public isNotOver isCurrentRound payable
    {
        require(index < numberOfOrders);
        require(amount > 0);
        SellOrderData storage o = sellOrderData[index];
        require(amount <= o.amount);
        require(msg.value >= amount * o.unitPrice);
        PlyerData storage buyer = players[msg.sender];
        uint256 price = SafeMath.mul(amount, o.unitPrice);
        uint256 fee = devFee(price);
        sponsor.send(fee);
        administrator.transfer(fee);
        buyer.crystals = SafeMath.add(buyer.crystals, amount * CRTSTAL_MINING_PERIOD);
        o.amount = SafeMath.sub(o.amount, amount);
        o.owner.send(SafeMath.div(price, 2));
    }
    function withdrawSellDemand(uint256 index) public isNotOver isCurrentRound
    {
        require(index < numberOfOrders);
        SellOrderData storage o = sellOrderData[index];
        require(o.owner == msg.sender);
        if(o.amount > 0){
            PlyerData storage p = players[o.owner];
            p.crystals = SafeMath.add(p.crystals, o.amount * CRTSTAL_MINING_PERIOD);
        }
        o.unitPrice = 0;
        o.amount = 0; 
        o.title = "title";
        o.description = "description";
        o.owner = 0;
    }
    function getSellDemand(uint256 index) public view returns(address owner, string title, string description,
     uint256 amount, uint256 unitPrice)
    {
        require(index < numberOfOrders);
        SellOrderData storage o = sellOrderData[index];
        owner = o.owner;
        title = o.title;
        description = o.description;
        amount = o.amount;
        unitPrice = o.unitPrice;
    }
    function getHighestUnitPriceIdxFromSell() public returns(uint256 highestIdx)
    {
        uint256 highestPrice = 0;
        for (uint256 idx = 0; idx < numberOfOrders; idx++) {
            SellOrderData storage o = sellOrderData[idx];
            //if empty
            if (o.unitPrice == 0 || o.amount < 10) {
                return idx;
            }else if (o.unitPrice > highestPrice) {
                highestPrice = o.unitPrice;
                highestIdx = idx;
            }
        }
    }
    //--------------------------------------------------------------------------
    // Other 
    //--------------------------------------------------------------------------
    function devFee(uint256 amount) public view returns(uint256)
    {
        return SafeMath.div(SafeMath.mul(amount, 5), 100);
    }
    function getBalance() public view returns(uint256)
    {
        return this.balance;
    }
    function upgrade(address addr) public 
    {
        require(msg.sender == administrator);
        require(now < deadline - 82800);
        uint256 balance = SafeMath.div(SafeMath.mul(this.balance, 90), 100);
        administrator.send(SafeMath.div(SafeMath.mul(this.balance, 5), 100));
        uint8[10] memory profit = [30,20,10,8,7,5,5,5,5,5];
        for(uint256 idx = 0; idx < 10; idx++){
            if(rankList[idx] != 0){
                rankList[idx].send(SafeMath.div(SafeMath.mul(balance,profit[idx]),100));
            }
        }
        selfdestruct(addr);
    }

    //--------------------------------------------------------------------------
    // Private 
    //--------------------------------------------------------------------------
    function updateHashrate(address addr) private
    {
        PlyerData storage p = players[addr];
        uint256 hashrate = 0;
        for (uint idx = 0; idx < numberOfMiners; idx++) {
            MinerData storage m = minerData[idx];
            hashrate = SafeMath.add(hashrate, SafeMath.mul(p.minerCount[idx], m.baseProduct));
        }
        p.hashrate = hashrate;
        if(hashrate > RANK_LIST_LIMIT){
            updateRankList(addr);
        }
    }
    function updateCrytal(address addr) private
    {
        require(now > players[addr].lastUpdateTime);
        if (players[addr].lastUpdateTime != 0) {
            PlyerData storage p = players[addr];
            uint256 secondsPassed = SafeMath.sub(now, p.lastUpdateTime);
            uint256 revenue = getHashratePerDay(addr);
            p.lastUpdateTime = now;
            if (revenue > 0) {
                revenue = SafeMath.mul(revenue, secondsPassed);
                p.crystals = SafeMath.add(p.crystals, revenue);
            }
        }
    }
    function addReferralHashrate(address addr, uint256 hashrate) private view returns(uint256 personalProduction) 
    {
        PlyerData storage p = players[addr];
        if(p.referral_count < 5){
            personalProduction = SafeMath.add(hashrate, p.referral_count * 10);
        }else if(p.referral_count < 10){
            personalProduction = SafeMath.add(hashrate, 50 + p.referral_count * 10);
        }else{
            personalProduction = SafeMath.add(hashrate, 200);
        }
    }
    function getCurrentLevel(uint256 startingLevel, uint256 startingTime, uint256 halfLife) private view returns(uint256) 
    {
        uint256 timePassed=SafeMath.sub(now, startingTime);
        uint256 levelsPassed=SafeMath.div(timePassed, halfLife);
        if (startingLevel < levelsPassed) {
            return 0;
        }
        return SafeMath.sub(startingLevel, levelsPassed);
    }
    function getCurrentPrice(uint256 currentLevel) private view returns(uint256) 
    {
        return SafeMath.mul(BASE_PRICE, 2**currentLevel);
    }
    function updateRankList(address addr) private returns(bool)
    {
        uint256 idx = 0;
        PlyerData storage insert = players[addr];
        PlyerData storage lastOne = players[rankList[19]];
        if(insert.hashrate < lastOne.hashrate) {
            return false;
        }
        address[21] memory tempList = rankList;
        if(!inRankList(addr)){
            tempList[20] = addr;
            quickSort(tempList, 0, 20);
        }else{
            quickSort(tempList, 0, 19);
        }
        for(idx = 0;idx < 21; idx++){
            if(tempList[idx] != rankList[idx]){
                rankList[idx] = tempList[idx];
            }
        }
        
        return true;
    }
    function inRankList(address addr) internal returns(bool)
    {
        for(uint256 idx = 0;idx < 20; idx++){
            if(addr == rankList[idx]){
                return true;
            }
        }
        return false;
    }
    function quickSort(address[21] list, int left, int right) internal
    {
        int i = left;
        int j = right;
        if(i == j) return;
        address addr = list[uint(left + (right - left) / 2)];
        PlyerData storage p = players[addr];
        while (i <= j) {
            while (players[list[uint(i)]].hashrate > p.hashrate) i++;
            while (p.hashrate > players[list[uint(j)]].hashrate) j--;
            if (i <= j) {
                (list[uint(i)], list[uint(j)]) = (list[uint(j)], list[uint(i)]);
                i++;
                j--;
            }
        }
        if (left < j)
            quickSort(list, left, j);
        if (i < right)
            quickSort(list, i, right);
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"index","type":"uint256"}],"name":"sellCrystal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"unitPrice","type":"uint256"},{"name":"title","type":"string"},{"name":"description","type":"string"}],"name":"sellCrystalDemand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"minerAddr","type":"address"}],"name":"getHashratePerDay","outputs":[{"name":"personalProduction","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getBoosterPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"getPlayerData","outputs":[{"name":"crystals","type":"uint256"},{"name":"lastupdate","type":"uint256"},{"name":"hashratePerDay","type":"uint256"},{"name":"miners","type":"uint256[8]"},{"name":"hasBoost","type":"uint256"},{"name":"referral_count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"idx","type":"uint256"}],"name":"getBoosterData","outputs":[{"name":"owner","type":"address"},{"name":"boostRate","type":"uint256"},{"name":"startingLevel","type":"uint256"},{"name":"startingTime","type":"uint256"},{"name":"currentPrice","type":"uint256"},{"name":"halfLife","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"}],"name":"devFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"unitPrice","type":"uint256"},{"name":"title","type":"string"},{"name":"description","type":"string"}],"name":"buyCrystalDemand","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"roundNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"minerNumbers","type":"uint256[]"}],"name":"buyMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"HALF_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getHighestUnitPriceIdxFromSell","outputs":[{"name":"highestIdx","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint256"}],"name":"withdrawBuyDemand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sponsor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getSellDemand","outputs":[{"name":"owner","type":"address"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"amount","type":"uint256"},{"name":"unitPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROUND_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint256"}],"name":"withdrawSellDemand","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"ref","type":"address"}],"name":"getFreeMiner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSponsorFee","outputs":[{"name":"sponsorFee","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRankList","outputs":[{"name":"","type":"address[21]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"hasBooster","outputs":[{"name":"boostIdx","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"lottery","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CRTSTAL_MINING_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"idx","type":"uint256"}],"name":"buyBooster","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"getLowestUnitPriceIdxFromBuy","outputs":[{"name":"lowestIdx","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"becomeSponsor","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"sponsorLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"administrator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getBuyDemand","outputs":[{"name":"owner","type":"address"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"amount","type":"uint256"},{"name":"unitPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"index","type":"uint256"}],"name":"buyCrystal","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]

608060405260008060006101000a81548160ff02191690831515021790555060006001556201518060035561708060045562093a806005556611c37937e08000600655612710600755624c4b4060085534801561005b57600080fd5b5033602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506008600a819055506005600c819055506005600e819055506015601181905550606060405190810160405280600a8152602001600a8152602001600a815250600960008081526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506060604051908101604052806064815260200160c881526020016002815250600960006001815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505060606040519081016040528061019081526020016103208152602001600481525060096000600281526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506060604051908101604052806106408152602001610c808152602001600881525060096000600381526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506060604051908101604052806119008152602001612580815260200160108152506009600060048152602001908152602001600020600082015181600001556020820151816001015560408201518160020155905050606060405190810160405280616400815260200161960081526020016020815250600960006005815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505060606040519081016040528062032000815260200162032000815260200160408152506009600060068152602001908152602001600020600082015181600001556020820151816001015560408201518160020155905050606060405190810160405280621900008152602001620c800081526020016201000081525060096000600781526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506150658061037d6000396000f3006080604052600436106101b7576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806308d317dd146101b95780630900f010146101f05780630dda20d11461023357806312065fe0146102f6578063158ef93e146103215780632243fb1514610350578063294cf912146103a757806329dcb0cf146103e85780632aa531d91461041357806339901be8146104b55780633bc0461a1461054557806341fe0a24146105865780634e2786fb1461063c5780634ec2d0b6146106675780634f9d482a146106cd57806368381b96146106f8578063718b0a321461072357806377c936621461075057806378473485146107a75780637892fd29146108fa5780637a6e9e4114610925578063898644cc146109525780639f8ff91d14610995578063a1a200c5146109c0578063ad5b718914610a13578063ba13a57214610a6a578063cee0b4fe14610a81578063d223926f14610aac578063d60207c714610acc578063d65ab5f214610af7578063e3e9bc3f14610b0e578063ea6f1c4a14610b18578063f53d0a8e14610b43578063f737f27414610b9a578063f9d7020014610ced575b005b3480156101c557600080fd5b506101ee6004803603810190808035906020019092919080359060200190929190505050610d17565b005b3480156101fc57600080fd5b50610231600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d3565b005b34801561023f57600080fd5b506102f46004803603810190808035906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611685565b005b34801561030257600080fd5b5061030b611cce565b6040518082815260200191505060405180910390f35b34801561032d57600080fd5b50610336611ced565b604051808215151515815260200191505060405180910390f35b34801561035c57600080fd5b50610391600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cff565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103d260048036038101908080359060200190929190505050611da4565b6040518082815260200191505060405180910390f35b3480156103f457600080fd5b506103fd611de3565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b50610454600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de9565b6040518087815260200186815260200185815260200184600860200280838360005b83811015610491578082015181840152602081019050610476565b50505050905001838152602001828152602001965050505050505060405180910390f35b3480156104c157600080fd5b506104e060048036038101908080359060200190929190505050611f0b565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561055157600080fd5b5061057060048036038101908080359060200190929190505050611fd5565b6040518082815260200191505060405180910390f35b61063a6004803603810190808035906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611ff3565b005b34801561064857600080fd5b5061065161224a565b6040518082815260200191505060405180910390f35b34801561067357600080fd5b506106cb60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612250565b005b3480156106d957600080fd5b506106e26125a6565b6040518082815260200191505060405180910390f35b34801561070457600080fd5b5061070d6125ac565b6040518082815260200191505060405180910390f35b34801561072f57600080fd5b5061074e60048036038101908080359060200190929190505050612629565b005b34801561075c57600080fd5b506107656128c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b357600080fd5b506107d2600480360381019080803590602001909291905050506128e7565b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015610854578082015181840152602081019050610839565b50505050905090810190601f1680156108815780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b838110156108ba57808201518184015260208101905061089f565b50505050905090810190601f1680156108e75780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34801561090657600080fd5b5061090f612a93565b6040518082815260200191505060405180910390f35b34801561093157600080fd5b5061095060048036038101908080359060200190929190505050612a99565b005b34801561095e57600080fd5b50610993600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d46565b005b3480156109a157600080fd5b506109aa612f8c565b6040518082815260200191505060405180910390f35b3480156109cc57600080fd5b506109d5612fa8565b6040518082601560200280838360005b83811015610a005780820151818401526020810190506109e5565b5050505090500191505060405180910390f35b348015610a1f57600080fd5b50610a54600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613029565b6040518082815260200191505060405180910390f35b348015610a7657600080fd5b50610a7f6130d2565b005b348015610a8d57600080fd5b50610a96613351565b6040518082815260200191505060405180910390f35b610aca60048036038101908080359060200190929190505050613357565b005b348015610ad857600080fd5b50610ae161361f565b6040518082815260200191505060405180910390f35b348015610b0357600080fd5b50610b0c6136bb565b005b610b16613756565b005b348015610b2457600080fd5b50610b2d6138c1565b6040518082815260200191505060405180910390f35b348015610b4f57600080fd5b50610b586138c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba657600080fd5b50610bc5600480360381019080803590602001909291905050506138ed565b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015610c47578082015181840152602081019050610c2c565b50505050905090810190601f168015610c745780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015610cad578082015181840152602081019050610c92565b50505050905090810190601f168015610cda5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b610d156004803603810190808035906020019092919080359060200190929190505050613a99565b005b60008060008060006002544211151515610d3057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515610d6a57600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515610dbc57600080fd5b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250600854836002015411151561107857600e5489101515610e2157600080fd5b60008a111515610e3057600080fd5b600f60008a8152602001908152602001600020975087600401548a11151515610e5857600080fd5b610e6133613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650600b60008960000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002095506003548a02876003015410151515610f1e57600080fd5b610f2c8a8960030154613e8a565b9450610f3785611fd5565b9350602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505050610ffb86600301546003548c02613ec5565b866003018190555061101587600301546003548c02613ee3565b876003018190555061102b88600401548b613ee3565b88600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc611058876002613efc565b9081150290604051600060405180830381858888f19350505050506113c7565b6000915060006012600960158110151561108e57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561115157600b6000601260096015811015156110e157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061114e81600201546005613e8a565b91505b8183600201541115151561116457600080fd5b600e548910151561117457600080fd5b60008a11151561118357600080fd5b600f60008a8152602001908152602001600020975087600401548a111515156111ab57600080fd5b6111b433613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650600b60008960000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002095506003548a0287600301541015151561127157600080fd5b61127f8a8960030154613e8a565b945061128a85611fd5565b9350602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050505061134e86600301546003548c02613ec5565b866003018190555061136887600301546003548c02613ee3565b876003018190555061137e88600401548b613ee3565b88600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc6113ab876002613efc565b9081150290604051600060405180830381858888f19350505050505b50505050505050505050565b60006113dd614e86565b6000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561143b57600080fd5b62014370600254034210151561145057600080fd5b61147c6114753073ffffffffffffffffffffffffffffffffffffffff1631605a613e8a565b6064613efc565b9250602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6114e66114df3073ffffffffffffffffffffffffffffffffffffffff16316005613e8a565b6064613efc565b9081150290604051600060405180830381858888f193505050505061014060405190810160405280601e60ff168152602001601460ff168152602001600a60ff168152602001600860ff168152602001600760ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152509150600090505b600a81101561166c57600060128260158110151561159157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561165f576012816015811015156115df57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61164361163c868686600a8110151561162f57fe5b602002015160ff16613e8a565b6064613efc565b9081150290604051600060405180830381858888f19350505050505b8080600101915050611577565b8373ffffffffffffffffffffffffffffffffffffffff16ff5b600080600080600254421115151561169c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156116d657600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561172857600080fd5b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925060085483600201541115156119ab576103e88b1015151561178e57600080fd5b60008a11151561179d57600080fd5b6117a633613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002096506003548b02876003015410156117fc57600080fd5b6118046125ac565b9550601060008781526020019081526020016000209450600a8560040154118015611833575084600301548a10155b1561183d57600080fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561190557600b60008660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093506118fc8460030154600354876004015402613ec5565b84600301819055505b338560000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089856003018190555088856001019080519060200190611969929190614eaa565b5087856002019080519060200190611982929190614eaa565b508a856004018190555061199e87600301546003548d02613ee3565b8760030181905550611cc1565b600091506000601260096015811015156119c157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611a8457600b600060126009601581101515611a1457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611a8181600201546005613e8a565b91505b81836002015411151515611a9757600080fd5b6103e88b10151515611aa857600080fd5b60008a111515611ab757600080fd5b611ac033613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002096506003548b0287600301541015611b1657600080fd5b611b1e6125ac565b9550601060008781526020019081526020016000209450600a8560040154118015611b4d575084600301548a10155b15611b5757600080fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c1f57600b60008660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209350611c168460030154600354876004015402613ec5565b84600301819055505b338560000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089856003018190555088856001019080519060200190611c83929190614eaa565b5087856002019080519060200190611c9c929190614eaa565b508a8560040181905550611cb887600301546003548d02613ee3565b87600301819055505b5050505050505050505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000809054906101000a900460ff1681565b600080600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250611d54858460020154613f17565b9350611d5f85613029565b91506103e782141515611d9c57600d60008381526020019081526020016000209050611d99611d92858360010154613e8a565b6064613efc565b93505b505050919050565b600080600d60008481526020019081526020016000209050611ddb611dd6826002015483600301548460040154613fbe565b614002565b915050919050565b60025481565b6000806000611df6614f2a565b600080600080600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506001548260000154141515611e7857600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091505b611e888260030154600354613efc565b975081600401549650611e9f898360020154613f17565b955060009050600090505b600a54811015611eee57816001016000828152602001908152602001600020548582600881101515611ed857fe5b6020020181815250508080600101915050611eaa565b611ef789613029565b935081600501549250505091939550919395565b600080600080600080600c5487101515611f2457600080fd5b600d600088815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550600d6000888152602001908152602001600020600101549450600d6000888152602001908152602001600020600201549350600d6000888152602001908152602001600020600301549250611fb187611da4565b9150600d600088815260200190815260200160002060040154905091939550919395565b6000611fec611fe5836005613e8a565b6064613efc565b9050919050565b6000806000600254421115151561200957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561204357600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561209557600080fd5b6000861115156120a457600080fd5b6103e887101515156120b557600080fd5b34868802111515156120c657600080fd5b6120ce61361f565b9250600f60008481526020019081526020016000209150600a82600401541180156120fd575081600301548611155b1561210757600080fd5b61211982600401548360030154613e8a565b905060008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156121ba578160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050505b338260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508582600301819055508482600101908051906020019061221e929190614eaa565b5083826002019080519060200190612237929190614eaa565b5086826004018190555050505050505050565b60015481565b600061225a614f4e565b6000806000600254421115151561227057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156122aa57600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156122fc57600080fd5b600a54865114151561230d57600080fd5b600094505b600a548510156123b2576009600086815260200190815260200160002060606040519081016040529081600082015481526020016001820154815260200160028201548152505093508360400151868681518110151561236e57fe5b90602001906020020151118061239b57506000868681518110151561238f57fe5b90602001906020020151105b156123a557600080fd5b8480600101955050612312565b6123bb33613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002092506000915060009050600094505b600a5485101561249c57858581518110151561242157fe5b906020019060200201519050600081111561248f5760096000868152602001908152602001600020606060405190810160405290816000820154815260200160018201548152602001600282015481525050935061248c82612487866000015184613e8a565b613ec5565b91505b8480600101955050612409565b6124a882600354613e8a565b915081836003015410156124bb57600080fd5b600094505b600a5485101561257f5785858151811015156124d857fe5b90602001906020020151905060008111156125725760096000868152602001908152602001600020606060405190810160405290816000820154815260200160018201548152602001600282015481525050935061255884604001516125538560010160008981526020019081526020016000205484613ec5565b61401a565b836001016000878152602001908152602001600020819055505b84806001019550506124c0565b61258d836003015483613ee3565b836003018190555061259e33614033565b505050505050565b60045481565b60008060008060009250600091505b600e54821015612622576010600083815260200190815260200160002090506000816003015414806125f15750600a8160040154105b156125fe57819350612623565b828160030154111561261557806003015492508193505b81806001019250506125bb565b5b50505090565b600080600254421115151561263d57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561267757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156126c957600080fd5b600e54831015156126d957600080fd5b600f600084815260200190815260200160002091503373ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561274c57600080fd5b6000826004015411156127c85761276b82600401548360030154613e8a565b90508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050505b60008260030181905550600082600401819055506040805190810160405280600581526020017f7469746c65000000000000000000000000000000000000000000000000000000815250826001019080519060200190612829929190614eaa565b506040805190810160405280600b81526020017f6465736372697074696f6e000000000000000000000000000000000000000000815250826002019080519060200190612877929190614eaa565b5060008260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000806000600e548710151561290157600080fd5b6010600088815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129d55780601f106129aa576101008083540402835291602001916129d5565b820191906000526020600020905b8154815290600101906020018083116129b857829003601f168201915b50505050509450806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a745780601f10612a4957610100808354040283529160200191612a74565b820191906000526020600020905b815481529060010190602001808311612a5757829003601f168201915b5050505050935080600401549250806003015491505091939590929450565b60055481565b6000806002544211151515612aad57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515612ae757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515612b3957600080fd5b600e5483101515612b4957600080fd5b6010600084815260200190815260200160002091503373ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612bbc57600080fd5b600082600401541115612c4d57600b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612c448160030154600354846004015402613ec5565b81600301819055505b60008260030181905550600082600401819055506040805190810160405280600581526020017f7469746c65000000000000000000000000000000000000000000000000000000815250826001019080519060200190612cae929190614eaa565b506040805190810160405280600b81526020017f6465736372697074696f6e000000000000000000000000000000000000000000815250826002019080519060200190612cfc929190614eaa565b5060008260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000806000806002544211151515612d5d57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515612d9757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515612dea57600080fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209350600084600201541115612e7057600192505b600a54831015612e6f576000846001016000858152602001908152602001600020819055508280600101935050612e3d565b5b60008460030181905550600154846000018190555042846004018190555060008460050181905550600184600101600080815260200190815260200160002081905550600960008081526020019081526020016000209150816001015484600201819055503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515612f8557600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060015481600001541415612f8457612f6285613d51565b60018460050181905550612f7b81600501546001613ec5565b81600501819055505b5b5050505050565b6000612fa3612f9e6028546001613ec5565b614002565b905090565b612fb0614f70565b601260158060200260405190810160405280929190826015801561301f576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612fd5575b5050505050905090565b60008060006103e79250600091505b600c548210156130cb57600182600c54030390508373ffffffffffffffffffffffffffffffffffffffff16600d600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130be578092506130cb565b8180600101925050613038565b5050919050565b60006130dc614e86565b6000600254421115156130ee57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561312857600080fd5b61315461314d3073ffffffffffffffffffffffffffffffffffffffff1631605a613e8a565b6064613efc565b9250602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6131be6131b73073ffffffffffffffffffffffffffffffffffffffff16316005613e8a565b6064613efc565b9081150290604051600060405180830381858888f193505050505061014060405190810160405280601e60ff168152602001601460ff168152602001600a60ff168152602001600860ff168152602001600760ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152509150600090505b600a81101561334457600060128260158110151561326957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515613337576012816015811015156132b757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61331b613314868686600a8110151561330757fe5b602002015160ff16613e8a565b6064613efc565b9081150290604051600060405180830381858888f19350505050505b808060010191505061324f565b61334c614102565b505050565b60035481565b6000806000600254421115151561336d57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156133a757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156133f957600080fd5b600c548410151561340957600080fd5b600d6000858152602001908152602001600020925061342784611da4565b34108061348357508260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561348d57600080fd5b8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6135016134fc87611da4565b611fd5565b9081150290604051600060405180830381858888f193505050505060008273ffffffffffffffffffffffffffffffffffffffff1614151561358f578173ffffffffffffffffffffffffffffffffffffffff166108fc61357361356c61356588611da4565b6037613e8a565b6064613efc565b9081150290604051600060405180830381858888f19350505050505b61359833613d51565b6135a182613d51565b6135b8836002015484600301548560040154613fbe565b90506135c5816001613ec5565b8360020181905550428360030181905550338360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9250600091505b600e548210156136b457600f600083815260200190815260200160002090506000816003015414806136835750600a8160040154105b15613690578193506136b5565b82816003015410156136a757806003015492508193505b818060010192505061364d565b5b50505090565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561371757600080fd5b6000809054906101000a900460ff1615151561373257600080fd5b61373a614102565b60016000806101000a81548160ff021916908315150217905550565b600254421115151561376757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156137a157600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156137f357600080fd5b6137fb612f8c565b341015151561380957600080fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613850602854614002565b9081150290604051600060405180830381858888f193505050505033602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138b96028546001613ec5565b602881905550565b60285481565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000806000600e548710151561390757600080fd5b600f600088815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156139db5780601f106139b0576101008083540402835291602001916139db565b820191906000526020600020905b8154815290600101906020018083116139be57829003601f168201915b50505050509450806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a7a5780601f10613a4f57610100808354040283529160200191613a7a565b820191906000526020600020905b815481529060010190602001808311613a5d57829003601f168201915b5050505050935080600401549250806003015491505091939590929450565b6000806000806002544211151515613ab057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515613aea57600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515613b3c57600080fd5b600e5485101515613b4c57600080fd5b600086111515613b5b57600080fd5b60106000868152602001908152602001600020935083600401548611151515613b8357600080fd5b836003015486023410151515613b9857600080fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250613be7868560030154613e8a565b9150613bf282611fd5565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613cb4573d6000803e3d6000fd5b50613cc783600301546003548802613ec5565b8360030181905550613cdd846004015487613ee3565b84600401819055508360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613d2e846002613efc565b9081150290604051600060405180830381858888f1935050505050505050505050565b6000806000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015442111515613da657600080fd5b6000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154141515613e8457600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250613e41428460040154613ee3565b9150613e4c84611cff565b90504283600401819055506000811115613e8357613e6a8183613e8a565b9050613e7a836003015482613ec5565b83600301819055505b5b50505050565b6000806000841415613e9f5760009150613ebe565b8284029050828482811515613eb057fe5b04141515613eba57fe5b8091505b5092915050565b6000808284019050838110151515613ed957fe5b8091505092915050565b6000828211151515613ef157fe5b818303905092915050565b6000808284811515613f0a57fe5b0490508091505092915050565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600581600501541015613f8057613f7983600a836005015402613ec5565b9150613fb7565b600a81600501541015613fa857613fa183600a836005015402603201613ec5565b9150613fb6565b613fb38360c8613ec5565b91505b5b5092915050565b6000806000613fcd4286613ee3565b9150613fd98285613efc565b905080861015613fec5760009250613ff9565b613ff68682613ee3565b92505b50509392505050565b60006140136006548360020a613e8a565b9050919050565b6000818310614029578161402b565b825b905092915050565b600080600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020935060009250600091505b600a548210156140dd576009600083815260200190815260200160002090506140ce836140c9866001016000868152602001908152602001600020548460010154613e8a565b613ec5565b92508180600101925050614083565b8284600201819055506007548311156140fb576140f985614131565b505b5050505050565b61410e42600554613ec5565b6002819055506141216001546001613ec5565b60018190555061412f6143fd565b565b60008060008061413f614f70565b60009350600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250600b60006012601360158110151561419857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020915081600201548360020154101561420f57600094506143f4565b601260158060200260405190810160405280929190826015801561427e576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614234575b5050505050905061428e86614b8c565b15156142ed57858160146015811015156142a457fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142e88160006014614c22565b6142fb565b6142fa8160006013614c22565b5b600093505b60158410156143ef5760128460158110151561431857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16818560158110151561435e57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff161415156143e257808460158110151561438e57fe5b60200201516012856015811015156143a257fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8380600101945050614300565b600194505b50505050919050565b6000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660288190555060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016096815260200160018152602001428152602001600454815250600d600080815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160af815260200160018152602001428152602001600454815250600d60006001815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160c8815260200160018152602001428152602001600454815250600d60006002815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160e1815260200160018152602001428152602001600454815250600d60006003815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160fa815260200160028152602001428152602001600454815250600d60006004815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040155905050600090505b600e54811015614b1d5760a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016040805190810160405280600581526020017f7469746c6500000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600b81526020017f6465736372697074696f6e0000000000000000000000000000000000000000008152508152602001600081526020016000815250600f600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190614985929190614f94565b5060408201518160020190805190602001906149a2929190614f94565b50606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016040805190810160405280600581526020017f7469746c6500000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600b81526020017f6465736372697074696f6e00000000000000000000000000000000000000000081525081526020016000815260200160008152506010600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190614adb929190614f94565b506040820151816002019080519060200190614af8929190614f94565b506060820151816003015560808201518160040155905050808060010191505061485a565b600090505b601154811015614b89576000601282601581101515614b3d57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050614b22565b50565b600080600090505b6014811015614c1757601281601581101515614bac57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614c0a5760019150614c1c565b8080600101915050614b94565b600091505b50919050565b60008060008085935084925082841415614c3b57614e7d565b866002878703811515614c4a57fe5b058701601581101515614c5957fe5b60200201519150600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090505b8284131515614e54575b8060020154600b60008987601581101515614cc357fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201541115614d19578380600101945050614cac565b5b600b60008885601581101515614d2c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015481600201541115614d8857828060019003935050614d1a565b8284131515614e4f578683601581101515614d9f57fe5b60200201518785601581101515614db257fe5b60200201518886601581101515614dc557fe5b602002018986601581101515614dd757fe5b602002018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505083806001019450508280600190039350505b614ca2565b82861215614e6857614e67878785614c22565b5b84841215614e7c57614e7b878587614c22565b5b5b50505050505050565b61014060405190810160405280600a90602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614eeb57805160ff1916838001178555614f19565b82800160010185558215614f19579182015b82811115614f18578251825591602001919060010190614efd565b5b509050614f269190615014565b5090565b61010060405190810160405280600890602082028038833980820191505090505090565b6060604051908101604052806000815260200160008152602001600081525090565b6102a060405190810160405280601590602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614fd557805160ff1916838001178555615003565b82800160010185558215615003579182015b82811115615002578251825591602001919060010190614fe7565b5b5090506150109190615014565b5090565b61503691905b8082111561503257600081600090555060010161501a565b5090565b905600a165627a7a723058208741b017cd7a7acc68438c65607c89c61a01cbfd59575f7d51e634f5f1195a430029

Deployed Bytecode

0x6080604052600436106101b7576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806308d317dd146101b95780630900f010146101f05780630dda20d11461023357806312065fe0146102f6578063158ef93e146103215780632243fb1514610350578063294cf912146103a757806329dcb0cf146103e85780632aa531d91461041357806339901be8146104b55780633bc0461a1461054557806341fe0a24146105865780634e2786fb1461063c5780634ec2d0b6146106675780634f9d482a146106cd57806368381b96146106f8578063718b0a321461072357806377c936621461075057806378473485146107a75780637892fd29146108fa5780637a6e9e4114610925578063898644cc146109525780639f8ff91d14610995578063a1a200c5146109c0578063ad5b718914610a13578063ba13a57214610a6a578063cee0b4fe14610a81578063d223926f14610aac578063d60207c714610acc578063d65ab5f214610af7578063e3e9bc3f14610b0e578063ea6f1c4a14610b18578063f53d0a8e14610b43578063f737f27414610b9a578063f9d7020014610ced575b005b3480156101c557600080fd5b506101ee6004803603810190808035906020019092919080359060200190929190505050610d17565b005b3480156101fc57600080fd5b50610231600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d3565b005b34801561023f57600080fd5b506102f46004803603810190808035906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611685565b005b34801561030257600080fd5b5061030b611cce565b6040518082815260200191505060405180910390f35b34801561032d57600080fd5b50610336611ced565b604051808215151515815260200191505060405180910390f35b34801561035c57600080fd5b50610391600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cff565b6040518082815260200191505060405180910390f35b3480156103b357600080fd5b506103d260048036038101908080359060200190929190505050611da4565b6040518082815260200191505060405180910390f35b3480156103f457600080fd5b506103fd611de3565b6040518082815260200191505060405180910390f35b34801561041f57600080fd5b50610454600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611de9565b6040518087815260200186815260200185815260200184600860200280838360005b83811015610491578082015181840152602081019050610476565b50505050905001838152602001828152602001965050505050505060405180910390f35b3480156104c157600080fd5b506104e060048036038101908080359060200190929190505050611f0b565b604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561055157600080fd5b5061057060048036038101908080359060200190929190505050611fd5565b6040518082815260200191505060405180910390f35b61063a6004803603810190808035906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611ff3565b005b34801561064857600080fd5b5061065161224a565b6040518082815260200191505060405180910390f35b34801561067357600080fd5b506106cb60048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612250565b005b3480156106d957600080fd5b506106e26125a6565b6040518082815260200191505060405180910390f35b34801561070457600080fd5b5061070d6125ac565b6040518082815260200191505060405180910390f35b34801561072f57600080fd5b5061074e60048036038101908080359060200190929190505050612629565b005b34801561075c57600080fd5b506107656128c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b357600080fd5b506107d2600480360381019080803590602001909291905050506128e7565b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015610854578082015181840152602081019050610839565b50505050905090810190601f1680156108815780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b838110156108ba57808201518184015260208101905061089f565b50505050905090810190601f1680156108e75780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b34801561090657600080fd5b5061090f612a93565b6040518082815260200191505060405180910390f35b34801561093157600080fd5b5061095060048036038101908080359060200190929190505050612a99565b005b34801561095e57600080fd5b50610993600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d46565b005b3480156109a157600080fd5b506109aa612f8c565b6040518082815260200191505060405180910390f35b3480156109cc57600080fd5b506109d5612fa8565b6040518082601560200280838360005b83811015610a005780820151818401526020810190506109e5565b5050505090500191505060405180910390f35b348015610a1f57600080fd5b50610a54600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613029565b6040518082815260200191505060405180910390f35b348015610a7657600080fd5b50610a7f6130d2565b005b348015610a8d57600080fd5b50610a96613351565b6040518082815260200191505060405180910390f35b610aca60048036038101908080359060200190929190505050613357565b005b348015610ad857600080fd5b50610ae161361f565b6040518082815260200191505060405180910390f35b348015610b0357600080fd5b50610b0c6136bb565b005b610b16613756565b005b348015610b2457600080fd5b50610b2d6138c1565b6040518082815260200191505060405180910390f35b348015610b4f57600080fd5b50610b586138c7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba657600080fd5b50610bc5600480360381019080803590602001909291905050506138ed565b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b83811015610c47578082015181840152602081019050610c2c565b50505050905090810190601f168015610c745780820380516001836020036101000a031916815260200191505b50838103825286818151815260200191508051906020019080838360005b83811015610cad578082015181840152602081019050610c92565b50505050905090810190601f168015610cda5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b610d156004803603810190808035906020019092919080359060200190929190505050613a99565b005b60008060008060006002544211151515610d3057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515610d6a57600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515610dbc57600080fd5b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250600854836002015411151561107857600e5489101515610e2157600080fd5b60008a111515610e3057600080fd5b600f60008a8152602001908152602001600020975087600401548a11151515610e5857600080fd5b610e6133613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650600b60008960000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002095506003548a02876003015410151515610f1e57600080fd5b610f2c8a8960030154613e8a565b9450610f3785611fd5565b9350602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505050610ffb86600301546003548c02613ec5565b866003018190555061101587600301546003548c02613ee3565b876003018190555061102b88600401548b613ee3565b88600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc611058876002613efc565b9081150290604051600060405180830381858888f19350505050506113c7565b6000915060006012600960158110151561108e57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561115157600b6000601260096015811015156110e157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061114e81600201546005613e8a565b91505b8183600201541115151561116457600080fd5b600e548910151561117457600080fd5b60008a11151561118357600080fd5b600f60008a8152602001908152602001600020975087600401548a111515156111ab57600080fd5b6111b433613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650600b60008960000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002095506003548a0287600301541015151561127157600080fd5b61127f8a8960030154613e8a565b945061128a85611fd5565b9350602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050505061134e86600301546003548c02613ec5565b866003018190555061136887600301546003548c02613ee3565b876003018190555061137e88600401548b613ee3565b88600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc6113ab876002613efc565b9081150290604051600060405180830381858888f19350505050505b50505050505050505050565b60006113dd614e86565b6000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561143b57600080fd5b62014370600254034210151561145057600080fd5b61147c6114753073ffffffffffffffffffffffffffffffffffffffff1631605a613e8a565b6064613efc565b9250602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6114e66114df3073ffffffffffffffffffffffffffffffffffffffff16316005613e8a565b6064613efc565b9081150290604051600060405180830381858888f193505050505061014060405190810160405280601e60ff168152602001601460ff168152602001600a60ff168152602001600860ff168152602001600760ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152509150600090505b600a81101561166c57600060128260158110151561159157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561165f576012816015811015156115df57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61164361163c868686600a8110151561162f57fe5b602002015160ff16613e8a565b6064613efc565b9081150290604051600060405180830381858888f19350505050505b8080600101915050611577565b8373ffffffffffffffffffffffffffffffffffffffff16ff5b600080600080600254421115151561169c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156116d657600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561172857600080fd5b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925060085483600201541115156119ab576103e88b1015151561178e57600080fd5b60008a11151561179d57600080fd5b6117a633613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002096506003548b02876003015410156117fc57600080fd5b6118046125ac565b9550601060008781526020019081526020016000209450600a8560040154118015611833575084600301548a10155b1561183d57600080fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561190557600b60008660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093506118fc8460030154600354876004015402613ec5565b84600301819055505b338560000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089856003018190555088856001019080519060200190611969929190614eaa565b5087856002019080519060200190611982929190614eaa565b508a856004018190555061199e87600301546003548d02613ee3565b8760030181905550611cc1565b600091506000601260096015811015156119c157fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611a8457600b600060126009601581101515611a1457fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611a8181600201546005613e8a565b91505b81836002015411151515611a9757600080fd5b6103e88b10151515611aa857600080fd5b60008a111515611ab757600080fd5b611ac033613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002096506003548b0287600301541015611b1657600080fd5b611b1e6125ac565b9550601060008781526020019081526020016000209450600a8560040154118015611b4d575084600301548a10155b15611b5757600080fd5b60008560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611c1f57600b60008660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209350611c168460030154600354876004015402613ec5565b84600301819055505b338560000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089856003018190555088856001019080519060200190611c83929190614eaa565b5087856002019080519060200190611c9c929190614eaa565b508a8560040181905550611cb887600301546003548d02613ee3565b87600301819055505b5050505050505050505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000809054906101000a900460ff1681565b600080600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250611d54858460020154613f17565b9350611d5f85613029565b91506103e782141515611d9c57600d60008381526020019081526020016000209050611d99611d92858360010154613e8a565b6064613efc565b93505b505050919050565b600080600d60008481526020019081526020016000209050611ddb611dd6826002015483600301548460040154613fbe565b614002565b915050919050565b60025481565b6000806000611df6614f2a565b600080600080600b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091506001548260000154141515611e7857600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002091505b611e888260030154600354613efc565b975081600401549650611e9f898360020154613f17565b955060009050600090505b600a54811015611eee57816001016000828152602001908152602001600020548582600881101515611ed857fe5b6020020181815250508080600101915050611eaa565b611ef789613029565b935081600501549250505091939550919395565b600080600080600080600c5487101515611f2457600080fd5b600d600088815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550600d6000888152602001908152602001600020600101549450600d6000888152602001908152602001600020600201549350600d6000888152602001908152602001600020600301549250611fb187611da4565b9150600d600088815260200190815260200160002060040154905091939550919395565b6000611fec611fe5836005613e8a565b6064613efc565b9050919050565b6000806000600254421115151561200957600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561204357600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561209557600080fd5b6000861115156120a457600080fd5b6103e887101515156120b557600080fd5b34868802111515156120c657600080fd5b6120ce61361f565b9250600f60008481526020019081526020016000209150600a82600401541180156120fd575081600301548611155b1561210757600080fd5b61211982600401548360030154613e8a565b905060008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156121ba578160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050505b338260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508582600301819055508482600101908051906020019061221e929190614eaa565b5083826002019080519060200190612237929190614eaa565b5086826004018190555050505050505050565b60015481565b600061225a614f4e565b6000806000600254421115151561227057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156122aa57600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156122fc57600080fd5b600a54865114151561230d57600080fd5b600094505b600a548510156123b2576009600086815260200190815260200160002060606040519081016040529081600082015481526020016001820154815260200160028201548152505093508360400151868681518110151561236e57fe5b90602001906020020151118061239b57506000868681518110151561238f57fe5b90602001906020020151105b156123a557600080fd5b8480600101955050612312565b6123bb33613d51565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002092506000915060009050600094505b600a5485101561249c57858581518110151561242157fe5b906020019060200201519050600081111561248f5760096000868152602001908152602001600020606060405190810160405290816000820154815260200160018201548152602001600282015481525050935061248c82612487866000015184613e8a565b613ec5565b91505b8480600101955050612409565b6124a882600354613e8a565b915081836003015410156124bb57600080fd5b600094505b600a5485101561257f5785858151811015156124d857fe5b90602001906020020151905060008111156125725760096000868152602001908152602001600020606060405190810160405290816000820154815260200160018201548152602001600282015481525050935061255884604001516125538560010160008981526020019081526020016000205484613ec5565b61401a565b836001016000878152602001908152602001600020819055505b84806001019550506124c0565b61258d836003015483613ee3565b836003018190555061259e33614033565b505050505050565b60045481565b60008060008060009250600091505b600e54821015612622576010600083815260200190815260200160002090506000816003015414806125f15750600a8160040154105b156125fe57819350612623565b828160030154111561261557806003015492508193505b81806001019250506125bb565b5b50505090565b600080600254421115151561263d57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561267757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156126c957600080fd5b600e54831015156126d957600080fd5b600f600084815260200190815260200160002091503373ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561274c57600080fd5b6000826004015411156127c85761276b82600401548360030154613e8a565b90508160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050505b60008260030181905550600082600401819055506040805190810160405280600581526020017f7469746c65000000000000000000000000000000000000000000000000000000815250826001019080519060200190612829929190614eaa565b506040805190810160405280600b81526020017f6465736372697074696f6e000000000000000000000000000000000000000000815250826002019080519060200190612877929190614eaa565b5060008260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000806000600e548710151561290157600080fd5b6010600088815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129d55780601f106129aa576101008083540402835291602001916129d5565b820191906000526020600020905b8154815290600101906020018083116129b857829003601f168201915b50505050509450806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a745780601f10612a4957610100808354040283529160200191612a74565b820191906000526020600020905b815481529060010190602001808311612a5757829003601f168201915b5050505050935080600401549250806003015491505091939590929450565b60055481565b6000806002544211151515612aad57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515612ae757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515612b3957600080fd5b600e5483101515612b4957600080fd5b6010600084815260200190815260200160002091503373ffffffffffffffffffffffffffffffffffffffff168260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612bbc57600080fd5b600082600401541115612c4d57600b60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612c448160030154600354846004015402613ec5565b81600301819055505b60008260030181905550600082600401819055506040805190810160405280600581526020017f7469746c65000000000000000000000000000000000000000000000000000000815250826001019080519060200190612cae929190614eaa565b506040805190810160405280600b81526020017f6465736372697074696f6e000000000000000000000000000000000000000000815250826002019080519060200190612cfc929190614eaa565b5060008260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000806000806002544211151515612d5d57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515612d9757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515612dea57600080fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209350600084600201541115612e7057600192505b600a54831015612e6f576000846001016000858152602001908152602001600020819055508280600101935050612e3d565b5b60008460030181905550600154846000018190555042846004018190555060008460050181905550600184600101600080815260200190815260200160002081905550600960008081526020019081526020016000209150816001015484600201819055503373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515612f8557600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060015481600001541415612f8457612f6285613d51565b60018460050181905550612f7b81600501546001613ec5565b81600501819055505b5b5050505050565b6000612fa3612f9e6028546001613ec5565b614002565b905090565b612fb0614f70565b601260158060200260405190810160405280929190826015801561301f576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612fd5575b5050505050905090565b60008060006103e79250600091505b600c548210156130cb57600182600c54030390508373ffffffffffffffffffffffffffffffffffffffff16600d600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130be578092506130cb565b8180600101925050613038565b5050919050565b60006130dc614e86565b6000600254421115156130ee57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614151561312857600080fd5b61315461314d3073ffffffffffffffffffffffffffffffffffffffff1631605a613e8a565b6064613efc565b9250602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6131be6131b73073ffffffffffffffffffffffffffffffffffffffff16316005613e8a565b6064613efc565b9081150290604051600060405180830381858888f193505050505061014060405190810160405280601e60ff168152602001601460ff168152602001600a60ff168152602001600860ff168152602001600760ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff168152509150600090505b600a81101561334457600060128260158110151561326957fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515613337576012816015811015156132b757fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61331b613314868686600a8110151561330757fe5b602002015160ff16613e8a565b6064613efc565b9081150290604051600060405180830381858888f19350505050505b808060010191505061324f565b61334c614102565b505050565b60035481565b6000806000600254421115151561336d57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156133a757600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156133f957600080fd5b600c548410151561340957600080fd5b600d6000858152602001908152602001600020925061342784611da4565b34108061348357508260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561348d57600080fd5b8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6135016134fc87611da4565b611fd5565b9081150290604051600060405180830381858888f193505050505060008273ffffffffffffffffffffffffffffffffffffffff1614151561358f578173ffffffffffffffffffffffffffffffffffffffff166108fc61357361356c61356588611da4565b6037613e8a565b6064613efc565b9081150290604051600060405180830381858888f19350505050505b61359833613d51565b6135a182613d51565b6135b8836002015484600301548560040154613fbe565b90506135c5816001613ec5565b8360020181905550428360030181905550338360000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9250600091505b600e548210156136b457600f600083815260200190815260200160002090506000816003015414806136835750600a8160040154105b15613690578193506136b5565b82816003015410156136a757806003015492508193505b818060010192505061364d565b5b50505090565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561371757600080fd5b6000809054906101000a900460ff1615151561373257600080fd5b61373a614102565b60016000806101000a81548160ff021916908315150217905550565b600254421115151561376757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161415156137a157600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415156137f357600080fd5b6137fb612f8c565b341015151561380957600080fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613850602854614002565b9081150290604051600060405180830381858888f193505050505033602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138b96028546001613ec5565b602881905550565b60285481565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060806000806000600e548710151561390757600080fd5b600f600088815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169550806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156139db5780601f106139b0576101008083540402835291602001916139db565b820191906000526020600020905b8154815290600101906020018083116139be57829003601f168201915b50505050509450806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a7a5780601f10613a4f57610100808354040283529160200191613a7a565b820191906000526020600020905b815481529060010190602001808311613a5d57829003601f168201915b5050505050935080600401549250806003015491505091939590929450565b6000806000806002544211151515613ab057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16141515613aea57600080fd5b600154600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515613b3c57600080fd5b600e5485101515613b4c57600080fd5b600086111515613b5b57600080fd5b60106000868152602001908152602001600020935083600401548611151515613b8357600080fd5b836003015486023410151515613b9857600080fd5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250613be7868560030154613e8a565b9150613bf282611fd5565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505050602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613cb4573d6000803e3d6000fd5b50613cc783600301546003548802613ec5565b8360030181905550613cdd846004015487613ee3565b84600401819055508360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc613d2e846002613efc565b9081150290604051600060405180830381858888f1935050505050505050505050565b6000806000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015442111515613da657600080fd5b6000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154141515613e8457600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250613e41428460040154613ee3565b9150613e4c84611cff565b90504283600401819055506000811115613e8357613e6a8183613e8a565b9050613e7a836003015482613ec5565b83600301819055505b5b50505050565b6000806000841415613e9f5760009150613ebe565b8284029050828482811515613eb057fe5b04141515613eba57fe5b8091505b5092915050565b6000808284019050838110151515613ed957fe5b8091505092915050565b6000828211151515613ef157fe5b818303905092915050565b6000808284811515613f0a57fe5b0490508091505092915050565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600581600501541015613f8057613f7983600a836005015402613ec5565b9150613fb7565b600a81600501541015613fa857613fa183600a836005015402603201613ec5565b9150613fb6565b613fb38360c8613ec5565b91505b5b5092915050565b6000806000613fcd4286613ee3565b9150613fd98285613efc565b905080861015613fec5760009250613ff9565b613ff68682613ee3565b92505b50509392505050565b60006140136006548360020a613e8a565b9050919050565b6000818310614029578161402b565b825b905092915050565b600080600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020935060009250600091505b600a548210156140dd576009600083815260200190815260200160002090506140ce836140c9866001016000868152602001908152602001600020548460010154613e8a565b613ec5565b92508180600101925050614083565b8284600201819055506007548311156140fb576140f985614131565b505b5050505050565b61410e42600554613ec5565b6002819055506141216001546001613ec5565b60018190555061412f6143fd565b565b60008060008061413f614f70565b60009350600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209250600b60006012601360158110151561419857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020915081600201548360020154101561420f57600094506143f4565b601260158060200260405190810160405280929190826015801561427e576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614234575b5050505050905061428e86614b8c565b15156142ed57858160146015811015156142a457fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142e88160006014614c22565b6142fb565b6142fa8160006013614c22565b5b600093505b60158410156143ef5760128460158110151561431857fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16818560158110151561435e57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff161415156143e257808460158110151561438e57fe5b60200201516012856015811015156143a257fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8380600101945050614300565b600194505b50505050919050565b6000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660288190555060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016096815260200160018152602001428152602001600454815250600d600080815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160af815260200160018152602001428152602001600454815250600d60006001815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160c8815260200160018152602001428152602001600454815250600d60006002815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160e1815260200160018152602001428152602001600454815250600d60006003815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015590505060a0604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160fa815260200160028152602001428152602001600454815250600d60006004815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040155905050600090505b600e54811015614b1d5760a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016040805190810160405280600581526020017f7469746c6500000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600b81526020017f6465736372697074696f6e0000000000000000000000000000000000000000008152508152602001600081526020016000815250600f600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190614985929190614f94565b5060408201518160020190805190602001906149a2929190614f94565b50606082015181600301556080820151816004015590505060a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016040805190810160405280600581526020017f7469746c6500000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600b81526020017f6465736372697074696f6e00000000000000000000000000000000000000000081525081526020016000815260200160008152506010600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001019080519060200190614adb929190614f94565b506040820151816002019080519060200190614af8929190614f94565b506060820151816003015560808201518160040155905050808060010191505061485a565b600090505b601154811015614b89576000601282601581101515614b3d57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050614b22565b50565b600080600090505b6014811015614c1757601281601581101515614bac57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614c0a5760019150614c1c565b8080600101915050614b94565b600091505b50919050565b60008060008085935084925082841415614c3b57614e7d565b866002878703811515614c4a57fe5b058701601581101515614c5957fe5b60200201519150600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090505b8284131515614e54575b8060020154600b60008987601581101515614cc357fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201541115614d19578380600101945050614cac565b5b600b60008885601581101515614d2c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015481600201541115614d8857828060019003935050614d1a565b8284131515614e4f578683601581101515614d9f57fe5b60200201518785601581101515614db257fe5b60200201518886601581101515614dc557fe5b602002018986601581101515614dd757fe5b602002018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505083806001019450508280600190039350505b614ca2565b82861215614e6857614e67878785614c22565b5b84841215614e7c57614e7b878587614c22565b5b5b50505050505050565b61014060405190810160405280600a90602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614eeb57805160ff1916838001178555614f19565b82800160010185558215614f19579182015b82811115614f18578251825591602001919060010190614efd565b5b509050614f269190615014565b5090565b61010060405190810160405280600890602082028038833980820191505090505090565b6060604051908101604052806000815260200160008152602001600081525090565b6102a060405190810160405280601590602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614fd557805160ff1916838001178555615003565b82800160010185558215615003579182015b82811115615002578251825591602001919060010190614fe7565b5b5090506150109190615014565b5090565b61503691905b8082111561503257600081600090555060010161501a565b5090565b905600a165627a7a723058208741b017cd7a7acc68438c65607c89c61a01cbfd59575f7d51e634f5f1195a430029

Swarm Source

bzzr://8741b017cd7a7acc68438c65607c89c61a01cbfd59575f7d51e634f5f1195a43

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  ]
[ 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.