Sponsored Link:   Color - Revolutionizing the Dapp Ecosystem, Bounty & Airdrop, Get 240,000 COL NOW!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 2427 txns
Misc
Address Watch: Add To Watch List
Contract Creator: 0xdf6640db4e24ee7dca8cc0d6939121567d3e2609at txn 0x2957e15ddc2405f9c6e100df14b070e6b51f61c18a168f59b4679e1ffb0a2091
Token Balances:
 Latest 25 txns from a total Of 2427 transactions

TxHash Age From To Value [TxFee]
0x8dca8e9df433ea80152466ee4db98e6622af8cc506bb100d84c04a164410d780138 days 2 hrs ago0x35295549091fc925ca7ca3329fa4ac579b2bfb40  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e21.04 Ether0.00119537
0x7c372857591b7fb83949022c67ef537b838a73c4fff59d265b2376ad7788b26a144 days 8 hrs ago0x5c00c07bb2411998962b0fd2e6a0a66235d36b24  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.414 Ether0.00032601
0x007483eec9b2dbce7c898e524790e40b03b515e9fb67ab195ebcbeef493b793a150 days 1 hr ago0x30a19375f0bfa374c174483309304b284c4631cf  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.22 Ether0.0010867
0x804f95702ffb823c1e7eadc0c35c230e8061f9bdcd909097f97aa5524d9a1b63150 days 1 hr ago0xdb4e7307acf5c198597a41e95071b7262b95bf59  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.11 Ether0.000043468
0x9bf02383817bd296d842d5da403ff316904ee69c87e70e99496f7d9fb2933ef0150 days 1 hr ago0x14071e0839ec444b0c2912447bfe3db36e630aa6  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.1 Ether0.000043468
0x32f9bc4604398371300894238473441b5cb9bde240db6e94b2cf683b38ed2525150 days 1 hr ago0xa09064f70a8b053f655c227c2431b4630097030a  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.075 Ether0.000184754
0x5c6b42b130e410ded05648f91846f3a0f9efd2f915a87a0b66ac263c02bd0c84150 days 1 hr ago0x80a8dd49b5d6bc4b8d3cfbe8f048f1288ac24a41  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e22.9 Ether0.00124754
0xbdd250eb41a5e3ab8e45ef3c096f0c3f430fd254b8c579d6692d3220ab1bd7a8150 days 1 hr ago0xa8f5aa3cafaaeb2cd54994cea334c93bb80dae07  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e23 Ether0.00277131
0x250b6b4ef4b21caf88b6ae81f3f92faba08bfbfa06c018a8f00c24d51f5dec67150 days 1 hr ago0xb17fbefa57a7b585cf92eda1f002b5443af6b713  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e22.2 Ether0.001559425
0x21ed08b96490f613ac28c3f2064d4ce1791e49c2324116eb580e37c68e8d4dd9150 days 1 hr ago0xf100dfb0227bfcb9ae98b4f241a5fc52bbd937c9  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e22.63 Ether0.003787457
0xba5ff9912ed089ad1599ad3a7ac4f03c6da18959d618305438ef827634d6f02d150 days 1 hr ago0x7ba662610ac9bc3f40329bd1724ea40c6c0ac814  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e21.3 Ether0.00277131
0x23fbae1e34af029e4227e40fa41de386293d1f2f6c837dad1e23eaec7973d341150 days 1 hr ago0x30a19375f0bfa374c174483309304b284c4631cf  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.2246 Ether0.00108513
0x58ea7f74a6754986dafc9cef836e92f0581934ed15d5a282c1bb19d2e81efc7f150 days 1 hr ago0x46a5b271c8d298d8e53f93374347b7c867e8eda8  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e22 Ether0.00277131
0xd87ce393a039246ada616d730ce6dee12c816c10b40020a25332c15d85973350150 days 1 hr ago0xf7c64fd75ecc4ce13608977eefa14f05ccd23bc5  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.095 Ether0.000184754
0x8b6f5587d4d2edcd4e54b3ec2e3b3179e3561283fa26e8d319b9821e21aacde3150 days 1 hr ago0xdb4e7307acf5c198597a41e95071b7262b95bf59  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.1 Ether0.0000747534
0x22e91828d346f7c06e2f3fdee6672c21b1a9553d5bc46df394637b0c4fce8f0d150 days 1 hr ago0x7ba662610ac9bc3f40329bd1724ea40c6c0ac814  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e21.3 Ether0.00063
0x5c63e4d6766b79b47dc4def3ffa3f36ba230602b696eea3d0342a66c3b70f9bb150 days 1 hr ago0xa2dfb7c1110dca1ccf85eb740e578964c50666bf  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.9873 Ether0.00277131
0x6a4ed5e99518ce4ff2898eeefa7dc57d7e6d33136ead8d028b19210580e02db2150 days 1 hr ago0x04653d317ac40069b03cc137f6321600dbf0d0ab  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e21 Ether0.003787457
0x71bfd4ae0f9fdc4054330faaa7c9e21236b6c82f073a0bf60b69ebb20ac6441b150 days 1 hr ago0xb1e24714d8cb3a4d22f4583e7c377ea017052fa0  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e24 Ether0.003787457
0x3e0fc8594289572d8ed23ac94cb5b32e516a5ae8e1ebcca64ed566b1b69c9f83150 days 1 hr ago0x4943f3e7a3968594aba724b8fe6926e05c4e6c31  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.061 Ether0.000249508
0xcdc64ad4b0f245a9ddea95a9f19992dc693870b3547f11f03b72ecf269e9efb0150 days 1 hr ago0x87c2d2075ffcd1c719443d54402f8f6160d0b697  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e28 Ether0.00461885
0x4f16f115adfdad1927b6bd678ea3d444c193c192c4201022f39ac9deeb544484150 days 1 hr ago0x4943f3e7a3968594aba724b8fe6926e05c4e6c31  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.062 Ether0.000105
0x544d1fc4c88b19a68ed40759460fb4d533f3596b52ffb5aa956cf47d8d8d1f72150 days 1 hr ago0xa2dfb7c1110dca1ccf85eb740e578964c50666bf  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.9933 Ether0.00268746
0xa4f7bac0148e7488cfe132063cab48ec878664f2fb6ead38165249e305a6d370150 days 1 hr ago0x9c94d8d035b352b905611bd2e012275fcf4ca0c4  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.1 Ether0.002557457
0xbc4be34263f1573f17168abbd520f72ac061850dcd6af50f84333617abf6f4c3150 days 1 hr ago0x6c2f912664daff5b3529038eaae85714c8681a3c  IN   0x12321fb3e2548b03ead42f09cab239cff377b4e20.5 Ether0.003787457
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x32f9bc4604398371300894238473441b5cb9bde240db6e94b2cf683b38ed25255113741150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.075 Ether
0x5c6b42b130e410ded05648f91846f3a0f9efd2f915a87a0b66ac263c02bd0c845113740150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff2.9 Ether
0xbdd250eb41a5e3ab8e45ef3c096f0c3f430fd254b8c579d6692d3220ab1bd7a85113736150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff3 Ether
0x250b6b4ef4b21caf88b6ae81f3f92faba08bfbfa06c018a8f00c24d51f5dec675113734150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff2.2 Ether
0x21ed08b96490f613ac28c3f2064d4ce1791e49c2324116eb580e37c68e8d4dd95113733150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff2.63 Ether
0xba5ff9912ed089ad1599ad3a7ac4f03c6da18959d618305438ef827634d6f02d5113727150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff1.3 Ether
0x58ea7f74a6754986dafc9cef836e92f0581934ed15d5a282c1bb19d2e81efc7f5113720150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff2 Ether
0xd87ce393a039246ada616d730ce6dee12c816c10b40020a25332c15d859733505113717150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.095 Ether
0x5c63e4d6766b79b47dc4def3ffa3f36ba230602b696eea3d0342a66c3b70f9bb5113715150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.9873 Ether
0x6a4ed5e99518ce4ff2898eeefa7dc57d7e6d33136ead8d028b19210580e02db25113715150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff1 Ether
0x71bfd4ae0f9fdc4054330faaa7c9e21236b6c82f073a0bf60b69ebb20ac6441b5113708150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff4 Ether
0x3e0fc8594289572d8ed23ac94cb5b32e516a5ae8e1ebcca64ed566b1b69c9f835113697150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.061 Ether
0xcdc64ad4b0f245a9ddea95a9f19992dc693870b3547f11f03b72ecf269e9efb05113695150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff8 Ether
0x544d1fc4c88b19a68ed40759460fb4d533f3596b52ffb5aa956cf47d8d8d1f725113690150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.9933 Ether
0xa4f7bac0148e7488cfe132063cab48ec878664f2fb6ead38165249e305a6d3705113690150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.1 Ether
0xbc4be34263f1573f17168abbd520f72ac061850dcd6af50f84333617abf6f4c35113682150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.5 Ether
0xa686c62eeb517899e9b5863f41c0e7f558c566e7a547feabf7ad805f23839a995113671150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.65 Ether
0x893beec63304565ab0507bfcee7d48f22f966c3b0cdfa5bbd67eb475728aac235113664150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.996 Ether
0xdf7cc31eccd383e742654b4ddb040d84d001f4a8cbeecda96a0e60f0b523ef5b5113662150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.18 Ether
0x6658de1076bc6c839f0b5c71b795fb1678b5dcf73f448128c025d9250897bba95113653150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.16 Ether
0x17055adbf52ddd3d645fcd83938e7f53fb1f9a546b614b7087851eef7a2c0d245113646150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.15 Ether
0x003eb471a6e6bb2d3f7ba6160d0903b9f043cb0b2eb9b64c92e5a3d8aa5c63ab5113644150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.99462492 Ether
0x2b3b3f6dd987b23f12509b5f65df4d657e0186dad7a1aaf6fdcdac155a56499f5113641150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff0.03 Ether
0xcd111a95944f59a44625bc5c19e4bb9b10e15aef3f2ba6931327a61ceecd4aee5113636150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff1 Ether
0x4235e0280c21db128d89a1cffa08991d16c8663024ea69e989f077e57063e90a5113636150 days 1 hr ago0x12321fb3e2548b03ead42f09cab239cff377b4e20x34df02e145f0a6b5df675e9dfab54ae745e6c4ff20 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: ColuLocalNetworkSale
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.18;

/// @title Ownable
/// @dev The Ownable contract has an owner address, and provides basic authorization control functions,
/// this simplifies the implementation of "user permissions".
/// @dev Based on OpenZeppelin's Ownable.

contract Ownable {
    address public owner;
    address public newOwnerCandidate;

    event OwnershipRequested(address indexed _by, address indexed _to);
    event OwnershipTransferred(address indexed _from, address indexed _to);

    /// @dev Constructor sets the original `owner` of the contract to the sender account.
    function Ownable() public {
        owner = msg.sender;
    }

    /// @dev Reverts if called by any account other than the owner.
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyOwnerCandidate() {
        require(msg.sender == newOwnerCandidate);
        _;
    }

    /// @dev Proposes to transfer control of the contract to a newOwnerCandidate.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    function requestOwnershipTransfer(address _newOwnerCandidate) external onlyOwner {
        require(_newOwnerCandidate != address(0));

        newOwnerCandidate = _newOwnerCandidate;

        OwnershipRequested(msg.sender, newOwnerCandidate);
    }

    /// @dev Accept ownership transfer. This method needs to be called by the perviously proposed owner.
    function acceptOwnership() external onlyOwnerCandidate {
        address previousOwner = owner;

        owner = newOwnerCandidate;
        newOwnerCandidate = address(0);

        OwnershipTransferred(previousOwner, owner);
    }
}

/// @title Math operations with safety checks
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        require(a == 0 || c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // require(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // require(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }

    function max64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a >= b ? a : b;
    }

    function min64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a < b ? a : b;
    }

    function max256(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function min256(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    function toPower2(uint256 a) internal pure returns (uint256) {
        return mul(a, a);
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        uint256 c = (a + 1) / 2;
        uint256 b = a;
        while (c < b) {
            b = c;
            c = (a / c + c) / 2;
        }
        return b;
    }
}

/// @title ERC Token Standard #20 Interface (https://github.com/ethereum/EIPs/issues/20)
contract ERC20 {
    uint public totalSupply;
    function balanceOf(address _owner) constant public returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint remaining);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}



/// @title ERC Token Standard #677 Interface (https://github.com/ethereum/EIPs/issues/677)
contract ERC677 is ERC20 {
    function transferAndCall(address to, uint value, bytes data) public returns (bool ok);

    event TransferAndCall(address indexed from, address indexed to, uint value, bytes data);
}

/// @title ERC223Receiver Interface
/// @dev Based on the specs form: https://github.com/ethereum/EIPs/issues/223
contract ERC223Receiver {
    function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok);
}




/// @title Basic ERC20 token contract implementation.
/// @dev Based on OpenZeppelin's StandardToken.
contract BasicToken is ERC20 {
    using SafeMath for uint256;

    uint256 public totalSupply;
    mapping (address => mapping (address => uint256)) allowed;
    mapping (address => uint256) balances;

    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
    /// @param _spender address The address which will spend the funds.
    /// @param _value uint256 The amount of tokens to be spent.
    function approve(address _spender, uint256 _value) public returns (bool) {
        // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve (see NOTE)
        if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) {
            revert();
        }

        allowed[msg.sender][_spender] = _value;

        Approval(msg.sender, _spender, _value);

        return true;
    }

    /// @dev Function to check the amount of tokens that an owner allowed to a spender.
    /// @param _owner address The address which owns the funds.
    /// @param _spender address The address which will spend the funds.
    /// @return uint256 specifying the amount of tokens still available for the spender.
    function allowance(address _owner, address _spender) constant public returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }


    /// @dev Gets the balance of the specified address.
    /// @param _owner address The address to query the the balance of.
    /// @return uint256 representing the amount owned by the passed address.
    function balanceOf(address _owner) constant public returns (uint256 balance) {
        return balances[_owner];
    }

    /// @dev Transfer token to a specified address.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 The amount to be transferred.
    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(msg.sender, _to, _value);

        return true;
    }

    /// @dev Transfer tokens from one address to another.
    /// @param _from address The address which you want to send tokens from.
    /// @param _to address The address which you want to transfer to.
    /// @param _value uint256 the amount of tokens to be transferred.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        var _allowance = allowed[_from][msg.sender];

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);

        allowed[_from][msg.sender] = _allowance.sub(_value);

        Transfer(_from, _to, _value);

        return true;
    }
}






/// @title Standard677Token implentation, base on https://github.com/ethereum/EIPs/issues/677

contract Standard677Token is ERC677, BasicToken {

  /// @dev ERC223 safe token transfer from one address to another
  /// @param _to address the address which you want to transfer to.
  /// @param _value uint256 the amount of tokens to be transferred.
  /// @param _data bytes data that can be attached to the token transation
  function transferAndCall(address _to, uint _value, bytes _data) public returns (bool) {
    require(super.transfer(_to, _value)); // do a normal token transfer
    TransferAndCall(msg.sender, _to, _value, _data);
    //filtering if the target is a contract with bytecode inside it
    if (isContract(_to)) return contractFallback(_to, _value, _data);
    return true;
  }

  /// @dev called when transaction target is a contract
  /// @param _to address the address which you want to transfer to.
  /// @param _value uint256 the amount of tokens to be transferred.
  /// @param _data bytes data that can be attached to the token transation
  function contractFallback(address _to, uint _value, bytes _data) private returns (bool) {
    ERC223Receiver receiver = ERC223Receiver(_to);
    require(receiver.tokenFallback(msg.sender, _value, _data));
    return true;
  }

  /// @dev check if the address is contract
  /// assemble the given address bytecode. If bytecode exists then the _addr is a contract.
  /// @param _addr address the address to check
  function isContract(address _addr) private constant returns (bool is_contract) {
    // retrieve the size of the code on target address, this needs assembly
    uint length;
    assembly { length := extcodesize(_addr) }
    return length > 0;
  }
}





/// @title Token holder contract.
contract TokenHolder is Ownable {
    /// @dev Allow the owner to transfer out any accidentally sent ERC20 tokens.
    /// @param _tokenAddress address The address of the ERC20 contract.
    /// @param _amount uint256 The amount of tokens to be transferred.
    function transferAnyERC20Token(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) {
        return ERC20(_tokenAddress).transfer(owner, _amount);
    }
}






/// @title Colu Local Network contract.
/// @author Tal Beja.
contract ColuLocalNetwork is Ownable, Standard677Token, TokenHolder {
    using SafeMath for uint256;

    string public constant name = "Colu Local Network";
    string public constant symbol = "CLN";

    // Using same decimals value as ETH (makes ETH-CLN conversion much easier).
    uint8 public constant decimals = 18;

    // States whether token transfers is allowed or not.
    // Used during token sale.
    bool public isTransferable = false;

    event TokensTransferable();

    modifier transferable() {
        require(msg.sender == owner || isTransferable);
        _;
    }

    /// @dev Creates all tokens and gives them to the owner.
    function ColuLocalNetwork(uint256 _totalSupply) public {
        totalSupply = _totalSupply;
        balances[msg.sender] = totalSupply;
    }

    /// @dev start transferable mode.
    function makeTokensTransferable() external onlyOwner {
        if (isTransferable) {
            return;
        }

        isTransferable = true;

        TokensTransferable();
    }

    /// @dev Same ERC20 behavior, but reverts if not transferable.
    /// @param _spender address The address which will spend the funds.
    /// @param _value uint256 The amount of tokens to be spent.
    function approve(address _spender, uint256 _value) public transferable returns (bool) {
        return super.approve(_spender, _value);
    }

    /// @dev Same ERC20 behavior, but reverts if not transferable.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 The amount to be transferred.
    function transfer(address _to, uint256 _value) public transferable returns (bool) {
        return super.transfer(_to, _value);
    }

    /// @dev Same ERC20 behavior, but reverts if not transferable.
    /// @param _from address The address to send tokens from.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 the amount of tokens to be transferred.
    function transferFrom(address _from, address _to, uint256 _value) public transferable returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    /// @dev Same ERC677 behavior, but reverts if not transferable.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 The amount to be transferred.
    /// @param _data bytes data to send to receiver if it is a contract.
    function transferAndCall(address _to, uint _value, bytes _data) public transferable returns (bool success) {
      return super.transferAndCall(_to, _value, _data);
    }
}



 /// @title Standard ERC223 Token Receiver implementing tokenFallback function and tokenPayable modifier

contract Standard223Receiver is ERC223Receiver {
  Tkn tkn;

  struct Tkn {
    address addr;
    address sender; // the transaction caller
    uint256 value;
  }

  bool __isTokenFallback;

  modifier tokenPayable {
    require(__isTokenFallback);
    _;
  }

  /// @dev Called when the receiver of transfer is contract
  /// @param _sender address the address of tokens sender
  /// @param _value uint256 the amount of tokens to be transferred.
  /// @param _data bytes data that can be attached to the token transation
  function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok) {
    if (!supportsToken(msg.sender)) {
      return false;
    }

    // Problem: This will do a sstore which is expensive gas wise. Find a way to keep it in memory.
    // Solution: Remove the the data
    tkn = Tkn(msg.sender, _sender, _value);
    __isTokenFallback = true;
    if (!address(this).delegatecall(_data)) {
      __isTokenFallback = false;
      return false;
    }
    // avoid doing an overwrite to .token, which would be more expensive
    // makes accessing .tkn values outside tokenPayable functions unsafe
    __isTokenFallback = false;

    return true;
  }

  function supportsToken(address token) public constant returns (bool);
}





/// @title TokenOwnable
/// @dev The TokenOwnable contract adds a onlyTokenOwner modifier as a tokenReceiver with ownable addaptation

contract TokenOwnable is Standard223Receiver, Ownable {
    /// @dev Reverts if called by any account other than the owner for token sending.
    modifier onlyTokenOwner() {
        require(tkn.sender == owner);
        _;
    }
}






/// @title Vesting trustee contract for Colu Local Network.
/// @dev This Contract can't be TokenHolder, since it will allow its owner to drain its vested tokens.
/// @dev This means that any token sent to it different than ColuLocalNetwork is basicly stucked here forever.
/// @dev ColuLocalNetwork that sent here (by mistake) can withdrawn using the grant method.
contract VestingTrustee is TokenOwnable {
    using SafeMath for uint256;

    // Colu Local Network contract.
    ColuLocalNetwork public cln;

    // Vesting grant for a speicifc holder.
    struct Grant {
        uint256 value;
        uint256 start;
        uint256 cliff;
        uint256 end;
        uint256 installmentLength; // In seconds.
        uint256 transferred;
        bool revokable;
    }

    // Holder to grant information mapping.
    mapping (address => Grant) public grants;

    // Total tokens vested.
    uint256 public totalVesting;

    event NewGrant(address indexed _from, address indexed _to, uint256 _value);
    event TokensUnlocked(address indexed _to, uint256 _value);
    event GrantRevoked(address indexed _holder, uint256 _refund);

    uint constant OK = 1;
    uint constant ERR_INVALID_VALUE = 10001;
    uint constant ERR_INVALID_VESTED = 10002;
    uint constant ERR_INVALID_TRANSFERABLE = 10003;

    event Error(address indexed sender, uint error);

    /// @dev Constructor that initializes the address of the Colu Local Network contract.
    /// @param _cln ColuLocalNetwork The address of the previously deployed Colu Local Network contract.
    function VestingTrustee(ColuLocalNetwork _cln) public {
        require(_cln != address(0));

        cln = _cln;
    }

    /// @dev Allow only cln token to be tokenPayable
    /// @param token the token to check
    function supportsToken(address token) public constant returns (bool) {
        return (cln == token);
    }

    /// @dev Grant tokens to a specified address.
    /// @param _to address The holder address.
    /// @param _start uint256 The beginning of the vesting period (timestamp).
    /// @param _cliff uint256 When the first installment is made (timestamp).
    /// @param _end uint256 The end of the vesting period (timestamp).
    /// @param _installmentLength uint256 The length of each vesting installment (in seconds).
    /// @param _revokable bool Whether the grant is revokable or not.
    function grant(address _to, uint256 _start, uint256 _cliff, uint256 _end,
        uint256 _installmentLength, bool _revokable)
        external onlyTokenOwner tokenPayable {

        require(_to != address(0));
        require(_to != address(this)); // Protect this contract from receiving a grant.

        uint256 value = tkn.value;

        require(value > 0);

        // Require that every holder can be granted tokens only once.
        require(grants[_to].value == 0);

        // Require for time ranges to be consistent and valid.
        require(_start <= _cliff && _cliff <= _end);

        // Require installment length to be valid and no longer than (end - start).
        require(_installmentLength > 0 && _installmentLength <= _end.sub(_start));

        // Grant must not exceed the total amount of tokens currently available for vesting.
        require(totalVesting.add(value) <= cln.balanceOf(address(this)));

        // Assign a new grant.
        grants[_to] = Grant({
            value: value,
            start: _start,
            cliff: _cliff,
            end: _end,
            installmentLength: _installmentLength,
            transferred: 0,
            revokable: _revokable
        });

        // Since tokens have been granted, increase the total amount vested.
        totalVesting = totalVesting.add(value);

        NewGrant(msg.sender, _to, value);
    }

    /// @dev Grant tokens to a specified address.
    /// @param _to address The holder address.
    /// @param _value uint256 The amount of tokens to be granted.
    /// @param _start uint256 The beginning of the vesting period (timestamp).
    /// @param _cliff uint256 When the first installment is made (timestamp).
    /// @param _end uint256 The end of the vesting period (timestamp).
    /// @param _installmentLength uint256 The length of each vesting installment (in seconds).
    /// @param _revokable bool Whether the grant is revokable or not.
    function grant(address _to, uint256 _value, uint256 _start, uint256 _cliff, uint256 _end,
        uint256 _installmentLength, bool _revokable)
        external onlyOwner {

        require(_to != address(0));
        require(_to != address(this)); // Protect this contract from receiving a grant.
        require(_value > 0);

        // Require that every holder can be granted tokens only once.
        require(grants[_to].value == 0);

        // Require for time ranges to be consistent and valid.
        require(_start <= _cliff && _cliff <= _end);

        // Require installment length to be valid and no longer than (end - start).
        require(_installmentLength > 0 && _installmentLength <= _end.sub(_start));

        // Grant must not exceed the total amount of tokens currently available for vesting.
        require(totalVesting.add(_value) <= cln.balanceOf(address(this)));

        // Assign a new grant.
        grants[_to] = Grant({
            value: _value,
            start: _start,
            cliff: _cliff,
            end: _end,
            installmentLength: _installmentLength,
            transferred: 0,
            revokable: _revokable
        });

        // Since tokens have been granted, increase the total amount vested.
        totalVesting = totalVesting.add(_value);

        NewGrant(msg.sender, _to, _value);
    }

    /// @dev Revoke the grant of tokens of a specifed address.
    /// @dev Unlocked tokens will be sent to the grantee, the rest is transferred to the trustee's owner.
    /// @param _holder The address which will have its tokens revoked.
    function revoke(address _holder) public onlyOwner {
        Grant memory grant = grants[_holder];

        // Grant must be revokable.
        require(grant.revokable);

        // Get the total amount of vested tokens, acccording to grant.
        uint256 vested = calculateVestedTokens(grant, now);

        // Calculate the untransferred vested tokens.
        uint256 transferable = vested.sub(grant.transferred);

        if (transferable > 0) {
            // Update transferred and total vesting amount, then transfer remaining vested funds to holder.
            grant.transferred = grant.transferred.add(transferable);
            totalVesting = totalVesting.sub(transferable);
            require(cln.transfer(_holder, transferable));

            TokensUnlocked(_holder, transferable);
        }

        // Calculate amount of remaining tokens that can still be returned.
        uint256 refund = grant.value.sub(grant.transferred);

        // Remove the grant.
        delete grants[_holder];

        // Update total vesting amount and transfer previously calculated tokens to owner.
        totalVesting = totalVesting.sub(refund);
        require(cln.transfer(msg.sender, refund));

        GrantRevoked(_holder, refund);
    }

    /// @dev Calculate the amount of ready tokens of a holder.
    /// @param _holder address The address of the holder.
    /// @return a uint256 Representing a holder's total amount of vested tokens.
    function readyTokens(address _holder) public constant returns (uint256) {
        Grant memory grant = grants[_holder];

        if (grant.value == 0) {
            return 0;
        }

        uint256 vested = calculateVestedTokens(grant, now);

        if (vested == 0) {
            return 0;
        }

        return vested.sub(grant.transferred);
    }

    /// @dev Calculate the total amount of vested tokens of a holder at a given time.
    /// @param _holder address The address of the holder.
    /// @param _time uint256 The specific time to calculate against.
    /// @return a uint256 Representing a holder's total amount of vested tokens.
    function vestedTokens(address _holder, uint256 _time) public constant returns (uint256) {
        Grant memory grant = grants[_holder];
        if (grant.value == 0) {
            return 0;
        }

        return calculateVestedTokens(grant, _time);
    }

    /// @dev Calculate amount of vested tokens at a specifc time.
    /// @param _grant Grant The vesting grant.
    /// @param _time uint256 The time to be checked
    /// @return An uint256 Representing the amount of vested tokens of a specific grant.
    function calculateVestedTokens(Grant _grant, uint256 _time) private pure returns (uint256) {
        // If we're before the cliff, then nothing is vested.
        if (_time < _grant.cliff) {
            return 0;
        }

        // If we're after the end of the vesting period - everything is vested.
        if (_time >= _grant.end) {
            return _grant.value;
        }

        // Calculate amount of installments past until now.
        //
        // NOTE: result gets floored because of integer division.
        uint256 installmentsPast = _time.sub(_grant.start).div(_grant.installmentLength);

        // Calculate amount of days in entire vesting period.
        uint256 vestingDays = _grant.end.sub(_grant.start);

        // Calculate and return the number of tokens according to vesting days that have passed.
        return _grant.value.mul(installmentsPast.mul(_grant.installmentLength)).div(vestingDays);
    }

    /// @dev Unlock vested tokens and transfer them to the grantee.
    /// @return a uint The success or error code.
    function unlockVestedTokens() external returns (uint) {
        return unlockVestedTokens(msg.sender);
    }

    /// @dev Unlock vested tokens and transfer them to the grantee (helper function).
    /// @param _grantee address The address of the grantee.
    /// @return a uint The success or error code.
    function unlockVestedTokens(address _grantee) private returns (uint) {
        Grant storage grant = grants[_grantee];

        // Make sure the grant has tokens available.
        if (grant.value == 0) {
            Error(_grantee, ERR_INVALID_VALUE);
            return ERR_INVALID_VALUE;
        }

        // Get the total amount of vested tokens, acccording to grant.
        uint256 vested = calculateVestedTokens(grant, now);
        if (vested == 0) {
            Error(_grantee, ERR_INVALID_VESTED);
            return ERR_INVALID_VESTED;
        }

        // Make sure the holder doesn't transfer more than what he already has.
        uint256 transferable = vested.sub(grant.transferred);
        if (transferable == 0) {
            Error(_grantee, ERR_INVALID_TRANSFERABLE);
            return ERR_INVALID_TRANSFERABLE;
        }

        // Update transferred and total vesting amount, then transfer remaining vested funds to holder.
        grant.transferred = grant.transferred.add(transferable);
        totalVesting = totalVesting.sub(transferable);
        require(cln.transfer(_grantee, transferable));

        TokensUnlocked(_grantee, transferable);
        return OK;
    }

    /// @dev batchUnlockVestedTokens vested tokens and transfer them to the grantees.
    /// @param _grantees address[] The addresses of the grantees.
    /// @return a boo if success.
    function batchUnlockVestedTokens(address[] _grantees) external onlyOwner returns (bool success) {
        for (uint i = 0; i<_grantees.length; i++) {
            unlockVestedTokens(_grantees[i]);
        }
        return true;
    }

    /// @dev Allow the owner to transfer out any accidentally sent ERC20 tokens.
    /// @param _tokenAddress address The address of the ERC20 contract.
    /// @param _amount uint256 The amount of tokens to be transferred.
    function withdrawERC20(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) {
        if (_tokenAddress == address(cln)) {
            // If the token is cln, allow to withdraw only non vested tokens.
            uint256 availableCLN = cln.balanceOf(this).sub(totalVesting);
            require(_amount <= availableCLN);
        }
        return ERC20(_tokenAddress).transfer(owner, _amount);
    }
}








/// @title Colu Local Network sale contract.
/// @author Tal Beja.
contract ColuLocalNetworkSale is Ownable, TokenHolder {
    using SafeMath for uint256;

    // External parties:

    // Colu Local Network contract.
    ColuLocalNetwork public cln;

    // Vesting contract for presale participants.
    VestingTrustee public trustee;

    // Received funds are forwarded to this address.
    address public fundingRecipient;

    // Post-TDE multisig addresses.
    address public communityPoolAddress;
    address public futureDevelopmentPoolAddress;
    address public stakeholdersPoolAddress;

    // Colu Local Network decimals.
    // Using same decimals value as ETH (makes ETH-CLN conversion much easier).
    // This is the same as in Colu Local Network contract.
    uint256 public constant TOKEN_DECIMALS = 10 ** 18;

    // Additional Lockup Allocation Pool
    uint256 public constant ALAP = 40701333592592592592614116;

    // Maximum number of tokens in circulation: 1.5 trillion.
    uint256 public constant MAX_TOKENS = 15 * 10 ** 8 * TOKEN_DECIMALS + ALAP;

    // Maximum tokens offered in the sale (35%) + ALAP.
    uint256 public constant MAX_TOKENS_SOLD = 525 * 10 ** 6 * TOKEN_DECIMALS + ALAP;

    // Maximum tokens offered in the presale (from the initial 35% offered tokens) + ALAP.
    uint256 public constant MAX_PRESALE_TOKENS_SOLD = 2625 * 10 ** 5 * TOKEN_DECIMALS + ALAP;

    // Tokens allocated for Community pool (30%).
    uint256 public constant COMMUNITY_POOL = 45 * 10 ** 7 * TOKEN_DECIMALS;

    // Tokens allocated for Future development pool (29%).
    uint256 public constant FUTURE_DEVELOPMENT_POOL = 435 * 10 ** 6 * TOKEN_DECIMALS;

    // Tokens allocated for Stakeholdes pool (6%).
    uint256 public constant STAKEHOLDERS_POOL = 9 * 10 ** 7 * TOKEN_DECIMALS;

    // CLN to ETH ratio.
    uint256 public constant CLN_PER_ETH = 8600;

    // Sale start, end blocks (time ranges)
    uint256 public constant SALE_DURATION = 4 days;
    uint256 public startTime;
    uint256 public endTime;

    // Amount of tokens sold until now in the sale.
    uint256 public tokensSold = 0;

    // Amount of tokens sold until now in the presale.
    uint256 public presaleTokensSold = 0;

    // Accumulated amount each participant has contributed so far in the sale (in WEI).
    mapping (address => uint256) public participationHistory;

    // Accumulated amount each participant have contributed so far in the presale.
    mapping (address => uint256) public participationPresaleHistory;

    // Maximum amount that each particular is allowed to contribute (in ETH-WEI).
    // Defaults to zero. Serving as a functional whitelist. 
    mapping (address => uint256) public participationCaps;

    // Maximum amount ANYONE is currently allowed to contribute. Set to max uint256 so no limitation other than personal participationCaps.
    uint256 public hardParticipationCap = uint256(-1);

    // initialization of the contract, splitted from the constructor to avoid gas block limit.
    bool public initialized = false;

    // Vesting plan structure for presale
    struct VestingPlan {
        uint256 startOffset;
        uint256 cliffOffset;
        uint256 endOffset;
        uint256 installmentLength;
        uint8 alapPercent;
    }

    // Vesting plans for presale
    VestingPlan[] public vestingPlans;

    // Each token that is sent from the ColuLocalNetworkSale is considered as issued.
    event TokensIssued(address indexed to, uint256 tokens);

    /// @dev Reverts if called not before the sale.
    modifier onlyBeforeSale() {
        if (now >= startTime) {
            revert();
        }

        _;
    }

    /// @dev Reverts if called not during the sale.
    modifier onlyDuringSale() {
        if (tokensSold >= MAX_TOKENS_SOLD || now < startTime || now >= endTime) {
            revert();
        }

        _;
    }

    /// @dev Reverts if called before the sale ends.
    modifier onlyAfterSale() {
        if (!(tokensSold >= MAX_TOKENS_SOLD || now >= endTime)) {
            revert();
        }

        _;
    }

    /// @dev Reverts if called before the sale is initialized.
    modifier notInitialized() {
        if (initialized) {
            revert();
        }

        _;
    }


    /// @dev Reverts if called after the sale is initialized.
    modifier isInitialized() {
        if (!initialized) {
            revert();
        }

        _;
    }

    /// @dev Constructor sets the sale addresses and start time.
    /// @param _owner address The address of this contract owner.
    /// @param _fundingRecipient address The address of the funding recipient.
    /// @param _communityPoolAddress address The address of the community pool.
    /// @param _futureDevelopmentPoolAddress address The address of the future development pool.
    /// @param _stakeholdersPoolAddress address The address of the team pool.
    /// @param _startTime uint256 The start time of the token sale.
    function ColuLocalNetworkSale(address _owner,
        address _fundingRecipient,
        address _communityPoolAddress,
        address _futureDevelopmentPoolAddress,
        address _stakeholdersPoolAddress,
        uint256 _startTime) public {
        require(_owner != address(0));
        require(_fundingRecipient != address(0));
        require(_communityPoolAddress != address(0));
        require(_futureDevelopmentPoolAddress != address(0));
        require(_stakeholdersPoolAddress != address(0));
        require(_startTime > now);

        owner = _owner;
        fundingRecipient = _fundingRecipient;
        communityPoolAddress = _communityPoolAddress;
        futureDevelopmentPoolAddress = _futureDevelopmentPoolAddress;
        stakeholdersPoolAddress = _stakeholdersPoolAddress;
        startTime = _startTime;
        endTime = startTime + SALE_DURATION;
    }

    /// @dev Initialize the sale conditions.
    function initialize() public onlyOwner notInitialized {
        initialized = true;

        uint256 months = 1 years / 12;

        vestingPlans.push(VestingPlan(0, 0, 1, 1, 0));
        vestingPlans.push(VestingPlan(0, 0, 6 * months, 1 * months, 4));
        vestingPlans.push(VestingPlan(0, 0, 1 years, 1 * months, 12));
        vestingPlans.push(VestingPlan(0, 0, 2 years, 1 * months, 26));
        vestingPlans.push(VestingPlan(0, 0, 3 years, 1 * months, 35));

        // Deploy new ColuLocalNetwork contract.
        cln = new ColuLocalNetwork(MAX_TOKENS);

        // Deploy new VestingTrustee contract.
        trustee = new VestingTrustee(cln);

        // allocate pool tokens:
        // Issue the remaining tokens to designated pools.
        require(transferTokens(communityPoolAddress, COMMUNITY_POOL));

        // stakeholdersPoolAddress will create its own vesting trusts.
        require(transferTokens(stakeholdersPoolAddress, STAKEHOLDERS_POOL));
    }

    /// @dev Allocate tokens to presale participant according to its vesting plan and invesment value.
    /// @param _recipient address The presale participant address to recieve the tokens.
    /// @param _etherValue uint256 The invesment value (in ETH).
    /// @param _vestingPlanIndex uint8 The vesting plan index.
    function presaleAllocation(address _recipient, uint256 _etherValue, uint8 _vestingPlanIndex) external onlyOwner onlyBeforeSale isInitialized {
        require(_recipient != address(0));
        require(_vestingPlanIndex < vestingPlans.length);

        // Calculate plan and token amount.
        VestingPlan memory plan = vestingPlans[_vestingPlanIndex];
        uint256 tokensAndALAPPerEth = CLN_PER_ETH.mul(SafeMath.add(100, plan.alapPercent)).div(100);

        uint256 tokensLeftInPreSale = MAX_PRESALE_TOKENS_SOLD.sub(presaleTokensSold);
        uint256 weiLeftInSale = tokensLeftInPreSale.div(tokensAndALAPPerEth);
        uint256 weiToParticipate = SafeMath.min256(_etherValue, weiLeftInSale);
        require(weiToParticipate > 0);
        participationPresaleHistory[msg.sender] = participationPresaleHistory[msg.sender].add(weiToParticipate);
        uint256 tokensToTransfer = weiToParticipate.mul(tokensAndALAPPerEth);
        presaleTokensSold = presaleTokensSold.add(tokensToTransfer);
        tokensSold = tokensSold.add(tokensToTransfer);

        // Transfer tokens to trustee and create grant.
        grant(_recipient, tokensToTransfer, startTime.add(plan.startOffset), startTime.add(plan.cliffOffset),
            startTime.add(plan.endOffset), plan.installmentLength, false);
    }

    /// @dev Add a list of participants to a capped participation tier.
    /// @param _participants address[] The list of participant addresses.
    /// @param _cap uint256 The cap amount (in ETH-WEI).
    function setParticipationCap(address[] _participants, uint256 _cap) external onlyOwner isInitialized {
        for (uint i = 0; i < _participants.length; i++) {
            participationCaps[_participants[i]] = _cap;
        }
    }

    /// @dev Set hard participation cap for all participants.
    /// @param _cap uint256 The hard cap amount.
    function setHardParticipationCap(uint256 _cap) external onlyOwner isInitialized {
        require(_cap > 0);

        hardParticipationCap = _cap;
    }

    /// @dev Fallback function that will delegate the request to participate().
    function () external payable onlyDuringSale isInitialized {
        participate(msg.sender);
    }

    /// @dev Create and sell tokens to the caller.
    /// @param _recipient address The address of the recipient receiving the tokens.
    function participate(address _recipient) public payable onlyDuringSale isInitialized {
        require(_recipient != address(0));

        // Enforce participation cap (in WEI received).
        uint256 weiAlreadyParticipated = participationHistory[_recipient];
        uint256 participationCap = SafeMath.min256(participationCaps[_recipient], hardParticipationCap);
        uint256 cappedWeiReceived = SafeMath.min256(msg.value, participationCap.sub(weiAlreadyParticipated));
        require(cappedWeiReceived > 0);

        // Accept funds and transfer to funding recipient.
        uint256 tokensLeftInSale = MAX_TOKENS_SOLD.sub(tokensSold);
        uint256 weiLeftInSale = tokensLeftInSale.div(CLN_PER_ETH);
        uint256 weiToParticipate = SafeMath.min256(cappedWeiReceived, weiLeftInSale);
        participationHistory[_recipient] = weiAlreadyParticipated.add(weiToParticipate);
        fundingRecipient.transfer(weiToParticipate);

        // Transfer tokens to recipient.
        uint256 tokensToTransfer = weiToParticipate.mul(CLN_PER_ETH);
        if (tokensLeftInSale.sub(tokensToTransfer) < CLN_PER_ETH) {
            // If purchase would cause less than CLN_PER_ETH tokens to be left then nobody could ever buy them.
            // So, gift them to the last buyer.
            tokensToTransfer = tokensLeftInSale;
        }
        tokensSold = tokensSold.add(tokensToTransfer);
        require(transferTokens(_recipient, tokensToTransfer));

        // Partial refund if full participation not possible
        // e.g. due to cap being reached.
        uint256 refund = msg.value.sub(weiToParticipate);
        if (refund > 0) {
            msg.sender.transfer(refund);
        }
    }

    /// @dev Finalizes the token sale event: make future development pool grant (lockup) and make token transfarable.
    function finalize() external onlyAfterSale onlyOwner isInitialized {
        if (cln.isTransferable()) {
            revert();
        }

        // Add unsold token to the future development pool grant (lockup).
        uint256 tokensLeftInSale = MAX_TOKENS_SOLD.sub(tokensSold);
        uint256 futureDevelopmentPool = FUTURE_DEVELOPMENT_POOL.add(tokensLeftInSale);
        // Future Development Pool is locked for 3 years.
        grant(futureDevelopmentPoolAddress, futureDevelopmentPool, startTime, startTime.add(3 years),
            startTime.add(3 years), 1 days, false);

        // Make tokens Transferable, end the sale!.
        cln.makeTokensTransferable();
    }

    function grant(address _grantee, uint256 _amount, uint256 _start, uint256 _cliff, uint256 _end,
        uint256 _installmentLength, bool _revokable) private {
        // bytes4 grantSig = bytes4(keccak256("grant(address,uint256,uint256,uint256,uint256,bool)"));
        bytes4 grantSig = 0x5ee7e96d;
        // 6 arguments of size 32
        uint256 argsSize = 6 * 32;
        // sig + arguments size
        uint256 dataSize = 4 + argsSize;

        bytes memory m_data = new bytes(dataSize);

        assembly {
            // Add the signature first to memory
            mstore(add(m_data, 0x20), grantSig)
            // Add the parameters
            mstore(add(m_data, 0x24), _grantee)
            mstore(add(m_data, 0x44), _start)
            mstore(add(m_data, 0x64), _cliff)
            mstore(add(m_data, 0x84), _end)
            mstore(add(m_data, 0xa4), _installmentLength)
            mstore(add(m_data, 0xc4), _revokable)
        }

        require(transferTokens(trustee, _amount, m_data));
    }

    /// @dev Transfer tokens from the sale contract to a recipient.
    /// @param _recipient address The address of the recipient.
    /// @param _tokens uint256 The amount of tokens to transfer.
    function transferTokens(address _recipient, uint256 _tokens) private returns (bool ans) {
        ans = cln.transfer(_recipient, _tokens);
        if (ans) {
            TokensIssued(_recipient, _tokens);
        }
    }

    /// @dev Transfer tokens from the sale contract to a recipient.
    /// @param _recipient address The address of the recipient.
    /// @param _tokens uint256 The amount of tokens to transfer.
    /// @param _data bytes data to send to receiver if it is a contract.
    function transferTokens(address _recipient, uint256 _tokens, bytes _data) private returns (bool ans) {
        // Request Colu Local Network contract to transfer the requested tokens for the buyer.
        ans = cln.transferAndCall(_recipient, _tokens, _data);
        if (ans) {
            TokensIssued(_recipient, _tokens);
        }
    }

    /// @dev Requests to transfer control of the Colu Local Network contract to a new owner.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    ///
    /// NOTE:
    ///   1. The new owner will need to call Colu Local Network contract's acceptOwnership directly in order to accept the ownership.
    ///   2. Calling this method during the token sale will prevent the token sale to continue, since only the owner of
    ///      the Colu Local Network contract can transfer tokens during the sale.
    function requestColuLocalNetworkOwnershipTransfer(address _newOwnerCandidate) external onlyOwner {
        cln.requestOwnershipTransfer(_newOwnerCandidate);
    }

    /// @dev Accepts new ownership on behalf of the Colu Local Network contract.
    // This can be used by the sale contract itself to claim back ownership of the Colu Local Network contract.
    function acceptColuLocalNetworkOwnership() external onlyOwner {
        cln.acceptOwnership();
    }

    /// @dev Requests to transfer control of the VestingTrustee contract to a new owner.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    ///
    /// NOTE:
    ///   1. The new owner will need to call trustee contract's acceptOwnership directly in order to accept the ownership.
    ///   2. Calling this method during the token sale will prevent the token sale from alocation presale grunts add finalize, since only the owner of
    ///      the trustee contract can create grunts needed in the presaleAlocation add finalize methods.
    function requestVestingTrusteeOwnershipTransfer(address _newOwnerCandidate) external onlyOwner {
        trustee.requestOwnershipTransfer(_newOwnerCandidate);
    }

    /// @dev Accepts new ownership on behalf of the VestingTrustee contract.
    /// This can be used by the token sale contract itself to claim back ownership of the VestingTrustee contract.
    function acceptVestingTrusteeOwnership() external onlyOwner {
        trustee.acceptOwnership();
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_etherValue","type":"uint256"},{"name":"_vestingPlanIndex","type":"uint8"}],"name":"presaleAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS_SOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationHistory","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakeholdersPoolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"vestingPlans","outputs":[{"name":"startOffset","type":"uint256"},{"name":"cliffOffset","type":"uint256"},{"name":"endOffset","type":"uint256"},{"name":"installmentLength","type":"uint256"},{"name":"alapPercent","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CLN_PER_ETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cap","type":"uint256"}],"name":"setHardParticipationCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hardParticipationCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SALE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FUTURE_DEVELOPMENT_POOL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationCaps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STAKEHOLDERS_POOL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ALAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"},{"name":"_cap","type":"uint256"}],"name":"setParticipationCap","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":"cln","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COMMUNITY_POOL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptColuLocalNetworkOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"participate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestColuLocalNetworkOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestVestingTrusteeOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptVestingTrusteeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwnerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_PRESALE_TOKENS_SOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"communityPoolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"futureDevelopmentPoolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationPresaleHistory","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"trustee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_fundingRecipient","type":"address"},{"name":"_communityPoolAddress","type":"address"},{"name":"_futureDevelopmentPoolAddress","type":"address"},{"name":"_stakeholdersPoolAddress","type":"address"},{"name":"_startTime","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"TokensIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000600a819055600b55600019600f556010805460ff19169055341561002957600080fd5b60405160c08062003f1683398101604052808051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925087161515905061009357600080fd5b600160a060020a03851615156100a857600080fd5b600160a060020a03841615156100bd57600080fd5b600160a060020a03831615156100d257600080fd5b600160a060020a03821615156100e757600080fd5b4281116100f357600080fd5b60008054600160a060020a0319908116600160a060020a0398891617825560048054821697891697909717909655600580548716958816959095179094556006805486169387169390931790925560078054909416941693909317909155600882905562054600909101600955613da59081906200017190396000f3006060604052600436106101df5763ffffffff60e060020a6000350416630952c504811461023157806310ae4a7314610250578063158ef93e1461027857806317f5de951461029f5780631bb534ba146102c45780633197cbb6146102f3578063341c33041461030657806349432923146103195780634bb278f314610338578063518ab2a81461034b57806355b1182c1461035e5780635a592380146103715780635b3b20e1146103ba5780635b7f415c146103cd57806364329400146103e057806365b9e37d146103f65780636d79207c14610409578063751ecea01461041c57806376e532211461042f57806378e979251461044e57806379ba5097146104615780637eddea211461047457806381030e35146104875780638129fc1c1461049a57806383d880d0146104ad5780638da5cb5b146104cf57806390604005146104e2578063aeb47e2a146104f5578063b3b4ec5414610508578063b91038c71461051b578063baa835681461052f578063c28f9df11461054e578063cfabe67b1461056d578063d091b55014610580578063dc39d06d14610593578063e5514c9d146105b5578063ea02db0f146105c8578063ed3788c9146105db578063f47c84c5146105ee578063fae95a7114610601578063fdf97cb214610620575b600a546b01d3efeabe3216ca7036b2e4901015806101fe575060085442105b8061020b57506009544210155b1561021557600080fd5b60105460ff16151561022657600080fd5b61022f33610633565b005b341561023c57600080fd5b61022f600160a060020a0360043516610857565b341561025b57600080fd5b61022f600160a060020a036004351660243560ff604435166108ea565b341561028357600080fd5b61028b610b13565b604051901515815260200160405180910390f35b34156102aa57600080fd5b6102b2610b1c565b60405190815260200160405180910390f35b34156102cf57600080fd5b6102d7610b2c565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b6102b2610b3b565b341561031157600080fd5b6102b2610b41565b341561032457600080fd5b6102b2600160a060020a0360043516610b47565b341561034357600080fd5b61022f610b59565b341561035657600080fd5b6102b2610d08565b341561036957600080fd5b6102d7610d0e565b341561037c57600080fd5b610387600435610d1d565b6040519485526020850193909352604080850192909252606084015260ff909116608083015260a0909101905180910390f35b34156103c557600080fd5b6102b2610d5f565b34156103d857600080fd5b6102b2610d65565b34156103eb57600080fd5b61022f600435610d71565b341561040157600080fd5b6102b2610daf565b341561041457600080fd5b6102b2610db5565b341561042757600080fd5b6102b2610dbc565b341561043a57600080fd5b6102b2600160a060020a0360043516610dcc565b341561045957600080fd5b6102b2610dde565b341561046c57600080fd5b61022f610de4565b341561047f57600080fd5b6102b2610e71565b341561049257600080fd5b6102b2610e80565b34156104a557600080fd5b61022f610e8f565b34156104b857600080fd5b61022f6024600480358281019291013590356112b6565b34156104da57600080fd5b6102d7611331565b34156104ed57600080fd5b6102d7611340565b341561050057600080fd5b6102b261134f565b341561051357600080fd5b61022f61135f565b61022f600160a060020a0360043516610633565b341561053a57600080fd5b61022f600160a060020a03600435166113cf565b341561055957600080fd5b61022f600160a060020a036004351661144b565b341561057857600080fd5b61022f6114b6565b341561058b57600080fd5b6102d7611510565b341561059e57600080fd5b61028b600160a060020a036004351660243561151f565b34156105c057600080fd5b6102b26115c4565b34156105d357600080fd5b6102d76115d3565b34156105e657600080fd5b6102d76115e2565b34156105f957600080fd5b6102b26115f1565b341561060c57600080fd5b6102b2600160a060020a0360043516611601565b341561062b57600080fd5b6102d7611613565b6000806000806000806000806a21aad7b717d3774336b2e4670de0b6b3a7640000631f4add400201600a5410158061066c575060085442105b8061067957506009544210155b1561068357600080fd5b60105460ff16151561069457600080fd5b600160a060020a03891615156106a957600080fd5b600160a060020a0389166000908152600c6020908152604080832054600e90925290912054600f549199506106dd91611622565b96506106f8346106f3898b63ffffffff61163a16565b611622565b95506000861161070757600080fd5b600a54610727906b01d3efeabe3216ca7036b2e49063ffffffff61163a16565b945061073b8561219863ffffffff61164f16565b93506107478685611622565b9250610759888463ffffffff61166616565b600160a060020a03808b166000908152600c60205260409081902092909255600454169084156108fc0290859051600060405180830381858888f1935050505015156107a457600080fd5b6107b68361219863ffffffff61167816565b91506121986107cb868463ffffffff61163a16565b10156107d5578491505b600a546107e8908363ffffffff61166616565b600a556107f5898361169f565b151561080057600080fd5b610810348463ffffffff61163a16565b9050600081111561084c57600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561084c57600080fd5b505050505050505050565b60005433600160a060020a0390811691161461087257600080fd5b600160a060020a038116151561088757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b6108f2611963565b60008054819081908190819033600160a060020a0390811691161461091657600080fd5b600854421061092457600080fd5b60105460ff16151561093557600080fd5b600160a060020a038916151561094a57600080fd5b60115460ff88161061095b57600080fd5b6011805460ff891690811061096c57fe5b906000526020600020906005020160a0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260049091015460ff16608082019081529096506109f0906064906109e4906109d59083905160ff16611666565b6121989063ffffffff61167816565b9063ffffffff61164f16565b600b54909550610a12906afacd613aa4f520d9b6b2e49063ffffffff61163a16565b9350610a24848663ffffffff61164f16565b9250610a308884611622565b915060008211610a3f57600080fd5b600160a060020a0333166000908152600d6020526040902054610a68908363ffffffff61166616565b600160a060020a0333166000908152600d6020526040902055610a91828663ffffffff61167816565b600b54909150610aa7908263ffffffff61166616565b600b55600a54610abd908263ffffffff61166616565b600a5561084c8982610ad989516008549063ffffffff61166616565b610af08a602001516008549063ffffffff61166616565b610b078b604001516008549063ffffffff61166616565b8b606001516000611765565b60105460ff1681565b6b01d3efeabe3216ca7036b2e481565b600454600160a060020a031681565b60095481565b600b5481565b600c6020526000908152604090205481565b600a5460009081906b01d3efeabe3216ca7036b2e490101580610b7e57506009544210155b1515610b8957600080fd5b60005433600160a060020a03908116911614610ba457600080fd5b60105460ff161515610bb557600080fd5b600254600160a060020a0316632121dc756000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610bfd57600080fd5b6102c65a03f11515610c0e57600080fd5b5050506040518051905015610c2257600080fd5b600a54610c42906b01d3efeabe3216ca7036b2e49063ffffffff61163a16565b9150610c606b0167d2d5406637c8930000008363ffffffff61166616565b600654600854919250610cb191600160a060020a03909116908390610c8f816305a39a8063ffffffff61166616565b600854610ca6906305a39a8063ffffffff61166616565b620151806000611765565b600254600160a060020a0316635348ac956040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610cf057600080fd5b6102c65a03f11515610d0157600080fd5b5050505050565b600a5481565b600754600160a060020a031681565b6011805482908110610d2b57fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b61219881565b670de0b6b3a764000081565b60005433600160a060020a03908116911614610d8c57600080fd5b60105460ff161515610d9d57600080fd5b60008111610daa57600080fd5b600f55565b600f5481565b6205460081565b6b0167d2d5406637c89300000081565b600e6020526000908152604090205481565b60085481565b60015460009033600160a060020a03908116911614610e0257600080fd5b50600080546001805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6a4a723dc6b40b8a9a00000081565b6a21aad7b717d3774336b2e481565b6000805433600160a060020a03908116911614610eab57600080fd5b60105460ff1615610ebb57600080fd5b506010805460ff1916600190811790915560118054622819a0928101610ee18382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301819052600191830182905260608301919091526080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff90921691909117905550506011805460018101610f748382611996565b9160005260206000209060050201600060a060405190810160409081526000808352602083015260068602908201526060810185905260046080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055505060118054600181016110068382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526301e133809082015260608101859052600c6080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055505060118054600181016110998382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526303c267009082015260608101859052601a6080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff9092169190911790555050601180546001810161112c8382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526305a39a80908201526060810185905260236080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055506b04fa7032a6d093d29f36b2e490506111c36119c2565b908152602001604051809103906000f08015156111df57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790819055166112136119d2565b600160a060020a039091168152602001604051809103906000f080151561123957600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392831617905560055461127c91166b01743b34e18439b50200000061169f565b151561128757600080fd5b6007546112a890600160a060020a03166a4a723dc6b40b8a9a00000061169f565b15156112b357600080fd5b50565b6000805433600160a060020a039081169116146112d257600080fd5b60105460ff1615156112e357600080fd5b5060005b8281101561132b5781600e600086868581811061130057fe5b60209081029290920135600160a060020a0316835250810191909152604001600020556001016112e7565b50505050565b600054600160a060020a031681565b600254600160a060020a031681565b6b01743b34e18439b50200000081565b60005433600160a060020a0390811691161461137a57600080fd5b600254600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156113b957600080fd5b6102c65a03f115156113ca57600080fd5b505050565b60005433600160a060020a039081169116146113ea57600080fd5b600254600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561143a57600080fd5b6102c65a03f1151561132b57600080fd5b60005433600160a060020a0390811691161461146657600080fd5b600354600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561143a57600080fd5b60005433600160a060020a039081169116146114d157600080fd5b600354600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156113b957600080fd5b600154600160a060020a031681565b6000805433600160a060020a0390811691161461153b57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156115a157600080fd5b6102c65a03f115156115b257600080fd5b50505060405180519150505b92915050565b6afacd613aa4f520d9b6b2e481565b600554600160a060020a031681565b600654600160a060020a031681565b6b04fa7032a6d093d29f36b2e481565b600d6020526000908152604090205481565b600354600160a060020a031681565b60008183106116315781611633565b825b9392505050565b60008282111561164957600080fd5b50900390565b600080828481151561165d57fe5b04949350505050565b60008282018381101561163357600080fd5b6000828202831580611694575082848281151561169157fe5b04145b151561163357600080fd5b600254600090600160a060020a031663a9059cbb8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561170057600080fd5b6102c65a03f1151561171157600080fd5b505050604051805191505080156115be5782600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08360405190815260200160405180910390a292915050565b60008060006117726119e2565b7f5ee7e96d00000000000000000000000000000000000000000000000000000000935060c0925060c49150816040518059106117ab5750595b818152601f19601f8301168101602001604052905090508360208201528a60248201528860448201528760648201528660848201528560a48201528460c482015261180c600360009054906101000a9004600160a060020a03168b83611824565b151561181757600080fd5b5050505050505050505050565b600254600090600160a060020a0316634000aea085858585604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118b0578082015183820152602001611898565b50505050905090810190601f1680156118dd5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15156118fd57600080fd5b6102c65a03f1151561190e57600080fd5b505050604051805191505080156116335783600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08460405190815260200160405180910390a29392505050565b60a06040519081016040528060008152602001600081526020016000815260200160008152602001600060ff1681525090565b8154818355818115116113ca576005028160050283600052602060002091820191016113ca91906119f4565b604051610d6180611a3683390190565b6040516115e38061279783390190565b60206040519081016040526000815290565b611a3291905b80821115611a2e5760008082556001820181905560028201819055600382015560048101805460ff191690556005016119fa565b5090565b90560060606040526005805460a060020a60ff0219169055341561001f57600080fd5b604051602080610d618339810160405280805160048054600160a060020a033316600160a060020a0319909116811790915560018290556000908152600360205260409020555050610ceb806100766000396000f3006060604052600436106100d75763ffffffff60e060020a60003504166306fdde0381146100dc5780630952c50414610166578063095ea7b31461018757806318160ddd146101bd5780632121dc75146101e257806323b872dd146101f5578063313ce5671461021d5780634000aea0146102465780635348ac95146102ab57806370a08231146102be57806379ba5097146102dd5780638da5cb5b146102f057806395d89b411461031f578063a9059cbb14610332578063d091b55014610354578063dc39d06d14610367578063dd62ed3e14610389575b600080fd5b34156100e757600080fd5b6100ef6103ae565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012b578082015183820152602001610113565b50505050905090810190601f1680156101585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017157600080fd5b610185600160a060020a03600435166103e5565b005b341561019257600080fd5b6101a9600160a060020a0360043516602435610478565b604051901515815260200160405180910390f35b34156101c857600080fd5b6101d06104bd565b60405190815260200160405180910390f35b34156101ed57600080fd5b6101a96104c3565b341561020057600080fd5b6101a9600160a060020a03600435811690602435166044356104d3565b341561022857600080fd5b61023061051a565b60405160ff909116815260200160405180910390f35b341561025157600080fd5b6101a960048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061051f95505050505050565b34156102b657600080fd5b61018561055e565b34156102c957600080fd5b6101d0600160a060020a03600435166105e3565b34156102e857600080fd5b6101856105fe565b34156102fb57600080fd5b61030361068b565b604051600160a060020a03909116815260200160405180910390f35b341561032a57600080fd5b6100ef61069a565b341561033d57600080fd5b6101a9600160a060020a03600435166024356106d1565b341561035f57600080fd5b61030361070f565b341561037257600080fd5b6101a9600160a060020a036004351660243561071e565b341561039457600080fd5b6101d0600160a060020a03600435811690602435166107c0565b60408051908101604052601281527f436f6c75204c6f63616c204e6574776f726b0000000000000000000000000000602082015281565b60045433600160a060020a0390811691161461040057600080fd5b600160a060020a038116151561041557600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60045460009033600160a060020a03908116911614806104a1575060055460a060020a900460ff165b15156104ac57600080fd5b6104b683836107eb565b9392505050565b60015481565b60055460a060020a900460ff1681565b60045460009033600160a060020a03908116911614806104fc575060055460a060020a900460ff165b151561050757600080fd5b610512848484610893565b949350505050565b601281565b60045460009033600160a060020a0390811691161480610548575060055460a060020a900460ff165b151561055357600080fd5b6105128484846109bd565b60045433600160a060020a0390811691161461057957600080fd5b60055460a060020a900460ff1615610590576105e1565b6005805474ff0000000000000000000000000000000000000000191660a060020a1790557fa693ca1b20114bcad5861562c3007eb477c4926f79219f624bdbfde146fd2b6460405160405180910390a15b565b600160a060020a031660009081526003602052604090205490565b60055460009033600160a060020a0390811691161461061c57600080fd5b50600480546005805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600454600160a060020a031681565b60408051908101604052600381527f434c4e0000000000000000000000000000000000000000000000000000000000602082015281565b60045460009033600160a060020a03908116911614806106fa575060055460a060020a900460ff165b151561070557600080fd5b6104b68383610ab2565b600554600160a060020a031681565b60045460009033600160a060020a0390811691161461073c57600080fd5b600454600160a060020a038085169163a9059cbb91168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561079f57600080fd5b6102c65a03f115156107b057600080fd5b5050506040518051949350505050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600081158015906108205750600160a060020a0333811660009081526002602090815260408083209387168352929052205415155b1561082a57600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600080600160a060020a03841615156108ab57600080fd5b50600160a060020a038085166000818152600260209081526040808320339095168352938152838220549282526003905291909120546108f1908463ffffffff610b8816565b600160a060020a038087166000908152600360205260408082209390935590861681522054610926908463ffffffff610b9d16565b600160a060020a03851660009081526003602052604090205561094f818463ffffffff610b8816565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3506001949350505050565b60006109c98484610ab2565b15156109d457600080fd5b83600160a060020a031633600160a060020a03167fce8124fd2ae9fd7904103e5a9ebe88b527b9ca0e32a32fd497845c82706542d3858560405182815260406020820181815290820183818151815260200191508051906020019080838360005b83811015610a4d578082015183820152602001610a35565b50505050905090810190601f168015610a7a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3610a9184610baf565b15610aa857610aa1848484610bb7565b90506104b6565b5060019392505050565b6000600160a060020a0383161515610ac957600080fd5b600160a060020a033316600090815260036020526040902054610af2908363ffffffff610b8816565b600160a060020a033381166000908152600360205260408082209390935590851681522054610b27908363ffffffff610b9d16565b600160a060020a0380851660008181526003602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600082821115610b9757600080fd5b50900390565b6000828201838110156104b657600080fd5b6000903b1190565b600083600160a060020a03811663c0ee0b8a33868686604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c41578082015183820152602001610c29565b50505050905090810190601f168015610c6e5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1515610c8e57600080fd5b6102c65a03f11515610c9f57600080fd5b505050604051805190501515610cb457600080fd5b5060019493505050505600a165627a7a723058205ad7a6a2d562512bf45fa613c725473ae4db5a17be681123885fd9935ff3546f00296060604052341561000f57600080fd5b6040516020806115e38339810160405280805160038054600160a060020a033381166101000261010060a860020a03199092169190911790915590925082161515905061005b57600080fd5b60058054600160a060020a031916600160a060020a03929092169190911790556115598061008a6000396000f3006060604052600436106100d75763ffffffff60e060020a600035041663061f765081146100dc5780630952c5041461010f5780631a64adae146101305780631e075aba146101645780635ee7e96d146101825780636bfa379e146101b257806374a8f103146101d157806379ba5097146101f05780637c17357d1461020357806383fcf973146102165780638da5cb5b146102295780639060400514610258578063957924301461026b578063a1db97821461029e578063b869cea3146102c0578063c0ee0b8a1461031d578063d091b5501461034c575b600080fd5b34156100e757600080fd5b6100fb600160a060020a036004351661035f565b604051901515815260200160405180910390f35b341561011a57600080fd5b61012e600160a060020a0360043516610373565b005b341561013b57600080fd5b610152600160a060020a036004351660243561040b565b60405190815260200160405180910390f35b341561016f57600080fd5b6100fb60048035602481019101356104a8565b341561018d57600080fd5b61012e600160a060020a036004351660243560443560643560843560a4351515610510565b34156101bd57600080fd5b610152600160a060020a0360043516610782565b34156101dc57600080fd5b61012e600160a060020a0360043516610845565b34156101fb57600080fd5b61012e610b52565b341561020e57600080fd5b610152610c00565b341561022157600080fd5b610152610c06565b341561023457600080fd5b61023c610c16565b604051600160a060020a03909116815260200160405180910390f35b341561026357600080fd5b61023c610c2a565b341561027657600080fd5b61012e600160a060020a036004351660243560443560643560843560a43560c4351515610c39565b34156102a957600080fd5b6100fb600160a060020a0360043516602435610e91565b34156102cb57600080fd5b6102df600160a060020a0360043516610fee565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015290151560c083015260e0909101905180910390f35b341561032857600080fd5b6100fb60048035600160a060020a031690602480359160443591820191013561102f565b341561035757600080fd5b61023c611147565b600554600160a060020a0391821691161490565b60035433600160a060020a03908116610100909204161461039357600080fd5b600160a060020a03811615156103a857600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60006104156114ed565b600160a060020a038416600090815260066020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015290508051151561049457600091506104a1565b61049e8184611156565b91505b5092915050565b600354600090819033600160a060020a0390811661010090920416146104cd57600080fd5b5060005b82811015610506576104fd8484838181106104e857fe5b90506020020135600160a060020a03166111ff565b506001016104d1565b5060019392505050565b6003546001546000916101009004600160a060020a0390811691161461053557600080fd5b60035460ff16151561054657600080fd5b600160a060020a038716151561055b57600080fd5b30600160a060020a031687600160a060020a03161415151561057c57600080fd5b506002546000811161058d57600080fd5b600160a060020a038716600090815260066020526040902054156105b057600080fd5b8486111580156105c05750838511155b15156105cb57600080fd5b6000831180156105ea57506105e6848763ffffffff61148116565b8311155b15156105f557600080fd5b600554600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064e57600080fd5b6102c65a03f1151561065f57600080fd5b505050604051805160075490915061067d908363ffffffff61149616565b111561068857600080fd5b60e0604051908101604090815282825260208083018990528183018890526060830187905260808301869052600060a0840181905285151560c0850152600160a060020a038b168152600690915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff1916911515919091179055506007546107359082611496565b600755600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458360405190815260200160405180910390a350505050505050565b600061078c6114ed565b600160a060020a0383166000908152600660205260408082209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015291508151151561080a576000925061083e565b6108148242611156565b9050801515610826576000925061083e565b61083b8260a00151829063ffffffff61148116565b92505b5050919050565b61084d6114ed565b6003546000908190819033600160a060020a03908116610100909204161461087457600080fd5b600160a060020a038516600090815260066020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082019081529094505115156108f157600080fd5b6108fb8442611156565b92506109128460a00151849063ffffffff61148116565b91506000821115610a1057610932828560a001519063ffffffff61149616565b60a085015260075461094a908363ffffffff61148116565b600755600554600160a060020a031663a9059cbb868460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109ac57600080fd5b6102c65a03f115156109bd57600080fd5b5050506040518051905015156109d257600080fd5b84600160a060020a03167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888360405190815260200160405180910390a25b610a268460a0015185519063ffffffff61148116565b600160a060020a0386166000908152600660208190526040822082815560018101839055600281018390556003810183905560048101839055600581019290925501805460ff19169055600754909150610a86908263ffffffff61148116565b600755600554600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b84600160a060020a03167f740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f8260405190815260200160405180910390a25050505050565b60045460009033600160a060020a03908116911614610b7057600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff19909216909255918290048116929190910416817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b60075481565b6000610c11336111ff565b905090565b6003546101009004600160a060020a031681565b600554600160a060020a031681565b60035433600160a060020a039081166101009092041614610c5957600080fd5b600160a060020a0387161515610c6e57600080fd5b30600160a060020a031687600160a060020a031614151515610c8f57600080fd5b60008611610c9c57600080fd5b600160a060020a03871660009081526006602052604090205415610cbf57600080fd5b838511158015610ccf5750828411155b1515610cda57600080fd5b600082118015610cf95750610cf5838663ffffffff61148116565b8211155b1515610d0457600080fd5b600554600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d5d57600080fd5b6102c65a03f11515610d6e57600080fd5b5050506040518051600754909150610d8c908863ffffffff61149616565b1115610d9757600080fd5b60e0604051908101604090815287825260208083018890528183018790526060830186905260808301859052600060a0840181905284151560c0850152600160a060020a038b168152600690915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff191691151591909117905550600754610e449087611496565b600755600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458860405190815260200160405180910390a350505050505050565b600354600090819033600160a060020a039081166101009092041614610eb657600080fd5b600554600160a060020a0385811691161415610f6357600754600554610f549190600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f2d57600080fd5b6102c65a03f11515610f3e57600080fd5b505050604051805191905063ffffffff61148116565b905080831115610f6357600080fd5b600354600160a060020a038086169163a9059cbb91610100909104168560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610fcc57600080fd5b6102c65a03f11515610fdd57600080fd5b505050604051805195945050505050565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015495909601549395929491939092919060ff1687565b600061103a3361035f565b15156110485750600061113f565b60606040519081016040908152600160a060020a03338116835287166020830152810185905260008151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151600290910155506003805460ff19166001179055600160a060020a0330168383604051808383808284378201915050925050506000604051808303818561646e5a03f4915050151561113157506003805460ff19169055600061113f565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b6000806000846040015184101561117057600092506111f7565b8460600151841061118457845192506111f7565b6111ad85608001516111a18760200151879063ffffffff61148116565b9063ffffffff6114af16565b91506111c8856020015186606001519063ffffffff61148116565b90506111f4816111a16111e68860800151869063ffffffff6114c616565b88519063ffffffff6114c616565b92505b505092915050565b600160a060020a0381166000908152600660205260408120805482908190151561126c5784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271160405190815260200160405180910390a26127119350611479565b6112c88360e0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015242611156565b915081151561131a5784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271260405190815260200160405180910390a26127129350611479565b600583015461133090839063ffffffff61148116565b90508015156113825784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271360405190815260200160405180910390a26127139350611479565b6005830154611397908263ffffffff61149616565b60058401556007546113af908263ffffffff61148116565b600755600554600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561141157600080fd5b6102c65a03f1151561142257600080fd5b50505060405180519050151561143757600080fd5b84600160a060020a03167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888260405190815260200160405180910390a2600193505b505050919050565b60008282111561149057600080fd5b50900390565b6000828201838110156114a857600080fd5b9392505050565b60008082848115156114bd57fe5b04949350505050565b60008282028315806114e257508284828115156114df57fe5b04145b15156114a857600080fd5b60e06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600a165627a7a7230582023e279ba6dd17c7f0a8770f361cf7543be16a96d1d1db31ee899c3caf7ddfa8d0029a165627a7a72305820f0b0180cdeeba8e04242bf01de41a0a5ec21d89f2549775ddf4e6ca8672e806e0029000000000000000000000000a76e676c9cdc7aa2ab12b3ec4dd4c2be9a6774aa00000000000000000000000034df02e145f0a6b5df675e9dfab54ae745e6c4ff000000000000000000000000254158138007803eebc95d082c02d0db4381ebac0000000000000000000000006b83c6a03d99ffadf2416767d64cc959f1b2e2f5000000000000000000000000b0f37b1878fd6a3006467d9cacc8cdef082e11f8000000000000000000000000000000000000000000000000000000005a846b10

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

-----Decoded View---------------
Found 6 constructor arguments :
Arg [0] : 000000000000000000000000a76e676c9cdc7aa2ab12b3ec4dd4c2be9a6774aa
Arg [1] : 00000000000000000000000034df02e145f0a6b5df675e9dfab54ae745e6c4ff
Arg [2] : 000000000000000000000000254158138007803eebc95d082c02d0db4381ebac
Arg [3] : 0000000000000000000000006b83c6a03d99ffadf2416767d64cc959f1b2e2f5
Arg [4] : 000000000000000000000000b0f37b1878fd6a3006467d9cacc8cdef082e11f8
Arg [5] : 000000000000000000000000000000000000000000000000000000005a846b10


   Swarm Source:
bzzr://f0b0180cdeeba8e04242bf01de41a0a5ec21d89f2549775ddf4e6ca8672e806e

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.