ETH Price: $2,632.14 (+1.20%)
Gas: 1 Gwei

Contract

0xE1DbBCE4570B815b6ce3434bB3097dc9f453c565
 

Overview

ETH Balance

2.556535082281214692 ETH

Eth Value

$6,729.16 (@ $2,632.14/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Returns75671382019-04-14 16:28:171945 days ago1555259297IN
0xE1DbBCE4...9f453c565
0 ETH0.000067481
Withdraw Dev Sha...66926542018-11-12 20:08:242098 days ago1542053304IN
0xE1DbBCE4...9f453c565
0 ETH0.0002597213
Start New Round66810472018-11-10 22:33:342100 days ago1541889214IN
0xE1DbBCE4...9f453c565
0.001 ETH0.001974088
Buy Shares65837572018-10-25 23:50:302116 days ago1540511430IN
0xE1DbBCE4...9f453c565
0.001 ETH0.000069333
Withdraw Returns65720222018-10-24 1:55:322118 days ago1540346132IN
0xE1DbBCE4...9f453c565
0 ETH0.0006036911
Withdraw Returns65696652018-10-23 16:41:062118 days ago1540312866IN
0xE1DbBCE4...9f453c565
0 ETH0.000472417
Withdraw Returns65624812018-10-22 12:23:362119 days ago1540211016IN
0xE1DbBCE4...9f453c565
0 ETH0.000399316
Withdraw Returns65605052018-10-22 4:34:162119 days ago1540182856IN
0xE1DbBCE4...9f453c565
0 ETH0.000328979
Withdraw Returns65569362018-10-21 14:47:512120 days ago1540133271IN
0xE1DbBCE4...9f453c565
0 ETH0.000105434.3
Withdraw Returns65569362018-10-21 14:47:512120 days ago1540133271IN
0xE1DbBCE4...9f453c565
0 ETH0.000222713.3
Withdraw Returns65563332018-10-21 12:21:112120 days ago1540124471IN
0xE1DbBCE4...9f453c565
0 ETH0.000472417
Reinvest Returns65536642018-10-21 1:49:292121 days ago1540086569IN
0xE1DbBCE4...9f453c565
0 ETH0.0009047413
Reinvest Returns65527242018-10-20 22:07:582121 days ago1540073278IN
0xE1DbBCE4...9f453c565
0 ETH0.000278384
Withdraw Returns65525582018-10-20 21:30:432121 days ago1540071043IN
0xE1DbBCE4...9f453c565
0 ETH0.000324637
Finalize Last Ro...65525552018-10-20 21:29:542121 days ago1540070994IN
0xE1DbBCE4...9f453c565
0 ETH0.000658475
Reinvest Returns65525392018-10-20 21:27:232121 days ago1540070843IN
0xE1DbBCE4...9f453c565
0 ETH0.000213264
Buy Shares65524492018-10-20 21:05:512121 days ago1540069551IN
0xE1DbBCE4...9f453c565
0.001 ETH0.000614395.2
Buy Shares65523632018-10-20 20:46:042121 days ago1540068364IN
0xE1DbBCE4...9f453c565
0.005 ETH0.001019589
Buy Shares65523482018-10-20 20:42:522121 days ago1540068172IN
0xE1DbBCE4...9f453c565
0.001 ETH0.000827077
Buy Shares65523412018-10-20 20:41:412121 days ago1540068101IN
0xE1DbBCE4...9f453c565
0.001 ETH0.0012401713
Buy Shares65522892018-10-20 20:30:172121 days ago1540067417IN
0xE1DbBCE4...9f453c565
0.001 ETH0.000472614
Buy Shares65522882018-10-20 20:29:522121 days ago1540067392IN
0xE1DbBCE4...9f453c565
0.001 ETH0.0009539810
Withdraw Returns65519982018-10-20 19:25:252121 days ago1540063525IN
0xE1DbBCE4...9f453c565
0 ETH0.00041998
Buy Shares65513182018-10-20 16:39:052121 days ago1540053545IN
0xE1DbBCE4...9f453c565
0.001 ETH0.000612184.5
Buy Shares65512682018-10-20 16:26:522121 days ago1540052812IN
0xE1DbBCE4...9f453c565
0.001 ETH0.0018104210
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
75671382019-04-14 16:28:171945 days ago1555259297
0xE1DbBCE4...9f453c565
0.0005113 ETH
66926542018-11-12 20:08:242098 days ago1542053304
0xE1DbBCE4...9f453c565
0.0191 ETH
65720222018-10-24 1:55:322118 days ago1540346132
0xE1DbBCE4...9f453c565
0.00674476 ETH
65696652018-10-23 16:41:062118 days ago1540312866
0xE1DbBCE4...9f453c565
0.02081567 ETH
65624812018-10-22 12:23:362119 days ago1540211016
0xE1DbBCE4...9f453c565
0.0011288 ETH
65605052018-10-22 4:34:162119 days ago1540182856
0xE1DbBCE4...9f453c565
0.00331142 ETH
65569362018-10-21 14:47:512120 days ago1540133271
0xE1DbBCE4...9f453c565
0.00078003 ETH
65563332018-10-21 12:21:112120 days ago1540124471
0xE1DbBCE4...9f453c565
0.00100337 ETH
65525582018-10-20 21:30:432121 days ago1540071043
0xE1DbBCE4...9f453c565
0.04586 ETH
65525552018-10-20 21:29:542121 days ago1540070994
0xE1DbBCE4...9f453c565
0.00117 ETH
65519982018-10-20 19:25:252121 days ago1540063525
0xE1DbBCE4...9f453c565
0.02100829 ETH
65512622018-10-20 16:25:452121 days ago1540052745
0xE1DbBCE4...9f453c565
0.00877079 ETH
65499462018-10-20 11:23:542121 days ago1540034634
0xE1DbBCE4...9f453c565
0.00014614 ETH
65476302018-10-20 2:14:082121 days ago1540001648
0xE1DbBCE4...9f453c565
0.01536752 ETH
65471692018-10-20 0:27:062122 days ago1539995226
0xE1DbBCE4...9f453c565
0.04383418 ETH
65462102018-10-19 20:35:252122 days ago1539981325
0xE1DbBCE4...9f453c565
0.01476591 ETH
65461532018-10-19 20:23:292122 days ago1539980609
0xE1DbBCE4...9f453c565
0.94397894 ETH
65461482018-10-19 20:22:352122 days ago1539980555
0xE1DbBCE4...9f453c565
0.06489 ETH
65452122018-10-19 16:45:372122 days ago1539967537
0xE1DbBCE4...9f453c565
0.00088086 ETH
65423652018-10-19 5:30:092122 days ago1539927009
0xE1DbBCE4...9f453c565
0.01015015 ETH
65397742018-10-18 19:12:452123 days ago1539889965
0xE1DbBCE4...9f453c565
0.03002553 ETH
65397562018-10-18 19:08:202123 days ago1539889700
0xE1DbBCE4...9f453c565
0.11634668 ETH
65363672018-10-18 5:59:322123 days ago1539842372
0xE1DbBCE4...9f453c565
0.03712339 ETH
65346572018-10-17 23:15:382124 days ago1539818138
0xE1DbBCE4...9f453c565
0.00418398 ETH
65346312018-10-17 23:08:592124 days ago1539817739
0xE1DbBCE4...9f453c565
0.00086286 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MobiusRED

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-10-04
*/

pragma solidity^0.4.24;

/**
*                          MOBIUS RED
*                     https://mobius.red/
*                                       
*    This game was inspired by FOMO3D. Our code is much cleaner and more efficient (built from scratch).
*    Some useless "features" like the teams were not implemented.
* 
*    The Mobius RED game consists of rounds with guaranteed winners!
*    You buy "shares" (instad of keys) for a given round, and you get returns from investors after you.
*    The share price is constant until the hard deadline, after which it increases exponentially. 
*    If a round is inactive for a day it can end earlier than the hard deadline.
*    If a round runs longer, it is guaranteed to finish not much after the hard deadline (and the last investor gets the big jackpot).
*    Additionally, if you invest more than 0.1 ETH you get a chance to win an airdrop and you get bonus shares
*    Part of all funds also go to a big final jackpot - the last investor (before a round runs out) wins.
*    Payouts work in REAL TIME - you can withdraw your returns at any time!
*    Additionally, the first round is an ICO, so you'll also get our tokens by participating!
*    !!!!!!!!!!!!!!
*    Token holders will receive part of current and future revenue of this and any other game we develop!
*    !!!!!!!!!!!!!!
*/
 
 
contract DSMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x);
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x);
    }
    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    function min(uint x, uint y) internal pure returns (uint z) {
        return x <= y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        return x >= y ? x : y;
    }
    function imin(int x, int y) internal pure returns (int z) {
        return x <= y ? x : y;
    }
    function imax(int x, int y) internal pure returns (int z) {
        return x >= y ? x : y;
    }

    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }
    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }
    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }
    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    // This famous algorithm is called "exponentiation by squaring"
    // and calculates x^n with x as fixed-point and n as regular unsigned.
    //
    // It's O(log n), instead of O(n) for naive repeated multiplication.
    //
    // These facts are why it works:
    //
    //  If n is even, then x^n = (x^2)^(n/2).
    //  If n is odd,  then x^n = x * x^(n-1),
    //   and applying the equation for even x gives
    //    x^n = x * (x^2)^((n-1) / 2).
    //
    //  Also, EVM division is flooring and
    //    floor[(n-1) / 2] = floor[n / 2].
    //
    function rpow(uint x, uint n) internal pure returns (uint z) {
        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }
}

contract DSAuthority {
    function canCall(
        address src, address dst, bytes4 sig
    ) public view returns (bool);
}

contract DSAuthEvents {
    event LogSetAuthority (address indexed authority);
    event LogSetOwner     (address indexed owner);
}

contract DSAuth is DSAuthEvents {
    DSAuthority  public  authority;
    address      public  owner;

    constructor() public {
        owner = msg.sender;
        emit LogSetOwner(msg.sender);
    }

    function setOwner(address owner_)
        public
        auth
    {
        owner = owner_;
        emit LogSetOwner(owner);
    }

    function setAuthority(DSAuthority authority_)
        public
        auth
    {
        authority = authority_;
        emit LogSetAuthority(authority);
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig));
        _;
    }

    function isAuthorized(address src, bytes4 sig) internal view returns (bool) {
        if (src == address(this)) {
            return true;
        } else if (src == owner) {
            return true;
        } else if (authority == DSAuthority(0)) {
            return false;
        } else {
            return authority.canCall(src, this, sig);
        }
    }
}

interface MobiusRedToken {
    function mint(address _to, uint _amount) external;
    function finishMinting() external returns (bool);
    function disburseDividends() external payable;
}
 
contract MobiusRED is DSMath, DSAuth {
    // IPFS hash of the website - can be accessed even if our domain goes down.
    // Just go to any public IPFS gateway and use this hash - e.g. ipfs.infura.io/ipfs/<ipfsHash>
    string public ipfsHash;
    string public ipfsHashType = "ipfs"; // can either be ipfs, or ipns

    MobiusRedToken public token;

    // In case of an upgrade, these variables will be set. An upgrade does not affect a currently running round,
    // nor does it do anything with investors' vaults.
    bool public upgraded;
    address public nextVersion;

    // Total stats
    uint public totalSharesSold;
    uint public totalEarningsGenerated;
    uint public totalDividendsPaid;
    uint public totalJackpotsWon;

    // Fractions for where revenue goes
    uint public constant DEV_FRACTION = WAD / 20;             // 5% goes to devs
    uint public constant DEV_DIVISOR = 20;             // 5% 

    uint public constant RETURNS_FRACTION = 65 * 10**16;      // 65% goes to share holders
    // 1% if it is a referral purchase, this value will be taken from the above fraction (e.g. if 1% is for refferals, then 64% goes to returns) 
    uint public constant REFERRAL_FRACTION = 1 * 10**16;  
    uint public constant JACKPOT_SEED_FRACTION = WAD / 20;    // 5% goes to the next round's jackpot
    uint public constant JACKPOT_FRACTION = 15 * 10**16;      // 15% goes to the final jackpot
    uint public constant AIRDROP_FRACTION = WAD / 100;        // 1% goes to airdrops
    uint public constant DIVIDENDS_FRACTION = 9 * 10**16;     // 9% goes to token holders!

    uint public constant STARTING_SHARE_PRICE = 1 finney; // a 1000th of an ETH
    uint public constant PRICE_INCREASE_PERIOD = 1 hours; // how often the price doubles after the hard deadline

    uint public constant HARD_DEADLINE_DURATION = 10 days; // hard deadline is this much after the round start
    uint public constant SOFT_DEADLINE_DURATION = 1 days; // max soft deadline
    uint public constant TIME_PER_SHARE = 5 minutes; // how much time is added to the soft deadline per share purchased
    
    uint public jackpotSeed;// Jackpot from previous rounds
    uint public devBalance; // outstanding balance for devs
    uint public raisedICO;

    // Helpers to calculate returns - no funds are ever held on lockdown
    uint public unclaimedReturns;
    uint public constant MULTIPLIER = RAY;

    // This represents an investor. No need to player IDs - they are useless (everyone already has a unique address).
    // Just use native mappings (duh!)
    struct Investor {
        uint lastCumulativeReturnsPoints;
        uint shares;
    }

    // This represents a round
    struct MobiusRound {
        uint totalInvested;        
        uint jackpot;
        uint airdropPot;
        uint totalShares;
        uint cumulativeReturnsPoints; // this is to help calculate returns when the total number of shares changes
        uint hardDeadline;
        uint softDeadline;
        uint price;
        uint lastPriceIncreaseTime;
        address lastInvestor;
        bool finalized;
        mapping (address => Investor) investors;
    }

    struct Vault {
        uint totalReturns; // Total balance = returns + referral returns + jackpots/airdrops 
        uint refReturns; // how much of the total is from referrals
    }

    mapping (address => Vault) vaults;

    uint public latestRoundID;// the first round has an ID of 0
    MobiusRound[] rounds;

    event SharesIssued(address indexed to, uint shares);
    event ReturnsWithdrawn(address indexed by, uint amount);
    event JackpotWon(address by, uint amount);
    event AirdropWon(address by, uint amount);
    event RoundStarted(uint indexed ID, uint hardDeadline);
    event IPFSHashSet(string _type, string _hash);

    constructor(address _token) public {
        token = MobiusRedToken(_token);
    }

    // The return values will include all vault balance, but you must specify a roundID because
    // Returns are not actually calculated in storage until you invest in the round or withdraw them
    function estimateReturns(address investor, uint roundID) public view 
    returns (uint totalReturns, uint refReturns) 
    {
        MobiusRound storage rnd = rounds[roundID];
        uint outstanding;
        if(rounds.length > 1) {
            if(hasReturns(investor, roundID - 1)) {
                MobiusRound storage prevRnd = rounds[roundID - 1];
                outstanding = _outstandingReturns(investor, prevRnd);
            }
        }

        outstanding += _outstandingReturns(investor, rnd);
        
        totalReturns = vaults[investor].totalReturns + outstanding;
        refReturns = vaults[investor].refReturns;
    }

    function hasReturns(address investor, uint roundID) public view returns (bool) {
        MobiusRound storage rnd = rounds[roundID];
        return rnd.cumulativeReturnsPoints > rnd.investors[investor].lastCumulativeReturnsPoints;
    }

    function investorInfo(address investor, uint roundID) external view
    returns(uint shares, uint totalReturns, uint referralReturns) 
    {
        MobiusRound storage rnd = rounds[roundID];
        shares = rnd.investors[investor].shares;
        (totalReturns, referralReturns) = estimateReturns(investor, roundID);
    }

    function roundInfo(uint roundID) external view 
    returns(
        address leader, 
        uint price,
        uint jackpot, 
        uint airdrop, 
        uint shares, 
        uint totalInvested,
        uint distributedReturns,
        uint _hardDeadline,
        uint _softDeadline,
        bool finalized
        )
    {
        MobiusRound storage rnd = rounds[roundID];
        leader = rnd.lastInvestor;
        price = rnd.price;
        jackpot = rnd.jackpot;
        airdrop = rnd.airdropPot;
        shares = rnd.totalShares;
        totalInvested = rnd.totalInvested;
        distributedReturns = wmul(rnd.totalInvested, RETURNS_FRACTION);
        _hardDeadline = rnd.hardDeadline;
        _softDeadline = rnd.softDeadline;
        finalized = rnd.finalized;
    }

    function totalsInfo() external view 
    returns(
        uint totalReturns,
        uint totalShares,
        uint totalDividends,
        uint totalJackpots
    ) {
        MobiusRound storage rnd = rounds[latestRoundID];
        if(rnd.softDeadline > now) {
            totalShares = totalSharesSold + rnd.totalShares;
            totalReturns = totalEarningsGenerated + wmul(rnd.totalInvested, RETURNS_FRACTION);
            totalDividends = totalDividendsPaid + wmul(rnd.totalInvested, DIVIDENDS_FRACTION);
        } else {
            totalShares = totalSharesSold;
            totalReturns = totalEarningsGenerated;
            totalDividends = totalDividendsPaid;
        }
        totalJackpots = totalJackpotsWon;
    }

    function () public payable {
        buyShares(address(0x0));
    }

    /// Function to buy shares in the latest round. Purchase logic is abstracted
    function buyShares(address ref) public payable {        
        if(rounds.length > 0) {
            MobiusRound storage rnd = rounds[latestRoundID];   
               
            _purchase(rnd, msg.value, ref);            
        } else {
            revert("Not yet started");
        }
    }

    /// Function to purchase with what you have in your vault as returns
    function reinvestReturns(uint value) public {        
        reinvestReturns(value, address(0x0));
    }

    function reinvestReturns(uint value, address ref) public {        
        MobiusRound storage rnd = rounds[latestRoundID];
        _updateReturns(msg.sender, rnd);        
        require(vaults[msg.sender].totalReturns >= value, "Can't spend what you don't have");        
        vaults[msg.sender].totalReturns = sub(vaults[msg.sender].totalReturns, value);
        vaults[msg.sender].refReturns = min(vaults[msg.sender].refReturns, vaults[msg.sender].totalReturns);
        unclaimedReturns = sub(unclaimedReturns, value);
        _purchase(rnd, value, ref);
    }

    function withdrawReturns() public {
        MobiusRound storage rnd = rounds[latestRoundID];

        if(rounds.length > 1) {// check if they also have returns from before
            if(hasReturns(msg.sender, latestRoundID - 1)) {
                MobiusRound storage prevRnd = rounds[latestRoundID - 1];
                _updateReturns(msg.sender, prevRnd);
            }
        }
        _updateReturns(msg.sender, rnd);
        uint amount = vaults[msg.sender].totalReturns;
        require(amount > 0, "Nothing to withdraw!");
        unclaimedReturns = sub(unclaimedReturns, amount);
        vaults[msg.sender].totalReturns = 0;
        vaults[msg.sender].refReturns = 0;
        
        rnd.investors[msg.sender].lastCumulativeReturnsPoints = rnd.cumulativeReturnsPoints;
        msg.sender.transfer(amount);

        emit ReturnsWithdrawn(msg.sender, amount);
    }

    // Manually update your returns for a given round in case you were inactive since before it ended
    function updateMyReturns(uint roundID) public {
        MobiusRound storage rnd = rounds[roundID];
        _updateReturns(msg.sender, rnd);
    }

    function finalizeAndRestart() public payable {
        finalizeLastRound();
        startNewRound();
    }

    /// Anyone can start a new round
    function startNewRound() public payable {
        require(!upgraded, "This contract has been upgraded!");
        if(rounds.length > 0) {
            require(rounds[latestRoundID].finalized, "Previous round not finalized");
            require(rounds[latestRoundID].softDeadline < now, "Previous round still running");
        }
        uint _rID = rounds.length++;
        MobiusRound storage rnd = rounds[_rID];
        latestRoundID = _rID;

        rnd.lastInvestor = msg.sender;
        rnd.price = STARTING_SHARE_PRICE;
        rnd.hardDeadline = now + HARD_DEADLINE_DURATION;
        rnd.softDeadline = now + SOFT_DEADLINE_DURATION;
        rnd.jackpot = jackpotSeed;
        jackpotSeed = 0; 

        _purchase(rnd, msg.value, address(0x0));
        emit RoundStarted(_rID, rnd.hardDeadline);
    }

    /// Anyone can finalize a finished round
    function finalizeLastRound() public {
        MobiusRound storage rnd = rounds[latestRoundID];
        _finalizeRound(rnd);
    }
    
    /// This is how devs pay the bills
    function withdrawDevShare() public auth {
        uint value = devBalance;
        devBalance = 0;
        msg.sender.transfer(value);
    }

    function setIPFSHash(string _type, string _hash) public auth {
        ipfsHashType = _type;
        ipfsHash = _hash;
        emit IPFSHashSet(_type, _hash);
    }

    function upgrade(address _nextVersion) public auth {
        require(_nextVersion != address(0x0), "Invalid Address!");
        require(!upgraded, "Already upgraded!");
        upgraded = true;
        nextVersion = _nextVersion;
        if(rounds[latestRoundID].finalized) {
            //if last round was finalized (and no new round was started), transfer the jackpot seed to the new version
            vaults[nextVersion].totalReturns = jackpotSeed;
            jackpotSeed = 0;
        }
    }

    /// Purchase logic
    function _purchase(MobiusRound storage rnd, uint value, address ref) internal {
        require(rnd.softDeadline >= now, "After deadline!");
        require(value >= rnd.price/10, "Not enough Ether!");
        rnd.totalInvested = add(rnd.totalInvested, value);

        // Set the last investor (to win the jackpot after the deadline)
        if(value >= rnd.price)
            rnd.lastInvestor = msg.sender;
        // Check out airdrop 
        _airDrop(rnd, value);
        // Process revenue in different "buckets"
        _splitRevenue(rnd, value, ref);
        // Update returns before issuing shares
        _updateReturns(msg.sender, rnd);
        //issue shares for the current round. 1 share = 1 time increase for the deadline
        uint newShares = _issueShares(rnd, msg.sender, value);

        //Mint tokens during the first round
        if(rounds.length == 1) {
            token.mint(msg.sender, newShares);
        }
        uint timeIncreases = newShares/WAD;// since 1 share is represented by 1 * 10^18, divide by 10^18
        // adjust soft deadline to new soft deadline
        uint newDeadline = add(rnd.softDeadline, mul(timeIncreases, TIME_PER_SHARE));
        rnd.softDeadline = min(newDeadline, now + SOFT_DEADLINE_DURATION);
        // If after hard deadline, double the price every price increase periods
        if(now > rnd.hardDeadline) {
            if(now > rnd.lastPriceIncreaseTime + PRICE_INCREASE_PERIOD) {
                rnd.price = rnd.price * 2;
                rnd.lastPriceIncreaseTime = now;
            }
        }
    }

    function _finalizeRound(MobiusRound storage rnd) internal {
        require(!rnd.finalized, "Already finalized!");
        require(rnd.softDeadline < now, "Round still running!");

        if(rounds.length == 1) {
            // After finishing minting tokens they will be transferable and dividends will be available!
            require(token.finishMinting(), "Couldn't finish minting tokens!");
        }
        // Transfer jackpot to winner's vault
        vaults[rnd.lastInvestor].totalReturns = add(vaults[rnd.lastInvestor].totalReturns, rnd.jackpot);
        unclaimedReturns = add(unclaimedReturns, rnd.jackpot);
        
        emit JackpotWon(rnd.lastInvestor, rnd.jackpot);
        totalJackpotsWon += rnd.jackpot;
        // transfer the leftover to the next round's jackpot
        jackpotSeed = add(jackpotSeed, wmul(rnd.totalInvested, JACKPOT_SEED_FRACTION));
        //Empty the AD pot if it has a balance.
        jackpotSeed = add(jackpotSeed, rnd.airdropPot);
        if(upgraded) {
            // if upgraded transfer the jackpot seed to the new version
            vaults[nextVersion].totalReturns = jackpotSeed;
            jackpotSeed = 0; 
        }        
        //Send out dividends to token holders
        uint _div;
        if(rounds.length == 1){
            // 2% during the first round, and the normal fraction otherwise
            _div = wmul(rnd.totalInvested, 2 * 10**16);            
        } else {
            _div = wmul(rnd.totalInvested, DIVIDENDS_FRACTION);            
        }
        token.disburseDividends.value(_div)();
        totalDividendsPaid += _div;
        totalSharesSold += rnd.totalShares;
        totalEarningsGenerated += wmul(rnd.totalInvested, RETURNS_FRACTION);

        rnd.finalized = true;
    }

    /** 
        This is where the magic happens: every investor gets an exact share of all returns proportional to their shares
        If you're early, you'll have a larger share for longer, so obviously you earn more.
    */
    function _updateReturns(address _investor, MobiusRound storage rnd) internal {
        if(rnd.investors[_investor].shares == 0) {
            return;
        }
        
        uint outstanding = _outstandingReturns(_investor, rnd);

        // if there are any returns, transfer them to the investor's vaults
        if (outstanding > 0) {
            vaults[_investor].totalReturns = add(vaults[_investor].totalReturns, outstanding);
        }

        rnd.investors[_investor].lastCumulativeReturnsPoints = rnd.cumulativeReturnsPoints;
    }

    function _outstandingReturns(address _investor, MobiusRound storage rnd) internal view returns(uint) {
        if(rnd.investors[_investor].shares == 0) {
            return 0;
        }
        // check if there've been new returns
        uint newReturns = sub(
            rnd.cumulativeReturnsPoints, 
            rnd.investors[_investor].lastCumulativeReturnsPoints
            );

        uint outstanding = 0;
        if(newReturns != 0) { 
            // outstanding returns = (total new returns points * ivestor shares) / MULTIPLIER
            // The MULTIPLIER is used also at the point of returns disbursment
            outstanding = mul(newReturns, rnd.investors[_investor].shares) / MULTIPLIER;
        }

        return outstanding;
    }

    /// Process revenue according to fractions
    function _splitRevenue(MobiusRound storage rnd, uint value, address ref) internal {
        uint roundReturns;
        uint returnsOffset;
        if(rounds.length == 1){
            returnsOffset = 13 * 10**16;// during the first round reduce returns (by 13%) and give more to the ICO
        }
        if(ref != address(0x0)) {
            // if there was a referral
            roundReturns = wmul(value, RETURNS_FRACTION - REFERRAL_FRACTION - returnsOffset);
            uint _ref = wmul(value, REFERRAL_FRACTION);
            vaults[ref].totalReturns = add(vaults[ref].totalReturns, _ref);            
            vaults[ref].refReturns = add(vaults[ref].refReturns, _ref);
            unclaimedReturns = add(unclaimedReturns, _ref);
        } else {
            roundReturns = wmul(value, RETURNS_FRACTION - returnsOffset);
        }
        
        uint airdrop = wmul(value, AIRDROP_FRACTION);
        uint jackpot = wmul(value, JACKPOT_FRACTION);
        
        uint dev;
        // During the ICO, devs get 25% (5% originally, 7% from the dividends fraction, 
        // and 13% from the returns), leaving 2% for dividends, and 52% for returns 
        // This is only during the first round, and later rounds leave the original fractions:
        // 5% for devs, 9% dividends, 65% returns 
        if(rounds.length == 1){
            // calculate dividends at the end, no need to do it at every purchase
            dev = value / 4; // 25% 
            raisedICO += dev;
        } else {
            dev = value / DEV_DIVISOR;
        }
        // if this is the first purchase, send to jackpot (no one can claim these returns otherwise)
        if(rnd.totalShares == 0) {
            rnd.jackpot = add(rnd.jackpot, roundReturns);
        } else {
            _disburseReturns(rnd, roundReturns);
        }
        
        rnd.airdropPot = add(rnd.airdropPot, airdrop);
        rnd.jackpot = add(rnd.jackpot, jackpot);
        devBalance = add(devBalance, dev);
    }

    function _disburseReturns(MobiusRound storage rnd, uint value) internal {
        unclaimedReturns = add(unclaimedReturns, value);// keep track of unclaimed returns
        // The returns points represent returns*MULTIPLIER/totalShares (at the point of purchase)
        // This allows us to keep outstanding balances of shareholders when the total supply changes in real time
        if(rnd.totalShares == 0) {
            rnd.cumulativeReturnsPoints = mul(value, MULTIPLIER) / wdiv(value, rnd.price);
        } else {
            rnd.cumulativeReturnsPoints = add(
                rnd.cumulativeReturnsPoints, 
                mul(value, MULTIPLIER) / rnd.totalShares
            );
        }
    }

    function _issueShares(MobiusRound storage rnd, address _investor, uint value) internal returns(uint) {    
        if(rnd.investors[_investor].lastCumulativeReturnsPoints == 0) {
            rnd.investors[_investor].lastCumulativeReturnsPoints = rnd.cumulativeReturnsPoints;
        }    
        
        uint newShares = wdiv(value, rnd.price);
        
        //bonuses:
        if(value >= 100 ether) {
            newShares = mul(newShares, 2);//get double shares if you paid more than 100 ether
        } else if(value >= 10 ether) {
            newShares = add(newShares, newShares/2);//50% bonus
        } else if(value >= 1 ether) {
            newShares = add(newShares, newShares/3);//33% bonus
        } else if(value >= 100 finney) {
            newShares = add(newShares, newShares/10);//10% bonus
        }

        rnd.investors[_investor].shares = add(rnd.investors[_investor].shares, newShares);
        rnd.totalShares = add(rnd.totalShares, newShares);
        emit SharesIssued(_investor, newShares);
        return newShares;
    }    

    function _airDrop(MobiusRound storage rnd, uint value) internal {
        require(msg.sender == tx.origin, "ONLY HOOMANS (or scripts that don't use smart contracts)!");
        if(value > 100 finney) {
            /**
                Creates a random number from the last block hash and current timestamp.
                One could add more seemingly random data like the msg.sender, etc, but that doesn't 
                make it harder for a miner to manipulate the result in their favor (if they intended to).
             */
            uint chance = uint(keccak256(abi.encodePacked(blockhash(block.number - 1), now)));
            if(chance % 200 == 0) {// once in 200 times
                uint prize = rnd.airdropPot / 2;// win half of the pot, regardless of how much you paid
                rnd.airdropPot = rnd.airdropPot / 2;
                vaults[msg.sender].totalReturns = add(vaults[msg.sender].totalReturns, prize);
                unclaimedReturns = add(unclaimedReturns, prize);
                totalJackpotsWon += prize;
                emit AirdropWon(msg.sender, prize);
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"raisedICO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nextVersion","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nextVersion","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"unclaimedReturns","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DEV_DIVISOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TIME_PER_SHARE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ipfsHashType","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEarningsGenerated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"roundID","type":"uint256"}],"name":"investorInfo","outputs":[{"name":"shares","type":"uint256"},{"name":"totalReturns","type":"uint256"},{"name":"referralReturns","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"roundID","type":"uint256"}],"name":"updateMyReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"roundID","type":"uint256"}],"name":"roundInfo","outputs":[{"name":"leader","type":"address"},{"name":"price","type":"uint256"},{"name":"jackpot","type":"uint256"},{"name":"airdrop","type":"uint256"},{"name":"shares","type":"uint256"},{"name":"totalInvested","type":"uint256"},{"name":"distributedReturns","type":"uint256"},{"name":"_hardDeadline","type":"uint256"},{"name":"_softDeadline","type":"uint256"},{"name":"finalized","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawDevShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"roundID","type":"uint256"}],"name":"hasReturns","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"ref","type":"address"}],"name":"buyShares","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"finalizeAndRestart","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_type","type":"string"},{"name":"_hash","type":"string"}],"name":"setIPFSHash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalsInfo","outputs":[{"name":"totalReturns","type":"uint256"},{"name":"totalShares","type":"uint256"},{"name":"totalDividends","type":"uint256"},{"name":"totalJackpots","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STARTING_SHARE_PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"jackpotSeed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DIVIDENDS_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SOFT_DEADLINE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSharesSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFERRAL_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"RETURNS_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"HARD_DEADLINE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"reinvestReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"},{"name":"roundID","type":"uint256"}],"name":"estimateReturns","outputs":[{"name":"totalReturns","type":"uint256"},{"name":"refReturns","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"JACKPOT_SEED_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"JACKPOT_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AIRDROP_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startNewRound","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeLastRound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgraded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"},{"name":"ref","type":"address"}],"name":"reinvestReturns","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ipfsHash","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalDividendsPaid","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalJackpotsWon","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DEV_FRACTION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestRoundID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRICE_INCREASE_PERIOD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"shares","type":"uint256"}],"name":"SharesIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ReturnsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"by","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"JackpotWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"by","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"AirdropWon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"ID","type":"uint256"},{"indexed":false,"name":"hardDeadline","type":"uint256"}],"name":"RoundStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_type","type":"string"},{"indexed":false,"name":"_hash","type":"string"}],"name":"IPFSHashSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"}]

60c0604052600460808190527f697066730000000000000000000000000000000000000000000000000000000060a0908152620000409160039190620000c7565b503480156200004e57600080fd5b5060405160208062002876833981016040819052905160018054600160a060020a0319163390811790915590917fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a260048054600160a060020a031916600160a060020a03929092169190911790556200016c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010a57805160ff19168380011785556200013a565b828001600101855582156200013a579182015b828111156200013a5782518255916020019190600101906200011d565b50620001489291506200014c565b5090565b6200016991905b8082111562000148576000815560010162000153565b90565b6126fa806200017c6000396000f3006080604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302605ea88114610251578063059f8b16146102785780630900f0101461028d5780630bafd60e146102ae5780630d6c03fa146102df57806313af4035146102f457806314a0450a146103155780633314b9521461032a578063377c93bf1461033f5780633bfc1b25146103c95780633d6859f2146103de57806340c0ece314610420578063427f0b001461043857806343db053e146104ac57806348afd1b3146104c15780634c7ce18a146104f95780634c85b4251461050e578063536942b614610522578063574d65541461052a57806357b16811146105c15780635faf500f146105fc578063619360df1461061157806361983c021461062657806368fab02a1461063b57806373aff5af146106505780637a9e5e4b146106655780638da5cb5b1461068657806398bf4c081461069b5780639a7f027c146106b05780639b079084146106c55780639e93d0e4146106da578063a2860050146106f2578063a44be5361461072f578063b017d08c14610744578063bc2f45a714610759578063bd85948c1461076e578063bf7e214f14610776578063c24a96741461078b578063c28de2cd146107a0578063c5c87db4146107b5578063c623674f146107d9578063c9e18986146107ee578063cd9a1b6314610803578063d287e9e414610818578063f1b604081461072f578063f76339dc1461082d578063f958b9ca14610842578063fc0c546a14610857575b61024f600061086c565b005b34801561025d57600080fd5b506102666108fe565b60408051918252519081900360200190f35b34801561028457600080fd5b50610266610904565b34801561029957600080fd5b5061024f600160a060020a0360043516610914565b3480156102ba57600080fd5b506102c3610aa3565b60408051600160a060020a039092168252519081900360200190f35b3480156102eb57600080fd5b50610266610ab2565b34801561030057600080fd5b5061024f600160a060020a0360043516610ab8565b34801561032157600080fd5b50610266610b36565b34801561033657600080fd5b50610266610b3b565b34801561034b57600080fd5b50610354610b41565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038e578181015183820152602001610376565b50505050905090810190601f1680156103bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d557600080fd5b50610266610bcf565b3480156103ea57600080fd5b50610402600160a060020a0360043516602435610bd5565b60408051938452602084019290925282820152519081900360600190f35b34801561042c57600080fd5b5061024f600435610c31565b34801561044457600080fd5b50610450600435610c5c565b60408051600160a060020a03909b168b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b3480156104b857600080fd5b5061024f610d11565b3480156104cd57600080fd5b506104e5600160a060020a0360043516602435610d6d565b604080519115158252519081900360200190f35b34801561050557600080fd5b5061024f610db9565b61024f600160a060020a036004351661086c565b61024f610f42565b34801561053657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261024f94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610f549650505050505050565b3480156105cd57600080fd5b506105d66110a1565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561060857600080fd5b5061026661113a565b34801561061d57600080fd5b50610266611145565b34801561063257600080fd5b5061026661114b565b34801561064757600080fd5b50610266611157565b34801561065c57600080fd5b5061026661115e565b34801561067157600080fd5b5061024f600160a060020a0360043516611164565b34801561069257600080fd5b506102c36111de565b3480156106a757600080fd5b506102666111ed565b3480156106bc57600080fd5b506102666111f8565b3480156106d157600080fd5b50610266611204565b3480156106e657600080fd5b5061024f60043561120b565b3480156106fe57600080fd5b50610716600160a060020a0360043516602435611216565b6040805192835260208301919091528051918290030190f35b34801561073b57600080fd5b506102666112c8565b34801561075057600080fd5b506102666112d8565b34801561076557600080fd5b506102666112e4565b61024f6112f4565b34801561078257600080fd5b506102c361153c565b34801561079757600080fd5b5061024f61154b565b3480156107ac57600080fd5b506104e5611577565b3480156107c157600080fd5b5061024f600435600160a060020a0360243516611587565b3480156107e557600080fd5b50610354611687565b3480156107fa57600080fd5b506102666116df565b34801561080f57600080fd5b506102666116e5565b34801561082457600080fd5b506102666116eb565b34801561083957600080fd5b506102666116f1565b34801561084e57600080fd5b506102666116f7565b34801561086357600080fd5b506102c36116fd565b6010546000908110156108aa576010600f5481548110151561088a57fe5b90600052602060002090600b020190506108a581348461170c565b6108fa565b6040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f742079657420737461727465640000000000000000000000000000000000604482015290519081900360640190fd5b5050565b600c5481565b6b033b2e3c9fd0803ce800000081565b61092a33600035600160e060020a03191661193a565b151561093557600080fd5b600160a060020a0381161515610995576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420416464726573732100000000000000000000000000000000604482015290519081900360640190fd5b60045460a060020a900460ff16156109f7576040805160e560020a62461bcd02815260206004820152601160248201527f416c726561647920757067726164656421000000000000000000000000000000604482015290519081900360640190fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a17905560058054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116179055600f54601080549091908110610a5757fe5b90600052602060002090600b020160090160149054906101000a900460ff1615610aa057600a8054600554600160a060020a03166000908152600e602052604081209190915590555b50565b600554600160a060020a031681565b600d5481565b610ace33600035600160e060020a03191661193a565b1515610ad957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290556040519116907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a250565b601481565b61012c81565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc75780601f10610b9c57610100808354040283529160200191610bc7565b820191906000526020600020905b815481529060010190602001808311610baa57829003601f168201915b505050505081565b60075481565b600080600080601085815481101515610bea57fe5b60009182526020808320600160a060020a038a168452600a600b90930201918201905260409091206001015494509050610c248686611216565b9497909650939450505050565b6000601082815481101515610c4257fe5b90600052602060002090600b020190506108fa3382611a43565b600080600080600080600080600080600060108c815481101515610c7c57fe5b90600052602060002090600b020190508060090160009054906101000a9004600160a060020a03169a508060070154995080600101549850806002015497508060030154965080600001549550610cdf8160000154670905438e60010000611ae3565b945080600501549350806006015492508060090160149054906101000a900460ff169150509193959799509193959799565b6000610d2933600035600160e060020a03191661193a565b1515610d3457600080fd5b50600b80546000918290556040519091339183156108fc0291849190818181858888f193505050501580156108fa573d6000803e3d6000fd5b600080601083815481101515610d7f57fe5b60009182526020808320600160a060020a0388168452600a600b909302019182019052604090912054600482015411925090505092915050565b60008060006010600f54815481101515610dcf57fe5b90600052602060002090600b0201925060016010805490501115610e2f57610dfc336001600f5403610d6d565b15610e2f5760106001600f5403815481101515610e1557fe5b90600052602060002090600b02019150610e2f3383611a43565b610e393384611a43565b50336000908152600e6020526040812054908111610ea1576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f7468696e6720746f20776974686472617721000000000000000000000000604482015290519081900360640190fd5b610ead600d5482611b1e565b600d55336000818152600e602090815260408083208381556001018390556004870154600a8801909252808320919091555183156108fc0291849190818181858888f19350505050158015610f06573d6000803e3d6000fd5b5060408051828152905133917f0f9fa24c1d9febdaf99508f4923a7b5add9bd70eab45c8fc614509df79894938919081900360200190a2505050565b610f4a61154b565b610f526112f4565b565b610f6a33600035600160e060020a03191661193a565b1515610f7557600080fd5b8151610f88906003906020850190612596565b508051610f9c906002906020840190612596565b507ffee9db57784d702235f09dd34534f59c3087590639932195e0447e7728ff44108282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611001578181015183820152602001610fe9565b50505050905090810190601f16801561102e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611061578181015183820152602001611049565b50505050905090810190601f16801561108e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050565b60008060008060006010600f548154811015156110ba57fe5b90600052602060002090600b02019050428160060154111561111e5780600301546006540193506110f78160000154670905438e60010000611ae3565b600754019450611113816000015467013fbe85edc90000611ae3565b60085401925061112e565b6006549350600754945060085492505b60095491505090919293565b66038d7ea4c6800081565b600a5481565b67013fbe85edc9000081565b6201518081565b60065481565b61117a33600035600160e060020a03191661193a565b151561118557600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091178083556040519116917f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada491a250565b600154600160a060020a031681565b662386f26fc1000081565b670905438e6001000081565b620d2f0081565b610aa0816000611587565b600080600080600060108681548110151561122d57fe5b90600052602060002090600b020192506001601080549050111561128c576112588760018803610d6d565b1561128c5760108054600019880190811061126f57fe5b90600052602060002090600b020190506112898782611b2e565b91505b6112968784611b2e565b600160a060020a039097166000908152600e602052604090208054600190910154979092019190910196945050505050565b6014670de0b6b3a76400005b0481565b670214e8348c4f000081565b6064670de0b6b3a76400006112d4565b600454600090819060a060020a900460ff161561135b576040805160e560020a62461bcd02815260206004820181905260248201527f5468697320636f6e747261637420686173206265656e20757067726164656421604482015290519081900360640190fd5b60105460001015611467576010600f5481548110151561137757fe5b90600052602060002090600b020160090160149054906101000a900460ff1615156113ec576040805160e560020a62461bcd02815260206004820152601c60248201527f50726576696f757320726f756e64206e6f742066696e616c697a656400000000604482015290519081900360640190fd5b426010600f548154811015156113fe57fe5b90600052602060002090600b020160060154101515611467576040805160e560020a62461bcd02815260206004820152601c60248201527f50726576696f757320726f756e64207374696c6c2072756e6e696e6700000000604482015290519081900360640190fd5b60108054906114799060018301612614565b915060108281548110151561148a57fe5b600091825260208220600f8590556009600b90920201908101805473ffffffffffffffffffffffffffffffffffffffff19163317905566038d7ea4c68000600782015542620d2f008101600583015562015180016006820155600a8054600183015582905591506114fe908290349061170c565b6005810154604080519182525183917f278844837bcf8364a705384bf3a2812901f54155bae86dea81dd52aa5b9ec0e3919081900360200190a25050565b600054600160a060020a031681565b60006010600f5481548110151561155e57fe5b90600052602060002090600b02019050610aa081611be5565b60045460a060020a900460ff1681565b60006010600f5481548110151561159a57fe5b90600052602060002090600b020190506115b43382611a43565b336000908152600e602052604090205483111561161b576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e2774207370656e64207768617420796f7520646f6e2774206861766500604482015290519081900360640190fd5b336000908152600e60205260409020546116359084611b1e565b336000908152600e602052604090208181556001015461165491611fc8565b336000908152600e6020526040902060010155600d546116749084611b1e565b600d5561168281848461170c565b505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610bc75780601f10610b9c57610100808354040283529160200191610bc7565b60085481565b600b5481565b60095481565b600f5481565b610e1081565b600454600160a060020a031681565b60008060004286600601541015151561176f576040805160e560020a62461bcd02815260206004820152600f60248201527f416674657220646561646c696e65210000000000000000000000000000000000604482015290519081900360640190fd5b6007860154600a90048510156117cf576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f75676820457468657221000000000000000000000000000000604482015290519081900360640190fd5b85546117db9086611fe1565b86556007860154851061180a5760098601805473ffffffffffffffffffffffffffffffffffffffff1916331790555b6118148686611ff1565b61181f8686866121ac565b6118293387611a43565b61183486338761235c565b601054909350600114156118c85760048054604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233938101939093526024830186905251600160a060020a03909116916340c10f1991604480830192600092919082900301818387803b1580156118af57600080fd5b505af11580156118c3573d6000803e3d6000fd5b505050505b670de0b6b3a7640000830491506118ee86600601546118e98461012c6124c7565b611fe1565b90506118ff81620151804201611fc8565b6006870155600586015442111561193257610e108660080154014211156119325760078601805460020290554260088701555b505050505050565b6000600160a060020a03831630141561195557506001611a3d565b600154600160a060020a038481169116141561197357506001611a3d565b600054600160a060020a0316151561198d57506000611a3d565b60008054604080517fb7009613000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152600160e060020a0319871660448301529151919092169263b700961392606480820193602093909283900390910190829087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b505050506040513d6020811015611a3857600080fd5b505190505b92915050565b600160a060020a0382166000908152600a820160205260408120600101541515611a6c57611682565b611a768383611b2e565b90506000811115611abe57600160a060020a0383166000908152600e6020526040902054611aa49082611fe1565b600160a060020a0384166000908152600e60205260409020555b6004820154600160a060020a0384166000908152600a84016020526040902055505050565b6000670de0b6b3a7640000611b0d611afb85856124c7565b6002670de0b6b3a76400005b04611fe1565b811515611b1657fe5b049392505050565b80820382811115611a3d57600080fd5b600160a060020a0382166000908152600a82016020526040812060010154819081901515611b5f5760009250611bdd565b6004840154600160a060020a0386166000908152600a86016020526040902054611b899190611b1e565b9150600090508115611bd957600160a060020a0385166000908152600a850160205260409020600101546b033b2e3c9fd0803ce800000090611bcc9084906124c7565b811515611bd557fe5b0490505b8092505b505092915050565b600981015460009060a060020a900460ff1615611c4c576040805160e560020a62461bcd02815260206004820152601260248201527f416c72656164792066696e616c697a6564210000000000000000000000000000604482015290519081900360640190fd5b60068201544211611ca7576040805160e560020a62461bcd02815260206004820152601460248201527f526f756e64207374696c6c2072756e6e696e6721000000000000000000000000604482015290519081900360640190fd5b60105460011415611d915760048054604080517f7d64bcb40000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692637d64bcb49282820192602092908290030181600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b505050506040513d6020811015611d3957600080fd5b50511515611d91576040805160e560020a62461bcd02815260206004820152601f60248201527f436f756c646e27742066696e697368206d696e74696e6720746f6b656e732100604482015290519081900360640190fd5b6009820154600160a060020a03166000908152600e60205260409020546001830154611dbd9190611fe1565b6009830154600160a060020a03166000908152600e6020526040902055600d546001830154611dec9190611fe1565b600d556009820154600183015460408051600160a060020a039093168352602083019190915280517fbf737c87eff4ef74213cb228c9e25ca0c4519947f5fcc4a41b221ba93d76a4259281900390910190a16001820154600980549091019055600a548254611e6c91906118e9906014670de0b6b3a76400005b04611ae3565b600a8190556002830154611e809190611fe1565b600a5560045460a060020a900460ff1615611eba57600a8054600554600160a060020a03166000908152600e602052604081209190915590555b60105460011415611edf578154611ed89066470de4df820000611ae3565b9050611ef6565b8154611ef39067013fbe85edc90000611ae3565b90505b60048054604080517f36ef1abb0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926336ef1abb928592808301926000929182900301818588803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b5050600880548501905550505060038201546006805490910190558154611f9790670905438e60010000611ae3565b60078054909101905550600901805474ff0000000000000000000000000000000000000000191660a060020a179055565b600081831115611fd85781611fda565b825b9392505050565b80820182811015611a3d57600080fd5b600080333214612071576040805160e560020a62461bcd02815260206004820152603960248201527f4f4e4c5920484f4f4d414e5320286f722073637269707473207468617420646f60448201527f6e27742075736520736d61727420636f6e747261637473292100000000000000606482015290519081900360840190fd5b67016345785d8a00008311156121a657604080516000194301406020808301919091524282840152825180830384018152606090920192839052815191929182918401908083835b602083106120d85780518252601f1990920191602091820191016120b9565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120945060c892508491506121119050565b0615156121a65750600283810180549190910490819055336000908152600e60205260409020546121429082611fe1565b336000908152600e6020526040902055600d5461215f9082611fe1565b600d556009805482019055604080513381526020810183905281517ff5d01889f04f77ed9ff391da32496e63ce53f4b0d0c246651254895d04bcd99a929181900390910190a15b50505050565b600080600080600080601080549050600114156121cf576701cdda4faccd000094505b600160a060020a03871615612286576121f3886708e1bc9bf0400000879003611ae3565b955061220688662386f26fc10000611ae3565b600160a060020a0388166000908152600e602052604090205490945061222c9085611fe1565b600160a060020a0388166000908152600e60205260409020908155600101546122559085611fe1565b600160a060020a0388166000908152600e6020526040902060010155600d5461227e9085611fe1565b600d5561229d565b61229a8886670905438e6001000003611ae3565b95505b6122b1886064670de0b6b3a7640000611e66565b92506122c588670214e8348c4f0000611ae3565b601054909250600114156122e75750600c8054600489049081019091556122ed565b50601487045b6003890154151561231057612306896001015487611fe1565b60018a015561231a565b61231a89876124ef565b612328896002015484611fe1565b60028a0155600189015461233c9083611fe1565b60018a0155600b5461234e9082611fe1565b600b55505050505050505050565b600160a060020a0382166000908152600a84016020526040812054819015156123a0576004850154600160a060020a0385166000908152600a870160205260409020555b6123ae838660070154612576565b905068056bc75e2d6310000083106123d2576123cb8160026124c7565b9050612426565b678ac7230489e8000083106123ed576123cb81600281611b07565b670de0b6b3a76400008310612408576123cb81600381611b07565b67016345785d8a000083106124265761242381600a81611b07565b90505b600160a060020a0384166000908152600a8601602052604090206001015461244e9082611fe1565b600160a060020a0385166000908152600a87016020526040902060010155600385015461247b9082611fe1565b6003860155604080518281529051600160a060020a038616917f3abf6d97fde3541bb582f72fa6fb75093b8bb699577fbc722ac25de9f6fbc4ed919081900360200190a2949350505050565b60008115806124e45750508082028282828115156124e157fe5b04145b1515611a3d57600080fd5b6124fb600d5482611fe1565b600d556003820154151561254157612517818360070154612576565b61252d826b033b2e3c9fd0803ce80000006124c7565b81151561253657fe5b0460048301556108fa565b61256d82600401548360030154612564846b033b2e3c9fd0803ce80000006124c7565b811515611b0757fe5b60048301555050565b600081611b0d61258e85670de0b6b3a76400006124c7565b600285611b07565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106125d757805160ff1916838001178555612604565b82800160010185558215612604579182015b828111156126045782518255916020019190600101906125e9565b50612610929150612640565b5090565b81548183558181111561168257600b0281600b028360005260206000209182019101611682919061265d565b61265a91905b808211156126105760008155600101612646565b90565b61265a91905b8082111561261057600080825560018201819055600282018190556003820181905560048201819055600582018190556006820181905560078201819055600882015560098101805474ffffffffffffffffffffffffffffffffffffffffff19169055600b016126635600a165627a7a723058206efc7df64d81f9b9ab80b0219d8d55fd67bce31538f57ae2c4fd362ecca14c91002900000000000000000000000072ffda7153bab00e61ed93344eed8dcaec7450b4

Deployed Bytecode

0x6080604052600436106102455763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166302605ea88114610251578063059f8b16146102785780630900f0101461028d5780630bafd60e146102ae5780630d6c03fa146102df57806313af4035146102f457806314a0450a146103155780633314b9521461032a578063377c93bf1461033f5780633bfc1b25146103c95780633d6859f2146103de57806340c0ece314610420578063427f0b001461043857806343db053e146104ac57806348afd1b3146104c15780634c7ce18a146104f95780634c85b4251461050e578063536942b614610522578063574d65541461052a57806357b16811146105c15780635faf500f146105fc578063619360df1461061157806361983c021461062657806368fab02a1461063b57806373aff5af146106505780637a9e5e4b146106655780638da5cb5b1461068657806398bf4c081461069b5780639a7f027c146106b05780639b079084146106c55780639e93d0e4146106da578063a2860050146106f2578063a44be5361461072f578063b017d08c14610744578063bc2f45a714610759578063bd85948c1461076e578063bf7e214f14610776578063c24a96741461078b578063c28de2cd146107a0578063c5c87db4146107b5578063c623674f146107d9578063c9e18986146107ee578063cd9a1b6314610803578063d287e9e414610818578063f1b604081461072f578063f76339dc1461082d578063f958b9ca14610842578063fc0c546a14610857575b61024f600061086c565b005b34801561025d57600080fd5b506102666108fe565b60408051918252519081900360200190f35b34801561028457600080fd5b50610266610904565b34801561029957600080fd5b5061024f600160a060020a0360043516610914565b3480156102ba57600080fd5b506102c3610aa3565b60408051600160a060020a039092168252519081900360200190f35b3480156102eb57600080fd5b50610266610ab2565b34801561030057600080fd5b5061024f600160a060020a0360043516610ab8565b34801561032157600080fd5b50610266610b36565b34801561033657600080fd5b50610266610b3b565b34801561034b57600080fd5b50610354610b41565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038e578181015183820152602001610376565b50505050905090810190601f1680156103bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d557600080fd5b50610266610bcf565b3480156103ea57600080fd5b50610402600160a060020a0360043516602435610bd5565b60408051938452602084019290925282820152519081900360600190f35b34801561042c57600080fd5b5061024f600435610c31565b34801561044457600080fd5b50610450600435610c5c565b60408051600160a060020a03909b168b5260208b0199909952898901979097526060890195909552608088019390935260a087019190915260c086015260e0850152610100840152151561012083015251908190036101400190f35b3480156104b857600080fd5b5061024f610d11565b3480156104cd57600080fd5b506104e5600160a060020a0360043516602435610d6d565b604080519115158252519081900360200190f35b34801561050557600080fd5b5061024f610db9565b61024f600160a060020a036004351661086c565b61024f610f42565b34801561053657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261024f94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610f549650505050505050565b3480156105cd57600080fd5b506105d66110a1565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561060857600080fd5b5061026661113a565b34801561061d57600080fd5b50610266611145565b34801561063257600080fd5b5061026661114b565b34801561064757600080fd5b50610266611157565b34801561065c57600080fd5b5061026661115e565b34801561067157600080fd5b5061024f600160a060020a0360043516611164565b34801561069257600080fd5b506102c36111de565b3480156106a757600080fd5b506102666111ed565b3480156106bc57600080fd5b506102666111f8565b3480156106d157600080fd5b50610266611204565b3480156106e657600080fd5b5061024f60043561120b565b3480156106fe57600080fd5b50610716600160a060020a0360043516602435611216565b6040805192835260208301919091528051918290030190f35b34801561073b57600080fd5b506102666112c8565b34801561075057600080fd5b506102666112d8565b34801561076557600080fd5b506102666112e4565b61024f6112f4565b34801561078257600080fd5b506102c361153c565b34801561079757600080fd5b5061024f61154b565b3480156107ac57600080fd5b506104e5611577565b3480156107c157600080fd5b5061024f600435600160a060020a0360243516611587565b3480156107e557600080fd5b50610354611687565b3480156107fa57600080fd5b506102666116df565b34801561080f57600080fd5b506102666116e5565b34801561082457600080fd5b506102666116eb565b34801561083957600080fd5b506102666116f1565b34801561084e57600080fd5b506102666116f7565b34801561086357600080fd5b506102c36116fd565b6010546000908110156108aa576010600f5481548110151561088a57fe5b90600052602060002090600b020190506108a581348461170c565b6108fa565b6040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f742079657420737461727465640000000000000000000000000000000000604482015290519081900360640190fd5b5050565b600c5481565b6b033b2e3c9fd0803ce800000081565b61092a33600035600160e060020a03191661193a565b151561093557600080fd5b600160a060020a0381161515610995576040805160e560020a62461bcd02815260206004820152601060248201527f496e76616c696420416464726573732100000000000000000000000000000000604482015290519081900360640190fd5b60045460a060020a900460ff16156109f7576040805160e560020a62461bcd02815260206004820152601160248201527f416c726561647920757067726164656421000000000000000000000000000000604482015290519081900360640190fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a17905560058054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116179055600f54601080549091908110610a5757fe5b90600052602060002090600b020160090160149054906101000a900460ff1615610aa057600a8054600554600160a060020a03166000908152600e602052604081209190915590555b50565b600554600160a060020a031681565b600d5481565b610ace33600035600160e060020a03191661193a565b1515610ad957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290556040519116907fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9490600090a250565b601481565b61012c81565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bc75780601f10610b9c57610100808354040283529160200191610bc7565b820191906000526020600020905b815481529060010190602001808311610baa57829003601f168201915b505050505081565b60075481565b600080600080601085815481101515610bea57fe5b60009182526020808320600160a060020a038a168452600a600b90930201918201905260409091206001015494509050610c248686611216565b9497909650939450505050565b6000601082815481101515610c4257fe5b90600052602060002090600b020190506108fa3382611a43565b600080600080600080600080600080600060108c815481101515610c7c57fe5b90600052602060002090600b020190508060090160009054906101000a9004600160a060020a03169a508060070154995080600101549850806002015497508060030154965080600001549550610cdf8160000154670905438e60010000611ae3565b945080600501549350806006015492508060090160149054906101000a900460ff169150509193959799509193959799565b6000610d2933600035600160e060020a03191661193a565b1515610d3457600080fd5b50600b80546000918290556040519091339183156108fc0291849190818181858888f193505050501580156108fa573d6000803e3d6000fd5b600080601083815481101515610d7f57fe5b60009182526020808320600160a060020a0388168452600a600b909302019182019052604090912054600482015411925090505092915050565b60008060006010600f54815481101515610dcf57fe5b90600052602060002090600b0201925060016010805490501115610e2f57610dfc336001600f5403610d6d565b15610e2f5760106001600f5403815481101515610e1557fe5b90600052602060002090600b02019150610e2f3383611a43565b610e393384611a43565b50336000908152600e6020526040812054908111610ea1576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f7468696e6720746f20776974686472617721000000000000000000000000604482015290519081900360640190fd5b610ead600d5482611b1e565b600d55336000818152600e602090815260408083208381556001018390556004870154600a8801909252808320919091555183156108fc0291849190818181858888f19350505050158015610f06573d6000803e3d6000fd5b5060408051828152905133917f0f9fa24c1d9febdaf99508f4923a7b5add9bd70eab45c8fc614509df79894938919081900360200190a2505050565b610f4a61154b565b610f526112f4565b565b610f6a33600035600160e060020a03191661193a565b1515610f7557600080fd5b8151610f88906003906020850190612596565b508051610f9c906002906020840190612596565b507ffee9db57784d702235f09dd34534f59c3087590639932195e0447e7728ff44108282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611001578181015183820152602001610fe9565b50505050905090810190601f16801561102e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611061578181015183820152602001611049565b50505050905090810190601f16801561108e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a15050565b60008060008060006010600f548154811015156110ba57fe5b90600052602060002090600b02019050428160060154111561111e5780600301546006540193506110f78160000154670905438e60010000611ae3565b600754019450611113816000015467013fbe85edc90000611ae3565b60085401925061112e565b6006549350600754945060085492505b60095491505090919293565b66038d7ea4c6800081565b600a5481565b67013fbe85edc9000081565b6201518081565b60065481565b61117a33600035600160e060020a03191661193a565b151561118557600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091178083556040519116917f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada491a250565b600154600160a060020a031681565b662386f26fc1000081565b670905438e6001000081565b620d2f0081565b610aa0816000611587565b600080600080600060108681548110151561122d57fe5b90600052602060002090600b020192506001601080549050111561128c576112588760018803610d6d565b1561128c5760108054600019880190811061126f57fe5b90600052602060002090600b020190506112898782611b2e565b91505b6112968784611b2e565b600160a060020a039097166000908152600e602052604090208054600190910154979092019190910196945050505050565b6014670de0b6b3a76400005b0481565b670214e8348c4f000081565b6064670de0b6b3a76400006112d4565b600454600090819060a060020a900460ff161561135b576040805160e560020a62461bcd02815260206004820181905260248201527f5468697320636f6e747261637420686173206265656e20757067726164656421604482015290519081900360640190fd5b60105460001015611467576010600f5481548110151561137757fe5b90600052602060002090600b020160090160149054906101000a900460ff1615156113ec576040805160e560020a62461bcd02815260206004820152601c60248201527f50726576696f757320726f756e64206e6f742066696e616c697a656400000000604482015290519081900360640190fd5b426010600f548154811015156113fe57fe5b90600052602060002090600b020160060154101515611467576040805160e560020a62461bcd02815260206004820152601c60248201527f50726576696f757320726f756e64207374696c6c2072756e6e696e6700000000604482015290519081900360640190fd5b60108054906114799060018301612614565b915060108281548110151561148a57fe5b600091825260208220600f8590556009600b90920201908101805473ffffffffffffffffffffffffffffffffffffffff19163317905566038d7ea4c68000600782015542620d2f008101600583015562015180016006820155600a8054600183015582905591506114fe908290349061170c565b6005810154604080519182525183917f278844837bcf8364a705384bf3a2812901f54155bae86dea81dd52aa5b9ec0e3919081900360200190a25050565b600054600160a060020a031681565b60006010600f5481548110151561155e57fe5b90600052602060002090600b02019050610aa081611be5565b60045460a060020a900460ff1681565b60006010600f5481548110151561159a57fe5b90600052602060002090600b020190506115b43382611a43565b336000908152600e602052604090205483111561161b576040805160e560020a62461bcd02815260206004820152601f60248201527f43616e2774207370656e64207768617420796f7520646f6e2774206861766500604482015290519081900360640190fd5b336000908152600e60205260409020546116359084611b1e565b336000908152600e602052604090208181556001015461165491611fc8565b336000908152600e6020526040902060010155600d546116749084611b1e565b600d5561168281848461170c565b505050565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610bc75780601f10610b9c57610100808354040283529160200191610bc7565b60085481565b600b5481565b60095481565b600f5481565b610e1081565b600454600160a060020a031681565b60008060004286600601541015151561176f576040805160e560020a62461bcd02815260206004820152600f60248201527f416674657220646561646c696e65210000000000000000000000000000000000604482015290519081900360640190fd5b6007860154600a90048510156117cf576040805160e560020a62461bcd02815260206004820152601160248201527f4e6f7420656e6f75676820457468657221000000000000000000000000000000604482015290519081900360640190fd5b85546117db9086611fe1565b86556007860154851061180a5760098601805473ffffffffffffffffffffffffffffffffffffffff1916331790555b6118148686611ff1565b61181f8686866121ac565b6118293387611a43565b61183486338761235c565b601054909350600114156118c85760048054604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233938101939093526024830186905251600160a060020a03909116916340c10f1991604480830192600092919082900301818387803b1580156118af57600080fd5b505af11580156118c3573d6000803e3d6000fd5b505050505b670de0b6b3a7640000830491506118ee86600601546118e98461012c6124c7565b611fe1565b90506118ff81620151804201611fc8565b6006870155600586015442111561193257610e108660080154014211156119325760078601805460020290554260088701555b505050505050565b6000600160a060020a03831630141561195557506001611a3d565b600154600160a060020a038481169116141561197357506001611a3d565b600054600160a060020a0316151561198d57506000611a3d565b60008054604080517fb7009613000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152306024830152600160e060020a0319871660448301529151919092169263b700961392606480820193602093909283900390910190829087803b158015611a0e57600080fd5b505af1158015611a22573d6000803e3d6000fd5b505050506040513d6020811015611a3857600080fd5b505190505b92915050565b600160a060020a0382166000908152600a820160205260408120600101541515611a6c57611682565b611a768383611b2e565b90506000811115611abe57600160a060020a0383166000908152600e6020526040902054611aa49082611fe1565b600160a060020a0384166000908152600e60205260409020555b6004820154600160a060020a0384166000908152600a84016020526040902055505050565b6000670de0b6b3a7640000611b0d611afb85856124c7565b6002670de0b6b3a76400005b04611fe1565b811515611b1657fe5b049392505050565b80820382811115611a3d57600080fd5b600160a060020a0382166000908152600a82016020526040812060010154819081901515611b5f5760009250611bdd565b6004840154600160a060020a0386166000908152600a86016020526040902054611b899190611b1e565b9150600090508115611bd957600160a060020a0385166000908152600a850160205260409020600101546b033b2e3c9fd0803ce800000090611bcc9084906124c7565b811515611bd557fe5b0490505b8092505b505092915050565b600981015460009060a060020a900460ff1615611c4c576040805160e560020a62461bcd02815260206004820152601260248201527f416c72656164792066696e616c697a6564210000000000000000000000000000604482015290519081900360640190fd5b60068201544211611ca7576040805160e560020a62461bcd02815260206004820152601460248201527f526f756e64207374696c6c2072756e6e696e6721000000000000000000000000604482015290519081900360640190fd5b60105460011415611d915760048054604080517f7d64bcb40000000000000000000000000000000000000000000000000000000081529051600160a060020a0390921692637d64bcb49282820192602092908290030181600087803b158015611d0f57600080fd5b505af1158015611d23573d6000803e3d6000fd5b505050506040513d6020811015611d3957600080fd5b50511515611d91576040805160e560020a62461bcd02815260206004820152601f60248201527f436f756c646e27742066696e697368206d696e74696e6720746f6b656e732100604482015290519081900360640190fd5b6009820154600160a060020a03166000908152600e60205260409020546001830154611dbd9190611fe1565b6009830154600160a060020a03166000908152600e6020526040902055600d546001830154611dec9190611fe1565b600d556009820154600183015460408051600160a060020a039093168352602083019190915280517fbf737c87eff4ef74213cb228c9e25ca0c4519947f5fcc4a41b221ba93d76a4259281900390910190a16001820154600980549091019055600a548254611e6c91906118e9906014670de0b6b3a76400005b04611ae3565b600a8190556002830154611e809190611fe1565b600a5560045460a060020a900460ff1615611eba57600a8054600554600160a060020a03166000908152600e602052604081209190915590555b60105460011415611edf578154611ed89066470de4df820000611ae3565b9050611ef6565b8154611ef39067013fbe85edc90000611ae3565b90505b60048054604080517f36ef1abb0000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926336ef1abb928592808301926000929182900301818588803b158015611f5457600080fd5b505af1158015611f68573d6000803e3d6000fd5b5050600880548501905550505060038201546006805490910190558154611f9790670905438e60010000611ae3565b60078054909101905550600901805474ff0000000000000000000000000000000000000000191660a060020a179055565b600081831115611fd85781611fda565b825b9392505050565b80820182811015611a3d57600080fd5b600080333214612071576040805160e560020a62461bcd02815260206004820152603960248201527f4f4e4c5920484f4f4d414e5320286f722073637269707473207468617420646f60448201527f6e27742075736520736d61727420636f6e747261637473292100000000000000606482015290519081900360840190fd5b67016345785d8a00008311156121a657604080516000194301406020808301919091524282840152825180830384018152606090920192839052815191929182918401908083835b602083106120d85780518252601f1990920191602091820191016120b9565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120945060c892508491506121119050565b0615156121a65750600283810180549190910490819055336000908152600e60205260409020546121429082611fe1565b336000908152600e6020526040902055600d5461215f9082611fe1565b600d556009805482019055604080513381526020810183905281517ff5d01889f04f77ed9ff391da32496e63ce53f4b0d0c246651254895d04bcd99a929181900390910190a15b50505050565b600080600080600080601080549050600114156121cf576701cdda4faccd000094505b600160a060020a03871615612286576121f3886708e1bc9bf0400000879003611ae3565b955061220688662386f26fc10000611ae3565b600160a060020a0388166000908152600e602052604090205490945061222c9085611fe1565b600160a060020a0388166000908152600e60205260409020908155600101546122559085611fe1565b600160a060020a0388166000908152600e6020526040902060010155600d5461227e9085611fe1565b600d5561229d565b61229a8886670905438e6001000003611ae3565b95505b6122b1886064670de0b6b3a7640000611e66565b92506122c588670214e8348c4f0000611ae3565b601054909250600114156122e75750600c8054600489049081019091556122ed565b50601487045b6003890154151561231057612306896001015487611fe1565b60018a015561231a565b61231a89876124ef565b612328896002015484611fe1565b60028a0155600189015461233c9083611fe1565b60018a0155600b5461234e9082611fe1565b600b55505050505050505050565b600160a060020a0382166000908152600a84016020526040812054819015156123a0576004850154600160a060020a0385166000908152600a870160205260409020555b6123ae838660070154612576565b905068056bc75e2d6310000083106123d2576123cb8160026124c7565b9050612426565b678ac7230489e8000083106123ed576123cb81600281611b07565b670de0b6b3a76400008310612408576123cb81600381611b07565b67016345785d8a000083106124265761242381600a81611b07565b90505b600160a060020a0384166000908152600a8601602052604090206001015461244e9082611fe1565b600160a060020a0385166000908152600a87016020526040902060010155600385015461247b9082611fe1565b6003860155604080518281529051600160a060020a038616917f3abf6d97fde3541bb582f72fa6fb75093b8bb699577fbc722ac25de9f6fbc4ed919081900360200190a2949350505050565b60008115806124e45750508082028282828115156124e157fe5b04145b1515611a3d57600080fd5b6124fb600d5482611fe1565b600d556003820154151561254157612517818360070154612576565b61252d826b033b2e3c9fd0803ce80000006124c7565b81151561253657fe5b0460048301556108fa565b61256d82600401548360030154612564846b033b2e3c9fd0803ce80000006124c7565b811515611b0757fe5b60048301555050565b600081611b0d61258e85670de0b6b3a76400006124c7565b600285611b07565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106125d757805160ff1916838001178555612604565b82800160010185558215612604579182015b828111156126045782518255916020019190600101906125e9565b50612610929150612640565b5090565b81548183558181111561168257600b0281600b028360005260206000209182019101611682919061265d565b61265a91905b808211156126105760008155600101612646565b90565b61265a91905b8082111561261057600080825560018201819055600282018190556003820181905560048201819055600582018190556006820181905560078201819055600882015560098101805474ffffffffffffffffffffffffffffffffffffffffff19169055600b016126635600a165627a7a723058206efc7df64d81f9b9ab80b0219d8d55fd67bce31538f57ae2c4fd362ecca14c910029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000072ffda7153bab00e61ed93344eed8dcaec7450b4

-----Decoded View---------------
Arg [0] : _token (address): 0x72fFdA7153bAb00E61Ed93344eed8dCAEc7450B4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000072ffda7153bab00e61ed93344eed8dcaec7450b4


Swarm Source

bzzr://6efc7df64d81f9b9ab80b0219d8d55fd67bce31538f57ae2c4fd362ecca14c91

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.