anchor.diff:   */
   
   class MqttSubOptions {
  -  static Map<String, String> optionList = {
  -                        '-?': 'display help message',
  -                        '-c': 'disable clean session',
  -                        '-d': 'enable debug message',
  -                        '-h': 'host to connect to. Default is 127.0.0.1',
  -                        '-p': 'port to connect to. Default is 1883',
  -                        '-i': 'client ID',
  -                        '-k': 'keep alive in seconds. Defaults is 60',
  -                        '-t': 'topic',
  -                        '-m': 'message payload',
  -                        '-q': 'quality of service. Default is 0',
  -                        '-u': 'provide a username',
  -                        '-P': 'provide a password',
  -                        '--will-payload': 'payload for the client will',
  -                        '--will-qos': 'quality of service for the client will',
  -                        '--will-retain': 'if provided, make the client will retain',
  -                        '--will-topic': 'the topic on which to publish the client will'};
     
     bool debugMessage = false;
     bool cleanSession = true;
  
positive.code:   int willQoS = QOS_0;
    bool willRetain = false;
    
     void displayOptionsHelp() {
      optionList.forEach((k,v) =>   print("${k} :  ${v}"));
      exit(0);
    }
    bool setOption(String option, [String value = null]) {
      bool valueUsed = true;
  
      switch (option) {
        case '-?': 
          displayOptionsHelp();
          valueUsed = false;
          break;
        case '-d': 
          valueUsed = false;
          debugMessage = true;
          break;
        case '-c': 
          valueUsed = false;
          cleanSession = false;
          break;
        case '-h': 
          host = value;
          break;
        case '-p': 
          port = int.parse(value);
          break;
        case '-i':
          clientID = value;
          break;
        case '-k':
          keepAlive = int.parse(value);
          break;
        case '-t': 
          topic = value;
          break;
        case '-m': 
          payload = value;
          break;
        case '-q': 
          QoS = int.parse(value);
          break;
        case '-u': 
          user = value;
          break;
        case '-P': 
          password = value;
          break;
        case '--will-payload': 
          willPayload = value;
          break;
        case '--will-qos': 
          willQoS = int.parse(value);
          break;
        case '--will-retain': 
          valueUsed = false;
          willRetain = true;
          break;
        case '--will-topic':
          willTopic = value;
          break;
        default: 
            print("Unknown option $option");
            displayOptionsHelp();
            exit(-1);
            break;
      }
      
      return valueUsed;
    }
      
  }
  main() {
    Options options = new Options();
    MqttSubOptions mqttOptions = new MqttSubOptions();
    
    for (int i=0; i < options.arguments.length; i++) {
      if (options.arguments[i].startsWith("-") && MqttSubOptions.optionList.containsKey(options.arguments[i])) {
        if (mqttOptions.setOption(options.arguments[i], ( (options.arguments.length > i + 1) ? options.arguments[i+1] : null ) ) ) {
          i++;
        }
      }
    }
    
    // Create MqttClient
    MqttClient<MqttConnectionIOSocket> c = new MqttClient(new MqttConnectionIOSocket.setOptions(host:mqttOptions.host, port: mqttOptions.port), 
  
negative.code: import 'dart:io';
  import 'package:mqtt/mqtt_shared.dart';
  import 'package:mqtt/mqtt_connection_io_socket.dart';
  import 'package:args/args.dart';
  
  /**
   * mqtt_sub
  