ETH Price: $3,078.49 (-1.76%)
Gas: 2 Gwei

Contract

0x701C244b988a513c945973dEFA05de933b23Fe1D
 
Transaction Hash
Method
Block
From
To
Value
0xf1fb4feea9224e883f766352a64af682e4f508928b00bcd88bc55f77c2373a28Transfer(pending)2024-05-20 0:41:081 hr ago1716165668IN
OpenANX Token
0 ETH(Pending)(Pending)
0xd00b2176342ad94e9ad7dcd118bf631db1f5d2df4f746c4009a74a6f63b83ea1Transfer(pending)2024-05-20 0:41:081 hr ago1716165668IN
OpenANX Token
0 ETH(Pending)(Pending)
0x1f06946a3f3f5206a78718924608f1ef1344e991196dd011575d88988df85ea9Transfer(pending)2024-05-20 0:41:081 hr ago1716165668IN
OpenANX Token
0 ETH(Pending)(Pending)
0xd560f756ff08a4962ba134f2cbc8793e48454219add766419f3e3dd172db1abcTransfer(pending)2024-05-20 0:41:041 hr ago1716165664IN
OpenANX Token
0 ETH(Pending)(Pending)
0x85a77c32ce5886968d3e5bd7fdd7f38118ee29818c1b84faf9206494c73d0089Transfer(pending)2024-05-20 0:41:041 hr ago1716165664IN
OpenANX Token
0 ETH(Pending)(Pending)
0x6c268ddaec9446a241ff96f4830ff3aa7761d18ee4de91c1a6954f25c74b7aa5Transfer(pending)2024-05-20 0:41:031 hr ago1716165663IN
OpenANX Token
0 ETH(Pending)(Pending)
0x5ee8d58e82e0bf06ad2fce4413e78bddb5c28f4d84fb3fdf481502af4daa9639Transfer(pending)2024-05-20 0:41:031 hr ago1716165663IN
OpenANX Token
0 ETH(Pending)(Pending)
0xd84f0a1ae13395d9b06bdac4b852d7f81a0278451b27cc353e93f0b99b125c19Transfer(pending)2024-05-19 12:02:0314 hrs ago1716120123IN
OpenANX Token
0 ETH(Pending)(Pending)
Approve199060462024-05-19 19:23:476 hrs ago1716146627IN
OpenANX Token
0 ETH0.00020244.38934605
Transfer199047202024-05-19 14:56:4711 hrs ago1716130607IN
OpenANX Token
0 ETH0.000127274.7194371
Transfer198924562024-05-17 21:45:592 days ago1715982359IN
OpenANX Token
0 ETH0.000239664.55686864
Transfer198874882024-05-17 5:03:352 days ago1715922215IN
OpenANX Token
0 ETH0.0007101220
Transfer198874182024-05-17 4:49:352 days ago1715921375IN
OpenANX Token
0 ETH0.000193833.68463547
Transfer198873142024-05-17 4:28:232 days ago1715920103IN
OpenANX Token
0 ETH0.000192483.660732
Transfer198749012024-05-15 10:51:594 days ago1715770319IN
OpenANX Token
0 ETH0.0003979814.76385438
Transfer198685442024-05-14 13:29:355 days ago1715693375IN
OpenANX Token
0 ETH0.0004412510.9508319
Transfer198658672024-05-14 4:28:355 days ago1715660915IN
OpenANX Token
0 ETH0.000103143.82469731
Transfer198658252024-05-14 4:20:115 days ago1715660411IN
OpenANX Token
0 ETH0.000182456.76525703
Transfer198655382024-05-14 3:22:235 days ago1715656943IN
OpenANX Token
0 ETH0.0015036355.77889997
Transfer198655052024-05-14 3:15:475 days ago1715656547IN
OpenANX Token
0 ETH0.0004125915.30559308
Transfer198654632024-05-14 3:07:235 days ago1715656043IN
OpenANX Token
0 ETH0.000233978.67967982
Transfer198654092024-05-14 2:56:355 days ago1715655395IN
OpenANX Token
0 ETH0.000133234.94266228
Transfer198653572024-05-14 2:45:595 days ago1715654759IN
OpenANX Token
0 ETH0.000103773.84947211
Transfer198573922024-05-13 0:02:477 days ago1715558567IN
OpenANX Token
0 ETH0.000077743.1098135
Transfer198548992024-05-12 15:41:597 days ago1715528519IN
OpenANX Token
0 ETH0.000143935.33953458
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
39713232017-07-04 5:00:332511 days ago1499144433
OpenANX Token
0.33 ETH
39713182017-07-04 4:59:132511 days ago1499144353
OpenANX Token
1 ETH
39713152017-07-04 4:58:402511 days ago1499144320
OpenANX Token
0.39867733 ETH
39713132017-07-04 4:58:202511 days ago1499144300
OpenANX Token
0.6 ETH
39713132017-07-04 4:58:202511 days ago1499144300
OpenANX Token
0.5 ETH
39713132017-07-04 4:58:202511 days ago1499144300
OpenANX Token
2 ETH
39713092017-07-04 4:57:092511 days ago1499144229
OpenANX Token
0.1 ETH
39713042017-07-04 4:56:092511 days ago1499144169
OpenANX Token
2.1 ETH
39713042017-07-04 4:56:092511 days ago1499144169
OpenANX Token
6.95 ETH
39713032017-07-04 4:55:542511 days ago1499144154
OpenANX Token
1.015 ETH
39713012017-07-04 4:55:012511 days ago1499144101
OpenANX Token
10.08 ETH
39712982017-07-04 4:54:222511 days ago1499144062
OpenANX Token
1.01 ETH
39712952017-07-04 4:53:312511 days ago1499144011
OpenANX Token
1 ETH
39712922017-07-04 4:52:252511 days ago1499143945
OpenANX Token
2.1908 ETH
39712872017-07-04 4:51:352511 days ago1499143895
OpenANX Token
1.989 ETH
39712842017-07-04 4:50:162511 days ago1499143816
OpenANX Token
1 ETH
39712842017-07-04 4:50:162511 days ago1499143816
OpenANX Token
0.5 ETH
39712792017-07-04 4:49:022511 days ago1499143742
OpenANX Token
1 ETH
39712782017-07-04 4:48:542511 days ago1499143734
OpenANX Token
5.01 ETH
39712782017-07-04 4:48:542511 days ago1499143734
OpenANX Token
1 ETH
39712782017-07-04 4:48:542511 days ago1499143734
OpenANX Token
0.99 ETH
39712762017-07-04 4:47:492511 days ago1499143669
OpenANX Token
0.345 ETH
39712732017-07-04 4:47:392511 days ago1499143659
OpenANX Token
0.039 ETH
39712732017-07-04 4:47:392511 days ago1499143659
OpenANX Token
2 ETH
39712732017-07-04 4:47:392511 days ago1499143659
OpenANX Token
6 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OpenANXToken

Compiler Version
v0.4.11+commit.68ef5810

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-06-21
*/

pragma solidity ^0.4.11;

// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - ERC20 Token Interface
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------


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


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - Owned contracts
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {

    // ------------------------------------------------------------------------
    // Current owner, and proposed new owner
    // ------------------------------------------------------------------------
    address public owner;
    address public newOwner;

    // ------------------------------------------------------------------------
    // Constructor - assign creator as the owner
    // ------------------------------------------------------------------------
    function Owned() {
        owner = msg.sender;
    }


    // ------------------------------------------------------------------------
    // Modifier to mark that a function can only be executed by the owner
    // ------------------------------------------------------------------------
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }


    // ------------------------------------------------------------------------
    // Owner can initiate transfer of contract to a new owner
    // ------------------------------------------------------------------------
    function transferOwnership(address _newOwner) onlyOwner {
        newOwner = _newOwner;
    }

 
    // ------------------------------------------------------------------------
    // New owner has to accept transfer of contract
    // ------------------------------------------------------------------------
    function acceptOwnership() {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
    event OwnershipTransferred(address indexed _from, address indexed _to);
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// Safe maths, borrowed from OpenZeppelin
// ----------------------------------------------------------------------------
library SafeMath {

    // ------------------------------------------------------------------------
    // Add a number to another number, checking for overflows
    // ------------------------------------------------------------------------
    function add(uint a, uint b) internal returns (uint) {
        uint c = a + b;
        assert(c >= a && c >= b);
        return c;
    }

    // ------------------------------------------------------------------------
    // Subtract a number from another number, checking for underflows
    // ------------------------------------------------------------------------
    function sub(uint a, uint b) internal returns (uint) {
        assert(b <= a);
        return a - b;
    }
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - Configuration
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// openANX crowdsale token smart contract - configuration parameters
// ----------------------------------------------------------------------------
contract OpenANXTokenConfig {

    // ------------------------------------------------------------------------
    // Token symbol(), name() and decimals()
    // ------------------------------------------------------------------------
    string public constant SYMBOL = "OAX";
    string public constant NAME = "openANX Token";
    uint8 public constant DECIMALS = 18;


    // ------------------------------------------------------------------------
    // Decimal factor for multiplications from OAX unit to OAX natural unit
    // ------------------------------------------------------------------------
    uint public constant DECIMALSFACTOR = 10**uint(DECIMALS);

    // ------------------------------------------------------------------------
    // Tranche 1 soft cap and hard cap, and total tokens
    // ------------------------------------------------------------------------
    uint public constant TOKENS_SOFT_CAP = 13000000 * DECIMALSFACTOR;
    uint public constant TOKENS_HARD_CAP = 30000000 * DECIMALSFACTOR;
    uint public constant TOKENS_TOTAL = 100000000 * DECIMALSFACTOR;

    // ------------------------------------------------------------------------
    // Tranche 1 crowdsale start date and end date
    // Do not use the `now` function here
    // Start - Thursday, 22-Jun-17 13:00:00 UTC / 1pm GMT 22 June 2017
    // End - Saturday, 22-Jul-17 13:00:00 UTC / 1pm GMT 22 July 2017 
    // ------------------------------------------------------------------------
    uint public constant START_DATE = 1498136400;
    uint public constant END_DATE = 1500728400;

    // ------------------------------------------------------------------------
    // 1 year and 2 year dates for locked tokens
    // Do not use the `now` function here 
    // ------------------------------------------------------------------------
    uint public constant LOCKED_1Y_DATE = START_DATE + 365 days;
    uint public constant LOCKED_2Y_DATE = START_DATE + 2 * 365 days;

    // ------------------------------------------------------------------------
    // Individual transaction contribution min and max amounts
    // Set to 0 to switch off, or `x ether`
    // ------------------------------------------------------------------------
    uint public CONTRIBUTIONS_MIN = 0 ether;
    uint public CONTRIBUTIONS_MAX = 0 ether;
}


// ----------------------------------------------------------------------------
// OAX 'openANX Token' crowdfunding contract - locked tokens
//
// Refer to http://openanx.org/ for further information.
//
// Enjoy. (c) openANX and BokkyPooBah / Bok Consulting Pty Ltd 2017. 
// The MIT Licence.
// ----------------------------------------------------------------------------



// ----------------------------------------------------------------------------
// Contract that holds the 1Y and 2Y locked token information
// ----------------------------------------------------------------------------
contract LockedTokens is OpenANXTokenConfig {
    using SafeMath for uint;

    // ------------------------------------------------------------------------
    // 1y and 2y locked totals, not including unsold tranche1 and all tranche2
    // tokens
    // ------------------------------------------------------------------------
    uint public constant TOKENS_LOCKED_1Y_TOTAL = 14000000 * DECIMALSFACTOR;
    uint public constant TOKENS_LOCKED_2Y_TOTAL = 26000000 * DECIMALSFACTOR;
    
    // ------------------------------------------------------------------------
    // Tokens locked for 1 year for sale 2 in the following account
    // ------------------------------------------------------------------------
    address public TRANCHE2_ACCOUNT = 0x813703Eb676f3B6C76dA75cBa0cbC49DdbCA7B37;

    // ------------------------------------------------------------------------
    // Current totalSupply of 1y and 2y locked tokens
    // ------------------------------------------------------------------------
    uint public totalSupplyLocked1Y;
    uint public totalSupplyLocked2Y;

    // ------------------------------------------------------------------------
    // Locked tokens mapping
    // ------------------------------------------------------------------------
    mapping (address => uint) public balancesLocked1Y;
    mapping (address => uint) public balancesLocked2Y;

    // ------------------------------------------------------------------------
    // Address of openANX crowdsale token contract
    // ------------------------------------------------------------------------
    ERC20Interface public tokenContract;


    // ------------------------------------------------------------------------
    // Constructor - called by crowdsale token contract
    // ------------------------------------------------------------------------
    function LockedTokens(address _tokenContract) {
        tokenContract = ERC20Interface(_tokenContract);

        // --- 1y locked tokens ---

        // Confirm 1Y totals        
        add1Y(0x4beE088efDBCC610EEEa101ded7204150AF1C8b9,1000000 * DECIMALSFACTOR);
        add1Y(0x839551201f866907Eb5017bE79cEB48aDa58650c,925000 * DECIMALSFACTOR);
        add1Y(0xa92d4Cd3412862386c234Be572Fe4A8FA4BB09c6,925000 * DECIMALSFACTOR);
        add1Y(0xECf2B5fce33007E5669D63de39a4c663e56958dD,925000 * DECIMALSFACTOR);
        add1Y(0xD6B7695bc74E2C950eb953316359Eab283C5Bda8,925000 * DECIMALSFACTOR);
        add1Y(0xBE3463Eae26398D55a7118683079264BcF3ab24B,150000 * DECIMALSFACTOR);
        add1Y(0xf47428Fb9A61c9f3312cB035AEE049FBa76ba62a,150000 * DECIMALSFACTOR);
        add1Y(0xfCcc77165D822Ef9004714d829bDC267C743658a,50000 * DECIMALSFACTOR);
        add1Y(0xaf8df2aCAec3d5d92dE42a6c19d7706A4F3E8D8b,50000 * DECIMALSFACTOR);
        add1Y(0x22a6f9693856374BF2922cd837d07F6670E7FA4d,250000 * DECIMALSFACTOR);
        add1Y(0x3F720Ca8FfF598F00a51DE32A8Cb58Ca73f22aDe,50000 * DECIMALSFACTOR);
        add1Y(0xBd0D1954B301E414F0b5D0827A69EC5dD559e50B,50000 * DECIMALSFACTOR);
        add1Y(0x2ad6B011FEcDE830c9cc4dc0d0b77F055D6b5990,50000 * DECIMALSFACTOR);
        add1Y(0x0c5cD0E971cA18a0F0E0d581f4B93FaD31D608B0,2000085 * DECIMALSFACTOR);
        add1Y(0xFaaDC4d80Eaf430Ab604337CB67d77eC763D3e23,200248 * DECIMALSFACTOR);
        add1Y(0xDAef46f89c264182Cd87Ce93B620B63c7AfB14f7,1616920 * DECIMALSFACTOR);
        add1Y(0x19cc59C30cE54706633dC29EdEbAE1efF1757b25,224980 * DECIMALSFACTOR);
        add1Y(0xa130fE5D399104CA5AF168fbbBBe19F95d739741,745918 * DECIMALSFACTOR);
        add1Y(0xC0cD1bf6F2939095a56B0DFa085Ba2886b84E7d1,745918 * DECIMALSFACTOR);
        add1Y(0xf2C26e79eD264B0E3e5A5DFb1Dd91EA61f512C6e,745918 * DECIMALSFACTOR);
        add1Y(0x5F876a8A5F1B66fbf3D0D119075b62aF4386e319,745918 * DECIMALSFACTOR);
        add1Y(0xb8E046570800Dd76720aF6d42d3cCae451F54f15,745920 * DECIMALSFACTOR);
        add1Y(0xA524fa65Aac4647fa7bA2c20D22F64450c351bBd,714286 * DECIMALSFACTOR);
        add1Y(0x27209b276C15a936BCE08D7D70f0c97aeb3CE8c3,13889 * DECIMALSFACTOR);

        assert(totalSupplyLocked1Y == TOKENS_LOCKED_1Y_TOTAL);

        // --- 2y locked tokens ---
        add2Y(0x4beE088efDBCC610EEEa101ded7204150AF1C8b9,1000000 * DECIMALSFACTOR);
        add2Y(0x839551201f866907Eb5017bE79cEB48aDa58650c,925000 * DECIMALSFACTOR);
        add2Y(0xa92d4Cd3412862386c234Be572Fe4A8FA4BB09c6,925000 * DECIMALSFACTOR);
        add2Y(0xECf2B5fce33007E5669D63de39a4c663e56958dD,925000 * DECIMALSFACTOR);
        add2Y(0xD6B7695bc74E2C950eb953316359Eab283C5Bda8,925000 * DECIMALSFACTOR);
        add2Y(0xBE3463Eae26398D55a7118683079264BcF3ab24B,150000 * DECIMALSFACTOR);
        add2Y(0xf47428Fb9A61c9f3312cB035AEE049FBa76ba62a,150000 * DECIMALSFACTOR);
        add2Y(0xfCcc77165D822Ef9004714d829bDC267C743658a,50000 * DECIMALSFACTOR);
        add2Y(0xDAef46f89c264182Cd87Ce93B620B63c7AfB14f7,500000 * DECIMALSFACTOR);
        add2Y(0xaf8df2aCAec3d5d92dE42a6c19d7706A4F3E8D8b,50000 * DECIMALSFACTOR);
        add2Y(0x22a6f9693856374BF2922cd837d07F6670E7FA4d,250000 * DECIMALSFACTOR);
        add2Y(0x3F720Ca8FfF598F00a51DE32A8Cb58Ca73f22aDe,50000 * DECIMALSFACTOR);
        add2Y(0xBd0D1954B301E414F0b5D0827A69EC5dD559e50B,50000 * DECIMALSFACTOR);
        add2Y(0x2ad6B011FEcDE830c9cc4dc0d0b77F055D6b5990,50000 * DECIMALSFACTOR);

        //treasury
        add2Y(0x990a2D172398007fcbd5078D84696BdD8cCDf7b2,20000000 * DECIMALSFACTOR);

        assert(totalSupplyLocked2Y == TOKENS_LOCKED_2Y_TOTAL);
    }


    // ------------------------------------------------------------------------
    // Add remaining tokens to locked 1y balances
    // ------------------------------------------------------------------------
    function addRemainingTokens() {
        // Only the crowdsale contract can call this function
        require(msg.sender == address(tokenContract));
        // Total tokens to be created
        uint remainingTokens = TOKENS_TOTAL;
        // Minus precommitments and public crowdsale tokens
        remainingTokens = remainingTokens.sub(tokenContract.totalSupply());
        // Minus 1y locked tokens
        remainingTokens = remainingTokens.sub(totalSupplyLocked1Y);
        // Minus 2y locked tokens
        remainingTokens = remainingTokens.sub(totalSupplyLocked2Y);
        // Unsold tranche1 and tranche2 tokens to be locked for 1y 
        add1Y(TRANCHE2_ACCOUNT, remainingTokens);
    }


    // ------------------------------------------------------------------------
    // Add to 1y locked balances and totalSupply
    // ------------------------------------------------------------------------
    function add1Y(address account, uint value) private {
        balancesLocked1Y[account] = balancesLocked1Y[account].add(value);
        totalSupplyLocked1Y = totalSupplyLocked1Y.add(value);
    }


    // ------------------------------------------------------------------------
    // Add to 2y locked balances and totalSupply
    // ------------------------------------------------------------------------
    function add2Y(address account, uint value) private {
        balancesLocked2Y[account] = balancesLocked2Y[account].add(value);
        totalSupplyLocked2Y = totalSupplyLocked2Y.add(value);
    }


    // ------------------------------------------------------------------------
    // 1y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked1Y(address account) constant returns (uint balance) {
        return balancesLocked1Y[account];
    }


    // ------------------------------------------------------------------------
    // 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked2Y(address account) constant returns (uint balance) {
        return balancesLocked2Y[account];
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked(address account) constant returns (uint balance) {
        return balancesLocked1Y[account].add(balancesLocked2Y[account]);
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked() constant returns (uint) {
        return totalSupplyLocked1Y + totalSupplyLocked2Y;
    }


    // ------------------------------------------------------------------------
    // An account can unlock their 1y locked tokens 1y after token launch date
    // ------------------------------------------------------------------------
    function unlock1Y() {
        require(now >= LOCKED_1Y_DATE);
        uint amount = balancesLocked1Y[msg.sender];
        require(amount > 0);
        balancesLocked1Y[msg.sender] = 0;
        totalSupplyLocked1Y = totalSupplyLocked1Y.sub(amount);
        if (!tokenContract.transfer(msg.sender, amount)) throw;
    }


    // ------------------------------------------------------------------------
    // An account can unlock their 2y locked tokens 2y after token launch date
    // ------------------------------------------------------------------------
    function unlock2Y() {
        require(now >= LOCKED_2Y_DATE);
        uint amount = balancesLocked2Y[msg.sender];
        require(amount > 0);
        balancesLocked2Y[msg.sender] = 0;
        totalSupplyLocked2Y = totalSupplyLocked2Y.sub(amount);
        if (!tokenContract.transfer(msg.sender, amount)) throw;
    }
}



// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals
// ----------------------------------------------------------------------------
contract ERC20Token is ERC20Interface, Owned {
    using SafeMath for uint;

    // ------------------------------------------------------------------------
    // symbol(), name() and decimals()
    // ------------------------------------------------------------------------
    string public symbol;
    string public name;
    uint8 public decimals;

    // ------------------------------------------------------------------------
    // Balances for each account
    // ------------------------------------------------------------------------
    mapping(address => uint) balances;

    // ------------------------------------------------------------------------
    // Owner of account approves the transfer of an amount to another account
    // ------------------------------------------------------------------------
    mapping(address => mapping (address => uint)) allowed;


    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function ERC20Token(
        string _symbol, 
        string _name, 
        uint8 _decimals, 
        uint _totalSupply
    ) Owned() {
        symbol = _symbol;
        name = _name;
        decimals = _decimals;
        totalSupply = _totalSupply;
        balances[owner] = _totalSupply;
    }


    // ------------------------------------------------------------------------
    // Get the account balance of another account with address _owner
    // ------------------------------------------------------------------------
    function balanceOf(address _owner) constant returns (uint balance) {
        return balances[_owner];
    }


    // ------------------------------------------------------------------------
    // Transfer the balance from owner's account to another account
    // ------------------------------------------------------------------------
    function transfer(address _to, uint _amount) returns (bool success) {
        if (balances[msg.sender] >= _amount             // User has balance
            && _amount > 0                              // Non-zero transfer
            && balances[_to] + _amount > balances[_to]  // Overflow check
        ) {
            balances[msg.sender] = balances[msg.sender].sub(_amount);
            balances[_to] = balances[_to].add(_amount);
            Transfer(msg.sender, _to, _amount);
            return true;
        } else {
            return false;
        }
    }


    // ------------------------------------------------------------------------
    // Allow _spender to withdraw from your account, multiple times, up to the
    // _value amount. If this function is called again it overwrites the
    // current allowance with _value.
    // ------------------------------------------------------------------------
    function approve(
        address _spender,
        uint _amount
    ) returns (bool success) {
        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }


    // ------------------------------------------------------------------------
    // Spender of tokens transfer an amount of tokens from the token owner's
    // balance to another account. The owner of the tokens must already
    // have approve(...)-d this transfer
    // ------------------------------------------------------------------------
    function transferFrom(
        address _from,
        address _to,
        uint _amount
    ) returns (bool success) {
        if (balances[_from] >= _amount                  // From a/c has balance
            && allowed[_from][msg.sender] >= _amount    // Transfer approved
            && _amount > 0                              // Non-zero transfer
            && balances[_to] + _amount > balances[_to]  // Overflow check
        ) {
            balances[_from] = balances[_from].sub(_amount);
            allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount);
            balances[_to] = balances[_to].add(_amount);
            Transfer(_from, _to, _amount);
            return true;
        } else {
            return false;
        }
    }


    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(
        address _owner, 
        address _spender
    ) constant returns (uint remaining) {
        return allowed[_owner][_spender];
    }
}


// ----------------------------------------------------------------------------
// openANX crowdsale token smart contract
// ----------------------------------------------------------------------------
contract OpenANXToken is ERC20Token, OpenANXTokenConfig {

    // ------------------------------------------------------------------------
    // Has the crowdsale been finalised?
    // ------------------------------------------------------------------------
    bool public finalised = false;

    // ------------------------------------------------------------------------
    // Number of tokens per 1,000 ETH
    // This can be adjusted as the ETH/USD rate changes
    //
    // Indicative rate of ETH per token of 0.00290923 at 8 June 2017
    // 
    // This is the same as 1 / 0.00290923 = 343.733565238912015 OAX per ETH
    //
    // tokensPerEther  = 343.733565238912015
    // tokensPerKEther = 343,733.565238912015
    // tokensPerKEther = 343,734 rounded to an uint, six significant figures
    // ------------------------------------------------------------------------
    uint public tokensPerKEther = 343734;

    // ------------------------------------------------------------------------
    // Locked Tokens - holds the 1y and 2y locked tokens information
    // ------------------------------------------------------------------------
    LockedTokens public lockedTokens;

    // ------------------------------------------------------------------------
    // Wallet receiving the raised funds 
    // ------------------------------------------------------------------------
    address public wallet;

    // ------------------------------------------------------------------------
    // Crowdsale participant's accounts need to be KYC verified KYC before
    // the participant can move their tokens
    // ------------------------------------------------------------------------
    mapping(address => bool) public kycRequired;


    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    function OpenANXToken(address _wallet) 
        ERC20Token(SYMBOL, NAME, DECIMALS, 0)
    {
        wallet = _wallet;
        lockedTokens = new LockedTokens(this);
        require(address(lockedTokens) != 0x0);
    }

    // ------------------------------------------------------------------------
    // openANX can change the crowdsale wallet address
    // Can be set at any time before or during the crowdsale
    // Not relevant after the crowdsale is finalised as no more contributions
    // are accepted
    // ------------------------------------------------------------------------
    function setWallet(address _wallet) onlyOwner {
        wallet = _wallet;
        WalletUpdated(wallet);
    }
    event WalletUpdated(address newWallet);


    // ------------------------------------------------------------------------
    // openANX can set number of tokens per 1,000 ETH
    // Can only be set before the start of the crowdsale
    // ------------------------------------------------------------------------
    function setTokensPerKEther(uint _tokensPerKEther) onlyOwner {
        require(now < START_DATE);
        require(_tokensPerKEther > 0);
        tokensPerKEther = _tokensPerKEther;
        TokensPerKEtherUpdated(tokensPerKEther);
    }
    event TokensPerKEtherUpdated(uint tokensPerKEther);


    // ------------------------------------------------------------------------
    // Accept ethers to buy tokens during the crowdsale
    // ------------------------------------------------------------------------
    function () payable {
        proxyPayment(msg.sender);
    }


    // ------------------------------------------------------------------------
    // Accept ethers from one account for tokens to be created for another
    // account. Can be used by exchanges to purchase tokens on behalf of 
    // it's user
    // ------------------------------------------------------------------------
    function proxyPayment(address participant) payable {
        // No contributions after the crowdsale is finalised
        require(!finalised);

        // No contributions before the start of the crowdsale
        require(now >= START_DATE);
        // No contributions after the end of the crowdsale
        require(now <= END_DATE);

        // No contributions below the minimum (can be 0 ETH)
        require(msg.value >= CONTRIBUTIONS_MIN);
        // No contributions above a maximum (if maximum is set to non-0)
        require(CONTRIBUTIONS_MAX == 0 || msg.value < CONTRIBUTIONS_MAX);

        // Calculate number of tokens for contributed ETH
        // `18` is the ETH decimals
        // `- decimals` is the token decimals
        // `+ 3` for the tokens per 1,000 ETH factor
        uint tokens = msg.value * tokensPerKEther / 10**uint(18 - decimals + 3);

        // Check if the hard cap will be exceeded
        require(totalSupply + tokens <= TOKENS_HARD_CAP);

        // Add tokens purchased to account's balance and total supply
        balances[participant] = balances[participant].add(tokens);
        totalSupply = totalSupply.add(tokens);

        // Log the tokens purchased 
        Transfer(0x0, participant, tokens);
        TokensBought(participant, msg.value, this.balance, tokens,
             totalSupply, tokensPerKEther);

        // KYC verification required before participant can transfer the tokens
        kycRequired[participant] = true;

        // Transfer the contributed ethers to the crowdsale wallet
        if (!wallet.send(msg.value)) throw;
    }
    event TokensBought(address indexed buyer, uint ethers, 
        uint newEtherBalance, uint tokens, uint newTotalSupply, 
        uint tokensPerKEther);


    // ------------------------------------------------------------------------
    // openANX to finalise the crowdsale - to adding the locked tokens to 
    // this contract and the total supply
    // ------------------------------------------------------------------------
    function finalise() onlyOwner {
        // Can only finalise if raised > soft cap or after the end date
        require(totalSupply >= TOKENS_SOFT_CAP || now > END_DATE);

        // Can only finalise once
        require(!finalised);

        // Calculate and add remaining tokens to locked balances
        lockedTokens.addRemainingTokens();

        // Allocate locked and premined tokens
        balances[address(lockedTokens)] = balances[address(lockedTokens)].
            add(lockedTokens.totalSupplyLocked());
        totalSupply = totalSupply.add(lockedTokens.totalSupplyLocked());

        // Can only finalise once
        finalised = true;
    }


    // ------------------------------------------------------------------------
    // openANX to add precommitment funding token balance before the crowdsale
    // commences
    // ------------------------------------------------------------------------
    function addPrecommitment(address participant, uint balance) onlyOwner {
        require(now < START_DATE);
        require(balance > 0);
        balances[participant] = balances[participant].add(balance);
        totalSupply = totalSupply.add(balance);
        Transfer(0x0, participant, balance);
    }
    event PrecommitmentAdded(address indexed participant, uint balance);


    // ------------------------------------------------------------------------
    // Transfer the balance from owner's account to another account, with KYC
    // verification check for the crowdsale participant's first transfer
    // ------------------------------------------------------------------------
    function transfer(address _to, uint _amount) returns (bool success) {
        // Cannot transfer before crowdsale ends
        require(finalised);
        // Cannot transfer if KYC verification is required
        require(!kycRequired[msg.sender]);
        // Standard transfer
        return super.transfer(_to, _amount);
    }


    // ------------------------------------------------------------------------
    // Spender of tokens transfer an amount of tokens from the token owner's
    // balance to another account, with KYC verification check for the
    // crowdsale participant's first transfer
    // ------------------------------------------------------------------------
    function transferFrom(address _from, address _to, uint _amount) 
        returns (bool success)
    {
        // Cannot transfer before crowdsale ends
        require(finalised);
        // Cannot transfer if KYC verification is required
        require(!kycRequired[_from]);
        // Standard transferFrom
        return super.transferFrom(_from, _to, _amount);
    }


    // ------------------------------------------------------------------------
    // openANX to KYC verify the participant's account
    // ------------------------------------------------------------------------
    function kycVerify(address participant) onlyOwner {
        kycRequired[participant] = false;
        KycVerified(participant);
    }
    event KycVerified(address indexed participant);


    // ------------------------------------------------------------------------
    // Any account can burn _from's tokens as long as the _from account has 
    // approved the _amount to be burnt using
    //   approve(0x0, _amount)
    // ------------------------------------------------------------------------
    function burnFrom(
        address _from,
        uint _amount
    ) returns (bool success) {
        if (balances[_from] >= _amount                  // From a/c has balance
            && allowed[_from][0x0] >= _amount           // Transfer approved
            && _amount > 0                              // Non-zero transfer
            && balances[0x0] + _amount > balances[0x0]  // Overflow check
        ) {
            balances[_from] = balances[_from].sub(_amount);
            allowed[_from][0x0] = allowed[_from][0x0].sub(_amount);
            balances[0x0] = balances[0x0].add(_amount);
            totalSupply = totalSupply.sub(_amount);
            Transfer(_from, 0x0, _amount);
            return true;
        } else {
            return false;
        }
    }


    // ------------------------------------------------------------------------
    // 1y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked1Y(address account) constant returns (uint balance) {
        return lockedTokens.balanceOfLocked1Y(account);
    }


    // ------------------------------------------------------------------------
    // 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked2Y(address account) constant returns (uint balance) {
        return lockedTokens.balanceOfLocked2Y(account);
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked balances for an account
    // ------------------------------------------------------------------------
    function balanceOfLocked(address account) constant returns (uint balance) {
        return lockedTokens.balanceOfLocked(account);
    }


    // ------------------------------------------------------------------------
    // 1y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked1Y() constant returns (uint) {
        if (finalised) {
            return lockedTokens.totalSupplyLocked1Y();
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // 2y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked2Y() constant returns (uint) {
        if (finalised) {
            return lockedTokens.totalSupplyLocked2Y();
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // 1y and 2y locked total supply
    // ------------------------------------------------------------------------
    function totalSupplyLocked() constant returns (uint) {
        if (finalised) {
            return lockedTokens.totalSupplyLocked();
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // Unlocked total supply
    // ------------------------------------------------------------------------
    function totalSupplyUnlocked() constant returns (uint) {
        if (finalised && totalSupply >= lockedTokens.totalSupplyLocked()) {
            return totalSupply.sub(lockedTokens.totalSupplyLocked());
        } else {
            return 0;
        }
    }


    // ------------------------------------------------------------------------
    // openANX can transfer out any accidentally sent ERC20 tokens
    // ------------------------------------------------------------------------
    function transferAnyERC20Token(address tokenAddress, uint amount)
      onlyOwner returns (bool success) 
    {
        return ERC20Interface(tokenAddress).transfer(owner, amount);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_TOTAL","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokensPerKEther","type":"uint256"}],"name":"setTokensPerKEther","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lockedTokens","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"kycVerify","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOfLocked1Y","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"finalised","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTIONS_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"START_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"},{"name":"balance","type":"uint256"}],"name":"addPrecommitment","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_SOFT_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"END_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyLocked","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyLocked2Y","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"}],"name":"burnFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_HARD_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"DECIMALSFACTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTIONS_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"LOCKED_2Y_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"finalise","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerKEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"kycRequired","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOfLocked2Y","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyLocked1Y","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyUnlocked","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setWallet","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOfLocked","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"LOCKED_1Y_DATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"participant","type":"address"}],"name":"proxyPayment","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_wallet","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newWallet","type":"address"}],"name":"WalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensPerKEther","type":"uint256"}],"name":"TokensPerKEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"ethers","type":"uint256"},{"indexed":false,"name":"newEtherBalance","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"},{"indexed":false,"name":"newTotalSupply","type":"uint256"},{"indexed":false,"name":"tokensPerKEther","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"PrecommitmentAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"KycVerified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]

606060405260006008819055600955600a805460ff1916905562053eb6600b5534156200002857fe5b6040516020806200386483398101604052515b604060405190810160405280600381526020017f4f41580000000000000000000000000000000000000000000000000000000000815250604060405190810160405280600d81526020017f6f70656e414e5820546f6b656e00000000000000000000000000000000000000815250601260005b5b60018054600160a060020a03191633600160a060020a03161790555b8351620000e0906003906020870190620001aa565b508251620000f6906004906020860190620001aa565b506005805460ff191660ff84161790556000818155600154600160a060020a031681526006602052604090208190555b5050600d8054600160a060020a031916600160a060020a038516179055503090506200015162000230565b600160a060020a03909116815260405190819003602001906000f08015156200017657fe5b600c8054600160a060020a031916600160a060020a039283161790819055161515620001a25760006000fd5b5b5062000265565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ed57805160ff19168380011785556200021d565b828001600101855582156200021d579182015b828111156200021d57825182559160200191906001019062000200565b5b506200022c92915062000241565b5090565b604051611661806200220383390190565b6200026291905b808211156200022c576000815560010162000248565b5090565b90565b611f8e80620002756000396000f3006060604052361561022d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461023f578063095ea7b3146102cf5780630b743021146103025780630e9d02cc146103245780630eb347401461033957806318160ddd146103655780631881b0f0146103875780631ab3c515146103a5578063214bb60f146103d357806323b872dd146103f75780632da13d5e146104305780632e0f262514610452578063313ce56714610478578063372c65331461049e5780633818d907146104c05780633a9f967e146104e1578063521eb27314610503578063545599ff1461052f5780635834192214610551578063622c77fe1461057357806370a082311461059557806379ba5097146105c357806379cc6790146105d5578063831a1754146106085780638bc04eb71461062a5780638da5cb5b1461064c57806393fea1841461067857806395d89b411461069a578063978c5b151461072a578063a3f4df7e1461074c578063a4399263146107dc578063a5bc770c146107ee578063a9059cbb14610810578063b7121da414610843578063bc5dc16814610873578063c0c3da9c146108a1578063c0f5dc97146108c3578063d4ee1d90146108e5578063dc39d06d14610911578063dd62ed3e14610944578063deaa59df14610978578063e960bb4814610996578063f2fde38b146109c4578063f4509fc2146109e2578063f48c305414610a04578063f76f8d7814610a1a575b61023d5b61023a33610aaa565b5b565b005b341561024757fe5b61024f610c96565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d757fe5b6102ee600160a060020a0360043516602435610d24565b604080519115158252519081900360200190f35b341561030a57fe5b610312610d8f565b60408051918252519081900360200190f35b341561032c57fe5b61023d600435610d9e565b005b341561034157fe5b610349610e16565b60408051600160a060020a039092168252519081900360200190f35b341561036d57fe5b610312610e25565b60408051918252519081900360200190f35b341561038f57fe5b61023d600160a060020a0360043516610e2b565b005b34156103ad57fe5b610312600160a060020a0360043516610e92565b60408051918252519081900360200190f35b34156103db57fe5b6102ee610f1d565b604080519115158252519081900360200190f35b34156103ff57fe5b6102ee600160a060020a0360043581169060243516604435610f26565b604080519115158252519081900360200190f35b341561043857fe5b610312610f77565b60408051918252519081900360200190f35b341561045a57fe5b610462610f7d565b6040805160ff9092168252519081900360200190f35b341561048057fe5b610462610f82565b6040805160ff9092168252519081900360200190f35b34156104a657fe5b610312610f8b565b60408051918252519081900360200190f35b34156104c857fe5b61023d600160a060020a0360043516602435610f93565b005b34156104e957fe5b61031261105d565b60408051918252519081900360200190f35b341561050b57fe5b61034961106c565b60408051600160a060020a039092168252519081900360200190f35b341561053757fe5b61031261107b565b60408051918252519081900360200190f35b341561055957fe5b610312611083565b60408051918252519081900360200190f35b341561057b57fe5b610312611104565b60408051918252519081900360200190f35b341561059d57fe5b610312600160a060020a036004351661119f565b60408051918252519081900360200190f35b34156105cb57fe5b61023d6111be565b005b34156105dd57fe5b6102ee600160a060020a036004351660243561124b565b604080519115158252519081900360200190f35b341561061057fe5b61031261142c565b60408051918252519081900360200190f35b341561063257fe5b61031261143b565b60408051918252519081900360200190f35b341561065457fe5b610349611447565b60408051600160a060020a039092168252519081900360200190f35b341561068057fe5b610312611456565b60408051918252519081900360200190f35b34156106a257fe5b61024f61145c565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561073257fe5b6103126114ea565b60408051918252519081900360200190f35b341561075457fe5b61024f6114f2565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107e457fe5b61023d611529565b005b34156107f657fe5b610312611744565b60408051918252519081900360200190f35b341561081857fe5b6102ee600160a060020a036004351660243561174a565b604080519115158252519081900360200190f35b341561084b57fe5b6102ee600160a060020a0360043516611799565b604080519115158252519081900360200190f35b341561087b57fe5b610312600160a060020a03600435166117ae565b60408051918252519081900360200190f35b34156108a957fe5b610312611839565b60408051918252519081900360200190f35b34156108cb57fe5b6103126118d4565b60408051918252519081900360200190f35b34156108ed57fe5b6103496119db565b60408051600160a060020a039092168252519081900360200190f35b341561091957fe5b6102ee600160a060020a03600435166024356119ea565b604080519115158252519081900360200190f35b341561094c57fe5b610312600160a060020a0360043581169060243516611a9b565b60408051918252519081900360200190f35b341561098057fe5b61023d600160a060020a0360043516611ac8565b005b341561099e57fe5b610312600160a060020a0360043516611b4d565b60408051918252519081900360200190f35b34156109cc57fe5b61023d600160a060020a0360043516611bd8565b005b34156109ea57fe5b610312611c21565b60408051918252519081900360200190f35b61023d600160a060020a0360043516610aaa565b005b3415610a2257fe5b61024f611c29565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600a5460009060ff1615610abe5760006000fd5b63594bbf50421015610ad05760006000fd5b6359734c50421115610ae25760006000fd5b600854341015610af25760006000fd5b6009541580610b02575060095434105b1515610b0e5760006000fd5b600554600b54600360ff92831660120301909116600a0a903402811515610b3157fe5b60005491900491506a18d0bf423c03d8de0000009082011115610b545760006000fd5b600160a060020a038216600090815260066020526040902054610b7d908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554610baa908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a3600054600b546040805134815230600160a060020a039081163160208301528183018690526060820194909452608081019290925251918416917f6a7381bdc8f4e7ed3c0f0c299382777bde88a65f0c27f670235401d1544546309181900360a00190a2600160a060020a038083166000908152600e6020526040808220805460ff19166001179055600d5490519216913480156108fc0292909190818181858888f193505050501515610c915760006000fd5b5b5050565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b600160a060020a03338116600081815260076020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b6a52b7d2dcc80cd2e400000081565b60015433600160a060020a03908116911614610dba5760006000fd5b63594bbf504210610dcb5760006000fd5b60008111610dd95760006000fd5b600b8190556040805182815290517fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab9181900360200190a15b5b50565b600c54600160a060020a031681565b60005481565b60015433600160a060020a03908116911614610e475760006000fd5b600160a060020a0381166000818152600e6020526040808220805460ff19169055517fb3e6054663369578ee4831fc6c8ee9486db04e6f78b939250094785f6b6a430b9190a25b5b50565b600c54604080516000602091820181905282517f1ab3c515000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152935191949390931692631ab3c51592602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460ff1681565b600a5460009060ff161515610f3b5760006000fd5b600160a060020a0384166000908152600e602052604090205460ff1615610f625760006000fd5b610f6d848484611c88565b90505b9392505050565b60085481565b601281565b60055460ff1681565b63594bbf5081565b60015433600160a060020a03908116911614610faf5760006000fd5b63594bbf504210610fc05760006000fd5b60008111610fce5760006000fd5b600160a060020a038216600090815260066020526040902054610ff7908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554611024908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a35b5b5050565b6a0ac0db698068112d00000081565b600d54600160a060020a031681565b6359734c5081565b600a5460009060ff16156110fc57600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b5060005b5b90565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517f622c77fe0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363622c77fe9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600160a060020a0381166000908152600660205260409020545b919050565b60025433600160a060020a039081169116146111da5760006000fd5b600254600154604051600160a060020a0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600160a060020a0382166000908152600660205260408120548290108015906112985750600160a060020a0383166000908152600760209081526040808320838052909152902054829010155b80156112a45750600082115b80156112db57506000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f854828101115b1561141d57600160a060020a038316600090815260066020526040902054611309908363ffffffff611e1d16565b600160a060020a0384166000908152600660209081526040808320939093556007815282822082805290522054611346908363ffffffff611e1d16565b600160a060020a0384166000908152600760209081526040808320838052825290912091909155600690527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546113a3908363ffffffff611c6016565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f891909155546113e3908363ffffffff611e1d16565b6000908155604080518481529051600160a060020a03861691600080516020611f43833981519152919081900360200190a3506001610d89565b506000610d89565b5b92915050565b6a18d0bf423c03d8de00000081565b670de0b6b3a764000081565b600154600160a060020a031681565b60095481565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b635d0e265081565b60408051808201909152600d81527f6f70656e414e5820546f6b656e00000000000000000000000000000000000000602082015281565b60015433600160a060020a039081169116146115455760006000fd5b6000546a0ac0db698068112d0000009010158061156557506359734c5042115b15156115715760006000fd5b600a5460ff16156115825760006000fd5b600c54604080517fe9d7f3090000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163e9d7f3099160048082019260009290919082900301818387803b15156115dd57fe5b6102c65a03f115156115eb57fe5b5050506116a2600c60009054906101000a9004600160a060020a0316600160a060020a031663583419226000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b151561166557fe5b6102c65a03f1151561167357fe5b50506040805151600c54600160a060020a0316600090815260066020529190912054915063ffffffff611c6016565b600c8054600160a060020a03908116600090815260066020908152604080832095909555925484518401829052845160e160020a632c1a0c91028152945161173095919093169363583419229360048084019492939192918390030190829087803b151561170c57fe5b6102c65a03f1151561171a57fe5b505060405151600054915063ffffffff611c6016565b600055600a805460ff191660011790555b5b565b600b5481565b600a5460009060ff16151561175f5760006000fd5b600160a060020a0333166000908152600e602052604090205460ff16156117865760006000fd5b6117908383611e34565b90505b92915050565b600e6020526000908152604090205460ff1681565b600c54604080516000602091820181905282517fbc5dc168000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263bc5dc16892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517fc0c3da9c0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c0c3da9c9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600a5460009060ff16801561194e5750600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b151561193257fe5b6102c65a03f1151561194057fe5b505060405151600054101590505b156110fc57600c546040805160006020918201819052825160e160020a632c1a0c9102815292516119c894600160a060020a0316936358341922936004808301949193928390030190829087803b15156119a457fe5b6102c65a03f115156119b257fe5b505060405151600054915063ffffffff611e1d16565b9050611100565b506000611100565b5b90565b600254600160a060020a031681565b60015460009033600160a060020a03908116911614611a095760006000fd5b600154604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0394851660048201526024810187905292519387169363a9059cbb9360448082019493918390030190829087803b1515611a7c57fe5b6102c65a03f11515611a8a57fe5b5050604051519150505b5b92915050565b600160a060020a038083166000908152600760209081526040808320938516835292905220545b92915050565b60015433600160a060020a03908116911614611ae45760006000fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560408051929091168252517f4edbfac5b40fe46ac1af1fd222b224b38cfeeb9e21bd4fc6344526c245f7549b916020908290030190a15b5b50565b600c54604080516000602091820181905282517fe960bb48000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263e960bb4892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b60015433600160a060020a03908116911614611bf45760006000fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b635b2cf2d081565b60408051808201909152600381527f4f41580000000000000000000000000000000000000000000000000000000000602082015281565b6000828201838110801590611c755750828110155b1515611c7d57fe5b8091505b5092915050565b600160a060020a038316600090815260066020526040812054829010801590611cd85750600160a060020a0380851660009081526007602090815260408083203390941683529290522054829010155b8015611ce45750600082115b8015611d095750600160a060020a038316600090815260066020526040902054828101115b15611e0d57600160a060020a038416600090815260066020526040902054611d37908363ffffffff611e1d16565b600160a060020a0380861660009081526006602090815260408083209490945560078152838220339093168252919091522054611d7a908363ffffffff611e1d16565b600160a060020a0380861660009081526007602090815260408083203385168452825280832094909455918616815260069091522054611dc0908363ffffffff611c6016565b600160a060020a038085166000818152600660209081526040918290209490945580518681529051919392881692600080516020611f4383398151915292918290030190a3506001610f70565b506000610f70565b5b9392505050565b600082821115611e2957fe5b508082035b92915050565b600160a060020a033316600090815260066020526040812054829010801590611e5d5750600082115b8015611e825750600160a060020a038316600090815260066020526040902054828101115b1561141d57600160a060020a033316600090815260066020526040902054611eb0908363ffffffff611e1d16565b600160a060020a033381166000908152600660205260408082209390935590851681522054611ee5908363ffffffff611c6016565b600160a060020a03808516600081815260066020908152604091829020949094558051868152905191933390931692600080516020611f4383398151915292918290030190a3506001610d89565b506000610d89565b5b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582002d82e12d01419074eb87e3b53edd24e33c5ad021933496454ed30b3c41a4d1600296060604052600080805560015560028054600160a060020a03191673813703eb676f3b6c76da75cba0cbc49ddbca7b3717905534156200003b57fe5b6040516020806200166183398101604052515b60078054600160a060020a031916600160a060020a038316179055620000a1734bee088efdbcc610eeea101ded7204150af1c8b969d3c21bcecceda10000006401000000006200092a810262000b351704565b620000d973839551201f866907eb5017be79ceb48ada58650c69c3e059b8e3f56820000064010000000062000b356200092a82021704565b6200011173a92d4cd3412862386c234be572fe4a8fa4bb09c669c3e059b8e3f56820000064010000000062000b356200092a82021704565b6200014973ecf2b5fce33007e5669d63de39a4c663e56958dd69c3e059b8e3f56820000064010000000062000b356200092a82021704565b6200018173d6b7695bc74e2c950eb953316359eab283c5bda869c3e059b8e3f56820000064010000000062000b356200092a82021704565b620001b973be3463eae26398d55a7118683079264bcf3ab24b691fc3842bd1f071c0000064010000000062000b356200092a82021704565b620001f173f47428fb9a61c9f3312cb035aee049fba76ba62a691fc3842bd1f071c0000064010000000062000b356200092a82021704565b6200022973fccc77165d822ef9004714d829bdc267c743658a690a968163f0a57b40000064010000000062000b356200092a82021704565b6200026173af8df2acaec3d5d92de42a6c19d7706a4f3e8d8b690a968163f0a57b40000064010000000062000b356200092a82021704565b620002997322a6f9693856374bf2922cd837d07f6670e7fa4d6934f086f3b33b6840000064010000000062000b356200092a82021704565b620002d1733f720ca8fff598f00a51de32a8cb58ca73f22ade690a968163f0a57b40000064010000000062000b356200092a82021704565b6200030973bd0d1954b301e414f0b5d0827a69ec5dd559e50b690a968163f0a57b40000064010000000062000b356200092a82021704565b62000341732ad6b011fecde830c9cc4dc0d0b77f055d6b5990690a968163f0a57b40000064010000000062000b356200092a82021704565b6200037a730c5cd0e971ca18a0f0e0d581f4b93fad31d608b06a01a788d33a4381d634000064010000000062000b356200092a82021704565b620003b273faadc4d80eaf430ab604337cb67d77ec763d3e23692a677740c0a015e0000064010000000062000b356200092a82021704565b620003eb73daef46f89c264182cd87ce93b620b63c7afb14f76a01566568a986aee160000064010000000062000b356200092a82021704565b620004237319cc59c30ce54706633dc29edebae1eff1757b25692fa430b374df96d0000064010000000062000b356200092a82021704565b6200045b73a130fe5d399104ca5af168fbbbbe19f95d739741699df44bb9dd0f2038000064010000000062000b356200092a82021704565b6200049373c0cd1bf6f2939095a56b0dfa085ba2886b84e7d1699df44bb9dd0f2038000064010000000062000b356200092a82021704565b620004cb73f2c26e79ed264b0e3e5a5dfb1dd91ea61f512c6e699df44bb9dd0f2038000064010000000062000b356200092a82021704565b62000503735f876a8a5f1b66fbf3d0d119075b62af4386e319699df44bb9dd0f2038000064010000000062000b356200092a82021704565b6200053b73b8e046570800dd76720af6d42d3ccae451f54f15699df4677b4a766f00000064010000000062000b356200092a82021704565b6200057373a524fa65aac4647fa7ba2c20d22f64450c351bbd699741858ac693ebf8000064010000000062000b356200092a82021704565b620005ab7327209b276c15a936bce08d7d70f0c97aeb3ce8c36902f0ec9848ec9864000064010000000062000b356200092a82021704565b6003546a0b949d854f34fece00000014620005c257fe5b620005fa734bee088efdbcc610eeea101ded7204150af1c8b969d3c21bcecceda100000064010000000062000b926200099b82021704565b6200063273839551201f866907eb5017be79ceb48ada58650c69c3e059b8e3f56820000064010000000062000b926200099b82021704565b6200066a73a92d4cd3412862386c234be572fe4a8fa4bb09c669c3e059b8e3f56820000064010000000062000b926200099b82021704565b620006a273ecf2b5fce33007e5669d63de39a4c663e56958dd69c3e059b8e3f56820000064010000000062000b926200099b82021704565b620006da73d6b7695bc74e2c950eb953316359eab283c5bda869c3e059b8e3f56820000064010000000062000b926200099b82021704565b6200071273be3463eae26398d55a7118683079264bcf3ab24b691fc3842bd1f071c0000064010000000062000b926200099b82021704565b6200074a73f47428fb9a61c9f3312cb035aee049fba76ba62a691fc3842bd1f071c0000064010000000062000b926200099b82021704565b6200078273fccc77165d822ef9004714d829bdc267c743658a690a968163f0a57b40000064010000000062000b926200099b82021704565b620007ba73daef46f89c264182cd87ce93b620b63c7afb14f76969e10de76676d080000064010000000062000b926200099b82021704565b620007f273af8df2acaec3d5d92de42a6c19d7706a4f3e8d8b690a968163f0a57b40000064010000000062000b926200099b82021704565b6200082a7322a6f9693856374bf2922cd837d07f6670e7fa4d6934f086f3b33b6840000064010000000062000b926200099b82021704565b62000862733f720ca8fff598f00a51de32a8cb58ca73f22ade690a968163f0a57b40000064010000000062000b926200099b82021704565b6200089a73bd0d1954b301e414f0b5d0827a69ec5dd559e50b690a968163f0a57b40000064010000000062000b926200099b82021704565b620008d2732ad6b011fecde830c9cc4dc0d0b77f055d6b5990690a968163f0a57b40000064010000000062000b926200099b82021704565b6200090b73990a2d172398007fcbd5078d84696bdd8ccdf7b26a108b2a2c2802909400000064010000000062000b926200099b82021704565b6004546a1581b6d300d0225a000000146200092257fe5b5b5062000a36565b600160a060020a0382166000908152600560205260409020546200095d908264010000000062000b0d62000a0c82021704565b600160a060020a03831660009081526005602052604090205560035462000993908264010000000062000b0d62000a0c82021704565b6003555b5050565b600160a060020a038216600090815260066020526040902054620009ce908264010000000062000b0d62000a0c82021704565b600160a060020a03831660009081526006602052604090205560045462000a04908264010000000062000b0d62000a0c82021704565b6004555b5050565b600082820183811080159062000a225750828110155b151562000a2b57fe5b8091505b5092915050565b610c1b8062000a466000396000f300606060405236156101675763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630b74302181146101695780631a6f56a01461018b5780631ab3c515146101b95780632da13d5e146101e75780632e0f262514610209578063372c65331461022f57806338c80857146102515780633a9f967e14610263578063400ee78314610285578063545599ff146102a757806355a373d6146102c957806358341922146102f5578063622c77fe1461031757806376e403ec146103395780637f592be414610367578063831a1754146103935780638bc04eb7146103b557806393fea184146103d7578063978c5b15146103f9578063a3f4df7e1461041b578063bc5dc168146104ab578063c0c3da9c146104d9578063e5494be1146104fb578063e960bb481461050d578063e9d7f3091461053b578063f4509fc21461054d578063f76f8d781461056f578063ffb00df1146105ff575bfe5b341561017157fe5b610179610621565b60408051918252519081900360200190f35b341561019357fe5b610179600160a060020a0360043516610630565b60408051918252519081900360200190f35b34156101c157fe5b610179600160a060020a0360043516610642565b60408051918252519081900360200190f35b34156101ef57fe5b610179610661565b60408051918252519081900360200190f35b341561021157fe5b610219610667565b6040805160ff9092168252519081900360200190f35b341561023757fe5b61017961066c565b60408051918252519081900360200190f35b341561025957fe5b610261610674565b005b341561026b57fe5b610179610779565b60408051918252519081900360200190f35b341561028d57fe5b610179610788565b60408051918252519081900360200190f35b34156102af57fe5b610179610797565b60408051918252519081900360200190f35b34156102d157fe5b6102d961079f565b60408051600160a060020a039092168252519081900360200190f35b34156102fd57fe5b6101796107ae565b60408051918252519081900360200190f35b341561031f57fe5b6101796107b9565b60408051918252519081900360200190f35b341561034157fe5b610179600160a060020a03600435166107bf565b60408051918252519081900360200190f35b341561036f57fe5b6102d96107d1565b60408051600160a060020a039092168252519081900360200190f35b341561039b57fe5b6101796107e0565b60408051918252519081900360200190f35b34156103bd57fe5b6101796107ef565b60408051918252519081900360200190f35b34156103df57fe5b6101796107fb565b60408051918252519081900360200190f35b341561040157fe5b610179610801565b60408051918252519081900360200190f35b341561042357fe5b61042b610809565b604080516020808252835181830152835191928392908301918501908083838215610471575b80518252602083111561047157601f199092019160209182019101610451565b505050905090810190601f16801561049d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104b357fe5b610179600160a060020a0360043516610840565b60408051918252519081900360200190f35b34156104e157fe5b61017961085f565b60408051918252519081900360200190f35b341561050357fe5b610261610865565b005b341561051557fe5b610179600160a060020a036004351661096b565b60408051918252519081900360200190f35b341561054357fe5b6102616109a6565b005b341561055557fe5b610179610aa8565b60408051918252519081900360200190f35b341561057757fe5b61042b610ab0565b604080516020808252835181830152835191928392908301918501908083838215610471575b80518252602083111561047157601f199092019160209182019101610451565b505050905090810190601f16801561049d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561060757fe5b610179610ae7565b60408051918252519081900360200190f35b6a52b7d2dcc80cd2e400000081565b60066020526000908152604090205481565b600160a060020a0381166000908152600560205260409020545b919050565b60005481565b601281565b63594bbf5081565b6000635b2cf2d04210156106885760006000fd5b50600160a060020a0333166000908152600560205260408120549081116106af5760006000fd5b600160a060020a0333166000908152600560205260408120556003546106db908263ffffffff610af616565b600355600754604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018790529351939094169363a9059cbb936044808301949391928390030190829087803b151561075357fe5b6102c65a03f1151561076157fe5b505060405151151590506107755760006000fd5b5b50565b6a0ac0db698068112d00000081565b6a0b949d854f34fece00000081565b6359734c5081565b600754600160a060020a031681565b600454600354015b90565b60045481565b60056020526000908152604090205481565b600254600160a060020a031681565b6a18d0bf423c03d8de00000081565b670de0b6b3a764000081565b60015481565b635d0e265081565b60408051808201909152600d81527f6f70656e414e5820546f6b656e00000000000000000000000000000000000000602082015281565b600160a060020a0381166000908152600660205260409020545b919050565b60035481565b6000635d0e26504210156108795760006000fd5b50600160a060020a0333166000908152600660205260408120549081116108a05760006000fd5b600160a060020a0333166000908152600660205260408120556004546108cc908263ffffffff610af616565b6004908155600754604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0333811696820196909652602481018790529251949093169363a9059cbb936044808501948390030190829087803b151561075357fe5b6102c65a03f1151561076157fe5b505060405151151590506107755760006000fd5b5b50565b600160a060020a038116600090815260066020908152604080832054600590925282205461099e9163ffffffff610b0d16565b90505b919050565b60075460009033600160a060020a039081169116146109c55760006000fd5b50600754604080516000602091820181905282517f18160ddd00000000000000000000000000000000000000000000000000000000815292516a52b7d2dcc80cd2e400000094610a5d94600160a060020a03909116936318160ddd9360048084019492938390030190829087803b1515610a3b57fe5b6102c65a03f11515610a4957fe5b50506040515183915063ffffffff610af616565b9050610a7460035482610af690919063ffffffff16565b9050610a8b60045482610af690919063ffffffff16565b60025490915061077590600160a060020a031682610b35565b5b50565b635b2cf2d081565b60408051808201909152600381527f4f41580000000000000000000000000000000000000000000000000000000000602082015281565b6a1581b6d300d0225a00000081565b600082821115610b0257fe5b508082035b92915050565b6000828201838110801590610b225750828110155b1515610b2a57fe5b8091505b5092915050565b600160a060020a038216600090815260056020526040902054610b5e908263ffffffff610b0d16565b600160a060020a038316600090815260056020526040902055600354610b8a908263ffffffff610b0d16565b6003555b5050565b600160a060020a038216600090815260066020526040902054610bbb908263ffffffff610b0d16565b600160a060020a038316600090815260066020526040902055600454610be7908263ffffffff610b0d16565b6004555b50505600a165627a7a723058201ebf78c948e9b064875413e10729508a8cb3f4fc7b2decd423f81a4a0a420b8000290000000000000000000000002b3b67c6dffc2bcdda2315491eac9bbe868fbcdd

Deployed Bytecode

0x6060604052361561022d5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde03811461023f578063095ea7b3146102cf5780630b743021146103025780630e9d02cc146103245780630eb347401461033957806318160ddd146103655780631881b0f0146103875780631ab3c515146103a5578063214bb60f146103d357806323b872dd146103f75780632da13d5e146104305780632e0f262514610452578063313ce56714610478578063372c65331461049e5780633818d907146104c05780633a9f967e146104e1578063521eb27314610503578063545599ff1461052f5780635834192214610551578063622c77fe1461057357806370a082311461059557806379ba5097146105c357806379cc6790146105d5578063831a1754146106085780638bc04eb71461062a5780638da5cb5b1461064c57806393fea1841461067857806395d89b411461069a578063978c5b151461072a578063a3f4df7e1461074c578063a4399263146107dc578063a5bc770c146107ee578063a9059cbb14610810578063b7121da414610843578063bc5dc16814610873578063c0c3da9c146108a1578063c0f5dc97146108c3578063d4ee1d90146108e5578063dc39d06d14610911578063dd62ed3e14610944578063deaa59df14610978578063e960bb4814610996578063f2fde38b146109c4578063f4509fc2146109e2578063f48c305414610a04578063f76f8d7814610a1a575b61023d5b61023a33610aaa565b5b565b005b341561024757fe5b61024f610c96565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102d757fe5b6102ee600160a060020a0360043516602435610d24565b604080519115158252519081900360200190f35b341561030a57fe5b610312610d8f565b60408051918252519081900360200190f35b341561032c57fe5b61023d600435610d9e565b005b341561034157fe5b610349610e16565b60408051600160a060020a039092168252519081900360200190f35b341561036d57fe5b610312610e25565b60408051918252519081900360200190f35b341561038f57fe5b61023d600160a060020a0360043516610e2b565b005b34156103ad57fe5b610312600160a060020a0360043516610e92565b60408051918252519081900360200190f35b34156103db57fe5b6102ee610f1d565b604080519115158252519081900360200190f35b34156103ff57fe5b6102ee600160a060020a0360043581169060243516604435610f26565b604080519115158252519081900360200190f35b341561043857fe5b610312610f77565b60408051918252519081900360200190f35b341561045a57fe5b610462610f7d565b6040805160ff9092168252519081900360200190f35b341561048057fe5b610462610f82565b6040805160ff9092168252519081900360200190f35b34156104a657fe5b610312610f8b565b60408051918252519081900360200190f35b34156104c857fe5b61023d600160a060020a0360043516602435610f93565b005b34156104e957fe5b61031261105d565b60408051918252519081900360200190f35b341561050b57fe5b61034961106c565b60408051600160a060020a039092168252519081900360200190f35b341561053757fe5b61031261107b565b60408051918252519081900360200190f35b341561055957fe5b610312611083565b60408051918252519081900360200190f35b341561057b57fe5b610312611104565b60408051918252519081900360200190f35b341561059d57fe5b610312600160a060020a036004351661119f565b60408051918252519081900360200190f35b34156105cb57fe5b61023d6111be565b005b34156105dd57fe5b6102ee600160a060020a036004351660243561124b565b604080519115158252519081900360200190f35b341561061057fe5b61031261142c565b60408051918252519081900360200190f35b341561063257fe5b61031261143b565b60408051918252519081900360200190f35b341561065457fe5b610349611447565b60408051600160a060020a039092168252519081900360200190f35b341561068057fe5b610312611456565b60408051918252519081900360200190f35b34156106a257fe5b61024f61145c565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561073257fe5b6103126114ea565b60408051918252519081900360200190f35b341561075457fe5b61024f6114f2565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156107e457fe5b61023d611529565b005b34156107f657fe5b610312611744565b60408051918252519081900360200190f35b341561081857fe5b6102ee600160a060020a036004351660243561174a565b604080519115158252519081900360200190f35b341561084b57fe5b6102ee600160a060020a0360043516611799565b604080519115158252519081900360200190f35b341561087b57fe5b610312600160a060020a03600435166117ae565b60408051918252519081900360200190f35b34156108a957fe5b610312611839565b60408051918252519081900360200190f35b34156108cb57fe5b6103126118d4565b60408051918252519081900360200190f35b34156108ed57fe5b6103496119db565b60408051600160a060020a039092168252519081900360200190f35b341561091957fe5b6102ee600160a060020a03600435166024356119ea565b604080519115158252519081900360200190f35b341561094c57fe5b610312600160a060020a0360043581169060243516611a9b565b60408051918252519081900360200190f35b341561098057fe5b61023d600160a060020a0360043516611ac8565b005b341561099e57fe5b610312600160a060020a0360043516611b4d565b60408051918252519081900360200190f35b34156109cc57fe5b61023d600160a060020a0360043516611bd8565b005b34156109ea57fe5b610312611c21565b60408051918252519081900360200190f35b61023d600160a060020a0360043516610aaa565b005b3415610a2257fe5b61024f611c29565b604080516020808252835181830152835191928392908301918501908083838215610295575b80518252602083111561029557601f199092019160209182019101610275565b505050905090810190601f1680156102c15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600a5460009060ff1615610abe5760006000fd5b63594bbf50421015610ad05760006000fd5b6359734c50421115610ae25760006000fd5b600854341015610af25760006000fd5b6009541580610b02575060095434105b1515610b0e5760006000fd5b600554600b54600360ff92831660120301909116600a0a903402811515610b3157fe5b60005491900491506a18d0bf423c03d8de0000009082011115610b545760006000fd5b600160a060020a038216600090815260066020526040902054610b7d908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554610baa908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a3600054600b546040805134815230600160a060020a039081163160208301528183018690526060820194909452608081019290925251918416917f6a7381bdc8f4e7ed3c0f0c299382777bde88a65f0c27f670235401d1544546309181900360a00190a2600160a060020a038083166000908152600e6020526040808220805460ff19166001179055600d5490519216913480156108fc0292909190818181858888f193505050501515610c915760006000fd5b5b5050565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b600160a060020a03338116600081815260076020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b6a52b7d2dcc80cd2e400000081565b60015433600160a060020a03908116911614610dba5760006000fd5b63594bbf504210610dcb5760006000fd5b60008111610dd95760006000fd5b600b8190556040805182815290517fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab9181900360200190a15b5b50565b600c54600160a060020a031681565b60005481565b60015433600160a060020a03908116911614610e475760006000fd5b600160a060020a0381166000818152600e6020526040808220805460ff19169055517fb3e6054663369578ee4831fc6c8ee9486db04e6f78b939250094785f6b6a430b9190a25b5b50565b600c54604080516000602091820181905282517f1ab3c515000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152935191949390931692631ab3c51592602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460ff1681565b600a5460009060ff161515610f3b5760006000fd5b600160a060020a0384166000908152600e602052604090205460ff1615610f625760006000fd5b610f6d848484611c88565b90505b9392505050565b60085481565b601281565b60055460ff1681565b63594bbf5081565b60015433600160a060020a03908116911614610faf5760006000fd5b63594bbf504210610fc05760006000fd5b60008111610fce5760006000fd5b600160a060020a038216600090815260066020526040902054610ff7908263ffffffff611c6016565b600160a060020a03831660009081526006602052604081209190915554611024908263ffffffff611c6016565b6000908155604080518381529051600160a060020a0385169291600080516020611f43833981519152919081900360200190a35b5b5050565b6a0ac0db698068112d00000081565b600d54600160a060020a031681565b6359734c5081565b600a5460009060ff16156110fc57600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b5060005b5b90565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517f622c77fe0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363622c77fe9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600160a060020a0381166000908152600660205260409020545b919050565b60025433600160a060020a039081169116146111da5760006000fd5b600254600154604051600160a060020a0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36002546001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600160a060020a0382166000908152600660205260408120548290108015906112985750600160a060020a0383166000908152600760209081526040808320838052909152902054829010155b80156112a45750600082115b80156112db57506000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f854828101115b1561141d57600160a060020a038316600090815260066020526040902054611309908363ffffffff611e1d16565b600160a060020a0384166000908152600660209081526040808320939093556007815282822082805290522054611346908363ffffffff611e1d16565b600160a060020a0384166000908152600760209081526040808320838052825290912091909155600690527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546113a3908363ffffffff611c6016565b600080805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f891909155546113e3908363ffffffff611e1d16565b6000908155604080518481529051600160a060020a03861691600080516020611f43833981519152919081900360200190a3506001610d89565b506000610d89565b5b92915050565b6a18d0bf423c03d8de00000081565b670de0b6b3a764000081565b600154600160a060020a031681565b60095481565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d1c5780601f10610cf157610100808354040283529160200191610d1c565b820191906000526020600020905b815481529060010190602001808311610cff57829003601f168201915b505050505081565b635d0e265081565b60408051808201909152600d81527f6f70656e414e5820546f6b656e00000000000000000000000000000000000000602082015281565b60015433600160a060020a039081169116146115455760006000fd5b6000546a0ac0db698068112d0000009010158061156557506359734c5042115b15156115715760006000fd5b600a5460ff16156115825760006000fd5b600c54604080517fe9d7f3090000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169163e9d7f3099160048082019260009290919082900301818387803b15156115dd57fe5b6102c65a03f115156115eb57fe5b5050506116a2600c60009054906101000a9004600160a060020a0316600160a060020a031663583419226000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401809050602060405180830381600087803b151561166557fe5b6102c65a03f1151561167357fe5b50506040805151600c54600160a060020a0316600090815260066020529190912054915063ffffffff611c6016565b600c8054600160a060020a03908116600090815260066020908152604080832095909555925484518401829052845160e160020a632c1a0c91028152945161173095919093169363583419229360048084019492939192918390030190829087803b151561170c57fe5b6102c65a03f1151561171a57fe5b505060405151600054915063ffffffff611c6016565b600055600a805460ff191660011790555b5b565b600b5481565b600a5460009060ff16151561175f5760006000fd5b600160a060020a0333166000908152600e602052604090205460ff16156117865760006000fd5b6117908383611e34565b90505b92915050565b600e6020526000908152604090205460ff1681565b600c54604080516000602091820181905282517fbc5dc168000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263bc5dc16892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b600a5460009060ff16156110fc57600c54604080516000602091820181905282517fc0c3da9c0000000000000000000000000000000000000000000000000000000081529251600160a060020a039094169363c0c3da9c9360048082019493918390030190829087803b15156110df57fe5b6102c65a03f115156110ed57fe5b50506040515191506111009050565b506000611100565b5b90565b600a5460009060ff16801561194e5750600c546040805160006020918201819052825160e160020a632c1a0c910281529251600160a060020a039094169363583419229360048082019493918390030190829087803b151561193257fe5b6102c65a03f1151561194057fe5b505060405151600054101590505b156110fc57600c546040805160006020918201819052825160e160020a632c1a0c9102815292516119c894600160a060020a0316936358341922936004808301949193928390030190829087803b15156119a457fe5b6102c65a03f115156119b257fe5b505060405151600054915063ffffffff611e1d16565b9050611100565b506000611100565b5b90565b600254600160a060020a031681565b60015460009033600160a060020a03908116911614611a095760006000fd5b600154604080516000602091820181905282517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0394851660048201526024810187905292519387169363a9059cbb9360448082019493918390030190829087803b1515611a7c57fe5b6102c65a03f11515611a8a57fe5b5050604051519150505b5b92915050565b600160a060020a038083166000908152600760209081526040808320938516835292905220545b92915050565b60015433600160a060020a03908116911614611ae45760006000fd5b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560408051929091168252517f4edbfac5b40fe46ac1af1fd222b224b38cfeeb9e21bd4fc6344526c245f7549b916020908290030190a15b5b50565b600c54604080516000602091820181905282517fe960bb48000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015293519194939093169263e960bb4892602480830193919282900301818787803b1515610f0057fe5b6102c65a03f11515610f0e57fe5b5050604051519150505b919050565b60015433600160a060020a03908116911614611bf45760006000fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b635b2cf2d081565b60408051808201909152600381527f4f41580000000000000000000000000000000000000000000000000000000000602082015281565b6000828201838110801590611c755750828110155b1515611c7d57fe5b8091505b5092915050565b600160a060020a038316600090815260066020526040812054829010801590611cd85750600160a060020a0380851660009081526007602090815260408083203390941683529290522054829010155b8015611ce45750600082115b8015611d095750600160a060020a038316600090815260066020526040902054828101115b15611e0d57600160a060020a038416600090815260066020526040902054611d37908363ffffffff611e1d16565b600160a060020a0380861660009081526006602090815260408083209490945560078152838220339093168252919091522054611d7a908363ffffffff611e1d16565b600160a060020a0380861660009081526007602090815260408083203385168452825280832094909455918616815260069091522054611dc0908363ffffffff611c6016565b600160a060020a038085166000818152600660209081526040918290209490945580518681529051919392881692600080516020611f4383398151915292918290030190a3506001610f70565b506000610f70565b5b9392505050565b600082821115611e2957fe5b508082035b92915050565b600160a060020a033316600090815260066020526040812054829010801590611e5d5750600082115b8015611e825750600160a060020a038316600090815260066020526040902054828101115b1561141d57600160a060020a033316600090815260066020526040902054611eb0908363ffffffff611e1d16565b600160a060020a033381166000908152600660205260408082209390935590851681522054611ee5908363ffffffff611c6016565b600160a060020a03808516600081815260066020908152604091829020949094558051868152905191933390931692600080516020611f4383398151915292918290030190a3506001610d89565b506000610d89565b5b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582002d82e12d01419074eb87e3b53edd24e33c5ad021933496454ed30b3c41a4d160029

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

0000000000000000000000002b3b67c6dffc2bcdda2315491eac9bbe868fbcdd

-----Decoded View---------------
Arg [0] : _wallet (address): 0x2b3b67c6dffc2BCDDa2315491Eac9bbE868fbCDD

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002b3b67c6dffc2bcdda2315491eac9bbe868fbcdd


Swarm Source

bzzr://1ebf78c948e9b064875413e10729508a8cb3f4fc7b2decd423f81a4a0a420b80

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.