contract BasicToken is ERC20Basic,
Pausable {
    uint256 startPreSale; uint256 endPreSale; uint256 startSale; 
    uint256 endSale; 
    using SafeMath for uint256; mapping(address => uint256)balances; uint256 preICOReserveTokens; uint256 icoReserveTokens; 
    address businessReserveAddress; uint256 public timeLock = 1586217600; //7 April 2020 locked
    uint256 public incentiveTokensLimit;
    modifier checkAdditionalTokenLock(uint256 value) {

        if (msg.sender == businessReserveAddress) {
            
            if ((now<endSale) ||(now < timeLock &&value>incentiveTokensLimit)) {
                revert();
            } else {
                _;
            }
        } else {
            _;
        }

    }
    
    function updateTimeLock(uint256 _timeLock) external onlyOwner {
        timeLock = _timeLock;
    }
    function updateBusinessReserveAddress(address _businessAddress) external onlyOwner {
        businessReserveAddress =_businessAddress;
    }
    
    function updateIncentiveTokenLimit(uint256 _incentiveTokens) external onlyOwner {
      incentiveTokensLimit = _incentiveTokens;
   }    
    /**
 * @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 whenNotPaused checkAdditionalTokenLock(_value) returns(
        bool
    ) {
        require(_to != address(0));
        require(_value <= balances[msg.sender]);
        // SafeMath.sub will throw if there is not enough balance.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        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 constant returns(uint256 balance) {
        return balances[_owner];
    }
}
/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
function transfer(address _to, uint256 _value)public whenNotPaused checkAdditionalTokenLock(_value) returns(
    bool
) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);
    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit Transfer(msg.sender, _to, _value);
    return true;
}

/**
 * @dev transfer token for a specified address
 * @param _to The address to transfer to.
 * @param _value The amount to be transferred.
 */