ETH Price: $2,151.70 (+0.06%)

Contract

0xa98e0024dB4A1720a301F464c4dabf685E34D078
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer71200372019-01-24 17:53:452227 days ago1548352425IN
Dekla Token
0 ETH0.000172597
Transfer71200232019-01-24 17:49:532227 days ago1548352193IN
Dekla Token
0 ETH0.000172597
Transfer71200212019-01-24 17:49:082227 days ago1548352148IN
Dekla Token
0 ETH0.000368527
Transfer71200192019-01-24 17:48:412227 days ago1548352121IN
Dekla Token
0 ETH0.000368077
Transfer71195632019-01-24 15:37:192227 days ago1548344239IN
Dekla Token
0 ETH0.000368077
Transfer71195612019-01-24 15:36:142227 days ago1548344174IN
Dekla Token
0 ETH0.000368077
Transfer71195572019-01-24 15:34:452227 days ago1548344085IN
Dekla Token
0 ETH0.000368077
Transfer71195522019-01-24 15:33:352227 days ago1548344015IN
Dekla Token
0 ETH0.000368077
Transfer71195462019-01-24 15:32:342227 days ago1548343954IN
Dekla Token
0 ETH0.000368527
Transfer71195382019-01-24 15:29:292227 days ago1548343769IN
Dekla Token
0 ETH0.000210324
Transfer71195382019-01-24 15:29:292227 days ago1548343769IN
Dekla Token
0 ETH0.000210324
Transfer71171432019-01-24 4:19:482228 days ago1548303588IN
Dekla Token
0 ETH0.000112933
Transfer70858092019-01-18 6:51:532234 days ago1547794313IN
Dekla Token
0 ETH0.0017633447
Transfer70798582019-01-17 5:17:122235 days ago1547702232IN
Dekla Token
0 ETH0.000210324
Transfer70516782019-01-12 4:22:342240 days ago1547266954IN
Dekla Token
0 ETH0.000157743
Transfer70138442019-01-05 9:52:482247 days ago1546681968IN
Dekla Token
0 ETH0.000157933
Transfer70112752019-01-04 22:52:092247 days ago1546642329IN
Dekla Token
0 ETH0.000067933
Transfer69872932018-12-31 18:53:202251 days ago1546282400IN
Dekla Token
0 ETH0.000112933
Transfer69872202018-12-31 18:35:002251 days ago1546281300IN
Dekla Token
0 ETH0.000157743

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeklaToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-13
*/

pragma solidity ^0.4.23;

// File: contracts\SignatureVerifier.sol

/**
 * @title Signature verifier
 * @dev To verify C level actions
 */
contract SignatureVerifier {

    function splitSignature(bytes sig)
    internal
    pure
    returns (uint8, bytes32, bytes32)
    {
        require(sig.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;

        assembly {
        // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
        // second 32 bytes
            s := mload(add(sig, 64))
        // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }
        return (v, r, s);
    }

    // Returns the address that signed a given string message
    function verifyString(
        string message,
        uint8 v,
        bytes32 r,
        bytes32 s)
    internal pure
    returns (address signer) {

        // The message header; we will fill in the length next
        string memory header = "\x19Ethereum Signed Message:\n000000";
        uint256 lengthOffset;
        uint256 length;

        assembly {
        // The first word of a string is its length
            length := mload(message)
        // The beginning of the base-10 message length in the prefix
            lengthOffset := add(header, 57)
        }

        // Maximum length we support
        require(length <= 999999);
        // The length of the message's length in base-10
        uint256 lengthLength = 0;
        // The divisor to get the next left-most message length digit
        uint256 divisor = 100000;
        // Move one digit of the message length to the right at a time

        while (divisor != 0) {
            // The place value at the divisor
            uint256 digit = length / divisor;
            if (digit == 0) {
                // Skip leading zeros
                if (lengthLength == 0) {
                    divisor /= 10;
                    continue;
                }
            }
            // Found a non-zero digit or non-leading zero digit
            lengthLength++;
            // Remove this digit from the message length's current value
            length -= digit * divisor;
            // Shift our base-10 divisor over
            divisor /= 10;

            // Convert the digit to its ASCII representation (man ascii)
            digit += 0x30;
            // Move to the next character and write the digit
            lengthOffset++;
            assembly {
                mstore8(lengthOffset, digit)
            }
        }
        // The null string requires exactly 1 zero (unskip 1 leading 0)
        if (lengthLength == 0) {
            lengthLength = 1 + 0x19 + 1;
        } else {
            lengthLength += 1 + 0x19;
        }
        // Truncate the tailing zeros from the header
        assembly {
            mstore(header, lengthLength)
        }
        // Perform the elliptic curve recover operation
        bytes32 check = keccak256(abi.encodePacked(header, message));
        return ecrecover(check, v, r, s);
    }
}

// File: contracts\SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
     * @dev Multiplies two numbers, throws on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
     * @dev Integer division of two numbers, truncating the quotient.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
     * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
     * @dev Adds two numbers, throws on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}

// File: contracts\ERC20Token.sol

/**
 * @title A DEKLA token access control
 * @author DEKLA (https://www.dekla.io)
 * @dev The Dekla token has 3 C level address to manage.
 * They can execute special actions but it need to be approved by another C level address.
 */
contract DeklaAccessControl is SignatureVerifier {
    using SafeMath for uint256;

    // C level address that can execute special actions.
    address public ceoAddress;
    address public cfoAddress;
    address public cooAddress;
    uint256 public CLevelTxCount_ = 0;

    // @dev store nonces
    mapping(address => uint256) nonces;

    // @dev C level transaction must be approved with another C level address
    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress ||
            msg.sender == ceoAddress ||
            msg.sender == cfoAddress
        );
        _;
    }

    function recover(bytes32 hash, bytes sig) public pure returns (address) {
        bytes32 r;
        bytes32 s;
        uint8 v;
        //Check the signature length
        if (sig.length != 65) {
            return (address(0));
        }
        // Divide the signature in r, s and v variables
        (v, r, s) = splitSignature(sig);
        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }
        // If the version is correct return the signer address
        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            bytes memory prefix = "\x19Ethereum Signed Message:\n32";
            bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, hash));
            return ecrecover(prefixedHash, v, r, s);
        }
    }

    // @dev return true if transaction already signed by a C Level address
    // @param _message The string to be verify
    function signedCLevel(
        bytes32 _message,
        bytes _sig
    )
    internal
    view
    onlyCLevel
    returns (bool)
    {
        address signer = recover(_message, _sig);

        require(signer != msg.sender);
        return (
        signer == cooAddress ||
        signer == ceoAddress ||
        signer == cfoAddress
        );
    }

    /**
     * @notice Hash (keccak256) of the payload used by setCEO
     * @param _newCEO address The address of the new CEO
     * @param _nonce uint256 setCEO transaction number.
     */
    function getCEOHashing(address _newCEO, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(bytes4(0x486A0F3E), _newCEO, _nonce));
    }

    // @dev Assigns a new address to act as the CEO. The C level transaction, must verify.
    // @param _newCEO The address of the new CEO
    function setCEO(
        address _newCEO,
        bytes _sig
    ) external onlyCLevel {
        require(
            _newCEO != address(0) &&
            _newCEO != cfoAddress &&
            _newCEO != cooAddress
        );

        bytes32 hashedTx = getCEOHashing(_newCEO, nonces[msg.sender]);
        require(signedCLevel(hashedTx, _sig));
        nonces[msg.sender]++;

        ceoAddress = _newCEO;
        CLevelTxCount_++;
    }

    /**
     * @notice Hash (keccak256) of the payload used by setCFO
     * @param _newCFO address The address of the new CFO
     * @param _nonce uint256 setCFO transaction number.
     */
    function getCFOHashing(address _newCFO, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(bytes4(0x486A0F3F), _newCFO, _nonce));
    }

    // @dev Assigns a new address to act as the CFO. The C level transaction, must verify.
    // @param _newCFO The address of the new CFO
    function setCFO(
        address _newCFO,
        bytes _sig
    ) external onlyCLevel {
        require(
            _newCFO != address(0) &&
            _newCFO != ceoAddress &&
            _newCFO != cooAddress
        );

        bytes32 hashedTx = getCFOHashing(_newCFO, nonces[msg.sender]);
        require(signedCLevel(hashedTx, _sig));
        nonces[msg.sender]++;

        cfoAddress = _newCFO;
        CLevelTxCount_++;
    }

    /**
     * @notice Hash (keccak256) of the payload used by setCOO
     * @param _newCOO address The address of the new COO
     * @param _nonce uint256 setCO transaction number.
     */
    function getCOOHashing(address _newCOO, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(bytes4(0x486A0F40), _newCOO, _nonce));
    }

    // @dev Assigns a new address to act as the COO. The C level transaction, must verify.
    // @param _newCOO The address of the new COO
    function setCOO(
        address _newCOO,
        bytes _sig
    ) external onlyCLevel {
        require(
            _newCOO != address(0) &&
            _newCOO != ceoAddress &&
            _newCOO != cfoAddress
        );

        bytes32 hashedTx = getCOOHashing(_newCOO, nonces[msg.sender]);
        require(signedCLevel(hashedTx, _sig));
        nonces[msg.sender]++;

        cooAddress = _newCOO;
        CLevelTxCount_++;
    }

    function getNonce() external view returns (uint256) {
        return nonces[msg.sender];
    }
}


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
    function totalSupply() public view returns (uint256);

    function balanceOf(address who) public view returns (uint256);

    function transfer(address to, uint256 value) public returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
* @title ERC865Token Token
*
* ERC865Token allows users paying transfers in tokens instead of gas
* https://github.com/ethereum/EIPs/issues/865
*
*/
contract ERC865 is ERC20Basic {
    function transferPreSigned(
        bytes _signature,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool);

    function approvePreSigned(
        bytes _signature,
        address _spender,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool);

    function increaseApprovalPreSigned(
        bytes _signature,
        address _spender,
        uint256 _addedValue,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool);

    function decreaseApprovalPreSigned(
        bytes _signature,
        address _spender,
        uint256 _subtractedValue,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool);

    function transferFromPreSigned(
        bytes _signature,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool);
}

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

    mapping(address => uint256) balances;

    uint256 totalSupply_;

    // Setable mint rate for the first time
    uint256 mintTxCount_ = 1;
    uint256 public teamRate = 20;
    uint256 public saleRate = 80;

    // Team address
    address public saleAddress;
    address public teamAddress;
    /**
     * @dev total number of tokens in existence
     */
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

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

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

        emit Transfer(msg.sender, _to, _value);
        return true;
    }

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

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
    function allowance(address owner, address spender)
    public view returns (uint256);

    function transferFrom(address from, address to, uint256 value)
    public returns (bool);

    function approve(address spender, uint256 value) public returns (bool);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}


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

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


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

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

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

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

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

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(
        address _spender,
        uint _addedValue
    )
    public
    returns (bool) {
        allowed[msg.sender][_spender] = (
        allowed[msg.sender][_spender].add(_addedValue));
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From MonolithDAO Token.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(
        address _spender,
        uint _subtractedValue
    )
    public
    returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }
}


/**
* @title ERC865Token Token
*
* ERC865Token allows users paying transfers in tokens instead of gas
* https://github.com/ethereum/EIPs/issues/865
*
*/
contract ERC865Token is ERC865, StandardToken {
    /* Nonces of transfers performed */
    // mapping(bytes => bool) signatures;

    event TransferPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee);
    event ApprovalPreSigned(address indexed from, address indexed to, address indexed delegate, uint256 amount, uint256 fee);

    function recover(bytes32 hash, bytes sig) public pure returns (address) {
        bytes32 r;
        bytes32 s;
        uint8 v;
        //Check the signature length
        if (sig.length != 65) {
            return (address(0));
        }
        // Divide the signature in r, s and v variables
        (v, r, s) = splitSignature(sig);
        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }
        // If the version is correct return the signer address
        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            bytes memory prefix = "\x19Ethereum Signed Message:\n32";
            bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, hash));
            return ecrecover(prefixedHash, v, r, s);
        }
    }

    function recoverSigner(
        bytes _signature,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    view
    returns (address)
    {
        require(_to != address(0));
        // require(signatures[_signature] == false);
        bytes32 hashedTx = transferPreSignedHashing(address(this), _to, _value, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        return from;
    }


    function transferPreSigned(
        bytes _signature,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool)
    {
        require(_to != address(0));
        // require(signatures[_signature] == false);
        bytes32 hashedTx = transferPreSignedHashing(address(this), _to, _value, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));
        balances[from] = balances[from].sub(_value).sub(_fee);
        balances[_to] = balances[_to].add(_value);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        // signatures[_signature] = true;
        emit Transfer(from, _to, _value);
        emit Transfer(from, msg.sender, _fee);
        emit TransferPreSigned(from, _to, msg.sender, _value, _fee);
        return true;
    }
    /**
    * @notice Submit a presigned approval
    * @param _signature bytes The signature, issued by the owner.
    * @param _spender address The address which will spend the funds.
    * @param _value uint256 The amount of tokens to allow.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function approvePreSigned(
        bytes _signature,
        address _spender,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool)
    {
        require(_spender != address(0));
        // require(signatures[_signature] == false);
        bytes32 hashedTx = approvePreSignedHashing(address(this), _spender, _value, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));
        allowed[from][_spender] = _value;
        balances[from] = balances[from].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        // signatures[_signature] = true;
        emit Approval(from, _spender, _value);
        emit Transfer(from, msg.sender, _fee);
        emit ApprovalPreSigned(from, _spender, msg.sender, _value, _fee);
        return true;
    }

    /**
    * @notice Increase the amount of tokens that an owner allowed to a spender.
    * @param _signature bytes The signature, issued by the owner.
    * @param _spender address The address which will spend the funds.
    * @param _addedValue uint256 The amount of tokens to increase the allowance by.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function increaseApprovalPreSigned(
        bytes _signature,
        address _spender,
        uint256 _addedValue,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool)
    {
        require(_spender != address(0));
        // require(signatures[_signature] == false);
        bytes32 hashedTx = increaseApprovalPreSignedHashing(address(this), _spender, _addedValue, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));
        allowed[from][_spender] = allowed[from][_spender].add(_addedValue);
        balances[from] = balances[from].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        // signatures[_signature] = true;
        emit Approval(from, _spender, allowed[from][_spender]);
        emit Transfer(from, msg.sender, _fee);
        emit ApprovalPreSigned(from, _spender, msg.sender, allowed[from][_spender], _fee);
        return true;
    }

    /**
    * @notice Decrease the amount of tokens that an owner allowed to a spender.
    * @param _signature bytes The signature, issued by the owner
    * @param _spender address The address which will spend the funds.
    * @param _subtractedValue uint256 The amount of tokens to decrease the allowance by.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function decreaseApprovalPreSigned(
        bytes _signature,
        address _spender,
        uint256 _subtractedValue,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool)
    {
        require(_spender != address(0));
        // require(signatures[_signature] == false);
        bytes32 hashedTx = decreaseApprovalPreSignedHashing(address(this), _spender, _subtractedValue, _fee, _nonce);
        address from = recover(hashedTx, _signature);
        require(from != address(0));
        uint oldValue = allowed[from][_spender];
        if (_subtractedValue > oldValue) {
            allowed[from][_spender] = 0;
        } else {
            allowed[from][_spender] = oldValue.sub(_subtractedValue);
        }
        balances[from] = balances[from].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        // signatures[_signature] = true;
        emit Approval(from, _spender, _subtractedValue);
        emit Transfer(from, msg.sender, _fee);
        emit ApprovalPreSigned(from, _spender, msg.sender, allowed[from][_spender], _fee);
        return true;
    }

    /**
    * @notice Transfer tokens from one address to another
    * @param _signature bytes The signature, issued by the spender.
    * @param _from address The address which you want to send tokens from.
    * @param _to address The address which you want to transfer to.
    * @param _value uint256 The amount of tokens to be transferred.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the spender.
    * @param _nonce uint256 Presigned transaction number.
    */
    function transferFromPreSigned(
        bytes _signature,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    returns (bool)
    {
        require(_to != address(0));
        // require(signatures[_signature] == false);
        bytes32 hashedTx = transferFromPreSignedHashing(address(this), _from, _to, _value, _fee, _nonce);
        address spender = recover(hashedTx, _signature);
        require(spender != address(0));
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][spender] = allowed[_from][spender].sub(_value);
        balances[spender] = balances[spender].sub(_fee);
        balances[msg.sender] = balances[msg.sender].add(_fee);
        // signatures[_signature] = true;
        emit Transfer(_from, _to, _value);
        emit Transfer(spender, msg.sender, _fee);
        return true;
    }

    /**
    * @notice Hash (keccak256) of the payload used by transferPreSigned
    * @param _token address The address of the token.
    * @param _to address The address which you want to transfer to.
    * @param _value uint256 The amount of tokens to be transferred.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function transferPreSignedHashing(
        address _token,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    pure
    returns (bytes32)
    {
        /* "48664c16": transferPreSignedHashing(address,address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0x486A0F41), _token, _to, _value, _fee, _nonce));
    }
    /**
    * @notice Hash (keccak256) of the payload used by approvePreSigned
    * @param _token address The address of the token
    * @param _spender address The address which will spend the funds.
    * @param _value uint256 The amount of tokens to allow.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function approvePreSignedHashing(
        address _token,
        address _spender,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    pure
    returns (bytes32)
    {
        return keccak256(abi.encodePacked(_token, _spender, _value, _fee, _nonce));
    }
    /**
    * @notice Hash (keccak256) of the payload used by increaseApprovalPreSigned
    * @param _token address The address of the token
    * @param _spender address The address which will spend the funds.
    * @param _addedValue uint256 The amount of tokens to increase the allowance by.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function increaseApprovalPreSignedHashing(
        address _token,
        address _spender,
        uint256 _addedValue,
        uint256 _fee,
        uint256 _nonce
    )
    public
    pure
    returns (bytes32)
    {
        /* "a45f71ff": increaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0x486A0F42), _token, _spender, _addedValue, _fee, _nonce));
    }
    /**
    * @notice Hash (keccak256) of the payload used by decreaseApprovalPreSigned
    * @param _token address The address of the token
    * @param _spender address The address which will spend the funds.
    * @param _subtractedValue uint256 The amount of tokens to decrease the allowance by.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the owner.
    * @param _nonce uint256 Presigned transaction number.
    */
    function decreaseApprovalPreSignedHashing(
        address _token,
        address _spender,
        uint256 _subtractedValue,
        uint256 _fee,
        uint256 _nonce
    )
    public
    pure
    returns (bytes32)
    {
        /* "59388d78": decreaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0x486A0F43), _token, _spender, _subtractedValue, _fee, _nonce));
    }
    /**
    * @notice Hash (keccak256) of the payload used by transferFromPreSigned
    * @param _token address The address of the token
    * @param _from address The address which you want to send tokens from.
    * @param _to address The address which you want to transfer to.
    * @param _value uint256 The amount of tokens to be transferred.
    * @param _fee uint256 The amount of tokens paid to msg.sender, by the spender.
    * @param _nonce uint256 Presigned transaction number.
    */
    function transferFromPreSignedHashing(
        address _token,
        address _from,
        address _to,
        uint256 _value,
        uint256 _fee,
        uint256 _nonce
    )
    public
    pure
    returns (bytes32)
    {
        /* "b7656dc5": transferFromPreSignedHashing(address,address,address,uint256,uint256,uint256) */
        return keccak256(abi.encodePacked(bytes4(0x486A0F44), _token, _from, _to, _value, _fee, _nonce));
    }
}

/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/openzeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */

contract MintableToken is ERC865Token {
    using SafeMath for uint256;

    event Mint(address indexed to, uint256 amount);

    // Limit total supply to 10 billion
    uint256 public constant totalTokenLimit = 10000000000000000000000000000;

    // Max token left percent allow to mint, based on 100%
    uint256 public maxTokenRateToMint = 20;
    uint256 public canMintLimit = 0;


    /**
     * @dev Throws if total supply is higher than total token limit
     */
    modifier canMint()
    {

        // Address to mint must defined
        require(
            teamAddress != address(0) &&
            saleAddress != address(0)

        );

        // Total supply after mint must lower or equal total token limit
        require(totalSupply_ <= totalTokenLimit);
        require(balances[saleAddress] <= canMintLimit);
        _;
    }


    /**
     * @dev Function to mint tokens: mint 1000000000000000000000000000 every times
     * @return A boolean that indicates if the operation was successful.
     */
    function mint() onlyCLevel external {
        _mint(1000000000000000000000000000);
    }

    function _mint(uint256 _amount)
    canMint
    internal
    {
        uint256 saleAmount_ = _amount.mul(saleRate).div(100);
        uint256 teamAmount_ = _amount.mul(teamRate).div(100);

        totalSupply_ = totalSupply_.add(_amount);
        balances[saleAddress] = balances[saleAddress].add(saleAmount_);
        balances[teamAddress] = balances[teamAddress].add(teamAmount_);

        canMintLimit = balances[saleAddress]
        .mul(maxTokenRateToMint)
        .div(100);
        mintTxCount_++;

        emit Mint(saleAddress, saleAmount_);
        emit Mint(teamAddress, teamAmount_);
    }

    function getMaxTokenRateToMintHashing(uint256 _rate, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(bytes4(0x486A0F45), _rate, _nonce));
    }

    function setMaxTokenRateToMint(
        uint256 _rate,
        bytes _sig
    ) external onlyCLevel {
        require(_rate <= 100);
        require(_rate >= 0);

        bytes32 hashedTx = getMaxTokenRateToMintHashing(_rate, nonces[msg.sender]);
        require(signedCLevel(hashedTx, _sig));
        nonces[msg.sender]++;

        maxTokenRateToMint = _rate;
        CLevelTxCount_++;
    }

    function getMintRatesHashing(uint256 _saleRate, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(bytes4(0x486A0F46), _saleRate, _nonce));
    }

    function setMintRates(
        uint256 saleRate_,
        bytes _sig
    )
    external
    onlyCLevel
    {
        require(saleRate.add(teamRate) == 100);
        require(mintTxCount_ >= 3);

        bytes32 hashedTx = getMintRatesHashing(saleRate_, nonces[msg.sender]);
        require(signedCLevel(hashedTx, _sig));
        nonces[msg.sender]++;

        saleRate = saleRate_;
        CLevelTxCount_++;
    }
}


contract DeklaToken is MintableToken {
    string public name = "Dekla Token";
    string public symbol = "DKL";
    uint256 public decimals = 18;
    uint256 public INITIAL_SUPPLY = 1000000000 * (10 ** decimals);

    function isDeklaToken() public pure returns (bool){
        return true;
    }

    constructor (
        address _ceoAddress,
        address _cfoAddress,
        address _cooAddress,
        address _teamAddress,
        address _saleAddress
    ) public {
        // initial prize address
        teamAddress = _teamAddress;

        // initial C level address
        ceoAddress = _ceoAddress;
        cfoAddress = _cfoAddress;
        cooAddress = _cooAddress;
        saleAddress = _saleAddress;

        // mint tokens first time
        _mint(INITIAL_SUPPLY);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"canMintLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"},{"name":"_sig","type":"bytes"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_newCFO","type":"address"},{"name":"_nonce","type":"uint256"}],"name":"getCFOHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"recover","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"maxTokenRateToMint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isDeklaToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalTokenLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_rate","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getMaxTokenRateToMintHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"},{"name":"_sig","type":"bytes"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"saleRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_newCEO","type":"address"},{"name":"_nonce","type":"uint256"}],"name":"getCEOHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"CLevelTxCount_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_saleRate","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getMintRatesHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"recoverSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_newCOO","type":"address"},{"name":"_nonce","type":"uint256"}],"name":"getCOOHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"teamRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"saleRate_","type":"uint256"},{"name":"_sig","type":"bytes"}],"name":"setMintRates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferFromPreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferFromPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"},{"name":"_sig","type":"bytes"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rate","type":"uint256"},{"name":"_sig","type":"bytes"}],"name":"setMaxTokenRateToMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSignedHashing","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"saleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_ceoAddress","type":"address"},{"name":"_cfoAddress","type":"address"},{"name":"_cooAddress","type":"address"},{"name":"_teamAddress","type":"address"},{"name":"_saleAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"TransferPreSigned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"delegate","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"fee","type":"uint256"}],"name":"ApprovalPreSigned","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"},{"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"}]

600060038190556001600755601460088190556050600955600d55600e5560c0604052600b60808190527f44656b6c6120546f6b656e00000000000000000000000000000000000000000060a09081526200005e91600f919062000411565b506040805180820190915260038082527f444b4c00000000000000000000000000000000000000000000000000000000006020909201918252620000a59160109162000411565b50601260118190556b033b2e3c9fd0803ce80000009055348015620000c957600080fd5b5060405160a080620031bb83398101604090815281516020830151918301516060840151608090940151600b8054600160a060020a0319908116600160a060020a0380891691909117909255600080548216838716179055600180548216838816179055600280548216838616179055600a80549091169183169190911790556012549294919262000164906401000000006200016f810204565b5050505050620004b6565b600b546000908190600160a060020a031615801590620001995750600a54600160a060020a031615155b1515620001a557600080fd5b6006546b204fce5e3e250261100000001015620001c157600080fd5b600e54600a54600160a060020a03166000908152600560205260409020541115620001eb57600080fd5b6200022b60646200021660095486620003ba6401000000000262002c2b179091906401000000009004565b9064010000000062002c54620003ed82021704565b91506200025860646200021660085486620003ba6401000000000262002c2b179091906401000000009004565b60065490915062000278908464010000000062002be56200040382021704565b600655600a54600160a060020a0316600090815260056020526040902054620002b0908364010000000062002be56200040382021704565b600a54600160a060020a0390811660009081526005602052604080822093909355600b5490911681522054620002f5908264010000000062002be56200040382021704565b600b54600160a060020a0390811660009081526005602052604080822093909355600d54600a54909216815291909120546200034791606491620002169164010000000062002c2b620003ba82021704565b600e55600780546001019055600a54604080518481529051600160a060020a03909216916000805160206200319b8339815191529181900360200190a2600b54604080518381529051600160a060020a03909216916000805160206200319b8339815191529181900360200190a2505050565b6000821515620003cd57506000620003e7565b50818102818382811515620003de57fe5b0414620003e757fe5b92915050565b60008183811515620003fb57fe5b049392505050565b81810182811015620003e757fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200045457805160ff191683800117855562000484565b8280016001018555821562000484579182015b828111156200048457825182559160200191906001019062000467565b506200049292915062000496565b5090565b620004b391905b808211156200049257600081556001016200049d565b90565b612cd580620004c66000396000f3006080604052600436106102455763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630519ce79811461024a57806306b765e41461027b57806306fdde03146102a2578063095ea7b31461032c5780630a0f8168146103645780630bf2c50d146103795780630ee85800146103a85780631249c58b146103cc5780631296830d146103e157806315420b711461045457806318160ddd1461048457806319045a25146104995780631b3b69d5146104f75780631c75f0851461050c57806323b872dd1461052157806329963e301461054b5780632b387170146105605780632ff2e9dc14610575578063313ce5671461058a57806333762c081461059f57806336c4db09146105ba57806340557cf1146105e75780634eaef8a2146105fc57806355381f001461062057806359388d78146106355780635af2935f146106655780635e04797514610680578063617b390b146106f35780636618846314610766578063703936861461078a57806370a08231146107ae57806378ef7f02146107cf5780638be52783146107e457806395d89b4114610857578063a45f71ff1461086c578063a53d19531461089c578063a9059cbb146108c0578063adb8249e146108e4578063b047fb5014610957578063b7656dc51461096c578063bca50515146109a2578063d087d28814610a1f578063d73dd62314610a34578063d9194fcb14610a58578063dd62ed3e14610a85578063f7841c3b14610aac578063f7ac9c2e14610ad0578063fffe088d14610b00575b600080fd5b34801561025657600080fd5b5061025f610b15565b60408051600160a060020a039092168252519081900360200190f35b34801561028757600080fd5b50610290610b24565b60408051918252519081900360200190f35b3480156102ae57600080fd5b506102b7610b2a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f15781810151838201526020016102d9565b50505050905090810190601f16801561031e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033857600080fd5b50610350600160a060020a0360043516602435610bb8565b604080519115158252519081900360200190f35b34801561037057600080fd5b5061025f610c0d565b34801561038557600080fd5b506103a660048035600160a060020a03169060248035908101910135610c1c565b005b3480156103b457600080fd5b50610290600160a060020a0360043516602435610d61565b3480156103d857600080fd5b506103a6610e2a565b3480156103ed57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610e84565b34801561046057600080fd5b50610290600160a060020a036004358116906024351660443560643560843561104f565b34801561049057600080fd5b50610290611133565b3480156104a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261025f9583359536956044949193909101919081908401838280828437509497506111399650505050505050565b34801561050357600080fd5b50610290611304565b34801561051857600080fd5b5061025f61130a565b34801561052d57600080fd5b50610350600160a060020a0360043581169060243516604435611319565b34801561055757600080fd5b50610350611480565b34801561056c57600080fd5b50610290611485565b34801561058157600080fd5b50610290611495565b34801561059657600080fd5b5061029061149b565b3480156105ab57600080fd5b506102906004356024356114a1565b3480156105c657600080fd5b506103a660048035600160a060020a0316906024803590810191013561151f565b3480156105f357600080fd5b50610290611667565b34801561060857600080fd5b50610290600160a060020a036004351660243561166d565b34801561062c57600080fd5b50610290611702565b34801561064157600080fd5b50610290600160a060020a0360043581169060243516604435606435608435611708565b34801561067157600080fd5b506102906004356024356117b5565b34801561068c57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025f94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611833565b3480156106ff57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611871565b34801561077257600080fd5b50610350600160a060020a0360043516602435611a10565b34801561079657600080fd5b50610290600160a060020a0360043516602435611aee565b3480156107ba57600080fd5b50610290600160a060020a0360043516611b83565b3480156107db57600080fd5b50610290611b9e565b3480156107f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611ba4565b34801561086357600080fd5b506102b7611dc3565b34801561087857600080fd5b50610290600160a060020a0360043581169060243516604435606435608435611e1e565b3480156108a857600080fd5b506103a6600480359060248035908101910135611ecb565b3480156108cc57600080fd5b50610350600160a060020a0360043516602435611fd1565b3480156108f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a03169450505060208201359160408101359150606001356120a2565b34801561096357600080fd5b5061025f612291565b34801561097857600080fd5b50610290600160a060020a036004358116906024358116906044351660643560843560a4356122a0565b3480156109ae57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050600160a060020a0385358116965060208601351694604081013594506060810135935060800135915061238f9050565b348015610a2b57600080fd5b50610290612577565b348015610a4057600080fd5b50610350600160a060020a036004351660243561258a565b348015610a6457600080fd5b506103a660048035600160a060020a03169060248035908101910135612611565b348015610a9157600080fd5b50610290600160a060020a0360043581169060243516612756565b348015610ab857600080fd5b506103a6600480359060248035908101910135612781565b348015610adc57600080fd5b50610290600160a060020a0360043581169060243516604435606435608435612872565b348015610b0c57600080fd5b5061025f6128fc565b600154600160a060020a031681565b600e5481565b600f805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bb05780601f10610b8557610100808354040283529160200191610bb0565b820191906000526020600020905b815481529060010190602001808311610b9357829003601f168201915b505050505081565b336000818152600c60209081526040808320600160a060020a03871680855290835281842086905581518681529151939490939092600080516020612c8a833981519152928290030190a35060015b92915050565b600054600160a060020a031681565b600254600090600160a060020a0316331480610c425750600054600160a060020a031633145b80610c575750600154600160a060020a031633145b1515610c6257600080fd5b600160a060020a03841615801590610c885750600054600160a060020a03858116911614155b8015610ca25750600254600160a060020a03858116911614155b1515610cad57600080fd5b33600090815260046020526040902054610cc8908590610d61565b9050610d048184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b1515610d0f57600080fd5b505033600090815260046020526040902080546001908101909155805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039390931692909217825550600380549091019055565b604080517f486a0f3f000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a0386160260248301526038808301859052835180840390910181526058909201928390528151600093918291908401908083835b60208310610df75780518252601f199092019160209182019101610dd8565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b600254600160a060020a0316331480610e4d5750600054600160a060020a031633145b80610e625750600154600160a060020a031633145b1515610e6d57600080fd5b610e826b033b2e3c9fd0803ce80000006129be565b565b60008080600160a060020a0387161515610e9d57600080fd5b610eaa308888888861104f565b9150610eb68289611139565b9050600160a060020a0381161515610ecd57600080fd5b600160a060020a038116600090815260056020526040902054610f08908690610efc908963ffffffff612bd316565b9063ffffffff612bd316565b600160a060020a038083166000908152600560205260408082209390935590891681522054610f3d908763ffffffff612be516565b600160a060020a038816600090815260056020526040808220929092553381522054610f6f908663ffffffff612be516565b336000908152600560209081526040918290209290925580518881529051600160a060020a038a81169390851692600080516020612c6a833981519152929081900390910190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a333600160a060020a031687600160a060020a031682600160a060020a03167fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a48989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b604080517f486a0f41000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808a16820260248501528816026038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201928390528151600093918291908401908083835b602083106110fd5780518252601f1990920191602091820191016110de565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209998505050505050505050565b60065490565b600080600080606060008651604114151561115757600095506112f9565b61116087612bf2565b90965094509250601b60ff8416101561117a57601b830192505b8260ff16601b1415801561119257508260ff16601c14155b156111a057600095506112f9565b6040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250915081886040516020018083805190602001908083835b6020831061120c5780518252601f1990920191602091820191016111ed565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b6020831061126c5780518252601f19909201916020918201910161124d565b51815160209384036101000a600019018019909216911617905260408051929094018290038220600080845283830180875282905260ff8b1684870152606084018d9052608084018c905294519097506001965060a080840196509194601f19820194509281900390910191865af11580156112ec573d6000803e3d6000fd5b5050506020604051035195505b505050505092915050565b600d5481565b600b54600160a060020a031681565b6000600160a060020a038316151561133057600080fd5b600160a060020a03841660009081526005602052604090205482111561135557600080fd5b600160a060020a0384166000908152600c6020908152604080832033845290915290205482111561138557600080fd5b600160a060020a0384166000908152600560205260409020546113ae908363ffffffff612bd316565b600160a060020a0380861660009081526005602052604080822093909355908516815220546113e3908363ffffffff612be516565b600160a060020a038085166000908152600560209081526040808320949094559187168152600c82528281203382529091522054611427908363ffffffff612bd316565b600160a060020a038086166000818152600c602090815260408083203384528252918290209490945580518681529051928716939192600080516020612c6a833981519152929181900390910190a35060019392505050565b600190565b6b204fce5e3e2502611000000081565b60125481565b60115481565b604080517f486a0f45000000000000000000000000000000000000000000000000000000006020808301919091526024820185905260448083018590528351808403909101815260649092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b600254600090600160a060020a03163314806115455750600054600160a060020a031633145b8061155a5750600154600160a060020a031633145b151561156557600080fd5b600160a060020a0384161580159061158b5750600054600160a060020a03858116911614155b80156115a55750600154600160a060020a03858116911614155b15156115b057600080fd5b336000908152600460205260409020546115cb908590611aee565b90506116078184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b151561161257600080fd5b5050336000908152600460205260409020805460019081019091556002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03949094169390931790925550600380549091019055565b60095481565b604080517f486a0f3e000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03861602602483015260388083018590528351808403909101815260589092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b60035481565b604080517f486a0f43000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808a16820260248501528816026038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac90920192839052815160009391829190840190808383602083106110fd5780518252601f1990920191602091820191016110de565b604080517f486a0f46000000000000000000000000000000000000000000000000000000006020808301919091526024820185905260448083018590528351808403909101815260649092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b60008080600160a060020a038716151561184c57600080fd5b611859308888888861104f565b91506118658289611139565b98975050505050505050565b60008080600160a060020a038716151561188a57600080fd5b6118973088888888612872565b91506118a38289611139565b9050600160a060020a03811615156118ba57600080fd5b600160a060020a038082166000818152600c60209081526040808320948c1683529381528382208a9055918152600590915220546118fe908663ffffffff612bd316565b600160a060020a038216600090815260056020526040808220929092553381522054611930908663ffffffff612be516565b336000908152600560209081526040918290209290925580518881529051600160a060020a038a81169390851692600080516020612c8a833981519152929081900390910190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a333600160a060020a031687600160a060020a031682600160a060020a03167f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb8989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b336000908152600c60209081526040808320600160a060020a038616845290915281205480831115611a6557336000908152600c60209081526040808320600160a060020a0388168452909152812055611a9a565b611a75818463ffffffff612bd316565b336000908152600c60209081526040808320600160a060020a03891684529091529020555b336000818152600c60209081526040808320600160a060020a038916808552908352928190205481519081529051929392600080516020612c8a833981519152929181900390910190a35060019392505050565b604080517f486a0f40000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03861602602483015260388083018590528351808403909101815260589092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b600160a060020a031660009081526005602052604090205490565b60085481565b6000808080600160a060020a0388161515611bbe57600080fd5b611bcb3089898989611708565b9250611bd7838a611139565b9150600160a060020a0382161515611bee57600080fd5b50600160a060020a038082166000908152600c60209081526040808320938b168352929052205480871115611c4a57600160a060020a038083166000908152600c60209081526040808320938c16835292905290812055611c81565b611c5a818863ffffffff612bd316565b600160a060020a038084166000908152600c60209081526040808320938d16835292905220555b600160a060020a038216600090815260056020526040902054611caa908763ffffffff612bd316565b600160a060020a038316600090815260056020526040808220929092553381522054611cdc908763ffffffff612be516565b336000908152600560209081526040918290209290925580518981529051600160a060020a038b81169390861692600080516020612c8a833981519152929081900390910190a36040805187815290513391600160a060020a03851691600080516020612c6a8339815191529181900360200190a3600160a060020a038281166000818152600c60209081526040808320948d16808452948252918290205482519081529081018a90528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a450600198975050505050505050565b6010805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bb05780601f10610b8557610100808354040283529160200191610bb0565b604080517f486a0f42000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808a16820260248501528816026038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac90920192839052815160009391829190840190808383602083106110fd5780518252601f1990920191602091820191016110de565b600254600090600160a060020a0316331480611ef15750600054600160a060020a031633145b80611f065750600154600160a060020a031633145b1515611f1157600080fd5b600854600954611f269163ffffffff612be516565b606414611f3257600080fd5b60075460031115611f4257600080fd5b33600090815260046020526040902054611f5d9085906117b5565b9050611f998184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b1515611fa457600080fd5b50503360009081526004602052604090208054600190810190915560099290925550600380549091019055565b6000600160a060020a0383161515611fe857600080fd5b3360009081526005602052604090205482111561200457600080fd5b33600090815260056020526040902054612024908363ffffffff612bd316565b3360009081526005602052604080822092909255600160a060020a03851681522054612056908363ffffffff612be516565b600160a060020a038416600081815260056020908152604091829020939093558051858152905191923392600080516020612c6a8339815191529281900390910190a350600192915050565b60008080600160a060020a03871615156120bb57600080fd5b6120c83088888888611e1e565b91506120d48289611139565b9050600160a060020a03811615156120eb57600080fd5b600160a060020a038082166000908152600c60209081526040808320938b1683529290522054612121908763ffffffff612be516565b600160a060020a038083166000818152600c60209081526040808320948d168352938152838220949094559081526005909252902054612167908663ffffffff612bd316565b600160a060020a038216600090815260056020526040808220929092553381522054612199908663ffffffff612be516565b33600090815260056020908152604080832093909355600160a060020a03848116808452600c8352848420918c168085529183529284902054845190815293519093600080516020612c8a83398151915292908290030190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a3600160a060020a038181166000818152600c60209081526040808320948c16808452948252918290205482519081529081018990528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a4506001979650505050505050565b600254600160a060020a031681565b604080517f486a0f44000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808b1682026024850152808a1682026038850152881602604c830152606082018690526080820185905260a08083018590528351808403909101815260c0909201928390528151600093918291908401908083835b602083106123585780518252601f199092019160209182019101612339565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209a9950505050505050505050565b60008080600160a060020a03871615156123a857600080fd5b6123b63089898989896122a0565b91506123c2828a611139565b9050600160a060020a03811615156123d957600080fd5b600160a060020a038816600090815260056020526040902054612402908763ffffffff612bd316565b600160a060020a03808a166000908152600560205260408082209390935590891681522054612437908763ffffffff612be516565b600160a060020a038089166000908152600560209081526040808320949094558b83168252600c8152838220928516825291909152205461247e908763ffffffff612bd316565b600160a060020a03808a166000908152600c6020908152604080832093861683529281528282209390935560059092529020546124c1908663ffffffff612bd316565b600160a060020a0382166000908152600560205260408082209290925533815220546124f3908663ffffffff612be516565b336000908152600560209081526040918290209290925580518881529051600160a060020a038a811693908c1692600080516020612c6a833981519152929081900390910190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a350600198975050505050505050565b3360009081526004602052604090205490565b336000908152600c60209081526040808320600160a060020a03861684529091528120546125be908363ffffffff612be516565b336000818152600c60209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020612c8a833981519152929081900390910190a350600192915050565b600254600090600160a060020a03163314806126375750600054600160a060020a031633145b8061264c5750600154600160a060020a031633145b151561265757600080fd5b600160a060020a0384161580159061267d5750600154600160a060020a03858116911614155b80156126975750600254600160a060020a03858116911614155b15156126a257600080fd5b336000908152600460205260409020546126bd90859061166d565b90506126f98184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b151561270457600080fd5b505033600090815260046020526040812080546001908101909155815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039490941693909317905550600380549091019055565b600160a060020a039182166000908152600c6020908152604080832093909416825291909152205490565b600254600090600160a060020a03163314806127a75750600054600160a060020a031633145b806127bc5750600154600160a060020a031633145b15156127c757600080fd5b60648411156127d557600080fd5b60008410156127e357600080fd5b336000908152600460205260409020546127fe9085906114a1565b905061283a8184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b151561284557600080fd5b505033600090815260046020526040902080546001908101909155600d9290925550600380549091019055565b604080516c01000000000000000000000000600160a060020a0380891682026020808501919091529088169091026034830152604882018690526068820185905260888083018590528351808403909101815260a890920192839052815160009391829190840190808383602083106110fd5780518252601f1990920191602091820191016110de565b600a54600160a060020a031681565b6002546000908190600160a060020a03163314806129335750600054600160a060020a031633145b806129485750600154600160a060020a031633145b151561295357600080fd5b61295d8484611139565b9050600160a060020a03811633141561297557600080fd5b600254600160a060020a038281169116148061299e5750600054600160a060020a038281169116145b806129b65750600154600160a060020a038281169116145b949350505050565b600b546000908190600160a060020a0316158015906129e75750600a54600160a060020a031615155b15156129f257600080fd5b6006546b204fce5e3e250261100000001015612a0d57600080fd5b600e54600a54600160a060020a03166000908152600560205260409020541115612a3657600080fd5b612a5c6064612a5060095486612c2b90919063ffffffff16565b9063ffffffff612c5416565b9150612a786064612a5060085486612c2b90919063ffffffff16565b600654909150612a8e908463ffffffff612be516565b600655600a54600160a060020a0316600090815260056020526040902054612abc908363ffffffff612be516565b600a54600160a060020a0390811660009081526005602052604080822093909355600b5490911681522054612af7908263ffffffff612be516565b600b54600160a060020a0390811660009081526005602052604080822093909355600d54600a5490921681529190912054612b3e91606491612a509163ffffffff612c2b16565b600e55600780546001019055600a54604080518481529051600160a060020a03909216917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859181900360200190a2600b54604080518381529051600160a060020a03909216917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859181900360200190a2505050565b600082821115612bdf57fe5b50900390565b81810182811015610c0757fe5b60008060008060008086516041141515612c0b57600080fd5b505050506020830151604084015160609094015160001a94909392509050565b6000821515612c3c57506000610c07565b50818102818382811515612c4c57fe5b0414610c0757fe5b60008183811515612c6157fe5b0493925050505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a72305820b064175b97ef48c5b91ce9f5e24fe37a3fd9e70dbdee93ecc9951897346d4cd900290f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968850000000000000000000000007aeaf9c8a62caf79c60b0eeb1e57eaefc140a5ca0000000000000000000000005425a1ca8b650ccfe0620fd10fe6e3dc46f0211d000000000000000000000000d75c77816c83537a6bb97819398fc2694e2e147800000000000000000000000032b528329271a828a1f098e782b5a2a021bfb70b000000000000000000000000b28bf5232f743c61f8c8f0db7b89ba88447261da

Deployed Bytecode

0x6080604052600436106102455763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630519ce79811461024a57806306b765e41461027b57806306fdde03146102a2578063095ea7b31461032c5780630a0f8168146103645780630bf2c50d146103795780630ee85800146103a85780631249c58b146103cc5780631296830d146103e157806315420b711461045457806318160ddd1461048457806319045a25146104995780631b3b69d5146104f75780631c75f0851461050c57806323b872dd1461052157806329963e301461054b5780632b387170146105605780632ff2e9dc14610575578063313ce5671461058a57806333762c081461059f57806336c4db09146105ba57806340557cf1146105e75780634eaef8a2146105fc57806355381f001461062057806359388d78146106355780635af2935f146106655780635e04797514610680578063617b390b146106f35780636618846314610766578063703936861461078a57806370a08231146107ae57806378ef7f02146107cf5780638be52783146107e457806395d89b4114610857578063a45f71ff1461086c578063a53d19531461089c578063a9059cbb146108c0578063adb8249e146108e4578063b047fb5014610957578063b7656dc51461096c578063bca50515146109a2578063d087d28814610a1f578063d73dd62314610a34578063d9194fcb14610a58578063dd62ed3e14610a85578063f7841c3b14610aac578063f7ac9c2e14610ad0578063fffe088d14610b00575b600080fd5b34801561025657600080fd5b5061025f610b15565b60408051600160a060020a039092168252519081900360200190f35b34801561028757600080fd5b50610290610b24565b60408051918252519081900360200190f35b3480156102ae57600080fd5b506102b7610b2a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f15781810151838201526020016102d9565b50505050905090810190601f16801561031e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561033857600080fd5b50610350600160a060020a0360043516602435610bb8565b604080519115158252519081900360200190f35b34801561037057600080fd5b5061025f610c0d565b34801561038557600080fd5b506103a660048035600160a060020a03169060248035908101910135610c1c565b005b3480156103b457600080fd5b50610290600160a060020a0360043516602435610d61565b3480156103d857600080fd5b506103a6610e2a565b3480156103ed57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610e84565b34801561046057600080fd5b50610290600160a060020a036004358116906024351660443560643560843561104f565b34801561049057600080fd5b50610290611133565b3480156104a557600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261025f9583359536956044949193909101919081908401838280828437509497506111399650505050505050565b34801561050357600080fd5b50610290611304565b34801561051857600080fd5b5061025f61130a565b34801561052d57600080fd5b50610350600160a060020a0360043581169060243516604435611319565b34801561055757600080fd5b50610350611480565b34801561056c57600080fd5b50610290611485565b34801561058157600080fd5b50610290611495565b34801561059657600080fd5b5061029061149b565b3480156105ab57600080fd5b506102906004356024356114a1565b3480156105c657600080fd5b506103a660048035600160a060020a0316906024803590810191013561151f565b3480156105f357600080fd5b50610290611667565b34801561060857600080fd5b50610290600160a060020a036004351660243561166d565b34801561062c57600080fd5b50610290611702565b34801561064157600080fd5b50610290600160a060020a0360043581169060243516604435606435608435611708565b34801561067157600080fd5b506102906004356024356117b5565b34801561068c57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025f94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611833565b3480156106ff57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611871565b34801561077257600080fd5b50610350600160a060020a0360043516602435611a10565b34801561079657600080fd5b50610290600160a060020a0360043516602435611aee565b3480156107ba57600080fd5b50610290600160a060020a0360043516611b83565b3480156107db57600080fd5b50610290611b9e565b3480156107f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611ba4565b34801561086357600080fd5b506102b7611dc3565b34801561087857600080fd5b50610290600160a060020a0360043581169060243516604435606435608435611e1e565b3480156108a857600080fd5b506103a6600480359060248035908101910135611ecb565b3480156108cc57600080fd5b50610350600160a060020a0360043516602435611fd1565b3480156108f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050508335600160a060020a03169450505060208201359160408101359150606001356120a2565b34801561096357600080fd5b5061025f612291565b34801561097857600080fd5b50610290600160a060020a036004358116906024358116906044351660643560843560a4356122a0565b3480156109ae57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261035094369492936024939284019190819084018382808284375094975050600160a060020a0385358116965060208601351694604081013594506060810135935060800135915061238f9050565b348015610a2b57600080fd5b50610290612577565b348015610a4057600080fd5b50610350600160a060020a036004351660243561258a565b348015610a6457600080fd5b506103a660048035600160a060020a03169060248035908101910135612611565b348015610a9157600080fd5b50610290600160a060020a0360043581169060243516612756565b348015610ab857600080fd5b506103a6600480359060248035908101910135612781565b348015610adc57600080fd5b50610290600160a060020a0360043581169060243516604435606435608435612872565b348015610b0c57600080fd5b5061025f6128fc565b600154600160a060020a031681565b600e5481565b600f805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bb05780601f10610b8557610100808354040283529160200191610bb0565b820191906000526020600020905b815481529060010190602001808311610b9357829003601f168201915b505050505081565b336000818152600c60209081526040808320600160a060020a03871680855290835281842086905581518681529151939490939092600080516020612c8a833981519152928290030190a35060015b92915050565b600054600160a060020a031681565b600254600090600160a060020a0316331480610c425750600054600160a060020a031633145b80610c575750600154600160a060020a031633145b1515610c6257600080fd5b600160a060020a03841615801590610c885750600054600160a060020a03858116911614155b8015610ca25750600254600160a060020a03858116911614155b1515610cad57600080fd5b33600090815260046020526040902054610cc8908590610d61565b9050610d048184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b1515610d0f57600080fd5b505033600090815260046020526040902080546001908101909155805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039390931692909217825550600380549091019055565b604080517f486a0f3f000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a0386160260248301526038808301859052835180840390910181526058909201928390528151600093918291908401908083835b60208310610df75780518252601f199092019160209182019101610dd8565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b600254600160a060020a0316331480610e4d5750600054600160a060020a031633145b80610e625750600154600160a060020a031633145b1515610e6d57600080fd5b610e826b033b2e3c9fd0803ce80000006129be565b565b60008080600160a060020a0387161515610e9d57600080fd5b610eaa308888888861104f565b9150610eb68289611139565b9050600160a060020a0381161515610ecd57600080fd5b600160a060020a038116600090815260056020526040902054610f08908690610efc908963ffffffff612bd316565b9063ffffffff612bd316565b600160a060020a038083166000908152600560205260408082209390935590891681522054610f3d908763ffffffff612be516565b600160a060020a038816600090815260056020526040808220929092553381522054610f6f908663ffffffff612be516565b336000908152600560209081526040918290209290925580518881529051600160a060020a038a81169390851692600080516020612c6a833981519152929081900390910190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a333600160a060020a031687600160a060020a031682600160a060020a03167fec5a73fd1f178be20c1bca1b406cbf4b5c20d833b66e582fc122fb4baa0fc2a48989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b604080517f486a0f41000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808a16820260248501528816026038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac909201928390528151600093918291908401908083835b602083106110fd5780518252601f1990920191602091820191016110de565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209998505050505050505050565b60065490565b600080600080606060008651604114151561115757600095506112f9565b61116087612bf2565b90965094509250601b60ff8416101561117a57601b830192505b8260ff16601b1415801561119257508260ff16601c14155b156111a057600095506112f9565b6040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250915081886040516020018083805190602001908083835b6020831061120c5780518252601f1990920191602091820191016111ed565b51815160209384036101000a600019018019909216911617905292019384525060408051808503815293820190819052835193945092839250908401908083835b6020831061126c5780518252601f19909201916020918201910161124d565b51815160209384036101000a600019018019909216911617905260408051929094018290038220600080845283830180875282905260ff8b1684870152606084018d9052608084018c905294519097506001965060a080840196509194601f19820194509281900390910191865af11580156112ec573d6000803e3d6000fd5b5050506020604051035195505b505050505092915050565b600d5481565b600b54600160a060020a031681565b6000600160a060020a038316151561133057600080fd5b600160a060020a03841660009081526005602052604090205482111561135557600080fd5b600160a060020a0384166000908152600c6020908152604080832033845290915290205482111561138557600080fd5b600160a060020a0384166000908152600560205260409020546113ae908363ffffffff612bd316565b600160a060020a0380861660009081526005602052604080822093909355908516815220546113e3908363ffffffff612be516565b600160a060020a038085166000908152600560209081526040808320949094559187168152600c82528281203382529091522054611427908363ffffffff612bd316565b600160a060020a038086166000818152600c602090815260408083203384528252918290209490945580518681529051928716939192600080516020612c6a833981519152929181900390910190a35060019392505050565b600190565b6b204fce5e3e2502611000000081565b60125481565b60115481565b604080517f486a0f45000000000000000000000000000000000000000000000000000000006020808301919091526024820185905260448083018590528351808403909101815260649092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b600254600090600160a060020a03163314806115455750600054600160a060020a031633145b8061155a5750600154600160a060020a031633145b151561156557600080fd5b600160a060020a0384161580159061158b5750600054600160a060020a03858116911614155b80156115a55750600154600160a060020a03858116911614155b15156115b057600080fd5b336000908152600460205260409020546115cb908590611aee565b90506116078184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b151561161257600080fd5b5050336000908152600460205260409020805460019081019091556002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03949094169390931790925550600380549091019055565b60095481565b604080517f486a0f3e000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03861602602483015260388083018590528351808403909101815260589092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b60035481565b604080517f486a0f43000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808a16820260248501528816026038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac90920192839052815160009391829190840190808383602083106110fd5780518252601f1990920191602091820191016110de565b604080517f486a0f46000000000000000000000000000000000000000000000000000000006020808301919091526024820185905260448083018590528351808403909101815260649092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b60008080600160a060020a038716151561184c57600080fd5b611859308888888861104f565b91506118658289611139565b98975050505050505050565b60008080600160a060020a038716151561188a57600080fd5b6118973088888888612872565b91506118a38289611139565b9050600160a060020a03811615156118ba57600080fd5b600160a060020a038082166000818152600c60209081526040808320948c1683529381528382208a9055918152600590915220546118fe908663ffffffff612bd316565b600160a060020a038216600090815260056020526040808220929092553381522054611930908663ffffffff612be516565b336000908152600560209081526040918290209290925580518881529051600160a060020a038a81169390851692600080516020612c8a833981519152929081900390910190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a333600160a060020a031687600160a060020a031682600160a060020a03167f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb8989604051808381526020018281526020019250505060405180910390a4506001979650505050505050565b336000908152600c60209081526040808320600160a060020a038616845290915281205480831115611a6557336000908152600c60209081526040808320600160a060020a0388168452909152812055611a9a565b611a75818463ffffffff612bd316565b336000908152600c60209081526040808320600160a060020a03891684529091529020555b336000818152600c60209081526040808320600160a060020a038916808552908352928190205481519081529051929392600080516020612c8a833981519152929181900390910190a35060019392505050565b604080517f486a0f40000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03861602602483015260388083018590528351808403909101815260589092019283905281516000939182919084019080838360208310610df75780518252601f199092019160209182019101610dd8565b600160a060020a031660009081526005602052604090205490565b60085481565b6000808080600160a060020a0388161515611bbe57600080fd5b611bcb3089898989611708565b9250611bd7838a611139565b9150600160a060020a0382161515611bee57600080fd5b50600160a060020a038082166000908152600c60209081526040808320938b168352929052205480871115611c4a57600160a060020a038083166000908152600c60209081526040808320938c16835292905290812055611c81565b611c5a818863ffffffff612bd316565b600160a060020a038084166000908152600c60209081526040808320938d16835292905220555b600160a060020a038216600090815260056020526040902054611caa908763ffffffff612bd316565b600160a060020a038316600090815260056020526040808220929092553381522054611cdc908763ffffffff612be516565b336000908152600560209081526040918290209290925580518981529051600160a060020a038b81169390861692600080516020612c8a833981519152929081900390910190a36040805187815290513391600160a060020a03851691600080516020612c6a8339815191529181900360200190a3600160a060020a038281166000818152600c60209081526040808320948d16808452948252918290205482519081529081018a90528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a450600198975050505050505050565b6010805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bb05780601f10610b8557610100808354040283529160200191610bb0565b604080517f486a0f42000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808a16820260248501528816026038830152604c8201869052606c8201859052608c8083018590528351808403909101815260ac90920192839052815160009391829190840190808383602083106110fd5780518252601f1990920191602091820191016110de565b600254600090600160a060020a0316331480611ef15750600054600160a060020a031633145b80611f065750600154600160a060020a031633145b1515611f1157600080fd5b600854600954611f269163ffffffff612be516565b606414611f3257600080fd5b60075460031115611f4257600080fd5b33600090815260046020526040902054611f5d9085906117b5565b9050611f998184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b1515611fa457600080fd5b50503360009081526004602052604090208054600190810190915560099290925550600380549091019055565b6000600160a060020a0383161515611fe857600080fd5b3360009081526005602052604090205482111561200457600080fd5b33600090815260056020526040902054612024908363ffffffff612bd316565b3360009081526005602052604080822092909255600160a060020a03851681522054612056908363ffffffff612be516565b600160a060020a038416600081815260056020908152604091829020939093558051858152905191923392600080516020612c6a8339815191529281900390910190a350600192915050565b60008080600160a060020a03871615156120bb57600080fd5b6120c83088888888611e1e565b91506120d48289611139565b9050600160a060020a03811615156120eb57600080fd5b600160a060020a038082166000908152600c60209081526040808320938b1683529290522054612121908763ffffffff612be516565b600160a060020a038083166000818152600c60209081526040808320948d168352938152838220949094559081526005909252902054612167908663ffffffff612bd316565b600160a060020a038216600090815260056020526040808220929092553381522054612199908663ffffffff612be516565b33600090815260056020908152604080832093909355600160a060020a03848116808452600c8352848420918c168085529183529284902054845190815293519093600080516020612c8a83398151915292908290030190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a3600160a060020a038181166000818152600c60209081526040808320948c16808452948252918290205482519081529081018990528151339493927f43a220267705e74ee2ceafd46afc841850db6f85a662189a7def697bbdd90ffb928290030190a4506001979650505050505050565b600254600160a060020a031681565b604080517f486a0f44000000000000000000000000000000000000000000000000000000006020808301919091526c01000000000000000000000000600160a060020a03808b1682026024850152808a1682026038850152881602604c830152606082018690526080820185905260a08083018590528351808403909101815260c0909201928390528151600093918291908401908083835b602083106123585780518252601f199092019160209182019101612339565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209a9950505050505050505050565b60008080600160a060020a03871615156123a857600080fd5b6123b63089898989896122a0565b91506123c2828a611139565b9050600160a060020a03811615156123d957600080fd5b600160a060020a038816600090815260056020526040902054612402908763ffffffff612bd316565b600160a060020a03808a166000908152600560205260408082209390935590891681522054612437908763ffffffff612be516565b600160a060020a038089166000908152600560209081526040808320949094558b83168252600c8152838220928516825291909152205461247e908763ffffffff612bd316565b600160a060020a03808a166000908152600c6020908152604080832093861683529281528282209390935560059092529020546124c1908663ffffffff612bd316565b600160a060020a0382166000908152600560205260408082209290925533815220546124f3908663ffffffff612be516565b336000908152600560209081526040918290209290925580518881529051600160a060020a038a811693908c1692600080516020612c6a833981519152929081900390910190a36040805186815290513391600160a060020a03841691600080516020612c6a8339815191529181900360200190a350600198975050505050505050565b3360009081526004602052604090205490565b336000908152600c60209081526040808320600160a060020a03861684529091528120546125be908363ffffffff612be516565b336000818152600c60209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020612c8a833981519152929081900390910190a350600192915050565b600254600090600160a060020a03163314806126375750600054600160a060020a031633145b8061264c5750600154600160a060020a031633145b151561265757600080fd5b600160a060020a0384161580159061267d5750600154600160a060020a03858116911614155b80156126975750600254600160a060020a03858116911614155b15156126a257600080fd5b336000908152600460205260409020546126bd90859061166d565b90506126f98184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b151561270457600080fd5b505033600090815260046020526040812080546001908101909155815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039490941693909317905550600380549091019055565b600160a060020a039182166000908152600c6020908152604080832093909416825291909152205490565b600254600090600160a060020a03163314806127a75750600054600160a060020a031633145b806127bc5750600154600160a060020a031633145b15156127c757600080fd5b60648411156127d557600080fd5b60008410156127e357600080fd5b336000908152600460205260409020546127fe9085906114a1565b905061283a8184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375061290b945050505050565b151561284557600080fd5b505033600090815260046020526040902080546001908101909155600d9290925550600380549091019055565b604080516c01000000000000000000000000600160a060020a0380891682026020808501919091529088169091026034830152604882018690526068820185905260888083018590528351808403909101815260a890920192839052815160009391829190840190808383602083106110fd5780518252601f1990920191602091820191016110de565b600a54600160a060020a031681565b6002546000908190600160a060020a03163314806129335750600054600160a060020a031633145b806129485750600154600160a060020a031633145b151561295357600080fd5b61295d8484611139565b9050600160a060020a03811633141561297557600080fd5b600254600160a060020a038281169116148061299e5750600054600160a060020a038281169116145b806129b65750600154600160a060020a038281169116145b949350505050565b600b546000908190600160a060020a0316158015906129e75750600a54600160a060020a031615155b15156129f257600080fd5b6006546b204fce5e3e250261100000001015612a0d57600080fd5b600e54600a54600160a060020a03166000908152600560205260409020541115612a3657600080fd5b612a5c6064612a5060095486612c2b90919063ffffffff16565b9063ffffffff612c5416565b9150612a786064612a5060085486612c2b90919063ffffffff16565b600654909150612a8e908463ffffffff612be516565b600655600a54600160a060020a0316600090815260056020526040902054612abc908363ffffffff612be516565b600a54600160a060020a0390811660009081526005602052604080822093909355600b5490911681522054612af7908263ffffffff612be516565b600b54600160a060020a0390811660009081526005602052604080822093909355600d54600a5490921681529190912054612b3e91606491612a509163ffffffff612c2b16565b600e55600780546001019055600a54604080518481529051600160a060020a03909216917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859181900360200190a2600b54604080518381529051600160a060020a03909216917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859181900360200190a2505050565b600082821115612bdf57fe5b50900390565b81810182811015610c0757fe5b60008060008060008086516041141515612c0b57600080fd5b505050506020830151604084015160609094015160001a94909392509050565b6000821515612c3c57506000610c07565b50818102818382811515612c4c57fe5b0414610c0757fe5b60008183811515612c6157fe5b0493925050505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a72305820b064175b97ef48c5b91ce9f5e24fe37a3fd9e70dbdee93ecc9951897346d4cd90029

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

0000000000000000000000007aeaf9c8a62caf79c60b0eeb1e57eaefc140a5ca0000000000000000000000005425a1ca8b650ccfe0620fd10fe6e3dc46f0211d000000000000000000000000d75c77816c83537a6bb97819398fc2694e2e147800000000000000000000000032b528329271a828a1f098e782b5a2a021bfb70b000000000000000000000000b28bf5232f743c61f8c8f0db7b89ba88447261da

-----Decoded View---------------
Arg [0] : _ceoAddress (address): 0x7AEAf9C8A62caf79C60B0EEB1e57EAefC140a5Ca
Arg [1] : _cfoAddress (address): 0x5425A1cA8b650CcfE0620fd10Fe6E3dC46f0211D
Arg [2] : _cooAddress (address): 0xD75C77816C83537A6bb97819398fc2694e2E1478
Arg [3] : _teamAddress (address): 0x32B528329271a828a1f098E782B5a2a021Bfb70b
Arg [4] : _saleAddress (address): 0xb28BF5232F743c61f8C8F0db7b89bA88447261DA

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000007aeaf9c8a62caf79c60b0eeb1e57eaefc140a5ca
Arg [1] : 0000000000000000000000005425a1ca8b650ccfe0620fd10fe6e3dc46f0211d
Arg [2] : 000000000000000000000000d75c77816c83537a6bb97819398fc2694e2e1478
Arg [3] : 00000000000000000000000032b528329271a828a1f098e782b5a2a021bfb70b
Arg [4] : 000000000000000000000000b28bf5232f743c61f8c8f0db7b89ba88447261da


Swarm Source

bzzr://b064175b97ef48c5b91ce9f5e24fe37a3fd9e70dbdee93ecc9951897346d4cd9

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  ]

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.