Sponsored Link:   Revain - How to find moon tokens to invest? See what crypto experts are saying. Read reviews!
Contract Overview | CopytrackTokenSale
Balance: 0 Ether
Ether Value: $0
Transactions: 31981 txns
 Latest 25 txns from a total Of 31981 transactions
View All

TxHash Age From To Value [TxFee]
0xfcdcbfc9097437493cf93f1703bc17effe0803c5272cd2ab49cc0bc553d73d0b5 days 21 hrs ago0x822ca1fa448f8ff4018650570c6bc709e3dff846  IN   CopytrackTokenSale0.99 Ether0.00106985
0x558f8d99e67fe3d90217ff2f29985f2dbdba0f655026d192b8aa8e69d75c31a144 days 20 hrs ago0xe33d7ac77746b6065d2d5edb148ae09874644bd0  IN   CopytrackTokenSale0.151718 Ether0.00128382
0xa22913005b013c1d22583acdb7eb3948e0ed6c022b9dc250d23fd05396872f7d84 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x60af90327fd6103de0ec9edb6fad690b361492f906489bf3ca4b9afa0832848784 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x17f525ea2969ff61a467aecc86c1139b30976daed73d71acb358f540f56f8b8384 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x95adbd8fb3617e42d18e1ee89615c1e2a86d4031822aedd707439edc8d22e98284 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0xfc244cd5d0fc3525aa4152ade8996acf003407c0b66b41b1a0bb0fbab3fab0b584 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0xd9b8860b774327f50922e6c8cc3242603a61141c39ded8721a4b9771c81161dc84 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x3b786c7dbba507b103904fd7096f01a68aafa13741820e5736158acc35d45e4284 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x79d37bef73ca9ac2a1768b6a6528d1f278573a1dcaab0b8665c87c844e98dd8384 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x98ff6101f50aec0e43a7e095da831d9d045143619acc619f8bd9a9914d15728184 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x74159f8143764e11a9d36e51d12d79f29835aa66db0a643b07ccba74b4bbff2884 days 8 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.09 Ether0.00128382
0x7a06538ef606b0fd84dc0e934aaf5d0d8204edd07f42094832c6f42d1f9db1a784 days 9 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.1 Ether0.001412202
0xf92e2636d690c727dbaecafd124b239cb68fdb80c98ca74b1447615cf9d8819693 days 20 hrs ago0xefd53457d18c9eab5fc4cc041cc7ae10bfe9ca72  IN   CopytrackTokenSale0.04628487 Ether0.00042794
0xb9a88e96e482b70e4f8fdba644b15026da6fe911674dc6a70c65d8ed701b8e2c95 days 12 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.08 Ether0.00128382
0x762117360aa258043b20cf76ec401a0d2be53531025e5878142bea81bc70a5d095 days 12 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.1 Ether0.00128382
0x1673d055aa3e1e8a4af726d3993758cb85e400804f1f392e8ad5830e4d1332b495 days 18 hrs ago0xcd0b1f4b75d0649b23ff9ea9e3068afe9efc28af  IN   CopytrackTokenSale0.15 Ether0.00128382
0x53297b8b0c00313fa867b85cd80b827336ce98dd397a2a28772f296170c38f4197 days 1 hr ago0xe33d7ac77746b6065d2d5edb148ae09874644bd0  IN   CopytrackTokenSale0.1 Ether0.00128382
0xef99c32fa417937890615c86564c4533ca19688fa608467ccade99965516a0a698 days 12 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0x1e13d77ff28f254f2284b0d2ddb34f473d2c9ef4296b08b0eef5da7d20568b1498 days 12 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0x49e1b14c9915f1761acb3ce9d42c2c4e1156ba7ce98adaf273aa687720c1d6ad98 days 13 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0x220ab216fd01b5378d910dc4f80a9211fb7edb1e52b8afdb0a0303a10e82915e98 days 13 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0xbae1f52ba64890203d3249f5987a1c310399c42c5ba57aad98a32055e5bf3f0198 days 13 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0xd7f7c62894009979ed58dc6b80b472bc92ad6848741f0c0a25e5539ade80d64699 days 10 hrs ago0xd6184e9c903e09516b1f2eadbfb33b809608e747  IN   CopytrackTokenSale0.1 Ether0.001305217
0xbcd9cf2ba372f59e1d0352025b29c0c222121d41e51d7d3716e7a10554924f5e99 days 23 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.001112644
[ 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
0x8081fe9cc18c3b43ea5d74ed88f19de5b4439d32d8371d93e61c8e4871a3420d5061797106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b71 Ether
0x8de19f2f35ee0407043ff3522092952c0f4ea92cd25243d9f3d3588e390d6b945061797106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b71 Ether
0x19a87abee3c9814b2cbdda8e9831c7be7d57ca731f7dc29332ba46cd348706ac5061793106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.8951060665 Ether
0x374a570cd2d3c782b5d9f12953796d7b5f852f35947ea99620a39eb4f44ba33a5061793106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b79.9 Ether
0xff605f58c91e18adecb07b57a736c1cd218de412debd79282dc334f0e71493485061784106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x600acf9527209ce4ed0d65aa05b4d42f847d310a129ad0f077e7a6e3f8a0729e5061776106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b72 Ether
0x7e9cdae1e0cbc23fc95d46269c27cc49cd3bb9e9f61c7e0de6a16ae223cfd7105061772106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.27 Ether
0xccb363c0a86f7aebb2cce597d2ca95fd9006f4189a53ab242949742df549dc9d5061771106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.3 Ether
0xdb4e6f7b9fd29a74df9c299ce4eaad4f75e97f3757e27007e4124da042a7a5f55061771106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x2207d5d8b0ad6cfe7059c47ea3df4c32a3c2f75eaf201d5379519a86a57f495c5061771106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x44ffc59c8934540d8ce1e6b797310419cbd857868aa9447b0a5fed289364beab5061770106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.995 Ether
0xce289c160833cc5490c9b51ed4d10b48f7f090fe711f9c036a706b6919a6e8365061770106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x650a1930dfbe2584cb11c690542de29e34fb145404b26bf8d43837360b7a976f5061767106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.491 Ether
0xb3b7b87ba3b802dbc5836c0dc59a1a503d5ea4e02ec69d2b69b6483af2c521945061767106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x740b2f357667260ef01ca3249545828b1ca84bf70747f64a2aafd4ad0db1aa505061766106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.5 Ether
0x2480bde485503d24cdb52d414093f7b42679746621a9a1ce3ac6fa9882184fba5061765106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x6b1f45fa66c9a184aff46e47950f79039f3e5163a6d6614030c2b0f5a1f5a1aa5061764106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b72 Ether
0xde9ddb1990030adb76d403bdcfd087b3dadcbcea9181aaa2bb34d6e24b4174655061757106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.57713872 Ether
0x67a0cb1e2a1ed548a3d4cb5fe3c7952278488c20c91adbb94fe27a632dae539b5061756106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b71.68 Ether
0x79153fa00c5944bbbbd67c1331577b8bb4db78ffbbdd48941c591008529737de5061755106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0xda5ab806d9992b1dce8c4cb91fe688bbc2038b53a214e61bed108e58a8fe913f5061754106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.5 Ether
0xc0ec687ae061f1711b2f83078d40180c8a1b195c0c0d8f00876ea54add50d49d5061752106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.41 Ether
0x9a9afb28cb04b18ff88d53e75d65a23e5b400d3dd82f134b511488bb3ebdc3245061751106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.14958 Ether
0x2bfa29da4d4967c7901dd4ee901801cb3edb1f39e357ab363b2ff1428b3880815061750106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.5563278 Ether
0xdee2b97ff439677e125eb610ad1dace13d1f88d1c1e9b401b099c4c4a912e3965061748106 days 12 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b73.036 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: TokenSale
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 ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

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

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

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

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

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

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

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

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) internal allowed;


  /**
   * @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));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    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 A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

//
// CPYToken is a standard ERC20 token with additional functionality:
// - tokenSaleContract receives the whole balance for distribution
// - Tokens are only transferable by the tokenSaleContract until finalization
// - Token holders can burn their tokens after finalization
//
contract Token is StandardToken {

    string  public constant name   = "COPYTRACK Token";
    string  public constant symbol = "CPY";

    uint8 public constant   decimals = 18;

    uint256 constant EXA       = 10 ** 18;
    uint256 public totalSupply = 100 * 10 ** 6 * EXA;

    bool public finalized = false;

    address public tokenSaleContract;

    //
    // EVENTS
    //
    event Finalized();

    event Burnt(address indexed _from, uint256 _amount);


    // Initialize the token with the tokenSaleContract and transfer the whole balance to it
    function Token(address _tokenSaleContract)
        public
    {
        // Make sure address is set
        require(_tokenSaleContract != 0);

        balances[_tokenSaleContract] = totalSupply;

        tokenSaleContract = _tokenSaleContract;
    }


    // Implementation of the standard transfer method that takes the finalize flag into account
    function transfer(address _to, uint256 _value)
        public
        returns (bool success)
    {
        checkTransferAllowed(msg.sender);

        return super.transfer(_to, _value);
    }


    // Implementation of the standard transferFrom method that takes into account the finalize flag
    function transferFrom(address _from, address _to, uint256 _value)
        public
        returns (bool success)
    {
        checkTransferAllowed(msg.sender);

        return super.transferFrom(_from, _to, _value);
    }


    function checkTransferAllowed(address _sender)
        private
        view
    {
        if (finalized) {
            // Every token holder should be allowed to transfer tokens once token was finalized
            return;
        }

        // Only allow tokenSaleContract to transfer tokens before finalization
        require(_sender == tokenSaleContract);
    }


    // Finalize method marks the point where token transfers are finally allowed for everybody
    function finalize()
        external
        returns (bool success)
    {
        require(!finalized);
        require(msg.sender == tokenSaleContract);

        finalized = true;

        Finalized();

        return true;
    }


    // Implement a burn function to permit msg.sender to reduce its balance which also reduces totalSupply
    function burn(uint256 _value)
        public
        returns (bool success)
    {
        require(finalized);
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);

        Burnt(msg.sender, _value);

        return true;
    }
}

contract TokenSaleConfig  {
    uint public constant EXA = 10 ** 18;

    uint256 public constant PUBLIC_START_TIME         = 1515542400; //Wed, 10 Jan 2018 00:00:00 +0000
    uint256 public constant END_TIME                  = 1518220800; //Sat, 10 Feb 2018 00:00:00 +0000
    uint256 public constant CONTRIBUTION_MIN          = 0.1 ether;
    uint256 public constant CONTRIBUTION_MAX          = 2500.0 ether;

    uint256 public constant COMPANY_ALLOCATION        = 40 * 10 ** 6 * EXA; //40 million;

    Tranche[4] public tranches;

    struct Tranche {
        // How long this tranche will be active
        uint untilToken;

        // How many tokens per ether you will get while this tranche is active
        uint tokensPerEther;
    }

    function TokenSaleConfig()
        public
    {
        tranches[0] = Tranche({untilToken : 5000000 * EXA, tokensPerEther : 1554});
        tranches[1] = Tranche({untilToken : 10000000 * EXA, tokensPerEther : 1178});
        tranches[2] = Tranche({untilToken : 20000000 * EXA, tokensPerEther : 1000});
        tranches[3] = Tranche({untilToken : 60000000, tokensPerEther : 740});
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


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


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


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

contract TokenSale is TokenSaleConfig, Ownable {
    using SafeMath for uint;

    Token  public  tokenContract;

    // We keep track of whether the sale has been finalized, at which point
    // no additional contributions will be permitted.
    bool public finalized = false;

    // lookup for max wei amount per user allowed
    mapping (address => uint256) public contributors;

    // the total amount of wei raised
    uint256 public totalWeiRaised = 0;

    // the total amount of token raised
    uint256 public totalTokenSold = 0;

    // address where funds are collected
    address public fundingWalletAddress;

    // address which manages the whitelist (KYC)
    mapping (address => bool) public whitelistOperators;

    // lookup addresses for whitelist
    mapping (address => bool) public whitelist;


    // early bird investments
    address[] public earlyBirds;

    mapping (address => uint256) public earlyBirdInvestments;


    //
    // MODIFIERS
    //

    // Throws if purchase would exceed the min max contribution.
    // @param _contribute address
    // @param _weiAmount the amount intended to spend
    modifier withinContributionLimits(address _contributorAddress, uint256 _weiAmount) {
        uint256 totalContributionAmount = contributors[_contributorAddress].add(_weiAmount);
        require(_weiAmount >= CONTRIBUTION_MIN);
        require(totalContributionAmount <= CONTRIBUTION_MAX);
        _;
    }

    // Throws if called by any account not on the whitelist.
    // @param _address Address which should execute the function
    modifier onlyWhitelisted(address _address) {
        require(whitelist[_address] == true);
        _;
    }

    // Throws if called by any account not on the whitelistOperators list
    modifier onlyWhitelistOperator()
    {
        require(whitelistOperators[msg.sender] == true);
        _;
    }

    //Throws if sale is finalized or token sale end time has been reached
    modifier onlyDuringSale() {
        require(finalized == false);
        require(currentTime() <= END_TIME);
        _;
    }

    //Throws if sale is finalized
    modifier onlyAfterFinalized() {
        require(finalized);
        _;
    }



    //
    // EVENTS
    //
    event LogWhitelistUpdated(address indexed _account);

    event LogTokensPurchased(address indexed _account, uint256 _cost, uint256 _tokens, uint256 _totalTokenSold);

    event UnsoldTokensBurnt(uint256 _amount);

    event Finalized();

    // Initialize a new TokenSale contract
    // @param _fundingWalletAddress Address which all ether will be forwarded to
    function TokenSale(address _fundingWalletAddress)
        public
    {
        //make sure _fundingWalletAddress is set
        require(_fundingWalletAddress != 0);

        fundingWalletAddress = _fundingWalletAddress;
    }

    // Connect a token to the tokenSale
    // @param _fundingWalletAddress Address which all ether will be forwarded to
    function connectToken(Token _tokenContract)
        external
        onlyOwner
    {
        require(totalTokenSold == 0);
        require(tokenContract == address(0));

        //make sure token is untouched
        require(_tokenContract.balanceOf(address(this)) == _tokenContract.totalSupply());

        tokenContract = _tokenContract;

        // sent tokens to company vault
        tokenContract.transfer(fundingWalletAddress, COMPANY_ALLOCATION);
        processEarlyBirds();
    }

    function()
        external
        payable
    {
        uint256 cost = buyTokens(msg.sender, msg.value);

        // forward contribution to the fundingWalletAddress
        fundingWalletAddress.transfer(cost);
    }

    // execution of the actual token purchase
    function buyTokens(address contributorAddress, uint256 weiAmount)
        onlyDuringSale
        onlyWhitelisted(contributorAddress)
        withinContributionLimits(contributorAddress, weiAmount)
        private
    returns (uint256 costs)
    {
        assert(tokenContract != address(0));

        uint256 tokensLeft = getTokensLeft();

        // make sure we still have tokens left for sale
        require(tokensLeft > 0);

        uint256 tokenAmount = calculateTokenAmount(weiAmount);
        uint256 cost = weiAmount;
        uint256 refund = 0;

        // we sell till we dont have anything left
        if (tokenAmount > tokensLeft) {
            tokenAmount = tokensLeft;

            // calculate actual cost for partial amount of tokens.
            cost = tokenAmount / getCurrentTokensPerEther();

            // calculate refund for contributor.
            refund = weiAmount.sub(cost);
        }

        // transfer the tokens to the contributor address
        tokenContract.transfer(contributorAddress, tokenAmount);

        // keep track of the amount bought by the contributor
        contributors[contributorAddress] = contributors[contributorAddress].add(cost);


        //if we got a refund process it now
        if (refund > 0) {
            // transfer back everything that exceeded the amount of tokens left
            contributorAddress.transfer(refund);
        }

        // increase stats
        totalWeiRaised += cost;
        totalTokenSold += tokenAmount;

        LogTokensPurchased(contributorAddress, cost, tokenAmount, totalTokenSold);

        // If all tokens available for sale have been sold out, finalize the sale automatically.
        if (tokensLeft.sub(tokenAmount) == 0) {
            finalizeInternal();
        }


        //return the actual cost of the sale
        return cost;
    }

    // ask the connected token how many tokens we have left 
    function getTokensLeft()
        public
        view
    returns (uint256 tokensLeft)
    {
        return tokenContract.balanceOf(this);
    }

    // calculate the current tokens per ether
    function getCurrentTokensPerEther()
        public
        view
    returns (uint256 tokensPerEther)
    {
        uint i;
        uint defaultTokensPerEther = tranches[tranches.length - 1].tokensPerEther;

        if (currentTime() >= PUBLIC_START_TIME) {
            return defaultTokensPerEther;
        }

        for (i = 0; i < tranches.length; i++) {
            if (totalTokenSold >= tranches[i].untilToken) {
                continue;
            }

            //sell until the contract has nor more tokens
            return tranches[i].tokensPerEther;
        }

        return defaultTokensPerEther;
    }

    // calculate the token amount for a give weiAmount
    function calculateTokenAmount(uint256 weiAmount)
        public
        view
    returns (uint256 tokens)
    {
        return weiAmount * getCurrentTokensPerEther();
    }

    //
    // WHITELIST
    //

    // add a new whitelistOperator
    function addWhitelistOperator(address _address)
        public
        onlyOwner
    {
        whitelistOperators[_address] = true;
    }

    // remove a whitelistOperator
    function removeWhitelistOperator(address _address)
        public
        onlyOwner
    {
        require(whitelistOperators[_address]);

        delete whitelistOperators[_address];
    }


    // Allows whitelistOperators to add an account to the whitelist.
    // Only those accounts will be allowed to contribute during the sale.
    function addToWhitelist(address _address)
        public
        onlyWhitelistOperator
    {
        require(_address != address(0));

        whitelist[_address] = true;
        LogWhitelistUpdated(_address);
    }

    // Allows whitelistOperators to remove an account from the whitelist.
    function removeFromWhitelist(address _address)
        public
        onlyWhitelistOperator
    {
        require(_address != address(0));

        delete whitelist[_address];
    }

    //returns the current time, needed for tests
    function currentTime()
        public
        view
        returns (uint256 _currentTime)
    {
        return now;
    }


    // Allows the owner to finalize the sale.
    function finalize()
        external
        onlyOwner
        returns (bool)
    {
        //allow only after the defined end_time
        require(currentTime() > END_TIME);

        return finalizeInternal();
    }


    // The internal one will be called if tokens are sold out or
    // the end time for the sale is reached, in addition to being called
    // from the public version of finalize().
    function finalizeInternal() private returns (bool) {
        require(!finalized);

        finalized = true;

        Finalized();

        //also finalize the token contract
        tokenContract.finalize();

        return true;
    }

    // register an early bird investment
    function addEarlyBird(address _address, uint256 weiAmount)
        onlyOwner
        withinContributionLimits(_address, weiAmount)
        external
    {
        // only allowed as long as we dont have a connected token
        require(tokenContract == address(0));

        earlyBirds.push(_address);
        earlyBirdInvestments[_address] = weiAmount;

        // auto whitelist early bird;
        whitelist[_address] = true;
    }

    // transfer the tokens bought by the early birds before contract creation
    function processEarlyBirds()
        private
    {
        for (uint256 i = 0; i < earlyBirds.length; i++)
        {
            address earlyBirdAddress = earlyBirds[i];
            uint256 weiAmount = earlyBirdInvestments[earlyBirdAddress];

            buyTokens(earlyBirdAddress, weiAmount);
        }
    }


    // allows everyone to burn all unsold tokens in the sale contract after finalized.
    function burnUnsoldTokens()
        external
        onlyAfterFinalized
        returns (bool)
    {
        uint256 leftTokens = getTokensLeft();

        require(leftTokens > 0);

        // let'em burn
        require(tokenContract.burn(leftTokens));

        UnsoldTokensBurnt(leftTokens);

        return true;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"earlyBirds","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeWhitelistOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributors","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tranches","outputs":[{"name":"untilToken","type":"uint256"},{"name":"tokensPerEther","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PUBLIC_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"weiAmount","type":"uint256"}],"name":"addEarlyBird","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWeiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTokensPerEther","outputs":[{"name":"tokensPerEther","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addWhitelistOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COMPANY_ALLOCATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistOperators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeFromWhitelist","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":"","type":"address"}],"name":"earlyBirdInvestments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"burnUnsoldTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"connectToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingWalletAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"weiAmount","type":"uint256"}],"name":"calculateTokenAmount","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"_currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensLeft","outputs":[{"name":"tokensLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_fundingWalletAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"}],"name":"LogWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_totalTokenSold","type":"uint256"}],"name":"LogTokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"UnsoldTokensBurnt","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526009805460a060020a60ff02191690556000600b819055600c55341561002957600080fd5b60405160208061132c8339810160405280805191506040905080519081016040526a0422ca8b0a00a42500000081526106126020820152600081518155602082015160019091015550604080519081016040526a084595161401484a000000815261049a6020820152600281518155602082015160019091015550604080519081016040526a108b2a2c2802909400000081526103e8602082015260048151815560208201516001909101555060408051908101604052630393870081526102e4602082015260068151815560208201516001909101555060088054600160a060020a03338116600160a060020a0319909216919091179091558116151561013057600080fd5b600d8054600160a060020a031916600160a060020a03929092169190911790556111cd8061015f6000396000f3006060604052600436106101715763ffffffff60e060020a6000350416630428c6aa81146101b6578063159c18bc146101e85780631a2309f0146102095780631f6d49421461022e57806326c259621461024d578063297c41431461027b578063305006841461028e57806337ba682d146102b05780634bb278f3146102c357806353f4db01146102ea57806355a373d6146102fd5780635e402ae2146103105780636c749c26146103235780636ee18573146103365780637064f0af1461035557806383a4f2f5146103685780638ab1d681146103875780638da5cb5b146103a657806393bbafd1146103b9578063940bb344146103d857806399413b4e146103eb5780639b19251a1461040a5780639ce21f3c14610429578063a24bcf461461043c578063b3f05b9714610452578063b5f7f63614610465578063ba9bb82714610478578063d18e81b31461048b578063de5f98661461049e578063e43252d7146104b1578063f2fde38b146104d0575b600061017d33346104ef565b600d54909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156101b357600080fd5b50005b34156101c157600080fd5b6101cc6004356107ab565b604051600160a060020a03909116815260200160405180910390f35b34156101f357600080fd5b610207600160a060020a03600435166107d3565b005b341561021457600080fd5b61021c610836565b60405190815260200160405180910390f35b341561023957600080fd5b61021c600160a060020a0360043516610843565b341561025857600080fd5b610263600435610855565b60405191825260208201526040908101905180910390f35b341561028657600080fd5b61021c610874565b341561029957600080fd5b610207600160a060020a036004351660243561087c565b34156102bb57600080fd5b61021c610979565b34156102ce57600080fd5b6102d6610981565b604051901515815260200160405180910390f35b34156102f557600080fd5b61021c6109c4565b341561030857600080fd5b6101cc6109ca565b341561031b57600080fd5b61021c6109d9565b341561032e57600080fd5b61021c610a58565b341561034157600080fd5b610207600160a060020a0360043516610a64565b341561036057600080fd5b61021c610aa3565b341561037357600080fd5b6102d6600160a060020a0360043516610ab2565b341561039257600080fd5b610207600160a060020a0360043516610ac7565b34156103b157600080fd5b6101cc610b27565b34156103c457600080fd5b61021c600160a060020a0360043516610b36565b34156103e357600080fd5b6102d6610b48565b34156103f657600080fd5b610207600160a060020a0360043516610c2f565b341561041557600080fd5b6102d6600160a060020a0360043516610e07565b341561043457600080fd5b6101cc610e1c565b341561044757600080fd5b61021c600435610e2b565b341561045d57600080fd5b6102d6610e3d565b341561047057600080fd5b61021c610e4d565b341561048357600080fd5b61021c610e53565b341561049657600080fd5b61021c610e5f565b34156104a957600080fd5b61021c610e63565b34156104bc57600080fd5b610207600160a060020a0360043516610edd565b34156104db57600080fd5b610207600160a060020a0360043516610f6f565b600954600090819081908190819060a060020a900460ff161561051157600080fd5b635a7e360061051e610e5f565b111561052957600080fd5b600160a060020a0387166000908152600f6020526040902054879060ff16151560011461055557600080fd5b600160a060020a0388166000908152600a602052604081205489918991610582908363ffffffff61100a16565b905067016345785d8a000082101561059957600080fd5b68878678326eac9000008111156105af57600080fd5b600954600160a060020a031615156105c357fe5b6105cb610e63565b9750600088116105da57600080fd5b6105e38a610e2b565b9650899550600094508787111561061f578796506105ff6109d9565b8781151561060957fe5b04955061061c8a8763ffffffff61102016565b94505b600954600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561067e57600080fd5b6102c65a03f1151561068f57600080fd5b50505060405180515050600160a060020a038b166000908152600a60205260409020546106c2908763ffffffff61100a16565b600160a060020a038c166000908152600a602052604081209190915585111561071657600160a060020a038b1685156108fc0286604051600060405180830381858888f19350505050151561071657600080fd5b600b805487019055600c8054880190819055600160a060020a038c16907f1f3e1c8dd1ea65dd1302cbe3ef11178a614ac6f634819e13ce4e6326350d2a839088908a9060405180848152602001838152602001828152602001935050505060405180910390a261078c888863ffffffff61102016565b151561079c5761079a611032565b505b50939998505050505050505050565b60108054829081106107b957fe5b600091825260209091200154600160a060020a0316905081565b60085433600160a060020a039081169116146107ee57600080fd5b600160a060020a0381166000908152600e602052604090205460ff16151561081557600080fd5b600160a060020a03166000908152600e60205260409020805460ff19169055565b68878678326eac90000081565b600a6020526000908152604090205481565b6000816004811061086257fe5b60020201805460019091015490915082565b635a55578081565b60085433600160a060020a0390811691161461089757600080fd5b600160a060020a0382166000908152600a6020526040812054839183916108c4908363ffffffff61100a16565b905067016345785d8a00008210156108db57600080fd5b68878678326eac9000008111156108f157600080fd5b600954600160a060020a03161561090757600080fd5b60108054600181016109198382611168565b5060009182526020808320919091018054600160a060020a0390981673ffffffffffffffffffffffffffffffffffffffff199098168817905595815260118652604080822095909555600f9095525050509020805460ff19166001179055565b635a7e360081565b60085460009033600160a060020a0390811691161461099f57600080fd5b635a7e36006109ac610e5f565b116109b657600080fd5b6109be611032565b90505b90565b600b5481565b600954600160a060020a031681565b6007546000908190635a5557806109ee610e5f565b106109fb57809250610a53565b600091505b6004821015610a4f5760008260048110610a1657fe5b6002020154600c5410610a2857610a44565b60008260048110610a3557fe5b60020201600101549250610a53565b600190910190610a00565b8092505b505090565b670de0b6b3a764000081565b60085433600160a060020a03908116911614610a7f57600080fd5b600160a060020a03166000908152600e60205260409020805460ff19166001179055565b6a211654585005212800000081565b600e6020526000908152604090205460ff1681565b600160a060020a0333166000908152600e602052604090205460ff161515600114610af157600080fd5b600160a060020a0381161515610b0657600080fd5b600160a060020a03166000908152600f60205260409020805460ff19169055565b600854600160a060020a031681565b60116020526000908152604090205481565b600954600090819060a060020a900460ff161515610b6557600080fd5b610b6d610e63565b905060008111610b7c57600080fd5b600954600160a060020a03166342966c688260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bcd57600080fd5b6102c65a03f11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b7f8a18a804523143af3d2399b3fdf76bf116e01d31987f8e774d8f1282f013cb7e8160405190815260200160405180910390a1600191505b5090565b60085433600160a060020a03908116911614610c4a57600080fd5b600c5415610c5757600080fd5b600954600160a060020a031615610c6d57600080fd5b80600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b5050506040518051905081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d2557600080fd5b6102c65a03f11515610d3657600080fd5b50505060405180519050141515610d4c57600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055600d549181169163a9059cbb91166a211654585005212800000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de057600080fd5b6102c65a03f11515610df157600080fd5b5050506040518051905050610e04611106565b50565b600f6020526000908152604090205460ff1681565b600d54600160a060020a031681565b6000610e356109d9565b909102919050565b60095460a060020a900460ff1681565b600c5481565b67016345785d8a000081565b4290565b600954600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ebe57600080fd5b6102c65a03f11515610ecf57600080fd5b505050604051805191505090565b600160a060020a0333166000908152600e602052604090205460ff161515600114610f0757600080fd5b600160a060020a0381161515610f1c57600080fd5b600160a060020a0381166000818152600f602052604090819020805460ff191660011790557f8988c1ff37289662f7d1a6f736d91aada3cb9216b6614a53b94f210ea4a0af25905160405180910390a250565b60085433600160a060020a03908116911614610f8a57600080fd5b600160a060020a0381161515610f9f57600080fd5b600854600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008282018381101561101957fe5b9392505050565b60008282111561102c57fe5b50900390565b60095460009060a060020a900460ff161561104c57600080fd5b6009805474ff0000000000000000000000000000000000000000191660a060020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1600954600160a060020a0316634bb278f36000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110e457600080fd5b6102c65a03f115156110f557600080fd5b505050604051805150600191505090565b600080805b60105483101561116357601080548490811061112357fe5b6000918252602080832090910154600160a060020a03168083526011909152604090912054909250905061115782826104ef565b5060019092019161110b565b505050565b815481835581811511611163576000838152602090206111639181019083016109c191905b80821115610c2b576000815560010161118d5600a165627a7a723058204b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c100290000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7

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

-----Decoded View---------------
Found 1 constructor arguments :
Arg [0] : 0000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7


   Swarm Source:
bzzr://4b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c1

 

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.