Latest 25 txns From a total of 2874 Transactions

TxHash Age From To Value [TxFee]
0x6cc808f2287c60ff8634959652bbcce85a89690c1f13ee40e3b90519d56e0ff53 days 7 hrs ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0xc4cafb48601899eccd923d2a7a4c18d179eee4746c2ae8ea92ee75dba0c7ecf74 days 13 mins ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x375068bff04e7a1aa33019d1220232be59a8e6ae86f25796957fe564848c98404 days 21 mins ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0xd860540bb1ab9ef2a4636ff6b61dac55bb6e61bd9003e009500a79c9dc9be6bd4 days 22 mins ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x72b47dc6d199b7e285ab2c1ec79357c498eacfa6ebb354f90a347ac22b602c844 days 23 hrs ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x3b79e6be54e10212bbc30c87ff23d0c556dbc7c0204b49c432ece2db8a19e1745 days 7 mins ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x0aa5a43de130458acd9a952c7353da63b06bc864acf30e1cfa31eededf901af25 days 13 mins ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0xa2dc3e5a69ad09e5fd75ba1c4d2604eef5643f35130b1ebe185bd7a70ec7654f5 days 37 mins ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x59bbdf28aadcd2478212f514cd106b61867c99a3d0653de98330bc3094deeeea5 days 2 hrs ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x0c25af1de8a32819e5ee6de5d297d1e1202b19ab1a9cc8c93151ed166fd25cb15 days 2 hrs ago0x6a6147e2cc81ec27755840cee26ec24cc60ca8dd  IN   TokenCard-ICO0.01 Ether0.00042
0x1ebc95710a4aa99632581ce3eea5060f647fa25d1626b54a2ead63d06d1ca4f1286 days 55 mins ago0x20f72f8ce1fe6036e8f86e6bc190331ff1c2fbdc  IN   TokenCard-ICO0.8 Ether0.00105
0xf1993e3fca102079826987cdc4af95d57a20d29ebc5056d9e605f3448266affa381 days 15 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   TokenCard-ICO0 Ether0.000305488
0x0b4f0236b49791617f3e49aab2323ebd464ddfcdcb32705db140ad6b6f0ffdfb382 days 1 hr ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   TokenCard-ICO0 Ether0.000358032
0x42bdfbd48d23bedbf951f39146b983e539f640e697333f3cf19dfd03e510fb3f450 days 5 hrs ago0xbc8428b4aec8dc1d30900ad322e3366b0fec18a5  IN   TokenCard-ICO0 Ether0.0021
0xdc3a56a3df05501502fe03e69212e8112ad32f1e04ccdc8de66fd4b4abc088b7450 days 5 hrs ago0xbc8428b4aec8dc1d30900ad322e3366b0fec18a5  IN   TokenCard-ICO0 Ether0.0021
0xc473245debc816f01a891f532b62c5f66c31df356119cb624f4d13d03d186043519 days 1 hr ago0x00db2b9178f83bec59a6327eddf8a8cb54f764ff  IN   TokenCard-ICO0 Ether0.01
0x8ca753f9ae07d51620b44a3f41a3fdceb0c4567d5b295bbae58aa3e47f3392a0519 days 13 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.001224909
0x29284caf5849c52a5ba559fcdcaf0ebdae8563d15a576b3c64d19b7178404426519 days 13 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.000606669
0x1f27dc934a14c71cf45cb88f79ca2a72ea4712f8d7d177cef2739f8ce013a600521 days 19 hrs ago0x51e07ebffb63c575d3aa5c7f25c5b6fcae1da362  IN   TokenCard-ICO0.1 Ether0.002268
0x0022630ab31c60474a52d4334011ebf0992d52c09f3111fc3ea9bb39c6f58c01521 days 19 hrs ago0x51e07ebffb63c575d3aa5c7f25c5b6fcae1da362  IN   TokenCard-ICO0.1 Ether0.012519
0x9da1ac841b60a369dc5f87d45b56578537d522d4eade96eaf48010cc37d4f2c0527 days 7 hrs ago0x483280195a600ea8800bad3aeb9575f84cfcb76b  IN   TokenCard-ICO1 Ether0.009584913
0xd48877804b8ac70e534dca0bacc9dfe791d4161b2d84a695bf3b4d7769c7cd04530 days 18 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0009056
0xd1d255e103c76eedf041fbbb01b3223f42804e51f6eb34e02cad78dc0c2f72ad530 days 18 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00154924
0x015def488638a2238108e9383bdbd48c5b76ecd6d8ad8db44e4ae5a3f739d00e530 days 18 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0009116
0x1f7471db01f939e790a185d8c17268b608b345f509c7a0b7831910d74369c645530 days 18 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0022783
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 12 Internal Transactions

ParentTxHash Block Age From To Value
0x7b8e4a2ac80ff187a1d76827d9f57e7ad854dbdd2f3544e2531737c22b5e56395418617193 days 11 hrs ago0x31a240648e2baf4f9f17225987f6f53fceb1699a0x49edf201c1e139282643d5e7c6fb0c7219ad1db70.000000007777777777 Ether
0x8ca753f9ae07d51620b44a3f41a3fdceb0c4567d5b295bbae58aa3e47f3392a03734934519 days 13 hrs ago0x49edf201c1e139282643d5e7c6fb0c7219ad1db70x000f372e3e45ada03456aef3b90c545ff2b7329c166,666.6666666666625 Ether
0xcf9d28efcd1f6b6c7639a3e3e3a2cf99296d0f388143a9c80a8941e6a73af1353638804536 days 19 hrs ago0x211457a48a72e66130a369af6c5a8164f92700120x49edf201c1e139282643d5e7c6fb0c7219ad1db715 Ether
0xbbc636c14d7fe36dc20b57f6fd995798887b4bbe15c493616916032be33a9b623638687536 days 20 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0x02264c9386a2ffebc6567be51c820283e6830aa8283f98d5261058925b13f0553638659536 days 20 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0xf1ec06acce2b34d5e45a3fc52a747bdb1bc22b08f859a25833359941b229971a3638644536 days 20 hrs ago0x1c68d5cf7ddda7aa00f32473d5dc4545a863fa100x49edf201c1e139282643d5e7c6fb0c7219ad1db710 Ether
0xbf58d416dc6338f4ac67dd8a62eef5ac58552fc5a7f29066e17510ccc3f659ac3638635536 days 20 hrs ago0x211457a48a72e66130a369af6c5a8164f92700120x49edf201c1e139282643d5e7c6fb0c7219ad1db715 Ether
0x28e9dbf8f9b7aa3ed753f1939530275ec6a3b12cb78ed4b404d394862fa58a443638578536 days 20 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0x36f9464067c014a24abd050dafb64d7449b082bf0e9d2a3e2de8e9eb789e5d623638526536 days 20 hrs ago0x7d54afc509ba292c9f3ba153045a92af46ca2fe70x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0x70b4260d447952f6a275da8bdd73f7e7418c3753e133729fe92743035c1135593638507536 days 21 hrs ago0x7d54afc509ba292c9f3ba153045a92af46ca2fe70x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0xb2d995ee83dd00c4159259a5b4cb60c2011dcc99a111c1a18835c866f632073c3638484536 days 21 hrs ago0xf812ae96e6838ba9966e2108b4718e164ffe679f0x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0xf14533700aeddcde82598da309425e0fc7198a099863fd1ac71e5f69b90aac313638478536 days 21 hrs ago0x0e4e39133f5285b72ce962d3288048a1be334f6f0x49edf201c1e139282643d5e7c6fb0c7219ad1db710 Ether
[ Download CSV Export  ] 
Contract Name: ICO
Compiler Text: v0.4.10+commit.f0d539ae
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity >=0.4.4;

contract Sale {
    uint public startTime;
    uint public stopTime;
    uint public target;
    uint public raised;
    uint public collected;
    uint public numContributors;
    mapping(address => uint) public balances;

    function buyTokens(address _a, uint _eth, uint _time) returns (uint); 
    function getTokens(address holder) constant returns (uint); 
    function getRefund(address holder) constant returns (uint); 
    function getSoldTokens() constant returns (uint); 
    function getOwnerEth() constant returns (uint); 
    function tokensPerEth() constant returns (uint);
    function isActive(uint time) constant returns (bool); 
    function isComplete(uint time) constant returns (bool); 
}

contract Constants {
    uint DECIMALS = 8;
}

contract EventDefinitions {
    event logSaleStart(uint startTime, uint stopTime);
    event logPurchase(address indexed purchaser, uint eth);
    event logClaim(address indexed purchaser, uint refund, uint tokens);

    //Token standard events
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
} 

contract Testable {
    uint fakeTime;
    bool public testing;
    modifier onlyTesting() {
        if (!testing) throw;
        _;
    }
    function setFakeTime(uint t) onlyTesting {
        fakeTime = t;
    }
    function addMinutes(uint m) onlyTesting {
        fakeTime = fakeTime + (m * 1 minutes);
    }
    function addDays(uint d) onlyTesting {
        fakeTime = fakeTime + (d * 1 days);
    }
    function currTime() constant returns (uint) {
        if (testing) {
            return fakeTime;
        } else {
            return block.timestamp;
        }
    }
    function weiPerEth() constant returns (uint) {
        if (testing) {
            return 200;
        } else {
            return 10**18;
        }
    }
}

contract Owned {
    address public owner;
    
    modifier onlyOwner() {
        if (msg.sender != owner) throw;
        _;
    }

    address newOwner;

    function changeOwner(address _newOwner) onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() {
        if (msg.sender == newOwner) {
            owner = newOwner;
        }
    }    
}

//from Zeppelin
contract SafeMath {
    function safeMul(uint a, uint b) internal returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeSub(uint a, uint b) internal returns (uint) {
        assert(b <= a);
        return a - b;
    }

    function safeAdd(uint a, uint b) internal returns (uint) {
        uint c = a + b;
        assert(c>=a && c>=b);
        return c;
    }

    function assert(bool assertion) internal {
        if (!assertion) throw;
    }
}

contract Token is SafeMath, Owned, Constants {
    uint public totalSupply;

    address ico;
    address controller;

    string public name;
    uint8 public decimals; 
    string public symbol;     

    modifier onlyControllers() {
        if (msg.sender != ico &&
            msg.sender != controller) throw;
        _;
    }

    modifier onlyPayloadSize(uint numwords) {
        assert(msg.data.length == numwords * 32 + 4);
        _;
    } 

    function Token() { 
        owner = msg.sender;
        name = "Monolith TKN";
        decimals = uint8(DECIMALS);
        symbol = "TKN";
    }

    function setICO(address _ico) onlyOwner {
        if (ico != 0) throw;
        ico = _ico;
    }
    function setController(address _controller) onlyOwner {
        if (controller != 0) throw;
        controller = _controller;
    }
    
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
    event Mint(address owner, uint amount);

    //only called from contracts so don't need msg.data.length check
    function mint(address addr, uint amount) onlyControllers {
        if (maxSupply > 0 && safeAdd(totalSupply, amount) > maxSupply) throw;
        balanceOf[addr] = safeAdd(balanceOf[addr], amount);
        totalSupply = safeAdd(totalSupply, amount);
        Mint(addr, amount);
    }

    mapping(address => uint) public balanceOf;
    mapping (address => mapping (address => uint)) public allowance;

    function transfer(address _to, uint _value) 
    onlyPayloadSize(2)
    returns (bool success) {
        if (balanceOf[msg.sender] < _value) return false;

        balanceOf[msg.sender] = balanceOf[msg.sender] - _value;
        balanceOf[_to] = safeAdd(balanceOf[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint _value) 
    onlyPayloadSize(3)
    returns (bool success) {
        if (balanceOf[_from] < _value) return false; 

        var allowed = allowance[_from][msg.sender];
        if (allowed < _value) return false;

        balanceOf[_to] = safeAdd(balanceOf[_to], _value);
        balanceOf[_from] = safeSub(balanceOf[_from], _value);
        allowance[_from][msg.sender] = safeSub(allowed, _value);
        Transfer(_from, _to, _value);
        return true;
    }

    function approve(address _spender, uint _value) 
    onlyPayloadSize(2)
    returns (bool success) {
        //require user to set to zero before resetting to nonzero
        if ((_value != 0) && (allowance[msg.sender][_spender] != 0)) {
            return false;
        }
    
        allowance[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function increaseApproval (address _spender, uint _addedValue) 
    onlyPayloadSize(2)
    returns (bool success) {
        uint oldValue = allowance[msg.sender][_spender];
        allowance[msg.sender][_spender] = safeAdd(oldValue, _addedValue);
        return true;
    }

    function decreaseApproval (address _spender, uint _subtractedValue) 
    onlyPayloadSize(2)
    returns (bool success) {
        uint oldValue = allowance[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowance[msg.sender][_spender] = 0;
        } else {
            allowance[msg.sender][_spender] = safeSub(oldValue, _subtractedValue);
        }
        return true;
    }

    //Holds accumulated dividend tokens other than TKN
    TokenHolder tokenholder;

    //once locked, can no longer upgrade tokenholder
    bool lockedTokenHolder;

    function lockTokenHolder() onlyOwner {
        lockedTokenHolder = true;
    }

    //while unlocked, 
    //this gives owner lots of power over held dividend tokens
    //effectively can deny access to all accumulated tokens
    //thus crashing TKN value
    function setTokenHolder(address _th) onlyOwner {
        if (lockedTokenHolder) throw;
        tokenholder = TokenHolder(_th);
    }

    event Burn(address burner, uint amount);

    function burn(uint _amount) returns (bool result) {
        if (_amount > balanceOf[msg.sender]) return false;
        balanceOf[msg.sender] = safeSub(balanceOf[msg.sender], _amount);
        totalSupply = safeSub(totalSupply, _amount);
        result = tokenholder.burn(msg.sender, _amount);
        if (!result) throw;
        Burn(msg.sender, _amount);
    }

    uint public maxSupply;

    function setMaxSupply(uint _maxSupply) {
        if (msg.sender != controller) throw;
        if (maxSupply > 0) throw;
        maxSupply = _maxSupply;
    }
}

contract TokenHolder {
    function burn(address _burner, uint _amount)
    returns (bool result) { 
        return false;
    }
}


contract ICO is EventDefinitions, Testable, SafeMath, Owned {
    Token public token;
    address public controller;
    address public payee;

    Sale[] public sales;
    
    //salenum => minimum wei
    mapping (uint => uint) saleMinimumPurchases;

    //next sale number user can claim from
    mapping (address => uint) public nextClaim;

    //net contributed ETH by each user (in case of stop/refund)
    mapping (address => uint) refundInStop;

    modifier tokenIsSet() {
        if (address(token) == 0) throw;
        _;
    }

    modifier onlyController() {
        if (msg.sender != address(controller)) throw;
        _;
    }

    function ICO() { 
        owner = msg.sender;
        payee = msg.sender;
        allStopper = msg.sender;
    }

    //payee can only be changed once
    //intent is to lock payee to a contract that holds or distributes funds
    //in deployment, be sure to do this before changing owner!
    //we initialize to owner to keep things simple if there's no payee contract
    function changePayee(address newPayee) 
    onlyOwner notAllStopped {
        payee = newPayee;
    }

    function setToken(address _token) onlyOwner {
        if (address(token) != 0x0) throw;
        token = Token(_token);
    }

    //before adding sales, we can set this to be a test ico
    //this lets us manipulate time and drastically lowers weiPerEth
    function setAsTest() onlyOwner {
        if (sales.length == 0) {
            testing = true;
        }
    }

    function setController(address _controller) 
    onlyOwner notAllStopped {
        if (address(controller) != 0x0) throw;
        controller = _controller; //ICOController(_controller);
    }

    //********************************************************
    //Sales
    //********************************************************

    function addSale(address sale, uint minimumPurchase) 
    onlyController notAllStopped {
        uint salenum = sales.length;
        sales.push(Sale(sale));
        saleMinimumPurchases[salenum] = minimumPurchase;
        logSaleStart(Sale(sale).startTime(), Sale(sale).stopTime());
    }

    function addSale(address sale) onlyController {
        addSale(sale, 0);
    }

    function getCurrSale() constant returns (uint) {
        if (sales.length == 0) throw; //no reason to call before startFirstSale
        return sales.length - 1;
    }

    function currSaleActive() constant returns (bool) {
        return sales[getCurrSale()].isActive(currTime());
    }

    function currSaleComplete() constant returns (bool) {
        return sales[getCurrSale()].isComplete(currTime());
    }

    function numSales() constant returns (uint) {
        return sales.length;
    }

    function numContributors(uint salenum) constant returns (uint) {
        return sales[salenum].numContributors();
    }

    //********************************************************
    //ETH Purchases
    //********************************************************

    event logPurchase(address indexed purchaser, uint value);

    function () payable {
        deposit();
    }

    function deposit() payable notAllStopped {
        doDeposit(msg.sender, msg.value);

        //not in doDeposit because only for Eth:
        uint contrib = refundInStop[msg.sender];
        refundInStop[msg.sender] = contrib + msg.value;

        logPurchase(msg.sender, msg.value);
    }

    //is also called by token contributions
    function doDeposit(address _for, uint _value) private {
        uint currSale = getCurrSale();
        if (!currSaleActive()) throw;
        if (_value < saleMinimumPurchases[currSale]) throw;

        uint tokensToMintNow = sales[currSale].buyTokens(_for, _value, currTime());

        if (tokensToMintNow > 0) {
            token.mint(_for, tokensToMintNow);
        }
    }

    //********************************************************
    //Token Purchases
    //********************************************************

    //Support for purchase via other tokens
    //We don't attempt to deal with those tokens directly
    //We just give admin ability to tell us what deposit to credit
    //We only allow for first sale 
    //because first sale normally has no refunds
    //As written, the refund would be in ETH

    event logPurchaseViaToken(
                        address indexed purchaser, address indexed token, 
                        uint depositedTokens, uint ethValue, 
                        bytes32 _reference);

    event logPurchaseViaFiat(
                        address indexed purchaser, uint ethValue, 
                        bytes32 _reference);

    mapping (bytes32 => bool) public mintRefs;
    mapping (address => uint) public raisedFromToken;
    uint public raisedFromFiat;

    function depositFiat(address _for, uint _ethValue, bytes32 _reference) 
    notAllStopped onlyOwner {
        if (getCurrSale() > 0) throw; //only first sale allows this
        if (mintRefs[_reference]) throw; //already minted for this reference
        mintRefs[_reference] = true;
        raisedFromFiat = safeAdd(raisedFromFiat, _ethValue);

        doDeposit(_for, _ethValue);
        logPurchaseViaFiat(_for, _ethValue, _reference);
    }

    function depositTokens(address _for, address _token, 
                           uint _ethValue, uint _depositedTokens, 
                           bytes32 _reference) 
    notAllStopped onlyOwner {
        if (getCurrSale() > 0) throw; //only first sale allows this
        if (mintRefs[_reference]) throw; //already minted for this reference
        mintRefs[_reference] = true;
        raisedFromToken[_token] = safeAdd(raisedFromToken[_token], _ethValue);

        //tokens do not count toward price changes and limits
        //we have to look up pricing, and do our own mint()
        uint tokensPerEth = sales[0].tokensPerEth();
        uint tkn = safeMul(_ethValue, tokensPerEth) / weiPerEth();
        token.mint(_for, tkn);
        
        logPurchaseViaToken(_for, _token, _depositedTokens, _ethValue, _reference);
    }

    //********************************************************
    //Roundoff Protection
    //********************************************************
    //protect against roundoff in payouts
    //this prevents last person getting refund from not being able to collect
    function safebalance(uint bal) private returns (uint) {
        if (bal > this.balance) {
            return this.balance;
        } else {
            return bal;
        }
    }

    //It'd be nicer if last person got full amount
    //instead of getting shorted by safebalance()
    //topUp() allows admin to deposit excess ether to cover it
    //and later get back any left over 

    uint public topUpAmount;

    function topUp() payable onlyOwner notAllStopped {
        topUpAmount = safeAdd(topUpAmount, msg.value);
    }

    function withdrawTopUp() onlyOwner notAllStopped {
        uint amount = topUpAmount;
        topUpAmount = 0;
        if (!msg.sender.call.value(safebalance(amount))()) throw;
    }

    //********************************************************
    //Claims
    //********************************************************

    //Claim whatever you're owed, 
    //from whatever completed sales you haven't already claimed
    //this covers refunds, and any tokens not minted immediately
    //(i.e. auction tokens, not firstsale tokens)
    function claim() notAllStopped {
        var (tokens, refund, nc) = claimable(msg.sender, true);
        nextClaim[msg.sender] = nc;
        logClaim(msg.sender, refund, tokens);
        if (tokens > 0) {
            token.mint(msg.sender, tokens);
        }
        if (refund > 0) {
            refundInStop[msg.sender] = safeSub(refundInStop[msg.sender], refund);
            if (!msg.sender.send(safebalance(refund))) throw;
        }
    }

    //Allow admin to claim on behalf of user and send to any address.
    //Scenarios:
    //  user lost key
    //  user sent from an exchange
    //  user has expensive fallback function
    //  user is unknown, funds presumed abandoned
    //We only allow this after one year has passed.
    function claimFor(address _from, address _to) 
    onlyOwner notAllStopped {
        var (tokens, refund, nc) = claimable(_from, false);
        nextClaim[_from] = nc;

        logClaim(_from, refund, tokens);

        if (tokens > 0) {
            token.mint(_to, tokens);
        }
        if (refund > 0) {
            refundInStop[_from] = safeSub(refundInStop[_from], refund);
            if (!_to.send(safebalance(refund))) throw;
        }
    }

    function claimable(address _a, bool _includeRecent) 
    constant private tokenIsSet 
    returns (uint tokens, uint refund, uint nc) {
        nc = nextClaim[_a];

        while (nc < sales.length &&
               sales[nc].isComplete(currTime()) &&
               ( _includeRecent || 
                 sales[nc].stopTime() + 1 years < currTime() )) 
        {
            refund = safeAdd(refund, sales[nc].getRefund(_a));
            tokens = safeAdd(tokens, sales[nc].getTokens(_a));
            nc += 1;
        }
    }

    function claimableTokens(address a) constant returns (uint) {
        var (tokens, refund, nc) = claimable(a, true);
        return tokens;
    }

    function claimableRefund(address a) constant returns (uint) {
        var (tokens, refund, nc) = claimable(a, true);
        return refund;
    }

    function claimableTokens() constant returns (uint) {
        return claimableTokens(msg.sender);
    }

    function claimableRefund() constant returns (uint) {
        return claimableRefund(msg.sender);
    }

    //********************************************************
    //Withdraw ETH
    //********************************************************

    mapping (uint => bool) ownerClaimed;

    function claimableOwnerEth(uint salenum) constant returns (uint) {
        uint time = currTime();
        if (!sales[salenum].isComplete(time)) return 0;
        return sales[salenum].getOwnerEth();
    }

    function claimOwnerEth(uint salenum) onlyOwner notAllStopped {
        if (ownerClaimed[salenum]) throw;

        uint ownereth = claimableOwnerEth(salenum);
        if (ownereth > 0) {
            ownerClaimed[salenum] = true;
            if ( !payee.call.value(safebalance(ownereth))() ) throw;
        }
    }

    //********************************************************
    //Sweep tokens sent here
    //********************************************************

    //Support transfer of erc20 tokens out of this contract's address
    //Even if we don't intend for people to send them here, somebody will

    event logTokenTransfer(address token, address to, uint amount);

    function transferTokens(address _token, address _to) onlyOwner {
        Token token = Token(_token);
        uint balance = token.balanceOf(this);
        token.transfer(_to, balance);
        logTokenTransfer(_token, _to, balance);
    }

    //********************************************************
    //Emergency Stop
    //********************************************************

    bool allstopped;
    bool permastopped;

    //allow allStopper to be more secure address than owner
    //in which case it doesn't make sense to let owner change it again
    address allStopper;
    function setAllStopper(address _a) onlyOwner {
        if (allStopper != owner) return;
        allStopper = _a;
    }
    modifier onlyAllStopper() {
        if (msg.sender != allStopper) throw;
        _;
    }

    event logAllStop();
    event logAllStart();

    modifier allStopped() {
        if (!allstopped) throw;
        _;
    }

    modifier notAllStopped() {
        if (allstopped) throw;
        _;
    }

    function allStop() onlyAllStopper {
        allstopped = true;    
        logAllStop();
    }

    function allStart() onlyAllStopper {
        if (!permastopped) {
            allstopped = false;
            logAllStart();
        }
    }

    function emergencyRefund(address _a, uint _amt) 
    allStopped 
    onlyAllStopper {
        //if you start actually calling this refund, the disaster is real.
        //Don't allow restart, so this can't be abused 
        permastopped = true;

        uint amt = _amt;

        uint ethbal = refundInStop[_a];

        //convenient default so owner doesn't have to look up balances
        //this is fine as long as no funds have been stolen
        if (amt == 0) amt = ethbal; 

        //nobody can be refunded more than they contributed
        if (amt > ethbal) amt = ethbal;

        //since everything is halted, safer to call.value
        //so we don't have to worry about expensive fallbacks
        if ( !_a.call.value(safebalance(amt))() ) throw;
    }

    function raised() constant returns (uint) {
        return sales[getCurrSale()].raised();
    }

    function tokensPerEth() constant returns (uint) {
        return sales[getCurrSale()].tokensPerEth();
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"raisedFromToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"}],"name":"setAllStopper","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPayee","type":"address"}],"name":"changePayee","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currSaleActive","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_token","type":"address"},{"name":"_ethValue","type":"uint256"},{"name":"_depositedTokens","type":"uint256"},{"name":"_reference","type":"bytes32"}],"name":"depositTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"allStart","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currSaleComplete","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sale","type":"address"}],"name":"addSale","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"salenum","type":"uint256"}],"name":"claimableOwnerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimableRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"},{"name":"_amt","type":"uint256"}],"name":"emergencyRefund","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"transferTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"a","type":"address"}],"name":"claimableRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"salenum","type":"uint256"}],"name":"numContributors","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"t","type":"uint256"}],"name":"setFakeTime","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"a","type":"address"}],"name":"claimableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"testing","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"m","type":"uint256"}],"name":"addMinutes","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"setAsTest","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numSales","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raisedFromFiat","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"salenum","type":"uint256"}],"name":"claimOwnerEth","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawTopUp","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payee","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"claimFor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sales","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"mintRefs","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"nextClaim","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"d","type":"uint256"}],"name":"addDays","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"topUp","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"topUpAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getCurrSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"allStop","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_ethValue","type":"uint256"},{"name":"_reference","type":"bytes32"}],"name":"depositFiat","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sale","type":"address"},{"name":"minimumPurchase","type":"uint256"}],"name":"addSale","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"logPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"depositedTokens","type":"uint256"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"_reference","type":"bytes32"}],"name":"logPurchaseViaToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"_reference","type":"bytes32"}],"name":"logPurchaseViaFiat","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"logTokenTransfer","type":"event"},{"anonymous":false,"inputs":[],"name":"logAllStop","type":"event"},{"anonymous":false,"inputs":[],"name":"logAllStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startTime","type":"uint256"},{"indexed":false,"name":"stopTime","type":"uint256"}],"name":"logSaleStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"refund","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"logClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000c57fe5b5b6001805461010060a860020a03191661010033600160a060020a03169081029190911790915560058054600160a060020a03191682179055600f80546201000060b060020a031916620100009092029190911790555b5b61234b806100736000396000f300606060405236156102355763ffffffff60e060020a60003504166307cbe8ab8114610246578063144fa6d714610274578063156773ca146102925780631a6af7b7146102b05780631c1bc850146102d2578063379ba3b7146102f05780633fe3f42714610314578063443f95dc1461034157806348b17b64146103535780634a6d0292146103775780634e71d92d1461039557806353cea153146103a75780635ab827f6146103cc57806367f8a8b8146103ee5780636a092e791461040f5780636c530ee3146104335780636e1e063f1461045557806371c1d1961461048357806379ba5097146104a85780637a08339d146104ba57806384d24226146104cf5780638d03b102146104fd5780638da5cb5b146105215780638ff591b41461054d57806392eefe9b1461056257806398e54c551461058057806399aa93c8146105925780639c492b9e146105b4578063a015cb10146105d6578063a6f9dae1146105eb578063a8af232b14610609578063ae90b2131461061b578063b4ba9e1114610647578063b5f522f71461066b578063bab8fe401461069a578063cbdd69b5146106bc578063cd5681d5146106de578063cf00746014610705578063d0e30db014610733578063dabd5d651461073d578063dc29f1de14610752578063dd592a321461075c578063e12097b71461077e578063ecb6c47a146107a0578063eeee7cc0146107b2578063efecab8a146107d6578063f0ea4bfc146107f7578063f77c479114610819578063fc0c546a14610845575b6102445b610241610871565b5b565b005b341561024e57fe5b610262600160a060020a03600435166108ef565b60408051918252519081900360200190f35b341561027c57fe5b610244600160a060020a0360043516610901565b005b341561029a57fe5b610244600160a060020a0360043516610959565b005b34156102b857fe5b6102626109d6565b60408051918252519081900360200190f35b34156102da57fe5b610244600160a060020a03600435166109f4565b005b34156102f857fe5b610300610a47565b604080519115158252519081900360200190f35b341561031c57fe5b610244600160a060020a0360043581169060243516604435606435608435610aeb565b005b341561034957fe5b610244610d17565b005b341561035b57fe5b610300610d82565b604080519115158252519081900360200190f35b341561037f57fe5b610244600160a060020a0360043516610e26565b005b341561039d57fe5b610244610e52565b005b34156103af57fe5b610262600435610fc2565b60408051918252519081900360200190f35b34156103d457fe5b610262611100565b60408051918252519081900360200190f35b34156103f657fe5b610244600160a060020a0360043516602435611111565b005b341561041757fe5b610244600160a060020a03600435811690602435166111c9565b005b341561043b57fe5b610262611336565b60408051918252519081900360200190f35b341561045d57fe5b610262600160a060020a036004351661135f565b60408051918252519081900360200190f35b341561048b57fe5b610262600435611384565b60408051918252519081900360200190f35b34156104b057fe5b610244611416565b005b34156104c257fe5b610244600435611467565b005b34156104d757fe5b610262600160a060020a0360043516611483565b60408051918252519081900360200190f35b341561050557fe5b6103006114a8565b604080519115158252519081900360200190f35b341561052957fe5b6105316114b1565b60408051600160a060020a039092168252519081900360200190f35b341561055557fe5b6102446004356114c5565b005b341561056a57fe5b610244600160a060020a03600435166114e7565b005b341561058857fe5b610244611551565b005b341561059a57fe5b61026261158c565b60408051918252519081900360200190f35b34156105bc57fe5b610262611593565b60408051918252519081900360200190f35b34156105de57fe5b610244600435611599565b005b34156105f357fe5b610244600160a060020a0360043516611655565b005b341561061157fe5b610244611696565b005b341561062357fe5b61053161170e565b60408051600160a060020a039092168252519081900360200190f35b341561064f57fe5b610244600160a060020a036004358116906024351661171d565b005b341561067357fe5b6105316004356118b4565b60408051600160a060020a039092168252519081900360200190f35b34156106a257fe5b6102626118e6565b60408051918252519081900360200190f35b34156106c457fe5b6102626118f7565b60408051918252519081900360200190f35b34156106e657fe5b61030060043561198c565b604080519115158252519081900360200190f35b341561070d57fe5b610262600160a060020a03600435166119a1565b60408051918252519081900360200190f35b610244610871565b005b341561074557fe5b6102446004356119b3565b005b6102446119d7565b005b341561076457fe5b610262611a1d565b60408051918252519081900360200190f35b341561078657fe5b610262611a23565b60408051918252519081900360200190f35b34156107a857fe5b610244611a41565b005b34156107ba57fe5b610244600160a060020a0360043516602435604435611a9d565b005b34156107de57fe5b610244600160a060020a0360043516602435611b80565b005b34156107ff57fe5b610262611d08565b60408051918252519081900360200190f35b341561082157fe5b610531611d9d565b60408051600160a060020a039092168252519081900360200190f35b341561084d57fe5b610531611dac565b60408051600160a060020a039092168252519081900360200190f35b600f5460009060ff16156108855760006000fd5b61088f3334611dbb565b50600160a060020a033316600081815260096020908152604091829020805434808201909255835191825292519293927fc30df14cb928081d7587d26c00adb1c5483c8049cc0456e2d2e8e226dfb7c920929181900390910190a25b5b50565b600b6020526000908152604090205481565b60015433600160a060020a0390811661010090920416146109225760006000fd5b600354600160a060020a0316156109395760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b5b50565b60015433600160a060020a03908116610100909204161461097a5760006000fd5b600154600f54620100009004600160a060020a0390811661010090920416146109a2576108eb565b600f805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a038416021790555b5b50565b60015460009060ff16156109ed57506000546109f0565b50425b5b90565b60015433600160a060020a039081166101009092041614610a155760006000fd5b600f5460ff1615610a265760006000fd5b60058054600160a060020a031916600160a060020a0383161790555b5b5b50565b60006006610a53611a23565b81548110610a5d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03166382afd23b610a936109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600f54600090819060ff1615610b015760006000fd5b60015433600160a060020a039081166101009092041614610b225760006000fd5b6000610b2c611a23565b1115610b385760006000fd5b6000838152600a602052604090205460ff1615610b555760006000fd5b6000838152600a60209081526040808320805460ff19166001179055600160a060020a0389168352600b909152902054610b8f9086611f28565b600160a060020a0387166000908152600b6020526040812091909155600680549091908110610bba57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663cbdd69b56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610c1f57fe5b60325a03f11515610c2c57fe5b5050604051519250610c3e9050611336565b610c488684611f50565b811515610c5157fe5b6003546040805160e060020a6340c10f19028152600160a060020a038c81166004830152949093046024840181905290519094509216916340c10f199160448082019260009290919082900301818387803b1515610cab57fe5b60325a03f11515610cb857fe5b505060408051868152602081018890528082018690529051600160a060020a03808a1693508a16917f15910e5cea9f22af6be011580707d2135bf1a23bf888657249f6e887af70a1fc919081900360600190a35b5b5b50505050505050565b600f5433600160a060020a03908116620100009092041614610d395760006000fd5b600f54610100900460ff16151561024157600f805460ff191690556040517f31ebd13fa817dd60b9d0ca3b04f5c010467dad9e01dce48c68ccd946dd8ec62990600090a15b5b5b565b60006006610d8e611a23565b81548110610d9857fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a6610a936109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b60045433600160a060020a03908116911614610e425760006000fd5b6108eb816000611b80565b5b5b50565b600f546000908190819060ff1615610e6a5760006000fd5b610e75336001611f7f565b600160a060020a03331660008181526008602090815260409182902084905581518581529081018690528151959850939650919450927fb72449e538635569e6f2eb1500da813bc2847392fa6a6972966a484ea8f9d73a9281900390910190a26000831115610f43576003546040805160e060020a6340c10f19028152600160a060020a03338116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b1515610f3257fe5b60325a03f11515610f3f57fe5b5050505b6000821115610fba57600160a060020a033316600090815260096020526040902054610f6f9083612278565b600160a060020a0333166000818152600960205260409020919091556108fc610f9784612291565b6040518115909202916000818181858888f193505050501515610fba5760006000fd5b5b5b5b505050565b60006000610fce6109d6565b9050600683815481101515610fdf57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a6826000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b151561104c57fe5b60325a03f1151561105957fe5b5050604051511515905061107057600091506110fa565b600680548490811061107e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663c5dacf686000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156110e357fe5b60325a03f115156110f057fe5b5050604051519250505b50919050565b600061110b3361135f565b90505b90565b600f54600090819060ff1615156111285760006000fd5b600f5433600160a060020a0390811662010000909204161461114a5760006000fd5b5050600f805461ff001916610100179055600160a060020a0382166000908152600960205260409020548190811515611181578091505b8082111561118d578091505b83600160a060020a03166111a083612291565b604051600081818185876185025a03f19250505015156111c05760006000fd5b5b5b5b50505050565b600154600090819033600160a060020a0390811661010090920416146111ef5760006000fd5b83915081600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561125257fe5b60325a03f1151561125f57fe5b50505060405180519050905081600160a060020a031663a9059cbb84836000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15156112d357fe5b60325a03f115156112e057fe5b505060408051600160a060020a0380881682528616602082015280820184905290517f977a8f1bdcf5f444d404662ea2c090d707ebcef1be61b37fe6ce74d0c6288fb892509081900360600190a15b5b50505050565b60015460009060ff161561134c575060c86109f0565b50670de0b6b3a76400006109f0565b5b90565b6000600060006000611372856001611f7f565b9250925092508193505b505050919050565b600060068281548110151561139557fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316638f03850b6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156113fa57fe5b60325a03f1151561140757fe5b5050604051519150505b919050565b60025433600160a060020a03908116911614156102415760025460018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff00199092169190911790555b5b565b60015460ff1615156114795760006000fd5b60008190555b5b50565b6000600060006000611496856001611f7f565b9250925092508293505b505050919050565b60015460ff1681565b6001546101009004600160a060020a031681565b60015460ff1615156114d75760006000fd5b60008054603c83020190555b5b50565b60015433600160a060020a0390811661010090920416146115085760006000fd5b600f5460ff16156115195760006000fd5b600454600160a060020a0316156115305760006000fd5b60048054600160a060020a031916600160a060020a0383161790555b5b5b50565b60015433600160a060020a0390811661010090920416146115725760006000fd5b6006541515610241576001805460ff1916811790555b5b5b565b6006545b90565b600c5481565b60015460009033600160a060020a0390811661010090920416146115bd5760006000fd5b600f5460ff16156115ce5760006000fd5b6000828152600e602052604090205460ff16156115eb5760006000fd5b6115f482610fc2565b9050600081111561164d576000828152600e60205260409020805460ff19166001179055600554600160a060020a031661162d82612291565b604051600081818185876185025a03f192505050151561164d5760006000fd5b5b5b5b5b5050565b60015433600160a060020a0390811661010090920416146116765760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b5b50565b60015460009033600160a060020a0390811661010090920416146116ba5760006000fd5b600f5460ff16156116cb5760006000fd5b50600d80546000909155600160a060020a0333166116e882612291565b604051600081818185876185025a03f19250505015156108eb5760006000fd5b5b5b5b50565b600554600160a060020a031681565b6001546000908190819033600160a060020a0390811661010090920416146117455760006000fd5b600f5460ff16156117565760006000fd5b611761856000611f7f565b600160a060020a03881660008181526008602090815260409182902084905581518581529081018690528151959850939650919450927fb72449e538635569e6f2eb1500da813bc2847392fa6a6972966a484ea8f9d73a9281900390910190a2600083111561182f576003546040805160e060020a6340c10f19028152600160a060020a03878116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b151561181e57fe5b60325a03f1151561182b57fe5b5050505b60008211156118a957600160a060020a03851660009081526009602052604090205461185b9083612278565b600160a060020a0380871660009081526009602052604090209190915584166108fc61188684612291565b6040518115909202916000818181858888f1935050505015156118a95760006000fd5b5b5b5b5b5050505050565b60068054829081106118c257fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600061110b33611483565b90505b90565b60006006611903611a23565b8154811061190d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663cbdd69b56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600a6020526000908152604090205460ff1681565b60086020526000908152604090205481565b60015460ff1615156119c55760006000fd5b600080546201518083020190555b5b50565b60015433600160a060020a0390811661010090920416146119f85760006000fd5b600f5460ff1615611a095760006000fd5b611a15600d5434611f28565b600d555b5b5b565b600d5481565b6006546000901515611a355760006000fd5b50600654600019015b90565b600f5433600160a060020a03908116620100009092041614611a635760006000fd5b600f805460ff191660011790556040517f0a9a784214055eda7660e0eea4cac1eb3e349173dce3741cb49393e72e98070190600090a15b5b565b600f5460ff1615611aae5760006000fd5b60015433600160a060020a039081166101009092041614611acf5760006000fd5b6000611ad9611a23565b1115611ae55760006000fd5b6000818152600a602052604090205460ff1615611b025760006000fd5b6000818152600a60205260409020805460ff19166001179055600c54611b289083611f28565b600c55611b358383611dbb565b60408051838152602081018390528151600160a060020a038616927f8a890695a0d1d5bc0de2dd9278f1b080ce4fa5f192849361d46119e98dea1f4d928290030190a25b5b5b505050565b60045460009033600160a060020a03908116911614611b9f5760006000fd5b600f5460ff1615611bb05760006000fd5b5060068054908160018101611bc583826122d4565b916000526020600020900160005b8154600160a060020a038088166101009390930a8381029102199091161790915560008381526007602090815260408083208790558051820183905280517f78e9792500000000000000000000000000000000000000000000000000000000815290517fea217d4dc825d94490e4479842497722c85e7da8444afc5a5c6928966e85849395506378e9792593600480840194938390030190829087803b1515611c7857fe5b60325a03f11515611c8557fe5b5050506040518051905084600160a060020a03166303ff5e736000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515611cd557fe5b60325a03f11515611ce257fe5b5050604080518051938152602081019390935280519283900301919050a15b5b5b505050565b60006006611d14611a23565b81548110611d1e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663f0ea4bfc6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600454600160a060020a031681565b600354600160a060020a031681565b60006000611dc7611a23565b9150611dd1610a47565b1515611ddd5760006000fd5b600082815260076020526040902054831015611df95760006000fd5b6006805483908110611e0757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663d2395dcd8585611e3f6109d6565b6000604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1515611e9d57fe5b60325a03f11515611eaa57fe5b50506040515191505060008111156111c0576003546040805160e060020a6340c10f19028152600160a060020a03878116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b1515611f1057fe5b60325a03f11515610d0c57fe5b5050505b5b50505050565b6000828201611f45848210801590611f405750838210155b6122c3565b8091505b5092915050565b6000828202611f45841580611f405750838583811515611f6c57fe5b04145b6122c3565b8091505b5092915050565b60035460009081908190600160a060020a03161515611f9e5760006000fd5b50600160a060020a0384166000908152600860205260409020545b6006548110801561205d57506006805482908110611fd357fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a66120096109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b151561204757fe5b60325a03f1151561205457fe5b50506040515190505b80156121055750838061210557506120736109d6565b600680548390811061208157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03166303ff5e736000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156120e657fe5b60325a03f115156120f357fe5b505050604051805190506301e1338001105b5b1561226f576121b78260068381548110151561211e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663696c58c4886000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561219d57fe5b60325a03f115156121aa57fe5b5050604051519050611f28565b9150612265836006838154811015156121cc57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663450efe21886000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561219d57fe5b60325a03f115156121aa57fe5b5050604051519050611f28565b9250600101611fb9565b5b5b9250925092565b6000612286838311156122c3565b508082035b92915050565b600030600160a060020a0316318211156122b65750600160a060020a03301631611411565b5080611411565b5b919050565b8015156108eb5760006000fd5b5b50565b815481835581811511610fba57600083815260209020610fba9181019083016122fe565b5b505050565b6109f091905b808211156123185760008155600101612304565b5090565b905600a165627a7a72305820f0811d8f921c387af47f7a37b04616fc6ee77f8321d9bb1e4ac21f3b1c61db8e0029

   Swarm Source:
bzzr://f0811d8f921c387af47f7a37b04616fc6ee77f8321d9bb1e4ac21f3b1c61db8e

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.