contract BurnableToken is BasicToken, Ownable {
  string internal constant INVALID_TOKEN_VALUES = 'Invalid token values';
  string internal constant NOT_ENOUGH_TOKENS = 'Not enough tokens';
  
  // events
  event Burn(address indexed burner, uint256 amount);

  // reduce sender balance and Token total supply
  function burn(uint256 _value) onlyOwner public {
    balances[msg.sender] = balances[msg.sender].sub(_value);
    _totalSupply = _totalSupply.sub(_value);
    emit Burn(msg.sender, _value);
    emit Transfer(msg.sender, address(0), _value);
  }
}
function burn(uint256 _value) onlyOwner public {
  balances[msg.sender] = balances[msg.sender].sub(_value);
  _totalSupply = _totalSupply.sub(_value);
  emit Burn(msg.sender, _value);
  emit Transfer(msg.sender, address(0), _value);
}

// reduce sender balance and Token total supply