Contract 0xe926460dd13e92faba4513cf120c9df15fd43931

Contract Overview

Balance:
0 Ether
TxHash Block Age From To Value [TxFee]
0x7932f87dd30b3847809aa15753af7ec4245e1941cda91557381e3105e7ecfd253113682326 days 12 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.001389326
0x59d5b8e5e8b70141695dac07a3df56a99714df114876c2159ff88c1fc6708dcf3041267337 days 13 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000401264
0x8e65de9818cd1790becff3c91a03539b5f0e2de33a03a0cadc6b698c402ec6cf3041156337 days 14 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000363472
0x7f806cc791ab16c2e302d78c6add945ba3257be062455d1e06d5fe1bb3ba41133041103337 days 14 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000456568
0x6208a2443c8d4fc3bcd6502a82f34f2f61cc06f2ae940a8b7de67cc95a7950133041082337 days 14 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000401264
0xe1c027831a6ce1316d2803301f6d8fecebdaa0c00e7106a22ce0d41aaa5273093041017337 days 14 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000363472
0x8d8268ac0073b8625f218c7fa77af5f54e3419d1e29b7f28d388722cf861afec3040959337 days 14 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000456568
0xdd0408b49bf4c758020fb4fadb51bb20fa8167e7d2493ed4efca6739e29cfc0b3040939337 days 14 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000401264
0xf3ac309e3f4c7440db1baea2e659fee59315770c89de336b7620278c2654dc663040886337 days 15 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.000363472
0xcf3125aa810ad3ec8ac347c4f182a477788aa2c1c7d5406a52260f82d1a053cb3040802337 days 15 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00399567
0x22df471b984d63057620366a39202b9b7008a40cf5ccd36eece43a0e7f054b003040788337 days 15 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00351106
0xf1278006660a90e0f8377a0af17223519b72196a09a5236aa15baeedb78d470f3040749337 days 15 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00318038
0x14655a565dc995a2a795be25b3ffd0e8fcd067398348b649f2692df6492040733040688337 days 15 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00399567
0xc689371074a2e9ec983b821b4868d18ada29f34d4e3dd842b77b5a1f9a483e373040669337 days 15 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00351106
0x4f7cefc8fbeb3230347d13dc3153b804c2d4ac1d76b848c1daae60567757df7e3040616337 days 16 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00318038
0x8085e0db3cb66939c41c81264f37682de10eabb231a8df17a3a019cd584a48e23040546337 days 16 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00399497
0xbaf956129e1b073c51e83d97b8ae89f5d91dcff9bb01e4e1a0c9e86443ea25473040538337 days 16 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00351106
0x6c327f75a855054f8f3874a3c573a5e53ac0451f2b273ff30145c8321deeeeec3040458337 days 16 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00318038
0x6035cd04482a82f5c95eb144bdc6f8851c4c68dbfbf713350200af920b5e4d983040383337 days 16 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00399497
0xdf65d3e112c49732dddc66851dee6e997ee3a29ddf0160b480f21e897a6eab463040360337 days 16 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00351106
0xf3e70d254c1c398bc906a661b7e41014656db2319cee884673b29bcbb4bb7aa73040312337 days 17 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00318038
0xe98ecb10a24d93a7d278bb3812a74e89ddd76c775c22077b3bd8873704eb6a7a3040247337 days 17 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00399567
0x1d4e575dbe83689654ae21ff51b8b9d3d4802f961da2e003c41be1e672bcb75e3040229337 days 17 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00351106
0xd44ba933da0c280b3f42fc8b632131ae1e75e2794629e10e71ea80640dcb2ae73040183337 days 17 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00318038
0xecdbf510bde79510159b587ec21c9295d08d6f0cb8627a2ff909e9148f8edaf43040120337 days 17 hrs ago0x85c5e358fd445e73e3021bd86bbea0b4e93261d1 IN  0xe926460dd13e92faba4513cf120c9df15fd439310 Ether0.00399497
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x7932f87dd30b3847809aa15753af7ec4245e1941cda91557381e3105e7ecfd253113682326 days 12 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310xab894be24e1b16ac0770edd37a4ba68fa764921c46.48448 Ether
0x7932f87dd30b3847809aa15753af7ec4245e1941cda91557381e3105e7ecfd253113682326 days 12 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x19c8081c72a61726c2582006aebf5b34445d59390 Ether
0x7f806cc791ab16c2e302d78c6add945ba3257be062455d1e06d5fe1bb3ba41133041103337 days 14 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x8d8268ac0073b8625f218c7fa77af5f54e3419d1e29b7f28d388722cf861afec3040959337 days 14 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xcf3125aa810ad3ec8ac347c4f182a477788aa2c1c7d5406a52260f82d1a053cb3040802337 days 15 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x14655a565dc995a2a795be25b3ffd0e8fcd067398348b649f2692df6492040733040688337 days 15 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x8085e0db3cb66939c41c81264f37682de10eabb231a8df17a3a019cd584a48e23040546337 days 16 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x6035cd04482a82f5c95eb144bdc6f8851c4c68dbfbf713350200af920b5e4d983040383337 days 16 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xe98ecb10a24d93a7d278bb3812a74e89ddd76c775c22077b3bd8873704eb6a7a3040247337 days 17 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xecdbf510bde79510159b587ec21c9295d08d6f0cb8627a2ff909e9148f8edaf43040120337 days 17 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x8db6a138858d7926370783983011407ca40b4543401cebbff78eea186bbc46213040009337 days 18 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x7d8595e775d0dcca18e18a7347ce0929974bfbdbaa618fdf95e9095a457c6bbc3039893337 days 18 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xf99d97a85345335870770fe2849381f4058d513a18346bc5aa864aa514b9ff253039753337 days 19 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x5091955de8bf7e012186bf2ce59fce2161a89913abfb515bbd6a6877c03ba53e3039630337 days 19 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x35e4e4f9efd493409293abed4d3171c95583abaa2155314b1f2082cfc67a2e8d3039524337 days 20 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xecc33cfa68c0cb716faaa95fb647d51692a1ac38d3e16d8760470c3a12cc8edf3039409337 days 20 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x54555f0b99bdb45fe8be1a63b80d8c8f16947bd9f08d4c04b35cf18ad0b125d53039297337 days 21 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xa7d6618c894ff5de7d04014757c1fc9518dcd3807d32d0935eae596be80d07093039191337 days 21 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xbfd6531a7af6da19a48b0f1ff93621e93980f2da52903bde36c12accf5a8ed013039073337 days 22 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xa6c61511eb463f44c535f15c03b7c209261bf374c48fb6f31c0ff6b355e080283038959337 days 22 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0xf95d061abe383c64e2010617b73a4bff921a64ccdb5a600c75e97c2bb25d994f3038838337 days 23 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x244dfff9aaa8b4bc3374cc3e7404d49279c3354249d03744e485879fde729bf43038732337 days 23 hrs ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x68b0a24c0ed49d3e39117a9242962ba305e98cea585c39a48ebebae92190d3ab3038609338 days 24 mins ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x21f4e78a69c773334674e7b6ec5451357f88ab877695b3013f87eeb74495c9a73038504338 days 53 mins ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
0x20f235c851994b9f2b3178855d4c030677bd7c7579cead99f8301b1a16bb2ae93038392338 days 1 hr ago0xe926460dd13e92faba4513cf120c9df15fd439310x9ee5f158d75290cd4d1af07e9121226dc91f80010 Ether
[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BinaryOption
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.18;
/**
 * Math operations with safety checks
 */
library SafeMath {
  function mul(uint a, uint b) internal pure returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

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

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

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

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

// ERC20 token interface is implemented only partially.
interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; }

contract NamiCrowdSale {
    using SafeMath for uint256;

    /// NAC Broker Presale Token
    /// @dev Constructor
    function NamiCrowdSale(address _escrow, address _namiMultiSigWallet, address _namiPresale) public {
        require(_namiMultiSigWallet != 0x0);
        escrow = _escrow;
        namiMultiSigWallet = _namiMultiSigWallet;
        namiPresale = _namiPresale;
    }


    /*/
     *  Constants
    /*/

    string public name = "Nami ICO";
    string public  symbol = "NAC";
    uint   public decimals = 18;

    bool public TRANSFERABLE = false; // default not transferable

    uint public constant TOKEN_SUPPLY_LIMIT = 1000000000 * (1 ether / 1 wei);
    
    uint public binary = 0;

    /*/
     *  Token state
    /*/

    enum Phase {
        Created,
        Running,
        Paused,
        Migrating,
        Migrated
    }

    Phase public currentPhase = Phase.Created;
    uint public totalSupply = 0; // amount of tokens already sold

    // escrow has exclusive priveleges to call administrative
    // functions on this contract.
    address public escrow;

    // Gathered funds can be withdrawn only to namimultisigwallet's address.
    address public namiMultiSigWallet;

    // nami presale contract
    address public namiPresale;

    // Crowdsale manager has exclusive priveleges to burn presale tokens.
    address public crowdsaleManager;
    
    // binary option address
    address public binaryAddress;
    
    // This creates an array with all balances
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    modifier onlyCrowdsaleManager() {
        require(msg.sender == crowdsaleManager); 
        _; 
    }

    modifier onlyEscrow() {
        require(msg.sender == escrow);
        _;
    }
    
    modifier onlyTranferable() {
        require(TRANSFERABLE);
        _;
    }
    
    modifier onlyNamiMultisig() {
        require(msg.sender == namiMultiSigWallet);
        _;
    }
    
    /*/
     *  Events
    /*/

    event LogBuy(address indexed owner, uint value);
    event LogBurn(address indexed owner, uint value);
    event LogPhaseSwitch(Phase newPhase);
    // Log migrate token
    event LogMigrate(address _from, address _to, uint256 amount);
    // This generates a public event on the blockchain that will notify clients
    event Transfer(address indexed from, address indexed to, uint256 value);

    /*/
     *  Public functions
    /*/

    /**
     * Internal transfer, only can be called by this contract
     */
    function _transfer(address _from, address _to, uint _value) internal {
        // Prevent transfer to 0x0 address. Use burn() instead
        require(_to != 0x0);
        // Check if the sender has enough
        require(balanceOf[_from] >= _value);
        // Check for overflows
        require(balanceOf[_to] + _value > balanceOf[_to]);
        // Save this for an assertion in the future
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        // Subtract from the sender
        balanceOf[_from] -= _value;
        // Add the same to the recipient
        balanceOf[_to] += _value;
        Transfer(_from, _to, _value);
        // Asserts are used to use static analysis to find bugs in your code. They should never fail
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }

    // Transfer the balance from owner's account to another account
    // only escrow can send token (to send token private sale)
    function transferForTeam(address _to, uint256 _value) public
        onlyEscrow
    {
        _transfer(msg.sender, _to, _value);
    }
    
    /**
     * Transfer tokens
     *
     * Send `_value` tokens to `_to` from your account
     *
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
    function transfer(address _to, uint256 _value) public
        onlyTranferable
    {
        _transfer(msg.sender, _to, _value);
    }
    
       /**
     * Transfer tokens from other address
     *
     * Send `_value` tokens to `_to` in behalf of `_from`
     *
     * @param _from The address of the sender
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
    function transferFrom(address _from, address _to, uint256 _value) 
        public
        onlyTranferable
        returns (bool success)
    {
        require(_value <= allowance[_from][msg.sender]);     // Check allowance
        allowance[_from][msg.sender] -= _value;
        _transfer(_from, _to, _value);
        return true;
    }

    /**
     * Set allowance for other address
     *
     * Allows `_spender` to spend no more than `_value` tokens in your behalf
     *
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     */
    function approve(address _spender, uint256 _value) public
        onlyTranferable
        returns (bool success) 
    {
        allowance[msg.sender][_spender] = _value;
        return true;
    }

    /**
     * Set allowance for other address and notify
     *
     * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it
     *
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     * @param _extraData some extra information to send to the approved contract
     */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData)
        public
        onlyTranferable
        returns (bool success) 
    {
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    }

    // allows transfer token
    function changeTransferable () public
        onlyEscrow
    {
        TRANSFERABLE = !TRANSFERABLE;
    }
    
    // change escrow
    function changeEscrow(address _escrow) public
        onlyNamiMultisig
    {
        require(_escrow != 0x0);
        escrow = _escrow;
    }
    
    // change binary value
    function changeBinary(uint _binary)
        public
        onlyEscrow
    {
        binary = _binary;
    }
    
    // change binary address
    function changeBinaryAddress(address _binaryAddress)
        public
        onlyEscrow
    {
        require(_binaryAddress != 0x0);
        binaryAddress = _binaryAddress;
    }
    
    /*
    * price in ICO:
    * first week: 1 ETH = 2400 NAC
    * second week: 1 ETH = 23000 NAC
    * 3rd week: 1 ETH = 2200 NAC
    * 4th week: 1 ETH = 2100 NAC
    * 5th week: 1 ETH = 2000 NAC
    * 6th week: 1 ETH = 1900 NAC
    * 7th week: 1 ETH = 1800 NAC
    * 8th week: 1 ETH = 1700 nac
    * time: 
    * 1517443200: Thursday, February 1, 2018 12:00:00 AM
    * 1518048000: Thursday, February 8, 2018 12:00:00 AM
    * 1518652800: Thursday, February 15, 2018 12:00:00 AM
    * 1519257600: Thursday, February 22, 2018 12:00:00 AM
    * 1519862400: Thursday, March 1, 2018 12:00:00 AM
    * 1520467200: Thursday, March 8, 2018 12:00:00 AM
    * 1521072000: Thursday, March 15, 2018 12:00:00 AM
    * 1521676800: Thursday, March 22, 2018 12:00:00 AM
    * 1522281600: Thursday, March 29, 2018 12:00:00 AM
    */
    function getPrice() public view returns (uint price) {
        if (now < 1517443200) {
            // presale
            return 3450;
        } else if (1517443200 < now && now <= 1518048000) {
            // 1st week
            return 2400;
        } else if (1518048000 < now && now <= 1518652800) {
            // 2nd week
            return 2300;
        } else if (1518652800 < now && now <= 1519257600) {
            // 3rd week
            return 2200;
        } else if (1519257600 < now && now <= 1519862400) {
            // 4th week
            return 2100;
        } else if (1519862400 < now && now <= 1520467200) {
            // 5th week
            return 2000;
        } else if (1520467200 < now && now <= 1521072000) {
            // 6th week
            return 1900;
        } else if (1521072000 < now && now <= 1521676800) {
            // 7th week
            return 1800;
        } else if (1521676800 < now && now <= 1522281600) {
            // 8th week
            return 1700;
        } else {
            return binary;
        }
    }


    function() payable public {
        buy(msg.sender);
    }
    
    
    function buy(address _buyer) payable public {
        // Available only if presale is running.
        require(currentPhase == Phase.Running);
        // require ICO time or binary option
        require(now <= 1522281600 || msg.sender == binaryAddress);
        require(msg.value != 0);
        uint newTokens = msg.value * getPrice();
        require (totalSupply + newTokens < TOKEN_SUPPLY_LIMIT);
        // add new token to buyer
        balanceOf[_buyer] = balanceOf[_buyer].add(newTokens);
        // add new token to totalSupply
        totalSupply = totalSupply.add(newTokens);
        LogBuy(_buyer,newTokens);
        Transfer(this,_buyer,newTokens);
    }
    

    /// @dev Returns number of tokens owned by given address.
    /// @param _owner Address of token owner.
    function burnTokens(address _owner) public
        onlyCrowdsaleManager
    {
        // Available only during migration phase
        require(currentPhase == Phase.Migrating);

        uint tokens = balanceOf[_owner];
        require(tokens != 0);
        balanceOf[_owner] = 0;
        totalSupply -= tokens;
        LogBurn(_owner, tokens);
        Transfer(_owner, crowdsaleManager, tokens);

        // Automatically switch phase when migration is done.
        if (totalSupply == 0) {
            currentPhase = Phase.Migrated;
            LogPhaseSwitch(Phase.Migrated);
        }
    }


    /*/
     *  Administrative functions
    /*/
    function setPresalePhase(Phase _nextPhase) public
        onlyEscrow
    {
        bool canSwitchPhase
            =  (currentPhase == Phase.Created && _nextPhase == Phase.Running)
            || (currentPhase == Phase.Running && _nextPhase == Phase.Paused)
                // switch to migration phase only if crowdsale manager is set
            || ((currentPhase == Phase.Running || currentPhase == Phase.Paused)
                && _nextPhase == Phase.Migrating
                && crowdsaleManager != 0x0)
            || (currentPhase == Phase.Paused && _nextPhase == Phase.Running)
                // switch to migrated only if everyting is migrated
            || (currentPhase == Phase.Migrating && _nextPhase == Phase.Migrated
                && totalSupply == 0);

        require(canSwitchPhase);
        currentPhase = _nextPhase;
        LogPhaseSwitch(_nextPhase);
    }


    function withdrawEther(uint _amount) public
        onlyEscrow
    {
        require(namiMultiSigWallet != 0x0);
        // Available at any phase.
        if (this.balance > 0) {
            namiMultiSigWallet.transfer(_amount);
        }
    }
    
    function safeWithdraw(address _withdraw, uint _amount) public
        onlyEscrow
    {
        NamiMultiSigWallet namiWallet = NamiMultiSigWallet(namiMultiSigWallet);
        if (namiWallet.isOwner(_withdraw)) {
            _withdraw.transfer(_amount);
        }
    }


    function setCrowdsaleManager(address _mgr) public
        onlyEscrow
    {
        // You can't change crowdsale contract when migration is in progress.
        require(currentPhase != Phase.Migrating);
        crowdsaleManager = _mgr;
    }

    // internal migrate migration tokens
    function _migrateToken(address _from, address _to)
        internal
    {
        PresaleToken presale = PresaleToken(namiPresale);
        uint256 newToken = presale.balanceOf(_from);
        require(newToken > 0);
        // burn old token
        presale.burnTokens(_from);
        // add new token to _to
        balanceOf[_to] = balanceOf[_to].add(newToken);
        // add new token to totalSupply
        totalSupply = totalSupply.add(newToken);
        LogMigrate(_from, _to, newToken);
        Transfer(this,_to,newToken);
    }

    // migate token function for Nami Team
    function migrateToken(address _from, address _to) public
        onlyEscrow
    {
        _migrateToken(_from, _to);
    }

    // migrate token for investor
    function migrateForInvestor() public {
        _migrateToken(msg.sender, msg.sender);
    }

    // Nami internal exchange
    
    // event for Nami exchange
    event TransferToBuyer(address indexed _from, address indexed _to, uint _value, address indexed _seller);
    event TransferToExchange(address indexed _from, address indexed _to, uint _value, uint _price);
    
    
    /**
     * @dev Transfer the specified amount of tokens to the NamiExchange address.
     *      Invokes the `tokenFallbackExchange` function.
     *      The token transfer fails if the recipient is a contract
     *      but does not implement the `tokenFallbackExchange` function
     *      or the fallback function to receive funds.
     *
     * @param _to    Receiver address.
     * @param _value Amount of tokens that will be transferred.
     * @param _price price to sell token.
     */
     
    function transferToExchange(address _to, uint _value, uint _price) public {
        uint codeLength;
        
        assembly {
            codeLength := extcodesize(_to)
        }
        
        balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value);
        balanceOf[_to] = balanceOf[_to].add(_value);
        Transfer(msg.sender,_to,_value);
        if (codeLength > 0) {
            ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
            receiver.tokenFallbackExchange(msg.sender, _value, _price);
            TransferToExchange(msg.sender, _to, _value, _price);
        }
    }
    
    /**
     * @dev Transfer the specified amount of tokens to the NamiExchange address.
     *      Invokes the `tokenFallbackBuyer` function.
     *      The token transfer fails if the recipient is a contract
     *      but does not implement the `tokenFallbackBuyer` function
     *      or the fallback function to receive funds.
     *
     * @param _to    Receiver address.
     * @param _value Amount of tokens that will be transferred.
     * @param _buyer address of seller.
     */
     
    function transferToBuyer(address _to, uint _value, address _buyer) public {
        uint codeLength;
        
        assembly {
            codeLength := extcodesize(_to)
        }
        
        balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value);
        balanceOf[_to] = balanceOf[_to].add(_value);
        Transfer(msg.sender,_to,_value);
        if (codeLength > 0) {
            ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
            receiver.tokenFallbackBuyer(msg.sender, _value, _buyer);
            TransferToBuyer(msg.sender, _to, _value, _buyer);
        }
    }
//-------------------------------------------------------------------------------------------------------
}


/*
* Binary option smart contract-------------------------------
*/
contract BinaryOption {
    /*
     * binary option controled by escrow to buy NAC with good price
     */
    // NamiCrowdSale address
    address public namiCrowdSaleAddr;
    address public escrow;
    
    // namiMultiSigWallet
    address public namiMultiSigWallet;
    
    Session public session;
    uint public timeInvestInMinute = 15;
    uint public timeOneSession = 20;
    uint public sessionId = 1;
    uint public rateWin = 100;
    uint public rateLoss = 20;
    uint public rateFee = 5;
    uint public constant MAX_INVESTOR = 20;
    uint public minimunEth = 10000000000000000; // minimunEth = 0.01 eth
    /**
     * Events for binany option system
     */
    event SessionOpen(uint timeOpen, uint indexed sessionId);
    event InvestClose(uint timeInvestClose, uint priceOpen, uint indexed sessionId);
    event Invest(address indexed investor, bool choose, uint amount, uint timeInvest, uint indexed sessionId);
    event SessionClose(uint timeClose, uint indexed sessionId, uint priceClose, uint nacPrice, uint rateWin, uint rateLoss, uint rateFee);

    event Deposit(address indexed sender, uint value);
    /// @dev Fallback function allows to deposit ether.
    function() public payable {
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }
    // there is only one session available at one timeOpen
    // priceOpen is price of ETH in USD
    // priceClose is price of ETH in USD
    // process of one Session
    // 1st: escrow reset session by run resetSession()
    // 2nd: escrow open session by run openSession() => save timeOpen at this time
    // 3rd: all investor can invest by run invest(), send minimum 0.1 ETH
    // 4th: escrow close invest and insert price open for this Session
    // 5th: escrow close session and send NAC for investor
    struct Session {
        uint priceOpen;
        uint priceClose;
        uint timeOpen;
        bool isReset;
        bool isOpen;
        bool investOpen;
        uint investorCount;
        mapping(uint => address) investor;
        mapping(uint => bool) win;
        mapping(uint => uint) amountInvest;
    }
    
    function BinaryOption(address _namiCrowdSale, address _escrow, address _namiMultiSigWallet) public {
        require(_namiCrowdSale != 0x0 && _escrow != 0x0);
        namiCrowdSaleAddr = _namiCrowdSale;
        escrow = _escrow;
        namiMultiSigWallet = _namiMultiSigWallet;
    }
    
    
    modifier onlyEscrow() {
        require(msg.sender==escrow);
        _;
    }
    
        
    modifier onlyNamiMultisig() {
        require(msg.sender == namiMultiSigWallet);
        _;
    }
    
    // change escrow
    function changeEscrow(address _escrow) public
        onlyNamiMultisig
    {
        require(_escrow != 0x0);
        escrow = _escrow;
    }
    
    // chagne minimunEth
    function changeMinEth(uint _minimunEth) public 
        onlyEscrow
    {
        require(_minimunEth != 0);
        minimunEth = _minimunEth;
    }
    
    /// @dev Change time for investor can invest in one session, can only change at time not in session
    /// @param _timeInvest time invest in minutes
    ///---------------------------change time function------------------------------
    function changeTimeInvest(uint _timeInvest)
        public
        onlyEscrow
    {
        require(!session.isOpen && _timeInvest < timeOneSession);
        timeInvestInMinute = _timeInvest;
    }

    function changeTimeOneSession(uint _timeOneSession) 
        public
        onlyEscrow
    {
        require(!session.isOpen && _timeOneSession > timeInvestInMinute);
        timeOneSession = _timeOneSession;
    }

    /////------------------------change rate function-------------------------------
    
    function changeRateWin(uint _rateWin)
        public
        onlyEscrow
    {
        require(!session.isOpen);
        rateWin = _rateWin;
    }
    
    function changeRateLoss(uint _rateLoss)
        public
        onlyEscrow
    {
        require(!session.isOpen);
        rateLoss = _rateLoss;
    }
    
    function changeRateFee(uint _rateFee)
        public
        onlyEscrow
    {
        require(!session.isOpen);
        rateFee = _rateFee;
    }
    
    
    /// @dev withdraw ether to nami multisignature wallet, only escrow can call
    /// @param _amount value ether in wei to withdraw
    function withdrawEther(uint _amount) public
        onlyEscrow
    {
        require(namiMultiSigWallet != 0x0);
        // Available at any phase.
        if (this.balance > 0) {
            namiMultiSigWallet.transfer(_amount);
        }
    }
    
    /// @dev safe withdraw Ether to one of owner of nami multisignature wallet
    /// @param _withdraw address to withdraw
    function safeWithdraw(address _withdraw, uint _amount) public
        onlyEscrow
    {
        NamiMultiSigWallet namiWallet = NamiMultiSigWallet(namiMultiSigWallet);
        if (namiWallet.isOwner(_withdraw)) {
            _withdraw.transfer(_amount);
        }
    }
    
    // @dev Returns list of owners.
    // @return List of owner addresses.
    // MAX_INVESTOR = 20
    function getInvestors()
        public
        view
        returns (address[20])
    {
        address[20] memory listInvestor;
        for (uint i = 0; i < MAX_INVESTOR; i++) {
            listInvestor[i] = session.investor[i];
        }
        return listInvestor;
    }
    
    function getChooses()
        public
        view
        returns (bool[20])
    {
        bool[20] memory listChooses;
        for (uint i = 0; i < MAX_INVESTOR; i++) {
            listChooses[i] = session.win[i];
        }
        return listChooses;
    }
    
    function getAmount()
        public
        view
        returns (uint[20])
    {
        uint[20] memory listAmount;
        for (uint i = 0; i < MAX_INVESTOR; i++) {
            listAmount[i] = session.amountInvest[i];
        }
        return listAmount;
    }
    
    /// @dev reset all data of previous session, must run before open new session
    // only escrow can call
    function resetSession()
        public
        onlyEscrow
    {
        require(!session.isReset && !session.isOpen);
        session.priceOpen = 0;
        session.priceClose = 0;
        session.isReset = true;
        session.isOpen = false;
        session.investOpen = false;
        session.investorCount = 0;
        for (uint i = 0; i < MAX_INVESTOR; i++) {
            session.investor[i] = 0x0;
            session.win[i] = false;
            session.amountInvest[i] = 0;
        }
    }
    
    /// @dev Open new session, only escrow can call
    function openSession ()
        public
        onlyEscrow
    {
        require(session.isReset && !session.isOpen);
        session.isReset = false;
        // open invest
        session.investOpen = true;
        session.timeOpen = now;
        session.isOpen = true;
        SessionOpen(now, sessionId);
    }
    
    /// @dev Fuction for investor, minimun ether send is 0.1, one address can call one time in one session
    /// @param _choose choise of investor, true is call, false is put
    function invest (bool _choose)
        public
        payable
    {
        require(msg.value >= minimunEth && session.investOpen); // msg.value >= 0.1 ether
        require(now < (session.timeOpen + timeInvestInMinute * 1 minutes));
        require(session.investorCount < MAX_INVESTOR);
        session.investor[session.investorCount] = msg.sender;
        session.win[session.investorCount] = _choose;
        session.amountInvest[session.investorCount] = msg.value;
        session.investorCount += 1;
        Invest(msg.sender, _choose, msg.value, now, sessionId);
    }
    
    /// @dev close invest for escrow
    /// @param _priceOpen price ETH in USD
    function closeInvest (uint _priceOpen) 
        public
        onlyEscrow
    {
        require(_priceOpen != 0 && session.investOpen);
        require(now > (session.timeOpen + timeInvestInMinute * 1 minutes));
        session.investOpen = false;
        session.priceOpen = _priceOpen;
        InvestClose(now, _priceOpen, sessionId);
    }
    
    /// @dev get amount of ether to buy NAC for investor
    /// @param _ether amount ether which investor invest
    /// @param _status true for investor win and false for investor loss
    function getEtherToBuy (uint _ether, bool _status)
        public
        view
        returns (uint)
    {
        if (_status) {
            return _ether * rateWin / 100;
        } else {
            return _ether * rateLoss / 100;
        }
    }

    /// @dev close session, only escrow can call
    /// @param _priceClose price of ETH in USD
    function closeSession (uint _priceClose)
        public
        onlyEscrow
    {
        require(_priceClose != 0 && now > (session.timeOpen + timeOneSession * 1 minutes));
        require(!session.investOpen && session.isOpen);
        session.priceClose = _priceClose;
        bool result = (_priceClose>session.priceOpen)?true:false;
        uint etherToBuy;
        NamiCrowdSale namiContract = NamiCrowdSale(namiCrowdSaleAddr);
        uint price = namiContract.getPrice();
        require(price != 0);
        for (uint i = 0; i < session.investorCount; i++) {
            if (session.win[i]==result) {
                etherToBuy = (session.amountInvest[i] - session.amountInvest[i] * rateFee / 100) * rateWin / 100;
                uint etherReturn = session.amountInvest[i] - session.amountInvest[i] * rateFee / 100;
                (session.investor[i]).transfer(etherReturn);
            } else {
                etherToBuy = (session.amountInvest[i] - session.amountInvest[i] * rateFee / 100) * rateLoss / 100;
            }
            namiContract.buy.value(etherToBuy)(session.investor[i]);
            // reset investor
            session.investor[i] = 0x0;
            session.win[i] = false;
            session.amountInvest[i] = 0;
        }
        session.isOpen = false;
        SessionClose(now, sessionId, _priceClose, price, rateWin, rateLoss, rateFee);
        sessionId += 1;
        
        // require(!session.isReset && !session.isOpen);
        // reset state session
        session.priceOpen = 0;
        session.priceClose = 0;
        session.isReset = true;
        session.investOpen = false;
        session.investorCount = 0;
    }
}


contract PresaleToken {
    mapping (address => uint256) public balanceOf;
    function burnTokens(address _owner) public;
}

 /*
 * Contract that is working with ERC223 tokens
 */
 
 /**
 * @title Contract that will work with ERC223 tokens.
 */
 
contract ERC223ReceivingContract {
/**
 * @dev Standard ERC223 function that will handle incoming token transfers.
 *
 * @param _from  Token sender address.
 * @param _value Amount of tokens.
 * @param _data  Transaction metadata.
 */
    function tokenFallback(address _from, uint _value, bytes _data) public returns (bool success);
    function tokenFallbackBuyer(address _from, uint _value, address _buyer) public returns (bool success);
    function tokenFallbackExchange(address _from, uint _value, uint _price) public returns (bool success);
}


 /*
 * Nami Internal Exchange smartcontract-----------------------------------------------------------------
 *
 */

contract NamiExchange {
    using SafeMath for uint;
    
    function NamiExchange(address _namiAddress) public {
        NamiAddr = _namiAddress;
    }

    event UpdateBid(address owner, uint price, uint balance);
    event UpdateAsk(address owner, uint price, uint volume);
    event BuyHistory(address indexed buyer, address indexed seller, uint price, uint volume, uint time);
    event SellHistory(address indexed seller, address indexed buyer, uint price, uint volume, uint time);

    
    mapping(address => OrderBid) public bid;
    mapping(address => OrderAsk) public ask;
    string public name = "NacExchange";
    
    /// address of Nami token
    address public NamiAddr;
    
    /// price of Nac = ETH/NAC
    uint public price = 1;
    // struct store order of user
    struct OrderBid {
        uint price;
        uint eth;
    }
    
    struct OrderAsk {
        uint price;
        uint volume;
    }
    
        
    // prevent lost ether
    function() payable public {
        require(msg.data.length != 0);
        require(msg.value == 0);
    }
    
    modifier onlyNami {
        require(msg.sender == NamiAddr);
        _;
    }
    
    /////////////////
    //---------------------------function about bid Order-----------------------------------------------------------
    
    function placeBuyOrder(uint _price) payable public {
        require(_price > 0 && msg.value > 0 && bid[msg.sender].eth == 0);
        if (msg.value > 0) {
            bid[msg.sender].eth = (bid[msg.sender].eth).add(msg.value);
            bid[msg.sender].price = _price;
            UpdateBid(msg.sender, _price, bid[msg.sender].eth);
        }
    }
    
    function sellNac(uint _value, address _buyer, uint _price) public returns (bool success) {
        require(_price == bid[_buyer].price && _buyer != msg.sender);
        NamiCrowdSale namiToken = NamiCrowdSale(NamiAddr);
        uint ethOfBuyer = bid[_buyer].eth;
        uint maxToken = ethOfBuyer.mul(bid[_buyer].price);
        require(namiToken.allowance(msg.sender, this) >= _value && _value > 0 && ethOfBuyer != 0 && _buyer != 0x0);
        if (_value > maxToken) {
            if (msg.sender.send(ethOfBuyer) && namiToken.transferFrom(msg.sender,_buyer,maxToken)) {
                // update order
                bid[_buyer].eth = 0;
                UpdateBid(_buyer, bid[_buyer].price, bid[_buyer].eth);
                BuyHistory(_buyer, msg.sender, bid[_buyer].price, maxToken, now);
                return true;
            } else {
                // revert anything
                revert();
            }
        } else {
            uint eth = _value.div(bid[_buyer].price);
            if (msg.sender.send(eth) && namiToken.transferFrom(msg.sender,_buyer,_value)) {
                // update order
                bid[_buyer].eth = (bid[_buyer].eth).sub(eth);
                UpdateBid(_buyer, bid[_buyer].price, bid[_buyer].eth);
                BuyHistory(_buyer, msg.sender, bid[_buyer].price, _value, now);
                return true;
            } else {
                // revert anything
                revert();
            }
        }
    }
    
    function closeBidOrder() public {
        require(bid[msg.sender].eth > 0 && bid[msg.sender].price > 0);
        // transfer ETH
        msg.sender.transfer(bid[msg.sender].eth);
        // update order
        bid[msg.sender].eth = 0;
        UpdateBid(msg.sender, bid[msg.sender].price, bid[msg.sender].eth);
    }
    

    ////////////////
    //---------------------------function about ask Order-----------------------------------------------------------
    
    // place ask order by send NAC to Nami Exchange contract
    // this function place sell order
    function tokenFallbackExchange(address _from, uint _value, uint _price) onlyNami public returns (bool success) {
        require(_price > 0 && _value > 0 && ask[_from].volume == 0);
        if (_value > 0) {
            ask[_from].volume = (ask[_from].volume).add(_value);
            ask[_from].price = _price;
            UpdateAsk(_from, _price, ask[_from].volume);
        }
        return true;
    }
    
    function closeAskOrder() public {
        require(ask[msg.sender].volume > 0 && ask[msg.sender].price > 0);
        NamiCrowdSale namiToken = NamiCrowdSale(NamiAddr);
        uint previousBalances = namiToken.balanceOf(msg.sender);
        // transfer token
        namiToken.transfer(msg.sender, ask[msg.sender].volume);
        // update order
        ask[msg.sender].volume = 0;
        UpdateAsk(msg.sender, ask[msg.sender].price, 0);
        // check balance
        assert(previousBalances < namiToken.balanceOf(msg.sender));
    }
    
    function buyNac(address _seller, uint _price) payable public returns (bool success) {
        require(msg.value > 0 && ask[_seller].volume > 0 && ask[_seller].price > 0);
        require(_price == ask[_seller].price && _seller != msg.sender);
        NamiCrowdSale namiToken = NamiCrowdSale(NamiAddr);
        uint maxEth = (ask[_seller].volume).div(ask[_seller].price);
        uint previousBalances = namiToken.balanceOf(msg.sender);
        if (msg.value > maxEth) {
            if (_seller.send(maxEth) && msg.sender.send(msg.value.sub(maxEth))) {
                // transfer token
                namiToken.transfer(msg.sender, ask[_seller].volume);
                SellHistory(_seller, msg.sender, ask[_seller].price, ask[_seller].volume, now);
                // update order
                ask[_seller].volume = 0;
                UpdateAsk(_seller, ask[_seller].price, 0);
                assert(previousBalances < namiToken.balanceOf(msg.sender));
                return true;
            } else {
                // revert anything
                revert();
            }
        } else {
            uint nac = (msg.value).mul(ask[_seller].price);
            if (_seller.send(msg.value)) {
                // transfer token
                namiToken.transfer(msg.sender, nac);
                // update order
                ask[_seller].volume = (ask[_seller].volume).sub(nac);
                UpdateAsk(_seller, ask[_seller].price, ask[_seller].volume);
                SellHistory(_seller, msg.sender, ask[_seller].price, nac, now);
                assert(previousBalances < namiToken.balanceOf(msg.sender));
                return true;
            } else {
                // revert anything
                revert();
            }
        }
    }
}

contract ERC23 {
  function balanceOf(address who) public constant returns (uint);
  function transfer(address to, uint value) public returns (bool success);
}



/*
* NamiMultiSigWallet smart contract-------------------------------
*/
/// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution.
contract NamiMultiSigWallet {

    uint constant public MAX_OWNER_COUNT = 50;

    event Confirmation(address indexed sender, uint indexed transactionId);
    event Revocation(address indexed sender, uint indexed transactionId);
    event Submission(uint indexed transactionId);
    event Execution(uint indexed transactionId);
    event ExecutionFailure(uint indexed transactionId);
    event Deposit(address indexed sender, uint value);
    event OwnerAddition(address indexed owner);
    event OwnerRemoval(address indexed owner);
    event RequirementChange(uint required);

    mapping (uint => Transaction) public transactions;
    mapping (uint => mapping (address => bool)) public confirmations;
    mapping (address => bool) public isOwner;
    address[] public owners;
    uint public required;
    uint public transactionCount;

    struct Transaction {
        address destination;
        uint value;
        bytes data;
        bool executed;
    }

    modifier onlyWallet() {
        require(msg.sender == address(this));
        _;
    }

    modifier ownerDoesNotExist(address owner) {
        require(!isOwner[owner]);
        _;
    }

    modifier ownerExists(address owner) {
        require(isOwner[owner]);
        _;
    }

    modifier transactionExists(uint transactionId) {
        require(transactions[transactionId].destination != 0);
        _;
    }

    modifier confirmed(uint transactionId, address owner) {
        require(confirmations[transactionId][owner]);
        _;
    }

    modifier notConfirmed(uint transactionId, address owner) {
        require(!confirmations[transactionId][owner]);
        _;
    }

    modifier notExecuted(uint transactionId) {
        require(!transactions[transactionId].executed);
        _;
    }

    modifier notNull(address _address) {
        require(_address != 0);
        _;
    }

    modifier validRequirement(uint ownerCount, uint _required) {
        require(!(ownerCount > MAX_OWNER_COUNT
            || _required > ownerCount
            || _required == 0
            || ownerCount == 0));
        _;
    }

    /// @dev Fallback function allows to deposit ether.
    function() public payable {
        if (msg.value > 0)
            Deposit(msg.sender, msg.value);
    }

    /*
     * Public functions
     */
    /// @dev Contract constructor sets initial owners and required number of confirmations.
    /// @param _owners List of initial owners.
    /// @param _required Number of required confirmations.
    function NamiMultiSigWallet(address[] _owners, uint _required)
        public
        validRequirement(_owners.length, _required)
    {
        for (uint i = 0; i < _owners.length; i++) {
            require(!(isOwner[_owners[i]] || _owners[i] == 0));
            isOwner[_owners[i]] = true;
        }
        owners = _owners;
        required = _required;
    }

    /// @dev Allows to add a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of new owner.
    function addOwner(address owner)
        public
        onlyWallet
        ownerDoesNotExist(owner)
        notNull(owner)
        validRequirement(owners.length + 1, required)
    {
        isOwner[owner] = true;
        owners.push(owner);
        OwnerAddition(owner);
    }

    /// @dev Allows to remove an owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner.
    function removeOwner(address owner)
        public
        onlyWallet
        ownerExists(owner)
    {
        isOwner[owner] = false;
        for (uint i=0; i<owners.length - 1; i++) {
            if (owners[i] == owner) {
                owners[i] = owners[owners.length - 1];
                break;
            }
        }
        owners.length -= 1;
        if (required > owners.length)
            changeRequirement(owners.length);
        OwnerRemoval(owner);
    }

    /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet.
    /// @param owner Address of owner to be replaced.
    /// @param owner Address of new owner.
    function replaceOwner(address owner, address newOwner)
        public
        onlyWallet
        ownerExists(owner)
        ownerDoesNotExist(newOwner)
    {
        for (uint i=0; i<owners.length; i++) {
            if (owners[i] == owner) {
                owners[i] = newOwner;
                break;
            }
        }
        isOwner[owner] = false;
        isOwner[newOwner] = true;
        OwnerRemoval(owner);
        OwnerAddition(newOwner);
    }

    /// @dev Allows to change the number of required confirmations. Transaction has to be sent by wallet.
    /// @param _required Number of required confirmations.
    function changeRequirement(uint _required)
        public
        onlyWallet
        validRequirement(owners.length, _required)
    {
        required = _required;
        RequirementChange(_required);
    }

    /// @dev Allows an owner to submit and confirm a transaction.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return Returns transaction ID.
    function submitTransaction(address destination, uint value, bytes data)
        public
        returns (uint transactionId)
    {
        transactionId = addTransaction(destination, value, data);
        confirmTransaction(transactionId);
    }

    /// @dev Allows an owner to confirm a transaction.
    /// @param transactionId Transaction ID.
    function confirmTransaction(uint transactionId)
        public
        ownerExists(msg.sender)
        transactionExists(transactionId)
        notConfirmed(transactionId, msg.sender)
    {
        confirmations[transactionId][msg.sender] = true;
        Confirmation(msg.sender, transactionId);
        executeTransaction(transactionId);
    }

    /// @dev Allows an owner to revoke a confirmation for a transaction.
    /// @param transactionId Transaction ID.
    function revokeConfirmation(uint transactionId)
        public
        ownerExists(msg.sender)
        confirmed(transactionId, msg.sender)
        notExecuted(transactionId)
    {
        confirmations[transactionId][msg.sender] = false;
        Revocation(msg.sender, transactionId);
    }

    /// @dev Allows anyone to execute a confirmed transaction.
    /// @param transactionId Transaction ID.
    function executeTransaction(uint transactionId)
        public
        notExecuted(transactionId)
    {
        if (isConfirmed(transactionId)) {
            // Transaction tx = transactions[transactionId];
            transactions[transactionId].executed = true;
            // tx.executed = true;
            if (transactions[transactionId].destination.call.value(transactions[transactionId].value)(transactions[transactionId].data)) {
                Execution(transactionId);
            } else {
                ExecutionFailure(transactionId);
                transactions[transactionId].executed = false;
            }
        }
    }

    /// @dev Returns the confirmation status of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Confirmation status.
    function isConfirmed(uint transactionId)
        public
        constant
        returns (bool)
    {
        uint count = 0;
        for (uint i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]])
                count += 1;
            if (count == required)
                return true;
        }
    }

    /*
     * Internal functions
     */
    /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet.
    /// @param destination Transaction target address.
    /// @param value Transaction ether value.
    /// @param data Transaction data payload.
    /// @return Returns transaction ID.
    function addTransaction(address destination, uint value, bytes data)
        internal
        notNull(destination)
        returns (uint transactionId)
    {
        transactionId = transactionCount;
        transactions[transactionId] = Transaction({
            destination: destination, 
            value: value,
            data: data,
            executed: false
        });
        transactionCount += 1;
        Submission(transactionId);
    }

    /*
     * Web3 call functions
     */
    /// @dev Returns number of confirmations of a transaction.
    /// @param transactionId Transaction ID.
    /// @return Number of confirmations.
    function getConfirmationCount(uint transactionId)
        public
        constant
        returns (uint count)
    {
        for (uint i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]])
                count += 1;
        }
    }

    /// @dev Returns total number of transactions after filers are applied.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return Total number of transactions after filters are applied.
    function getTransactionCount(bool pending, bool executed)
        public
        constant
        returns (uint count)
    {
        for (uint i = 0; i < transactionCount; i++) {
            if (pending && !transactions[i].executed || executed && transactions[i].executed)
                count += 1;
        }
    }

    /// @dev Returns list of owners.
    /// @return List of owner addresses.
    function getOwners()
        public
        constant
        returns (address[])
    {
        return owners;
    }

    /// @dev Returns array with owner addresses, which confirmed transaction.
    /// @param transactionId Transaction ID.
    /// @return Returns array of owner addresses.
    function getConfirmations(uint transactionId)
        public
        constant
        returns (address[] _confirmations)
    {
        address[] memory confirmationsTemp = new address[](owners.length);
        uint count = 0;
        uint i;
        for (i = 0; i < owners.length; i++) {
            if (confirmations[transactionId][owners[i]]) {
                confirmationsTemp[count] = owners[i];
                count += 1;
            }
        }
        _confirmations = new address[](count);
        for (i = 0; i < count; i++) {
            _confirmations[i] = confirmationsTemp[i];
        }
    }

    /// @dev Returns list of transaction IDs in defined range.
    /// @param from Index start position of transaction array.
    /// @param to Index end position of transaction array.
    /// @param pending Include pending transactions.
    /// @param executed Include executed transactions.
    /// @return Returns array of transaction IDs.
    function getTransactionIds(uint from, uint to, bool pending, bool executed)
        public
        constant
        returns (uint[] _transactionIds)
    {
        uint[] memory transactionIdsTemp = new uint[](transactionCount);
        uint count = 0;
        uint i;
        for (i = 0; i < transactionCount; i++) {
            if (pending && !transactions[i].executed || executed && transactions[i].executed) {
                transactionIdsTemp[count] = i;
                count += 1;
            }
        }
        _transactionIds = new uint[](to - from);
        for (i = from; i < to; i++) {
            _transactionIds[i - from] = transactionIdsTemp[i];
        }
    }
}

Contract ABI
[{"constant":true,"inputs":[],"name":"namiMultiSigWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rateFee","type":"uint256"}],"name":"changeRateFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeInvestInMinute","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_priceOpen","type":"uint256"}],"name":"closeInvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minimunEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rateWin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_choose","type":"bool"}],"name":"invest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_withdraw","type":"address"},{"name":"_amount","type":"uint256"}],"name":"safeWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minimunEth","type":"uint256"}],"name":"changeMinEth","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"session","outputs":[{"name":"priceOpen","type":"uint256"},{"name":"priceClose","type":"uint256"},{"name":"timeOpen","type":"uint256"},{"name":"isReset","type":"bool"},{"name":"isOpen","type":"bool"},{"name":"investOpen","type":"bool"},{"name":"investorCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_ether","type":"uint256"},{"name":"_status","type":"bool"}],"name":"getEtherToBuy","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rateFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_timeOneSession","type":"uint256"}],"name":"changeTimeOneSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"namiCrowdSaleAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getChooses","outputs":[{"name":"","type":"bool[20]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_timeInvest","type":"uint256"}],"name":"changeTimeInvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sessionId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_priceClose","type":"uint256"}],"name":"closeSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getInvestors","outputs":[{"name":"","type":"address[20]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rateLoss","type":"uint256"}],"name":"changeRateLoss","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAmount","outputs":[{"name":"","type":"uint256[20]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_INVESTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rateLoss","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_escrow","type":"address"}],"name":"changeEscrow","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"escrow","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rateWin","type":"uint256"}],"name":"changeRateWin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"openSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"resetSession","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeOneSession","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_namiCrowdSale","type":"address"},{"name":"_escrow","type":"address"},{"name":"_namiMultiSigWallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timeOpen","type":"uint256"},{"indexed":true,"name":"sessionId","type":"uint256"}],"name":"SessionOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timeInvestClose","type":"uint256"},{"indexed":false,"name":"priceOpen","type":"uint256"},{"indexed":true,"name":"sessionId","type":"uint256"}],"name":"InvestClose","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"investor","type":"address"},{"indexed":false,"name":"choose","type":"bool"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"timeInvest","type":"uint256"},{"indexed":true,"name":"sessionId","type":"uint256"}],"name":"Invest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timeClose","type":"uint256"},{"indexed":true,"name":"sessionId","type":"uint256"},{"indexed":false,"name":"priceClose","type":"uint256"},{"indexed":false,"name":"nacPrice","type":"uint256"},{"indexed":false,"name":"rateWin","type":"uint256"},{"indexed":false,"name":"rateLoss","type":"uint256"},{"indexed":false,"name":"rateFee","type":"uint256"}],"name":"SessionClose","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Deposit","type":"event"}]

Contract Creation Code
6060604052600f600b556014600c556001600d556064600e556014600f556005601055662386f26fc10000601155341561003857600080fd5b604051606080611ea68339810160405280805190602001909190805190602001909190805190602001909190505060008373ffffffffffffffffffffffffffffffffffffffff16141580156100a4575060008273ffffffffffffffffffffffffffffffffffffffff1614155b15156100af57600080fd5b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050611d23806101836000396000f300606060405260043610610180576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630321f836146101da578063073767fc1461022f5780631296aef3146102525780632c710cc81461027b578063320228ca1461029e5780633bed33ce146102c7578063480b1f21146102ea5780634cbabcdc146103135780635058c4601461032d5780635ca1cacc1461036f5780635e3568b8146103925780636052a849146103f15780636921278a146104335780636e06a9ce1461045c5780637e9d7f681461047f57806381e77878146104d457806395449ad5146105255780639648c9f414610548578063a3bfdf4714610571578063b2f5a54c14610594578063cb739c0f146105e5578063d321fe2914610608578063d39bbf0614610659578063d5e99dac14610682578063dcfcda2b146106ab578063e2fdcc17146106e4578063eeebb30c14610739578063f8635ece1461075c578063f8a3ce8214610771578063fa60744214610786575b60003411156101d8573373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a25b005b34156101e557600080fd5b6101ed6107af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023a57600080fd5b61025060048080359060200190919050506107d5565b005b341561025d57600080fd5b610265610859565b6040518082815260200191505060405180910390f35b341561028657600080fd5b61029c600480803590602001909190505061085f565b005b34156102a957600080fd5b6102b161096b565b6040518082815260200191505060405180910390f35b34156102d257600080fd5b6102e86004808035906020019091905050610971565b005b34156102f557600080fd5b6102fd610a9b565b6040518082815260200191505060405180910390f35b61032b60048080351515906020019091905050610aa1565b005b341561033857600080fd5b61036d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610c23565b005b341561037a57600080fd5b6103906004808035906020019091905050610daf565b005b341561039d57600080fd5b6103a5610e25565b6040518088815260200187815260200186815260200185151515158152602001841515151581526020018315151515815260200182815260200197505050505050505060405180910390f35b34156103fc57600080fd5b61041d60048080359060200190919080351515906020019091905050610e7c565b6040518082815260200191505060405180910390f35b341561043e57600080fd5b610446610eb6565b6040518082815260200191505060405180910390f35b341561046757600080fd5b61047d6004808035906020019091905050610ebc565b005b341561048a57600080fd5b610492610f4d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104df57600080fd5b6104e7610f72565b6040518082601460200280838360005b838110156105125780820151818401526020810190506104f7565b5050505090500191505060405180910390f35b341561053057600080fd5b6105466004808035906020019091905050610fe7565b005b341561055357600080fd5b61055b611078565b6040518082815260200191505060405180910390f35b341561057c57600080fd5b610592600480803590602001909190505061107e565b005b341561059f57600080fd5b6105a761164e565b6040518082601460200280838360005b838110156105d25780820151818401526020810190506105b7565b5050505090500191505060405180910390f35b34156105f057600080fd5b61060660048080359060200190919050506116fe565b005b341561061357600080fd5b61061b611782565b6040518082601460200280838360005b8381101561064657808201518184015260208101905061062b565b5050505090500191505060405180910390f35b341561066457600080fd5b61066c6117e4565b6040518082815260200191505060405180910390f35b341561068d57600080fd5b6106956117e9565b6040518082815260200191505060405180910390f35b34156106b657600080fd5b6106e2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506117ef565b005b34156106ef57600080fd5b6106f76118b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561074457600080fd5b61075a60048080359060200190919050506118db565b005b341561076757600080fd5b61076f61195f565b005b341561077c57600080fd5b610784611a90565b005b341561079157600080fd5b610799611c5e565b6040518082815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561083157600080fd5b6003800160019054906101000a900460ff1615151561084f57600080fd5b8060108190555050565b600b5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108bb57600080fd5b600081141580156108da57506003800160029054906101000a900460ff165b15156108e557600080fd5b603c600b540260036002015401421115156108ff57600080fd5b60006003800160026101000a81548160ff02191690831515021790555080600360000181905550600d547f823ba381586f21cf8f06e99ad2926a6fe5aeae1581c12b4920727caed5f3d6fe4283604051808381526020018281526020019250505060405180910390a250565b60115481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109cd57600080fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610a1557600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff16311115610a9857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610a9757600080fd5b5b50565b600e5481565b6011543410158015610ac157506003800160029054906101000a900460ff165b1515610acc57600080fd5b603c600b54026003600201540142101515610ae657600080fd5b6014600360040154101515610afa57600080fd5b3360036005016000600360040154815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060036006016000600360040154815260200190815260200160002060006101000a81548160ff02191690831515021790555034600360070160006003600401548152602001908152602001600020819055506001600360040160008282540192505081905550600d543373ffffffffffffffffffffffffffffffffffffffff167f5d2c0af2b8cbddfeaa324f20d1f17a373f11cc6553ab0505062fdaf0d219a8b58334426040518084151515158152602001838152602001828152602001935050505060405180910390a350565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c8157600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16632f54bf6e846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610d4957600080fd5b6102c65a03f11515610d5a57600080fd5b5050506040518051905015610daa578273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501515610da957600080fd5b5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0b57600080fd5b60008114151515610e1b57600080fd5b8060118190555050565b60038060000154908060010154908060020154908060030160009054906101000a900460ff16908060030160019054906101000a900460ff16908060030160029054906101000a900460ff16908060040154905087565b60008115610e9c576064600e548402811515610e9457fe5b049050610eb0565b6064600f548402811515610eac57fe5b0490505b92915050565b60105481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f1857600080fd5b6003800160019054906101000a900460ff16158015610f385750600b5481115b1515610f4357600080fd5b80600c8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f7a611c64565b610f82611c64565b60008090505b6014811015610fdf576003600601600082815260200190815260200160002060009054906101000a900460ff168282601481101515610fc357fe5b6020020190151590811515815250508080600101915050610f88565b819250505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561104357600080fd5b6003800160019054906101000a900460ff161580156110635750600c5481105b151561106e57600080fd5b80600b8190555050565b600d5481565b600080600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110e357600080fd5b600087141580156110ff5750603c600c54026003600201540142115b151561110a57600080fd5b6003800160029054906101000a900460ff1615801561113757506003800160019054906101000a900460ff165b151561114257600080fd5b86600360010181905550600360000154871161115f576000611162565b60015b95506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1693508373ffffffffffffffffffffffffffffffffffffffff166398d5fdca6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156111f457600080fd5b6102c65a03f1151561120557600080fd5b5050506040518051905092506000831415151561122157600080fd5b600091505b600360040154821015611554578515156003600601600084815260200190815260200160002060009054906101000a900460ff161515141561136f576064600e54606460105460036007016000878152602001908152602001600020540281151561128d57fe5b04600360070160008681526020019081526020016000205403028115156112b057fe5b04945060646010546003600701600085815260200190815260200160002054028115156112d957fe5b0460036007016000848152602001908152602001600020540390506003600501600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561136a57600080fd5b6113c1565b6064600f54606460105460036007016000878152602001908152602001600020540281151561139a57fe5b04600360070160008681526020019081526020016000205403028115156113bd57fe5b0494505b8373ffffffffffffffffffffffffffffffffffffffff1663f088d547866003600501600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b151561149157600080fd5b6125ee5a03f115156114a257600080fd5b5050505060006003600501600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006003600601600084815260200190815260200160002060006101000a81548160ff021916908315150217905550600060036007016000848152602001908152602001600020819055508180600101925050611226565b60006003800160016101000a81548160ff021916908315150217905550600d547fe4b270a17fc7afa9f11ba1ca6c63c6036bed2969c64a3821bfbdf6d8d82e8559428986600e54600f5460105460405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a26001600d600082825401925050819055506000600360000181905550600060036001018190555060016003800160006101000a81548160ff02191690831515021790555060006003800160026101000a81548160ff021916908315150217905550600060036004018190555050505050505050565b611656611c8f565b61165e611c8f565b60008090505b60148110156116f6576003600501600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682826014811015156116b257fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050611664565b819250505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175a57600080fd5b6003800160019054906101000a900460ff1615151561177857600080fd5b80600f8190555050565b61178a611cce565b611792611cce565b60008090505b60148110156117dc57600360070160008281526020019081526020016000205482826014811015156117c657fe5b6020020181815250508080600101915050611798565b819250505090565b601481565b600f5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561184b57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff161415151561187157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561193757600080fd5b6003800160019054906101000a900460ff1615151561195557600080fd5b80600e8190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119bb57600080fd5b6003800160009054906101000a900460ff1680156119e857506003800160019054906101000a900460ff16155b15156119f357600080fd5b60006003800160006101000a81548160ff02191690831515021790555060016003800160026101000a81548160ff0219169083151502179055504260036002018190555060016003800160016101000a81548160ff021916908315150217905550600d547f7111abf2be689b603c683618eb0b6454c8170a0034fe770ab03cb11de6c6422d426040518082815260200191505060405180910390a2565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611aee57600080fd5b6003800160009054906101000a900460ff16158015611b1c57506003800160019054906101000a900460ff16155b1515611b2757600080fd5b6000600360000181905550600060036001018190555060016003800160006101000a81548160ff02191690831515021790555060006003800160016101000a81548160ff02191690831515021790555060006003800160026101000a81548160ff0219169083151502179055506000600360040181905550600090505b6014811015611c5b5760006003600501600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006003600601600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600060036007016000838152602001908152602001600020819055508080600101915050611ba4565b50565b600c5481565b610280604051908101604052806014905b60001515815260200190600190039081611c755790505090565b610280604051908101604052806014905b600073ffffffffffffffffffffffffffffffffffffffff16815260200190600190039081611ca05790505090565b610280604051908101604052806014905b6000815260200190600190039081611cdf57905050905600a165627a7a72305820190001f81c0982ee89a4e0dbbf8bc43c0155e05bf6b7eaea636600755a7340f900290000000000000000000000009ee5f158d75290cd4d1af07e9121226dc91f800100000000000000000000000085c5e358fd445e73e3021bd86bbea0b4e93261d100000000000000000000000019c8081c72a61726c2582006aebf5b34445d5939


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

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ee5f158d75290cd4d1af07e9121226dc91f8001
Arg [1] : 00000000000000000000000085c5e358fd445e73e3021bd86bbea0b4e93261d1
Arg [2] : 00000000000000000000000019c8081c72a61726c2582006aebf5b34445d5939


   Swarm Source:
bzzr://190001f81c0982ee89a4e0dbbf8bc43c0155e05bf6b7eaea636600755a7340f9
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward