<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _setup_arg_parser(args_list, watcher_plugin_class, health_plugin_class):
 """ Configure and return the argument parser for the command line options. If a watcher and/or health-monitor plugin_class is provided then call the add_arguments() callback of the plugin class(es), in order to add plugin specific options. Some parameters are required (vpc and region, for example), but we may be able to discover them automatically, later on. Therefore, we allow them to remain unset on the command line. We will have to complain about those parameters missing later on, if the auto discovery fails. The args_list (from sys.argv) is passed in, since some plugins have to do their own ad-hoc extraction of certain parameters in order to add things to the official parameter list. Return parser and the conf-name of all the arguments that have been added. """

    parser = argparse.ArgumentParser(
                    description="VPC router: Manage routes in VPC route table")
    # General arguments
    parser.add_argument('--verbose', dest="verbose", action='store_true',
                        help="produces more output")
    parser.add_argument('-l', '--logfile', dest='logfile',
                        default='-',
                        help="full path name for the logfile, "
                             "or '-' for logging to stdout, "
                             "default: '-' (logging to stdout)"),
    parser.add_argument('-r', '--region', dest="region_name",
                        required=False, default=None,
                        help="the AWS region of the VPC")
    parser.add_argument('-v', '--vpc', dest="vpc_id",
                        required=False, default=None,
                        help="the ID of the VPC in which to operate")
    parser.add_argument('--ignore_routes', dest="ignore_routes",
                        required=False, default=None,
                        help="Comma separated list of CIDRs or IPs for "
                             "routes which vpc-router should ignore.")
    parser.add_argument('--route_recheck_interval',
                        dest="route_recheck_interval",
                        required=False, default="30", type=int,
                        help="time between regular checks of VPC route "
                             "tables, default: 30")
    parser.add_argument('-a', '--address', dest="addr",
                        default="localhost",
                        help="address to listen on for HTTP requests, "
                             "default: localhost")
    parser.add_argument('-p', '--port', dest="port",
                        default="33289", type=int,
                        help="port to listen on for HTTP requests, "
                             "default: 33289")
    parser.add_argument('-m', '--mode', dest='mode', required=True,
                        help="name of the watcher plugin")
    parser.add_argument('-H', '--health', dest='health', required=False,
                        default=monitor.MONITOR_DEFAULT_PLUGIN,
                        help="name of the health-check plugin, "
                             "default: %s" % monitor.MONITOR_DEFAULT_PLUGIN)

    arglist = ["logfile", "region_name", "vpc_id", "route_recheck_interval",
               "verbose", "addr", "port", "mode", "health", "ignore_routes"]

    # Inform the CurrentState object of the main config parameter names, which
    # should be rendered in an overview.
    CURRENT_STATE.main_param_names = list(arglist)

    # Let each watcher and health-monitor plugin add its own arguments.
    for plugin_class in [watcher_plugin_class, health_plugin_class]:
        if plugin_class:
            arglist.extend(plugin_class.add_arguments(parser, args_list))

    return parser, arglist