Contract Overview | BloomToken
Balance: 0 Ether
Ether Value: $0
Transactions: 35257 txns
Token Tracker: Bloom (BLT)
 Latest 25 txns From a total of 35257 Transactions

TxHash Age From To Value [TxFee]
0x5a2a3d6fdc3e269575f3a7a129f69e94ea4de4d9abecbc4cbf4124476e0554ef38 mins ago0xc0ba17218126f02ff9f6067c0585487eb857e885  IN   BloomToken0 Ether0.000186000006
0xb21463ef457907240c421e15ea5d8adad75f5224795cd960f495db67182ebd372 hrs 7 mins ago0x1707c0da16a73590941be6ecd400042438a74dbe  IN   BloomToken0 Ether0.004912248
0x0cf1a4a1e352b6e2e608c91f72c416bb688882619c4020c3d49925b040b5e1ec4 hrs 43 mins ago0x6742bb9590d11ae4b8040ad18ed9ab53d5210eb9  IN   BloomToken0 Ether0.000186000006
0xd0dedf603163a8272a0b0e0f73e6b0b0453a0f4fdb434dc75f139eff0e86768a5 hrs 5 mins ago0xa8282a3d5c9699a3e5e8d387c8e2f51fc8110389  IN   BloomToken0 Ether0.000450513
0x4ad720490abec0dd3820ff0689e7391e777c62f743973133753d34f42e4266ec5 hrs 11 mins agoBittrex_1  IN   BloomToken0 Ether0.00472925
0x20f03c0dde1f2aab9c1b59cba04799dbb1975e8f00caf93d2e777675070a05207 hrs 12 mins agoBittrex_1  IN   BloomToken0 Ether0.0053426
0x298e55455889b49f1da3f1f0fa852c389bec268f30472109febd7d99e21889cf7 hrs 46 mins ago0xcbb337137560b7a2c218156ed5f69abf36cda550  IN   BloomToken0 Ether0.0003
0x3718d100421b90fd044164ad53fc543cbc316fe0a023113c04c1044ce6eb14077 hrs 57 mins ago0xcbb337137560b7a2c218156ed5f69abf36cda550  IN   BloomToken0 Ether0.000082542
0x27eee78383ce62b70d20e5e84fbc92139616bda8664c84aca815b0d5e93e391110 hrs 38 mins agoBittrex_1  IN   BloomToken0 Ether0.0053394
0xe98c3a8a2a7cfe4e00fa8acdcdeb6f24ffe306f3366fc46c6630253dbbddb63e11 hrs 37 mins ago0xba682bc56660cb1bfe47b1d2f665e2544dfd1538  IN   BloomToken0 Ether0.00010666
0xe9d64efa695ccdc66f6e5d0e5e35af61d38b974f2d09ffabcdbf02435bae642112 hrs 30 mins ago0x9abdefbabe7f459186b5cd58d17371b2e02ac8f8  IN   BloomToken0 Ether0.0001289825
0x53152371af4561532aeef6ba63a26780fba1a650140e72bbf35de539ec0d516e16 hrs 19 mins ago0x9e9aede219c3074c9ad1e85bfa52fcf5f3cfd66e  IN   BloomToken0 Ether0.001403388
0x1857ce769e37a4d10e3c6eca5ac3746035fdaa8f134fa2d622795cecfe2e190316 hrs 21 mins agoBittrex_1  IN   BloomToken0 Ether0.00473245
0x80efd99ba7e58d2c11e8b33af03ec936a6442cfc9d29844f5838f250d985ca7e18 hrs 18 mins ago0x6528b304fc14a3dfd8704dc818a5a7794f19f56f  IN   BloomToken0 Ether0.004383556
0xc65f8c52a72e2d86a10b43d0a79af6ec107f1b6579247097062c0125688e3fb819 hrs 4 mins agoBittrex_1  IN   BloomToken0 Ether0.00472925
0x7e721982a905d3e386fd143d7e2cf3c6b407862ca3ebe6e8e3a4eb260be3b7c020 hrs 23 mins ago0x2443ce1cbcd972dd44f8de76362b87a83b358d06  IN   BloomToken0 Ether0.000213704
0x06e0d28a1ac8ad21366af7b25d71dbdfaa77d42f27d639d3b2e68fbc1336c43f20 hrs 43 mins ago0x2443ce1cbcd972dd44f8de76362b87a83b358d06  IN   BloomToken0 Ether0.00016472
0xc628b665aac379ce7a382bf4d7c4c740c8198146245f0bcaf4701fc3a264970b20 hrs 45 mins ago0x2443ce1cbcd972dd44f8de76362b87a83b358d06  IN   BloomToken0 Ether0.00008235
0x393921458062bb5e8225fd5bf173db68ad91f9c58ce029fc65eb1c5bd572fb0b20 hrs 49 mins ago0x2443ce1cbcd972dd44f8de76362b87a83b358d06  IN   BloomToken0 Ether0.00008235
0xd2d36e2b578eef6cd3e7591ca60e50166ebfd9ee103dbe6635da5ab6556a7d7621 hrs 20 mins ago0x534504ecb69f58ee34e5fe9c5bd0e3fdc7f9c012  IN   BloomToken0 Ether0.000199972
0x0863d55460e3364085b07c92429eb84239d53d587e3835741b23f0d6e0e2aaaa21 hrs 36 mins ago0x80658e3657882cfa73fff0eb20c92aa5e948230c  IN   BloomToken0 Ether0.000200484
0xfc0ca3bea2aec9bd2f4c2f399d3000c31e42841d1def0a02e3dba5f7468520b621 hrs 40 mins agoBibox  IN   BloomToken0 Ether0.00427152
0x173f175224173bc322c20c1944348c62bcff2eb6de4ccf09b9f7f2778c45a6f321 hrs 43 mins ago0x236c565d153adf12d115cb05b6b1e9e5a1e5a414  IN   BloomToken0 Ether0.003458349
0x704c75a5c901a5db23805d772beb494b9315a14b708b71092e80dafe5dd96f3e21 hrs 45 mins agoBibox  IN   BloomToken0 Ether0.00378596
0xcfa109d4c8124bddda4027af243e3bfe21ccd81882f91e5250f4322c5480232a21 hrs 56 mins ago0xaf28878b4c3440d97643fa2e8bf4bc1e1fa0fb4a  IN   BloomToken0 Ether0.003257865
[ 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
0xdaabd6f3a53022a5ba5f9d74e297ade863e00d9d3645564cbf0caeb9be56363e5481940179 days 15 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb43.40579003 Ether
0x5728bb138d4092d5c4771cca00268ad77c2de6584e4ac71faa37b01dfc453a725289058211 days 23 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.2792 Ether
0xae345de4086a7c0e471a0c9747289d2ee73ddf322470ecfda38be62f2b96e23f5117029241 days 5 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x98cc5e509c1e89e8cc76c78f55535345da322935b358ae38afca5cdf9df061865116896241 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xd43c0f0eabcd08ff386ed29b21b6d1661801635f74c9d4d5b59881a5517648095116835241 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x4fce77982a2549f93757a7085f0beb7525cc2b86e03944214ad91abb179747395116810241 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xee10159e9835bccadb0610080d431895fdc322dca9d7d743458a9639d0f7a55c5112433242 days 12 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xe5c7208a8534eb27b31131f9a460e84b07a577a0f799328f2bc8aeaf8728a3e14997645261 days 8 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.0003 Ether
0x122646806d2fea41a97db7fb6403979770b30013705c2589f4de8d14c72414db4996471261 days 12 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.001 Ether
0xf03a67648c32953c42c349ca63a411544186d0896710c9cbe2440e69560e39474930853272 days 15 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.09276 Ether
0xc367cbd7dea57b3f969eadcdcf5fd28d7b0d03a3ca13be51cbe780e17b7bbcff4837235289 days 17 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.5 Ether
0x61e2763117824c33d9e903b5c1a6279c29b3b5aca98b30a5b5a0faff397ceef44836060289 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.05 Ether
0x380252e0862ba2097e6212aa03acd8eae7b17aad56969df34e6472b7101943134832872290 days 11 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.96766138 Ether
0x9f594928c6ed5c11e71e7e6c3745560ff662f5c6e9f73b6c7a3c2c60866314604832409290 days 13 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.6 Ether
0xd871598f9e918f52e01aacf4ff8e3d090c0a05d60166ad1d5ebd9a17f67c767d4810127294 days 8 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac2 Ether
0x9adea1f235358d2d30741905fc8f43d13b1927d0a63c3667e8f163148b50c0a74805307295 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x2b2fefc722dd87bfc329ad36b279255795efc9426bad4d35b9eb589229621c2a4805242295 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x3f7ac8deca293b0ad618a39308968eb61d07a1bd0af605d1a51e863abfeddd254805215295 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x5fbd5a07ef5e4b21211350049de20708c2aca5da032fe91c98e2e2f06e0f99f64803081295 days 13 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x33e6b6a6ef3dd99bb3bd48b741f7aa3dbc61122a5fa4b5729298400b9f60af8c4783966298 days 17 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.019 Ether
0x256d30d943cd97c04125972e9b2caabe80ac684ad6c3c39be8ca0fb37b5ad7634746095305 days 9 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.39 Ether
0xf21666c10fff1bedc27540803e5bed8e2e9e77b8b30df70061007c09786e46694702795312 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.48318051 Ether
0x67cba4d653a56b589094cedcd0c2ab978c90e093773070fe1093583a5eeea3644666912319 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.2924213 Ether
0x5deb87b8c7e8f577c6c663a241ad185122bfd763a10dd114b32410ef502d9dd14666900319 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.29 Ether
0xa0c7471f4bd3e4dc19123fb55665db16cf2672627558454f997bce9d51005d504666898319 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.001 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BLT
Compiler Text: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.13;

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

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

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

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

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

contract TokenController {
    /// @notice Called when `_owner` sends ether to the MiniMe Token contract
    /// @param _owner The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
    function proxyPayment(address _owner) payable returns(bool);

    /// @notice Notifies the controller about a token transfer allowing the
    ///  controller to react if desired
    /// @param _from The origin of the transfer
    /// @param _to The destination of the transfer
    /// @param _amount The amount of the transfer
    /// @return False if the controller does not authorize the transfer
    function onTransfer(address _from, address _to, uint _amount) returns(bool);

    /// @notice Notifies the controller about an approval allowing the
    ///  controller to react if desired
    /// @param _owner The address that calls `approve()`
    /// @param _spender The spender in the `approve()` call
    /// @param _amount The amount in the `approve()` call
    /// @return False if the controller does not authorize the approval
    function onApprove(address _owner, address _spender, uint _amount)
        returns(bool);
}

contract Controlled {
    /// @notice The address of the controller is the only address that can call
    ///  a function with this modifier
    modifier onlyController { require(msg.sender == controller); _; }

    address public controller;

    function Controlled() { controller = msg.sender;}

    /// @notice Changes the controller of the contract
    /// @param _newController The new controller of the contract
    function changeController(address _newController) onlyController {
        controller = _newController;
    }
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 _amount, address _token, bytes _data);
}

contract MiniMeToken is Controlled {

    string public name;                //The Token's name: e.g. DigixDAO Tokens
    uint8 public decimals;             //Number of decimals of the smallest unit
    string public symbol;              //An identifier: e.g. REP
    string public version = 'MMT_0.1'; //An arbitrary versioning scheme


    /// @dev `Checkpoint` is the structure that attaches a block number to a
    ///  given value, the block number attached is the one that last changed the
    ///  value
    struct  Checkpoint {

        // `fromBlock` is the block number that the value was generated from
        uint128 fromBlock;

        // `value` is the amount of tokens at a specific block number
        uint128 value;
    }

    // `parentToken` is the Token address that was cloned to produce this token;
    //  it will be 0x0 for a token that was not cloned
    MiniMeToken public parentToken;

    // `parentSnapShotBlock` is the block number from the Parent Token that was
    //  used to determine the initial distribution of the Clone Token
    uint public parentSnapShotBlock;

    // `creationBlock` is the block number that the Clone Token was created
    uint public creationBlock;

    // `balances` is the map that tracks the balance of each address, in this
    //  contract when the balance changes the block number that the change
    //  occurred is also included in the map
    mapping (address => Checkpoint[]) balances;

    // `allowed` tracks any extra transfer rights as in all ERC20 tokens
    mapping (address => mapping (address => uint256)) allowed;

    // Tracks the history of the `totalSupply` of the token
    Checkpoint[] totalSupplyHistory;

    // Flag that determines if the token is transferable or not.
    bool public transfersEnabled;

    // The factory used to create new clone tokens
    MiniMeTokenFactory public tokenFactory;

////////////////
// Constructor
////////////////

    /// @notice Constructor to create a MiniMeToken
    /// @param _tokenFactory The address of the MiniMeTokenFactory contract that
    ///  will create the Clone token contracts, the token factory needs to be
    ///  deployed first
    /// @param _parentToken Address of the parent token, set to 0x0 if it is a
    ///  new token
    /// @param _parentSnapShotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token, set to 0 if it
    ///  is a new token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    function MiniMeToken(
        address _tokenFactory,
        address _parentToken,
        uint _parentSnapShotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) {
        tokenFactory = MiniMeTokenFactory(_tokenFactory);
        name = _tokenName;                                 // Set the name
        decimals = _decimalUnits;                          // Set the decimals
        symbol = _tokenSymbol;                             // Set the symbol
        parentToken = MiniMeToken(_parentToken);
        parentSnapShotBlock = _parentSnapShotBlock;
        transfersEnabled = _transfersEnabled;
        creationBlock = block.number;
    }


///////////////////
// ERC20 Methods
///////////////////

    /// @notice Send `_amount` tokens to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _amount) returns (bool success) {
        require(transfersEnabled);
        return doTransfer(msg.sender, _to, _amount);
    }

    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
    ///  is approved by `_from`
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(address _from, address _to, uint256 _amount
    ) returns (bool success) {

        // The controller of this contract can move tokens around at will,
        //  this is important to recognize! Confirm that you trust the
        //  controller of this contract, which in most situations should be
        //  another open source smart contract or 0x0
        if (msg.sender != controller) {
            require(transfersEnabled);

            // The standard ERC 20 transferFrom functionality
            if (allowed[_from][msg.sender] < _amount) return false;
            allowed[_from][msg.sender] -= _amount;
        }
        return doTransfer(_from, _to, _amount);
    }

    /// @dev This is the actual transfer function in the token contract, it can
    ///  only be called by other functions in this contract.
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function doTransfer(address _from, address _to, uint _amount
    ) internal returns(bool) {

           if (_amount == 0) {
               return true;
           }

           require(parentSnapShotBlock < block.number);

           // Do not allow transfer to 0x0 or the token contract itself
           require((_to != 0) && (_to != address(this)));

           // If the amount being transfered is more than the balance of the
           //  account the transfer returns false
           var previousBalanceFrom = balanceOfAt(_from, block.number);
           if (previousBalanceFrom < _amount) {
               return false;
           }

           // Alerts the token controller of the transfer
           if (isContract(controller)) {
               require(TokenController(controller).onTransfer(_from, _to, _amount));
           }

           // First update the balance array with the new value for the address
           //  sending the tokens
           updateValueAtNow(balances[_from], previousBalanceFrom - _amount);

           // Then update the balance array with the new value for the address
           //  receiving the tokens
           var previousBalanceTo = balanceOfAt(_to, block.number);
           require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
           updateValueAtNow(balances[_to], previousBalanceTo + _amount);

           // An event to make the transfer easy to find on the blockchain
           Transfer(_from, _to, _amount);

           return true;
    }

    /// @param _owner The address that's balance is being requested
    /// @return The balance of `_owner` at the current block
    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balanceOfAt(_owner, block.number);
    }

    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address _spender, uint256 _amount) returns (bool success) {
        require(transfersEnabled);

        // To change the approve amount you first have to reduce the addresses`
        //  allowance to zero by calling `approve(_spender,0)` if it is not
        //  already 0 to mitigate the race condition described here:
        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((_amount == 0) || (allowed[msg.sender][_spender] == 0));

        // Alerts the token controller of the approve function call
        if (isContract(controller)) {
            require(TokenController(controller).onApprove(msg.sender, _spender, _amount));
        }

        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }

    /// @dev This function makes it easy to read the `allowed[]` map
    /// @param _owner The address of the account that owns the token
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens of _owner that _spender is allowed
    ///  to spend
    function allowance(address _owner, address _spender
    ) constant returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `_spender`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param _spender The address of the contract able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(address _spender, uint256 _amount, bytes _extraData
    ) returns (bool success) {
        require(approve(_spender, _amount));

        ApproveAndCallFallBack(_spender).receiveApproval(
            msg.sender,
            _amount,
            this,
            _extraData
        );

        return true;
    }

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply() constant returns (uint) {
        return totalSupplyAt(block.number);
    }


////////////////
// Query balance and totalSupply in History
////////////////

    /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
    /// @param _owner The address from which the balance will be retrieved
    /// @param _blockNumber The block number when the balance is queried
    /// @return The balance at `_blockNumber`
    function balanceOfAt(address _owner, uint _blockNumber) constant
        returns (uint) {

        // These next few lines are used when the balance of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.balanceOfAt` be queried at the
        //  genesis block for that token as this contains initial balance of
        //  this token
        if ((balances[_owner].length == 0)
            || (balances[_owner][0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
            } else {
                // Has no parent
                return 0;
            }

        // This will return the expected balance during normal situations
        } else {
            return getValueAt(balances[_owner], _blockNumber);
        }
    }

    /// @notice Total amount of tokens at a specific `_blockNumber`.
    /// @param _blockNumber The block number when the totalSupply is queried
    /// @return The total amount of tokens at `_blockNumber`
    function totalSupplyAt(uint _blockNumber) constant returns(uint) {

        // These next few lines are used when the totalSupply of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.totalSupplyAt` be queried at the
        //  genesis block for this token as that contains totalSupply of this
        //  token at this block number.
        if ((totalSupplyHistory.length == 0)
            || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
            } else {
                return 0;
            }

        // This will return the expected totalSupply during normal situations
        } else {
            return getValueAt(totalSupplyHistory, _blockNumber);
        }
    }

////////////////
// Clone Token Method
////////////////

    /// @notice Creates a new clone token with the initial distribution being
    ///  this token at `_snapshotBlock`
    /// @param _cloneTokenName Name of the clone token
    /// @param _cloneDecimalUnits Number of decimals of the smallest unit
    /// @param _cloneTokenSymbol Symbol of the clone token
    /// @param _snapshotBlock Block when the distribution of the parent token is
    ///  copied to set the initial distribution of the new clone token;
    ///  if the block is zero than the actual block, the current block is used
    /// @param _transfersEnabled True if transfers are allowed in the clone
    /// @return The address of the new MiniMeToken Contract
    function createCloneToken(
        string _cloneTokenName,
        uint8 _cloneDecimalUnits,
        string _cloneTokenSymbol,
        uint _snapshotBlock,
        bool _transfersEnabled
        ) returns(address) {
        if (_snapshotBlock == 0) _snapshotBlock = block.number;
        MiniMeToken cloneToken = tokenFactory.createCloneToken(
            this,
            _snapshotBlock,
            _cloneTokenName,
            _cloneDecimalUnits,
            _cloneTokenSymbol,
            _transfersEnabled
            );

        cloneToken.changeController(msg.sender);

        // An event to make the token easy to find on the blockchain
        NewCloneToken(address(cloneToken), _snapshotBlock);
        return address(cloneToken);
    }

////////////////
// Generate and destroy tokens
////////////////

    /// @notice Generates `_amount` tokens that are assigned to `_owner`
    /// @param _owner The address that will be assigned the new tokens
    /// @param _amount The quantity of tokens generated
    /// @return True if the tokens are generated correctly
    function generateTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
        uint previousBalanceTo = balanceOf(_owner);
        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
        updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
        updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
        Transfer(0, _owner, _amount);
        return true;
    }


    /// @notice Burns `_amount` tokens from `_owner`
    /// @param _owner The address that will lose the tokens
    /// @param _amount The quantity of tokens to burn
    /// @return True if the tokens are burned correctly
    function destroyTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply >= _amount);
        uint previousBalanceFrom = balanceOf(_owner);
        require(previousBalanceFrom >= _amount);
        updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
        updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);
        Transfer(_owner, 0, _amount);
        return true;
    }

////////////////
// Enable tokens transfers
////////////////


    /// @notice Enables token holders to transfer their tokens freely if true
    /// @param _transfersEnabled True if transfers are allowed in the clone
    function enableTransfers(bool _transfersEnabled) onlyController {
        transfersEnabled = _transfersEnabled;
    }

////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////

    /// @dev `getValueAt` retrieves the number of tokens at a given block number
    /// @param checkpoints The history of values being queried
    /// @param _block The block number to retrieve the value at
    /// @return The number of tokens being queried
    function getValueAt(Checkpoint[] storage checkpoints, uint _block
    ) constant internal returns (uint) {
        if (checkpoints.length == 0) return 0;

        // Shortcut for the actual value
        if (_block >= checkpoints[checkpoints.length-1].fromBlock)
            return checkpoints[checkpoints.length-1].value;
        if (_block < checkpoints[0].fromBlock) return 0;

        // Binary search of the value in the array
        uint min = 0;
        uint max = checkpoints.length-1;
        while (max > min) {
            uint mid = (max + min + 1)/ 2;
            if (checkpoints[mid].fromBlock<=_block) {
                min = mid;
            } else {
                max = mid-1;
            }
        }
        return checkpoints[min].value;
    }

    /// @dev `updateValueAtNow` used to update the `balances` map and the
    ///  `totalSupplyHistory`
    /// @param checkpoints The history of data being updated
    /// @param _value The new number of tokens
    function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value
    ) internal  {
        if ((checkpoints.length == 0)
        || (checkpoints[checkpoints.length -1].fromBlock < block.number)) {
               Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ];
               newCheckPoint.fromBlock =  uint128(block.number);
               newCheckPoint.value = uint128(_value);
           } else {
               Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
               oldCheckPoint.value = uint128(_value);
           }
    }

    /// @dev Internal function to determine if an address is a contract
    /// @param _addr The address being queried
    /// @return True if `_addr` is a contract
    function isContract(address _addr) constant internal returns(bool) {
        uint size;
        if (_addr == 0) return false;
        assembly {
            size := extcodesize(_addr)
        }
        return size>0;
    }

    /// @dev Helper function to return a min betwen the two uints
    function min(uint a, uint b) internal returns (uint) {
        return a < b ? a : b;
    }

    /// @notice The fallback function: If the contract's controller has not been
    ///  set to 0, then the `proxyPayment` method is called which relays the
    ///  ether and creates tokens as described in the token controller contract
    function ()  payable {
        require(isContract(controller));
        require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender));
    }

//////////
// Safety Methods
//////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) onlyController {
        if (_token == 0x0) {
            controller.transfer(this.balance);
            return;
        }

        MiniMeToken token = MiniMeToken(_token);
        uint balance = token.balanceOf(this);
        token.transfer(controller, balance);
        ClaimedTokens(_token, controller, balance);
    }

////////////////
// Events
////////////////
    event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
    event Transfer(address indexed _from, address indexed _to, uint256 _amount);
    event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock);
    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _amount
        );

}

contract MiniMeTokenFactory {

    /// @notice Update the DApp by creating a new token with new functionalities
    ///  the msg.sender becomes the controller of this clone token
    /// @param _parentToken Address of the token being cloned
    /// @param _snapshotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    /// @return The address of the new token contract
    function createCloneToken(
        address _parentToken,
        uint _snapshotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) returns (MiniMeToken) {
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
            );

        newToken.changeController(msg.sender);
        return newToken;
    }
}

contract MiniMeVestedToken is MiniMeToken {
  using SafeMath for uint256;
  using Math for uint64;

  struct TokenGrant {
    address granter;     // 20 bytes
    uint256 value;       // 32 bytes
    uint64 cliff;
    uint64 vesting;
    uint64 start;        // 3 * 8 = 24 bytes
    bool revokable;
    bool burnsOnRevoke;  // 2 * 1 = 2 bits? or 2 bytes?
  } // total 78 bytes = 3 sstore per operation (32 per sstore)

  event NewTokenGrant(address indexed from, address indexed to, uint256 value, uint256 grantId);

  mapping (address => TokenGrant[]) public grants;

  mapping (address => bool) public canCreateGrants;
  address public vestingWhitelister;

  modifier canTransfer(address _sender, uint _value) {
    require(spendableBalanceOf(_sender) >= _value);
    _;
  }

  modifier onlyVestingWhitelister {
    require(msg.sender == vestingWhitelister);
    _;
  }

  function MiniMeVestedToken (
      address _tokenFactory,
      address _parentToken,
      uint _parentSnapShotBlock,
      string _tokenName,
      uint8 _decimalUnits,
      string _tokenSymbol,
      bool _transfersEnabled
  ) public
    MiniMeToken(_tokenFactory, _parentToken, _parentSnapShotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled) {
    vestingWhitelister = msg.sender;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  // @dev Add canTransfer modifier before allowing transfer and transferFrom to go through
  function transfer(address _to, uint _value)
           public
           canTransfer(msg.sender, _value)
           returns (bool success) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint _value)
           public
           canTransfer(_from, _value)
           returns (bool success) {
    return super.transferFrom(_from, _to, _value);
  }

  function spendableBalanceOf(address _holder) public constant returns (uint) {
    return transferableTokens(_holder, uint64(now)); // solhint-disable not-rely-on-time
  }

  /**
   * @dev Grant tokens to a specified address
   * @param _to address The address which the tokens will be granted to.
   * @param _value uint256 The amount of tokens to be granted.
   * @param _start uint64 Time of the beginning of the grant.
   * @param _cliff uint64 Time of the cliff period.
   * @param _vesting uint64 The vesting period.
   */
  function grantVestedTokens(
    address _to,
    uint256 _value,
    uint64 _start,
    uint64 _cliff,
    uint64 _vesting,
    bool _revokable,
    bool _burnsOnRevoke
  ) public {
    // Check start, cliff and vesting are properly order to ensure correct functionality of the formula.
    require(_cliff >= _start);
    require(_vesting >= _cliff);

    require(canCreateGrants[msg.sender]);
    require(tokenGrantsCount(_to) < 20);   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    TokenGrant memory grant = TokenGrant(
      _revokable ? msg.sender : 0,
      _value,
      _cliff,
      _vesting,
      _start,
      _revokable,
      _burnsOnRevoke
    );

    uint256 count = grants[_to].push(grant);

    assert(transfer(_to, _value));

    NewTokenGrant(msg.sender, _to, _value, count - 1);
  }

  function setCanCreateGrants(address _addr, bool _allowed)
           public onlyVestingWhitelister {
    doSetCanCreateGrants(_addr, _allowed);
  }

  function changeVestingWhitelister(address _newWhitelister) public onlyVestingWhitelister {
    require(_newWhitelister != 0);
    doSetCanCreateGrants(vestingWhitelister, false);
    vestingWhitelister = _newWhitelister;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _receiver Recipient of revoked tokens.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, address _receiver, uint256 _grantId) public onlyVestingWhitelister {
    require(_receiver != 0);

    TokenGrant storage grant = grants[_holder][_grantId];

    require(grant.revokable);
    require(grant.granter == msg.sender); // Only granter can revoke it

    address receiver = grant.burnsOnRevoke ? 0xdead : _receiver;

    uint256 nonVested = nonVestedTokens(grant, uint64(now));

    // remove grant from array
    delete grants[_holder][_grantId];
    grants[_holder][_grantId] = grants[_holder][grants[_holder].length.sub(1)];
    grants[_holder].length -= 1;

    doTransfer(_holder, receiver, nonVested);
  }

  /**
   * @dev Check the amount of grants that an address has.
   * @param _holder The holder of the grants.
   * @return A uint256 representing the total amount of grants.
   */
  function tokenGrantsCount(address _holder) public constant returns (uint index) {
    return grants[_holder].length;
  }

  /**
   * @dev Get all information about a specific grant.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   * @return Returns all the values that represent a TokenGrant(address, value, start, cliff,
   * revokability, burnsOnRevoke, and vesting) plus the vested value at the current time.
   */
  function tokenGrant(address _holder, uint256 _grantId) public constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant storage grant = grants[_holder][_grantId];

    granter = grant.granter;
    value = grant.value;
    start = grant.start;
    cliff = grant.cliff;
    vesting = grant.vesting;
    revokable = grant.revokable;
    burnsOnRevoke = grant.burnsOnRevoke;

    vested = vestedTokens(grant, uint64(now));
  }

  // @dev The date in which all tokens are transferable for the holder
  // Useful for displaying purposes (not used in any logic calculations)
  function lastTokenIsTransferableDate(address holder) public constant returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = tokenGrantsCount(holder);
    for (uint256 i = 0; i < grantIndex; i++) {
      date = grants[holder][i].vesting.max64(date);
    }
    return date;
  }

  // @dev How many tokens can a holder transfer at a point in time
  function transferableTokens(address holder, uint64 time) public constant returns (uint256) {
    uint256 grantIndex = tokenGrantsCount(holder);

    if (grantIndex == 0) return balanceOf(holder); // shortcut for holder without grants

    // Iterate through all the grants the holder has, and add all non-vested tokens
    uint256 nonVested = 0;
    for (uint256 i = 0; i < grantIndex; i++) {
      nonVested = nonVested.add(nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    return balanceOf(holder).sub(nonVested);
  }

  function doSetCanCreateGrants(address _addr, bool _allowed)
           internal {
    canCreateGrants[_addr] = _allowed;
  }

  /**
   * @dev Calculate amount of vested tokens at a specific time
   * @param tokens uint256 The amount of tokens granted
   * @param time uint64 The time to be checked
   * @param start uint64 The time representing the beginning of the grant
   * @param cliff uint64  The cliff period, the period before nothing can be paid out
   * @param vesting uint64 The vesting period
   * @return An uint256 representing the amount of vested tokens of a specific grant
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Cliff    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) internal constant returns (uint256)
    {

    // Shortcuts for before cliff and after vesting cases.
    if (time < cliff) return 0;
    if (time >= vesting) return tokens;

    // Interpolate all vested tokens.
    // As before cliff the shortcut returns 0, we can use just this function to
    // calculate it.

    // vested = tokens * (time - start) / (vesting - start)
    uint256 vested = tokens.mul(
                             time.sub(start)
                           ).div(vesting.sub(start));

    return vested;
  }

  /**
   * @dev Calculate the amount of non vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time uint64 The time to be checked
   * @return An uint256 representing the amount of non vested tokens of a specific grant on the
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant storage grant, uint64 time) internal constant returns (uint256) {
    // Of all the tokens of the grant, how many of them are not vested?
    // grantValue - vestedTokens
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @dev Get the amount of vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time The time to be checked
   * @return An uint256 representing the amount of vested tokens of a specific grant at a specific time.
   */
  function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return calculateVestedTokens(
      grant.value,
      uint256(time),
      uint256(grant.start),
      uint256(grant.cliff),
      uint256(grant.vesting)
    );
  }
}

contract BLT is MiniMeVestedToken {
  function BLT(address _tokenFactory) public MiniMeVestedToken(
    _tokenFactory,
    0x0,           // no parent token
    0,             // no snapshot block number from parent
    "Bloom Token", // Token name
    18,            // Decimals
    "BLT",         // Symbol
    true           // Enable transfers
  ) {} // solhint-disable-line no-empty-blocks
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"spendableBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canCreateGrants","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_allowed","type":"bool"}],"name":"setCanCreateGrants","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"grants","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"start","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"tokenGrant","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"vested","type":"uint256"},{"name":"start","type":"uint64"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"lastTokenIsTransferableDate","outputs":[{"name":"date","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_start","type":"uint64"},{"name":"_cliff","type":"uint64"},{"name":"_vesting","type":"uint64"},{"name":"_revokable","type":"bool"},{"name":"_burnsOnRevoke","type":"bool"}],"name":"grantVestedTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_receiver","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"time","type":"uint64"}],"name":"transferableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vestingWhitelister","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newWhitelister","type":"address"}],"name":"changeVestingWhitelister","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"grantId","type":"uint256"}],"name":"NewTokenGrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405260408051908101604052600781527f4d4d545f302e3100000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000219565b5034156200005a57600080fd5b60405160208062002ed3833981016040528080519150505b806000806040805190810160405280600b81526020017f426c6f6f6d20546f6b656e000000000000000000000000000000000000000000815250601260408051908101604052600381527f424c540000000000000000000000000000000000000000000000000000000000602082015260015b868686868686865b5b60008054600160a060020a03191633600160a060020a03161790555b600b805461010060a860020a031916610100600160a060020a038a160217905560018480516200013f92916020019062000219565b506002805460ff191660ff851617905560038280516200016492916020019062000219565b5060058054600160a060020a031916600160a060020a0388161790556006859055600b805460ff1916821515179055436007555b5050600e8054600160a060020a03191633600160a060020a039081169190911791829055620001e096501693506001925050640100000000620001f081026200234a17049050565b5b505050505050505b50620002c3565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025c57805160ff19168380011785556200028c565b828001600101855582156200028c579182015b828111156200028c5782518255916020019190600101906200026f565b5b506200029b9291506200029f565b5090565b620002c091905b808211156200029b5760008155600101620002a6565b5090565b90565b612c0080620002d36000396000f300606060405236156101b15763ffffffff60e060020a60003504166302a72a4c811461025857806306fdde0314610289578063095ea7b3146103145780630f8f8b831461034a578063176345141461037b57806318160ddd146103a057806318cd55f3146103c55780631f9a391c146103f857806323b872dd1461041e5780632c71e60a1461045a578063313ce567146104d55780633cebb823146104fe5780634ee2cd7e1461051f57806354fd4d5014610553578063600e85b7146105de5780636638c0871461065f5780636c182e991461072357806370a082311461075f57806380a5400114610790578063827f32c0146107bf57806395d89b41146107f55780639754a4d914610880578063981b24d0146108c7578063a9059cbb146108ef578063b0cf0dcb14610925578063bef97c871461094f578063c5bcc4f114610976578063cae9ca511461099b578063d347c20514610a14578063d3ce77fe14610a52578063dd62ed3e14610a88578063df8de3e714610abf578063dfae7dc114610ae0578063e77772fe14610b0f578063f41e60c514610b3e578063f77c479114610b58578063fb13a70714610b87575b5b6000546101c790600160a060020a0316610ba8565b15156101d257600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b151561022e57600080fd5b6125ee5a03f1151561023f57600080fd5b5050505060405180519050151561025557600080fd5b5b005b341561026357600080fd5b610277600160a060020a0360043516610bd5565b60405190815260200160405180910390f35b341561029457600080fd5b61029c610bf4565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031f57600080fd5b610336600160a060020a0360043516602435610c92565b604051901515815260200160405180910390f35b341561035557600080fd5b610277600160a060020a0360043516610dfc565b60405190815260200160405180910390f35b341561038657600080fd5b610277610e10565b60405190815260200160405180910390f35b34156103ab57600080fd5b610277610e16565b60405190815260200160405180910390f35b34156103d057600080fd5b610336600160a060020a0360043516610e27565b604051901515815260200160405180910390f35b341561040357600080fd5b610255600160a060020a03600435166024351515610e3c565b005b341561042957600080fd5b610336600160a060020a0360043581169060243516604435610e67565b604051901515815260200160405180910390f35b341561046557600080fd5b61047c600160a060020a0360043516602435610e98565b604051600160a060020a039097168752602087019590955267ffffffffffffffff93841660408088019190915292841660608701529216608085015290151560a084015290151560c083015260e0909101905180910390f35b34156104e057600080fd5b6104e8610f1e565b60405160ff909116815260200160405180910390f35b341561050957600080fd5b610255600160a060020a0360043516610f27565b005b341561052a57600080fd5b610277600160a060020a0360043516602435610f62565b60405190815260200160405180910390f35b341561055e57600080fd5b61029c6110a8565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105e957600080fd5b610600600160a060020a0360043516602435611146565b604051600160a060020a039098168852602088019690965260408088019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c084015290151560e0830152610100909101905180910390f35b341561066a57600080fd5b61070760046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050843594602001351515935061129392505050565b604051600160a060020a03909116815260200160405180910390f35b341561072e57600080fd5b610742600160a060020a03600435166114c3565b60405167ffffffffffffffff909116815260200160405180910390f35b341561076a57600080fd5b610277600160a060020a036004351661154e565b60405190815260200160405180910390f35b341561079b57600080fd5b610707611562565b604051600160a060020a03909116815260200160405180910390f35b34156107ca57600080fd5b610336600160a060020a0360043516602435611571565b604051901515815260200160405180910390f35b341561080057600080fd5b61029c611644565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561088b57600080fd5b610255600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c43515156116e2565b005b34156108d257600080fd5b6102776004356119a7565b60405190815260200160405180910390f35b34156108fa57600080fd5b610336600160a060020a0360043516602435611a9f565b604051901515815260200160405180910390f35b341561093057600080fd5b610255600160a060020a0360043581169060243516604435611ace565b005b341561095a57600080fd5b610336611de5565b604051901515815260200160405180910390f35b341561098157600080fd5b610277611dee565b60405190815260200160405180910390f35b34156109a657600080fd5b61033660048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611df495505050505050565b604051901515815260200160405180910390f35b3415610a1f57600080fd5b610277600160a060020a036004351667ffffffffffffffff60243516611f12565b60405190815260200160405180910390f35b3415610a5d57600080fd5b610336600160a060020a0360043516602435611fca565b604051901515815260200160405180910390f35b3415610a9357600080fd5b610277600160a060020a0360043581169060243516612097565b60405190815260200160405180910390f35b3415610aca57600080fd5b610255600160a060020a03600435166120c4565b005b3415610aeb57600080fd5b610707612271565b604051600160a060020a03909116815260200160405180910390f35b3415610b1a57600080fd5b610707612280565b604051600160a060020a03909116815260200160405180910390f35b3415610b4957600080fd5b6102556004351515612294565b005b3415610b6357600080fd5b6107076122c2565b604051600160a060020a03909116815260200160405180910390f35b3415610b9257600080fd5b610255600160a060020a03600435166122d1565b005b600080600160a060020a0383161515610bc45760009150610bcf565b823b90506000811191505b50919050565b600160a060020a0381166000908152600c60205260409020545b919050565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b600b5460009060ff161515610ca657600080fd5b811580610cd65750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b1515610ce157600080fd5b600054610cf690600160a060020a0316610ba8565b15610d915760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610d6b57600080fd5b6102c65a03f11515610d7c57600080fd5b505050604051805190501515610d9157600080fd5b5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000610e088242611f12565b90505b919050565b60075481565b6000610e21436119a7565b90505b90565b600d6020526000908152604090205460ff1681565b600e5433600160a060020a03908116911614610e5757600080fd5b610e61828261234a565b5b5b5050565b6000838280610e7583610dfc565b1015610e8057600080fd5b610e8b868686612373565b92505b5b50509392505050565b600c60205281600052604060002081815481101515610eb357fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60025460ff1681565b60005433600160a060020a03908116911614610f4257600080fd5b60008054600160a060020a031916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600860205260408120541580610fc25750600160a060020a038316600090815260086020526040812080548492908110610fa757fe5b906000526020600020900160005b50546001608060020a0316115b1561107857600554600160a060020a03161561106b57600554600654600160a060020a0390911690634ee2cd7e908590610ffd908690612415565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104957600080fd5b6102c65a03f1151561105a57600080fd5b505050604051805190509050610df6565b506000610df6565b610df6565b600160a060020a038316600090815260086020526040902061109a908361242f565b9050610df6565b5b92915050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6000806000806000806000806000600c60008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561118657fe5b906000526020600020906003020160005b50805460018201546002830154600160a060020a039092169b50995067ffffffffffffffff608060020a820481169850808216975068010000000000000000820416955060ff60c060020a82048116955060c860020a90910416925090506112828160e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015242612589565b96505b509295985092959890939650565b6000808315156112a1574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b838110156113455780820151818401525b60200161132c565b50505050905090810190601f1680156113725780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156113a95780820151818401525b602001611390565b50505050905090810190601f1680156113d65780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15156113fa57600080fd5b6102c65a03f1151561140b57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561146457600080fd5b6102c65a03f1151561147557600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a28091505b5095945050505050565b426000806114d084610bd5565b9150600090505b8181101561154657600160a060020a0384166000908152600c60205260409020805461153b9185918490811061150957fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff16906125d9565b92505b6001016114d7565b5b5050919050565b6000610e088243610f62565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a0390811691161461159157600080fd5b611599610e16565b9150838201829010156115ab57600080fd5b6115b48561154e565b9050838101819010156115c657600080fd5b6115d3600a858401612608565b600160a060020a03851660009081526008602052604090206115f790828601612608565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6116ea612a92565b600067ffffffffffffffff808816908716101561170657600080fd5b67ffffffffffffffff808716908616101561172057600080fd5b600160a060020a0333166000908152600d602052604090205460ff16151561174757600080fd5b60146117528a610bd5565b1061175c57600080fd5b60e06040519081016040528085611774576000611776565b335b600160a060020a031681526020018981526020018767ffffffffffffffff1681526020018667ffffffffffffffff1681526020018867ffffffffffffffff16815260200185151581526020018415158152509150600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002080548060010182816118019190612ace565b916000526020600020906003020160005b50839081518154600160a060020a031916600160a060020a039190911617815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a082015160028201805491151560c060020a0278ff0000000000000000000000000000000000000000000000001990921691909117905560c08201516002909101805491151560c860020a0279ff00000000000000000000000000000000000000000000000000199092169190911790555090506119428989611a9f565b151561194a57fe5b88600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8a6001850360405191825260208201526040908101905180910390a35b505050505050505050565b600a5460009015806119e0575081600a60008154811015156119c557fe5b906000526020600020900160005b50546001608060020a0316115b15611a8757600554600160a060020a031615611a7a57600554600654600160a060020a039091169063981b24d090611a19908590612415565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a5857600080fd5b6102c65a03f11515611a6957600080fd5b505050604051805190509050610bef565b506000610bef565b610bef565b611a92600a8361242f565b9050610bef565b5b919050565b6000338280611aad83610dfc565b1015611ab857600080fd5b611ac285856126f1565b92505b5b505092915050565b600e546000908190819033600160a060020a03908116911614611af057600080fd5b600160a060020a0385161515611b0557600080fd5b600160a060020a0386166000908152600c60205260409020805485908110611b2957fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611b5857600080fd5b825433600160a060020a03908116911614611b7257600080fd5b600283015460c860020a900460ff16611b8b5784611b8f565b61dead5b9150611b9b8342612719565b600160a060020a0387166000908152600c6020526040902080549192509085908110611bc357fe5b906000526020600020906003020160005b508054600160a060020a0319168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a0388168152600c6020526040902080549091611c3c919063ffffffff6127c516565b81548110611c4657fe5b906000526020600020906003020160005b50600160a060020a0387166000908152600c60205260409020805486908110611c7c57fe5b906000526020600020906003020160005b5081548154600160a060020a031916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff00000000000000000000000000000000000000000000000000199092169190911790915586166000908152600c6020526040902080546000190190611dce9082612ace565b50611dda8683836127dc565b505b5b505050505050565b600b5460ff1681565b60065481565b6000611e008484610c92565b1515611e0b57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611ea45780820151818401525b602001611e8b565b50505050905090810190601f168015611ed15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515611ef257600080fd5b6102c65a03f11515611f0357600080fd5b505050600190505b9392505050565b600080600080611f2186610bd5565b9250821515611f3a57611f338661154e565b9350611fc1565b5060009050805b82811015611fa557600160a060020a0386166000908152600c602052604090208054611f9a91611f8d9184908110611f7557fe5b906000526020600020906003020160005b5087612719565b839063ffffffff6129bb16565b91505b600101611f41565b611fbe82611fb28861154e565b9063ffffffff6127c516565b93505b50505092915050565b600080548190819033600160a060020a03908116911614611fea57600080fd5b611ff2610e16565b91508382101561200157600080fd5b61200a8561154e565b90508381101561201957600080fd5b612026600a858403612608565b600160a060020a038516600090815260086020526040902061204a90858303612608565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b600160a060020a038083166000908152600960209081526040808320938516835292905220545b92915050565b60008054819033600160a060020a039081169116146120e257600080fd5b600160a060020a038316151561213057600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561212b57600080fd5b61226b565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561218a57600080fd5b6102c65a03f1151561219b57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561220b57600080fd5b6102c65a03f1151561221c57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b5b505050565b600e54600160a060020a031681565b600b546101009004600160a060020a031681565b60005433600160a060020a039081169116146122af57600080fd5b600b805460ff19168215151790555b5b50565b600054600160a060020a031681565b600e5433600160a060020a039081169116146122ec57600080fd5b600160a060020a038116151561230157600080fd5b600e5461231890600160a060020a0316600061234a565b600e8054600160a060020a031916600160a060020a038381169190911791829055610f5e9116600161234a565b5b5b50565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b6000805433600160a060020a0390811691161461240057600b5460ff16151561239b57600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156123d257506000611f0b565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b61240b8484846127dc565b90505b9392505050565b60008183106124245781612426565b825b90505b92915050565b60008060008085805490506000141561244b5760009350611fc1565b85548690600019810190811061245d57fe5b906000526020600020900160005b50546001608060020a031685106124b55785548690600019810190811061248e57fe5b906000526020600020900160005b5054608060020a90046001608060020a03169350611fc1565b8560008154811015156124c457fe5b906000526020600020900160005b50546001608060020a03168510156124ed5760009350611fc1565b8554600093506000190191505b8282111561254f5760026001838501015b04905084868281548110151561251d57fe5b906000526020600020900160005b50546001608060020a0316116125435780925061254a565b6001810391505b6124fa565b858381548110151561255d57fe5b906000526020600020900160005b5054608060020a90046001608060020a031693505b50505092915050565b600061242683602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166129d5565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156124245781612426565b825b90505b92915050565b8154600090819015806126455750835443908590600019810190811061262a57fe5b906000526020600020900160005b50546001608060020a0316105b156126ae578354849061265b8260018301612b32565b8154811061266557fe5b906000526020600020900160005b5080546001608060020a03858116608060020a024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506126ea565b8354849060001981019081106126c057fe5b906000526020600020900160005b5080546001608060020a03808616608060020a02911617815590505b5b50505050565b600b5460009060ff16151561270557600080fd5b6124263384846127dc565b90505b92915050565b60006124266127ab8460e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015284612589565b60018501549063ffffffff6127c516565b90505b92915050565b6000828211156127d157fe5b508082035b92915050565b600080808315156127f05760019250610e8e565b6006544390106127ff57600080fd5b600160a060020a03851615801590612829575030600160a060020a031685600160a060020a031614155b151561283457600080fd5b61283e8643610f62565b9150838210156128515760009250610e8e565b60005461286690600160a060020a0316610ba8565b156129015760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156128db57600080fd5b6102c65a03f115156128ec57600080fd5b50505060405180519050151561290157600080fd5b5b600160a060020a038616600090815260086020526040902061292690858403612608565b6129308543610f62565b90508381018190101561294257600080fd5b600160a060020a038516600090815260086020526040902061296690828601612608565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b6000828201838110156129ca57fe5b8091505b5092915050565b600080838610156129e957600091506114b9565b8286106129f8578691506114b9565b612a37612a0b848763ffffffff6127c516565b612a2b612a1e898963ffffffff6127c516565b8a9063ffffffff612a4716565b9063ffffffff612a7616565b90508091505b5095945050505050565b6000828202831580612a635750828482811515612a6057fe5b04145b15156129ca57fe5b8091505b5092915050565b6000808284811515612a8457fe5b0490508091505b5092915050565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760008381526020902061226b918101908301612bb3565b5b505050565b610e2491905b80821115612bac578054600160a060020a03191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600301612b62565b5090565b90565b610e2491905b80821115612bac5760008155600101612bb9565b5090565b905600a165627a7a7230582063d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e08040029000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e


   Swarm Source:
bzzr://63d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e0804

 

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