]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5477] kea-dhcp6 now supports db reconnect
authorThomas Markwalder <tmark@isc.org>
Thu, 1 Mar 2018 13:25:51 +0000 (08:25 -0500)
committerThomas Markwalder <tmark@isc.org>
Thu, 1 Mar 2018 13:28:21 +0000 (08:28 -0500)
    kea-dhcp6
        added support for max-reconnect-tries and reconnect-wait-time
        to lease and host db parsers

        Added a callback for when DB backends detect loss of connectivity

        Added a self-rescheduling method to attempt to reconnect to the
        backends if retries are enabled

    dhcpsrv
        PgSqlConnection::checkStatementError() - Modified "fatal" logic
        to throw after invoking db_lost_callback.

    Misc. cleanup

12 files changed:
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/ctrl_dhcp4_srv.h
src/bin/dhcp4/dhcp4_messages.mes
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/ctrl_dhcp6_srv.h
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_messages.mes
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/lib/dhcpsrv/pgsql_connection.cc

index 906b479f2736066993f114d3e792fe67b4d1f8d5..8a001748cda5e209fb7e189d3ea8c637afd11d60 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2018 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -18,7 +18,6 @@
 #include <hooks/hooks_manager.h>
 #include <stats/stats_mgr.h>
 #include <cfgrpt/config_report.h>
-#include <boost/lexical_cast.hpp>
 #include <signal.h>
 #include <sstream>
 
@@ -544,83 +543,6 @@ ControlledDhcpv4Srv::processCommand(const string& command,
     }
 }
 
-void
-ControlledDhcpv4Srv::dbReconnect() {
-    bool reopened = false;
-
-    // Re-open lease and host database with new parameters.
-    try {
-        CfgDbAccessPtr cfg_db = CfgMgr::instance().getCurrentCfg()->getCfgDbAccess();
-        cfg_db->createManagers(boost::bind(&ControlledDhcpv4Srv::dbLostCallback, this, _1));
-        reopened = true;
-    } catch (const std::exception& ex) {
-        LOG_ERROR(dhcp4_logger, DHCP4_DB_RECONNECT_ATTEMPT_FAILED).arg(ex.what());
-    }
-
-    if (reopened) {
-        // Cancel the timer.
-        if (TimerMgr::instance()->isTimerRegistered("Dhcp4DbReconnectTimer")) {
-            TimerMgr::instance()->cancel("Dhcp4DbReconnectTimer");
-        }
-
-        // Set network state to service enabled
-        network_state_.enableService();
-
-        // Toss the reconnct control, we're done with it
-        db_reconnect_ctl_.reset();
-    } else {
-        if (!db_reconnect_ctl_->checkRetries()) {
-            LOG_ERROR(dhcp4_logger, DHCP4_DB_RECONNECT_RETRIES_EXHAUSTED)
-            .arg(db_reconnect_ctl_->maxRetries());
-            shutdown();
-            return;
-        }
-
-        LOG_INFO(dhcp4_logger, DHCP4_DB_RECONNECT_ATTEMPT_SCHEDULE)
-                .arg(db_reconnect_ctl_->maxRetries() - db_reconnect_ctl_->retriesLeft())
-                .arg(db_reconnect_ctl_->maxRetries())
-                .arg(db_reconnect_ctl_->retryInterval());
-
-        if (!TimerMgr::instance()->isTimerRegistered("Dhcp4DbReconnectTimer")) {
-            TimerMgr::instance()->registerTimer("Dhcp4DbReconnectTimer",
-                            boost::bind(&ControlledDhcpv4Srv::dbReconnect, this),
-                            db_reconnect_ctl_->retryInterval() * 1000,
-                            asiolink::IntervalTimer::ONE_SHOT);
-        }
-
-        TimerMgr::instance()->setup("Dhcp4DbReconnectTimer");
-    }
-}
-
-bool
-ControlledDhcpv4Srv::dbLostCallback(ReconnectCtlPtr db_reconnect_ctl) {
-    // Disable service until we recover
-    network_state_.disableService();
-
-    if (!db_reconnect_ctl) {
-        // This shouldn't never happen
-        LOG_ERROR(dhcp4_logger, DHCP4_DB_RECONNECT_NO_DB_CTL);
-        return (false);
-    }
-
-    // If reconnect isn't enabled, log it and return false
-    if (!db_reconnect_ctl->retriesLeft() ||
-        !db_reconnect_ctl->retryInterval()) {
-        LOG_INFO(dhcp4_logger, DHCP4_DB_RECONNECT_DISABLED)
-            .arg(db_reconnect_ctl->retriesLeft())
-            .arg(db_reconnect_ctl->retryInterval());
-        return(false);
-    }
-
-    // Save the reconnect control
-    db_reconnect_ctl_ = db_reconnect_ctl;
-
-    // Invoke reconnect method
-    dbReconnect();
-
-    return(true);
-}
-
 isc::data::ConstElementPtr
 ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
 
@@ -729,7 +651,7 @@ ControlledDhcpv4Srv::checkConfig(isc::data::ConstElementPtr config) {
 
 ControlledDhcpv4Srv::ControlledDhcpv4Srv(uint16_t port /*= DHCP4_SERVER_PORT*/)
     : Dhcpv4Srv(port), io_service_(), timer_mgr_(TimerMgr::instance()),
-      db_reconnect_ctl_(0) {
+      db_reconnect_ctl_(NULL) {
     if (getInstance()) {
         isc_throw(InvalidOperation,
                   "There is another Dhcpv4Srv instance already.");
@@ -872,5 +794,82 @@ ControlledDhcpv4Srv::deleteExpiredReclaimedLeases(const uint32_t secs) {
     TimerMgr::instance()->setup(CfgExpiration::FLUSH_RECLAIMED_TIMER_NAME);
 }
 
+void
+ControlledDhcpv4Srv::dbReconnect() {
+    bool reopened = false;
+
+    // Re-open lease and host database with new parameters.
+    try {
+        CfgDbAccessPtr cfg_db = CfgMgr::instance().getCurrentCfg()->getCfgDbAccess();
+        cfg_db->createManagers(boost::bind(&ControlledDhcpv4Srv::dbLostCallback, this, _1));
+        reopened = true;
+    } catch (const std::exception& ex) {
+        LOG_ERROR(dhcp4_logger, DHCP4_DB_RECONNECT_ATTEMPT_FAILED).arg(ex.what());
+    }
+
+    if (reopened) {
+        // Cancel the timer.
+        if (TimerMgr::instance()->isTimerRegistered("Dhcp4DbReconnectTimer")) {
+            TimerMgr::instance()->cancel("Dhcp4DbReconnectTimer");
+        }
+
+        // Set network state to service enabled
+        network_state_.enableService();
+
+        // Toss the reconnct control, we're done with it
+        db_reconnect_ctl_.reset();
+    } else {
+        if (!db_reconnect_ctl_->checkRetries()) {
+            LOG_ERROR(dhcp4_logger, DHCP4_DB_RECONNECT_RETRIES_EXHAUSTED)
+            .arg(db_reconnect_ctl_->maxRetries());
+            shutdown();
+            return;
+        }
+
+        LOG_INFO(dhcp4_logger, DHCP4_DB_RECONNECT_ATTEMPT_SCHEDULE)
+                .arg(db_reconnect_ctl_->maxRetries() - db_reconnect_ctl_->retriesLeft() + 1)
+                .arg(db_reconnect_ctl_->maxRetries())
+                .arg(db_reconnect_ctl_->retryInterval());
+
+        if (!TimerMgr::instance()->isTimerRegistered("Dhcp4DbReconnectTimer")) {
+            TimerMgr::instance()->registerTimer("Dhcp4DbReconnectTimer",
+                            boost::bind(&ControlledDhcpv4Srv::dbReconnect, this),
+                            db_reconnect_ctl_->retryInterval() * 1000,
+                            asiolink::IntervalTimer::ONE_SHOT);
+        }
+
+        TimerMgr::instance()->setup("Dhcp4DbReconnectTimer");
+    }
+}
+
+bool
+ControlledDhcpv4Srv::dbLostCallback(ReconnectCtlPtr db_reconnect_ctl) {
+    // Disable service until we recover
+    network_state_.disableService();
+
+    if (!db_reconnect_ctl) {
+        // This shouldn't never happen
+        LOG_ERROR(dhcp4_logger, DHCP4_DB_RECONNECT_NO_DB_CTL);
+        return (false);
+    }
+
+    // If reconnect isn't enabled, log it and return false
+    if (!db_reconnect_ctl->retriesLeft() ||
+        !db_reconnect_ctl->retryInterval()) {
+        LOG_INFO(dhcp4_logger, DHCP4_DB_RECONNECT_DISABLED)
+            .arg(db_reconnect_ctl->retriesLeft())
+            .arg(db_reconnect_ctl->retryInterval());
+        return(false);
+    }
+
+    // Save the reconnect control
+    db_reconnect_ctl_ = db_reconnect_ctl;
+
+    // Invoke reconnect method
+    dbReconnect();
+
+    return(true);
+}
+
 }; // end of isc::dhcp namespace
 }; // end of isc namespace
index 356ee5ead9502d8b797c4fce9e1809e829e7eaa3..740a7dcfe977a696f9616fb06cd634d5356f6738 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2018 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -318,6 +318,12 @@ private:
     /// deleted.
     void deleteExpiredReclaimedLeases(const uint32_t secs);
 
+    /// @brief Attempts to reconnect the server to the DB backend managers
+    void dbReconnect();
+
+    /// @brief Callback DB backends should invoke upon loss of connectivity
+    bool dbLostCallback(ReconnectCtlPtr db_reconnect_ctl);
+
     /// @brief Static pointer to the sole instance of the DHCP server.
     ///
     /// This is required for config and command handlers to gain access to
@@ -333,12 +339,6 @@ private:
     /// make sure that the @c TimerMgr outlives instance of this class.
     TimerMgrPtr timer_mgr_;
 
-    /// @brief Attempts to reconnect the server to the DB backend managers
-    void dbReconnect();
-
-    /// @brief Callback DB backends should invoke upon loss of connectivity
-    bool dbLostCallback(ReconnectCtlPtr db_reconnect_ctl);
-
     /// @brief Pointer the current DB reconnect control values
     ReconnectCtlPtr db_reconnect_ctl_;
 };
index ed08c8b804b08905a5651c50e0c8d09ff192630e..708951cdaeaf2df31abcb5afa161f49093d0f37c 100644 (file)
@@ -161,7 +161,7 @@ should be reported.
 This is an informational message indicating that connetivity to either the
 lease or host database or both and that automatic reconnect is not enabled.
 
-% DHCP4_DB_RECONNECT_RETRIES_EXHAUSTED - Maximum number of Database reconnect attempts: %1, hasbeen exhausted without success, server is shutting down!
+% DHCP4_DB_RECONNECT_RETRIES_EXHAUSTED - Maximum number of Database reconnect attempts: %1, has been exhausted without success, server is shutting down!
 This error indicates that the server is shutting after failing to reconnect to
 the lease and/or host database(s) after making the maximum configured number 
 of reconnect attempts.  Loss of connectivity is typically a network or database
index dceb6367fbd5474bcc1627afccd23ee1d17a0ea6..bfa8348d2af15b2721baf1a2bbad9a73c1faedb4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2018 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -11,6 +11,7 @@
 #include <dhcp/libdhcp++.h>
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/cfg_db_access.h>
+#include <dhcpsrv/database_connection.h>
 #include <dhcp6/ctrl_dhcp6_srv.h>
 #include <dhcp6/dhcp6to4_ipc.h>
 #include <dhcp6/dhcp6_log.h>
@@ -579,8 +580,7 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
     try {
         CfgDbAccessPtr cfg_db = CfgMgr::instance().getStagingCfg()->getCfgDbAccess();
         cfg_db->setAppendedParameters("universe=6");
-        cfg_db->createManagers();
-
+        cfg_db->createManagers(boost::bind(&ControlledDhcpv6Srv::dbLostCallback, srv, _1));
     } catch (const std::exception& ex) {
         return (isc::config::createAnswer(1, "Unable to open database: "
                                           + std::string(ex.what())));
@@ -673,7 +673,8 @@ ControlledDhcpv6Srv::checkConfig(isc::data::ConstElementPtr config) {
 }
 
 ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port)
-    : Dhcpv6Srv(port), io_service_(), timer_mgr_(TimerMgr::instance()) {
+    : Dhcpv6Srv(port), io_service_(), timer_mgr_(TimerMgr::instance()),
+      db_reconnect_ctl_(NULL) {
     if (server_) {
         isc_throw(InvalidOperation,
                   "There is another Dhcpv6Srv instance already.");
@@ -815,6 +816,81 @@ ControlledDhcpv6Srv::deleteExpiredReclaimedLeases(const uint32_t secs) {
     TimerMgr::instance()->setup(CfgExpiration::FLUSH_RECLAIMED_TIMER_NAME);
 }
 
+void
+ControlledDhcpv6Srv::dbReconnect() {
+    bool reopened = false;
+
+    // Re-open lease and host database with new parameters.
+    try {
+        CfgDbAccessPtr cfg_db = CfgMgr::instance().getCurrentCfg()->getCfgDbAccess();
+        cfg_db->createManagers(boost::bind(&ControlledDhcpv6Srv::dbLostCallback, this, _1));
+        reopened = true;
+    } catch (const std::exception& ex) {
+        LOG_ERROR(dhcp6_logger, DHCP6_DB_RECONNECT_ATTEMPT_FAILED).arg(ex.what());
+    }
+
+    if (reopened) {
+        // Cancel the timer.
+        if (TimerMgr::instance()->isTimerRegistered("Dhcp6DbReconnectTimer")) {
+            TimerMgr::instance()->cancel("Dhcp6DbReconnectTimer"); }
+
+        // Set network state to service enabled
+        network_state_.enableService();
+
+        // Toss the reconnct control, we're done with it
+        db_reconnect_ctl_.reset();
+    } else {
+        if (!db_reconnect_ctl_->checkRetries()) {
+            LOG_ERROR(dhcp6_logger, DHCP6_DB_RECONNECT_RETRIES_EXHAUSTED)
+            .arg(db_reconnect_ctl_->maxRetries());
+            shutdown();
+            return;
+        }
+
+        LOG_INFO(dhcp6_logger, DHCP6_DB_RECONNECT_ATTEMPT_SCHEDULE)
+                .arg(db_reconnect_ctl_->maxRetries() - db_reconnect_ctl_->retriesLeft() + 1)
+                .arg(db_reconnect_ctl_->maxRetries())
+                .arg(db_reconnect_ctl_->retryInterval());
+
+        if (!TimerMgr::instance()->isTimerRegistered("Dhcp6DbReconnectTimer")) {
+            TimerMgr::instance()->registerTimer("Dhcp6DbReconnectTimer",
+                            boost::bind(&ControlledDhcpv6Srv::dbReconnect, this),
+                            db_reconnect_ctl_->retryInterval() * 1000,
+                            asiolink::IntervalTimer::ONE_SHOT);
+        }
+
+        TimerMgr::instance()->setup("Dhcp6DbReconnectTimer");
+    }
+}
+
+bool
+ControlledDhcpv6Srv::dbLostCallback(ReconnectCtlPtr db_reconnect_ctl) {
+    // Disable service until we recover
+    network_state_.disableService();
+
+    if (!db_reconnect_ctl) {
+        // This shouldn't never happen
+        LOG_ERROR(dhcp6_logger, DHCP6_DB_RECONNECT_NO_DB_CTL);
+        return (false);
+    }
+
+    // If reconnect isn't enabled, log it and return false
+    if (!db_reconnect_ctl->retriesLeft() ||
+        !db_reconnect_ctl->retryInterval()) {
+        LOG_INFO(dhcp6_logger, DHCP6_DB_RECONNECT_DISABLED)
+            .arg(db_reconnect_ctl->retriesLeft())
+            .arg(db_reconnect_ctl->retryInterval());
+        return(false);
+    }
+
+    // Save the reconnect control
+    db_reconnect_ctl_ = db_reconnect_ctl;
+
+    // Invoke reconnect method
+    dbReconnect();
+
+    return(true);
+}
 
 }; // end of isc::dhcp namespace
 }; // end of isc namespace
index 21d7e7493d5deb0a3c80ba56b8d6862305b5528b..49201b87da643c35a335a828f4c381c45fd84148 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2012-2017 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2012-2018 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -11,6 +11,7 @@
 #include <asiolink/asiolink.h>
 #include <cc/data.h>
 #include <cc/command_interpreter.h>
+#include <dhcpsrv/database_connection.h>
 #include <dhcpsrv/timer_mgr.h>
 #include <dhcp6/dhcp6_srv.h>
 
@@ -317,6 +318,12 @@ private:
     /// deleted.
     void deleteExpiredReclaimedLeases(const uint32_t secs);
 
+    /// @brief Attempts to reconnect the server to the DB backend managers
+    void dbReconnect();
+
+    /// @brief Callback DB backends should invoke upon loss of connectivity
+    bool dbLostCallback(ReconnectCtlPtr db_reconnect_ctl);
+
     /// @brief Static pointer to the sole instance of the DHCP server.
     ///
     /// This is required for config and command handlers to gain access to
@@ -332,6 +339,8 @@ private:
     /// make sure that the @c TimerMgr outlives instance of this class.
     TimerMgrPtr timer_mgr_;
 
+    /// @brief Pointer the current DB reconnect control values
+    ReconnectCtlPtr db_reconnect_ctl_;
 };
 
 }; // namespace isc::dhcp
index ed7908e21b3edd2a325edef795ab303b4b539fe7..e8d64a33c90b6db1a81bc16ec3ce7e1a0a34021b 100644 (file)
@@ -1,27 +1,22 @@
-#line 1 "dhcp6_lexer.cc"
+#line 2 "dhcp6_lexer.cc"
 
-#line 3 "dhcp6_lexer.cc"
+#line 4 "dhcp6_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
 /* A lexical scanner generated by flex */
 
 /* %not-for-header */
+
 /* %if-c-only */
 /* %if-not-reentrant */
 #define yy_create_buffer parser6__create_buffer
 #define yy_delete_buffer parser6__delete_buffer
-#define yy_scan_buffer parser6__scan_buffer
-#define yy_scan_string parser6__scan_string
-#define yy_scan_bytes parser6__scan_bytes
+#define yy_flex_debug parser6__flex_debug
 #define yy_init_buffer parser6__init_buffer
 #define yy_flush_buffer parser6__flush_buffer
 #define yy_load_buffer_state parser6__load_buffer_state
 #define yy_switch_to_buffer parser6__switch_to_buffer
-#define yypush_buffer_state parser6_push_buffer_state
-#define yypop_buffer_state parser6_pop_buffer_state
-#define yyensure_buffer_stack parser6_ensure_buffer_stack
-#define yy_flex_debug parser6__flex_debug
 #define yyin parser6_in
 #define yyleng parser6_leng
 #define yylex parser6_lex
@@ -41,7 +36,7 @@
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 4
+#define YY_FLEX_SUBMINOR_VERSION 0
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
 /* %endif */
 
 /* %if-c-only */
-#ifdef yy_create_buffer
-#define parser6__create_buffer_ALREADY_DEFINED
-#else
-#define yy_create_buffer parser6__create_buffer
-#endif
-
-#ifdef yy_delete_buffer
-#define parser6__delete_buffer_ALREADY_DEFINED
-#else
-#define yy_delete_buffer parser6__delete_buffer
-#endif
-
-#ifdef yy_scan_buffer
-#define parser6__scan_buffer_ALREADY_DEFINED
-#else
-#define yy_scan_buffer parser6__scan_buffer
-#endif
-
-#ifdef yy_scan_string
-#define parser6__scan_string_ALREADY_DEFINED
-#else
-#define yy_scan_string parser6__scan_string
-#endif
-
-#ifdef yy_scan_bytes
-#define parser6__scan_bytes_ALREADY_DEFINED
-#else
-#define yy_scan_bytes parser6__scan_bytes
-#endif
-
-#ifdef yy_init_buffer
-#define parser6__init_buffer_ALREADY_DEFINED
-#else
-#define yy_init_buffer parser6__init_buffer
-#endif
-
-#ifdef yy_flush_buffer
-#define parser6__flush_buffer_ALREADY_DEFINED
-#else
-#define yy_flush_buffer parser6__flush_buffer
-#endif
-
-#ifdef yy_load_buffer_state
-#define parser6__load_buffer_state_ALREADY_DEFINED
-#else
-#define yy_load_buffer_state parser6__load_buffer_state
-#endif
-
-#ifdef yy_switch_to_buffer
-#define parser6__switch_to_buffer_ALREADY_DEFINED
-#else
-#define yy_switch_to_buffer parser6__switch_to_buffer
-#endif
-
-#ifdef yypush_buffer_state
-#define parser6_push_buffer_state_ALREADY_DEFINED
-#else
-#define yypush_buffer_state parser6_push_buffer_state
-#endif
-
-#ifdef yypop_buffer_state
-#define parser6_pop_buffer_state_ALREADY_DEFINED
-#else
-#define yypop_buffer_state parser6_pop_buffer_state
-#endif
-
-#ifdef yyensure_buffer_stack
-#define parser6_ensure_buffer_stack_ALREADY_DEFINED
-#else
-#define yyensure_buffer_stack parser6_ensure_buffer_stack
-#endif
-
-#ifdef yylex
-#define parser6_lex_ALREADY_DEFINED
-#else
-#define yylex parser6_lex
-#endif
-
-#ifdef yyrestart
-#define parser6_restart_ALREADY_DEFINED
-#else
-#define yyrestart parser6_restart
-#endif
-
-#ifdef yylex_init
-#define parser6_lex_init_ALREADY_DEFINED
-#else
-#define yylex_init parser6_lex_init
-#endif
-
-#ifdef yylex_init_extra
-#define parser6_lex_init_extra_ALREADY_DEFINED
-#else
-#define yylex_init_extra parser6_lex_init_extra
-#endif
-
-#ifdef yylex_destroy
-#define parser6_lex_destroy_ALREADY_DEFINED
-#else
-#define yylex_destroy parser6_lex_destroy
-#endif
-
-#ifdef yyget_debug
-#define parser6_get_debug_ALREADY_DEFINED
-#else
-#define yyget_debug parser6_get_debug
-#endif
-
-#ifdef yyset_debug
-#define parser6_set_debug_ALREADY_DEFINED
-#else
-#define yyset_debug parser6_set_debug
-#endif
-
-#ifdef yyget_extra
-#define parser6_get_extra_ALREADY_DEFINED
-#else
-#define yyget_extra parser6_get_extra
-#endif
-
-#ifdef yyset_extra
-#define parser6_set_extra_ALREADY_DEFINED
-#else
-#define yyset_extra parser6_set_extra
-#endif
-
-#ifdef yyget_in
-#define parser6_get_in_ALREADY_DEFINED
-#else
-#define yyget_in parser6_get_in
-#endif
-
-#ifdef yyset_in
-#define parser6_set_in_ALREADY_DEFINED
-#else
-#define yyset_in parser6_set_in
-#endif
-
-#ifdef yyget_out
-#define parser6_get_out_ALREADY_DEFINED
-#else
-#define yyget_out parser6_get_out
-#endif
-
-#ifdef yyset_out
-#define parser6_set_out_ALREADY_DEFINED
-#else
-#define yyset_out parser6_set_out
-#endif
-
-#ifdef yyget_leng
-#define parser6_get_leng_ALREADY_DEFINED
-#else
-#define yyget_leng parser6_get_leng
-#endif
-
-#ifdef yyget_text
-#define parser6_get_text_ALREADY_DEFINED
-#else
-#define yyget_text parser6_get_text
-#endif
-
-#ifdef yyget_lineno
-#define parser6_get_lineno_ALREADY_DEFINED
-#else
-#define yyget_lineno parser6_get_lineno
-#endif
-
-#ifdef yyset_lineno
-#define parser6_set_lineno_ALREADY_DEFINED
-#else
-#define yyset_lineno parser6_set_lineno
-#endif
-
-#ifdef yywrap
-#define parser6_wrap_ALREADY_DEFINED
-#else
-#define yywrap parser6_wrap
-#endif
-
+    
 /* %endif */
 
-#ifdef yyalloc
-#define parser6_alloc_ALREADY_DEFINED
-#else
-#define yyalloc parser6_alloc
-#endif
-
-#ifdef yyrealloc
-#define parser6_realloc_ALREADY_DEFINED
-#else
-#define yyrealloc parser6_realloc
-#endif
-
-#ifdef yyfree
-#define parser6_free_ALREADY_DEFINED
-#else
-#define yyfree parser6_free
-#endif
-
 /* %if-c-only */
 
-#ifdef yytext
-#define parser6_text_ALREADY_DEFINED
-#else
-#define yytext parser6_text
-#endif
-
-#ifdef yyleng
-#define parser6_leng_ALREADY_DEFINED
-#else
-#define yyleng parser6_leng
-#endif
-
-#ifdef yyin
-#define parser6_in_ALREADY_DEFINED
-#else
-#define yyin parser6_in
-#endif
-
-#ifdef yyout
-#define parser6_out_ALREADY_DEFINED
-#else
-#define yyout parser6_out
-#endif
-
-#ifdef yy_flex_debug
-#define parser6__flex_debug_ALREADY_DEFINED
-#else
-#define yy_flex_debug parser6__flex_debug
-#endif
-
-#ifdef yylineno
-#define parser6_lineno_ALREADY_DEFINED
-#else
-#define yylineno parser6_lineno
-#endif
-
 /* %endif */
 
 /* First, we deal with  platform-specific or compiler-specific issues. */
@@ -365,39 +127,50 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#ifndef SIZE_MAX
-#define SIZE_MAX               (~(size_t)0)
-#endif
-
 #endif /* ! C99 */
 
 #endif /* ! FLEXINT_H */
 
 /* %endif */
 
-/* begin standard C++ headers. */
 /* %if-c++-only */
 /* %endif */
 
-/* TODO: this is always defined, so inline it */
-#define yyconst const
+#ifdef __cplusplus
 
-#if defined(__GNUC__) && __GNUC__ >= 3
-#define yynoreturn __attribute__((__noreturn__))
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
 #else
-#define yynoreturn
+#define yyconst
 #endif
 
 /* %not-for-header */
+
 /* Returned upon end-of-file. */
 #define YY_NULL 0
 /* %ok-for-header */
 
 /* %not-for-header */
-/* Promotes a possibly negative, possibly signed char to an
- *   integer in range [0..255] for use as an array index.
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
  */
-#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
 /* %ok-for-header */
 
 /* %if-reentrant */
@@ -412,16 +185,20 @@ typedef unsigned int flex_uint32_t;
  * definition of BEGIN.
  */
 #define BEGIN (yy_start) = 1 + 2 *
+
 /* Translate the current start state into a value that can be later handed
  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  * compatibility.
  */
 #define YY_START (((yy_start) - 1) / 2)
 #define YYSTATE YY_START
+
 /* Action number for EOF rule of a given start state. */
 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
 /* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin  )
+#define YY_NEW_FILE parser6_restart(parser6_in  )
+
 #define YY_END_OF_BUFFER_CHAR 0
 
 /* Size of default input buffer. */
@@ -452,19 +229,19 @@ typedef size_t yy_size_t;
 #endif
 
 /* %if-not-reentrant */
-extern int yyleng;
+extern yy_size_t parser6_leng;
 /* %endif */
 
 /* %if-c-only */
 /* %if-not-reentrant */
-extern FILE *yyin, *yyout;
+extern FILE *parser6_in, *parser6_out;
 /* %endif */
 /* %endif */
 
 #define EOB_ACT_CONTINUE_SCAN 0
 #define EOB_ACT_END_OF_FILE 1
 #define EOB_ACT_LAST_MATCH 2
-    
+
     #define YY_LESS_LINENO(n)
     #define YY_LINENO_REWIND_TO(ptr)
     
@@ -472,15 +249,16 @@ extern FILE *yyin, *yyout;
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up parser6_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
                *yy_cp = (yy_hold_char); \
                YY_RESTORE_YY_MORE_OFFSET \
                (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               YY_DO_BEFORE_ACTION; /* set up parser6_text again */ \
                } \
        while ( 0 )
+
 #define unput(c) yyunput( c, (yytext_ptr)  )
 
 #ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -500,7 +278,7 @@ struct yy_buffer_state
        /* Size of input buffer in bytes, not including room for EOB
         * characters.
         */
-       int yy_buf_size;
+       yy_size_t yy_buf_size;
 
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
@@ -528,7 +306,7 @@ struct yy_buffer_state
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-
+    
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
@@ -545,8 +323,8 @@ struct yy_buffer_state
         * possible backing-up.
         *
         * When we actually see the EOF, we change the status to "new"
-        * (via yyrestart()), so that the user can continue scanning by
-        * just pointing yyin at a new input file.
+        * (via parser6_restart()), so that the user can continue scanning by
+        * just pointing parser6_in at a new input file.
         */
 #define YY_BUFFER_EOF_PENDING 2
 
@@ -555,12 +333,13 @@ struct yy_buffer_state
 
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 /* %if-not-reentrant */
 
 /* Stack of input buffers. */
 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 /* %endif */
 /* %ok-for-header */
 
@@ -575,6 +354,7 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                           : NULL)
+
 /* Same as previous macro, but useful when we know that the buffer stack is not
  * NULL or when we need an lvalue. For internal use only.
  */
@@ -584,115 +364,126 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* %if-not-reentrant */
 /* %not-for-header */
-/* yy_hold_char holds the character lost when yytext is formed. */
+
+/* yy_hold_char holds the character lost when parser6_text is formed. */
 static char yy_hold_char;
 static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int yyleng;
+yy_size_t parser6_leng;
 
 /* Points to current character in buffer. */
-static char *yy_c_buf_p = NULL;
+static char *yy_c_buf_p = (char *) 0;
 static int yy_init = 0;                /* whether we need to initialize */
 static int yy_start = 0;       /* start state number */
 
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin.  A bit of a hack ...
+/* Flag which is used to allow parser6_wrap()'s to do buffer switches
+ * instead of setting up a fresh parser6_in.  A bit of a hack ...
  */
 static int yy_did_buffer_switch_on_eof;
 /* %ok-for-header */
 
 /* %endif */
 
-void yyrestart ( FILE *input_file  );
-void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
-void yy_delete_buffer ( YY_BUFFER_STATE b  );
-void yy_flush_buffer ( YY_BUFFER_STATE b  );
-void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
-void yypop_buffer_state ( void );
+void parser6_restart (FILE *input_file  );
+void parser6__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE parser6__create_buffer (FILE *file,int size  );
+void parser6__delete_buffer (YY_BUFFER_STATE b  );
+void parser6__flush_buffer (YY_BUFFER_STATE b  );
+void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer  );
+void parser6_pop_buffer_state (void );
 
-static void yyensure_buffer_stack ( void );
-static void yy_load_buffer_state ( void );
-static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
-#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
+static void parser6_ensure_buffer_stack (void );
+static void parser6__load_buffer_state (void );
+static void parser6__init_buffer (YY_BUFFER_STATE b,FILE *file  );
 
-YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
-YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
-YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
+#define YY_FLUSH_BUFFER parser6__flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE parser6__scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE parser6__scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE parser6__scan_bytes (yyconst char *bytes,yy_size_t len  );
 
 /* %endif */
 
-void *yyalloc ( yy_size_t  );
-void *yyrealloc ( void *, yy_size_t  );
-void yyfree ( void *  );
+void *parser6_alloc (yy_size_t  );
+void *parser6_realloc (void *,yy_size_t  );
+void parser6_free (void *  );
+
+#define yy_new_buffer parser6__create_buffer
 
-#define yy_new_buffer yy_create_buffer
 #define yy_set_interactive(is_interactive) \
        { \
        if ( ! YY_CURRENT_BUFFER ){ \
-        yyensure_buffer_stack (); \
+        parser6_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            parser6__create_buffer(parser6_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
        }
+
 #define yy_set_bol(at_bol) \
        { \
        if ( ! YY_CURRENT_BUFFER ){\
-        yyensure_buffer_stack (); \
+        parser6_ensure_buffer_stack (); \
                YY_CURRENT_BUFFER_LVALUE =    \
-            yy_create_buffer( yyin, YY_BUF_SIZE ); \
+            parser6__create_buffer(parser6_in,YY_BUF_SIZE ); \
        } \
        YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
        }
+
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
-/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */
+/* %% [1.0] parser6_text/parser6_in/parser6_out/yy_state_type/parser6_lineno etc. def's & init go here */
 /* Begin user sect3 */
 
 #define parser6_wrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 #define FLEX_DEBUG
-typedef flex_uint8_t YY_CHAR;
 
-FILE *yyin = NULL, *yyout = NULL;
+typedef unsigned char YY_CHAR;
+
+FILE *parser6_in = (FILE *) 0, *parser6_out = (FILE *) 0;
 
 typedef int yy_state_type;
 
-extern int yylineno;
-int yylineno = 1;
+extern int parser6_lineno;
 
-extern char *yytext;
+int parser6_lineno = 1;
+
+extern char *parser6_text;
 #ifdef yytext_ptr
 #undef yytext_ptr
 #endif
-#define yytext_ptr yytext
+#define yytext_ptr parser6_text
 
 /* %% [1.5] DFA */
 
 /* %if-c-only Standard (non-C++) definition */
 
-static yy_state_type yy_get_previous_state ( void );
-static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
-static int yy_get_next_buffer ( void );
-static void yynoreturn yy_fatal_error ( const char* msg  );
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
+static void yy_fatal_error (yyconst char msg[]  );
 
 /* %endif */
 
 /* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up parser6_text.
  */
 #define YY_DO_BEFORE_ACTION \
        (yytext_ptr) = yy_bp; \
-/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\
-       yyleng = (int) (yy_cp - yy_bp); \
+/* %% [2.0] code to fiddle parser6_text and parser6_leng for yymore() goes here \ */\
+       parser6_leng = (size_t) (yy_cp - yy_bp); \
        (yy_hold_char) = *yy_cp; \
        *yy_cp = '\0'; \
-/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\
+/* %% [3.0] code to copy yytext_ptr to parser6_text[] goes here, if %array \ */\
        (yy_c_buf_p) = yy_cp;
+
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 162
-#define YY_END_OF_BUFFER 163
+#define YY_NUM_RULES 164
+#define YY_END_OF_BUFFER 165
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,151 +491,154 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1272] =
+static yyconst flex_int16_t yy_accept[1301] =
     {   0,
-      155,  155,    0,    0,    0,    0,    0,    0,    0,    0,
-      163,  161,   10,   11,  161,    1,  155,  152,  155,  155,
-      161,  154,  153,  161,  161,  161,  161,  161,  148,  149,
-      161,  161,  161,  150,  151,    5,    5,    5,  161,  161,
-      161,   10,   11,    0,    0,  144,    0,    0,    0,    0,
+      157,  157,    0,    0,    0,    0,    0,    0,    0,    0,
+      165,  163,   10,   11,  163,    1,  157,  154,  157,  157,
+      163,  156,  155,  163,  163,  163,  163,  163,  150,  151,
+      163,  163,  163,  152,  153,    5,    5,    5,  163,  163,
+      163,   10,   11,    0,    0,  146,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    1,  155,
-      155,    0,  154,  155,    3,    2,    6,    0,  155,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  157,
+      157,    0,  156,  157,    3,    2,    6,    0,  157,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
-      145,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  147,    0,    0,    0,
+      147,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  149,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    2,    0,    0,    0,    0,    0,    0,    0,
-        8,    0,    0,    0,    0,  123,    0,    0,  124,    0,
-        0,    0,    0,    0,    0,    0,    0,  146,    0,    0,
+        8,    0,    0,    0,    0,  125,    0,    0,  126,    0,
+        0,    0,    0,    0,    0,    0,    0,  148,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   81,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   83,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  160,
-      158,    0,  157,  156,    0,    0,    0,    0,    0,    0,
-        0,  122,    0,    0,   27,    0,   26,    0,    0,   87,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  162,
+      160,    0,  159,  158,    0,    0,    0,    0,    0,    0,
+        0,  124,    0,    0,   27,    0,   26,    0,    0,   89,
 
         0,    0,    0,    0,    0,    0,    0,   46,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   85,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   87,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  159,  156,    0,    0,    0,    0,    0,    0,
+        0,    0,  161,  158,    0,    0,    0,    0,    0,    0,
         0,    0,   28,    0,    0,   30,    0,    0,    0,    0,
 
-        0,   88,    0,    0,    0,    0,    0,   66,    0,    0,
-        0,    0,    0,    0,  107,    0,    0,    0,    0,    0,
+        0,   90,    0,    0,    0,    0,    0,   68,    0,    0,
+        0,    0,    0,    0,  109,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,   49,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   65,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   75,    0,   50,
+        0,    0,    0,    0,    0,    0,   67,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   77,    0,   50,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  103,  127,   42,    0,   47,    0,    0,    0,    0,
-        0,    0,  141,   35,    0,   32,    0,   31,    0,    0,
+        0,    0,  105,  129,   42,    0,   47,    0,    0,    0,
+        0,    0,    0,  143,   35,    0,   32,    0,   31,    0,
 
-        0,  115,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  117,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       96,    0,    0,    0,    0,    0,    0,    0,  126,    0,
+        0,   98,    0,    0,    0,    0,    0,    0,    0,  128,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   44,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   68,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  116,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  111,    0,    0,    0,
-        0,    7,   33,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   44,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   70,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  118,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  113,    0,
+        0,    0,    0,    7,   33,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   98,    0,    0,
-        0,    0,    0,   95,    0,    0,    0,    0,    0,    0,
-        0,    0,   70,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  100,
+        0,    0,    0,    0,    0,   97,    0,    0,    0,    0,
+        0,    0,    0,    0,   72,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   78,    0,    0,    0,    0,    0,    0,   92,    0,
-        0,    0,    0,    0,   77,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   80,    0,    0,    0,    0,    0,
+        0,   94,    0,    0,    0,    0,    0,   79,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      110,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  112,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,  120,   93,    0,    0,    0,
-       97,   43,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   51,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  122,   95,
+        0,    0,    0,    0,   99,   43,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   51,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   61,    0,    0,    0,    0,
-      142,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   84,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  109,    0,    0,    0,
-        0,    0,   54,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   48,   69,    0,    0,
-
-        0,  106,    0,    0,    0,   41,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  100,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  140,    0,
+       63,    0,    0,    0,    0,  144,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   79,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   38,    0,    0,    0,
-        0,    0,    0,    0,   16,    0,  121,   14,    0,    0,
+       86,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  111,    0,    0,    0,    0,    0,   54,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,  112,   99,    0,    0,    0,    0,
+        0,    0,   48,   71,    0,    0,    0,  108,    0,    0,
+        0,   41,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  102,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  142,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      108,  125,    0,   37,    0,  117,    0,    0,    0,    0,
-        0,    0,   20,    0,    0,   63,    0,    0,    0,    0,
-      119,   45,    0,   71,    0,    0,    0,    0,    0,    0,
+       81,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   38,    0,    0,    0,    0,    0,
+        0,    0,    0,   16,    0,  123,   14,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   67,    0,    0,    0,    0,
-        0,    0,    0,    0,  114,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   89,
-        0,    0,    0,   64,   86,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,   58,    0,    0,    0,   17,
-       15,    0,  139,  138,    0,    0,    0,    0,    0,   29,
-        0,  102,    0,    0,    0,    0,    0,    0,  136,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   80,
-        0,  105,    0,   52,    0,    0,    0,   19,    0,    0,
-        0,    0,    0,   82,   59,    0,  113,    0,    0,    0,
-      104,    0,    0,   76,    0,  143,    0,    0,    0,    0,
-        0,    0,    0,   74,    0,  128,    0,    0,    0,    0,
+        0,    0,    0,  114,  101,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  110,
+      127,    0,   37,    0,  119,    0,    0,    0,    0,    0,
+        0,    0,   20,    0,    0,   65,    0,    0,    0,    0,
+      121,   45,    0,   73,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   69,    0,    0,    0,
+        0,    0,    0,    0,    0,  116,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  101,    0,   55,  137,    0,   12,    0,
-        0,    0,    0,    0,    0,    0,   40,    0,   39,   18,
-        0,    0,   94,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   57,    0,    0,   53,    0,   72,    0,
-        0,    0,    0,    0,  118,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   62,    0,   34,
-        0,    0,    0,    0,    0,   25,    0,    0,    0,    0,
-      134,    0,    0,    0,    0,    0,    0,    0,   83,    0,
-        0,    0,    0,    0,    0,    0,    0,   36,    0,    0,
-        0,    0,   13,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,  133,    0,   22,   56,    0,    0,
-        0,    0,   21,    0,   73,    0,    0,  132,    0,    0,
-        0,    0,   24,    0,    0,    0,    0,    0,    0,    0,
+       91,    0,    0,    0,    0,   66,   88,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   60,    0,
+        0,    0,   17,   15,    0,  141,  140,    0,    0,    0,
+        0,    0,   29,    0,  104,    0,    0,    0,    0,    0,
+        0,  138,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   82,    0,  107,    0,   52,    0,    0,    0,
+        0,   19,    0,    0,    0,    0,    0,   84,   61,    0,
+        0,  115,    0,    0,    0,  106,    0,    0,   78,    0,
+      145,    0,    0,    0,    0,    0,    0,    0,   76,    0,
+      130,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   23,    0,   90,    0,    0,    0,
-        0,    0,  130,  135,   60,    0,    0,    0,  129,    0,
-        0,    0,    0,    0,    0,    0,   91,    0,    0,  131,
-        0
+      103,    0,   55,  139,    0,   12,    0,    0,    0,    0,
+        0,    0,    0,   40,    0,   39,   18,    0,    0,    0,
+       96,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   59,    0,    0,   53,    0,   74,    0,    0,
+        0,    0,    0,  120,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   64,    0,
+       34,    0,    0,    0,    0,    0,   25,    0,    0,    0,
+        0,  136,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,   85,    0,    0,    0,    0,    0,    0,    0,    0,
+       36,    0,    0,    0,    0,    0,   13,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  135,
+        0,    0,   22,   58,    0,    0,    0,    0,    0,   21,
+        0,   75,    0,    0,  134,    0,   56,    0,    0,   57,
+        0,   24,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   23,    0,   92,    0,    0,    0,    0,
+        0,  132,  137,   62,    0,    0,    0,  131,    0,    0,
+        0,    0,    0,    0,    0,   93,    0,    0,  133,    0
+
     } ;
 
-static const YY_CHAR yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
@@ -876,7 +670,7 @@ static const YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static const YY_CHAR yy_meta[72] =
+static yyconst YY_CHAR yy_meta[72] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
         3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
@@ -888,304 +682,312 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1284] =
+static yyconst flex_uint16_t yy_base[1313] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1633, 1634,   32, 1629,  141,    0,  201, 1634,  206,   88,
-       11,  213, 1634, 1611,  114,   25,    2,    6, 1634, 1634,
-       73,   11,   17, 1634, 1634, 1634,  104, 1617, 1572,    0,
-     1609,  107, 1624,  217,  241, 1634,  185, 1568, 1574, 1594,
+     1662, 1663,   32, 1658,  141,    0,  201, 1663,  206,   88,
+       11,  213, 1663, 1640,  114,   25,    2,    6, 1663, 1663,
+       73,   11,   17, 1663, 1663, 1663,  104, 1646, 1601,    0,
+     1638,  107, 1653,  217,  241, 1663,  185, 1597, 1603, 1623,
        93,   58,  190,   91,  211,  200,   14,  267,  213,  175,
-      269,   64,  231, 1575,  187,   75, 1574,  274,  188,  290,
-      276,  295, 1557,  195,  296,  325,  305, 1576,    0,  349,
-      354,  367,  373,  376, 1634,    0, 1634,  267,  295,  290,
-      317,  339,  351,  355,  358, 1634, 1573, 1612, 1634,  308,
-
-     1634,  394,  357, 1560, 1570, 1609,  370,  220,  249, 1564,
-      367,  377,  369,  379,  302, 1607,    0,  445,  374, 1551,
-     1559,  361, 1555, 1544, 1545,  382, 1561, 1544, 1553,  400,
-      200,  366, 1547,  358, 1535, 1591,  425, 1538, 1589, 1531,
-     1554, 1551, 1551, 1545,  380, 1538, 1531, 1536, 1530, 1541,
-     1526, 1525, 1539,  380, 1575, 1524,  387, 1536, 1539, 1523,
-      441,  415, 1537, 1534, 1535, 1533, 1515, 1520, 1516, 1508,
-     1525, 1517,    0,  400,  424,  371,  416,  427,  429, 1516,
-     1634,    0,  444, 1507, 1510, 1634,  440,  451, 1634, 1562,
-     1517,  458, 1560,  459, 1559,  465, 1558, 1634,  509, 1557,
-
-      476, 1518, 1513, 1512, 1503,  294, 1552, 1546, 1512, 1491,
-     1499, 1505, 1493, 1507, 1503, 1504, 1504, 1499, 1491, 1493,
-     1477, 1481, 1494, 1494, 1486, 1476, 1479, 1493, 1634, 1479,
-     1487, 1490, 1471, 1470, 1520, 1469, 1479, 1517,  453, 1478,
-     1466, 1477, 1513, 1517, 1470,    9, 1460, 1476, 1457, 1459,
-     1455, 1461, 1452, 1451, 1464, 1457, 1459, 1463, 1462, 1456,
-       80, 1463, 1458, 1450, 1456, 1456, 1437, 1453, 1439, 1445,
-     1452, 1440, 1433, 1447, 1446, 1449, 1431, 1439,  479, 1634,
-     1634,  480, 1634, 1634, 1426,    0,  470, 1428,  495,  488,
-     1482, 1634, 1435,  468, 1634, 1480, 1634, 1474,  545, 1634,
-
-      473, 1416, 1426, 1476, 1433, 1432,  455, 1634, 1430, 1472,
-     1427, 1424, 1425,  506, 1429, 1467, 1417, 1412, 1409, 1405,
-     1407, 1456, 1415, 1404, 1453, 1401,  538, 1414, 1414, 1397,
-     1398, 1411, 1398, 1408, 1403, 1410, 1405, 1390,  479, 1399,
-     1402, 1397, 1393, 1441,  488, 1634, 1388, 1387, 1380, 1382,
-     1386, 1375, 1382, 1387,  353, 1432, 1387,  494, 1384, 1388,
-     1386, 1375, 1375, 1387, 1369, 1361, 1362, 1383, 1365, 1377,
-     1376, 1362, 1374, 1373, 1372, 1371, 1412, 1411, 1410, 1354,
-      537, 1367, 1634, 1634, 1366,    0,  511, 1354, 1405, 1404,
-     1362, 1402, 1634, 1350, 1400, 1634,  520,  587,  542, 1399,
-
-     1341, 1634, 1346, 1356, 1355, 1342, 1341, 1634, 1343, 1340,
-     1352, 1348, 1336, 1338, 1634, 1344, 1329, 1331, 1342, 1340,
-     1335,  569, 1342, 1324, 1373, 1634, 1322, 1338, 1370, 1374,
-     1332, 1326, 1328, 1329, 1331, 1363, 1316, 1311, 1310, 1312,
-     1305, 1320, 1298, 1305, 1310, 1358, 1634, 1305, 1301, 1304,
-     1311, 1296, 1306, 1309, 1298, 1297, 1292, 1634, 1347, 1634,
-     1291, 1290, 1283, 1300, 1337, 1284, 1289, 1298, 1292, 1296,
-      572, 1331, 1295, 1275, 1278, 1277, 1285, 1289, 1272, 1328,
-     1270, 1634, 1634, 1634, 1275, 1634, 1285, 1319, 1281,    0,
-     1322, 1272, 1634, 1634, 1269, 1634, 1275, 1634,  541,  553,
-
-      576, 1634, 1313, 1260, 1259, 1258, 1265, 1258, 1270, 1269,
-     1253, 1268, 1298, 1265, 1301, 1247, 1249, 1261, 1261, 1260,
-     1634, 1245, 1242, 1256, 1248, 1254, 1245, 1253, 1634, 1238,
-     1249, 1253, 1235, 1249, 1247, 1230, 1224, 1229, 1226, 1241,
-     1242, 1239, 1280, 1237, 1634, 1223, 1225, 1271, 1270,  508,
-     1233, 1216, 1217, 1222, 1213, 1634, 1227, 1213,  609, 1205,
-     1226, 1223, 1215, 1258, 1212, 1256, 1634, 1204, 1202, 1216,
-     1219, 1251, 1250, 1197, 1248, 1247, 1634,  558, 1209, 1198,
-     1200, 1634, 1634, 1243, 1191, 1246,  553,  537,  544, 1205,
-     1244, 1238, 1237, 1236, 1190, 1180, 1233, 1195, 1185, 1230,
-
-     1193, 1175, 1183, 1185, 1189, 1224, 1228, 1185, 1184, 1185,
-     1178, 1167, 1180, 1183, 1178, 1173, 1178, 1175, 1174, 1177,
-     1172, 1213, 1212, 1156, 1152, 1160, 1208, 1634, 1207, 1156,
-     1148, 1163, 1150, 1634, 1150, 1159, 1158, 1158, 1142, 1197,
-     1140, 1153, 1634, 1145, 1137, 1146, 1139, 1150, 1127, 1131,
-     1182, 1129, 1127, 1138, 1178, 1125,  546,  565, 1119, 1129,
-      562, 1634, 1179, 1137, 1126, 1130, 1137, 1174, 1634, 1168,
-      584, 1121, 1129, 1121, 1634, 1112, 1115, 1111, 1128, 1123,
-     1111, 1122, 1106, 1108, 1160, 1106, 1120, 1101, 1151, 1106,
-     1634, 1114, 1112, 1103, 1112, 1108, 1149, 1091, 1091, 1104,
-
-     1103, 1088, 1143, 1085, 1086, 1634, 1634, 1100, 1097, 1100,
-     1634, 1634, 1099, 1084,  578, 1083, 1081, 1128, 1077, 1131,
-     1130, 1634, 1075,   12,   76,  120,  184,  204,  200,  312,
-      285,  298,  407,  467,  507,  519,  529,  525,  539,  580,
-      549,  615,  575,  584,  561, 1634,  619,  574,  589,  590,
-     1634,  609,  617,  597,  587,  601,  595,  590,  591,  587,
-      596,  591,  642,  648,  597, 1634,  609,  595,  611,  601,
-      613,  607,  652,  620,  605,  606, 1634,  625,  608,  610,
-      666,  611, 1634,  630,  610,  628,  667,  627,  617,  635,
-      619,  634,  626,  622,  640,  625, 1634, 1634,  633,  678,
-
-      633, 1634,  641,  636,  687, 1634,  638,  643,  637,  639,
-      651,  645,  643,  696,  642,  698,  699,  645, 1634,  644,
-      652,  650,  649,  663,  664,  665,  681,  686,  660,  670,
-      656,  663,  668,  675,  716,  717,  666,  670, 1634,  665,
-      683,  681,  719,  670,  688,  689,  675,  683,  692,  672,
-      693,  733,  734, 1634,  689,  738,  739,  701,  703,  686,
-      688,  695,  746,  695,  710,  749,  701,  705,  703,  701,
-      754,  755,  707,  757,  753,  713, 1634,  718,  711,  720,
-      714,  709,  719,  715, 1634,  710, 1634, 1634,  711,  709,
-      728,  729,  730,  712,  717,  724,  757,  748,  720,  779,
-
-      724,  740,  732,  736, 1634, 1634,  746,  744,  730,  731,
-      789,  744,  749,  736,  747,  739,  745,  741,  759,  760,
-     1634, 1634,  759, 1634,  761, 1634,  746,  765,  755,  806,
-      761,  803, 1634,  760,  810, 1634,  811,  760,  767,  809,
-     1634, 1634,  769, 1634,  760,  760,  763,  777,  764,  775,
-      822,  781,  819,  825,  826,  775,  828,  829,  790,  774,
-      786,  776,  806,  835,  795, 1634,  837,  786,  782,  798,
-      803,  791,  843,  802, 1634,  804,  803,  805,  798,  807,
-      808,  805,  795,  797,  854,  803,  856,  801,  858, 1634,
-      796,  811,  861, 1634, 1634,  812,  822,  807,  823,  809,
-
-      869,  870,  816,  872,  831, 1634,  823,  826,  877, 1634,
-     1634,  823, 1634, 1634,  831,  881,  832,  883,  865, 1634,
-      843, 1634,  830,  829,  832,  832,  833,  891, 1634,  836,
-      893,  848,  839,  854,  854,  857,  857,  854,  859, 1634,
-      851, 1634,  861, 1634,  862,  863,  860, 1634,  852,  858,
-      857,  869,  869, 1634, 1634,  908, 1634,  873,  858,  864,
-     1634,  869,  880, 1634,  877, 1634,  896,  916,  922,  866,
-      924,  925,  880, 1634,  927, 1634,  867,  924,  889,  885,
-      927,  877,  882,  935,  893,  937,  938,  901,  890,  941,
-      885,  902,  887,  902,  886,  943,  944,  909,  895,  906,
-
-      953,  925,  912, 1634,  956, 1634, 1634,  905, 1634,  958,
-      906,  955,  900,  905,  964,  914, 1634,  920, 1634, 1634,
-      911,  926, 1634,  964,  932,  925,  926,  935,  922,  924,
-      934,  977,  928, 1634,  979,  926, 1634,  930, 1634,  934,
-      929,  928,  986,  941, 1634,  983,  945,  948,  991,  934,
-      936,  944,  934,  950,  944,  960,  999, 1634,  995, 1634,
-      960,  997,  961,  952,  959, 1634,  956,  961, 1008,  953,
-     1634,  957,  969,  970, 1013,  957,  958,  966, 1634,  977,
-      967,  966,  969,  981,  972,  981,  983, 1634, 1025,  985,
-     1027, 1028, 1634, 1024,  984,  989,  970, 1033,  992, 1035,
-
-      994,  995, 1038,  997, 1634, 1002, 1634, 1634,  984,  990,
-     1043, 1004, 1634,  990, 1634,  990,  992, 1634,  997,  992,
-     1004, 1000, 1634, 1003, 1007,  998, 1050,  999, 1015, 1008,
-     1003, 1018, 1009, 1016, 1003, 1018, 1065, 1024, 1067, 1012,
-     1028, 1019, 1033, 1029, 1634, 1073, 1634, 1074, 1075, 1032,
-     1031, 1032, 1634, 1634, 1634, 1079, 1023, 1039, 1634, 1077,
-     1028, 1027, 1029, 1040, 1087, 1038, 1634, 1047, 1090, 1634,
-     1634, 1096, 1101, 1106, 1111, 1116, 1121, 1126, 1129, 1103,
-     1108, 1110, 1123
+      269,   64,  231, 1604,  187,   75, 1603,  274,  188,  290,
+      276,  295, 1586,  195,  296,  325,  305, 1605,    0,  349,
+      354,  367,  373,  376, 1663,    0, 1663,  267,  295,  290,
+      317,  339,  351,  355,  358, 1663, 1602, 1641, 1663,  308,
+
+     1663,  394,  357, 1589, 1599, 1638,  370,  220,  249, 1593,
+      367,  377,  369,  379,  302, 1636,    0,  445,  374, 1580,
+     1588,  361, 1584, 1573, 1574,  382, 1590, 1573, 1582,  400,
+      200,  366, 1576,  358, 1564, 1620,  425, 1567, 1618, 1560,
+     1583, 1580, 1580, 1574,  380, 1567, 1560, 1565, 1559, 1570,
+     1555, 1554, 1568,  380, 1604, 1553,  387, 1565, 1568, 1552,
+      441,  415, 1566, 1563, 1564, 1562, 1544, 1549, 1545, 1537,
+     1554, 1546,    0,  400,  424,  371,  416,  427,  429, 1545,
+     1663,    0,  444, 1536, 1539, 1663,  440,  451, 1663, 1591,
+     1546,  458, 1589,  459, 1588,  465, 1587, 1663,  509, 1586,
+
+      476, 1547, 1542, 1541, 1532,  294, 1581, 1575, 1541, 1520,
+     1528, 1534, 1522, 1536, 1532, 1533, 1533, 1528, 1520, 1522,
+     1506, 1510, 1523, 1523, 1515, 1505, 1508, 1522, 1663, 1508,
+     1516, 1519, 1500, 1499, 1549, 1498, 1508, 1546,  453, 1507,
+     1495, 1506, 1542, 1546, 1499,    9, 1489, 1505, 1486, 1488,
+     1484, 1490, 1481, 1480, 1493, 1486, 1488, 1492, 1491, 1485,
+       80, 1492, 1487, 1479, 1485, 1485, 1466, 1482, 1468, 1474,
+     1481, 1469, 1462, 1476, 1475, 1478, 1460, 1468,  479, 1663,
+     1663,  480, 1663, 1663, 1455,    0,  470, 1457,  495,  488,
+     1511, 1663, 1464,  468, 1663, 1509, 1663, 1503,  545, 1663,
+
+      473, 1445, 1455, 1505, 1462, 1461,  455, 1663, 1459, 1501,
+     1456, 1453, 1454,  506, 1458, 1496, 1446, 1441, 1438, 1434,
+     1436, 1485, 1444, 1433, 1482, 1430,  538, 1443, 1443, 1426,
+     1427, 1440, 1427, 1437, 1432, 1439, 1434, 1419,  479, 1428,
+     1431, 1426, 1422, 1470,  488, 1663, 1417, 1416, 1409, 1411,
+     1415, 1404, 1411, 1416,  353, 1461, 1416,  494, 1413, 1417,
+     1415, 1404, 1404, 1416,  491, 1391, 1392, 1413, 1395, 1407,
+     1406, 1392, 1404, 1403, 1402, 1401, 1442, 1441, 1440, 1384,
+      539, 1397, 1663, 1663, 1396,    0,  517, 1384, 1435, 1434,
+     1392, 1432, 1663, 1380, 1430, 1663,  542,  588,  543, 1429,
+
+     1371, 1663, 1376, 1386, 1385, 1372, 1371, 1663, 1373, 1370,
+     1382, 1378, 1366, 1368, 1663, 1374, 1359, 1361, 1372, 1370,
+     1365,  567, 1372, 1354, 1403, 1663, 1352, 1368, 1400, 1404,
+     1362, 1356, 1358, 1359, 1361, 1393, 1346, 1341, 1340, 1342,
+     1335, 1350, 1328, 1335, 1340, 1388, 1663, 1335, 1331, 1334,
+     1341, 1326, 1336, 1339, 1328, 1327, 1322, 1663, 1377, 1663,
+     1321, 1320, 1313, 1330, 1367, 1314, 1319, 1328, 1322, 1316,
+     1325,  569, 1360, 1324, 1304, 1307, 1306, 1314, 1318, 1301,
+     1357, 1299, 1663, 1663, 1663, 1304, 1663, 1314, 1348, 1310,
+        0, 1351, 1301, 1663, 1663, 1298, 1663, 1304, 1663,  550,
+
+      554,  577, 1663, 1342, 1289, 1288, 1287, 1294, 1287, 1299,
+     1298, 1282, 1297, 1327, 1294, 1330, 1276, 1278, 1290, 1290,
+     1289, 1663, 1274, 1271, 1285, 1277, 1283, 1274, 1282, 1663,
+     1267, 1278, 1282, 1264, 1278, 1276, 1259, 1253, 1258, 1255,
+     1270, 1271, 1268, 1309, 1266, 1663, 1252, 1254, 1300, 1299,
+      520, 1262, 1245, 1246, 1251, 1242, 1663, 1256, 1242,  610,
+     1234, 1255, 1252, 1244, 1287, 1241, 1248, 1284, 1663, 1232,
+     1230, 1244, 1247, 1279, 1278, 1225, 1276, 1275, 1663,  570,
+     1237, 1226, 1228, 1663, 1663, 1271, 1219, 1274,  561,  537,
+      545, 1233, 1272, 1266, 1265, 1264, 1218, 1208, 1261, 1223,
+
+     1213, 1258, 1221, 1203, 1211, 1213, 1217, 1252, 1256, 1213,
+     1212, 1213, 1206, 1195, 1208, 1211, 1206, 1201, 1206, 1203,
+     1202, 1205, 1200, 1241, 1240, 1184, 1180,  205, 1237, 1663,
+     1236, 1185, 1177, 1192, 1179, 1663, 1179, 1188, 1187, 1187,
+     1171, 1226, 1169, 1182, 1663, 1174, 1166, 1175, 1168, 1179,
+     1156, 1160, 1211, 1175, 1157, 1155, 1166, 1206, 1153,  566,
+      567, 1147, 1157,  560, 1663, 1207, 1165, 1154, 1158, 1165,
+     1202, 1663, 1196,  586, 1149, 1157, 1149, 1663, 1140, 1143,
+     1139, 1156, 1151, 1139, 1150, 1134, 1136, 1188, 1134, 1148,
+     1129, 1179, 1134, 1663, 1142, 1140, 1131, 1140, 1136, 1177,
+
+     1119, 1119, 1132, 1131, 1116, 1171, 1113, 1114, 1663, 1663,
+     1128, 1125, 1128, 1114, 1663, 1663, 1126, 1111,  583, 1110,
+     1108, 1155, 1104, 1158,    2, 1663,   64,   79,  193,  312,
+      280,  305,  412,  508,  491,  501,  502,  514,  525,  542,
+      560,  570,  569,  571,  583,  580,  633,  592,  597,  575,
+     1663,  633,  582,  597,  597, 1663,  617,  625,  605,  595,
+      609,  602,  597,  598,  594,  604,  599,  650,  656,  605,
+     1663,  617,  602,  618,  608,  620,  614,  659,  627,  611,
+      613, 1663,  631,  615,  617,  673,  618, 1663,  637,  617,
+      635,  674,  634,  630,  625,  643,  627,  642,  634,  630,
+
+      648,  633, 1663, 1663,  641,  686,  641, 1663,  649,  644,
+      695, 1663,  646,  651,  693,  647,  648,  660,  654,  652,
+      705,  651,  707,  708,  654, 1663,  653,  661,  659,  658,
+      672,  673,  674,  690,  695,  669,  679,  665,  672,  677,
+      684,  725,  726,  675,  679, 1663,  675,  693,  690,  728,
+      679,  697,  698,  684,  692,  701,  681,  702,  742,  743,
+     1663,  698,  747,  748,  710,  712,  695,  697,  704,  713,
+      756,  705,  720,  759,  711,  715,  713,  711,  764,  765,
+      717,  767,  763,  723, 1663,  728,  721,  712,  731,  725,
+      720,  730,  726, 1663,  721, 1663, 1663,  722,  720,  739,
+
+      740,  741,  723,  728,  735,  768,  759,  731,  791,  736,
+      751,  743,  747, 1663, 1663,  757,  755,  741,  742,  800,
+      755,  760,  747,  758,  750,  756,  752,  770,  771, 1663,
+     1663,  770, 1663,  772, 1663,  757,  776,  766,  817,  772,
+      814,  780, 1663,  772,  822, 1663,  823,  772,  779,  821,
+     1663, 1663,  781, 1663,  772,  772,  775,  789,  794,  777,
+      788,  835,  794,  832,  838,  839,  788,  841,  842,  803,
+      787,  799,  789,  819,  848,  808, 1663,  850,  799,  795,
+      811,  816,  804,  856,  815, 1663,  817,  816,  818,  811,
+      820,  821,  818,  808,  810,  867,  816,  869,  814,  871,
+
+     1663,  809,  824,  817,  876, 1663, 1663,  826,  836,  821,
+      837,  824,  883,  884,  830,  840,  887,  847, 1663,  839,
+      841,  893, 1663, 1663,  839, 1663, 1663,  846,  896,  847,
+      898,  880, 1663,  858, 1663,  845,  844,  847,  847,  848,
+      906, 1663,  851,  908,  863,  854,  869,  869,  872,  872,
+      869,  874, 1663,  866, 1663,  876, 1663,  877,  878,  875,
+      918, 1663,  868,  874,  873,  885,  885, 1663, 1663,  924,
+      873, 1663,  890,  875,  881, 1663,  886,  897, 1663,  894,
+     1663,  913,  933,  939,  883,  941,  942,  897, 1663,  944,
+     1663,  884,  941,  906,  902,  944,  894,  899,  952,  910,
+
+      954,  955,  918,  907,  901,  959,  903,  920,  905,  920,
+      905,  961,  962,  963,  928,  914,  925,  972,  944,  931,
+     1663,  975, 1663, 1663,  924, 1663,  977,  925,  974,  919,
+      924,  983,  933, 1663,  939, 1663, 1663,  930,  945,  933,
+     1663,  984,  952,  945,  946,  955,  937,  943,  945,  955,
+      998,  949, 1663, 1000,  948, 1663,  952, 1663,  955,  950,
+      949, 1007,  962, 1663, 1004,  966,  969, 1012,  967,  956,
+      958,  966,  956,  972,  973,  967,  983, 1022, 1663, 1018,
+     1663,  983, 1020,  984,  975,  982, 1663,  979,  984, 1031,
+      976, 1663,  991,  981,  993,  994, 1037,  981,  989,  983,
+
+      991, 1663, 1002,  992,  991,  994, 1006,  997, 1006, 1008,
+     1663, 1050,  995, 1011, 1053, 1054, 1663, 1050, 1014, 1011,
+     1016,  997, 1060, 1019, 1062, 1021, 1022, 1065, 1024, 1663,
+     1067, 1030, 1663, 1663, 1012, 1070, 1019, 1072, 1033, 1663,
+     1019, 1663, 1019, 1021, 1663, 1026, 1663, 1021, 1033, 1663,
+     1029, 1663, 1032, 1036, 1027, 1079, 1028, 1044, 1037, 1032,
+     1047, 1038, 1045, 1032, 1047, 1094, 1053, 1096, 1041, 1057,
+     1048, 1062, 1058, 1663, 1102, 1663, 1103, 1104, 1061, 1060,
+     1061, 1663, 1663, 1663, 1108, 1052, 1068, 1663, 1106, 1057,
+     1056, 1058, 1069, 1116, 1067, 1663, 1076, 1119, 1663, 1663,
+
+     1125, 1130, 1135, 1140, 1145, 1150, 1155, 1158, 1132, 1137,
+     1139, 1152
     } ;
 
-static const flex_int16_t yy_def[1284] =
+static yyconst flex_int16_t yy_def[1313] =
     {   0,
-     1272, 1272, 1273, 1273, 1272, 1272, 1272, 1272, 1272, 1272,
-     1271, 1271, 1271, 1271, 1271, 1274, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1275,
-     1271, 1271, 1271, 1276,   15, 1271,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1277,   45,   45,
+     1301, 1301, 1302, 1302, 1301, 1301, 1301, 1301, 1301, 1301,
+     1300, 1300, 1300, 1300, 1300, 1303, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1304,
+     1300, 1300, 1300, 1305,   15, 1300,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1306,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1274, 1271,
-     1271, 1271, 1271, 1271, 1271, 1278, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1275, 1271, 1276,
+       45,   45,   45,   45,   45,   45,   45,   45, 1303, 1300,
+     1300, 1300, 1300, 1300, 1300, 1307, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1304, 1300, 1305,
 
-     1271, 1271,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1279,   45, 1277,   45,   45,
+     1300, 1300,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1308,   45, 1306,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1278, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1280,   45,   45,   45, 1271,   45,   45, 1271,   45,
-       45,   45,   45,   45,   45,   45, 1279, 1271, 1277,   45,
+       45,   45, 1307, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1309,   45,   45,   45, 1300,   45,   45, 1300,   45,
+       45,   45,   45,   45,   45,   45, 1308, 1300, 1306,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1271,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1281,   45,   45,   45,   45,
-       45, 1271,   45,   45, 1271,   45, 1271,   45, 1277, 1271,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1310,   45,   45,   45,   45,
+       45, 1300,   45,   45, 1300,   45, 1300,   45, 1306, 1300,
 
-       45,   45,   45,   45,   45,   45,   45, 1271,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1300,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1271, 1271, 1271, 1282,   45,   45,   45,   45,
-       45,   45, 1271,   45,   45, 1271,   45, 1277,   45,   45,
+       45,   45, 1300, 1300, 1300, 1311,   45,   45,   45,   45,
+       45,   45, 1300,   45,   45, 1300,   45, 1306,   45,   45,
 
-       45, 1271,   45,   45,   45,   45,   45, 1271,   45,   45,
-       45,   45,   45,   45, 1271,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45, 1300,   45,   45,
+       45,   45,   45,   45, 1300,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1271,   45, 1271,
+       45,   45,   45,   45,   45,   45, 1300,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1300,   45, 1300,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1271, 1271, 1271,   45, 1271,   45,   45, 1271, 1283,
-       45,   45, 1271, 1271,   45, 1271,   45, 1271,   45,   45,
+       45,   45, 1300, 1300, 1300,   45, 1300,   45,   45, 1300,
+     1312,   45,   45, 1300, 1300,   45, 1300,   45, 1300,   45,
 
-       45, 1271,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1300,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1271,   45,   45,   45,   45,   45,   45,   45, 1271,   45,
+       45, 1300,   45,   45,   45,   45,   45,   45,   45, 1300,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1271,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45,   45,   45,
-       45, 1271, 1271,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1300,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300,   45,
+       45,   45,   45, 1300, 1300,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1271,   45,   45,
-       45,   45,   45, 1271,   45,   45,   45,   45,   45,   45,
-       45,   45, 1271,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1300,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
+       45,   45,   45,   45, 1300,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1271,   45,   45,   45,   45,   45,   45, 1271,   45,
-       45,   45,   45,   45, 1271,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1300,   45,   45,   45,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45, 1300,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1271,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1300,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45, 1271, 1271,   45,   45,   45,
-     1271, 1271,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1271,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300, 1300,
+       45,   45,   45,   45, 1300, 1300,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
-     1271,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45,   45,   45,
-       45,   45, 1271,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1271, 1271,   45,   45,
-
-       45, 1271,   45,   45,   45, 1271,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1271,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1271,   45,
+     1300,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1271,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45,   45,   45,
-       45,   45,   45,   45, 1271,   45, 1271, 1271,   45,   45,
+     1300,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45, 1300,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45, 1271, 1271,   45,   45,   45,   45,
+       45,   45, 1300, 1300,   45,   45,   45, 1300,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1300,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1271, 1271,   45, 1271,   45, 1271,   45,   45,   45,   45,
-       45,   45, 1271,   45,   45, 1271,   45,   45,   45,   45,
-     1271, 1271,   45, 1271,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1300,   45,   45,   45,   45,   45,
+       45,   45,   45, 1300,   45, 1300, 1300,   45,   45,   45,
+
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
-       45,   45,   45,   45, 1271,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1271,
-       45,   45,   45, 1271, 1271,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45, 1271,   45,   45,   45, 1271,
-     1271,   45, 1271, 1271,   45,   45,   45,   45,   45, 1271,
-       45, 1271,   45,   45,   45,   45,   45,   45, 1271,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1271,
-       45, 1271,   45, 1271,   45,   45,   45, 1271,   45,   45,
-       45,   45,   45, 1271, 1271,   45, 1271,   45,   45,   45,
-     1271,   45,   45, 1271,   45, 1271,   45,   45,   45,   45,
-       45,   45,   45, 1271,   45, 1271,   45,   45,   45,   45,
+       45,   45,   45, 1300, 1300,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1300,
+     1300,   45, 1300,   45, 1300,   45,   45,   45,   45,   45,
+       45,   45, 1300,   45,   45, 1300,   45,   45,   45,   45,
+     1300, 1300,   45, 1300,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1300,   45,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1271,   45, 1271, 1271,   45, 1271,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45, 1271, 1271,
-       45,   45, 1271,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1271,   45,   45, 1271,   45, 1271,   45,
-       45,   45,   45,   45, 1271,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1271,   45, 1271,
-       45,   45,   45,   45,   45, 1271,   45,   45,   45,   45,
-     1271,   45,   45,   45,   45,   45,   45,   45, 1271,   45,
-       45,   45,   45,   45,   45,   45,   45, 1271,   45,   45,
-       45,   45, 1271,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45, 1271,   45, 1271, 1271,   45,   45,
-       45,   45, 1271,   45, 1271,   45,   45, 1271,   45,   45,
-       45,   45, 1271,   45,   45,   45,   45,   45,   45,   45,
+     1300,   45,   45,   45,   45, 1300, 1300,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300,   45,
+       45,   45, 1300, 1300,   45, 1300, 1300,   45,   45,   45,
+       45,   45, 1300,   45, 1300,   45,   45,   45,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1300,   45, 1300,   45, 1300,   45,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45, 1300, 1300,   45,
+       45, 1300,   45,   45,   45, 1300,   45,   45, 1300,   45,
+     1300,   45,   45,   45,   45,   45,   45,   45, 1300,   45,
+     1300,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1300,   45, 1300, 1300,   45, 1300,   45,   45,   45,   45,
+       45,   45,   45, 1300,   45, 1300, 1300,   45,   45,   45,
+     1300,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1300,   45,   45, 1300,   45, 1300,   45,   45,
+       45,   45,   45, 1300,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1300,   45,
+     1300,   45,   45,   45,   45,   45, 1300,   45,   45,   45,
+       45, 1300,   45,   45,   45,   45,   45,   45,   45,   45,
+
+       45, 1300,   45,   45,   45,   45,   45,   45,   45,   45,
+     1300,   45,   45,   45,   45,   45, 1300,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1300,
+       45,   45, 1300, 1300,   45,   45,   45,   45,   45, 1300,
+       45, 1300,   45,   45, 1300,   45, 1300,   45,   45, 1300,
+       45, 1300,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1271,   45, 1271,   45,   45,   45,
-       45,   45, 1271, 1271, 1271,   45,   45,   45, 1271,   45,
-       45,   45,   45,   45,   45,   45, 1271,   45,   45, 1271,
-        0, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271
+       45,   45,   45, 1300,   45, 1300,   45,   45,   45,   45,
+       45, 1300, 1300, 1300,   45,   45,   45, 1300,   45,   45,
+       45,   45,   45,   45,   45, 1300,   45,   45, 1300,    0,
+
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300
     } ;
 
-static const flex_int16_t yy_nxt[1706] =
+static yyconst flex_uint16_t yy_nxt[1735] =
     {   0,
-     1271,   13,   14,   13, 1271,   15,   16, 1271,   17,   18,
+     1300,   13,   14,   13, 1300,   15,   16,  804,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   85,  348,
-       37,   14,   37,   86,   25,   26,   38, 1271, 1271,   27,
+       37,   14,   37,   86,   25,   26,   38, 1300, 1300,   27,
        37,   14,   37,   42,   28,   42,   38,   91,   92,   29,
       115,   30,   13,   14,   13,   90,   91,   25,   31,   92,
-       13,   14,   13,   13,   14,   13,   32,   40,  800,   13,
+       13,   14,   13,   13,   14,   13,   32,   40, 1300,   13,
        14,   13,   33,   40,  115,   91,   92,  349,   90,   34,
        35,   13,   14,   13,   94,   15,   16,   95,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
@@ -1193,7 +995,7 @@ static const flex_int16_t yy_nxt[1706] =
 
        39,   84,   84,   84,   28,   42,   41,   42,   42,   29,
        42,   30,   82,  107,   41,  111,   93,   25,   31,  108,
-      130,  137,   88,  801,   88,  802,   32,   89,   89,   89,
+      130,  137,   88,  805,   88,  806,   32,   89,   89,   89,
       131,  138,   33,  139,  364,   82,  107,  365,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
@@ -1206,20 +1008,20 @@ static const flex_int16_t yy_nxt[1706] =
        45,   45,   80,  103,   81,   81,   81,   80,  109,   83,
        83,   83,  101,  114,   80,   82,   83,   83,   83,  121,
        82,  145,  122,  112,  123,  146,  124,   82,  160,  103,
-      803,  103,  161,  113,  134,  219,  114,  110,   82,  135,
-      188,  107,  136,   82,  189,  147,  112,  102,  220,  804,
-       82,   45,  805,   45,   45,   45,   45,  119,   45,   45,
+      807,  103,  161,  113,  134,  219,  114,  110,   82,  135,
+      188,  107,  136,   82,  189,  147,  112,  102,  220,  713,
+       82,   45,  714,   45,   45,   45,   45,  119,   45,   45,
        45,  113,  117,  120,  107,   45,   45,  188,   45,   45,
        89,   89,   89,  190,   45,  132,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   89,   89,
-       89,   45,  125,  101,  111,   45,  126,  806,  174,  127,
+       89,   45,  125,  101,  111,   45,  126,  808,  174,  127,
       128,  141,  142,   45,  150,  143,  196,   45,  114,   45,
-      118,  144,  129,  148,  151,  149,  807,  111,  154,  152,
+      118,  144,  129,  148,  151,  149,  809,  111,  154,  152,
       153,  155,  156,  162,  174,  175,  163,  112,  102,  196,
       306,  114,  157,  164,  165,  158,  307,  113,  458,  166,
-      808,  170,   84,   84,   84,   80,  171,   81,   81,   81,
+      810,  170,   84,   84,   84,   80,  171,   81,   81,   81,
       112,  175,  167,   82,  176,   88,  168,   88,   82,  174,
        89,   89,   89,  175,   80,  113,   83,   83,   83,   84,
        84,   84,  169,  176,  183,  281,   82,   82,  187,  100,
@@ -1231,66 +1033,66 @@ static const flex_int16_t yy_nxt[1706] =
       248,  249,  100,  216,  252,  217,  239,  253,  254,  279,
       100,  258,  280,  281,  100,  280,  100,  182,  199,  199,
       199,  279,  218,  339,  287,  199,  199,  199,  199,  199,
-      199,  266,  230,  290,  809,  267,  284,  282,  280,  268,
+      199,  266,  230,  290,  811,  267,  284,  282,  280,  268,
       291,  283,  294,  296,  259,  260,  261,  287,  199,  199,
       199,  199,  199,  199,  298,  262,  287,  263,  405,  264,
 
       395,  290,  265,  383,  383,  294,  296,  291,  387,  389,
-      390,  387,  392,  634,  340,  406,  412,  341,  391,  301,
-      413,  298,  299,  299,  299,  810,  383,  384,  395,  299,
+      390,  387,  392,  812,  340,  406,  412,  341,  391,  301,
+      413,  298,  299,  299,  299,  636,  383,  384,  395,  299,
       299,  299,  299,  299,  299,  392,  448,  387,  441,  442,
-      399,  462,  486,  426,  491,  463,  449,  487,  427,  499,
-      635,  500,  299,  299,  299,  299,  299,  299,  398,  398,
-      398,  671,  811,  662,  812,  398,  398,  398,  398,  398,
-      398,  587,  491,  663,  521,  491,  499,  567,  500,  522,
-      813,  583,  568,  814,  671,  588,  589,  670,  398,  398,
-      398,  398,  398,  398,  428,  672,  815,  738,  587,  429,
-
-       45,   45,   45,  501,  739,  673,  818,   45,   45,   45,
-       45,   45,   45,  588,  643,  670,  740,  753,  744,  644,
-      819,  791,  820,  741,  745,  792,  816,  821,  822,  823,
-       45,   45,   45,   45,   45,   45,  824,  825,  817,  826,
-      827,  828,  829,  830,  831,  753,  832,  833,  834,  835,
-      836,  837,  838,  839,  840,  841,  645,  842,  843,  844,
-      845,  846,  847,  848,  828,  849,  850,  827,  851,  852,
-      853,  854,  857,  858,  859,  860,  855,  861,  862,  863,
-      864,  865,  866,  867,  868,  869,  871,  872,  873,  874,
-      875,  876,  877,  878,  879,  880,  870,  881,  882,  883,
-
-      884,  885,  886,  887,  888,  889,  890,  891,  892,  893,
-      894,  895,  896,  897,  899,  898,  900,  901,  902,  903,
-      904,  905,  906,  907,  908,  909,  910,  856,  911,  912,
-      913,  914,  915,  916,  917,  918,  919,  920,  921,  922,
-      923,  897,  898,  924,  926,  928,  929,  930,  925,  931,
-      932,  933,  934,  935,  936,  937,  938,  939,  940,  941,
+      399,  462,  813,  426,  487,  463,  449,  470,  427,  488,
+      492,  471,  299,  299,  299,  299,  299,  299,  398,  398,
+      398,  674,  637,  814,  815,  398,  398,  398,  398,  398,
+      398,  500,  522,  501,  569,  665,  492,  523,  492,  570,
+      589,  816,  585,  817,  674,  666,  590,  591,  398,  398,
+      398,  398,  398,  398,  428,  673,  675,  818,  500,  429,
+
+      501,   45,   45,   45,  502,  819,  676,  589,   45,   45,
+       45,   45,   45,   45,  590,  645,  749,  743,  745,  758,
+      646,  820,  750,  673,  744,  746,  797,  821,  822,  823,
+      798,   45,   45,   45,   45,   45,   45,  825,  826,  827,
+      828,  824,  829,  830,  831,  832,  833,  758,  834,  835,
+      836,  837,  838,  839,  840,  841,  842,  647,  843,  844,
+      845,  846,  847,  848,  849,  850,  851,  852,  853,  854,
+      855,  856,  835,  857,  858,  834,  859,  860,  861,  864,
+      865,  866,  867,  862,  868,  869,  870,  871,  872,  873,
+      874,  875,  876,  877,  879,  880,  881,  882,  883,  884,
+
+      885,  886,  887,  888,  878,  889,  890,  891,  892,  893,
+      894,  895,  896,  897,  898,  899,  900,  901,  902,  903,
+      904,  905,  906,  908,  907,  909,  910,  911,  912,  913,
+      914,  915,  916,  917,  863,  918,  919,  920,  921,  922,
+      923,  924,  925,  926,  927,  928,  929,  930,  931,  932,
+      906,  907,  933,  935,  937,  938,  939,  934,  940,  941,
       942,  943,  944,  945,  946,  947,  948,  949,  950,  951,
       952,  953,  954,  955,  956,  957,  958,  959,  960,  961,
-      962,  963,  964,  965,  966,  967,  927,  968,  969,  970,
-      971,  972,  973,  974,  975,  976,  977,  978,  979,  980,
-
-      981,  982,  983,  984,  963,  985,  986,  987,  988,  989,
-      964,  990,  991,  992,  993,  994,  995,  996,  997,  998,
-      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
-     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
-     1020, 1021, 1022, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
-     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
-     1041, 1042, 1043, 1044, 1045, 1046, 1048, 1019, 1049, 1050,
-     1051, 1052, 1053, 1047, 1054, 1055, 1056, 1057, 1058, 1059,
-     1009, 1060, 1061, 1062, 1023, 1063, 1064, 1065, 1066, 1067,
-     1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
+      972,  973,  974,  975,  976,  936,  977,  978,  979,  980,
+
+      981,  982,  983,  984,  985,  986,  987,  988,  989,  990,
+      991,  992,  993,  994,  995,  974,  996,  997,  998,  999,
+     1000,  975, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
+     1019, 1020, 1021, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+     1030, 1031, 1032, 1033, 1034, 1035, 1037, 1038, 1039, 1040,
+     1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
+     1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1061,
+     1032, 1062, 1063, 1064, 1065, 1066, 1060, 1067, 1068, 1069,
+     1070, 1071, 1072, 1022, 1073, 1074, 1075, 1036, 1076, 1077,
 
      1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
-     1088, 1089, 1067, 1090, 1091, 1092, 1093, 1094, 1095, 1096,
-     1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
+     1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097,
+     1098, 1099, 1100, 1101, 1102, 1103, 1104, 1082, 1105, 1106,
      1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116,
      1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
-     1127, 1128, 1102, 1129, 1130, 1131, 1132, 1133, 1134, 1135,
-     1136, 1137, 1138, 1139, 1141, 1142, 1143, 1144, 1140, 1145,
+     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
+     1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1119,
      1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155,
-     1156, 1157, 1158, 1159, 1160, 1161, 1162, 1135, 1163, 1164,
-     1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
+     1156, 1157, 1158, 1160, 1161, 1162, 1163, 1159, 1164, 1165,
+     1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175,
 
-     1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
+     1176, 1177, 1178, 1179, 1180, 1181, 1154, 1182, 1183, 1184,
      1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194,
      1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204,
      1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
@@ -1299,85 +1101,88 @@ static const flex_int16_t yy_nxt[1706] =
      1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
      1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
      1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
-     1265, 1266, 1267, 1268, 1269, 1270,   12,   12,   12,   12,
-
-       12,   36,   36,   36,   36,   36,   79,  286,   79,   79,
-       79,   98,  386,   98,  490,   98,  100,  100,  100,  100,
-      100,  116,  116,  116,  116,  116,  173,  100,  173,  173,
-      173,  197,  197,  197,  799,  798,  797,  796,  795,  794,
-      793,  790,  789,  788,  787,  786,  785,  784,  783,  782,
-      781,  780,  779,  778,  777,  776,  775,  774,  773,  772,
-      771,  770,  769,  768,  767,  766,  765,  764,  763,  762,
-      761,  760,  759,  758,  757,  756,  755,  754,  752,  751,
-      750,  749,  748,  747,  746,  743,  742,  737,  736,  735,
-      734,  733,  732,  731,  730,  729,  728,  727,  726,  725,
-
-      724,  723,  722,  721,  720,  719,  718,  717,  716,  715,
-      714,  713,  712,  711,  710,  709,  708,  707,  706,  705,
-      704,  703,  702,  701,  700,  699,  698,  697,  696,  695,
-      694,  693,  692,  691,  690,  689,  688,  687,  686,  685,
-      684,  683,  682,  681,  680,  679,  678,  677,  676,  675,
-      674,  669,  668,  667,  666,  665,  664,  661,  660,  659,
-      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
-      648,  647,  646,  642,  641,  640,  639,  638,  637,  636,
-      633,  632,  631,  630,  629,  628,  627,  626,  625,  624,
-      623,  622,  621,  620,  619,  618,  617,  616,  615,  614,
-
-      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
-      603,  602,  601,  600,  599,  598,  597,  596,  595,  594,
-      593,  592,  591,  590,  586,  585,  584,  583,  582,  581,
-      580,  579,  578,  577,  576,  575,  574,  573,  572,  571,
-      570,  569,  566,  565,  564,  563,  562,  561,  560,  559,
-      558,  557,  556,  555,  554,  553,  552,  551,  550,  549,
-      548,  547,  546,  545,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  529,
-      528,  527,  526,  525,  524,  523,  520,  519,  518,  517,
-      516,  515,  514,  513,  512,  511,  510,  509,  508,  507,
+     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274,
+
+     1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284,
+     1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294,
+     1295, 1296, 1297, 1298, 1299,   12,   12,   12,   12,   12,
+       36,   36,   36,   36,   36,   79,  286,   79,   79,   79,
+       98,  386,   98,  491,   98,  100,  100,  100,  100,  100,
+      116,  116,  116,  116,  116,  173,  100,  173,  173,  173,
+      197,  197,  197,  803,  802,  801,  800,  799,  796,  795,
+      794,  793,  792,  791,  790,  789,  788,  787,  786,  785,
+      784,  783,  782,  781,  780,  779,  778,  777,  776,  775,
+      774,  773,  772,  771,  770,  769,  768,  767,  766,  765,
+
+      764,  763,  762,  761,  760,  759,  757,  756,  755,  754,
+      753,  752,  751,  748,  747,  742,  741,  740,  739,  738,
+      737,  736,  735,  734,  733,  732,  731,  730,  729,  728,
+      727,  726,  725,  724,  723,  722,  721,  720,  719,  718,
+      717,  716,  715,  712,  711,  710,  709,  708,  707,  706,
+      705,  704,  703,  702,  701,  700,  699,  698,  697,  696,
+      695,  694,  693,  692,  691,  690,  689,  688,  687,  686,
+      685,  684,  683,  682,  681,  680,  679,  678,  677,  672,
+      671,  670,  669,  668,  667,  664,  663,  662,  661,  660,
+      659,  658,  657,  656,  655,  654,  653,  652,  651,  650,
+
+      649,  648,  644,  643,  642,  641,  640,  639,  638,  635,
+      634,  633,  632,  631,  630,  629,  628,  627,  626,  625,
+      624,  623,  622,  621,  620,  619,  618,  617,  616,  615,
+      614,  613,  612,  611,  610,  609,  608,  607,  606,  605,
+      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
+      594,  593,  592,  588,  587,  586,  585,  584,  583,  582,
+      581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
+      571,  568,  567,  566,  565,  564,  563,  562,  561,  560,
+      559,  558,  557,  556,  555,  554,  553,  552,  551,  550,
+      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
+
+      539,  538,  537,  536,  535,  534,  533,  532,  531,  530,
+      529,  528,  527,  526,  525,  524,  521,  520,  519,  518,
+      517,  516,  515,  514,  513,  512,  511,  510,  509,  508,
+      507,  506,  505,  504,  503,  499,  498,  497,  496,  495,
+      494,  493,  490,  489,  486,  485,  484,  483,  482,  481,
+      480,  479,  478,  477,  476,  475,  474,  473,  472,  469,
+      468,  467,  466,  465,  464,  461,  460,  457,  456,  455,
+      454,  453,  452,  451,  450,  447,  446,  445,  444,  443,
+      440,  439,  438,  437,  436,  435,  434,  433,  432,  431,
+      430,  425,  424,  423,  422,  421,  420,  419,  418,  417,
+
+      416,  415,  414,  411,  410,  409,  408,  407,  404,  403,
+      402,  401,  400,  397,  396,  394,  393,  388,  385,  382,
+      381,  380,  379,  378,  377,  376,  375,  374,  373,  372,
+      371,  370,  369,  368,  367,  366,  363,  362,  361,  360,
+      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
+      347,  346,  345,  344,  343,  342,  338,  337,  336,  335,
+      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
+      324,  323,  322,  321,  320,  319,  318,  317,  316,  315,
+      314,  313,  312,  311,  310,  309,  308,  305,  304,  303,
+      302,  300,  198,  297,  295,  293,  292,  289,  288,  285,
 
-      506,  505,  504,  503,  502,  498,  497,  496,  495,  494,
-      493,  492,  489,  488,  485,  484,  483,  482,  481,  480,
-      479,  478,  477,  476,  475,  474,  473,  472,  471,  470,
-      469,  468,  467,  466,  465,  464,  461,  460,  457,  456,
-      455,  454,  453,  452,  451,  450,  447,  446,  445,  444,
-      443,  440,  439,  438,  437,  436,  435,  434,  433,  432,
-      431,  430,  425,  424,  423,  422,  421,  420,  419,  418,
-      417,  416,  415,  414,  411,  410,  409,  408,  407,  404,
-      403,  402,  401,  400,  397,  396,  394,  393,  388,  385,
-      382,  381,  380,  379,  378,  377,  376,  375,  374,  373,
-
-      372,  371,  370,  369,  368,  367,  366,  363,  362,  361,
-      360,  359,  358,  357,  356,  355,  354,  353,  352,  351,
-      350,  347,  346,  345,  344,  343,  342,  338,  337,  336,
-      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
-      325,  324,  323,  322,  321,  320,  319,  318,  317,  316,
-      315,  314,  313,  312,  311,  310,  309,  308,  305,  304,
-      303,  302,  300,  198,  297,  295,  293,  292,  289,  288,
-      285,  278,  277,  276,  275,  274,  273,  272,  271,  270,
-      269,  257,  256,  255,  251,  250,  247,  246,  245,  244,
-      243,  242,  241,  240,  237,  236,  235,  234,  233,  232,
-
-      231,  228,  227,  223,  215,  214,  213,  209,  208,  207,
-      203,  202,  198,  191,  186,  185,  184,  181,  180,  172,
-      159,  140,  133,  106,  105,  104,   43,   99,   97,   96,
-       87,   43, 1271,   11, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-
-     1271, 1271, 1271, 1271, 1271
+      278,  277,  276,  275,  274,  273,  272,  271,  270,  269,
+      257,  256,  255,  251,  250,  247,  246,  245,  244,  243,
+      242,  241,  240,  237,  236,  235,  234,  233,  232,  231,
+      228,  227,  223,  215,  214,  213,  209,  208,  207,  203,
+      202,  198,  191,  186,  185,  184,  181,  180,  172,  159,
+      140,  133,  106,  105,  104,   43,   99,   97,   96,   87,
+       43, 1300,   11, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300
     } ;
 
-static const flex_int16_t yy_chk[1706] =
+static yyconst flex_int16_t yy_chk[1735] =
     {   0,
-        0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
+        0,    1,    1,    1,    0,    1,    1,  725,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  246,
         3,    3,    3,   21,    1,    1,    3,    0,    0,    1,
         4,    4,    4,   13,    1,   13,    4,   27,   28,    1,
        57,    1,    5,    5,    5,   26,   32,    1,    1,   33,
-        6,    6,    6,    7,    7,    7,    1,    7,  724,    8,
+        6,    6,    6,    7,    7,    7,    1,    7,    0,    8,
         8,    8,    1,    8,   57,   27,   28,  246,   26,    1,
         1,    2,    2,    2,   32,    2,    2,   33,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    9,    9,
@@ -1385,7 +1190,7 @@ static const flex_int16_t yy_chk[1706] =
 
         6,   20,   20,   20,    2,   37,    9,   37,   42,    2,
        42,    2,   20,   51,   10,   54,   31,    2,    2,   52,
-       62,   66,   25,  725,   25,  726,    2,   25,   25,   25,
+       62,   66,   25,  727,   25,  728,    2,   25,   25,   25,
        62,   66,    2,   66,  261,   20,   51,  261,   54,    2,
         2,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1398,9 +1203,9 @@ static const flex_int16_t yy_chk[1706] =
        15,   15,   17,   47,   17,   17,   17,   19,   53,   19,
        19,   19,   44,   56,   22,   17,   22,   22,   22,   60,
        19,   69,   60,   55,   60,   69,   60,   22,   74,   47,
-      727,   59,   74,   55,   65,  131,   56,   53,   17,   65,
-      108,   63,   65,   19,  109,   69,   55,   44,  131,  728,
-       22,   45,  729,   45,   45,   45,   45,   59,   45,   45,
+      729,   59,   74,   55,   65,  131,   56,   53,   17,   65,
+      108,   63,   65,   19,  109,   69,   55,   44,  131,  628,
+       22,   45,  628,   45,   45,   45,   45,   59,   45,   45,
        45,   55,   58,   59,   63,   45,   45,  108,   45,   58,
        88,   88,   88,  109,   45,   63,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
@@ -1428,166 +1233,169 @@ static const flex_int16_t yy_chk[1706] =
       118,  118,  118,  118,  196,  161,  201,  161,  307,  161,
 
       294,  187,  161,  279,  282,  192,  194,  188,  287,  289,
-      289,  301,  290,  550,  239,  307,  314,  239,  289,  201,
-      314,  196,  199,  199,  199,  734,  279,  282,  294,  199,
+      289,  301,  290,  734,  239,  307,  314,  239,  289,  201,
+      314,  196,  199,  199,  199,  551,  279,  282,  294,  199,
       199,  199,  199,  199,  199,  290,  345,  287,  339,  339,
-      301,  358,  381,  327,  387,  358,  345,  381,  327,  397,
-      550,  397,  199,  199,  199,  199,  199,  199,  299,  299,
-      299,  588,  735,  578,  736,  299,  299,  299,  299,  299,
-      299,  499,  387,  578,  422,  399,  397,  471,  397,  422,
-      737,  501,  471,  738,  588,  500,  501,  587,  299,  299,
-      299,  299,  299,  299,  327,  589,  739,  657,  499,  327,
-
-      398,  398,  398,  399,  657,  589,  741,  398,  398,  398,
-      398,  398,  398,  500,  559,  587,  658,  671,  661,  559,
-      742,  715,  743,  658,  661,  715,  740,  744,  745,  747,
-      398,  398,  398,  398,  398,  398,  748,  749,  740,  750,
-      752,  753,  754,  755,  756,  671,  757,  758,  759,  760,
-      761,  762,  763,  764,  765,  767,  559,  768,  769,  770,
-      771,  772,  773,  774,  753,  775,  776,  752,  778,  779,
-      780,  781,  782,  784,  785,  786,  781,  787,  788,  789,
-      790,  791,  792,  793,  794,  795,  796,  799,  800,  801,
-      803,  804,  805,  807,  808,  809,  795,  810,  811,  812,
-
-      813,  814,  815,  816,  817,  818,  820,  821,  822,  823,
-      824,  825,  826,  827,  829,  828,  830,  831,  832,  833,
-      834,  835,  836,  837,  838,  840,  841,  781,  842,  843,
-      844,  845,  846,  847,  848,  849,  850,  851,  852,  853,
-      855,  827,  828,  856,  857,  858,  859,  860,  856,  861,
-      862,  863,  864,  865,  866,  867,  868,  869,  870,  871,
-      872,  873,  874,  875,  876,  878,  879,  880,  881,  882,
-      883,  884,  886,  889,  890,  891,  892,  893,  894,  895,
-      896,  897,  898,  899,  900,  901,  857,  902,  903,  904,
-      907,  908,  909,  910,  911,  912,  913,  914,  915,  916,
-
-      917,  918,  919,  920,  897,  923,  925,  927,  928,  929,
-      898,  930,  931,  932,  934,  935,  937,  938,  939,  940,
-      943,  945,  946,  947,  948,  949,  950,  951,  952,  953,
-      954,  955,  956,  957,  958,  959,  960,  961,  962,  963,
-      964,  965,  967,  968,  969,  970,  971,  972,  973,  974,
-      976,  977,  978,  979,  980,  981,  982,  983,  984,  985,
-      986,  987,  988,  989,  991,  992,  993,  963,  996,  997,
-      998,  999, 1000,  992, 1001, 1002, 1003, 1004, 1005, 1007,
-      953, 1008, 1009, 1012,  967, 1015, 1016, 1017, 1018, 1019,
-     1021, 1023, 1024, 1025, 1026, 1027, 1028, 1030, 1031, 1032,
-
-     1033, 1034, 1035, 1036, 1037, 1038, 1039, 1041, 1043, 1045,
-     1046, 1047, 1019, 1049, 1050, 1051, 1052, 1053, 1056, 1058,
-     1059, 1060, 1062, 1063, 1065, 1067, 1068, 1069, 1070, 1071,
-     1072, 1073, 1075, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
-     1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093,
-     1094, 1095, 1067, 1096, 1097, 1098, 1099, 1100, 1101, 1102,
-     1103, 1105, 1108, 1110, 1111, 1112, 1113, 1114, 1110, 1115,
-     1116, 1118, 1121, 1122, 1124, 1125, 1126, 1127, 1128, 1129,
-     1130, 1131, 1132, 1133, 1135, 1136, 1138, 1102, 1140, 1141,
-     1142, 1143, 1144, 1146, 1147, 1148, 1149, 1150, 1151, 1152,
-
-     1153, 1154, 1155, 1156, 1157, 1159, 1161, 1162, 1163, 1164,
-     1165, 1167, 1168, 1169, 1170, 1172, 1173, 1174, 1175, 1176,
-     1177, 1178, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
-     1189, 1190, 1191, 1192, 1194, 1195, 1196, 1197, 1198, 1199,
-     1200, 1201, 1202, 1203, 1204, 1206, 1209, 1210, 1211, 1212,
-     1214, 1216, 1217, 1219, 1220, 1221, 1222, 1224, 1225, 1226,
-     1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
-     1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1246, 1248,
-     1249, 1250, 1251, 1252, 1256, 1257, 1258, 1260, 1261, 1262,
-     1263, 1264, 1265, 1266, 1268, 1269, 1272, 1272, 1272, 1272,
-
-     1272, 1273, 1273, 1273, 1273, 1273, 1274, 1280, 1274, 1274,
-     1274, 1275, 1281, 1275, 1282, 1275, 1276, 1276, 1276, 1276,
-     1276, 1277, 1277, 1277, 1277, 1277, 1278, 1283, 1278, 1278,
-     1278, 1279, 1279, 1279,  723,  721,  720,  719,  718,  717,
-      716,  714,  713,  710,  709,  708,  705,  704,  703,  702,
-      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
-      690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
-      680,  679,  678,  677,  676,  674,  673,  672,  670,  668,
-      667,  666,  665,  664,  663,  660,  659,  656,  655,  654,
-      653,  652,  651,  650,  649,  648,  647,  646,  645,  644,
-
-      642,  641,  640,  639,  638,  637,  636,  635,  633,  632,
-      631,  630,  629,  627,  626,  625,  624,  623,  622,  621,
+      301,  358,  735,  327,  381,  358,  345,  365,  327,  381,
+      387,  365,  199,  199,  199,  199,  199,  199,  299,  299,
+      299,  590,  551,  736,  737,  299,  299,  299,  299,  299,
+      299,  397,  422,  397,  472,  580,  399,  422,  387,  472,
+      500,  738,  502,  739,  590,  580,  501,  502,  299,  299,
+      299,  299,  299,  299,  327,  589,  591,  740,  397,  327,
+
+      397,  398,  398,  398,  399,  741,  591,  500,  398,  398,
+      398,  398,  398,  398,  501,  560,  664,  660,  661,  674,
+      560,  742,  664,  589,  660,  661,  719,  743,  744,  745,
+      719,  398,  398,  398,  398,  398,  398,  746,  747,  748,
+      749,  745,  750,  752,  753,  754,  755,  674,  757,  758,
+      759,  760,  761,  762,  763,  764,  765,  560,  766,  767,
+      768,  769,  770,  772,  773,  774,  775,  776,  777,  778,
+      779,  780,  758,  781,  783,  757,  784,  785,  786,  787,
+      789,  790,  791,  786,  792,  793,  794,  795,  796,  797,
+      798,  799,  800,  801,  802,  805,  806,  807,  809,  810,
+
+      811,  813,  814,  815,  801,  816,  817,  818,  819,  820,
+      821,  822,  823,  824,  825,  827,  828,  829,  830,  831,
+      832,  833,  834,  836,  835,  837,  838,  839,  840,  841,
+      842,  843,  844,  845,  786,  847,  848,  849,  850,  851,
+      852,  853,  854,  855,  856,  857,  858,  859,  860,  862,
+      834,  835,  863,  864,  865,  866,  867,  863,  868,  869,
+      870,  871,  872,  873,  874,  875,  876,  877,  878,  879,
+      880,  881,  882,  883,  884,  886,  887,  888,  889,  890,
+      891,  892,  893,  895,  898,  899,  900,  901,  902,  903,
+      904,  905,  906,  907,  908,  864,  909,  910,  911,  912,
+
+      913,  916,  917,  918,  919,  920,  921,  922,  923,  924,
+      925,  926,  927,  928,  929,  906,  932,  934,  936,  937,
+      938,  907,  939,  940,  941,  942,  944,  945,  947,  948,
+      949,  950,  953,  955,  956,  957,  958,  959,  960,  961,
+      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
+      972,  973,  974,  975,  976,  978,  979,  980,  981,  982,
+      983,  984,  985,  987,  988,  989,  990,  991,  992,  993,
+      994,  995,  996,  997,  998,  999, 1000, 1002, 1003, 1004,
+      974, 1005, 1008, 1009, 1010, 1011, 1003, 1012, 1013, 1014,
+     1015, 1016, 1017,  964, 1018, 1020, 1021,  978, 1022, 1025,
+
+     1028, 1029, 1030, 1031, 1032, 1034, 1036, 1037, 1038, 1039,
+     1040, 1041, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
+     1051, 1052, 1054, 1056, 1058, 1059, 1060, 1032, 1061, 1063,
+     1064, 1065, 1066, 1067, 1070, 1071, 1073, 1074, 1075, 1077,
+     1078, 1080, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1090,
+     1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101,
+     1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1082,
+     1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120,
+     1122, 1125, 1127, 1128, 1129, 1130, 1131, 1127, 1132, 1133,
+     1135, 1138, 1139, 1140, 1142, 1143, 1144, 1145, 1146, 1147,
+
+     1148, 1149, 1150, 1151, 1152, 1154, 1119, 1155, 1157, 1159,
+     1160, 1161, 1162, 1163, 1165, 1166, 1167, 1168, 1169, 1170,
+     1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1180, 1182,
+     1183, 1184, 1185, 1186, 1188, 1189, 1190, 1191, 1193, 1194,
+     1195, 1196, 1197, 1198, 1199, 1200, 1201, 1203, 1204, 1205,
+     1206, 1207, 1208, 1209, 1210, 1212, 1213, 1214, 1215, 1216,
+     1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227,
+     1228, 1229, 1231, 1232, 1235, 1236, 1237, 1238, 1239, 1241,
+     1243, 1244, 1246, 1248, 1249, 1251, 1253, 1254, 1255, 1256,
+     1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
+
+     1267, 1268, 1269, 1270, 1271, 1272, 1273, 1275, 1277, 1278,
+     1279, 1280, 1281, 1285, 1286, 1287, 1289, 1290, 1291, 1292,
+     1293, 1294, 1295, 1297, 1298, 1301, 1301, 1301, 1301, 1301,
+     1302, 1302, 1302, 1302, 1302, 1303, 1309, 1303, 1303, 1303,
+     1304, 1310, 1304, 1311, 1304, 1305, 1305, 1305, 1305, 1305,
+     1306, 1306, 1306, 1306, 1306, 1307, 1312, 1307, 1307, 1307,
+     1308, 1308, 1308,  724,  723,  722,  721,  720,  718,  717,
+      714,  713,  712,  711,  708,  707,  706,  705,  704,  703,
+      702,  701,  700,  699,  698,  697,  696,  695,  693,  692,
+      691,  690,  689,  688,  687,  686,  685,  684,  683,  682,
+
+      681,  680,  679,  677,  676,  675,  673,  671,  670,  669,
+      668,  667,  666,  663,  662,  659,  658,  657,  656,  655,
+      654,  653,  652,  651,  650,  649,  648,  647,  646,  644,
+      643,  642,  641,  640,  639,  638,  637,  635,  634,  633,
+      632,  631,  629,  627,  626,  625,  624,  623,  622,  621,
       620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
       610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
-      590,  586,  585,  584,  581,  580,  579,  576,  575,  574,
-      573,  572,  571,  570,  569,  568,  566,  565,  564,  563,
-      562,  561,  560,  558,  557,  555,  554,  553,  552,  551,
-      549,  548,  547,  546,  544,  543,  542,  541,  540,  539,
-      538,  537,  536,  535,  534,  533,  532,  531,  530,  528,
-
-      527,  526,  525,  524,  523,  522,  520,  519,  518,  517,
+      600,  599,  598,  597,  596,  595,  594,  593,  592,  588,
+      587,  586,  583,  582,  581,  578,  577,  576,  575,  574,
+      573,  572,  571,  570,  568,  567,  566,  565,  564,  563,
+
+      562,  561,  559,  558,  556,  555,  554,  553,  552,  550,
+      549,  548,  547,  545,  544,  543,  542,  541,  540,  539,
+      538,  537,  536,  535,  534,  533,  532,  531,  529,  528,
+      527,  526,  525,  524,  523,  521,  520,  519,  518,  517,
       516,  515,  514,  513,  512,  511,  510,  509,  508,  507,
-      506,  505,  504,  503,  497,  495,  492,  491,  489,  488,
-      487,  485,  481,  480,  479,  478,  477,  476,  475,  474,
-      473,  472,  470,  469,  468,  467,  466,  465,  464,  463,
+      506,  505,  504,  498,  496,  493,  492,  490,  489,  488,
+      486,  482,  481,  480,  479,  478,  477,  476,  475,  474,
+      473,  471,  470,  469,  468,  467,  466,  465,  464,  463,
       462,  461,  459,  457,  456,  455,  454,  453,  452,  451,
       450,  449,  448,  446,  445,  444,  443,  442,  441,  440,
+
       439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
       429,  428,  427,  425,  424,  423,  421,  420,  419,  418,
       417,  416,  414,  413,  412,  411,  410,  409,  407,  406,
-
       405,  404,  403,  401,  400,  395,  394,  392,  391,  390,
       389,  388,  385,  382,  380,  379,  378,  377,  376,  375,
-      374,  373,  372,  371,  370,  369,  368,  367,  366,  365,
-      364,  363,  362,  361,  360,  359,  357,  356,  354,  353,
-      352,  351,  350,  349,  348,  347,  344,  343,  342,  341,
-      340,  338,  337,  336,  335,  334,  333,  332,  331,  330,
-      329,  328,  326,  325,  324,  323,  322,  321,  320,  319,
-      318,  317,  316,  315,  313,  312,  311,  310,  309,  306,
-      305,  304,  303,  302,  298,  296,  293,  291,  288,  285,
-      278,  277,  276,  275,  274,  273,  272,  271,  270,  269,
-
-      268,  267,  266,  265,  264,  263,  262,  260,  259,  258,
-      257,  256,  255,  254,  253,  252,  251,  250,  249,  248,
-      247,  245,  244,  243,  242,  241,  240,  238,  237,  236,
-      235,  234,  233,  232,  231,  230,  228,  227,  226,  225,
-      224,  223,  222,  221,  220,  219,  218,  217,  216,  215,
-      214,  213,  212,  211,  210,  209,  208,  207,  205,  204,
-      203,  202,  200,  197,  195,  193,  191,  190,  185,  184,
-      180,  172,  171,  170,  169,  168,  167,  166,  165,  164,
-      163,  160,  159,  158,  156,  155,  153,  152,  151,  150,
-      149,  148,  147,  146,  144,  143,  142,  141,  140,  139,
-
-      138,  136,  135,  133,  129,  128,  127,  125,  124,  123,
-      121,  120,  116,  110,  106,  105,  104,   98,   97,   78,
-       73,   67,   64,   50,   49,   48,   43,   41,   39,   38,
-       24,   14,   11, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
-
-     1271, 1271, 1271, 1271, 1271
+      374,  373,  372,  371,  370,  369,  368,  367,  366,  364,
+      363,  362,  361,  360,  359,  357,  356,  354,  353,  352,
+      351,  350,  349,  348,  347,  344,  343,  342,  341,  340,
+      338,  337,  336,  335,  334,  333,  332,  331,  330,  329,
+      328,  326,  325,  324,  323,  322,  321,  320,  319,  318,
+
+      317,  316,  315,  313,  312,  311,  310,  309,  306,  305,
+      304,  303,  302,  298,  296,  293,  291,  288,  285,  278,
+      277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
+      267,  266,  265,  264,  263,  262,  260,  259,  258,  257,
+      256,  255,  254,  253,  252,  251,  250,  249,  248,  247,
+      245,  244,  243,  242,  241,  240,  238,  237,  236,  235,
+      234,  233,  232,  231,  230,  228,  227,  226,  225,  224,
+      223,  222,  221,  220,  219,  218,  217,  216,  215,  214,
+      213,  212,  211,  210,  209,  208,  207,  205,  204,  203,
+      202,  200,  197,  195,  193,  191,  190,  185,  184,  180,
+
+      172,  171,  170,  169,  168,  167,  166,  165,  164,  163,
+      160,  159,  158,  156,  155,  153,  152,  151,  150,  149,
+      148,  147,  146,  144,  143,  142,  141,  140,  139,  138,
+      136,  135,  133,  129,  128,  127,  125,  124,  123,  121,
+      120,  116,  110,  106,  105,  104,   98,   97,   78,   73,
+       67,   64,   50,   49,   48,   43,   41,   39,   38,   24,
+       14,   11, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300,
+     1300, 1300, 1300, 1300
     } ;
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
 
-extern int yy_flex_debug;
-int yy_flex_debug = 1;
+extern int parser6__flex_debug;
+int parser6__flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[162] =
+static yyconst flex_int16_t yy_rule_linenum[164] =
     {   0,
-      147,  149,  151,  156,  157,  162,  163,  164,  176,  179,
-      184,  191,  200,  209,  218,  227,  236,  245,  254,  263,
-      272,  281,  290,  299,  308,  317,  327,  337,  347,  357,
-      367,  377,  387,  397,  407,  416,  425,  434,  443,  452,
-      461,  470,  482,  491,  500,  509,  518,  528,  538,  548,
-      558,  569,  579,  589,  599,  609,  620,  631,  642,  653,
-      662,  672,  681,  690,  706,  722,  731,  740,  749,  758,
-      767,  776,  785,  794,  803,  812,  834,  856,  865,  875,
-      885,  894,  904,  914,  923,  932,  941,  950,  960,  969,
-      978,  987,  996, 1005, 1014, 1023, 1032, 1041, 1051, 1060,
-
-     1069, 1079, 1090, 1100, 1109, 1118, 1127, 1138, 1148, 1157,
-     1167, 1177, 1186, 1195, 1204, 1213, 1223, 1232, 1242, 1251,
-     1260, 1269, 1278, 1287, 1296, 1305, 1314, 1323, 1332, 1341,
-     1350, 1359, 1368, 1377, 1386, 1395, 1404, 1413, 1422, 1431,
-     1440, 1449, 1458, 1468, 1567, 1572, 1577, 1582, 1583, 1584,
-     1585, 1586, 1587, 1589, 1607, 1620, 1625, 1629, 1631, 1633,
-     1635
+      146,  148,  150,  155,  156,  161,  162,  163,  175,  178,
+      183,  190,  199,  208,  217,  226,  235,  244,  253,  262,
+      271,  280,  289,  298,  307,  316,  326,  336,  346,  356,
+      366,  376,  386,  396,  406,  415,  424,  433,  442,  451,
+      460,  469,  481,  490,  499,  508,  517,  527,  537,  547,
+      557,  568,  578,  588,  598,  608,  618,  628,  639,  650,
+      661,  672,  681,  691,  700,  709,  725,  741,  750,  759,
+      768,  777,  786,  795,  804,  813,  822,  831,  853,  875,
+      884,  894,  904,  913,  923,  933,  942,  951,  960,  969,
+      979,  988,  997, 1006, 1015, 1024, 1033, 1042, 1051, 1060,
+
+     1070, 1079, 1088, 1098, 1109, 1119, 1128, 1137, 1146, 1157,
+     1167, 1176, 1186, 1196, 1205, 1214, 1223, 1232, 1242, 1251,
+     1261, 1270, 1279, 1288, 1297, 1306, 1315, 1324, 1333, 1342,
+     1351, 1360, 1369, 1378, 1387, 1396, 1405, 1414, 1423, 1432,
+     1441, 1450, 1459, 1468, 1477, 1487, 1586, 1591, 1596, 1601,
+     1602, 1603, 1604, 1605, 1606, 1608, 1626, 1639, 1644, 1648,
+     1650, 1652, 1654
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1597,7 +1405,7 @@ static const flex_int16_t yy_rule_linenum[162] =
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
+char *parser6_text;
 #line 1 "dhcp6_lexer.ll"
 /* Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
 
@@ -1624,8 +1432,8 @@ char *yytext;
    2.5.31 through 2.5.33): it generates code that does
    not conform to C89.  See Debian bug 333231
    <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */
-# undef yywrap
-# define yywrap() 1
+# undef parser6_wrap
+# define parser6_wrap() 1
 
 namespace {
 
@@ -1640,10 +1448,9 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 1643 "dhcp6_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
-   using yywrap requires linking with -lfl, which provides the default yywrap
+   using parser6_wrap requires linking with -lfl, which provides the default parser6_wrap
    implementation that always returns 1 anyway. */
 /* nounput simplifies the lexer, by removing support for putting a character
    back into the input stream. We never use such capability anyway. */
@@ -1651,23 +1458,23 @@ using namespace isc::dhcp;
 /* avoid to get static global variables to remain with C++. */
 /* in last resort %option reentrant */
 /* Enables debug mode. To see the debug messages, one needs to also set
-   yy_flex_debug to 1, then the debug messages will be printed on stderr. */
+   parser6__flex_debug to 1, then the debug messages will be printed on stderr. */
 /* I have no idea what this option does, except it was specified in the bison
    examples and Postgres folks added it to remove gcc 4.3 warnings. Let's
    be on the safe side and keep it. */
 #define YY_NO_INPUT 1
 
+
 /* These are not token expressions yet, just convenience expressions that
    can be used during actual token definitions. Note some can match
    incorrect inputs (e.g., IP addresses) which must be checked. */
 /* for errors */
 #line 94 "dhcp6_lexer.ll"
 /* This code run each time a pattern is matched. It updates the location
-   by moving it ahead by yyleng bytes. yyleng specifies the length of the
+   by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the
    currently matched token. */
-#define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1669 "dhcp6_lexer.cc"
-#line 1670 "dhcp6_lexer.cc"
+#define YY_USER_ACTION  driver.loc_.columns(parser6_leng);
+#line 1478 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1695,7 +1502,7 @@ using namespace isc::dhcp;
 /* %if-reentrant */
 /* %if-c-only */
 
-static int yy_init_globals ( void );
+static int yy_init_globals (void );
 
 /* %endif */
 /* %if-reentrant */
@@ -1705,31 +1512,31 @@ static int yy_init_globals ( void );
 /* Accessor methods to globals.
    These are made visible to non-reentrant scanners for convenience. */
 
-int yylex_destroy ( void );
+int parser6_lex_destroy (void );
 
-int yyget_debug ( void );
+int parser6_get_debug (void );
 
-void yyset_debug ( int debug_flag  );
+void parser6_set_debug (int debug_flag  );
 
-YY_EXTRA_TYPE yyget_extra ( void );
+YY_EXTRA_TYPE parser6_get_extra (void );
 
-void yyset_extra ( YY_EXTRA_TYPE user_defined  );
+void parser6_set_extra (YY_EXTRA_TYPE user_defined  );
 
-FILE *yyget_in ( void );
+FILE *parser6_get_in (void );
 
-void yyset_in  ( FILE * _in_str  );
+void parser6_set_in  (FILE * _in_str  );
 
-FILE *yyget_out ( void );
+FILE *parser6_get_out (void );
 
-void yyset_out  ( FILE * _out_str  );
+void parser6_set_out  (FILE * _out_str  );
 
-                       int yyget_leng ( void );
+yy_size_t parser6_get_leng (void );
 
-char *yyget_text ( void );
+char *parser6_get_text (void );
 
-int yyget_lineno ( void );
+int parser6_get_lineno (void );
 
-void yyset_lineno ( int _line_number  );
+void parser6_set_lineno (int _line_number  );
 
 /* %if-bison-bridge */
 /* %endif */
@@ -1740,13 +1547,14 @@ void yyset_lineno ( int _line_number  );
 
 #ifndef YY_SKIP_YYWRAP
 #ifdef __cplusplus
-extern "C" int yywrap ( void );
+extern "C" int parser6_wrap (void );
 #else
-extern int yywrap ( void );
+extern int parser6_wrap (void );
 #endif
 #endif
 
 /* %not-for-header */
+
 #ifndef YY_NO_UNPUT
     
 #endif
@@ -1755,20 +1563,21 @@ extern int yywrap ( void );
 /* %endif */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy ( char *, const char *, int );
+static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen ( const char * );
+static int yy_flex_strlen (yyconst char * );
 #endif
 
 #ifndef YY_NO_INPUT
 /* %if-c-only Standard (non-C++) definition */
 /* %not-for-header */
+
 #ifdef __cplusplus
-static int yyinput ( void );
+static int yyinput (void );
 #else
-static int input ( void );
+static int input (void );
 #endif
 /* %ok-for-header */
 
@@ -1795,7 +1604,7 @@ static int input ( void );
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
+#define ECHO do { if (fwrite( parser6_text, parser6_leng, 1, parser6_out )) {} } while (0)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
@@ -1810,20 +1619,20 @@ static int input ( void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               int n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
-                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                            (c = getc( parser6_in )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
                if ( c == '\n' ) \
                        buf[n++] = (char) c; \
-               if ( c == EOF && ferror( yyin ) ) \
+               if ( c == EOF && ferror( parser6_in ) ) \
                        YY_FATAL_ERROR( "input in flex scanner failed" ); \
                result = n; \
                } \
        else \
                { \
                errno=0; \
-               while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
+               while ( (result = fread(buf, 1, max_size, parser6_in))==0 && ferror(parser6_in)) \
                        { \
                        if( errno != EINTR) \
                                { \
@@ -1831,7 +1640,7 @@ static int input ( void );
                                break; \
                                } \
                        errno=0; \
-                       clearerr(yyin); \
+                       clearerr(parser6_in); \
                        } \
                }\
 \
@@ -1864,9 +1673,11 @@ static int input ( void );
 
 /* %if-tables-serialization structures and prototypes */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %not-for-header */
+
 /* %tables-yydmap generated elements */
 /* %endif */
 /* end tables serialization structures and prototypes */
@@ -1880,15 +1691,15 @@ static int input ( void );
 #define YY_DECL_IS_OURS 1
 /* %if-c-only Standard (non-C++) definition */
 
-extern int yylex (void);
+extern int parser6_lex (void);
 
-#define YY_DECL int yylex (void)
+#define YY_DECL int parser6_lex (void)
 /* %endif */
 /* %if-c++-only C++ definition */
 /* %endif */
 #endif /* !YY_DECL */
 
-/* Code executed at the beginning of each rule, after yytext and yyleng
+/* Code executed at the beginning of each rule, after parser6_text and parser6_leng
  * have been set up.
  */
 #ifndef YY_USER_ACTION
@@ -1905,6 +1716,7 @@ extern int yylex (void);
        YY_USER_ACTION
 
 /* %not-for-header */
+
 /** The main scanner function which does all the work.
  */
 YY_DECL
@@ -1924,27 +1736,27 @@ YY_DECL
                if ( ! (yy_start) )
                        (yy_start) = 1; /* first start state */
 
-               if ( ! yyin )
+               if ( ! parser6_in )
 /* %if-c-only */
-                       yyin = stdin;
+                       parser6_in = stdin;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
-               if ( ! yyout )
+               if ( ! parser6_out )
 /* %if-c-only */
-                       yyout = stdout;
+                       parser6_out = stdout;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 
                if ( ! YY_CURRENT_BUFFER ) {
-                       yyensure_buffer_stack ();
+                       parser6_ensure_buffer_stack ();
                        YY_CURRENT_BUFFER_LVALUE =
-                               yy_create_buffer( yyin, YY_BUF_SIZE );
+                               parser6__create_buffer(parser6_in,YY_BUF_SIZE );
                }
 
-               yy_load_buffer_state(  );
+               parser6__load_buffer_state( );
                }
 
        {
@@ -1953,12 +1765,11 @@ YY_DECL
 
 
 
-#line 104 "dhcp6_lexer.ll"
     /* This part of the code is copied over to the verbatim to the top
-       of the generated yylex function. Explanation:
+       of the generated parser6_lex function. Explanation:
        http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html */
 
-    /* Code run each time yylex is called. */
+    /* Code run each time parser6_lex is called. */
     driver.loc_.step();
 
     if (start_token_flag) {
@@ -1997,14 +1808,14 @@ YY_DECL
     }
 
 
-#line 2000 "dhcp6_lexer.cc"
+#line 1812 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
 /* %% [8.0] yymore()-related code goes here */
                yy_cp = (yy_c_buf_p);
 
-               /* Support of yytext. */
+               /* Support of parser6_text. */
                *yy_cp = (yy_hold_char);
 
                /* yy_bp points to the position in yy_ch_buf of the start of
@@ -2026,13 +1837,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 1272 )
-                                       yy_c = yy_meta[yy_c];
+                               if ( yy_current_state >= 1301 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
                                }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1271 );
+               while ( yy_current_state != 1300 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2042,22 +1853,22 @@ yy_find_action:
 
                YY_DO_BEFORE_ACTION;
 
-/* %% [11.0] code for yylineno update goes here */
+/* %% [11.0] code for parser6_lineno update goes here */
 
 do_action:     /* This label is used only to access EOF actions. */
 
 /* %% [12.0] debug code goes here */
-               if ( yy_flex_debug )
+               if ( parser6__flex_debug )
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 162 )
+                       else if ( yy_act < 164 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
-                                        (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 162 )
+                                        (long)yy_rule_linenum[yy_act], parser6_text );
+                       else if ( yy_act == 164 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
-                                        yytext );
-                       else if ( yy_act == 163 )
+                                        parser6_text );
+                       else if ( yy_act == 165 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2075,17 +1886,17 @@ do_action:      /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 147 "dhcp6_lexer.ll"
+#line 146 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 149 "dhcp6_lexer.ll"
+#line 148 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 151 "dhcp6_lexer.ll"
+#line 150 "dhcp6_lexer.ll"
 {
   BEGIN(COMMENT);
   comment_start_line = driver.loc_.end.line;;
@@ -2093,38 +1904,38 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 156 "dhcp6_lexer.ll"
+#line 155 "dhcp6_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 157 "dhcp6_lexer.ll"
+#line 156 "dhcp6_lexer.ll"
 ;
        YY_BREAK
 case YY_STATE_EOF(COMMENT):
-#line 158 "dhcp6_lexer.ll"
+#line 157 "dhcp6_lexer.ll"
 {
     isc_throw(Dhcp6ParseError, "Comment not closed. (/* in line " << comment_start_line);
 }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 162 "dhcp6_lexer.ll"
+#line 161 "dhcp6_lexer.ll"
 BEGIN(DIR_ENTER);
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 163 "dhcp6_lexer.ll"
+#line 162 "dhcp6_lexer.ll"
 BEGIN(DIR_INCLUDE);
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 164 "dhcp6_lexer.ll"
+#line 163 "dhcp6_lexer.ll"
 {
     /* Include directive. */
 
     /* Extract the filename. */
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
 
     driver.includeFile(tmp);
@@ -2133,19 +1944,19 @@ YY_RULE_SETUP
 case YY_STATE_EOF(DIR_ENTER):
 case YY_STATE_EOF(DIR_INCLUDE):
 case YY_STATE_EOF(DIR_EXIT):
-#line 173 "dhcp6_lexer.ll"
+#line 172 "dhcp6_lexer.ll"
 {
     isc_throw(Dhcp6ParseError, "Directive not closed.");
 }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 176 "dhcp6_lexer.ll"
+#line 175 "dhcp6_lexer.ll"
 BEGIN(INITIAL);
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 179 "dhcp6_lexer.ll"
+#line 178 "dhcp6_lexer.ll"
 {
     /* Ok, we found a with space. Let's ignore it and update loc variable. */
     driver.loc_.step();
@@ -2154,16 +1965,16 @@ YY_RULE_SETUP
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
-#line 184 "dhcp6_lexer.ll"
+#line 183 "dhcp6_lexer.ll"
 {
     /* Newline found. Let's update the location and continue. */
-    driver.loc_.lines(yyleng);
+    driver.loc_.lines(parser6_leng);
     driver.loc_.step();
 }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 191 "dhcp6_lexer.ll"
+#line 190 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2175,7 +1986,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 200 "dhcp6_lexer.ll"
+#line 199 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2187,7 +1998,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 209 "dhcp6_lexer.ll"
+#line 208 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2199,7 +2010,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 218 "dhcp6_lexer.ll"
+#line 217 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2211,7 +2022,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 227 "dhcp6_lexer.ll"
+#line 226 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2223,7 +2034,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 236 "dhcp6_lexer.ll"
+#line 235 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2235,7 +2046,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 245 "dhcp6_lexer.ll"
+#line 244 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2247,7 +2058,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 254 "dhcp6_lexer.ll"
+#line 253 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2259,7 +2070,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 263 "dhcp6_lexer.ll"
+#line 262 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2271,7 +2082,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 272 "dhcp6_lexer.ll"
+#line 271 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2283,7 +2094,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 281 "dhcp6_lexer.ll"
+#line 280 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2295,7 +2106,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 290 "dhcp6_lexer.ll"
+#line 289 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2307,7 +2118,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 299 "dhcp6_lexer.ll"
+#line 298 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2319,7 +2130,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 308 "dhcp6_lexer.ll"
+#line 307 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP_DDNS:
@@ -2331,124 +2142,124 @@ YY_RULE_SETUP
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 317 "dhcp6_lexer.ll"
+#line 316 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
         return isc::dhcp::Dhcp6Parser::make_UDP(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 327 "dhcp6_lexer.ll"
+#line 326 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_PROTOCOL) {
         return isc::dhcp::Dhcp6Parser::make_TCP(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 337 "dhcp6_lexer.ll"
+#line 336 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::NCR_FORMAT) {
         return isc::dhcp::Dhcp6Parser::make_JSON(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 347 "dhcp6_lexer.ll"
+#line 346 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp6Parser::make_WHEN_PRESENT(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 357 "dhcp6_lexer.ll"
+#line 356 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp6Parser::make_WHEN_PRESENT(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 367 "dhcp6_lexer.ll"
+#line 366 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp6Parser::make_NEVER(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 377 "dhcp6_lexer.ll"
+#line 376 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp6Parser::make_NEVER(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 387 "dhcp6_lexer.ll"
+#line 386 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp6Parser::make_ALWAYS(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 397 "dhcp6_lexer.ll"
+#line 396 "dhcp6_lexer.ll"
 {
     /* dhcp-ddns value keywords are case insensitive */
     if (driver.ctx_ == isc::dhcp::Parser6Context::REPLACE_CLIENT_NAME) {
         return isc::dhcp::Dhcp6Parser::make_WHEN_NOT_PRESENT(driver.loc_);
     }
-    std::string tmp(yytext+1);
+    std::string tmp(parser6_text+1);
     tmp.resize(tmp.size() - 1);
     return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_);
 }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 407 "dhcp6_lexer.ll"
+#line 406 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2460,7 +2271,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 416 "dhcp6_lexer.ll"
+#line 415 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2472,7 +2283,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 425 "dhcp6_lexer.ll"
+#line 424 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2484,7 +2295,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 434 "dhcp6_lexer.ll"
+#line 433 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::INTERFACES_CONFIG:
@@ -2496,7 +2307,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 443 "dhcp6_lexer.ll"
+#line 442 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2508,7 +2319,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 452 "dhcp6_lexer.ll"
+#line 451 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2520,7 +2331,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 461 "dhcp6_lexer.ll"
+#line 460 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOSTS_DATABASE:
@@ -2532,7 +2343,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 470 "dhcp6_lexer.ll"
+#line 469 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2547,7 +2358,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 482 "dhcp6_lexer.ll"
+#line 481 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2559,7 +2370,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 491 "dhcp6_lexer.ll"
+#line 490 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2571,7 +2382,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 500 "dhcp6_lexer.ll"
+#line 499 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2583,7 +2394,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 509 "dhcp6_lexer.ll"
+#line 508 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DATABASE_TYPE:
@@ -2595,7 +2406,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 518 "dhcp6_lexer.ll"
+#line 517 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2608,7 +2419,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 528 "dhcp6_lexer.ll"
+#line 527 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2621,7 +2432,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 538 "dhcp6_lexer.ll"
+#line 537 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2634,7 +2445,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 548 "dhcp6_lexer.ll"
+#line 547 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2647,7 +2458,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 558 "dhcp6_lexer.ll"
+#line 557 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2661,7 +2472,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 569 "dhcp6_lexer.ll"
+#line 568 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2674,7 +2485,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 579 "dhcp6_lexer.ll"
+#line 578 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2687,7 +2498,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 589 "dhcp6_lexer.ll"
+#line 588 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2700,7 +2511,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 599 "dhcp6_lexer.ll"
+#line 598 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2713,7 +2524,33 @@ YY_RULE_SETUP
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 609 "dhcp6_lexer.ll"
+#line 608 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_MAX_RECONNECT_TRIES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("max-reconnect-tries", driver.loc_);
+    }
+}
+       YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 618 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("reconnect-wait-time", driver.loc_);
+    }
+}
+       YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 628 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2725,9 +2562,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 59:
 YY_RULE_SETUP
-#line 620 "dhcp6_lexer.ll"
+#line 639 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2739,9 +2576,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 60:
 YY_RULE_SETUP
-#line 631 "dhcp6_lexer.ll"
+#line 650 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2753,9 +2590,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 61:
 YY_RULE_SETUP
-#line 642 "dhcp6_lexer.ll"
+#line 661 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2767,9 +2604,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 62:
 YY_RULE_SETUP
-#line 653 "dhcp6_lexer.ll"
+#line 672 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2779,9 +2616,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 63:
 YY_RULE_SETUP
-#line 662 "dhcp6_lexer.ll"
+#line 681 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2792,9 +2629,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 64:
 YY_RULE_SETUP
-#line 672 "dhcp6_lexer.ll"
+#line 691 "dhcp6_lexer.ll"
 {
     switch (driver.ctx_) {
     case Parser6Context::DHCP6:
@@ -2804,9 +2641,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 65:
 YY_RULE_SETUP
-#line 681 "dhcp6_lexer.ll"
+#line 700 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2816,9 +2653,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 66:
 YY_RULE_SETUP
-#line 690 "dhcp6_lexer.ll"
+#line 709 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2835,9 +2672,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 67:
 YY_RULE_SETUP
-#line 706 "dhcp6_lexer.ll"
+#line 725 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2854,9 +2691,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 68:
 YY_RULE_SETUP
-#line 722 "dhcp6_lexer.ll"
+#line 741 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2866,9 +2703,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 69:
 YY_RULE_SETUP
-#line 731 "dhcp6_lexer.ll"
+#line 750 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2878,9 +2715,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 70:
 YY_RULE_SETUP
-#line 740 "dhcp6_lexer.ll"
+#line 759 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2890,9 +2727,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 71:
 YY_RULE_SETUP
-#line 749 "dhcp6_lexer.ll"
+#line 768 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2902,9 +2739,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 72:
 YY_RULE_SETUP
-#line 758 "dhcp6_lexer.ll"
+#line 777 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2914,9 +2751,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 73:
 YY_RULE_SETUP
-#line 767 "dhcp6_lexer.ll"
+#line 786 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2926,9 +2763,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 74:
 YY_RULE_SETUP
-#line 776 "dhcp6_lexer.ll"
+#line 795 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2938,9 +2775,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 75:
 YY_RULE_SETUP
-#line 785 "dhcp6_lexer.ll"
+#line 804 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2950,9 +2787,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 76:
 YY_RULE_SETUP
-#line 794 "dhcp6_lexer.ll"
+#line 813 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2962,9 +2799,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 77:
 YY_RULE_SETUP
-#line 803 "dhcp6_lexer.ll"
+#line 822 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -2974,9 +2811,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 78:
 YY_RULE_SETUP
-#line 812 "dhcp6_lexer.ll"
+#line 831 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2999,9 +2836,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 79:
 YY_RULE_SETUP
-#line 834 "dhcp6_lexer.ll"
+#line 853 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3024,9 +2861,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 80:
 YY_RULE_SETUP
-#line 856 "dhcp6_lexer.ll"
+#line 875 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3036,9 +2873,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 81:
 YY_RULE_SETUP
-#line 865 "dhcp6_lexer.ll"
+#line 884 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3049,9 +2886,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 82:
 YY_RULE_SETUP
-#line 875 "dhcp6_lexer.ll"
+#line 894 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3062,9 +2899,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 83:
 YY_RULE_SETUP
-#line 885 "dhcp6_lexer.ll"
+#line 904 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3074,9 +2911,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 84:
 YY_RULE_SETUP
-#line 894 "dhcp6_lexer.ll"
+#line 913 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3087,9 +2924,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 85:
 YY_RULE_SETUP
-#line 904 "dhcp6_lexer.ll"
+#line 923 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3100,9 +2937,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 86:
 YY_RULE_SETUP
-#line 914 "dhcp6_lexer.ll"
+#line 933 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3112,9 +2949,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 87:
 YY_RULE_SETUP
-#line 923 "dhcp6_lexer.ll"
+#line 942 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3124,9 +2961,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 88:
 YY_RULE_SETUP
-#line 932 "dhcp6_lexer.ll"
+#line 951 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3136,9 +2973,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 89:
 YY_RULE_SETUP
-#line 941 "dhcp6_lexer.ll"
+#line 960 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATION_MODE:
@@ -3148,9 +2985,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 90:
 YY_RULE_SETUP
-#line 950 "dhcp6_lexer.ll"
+#line 969 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3161,9 +2998,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 91:
 YY_RULE_SETUP
-#line 960 "dhcp6_lexer.ll"
+#line 979 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3173,9 +3010,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 92:
 YY_RULE_SETUP
-#line 969 "dhcp6_lexer.ll"
+#line 988 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3185,9 +3022,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 93:
 YY_RULE_SETUP
-#line 978 "dhcp6_lexer.ll"
+#line 997 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3197,9 +3034,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 94:
 YY_RULE_SETUP
-#line 987 "dhcp6_lexer.ll"
+#line 1006 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3209,9 +3046,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 95:
 YY_RULE_SETUP
-#line 996 "dhcp6_lexer.ll"
+#line 1015 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -3221,9 +3058,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 96:
 YY_RULE_SETUP
-#line 1005 "dhcp6_lexer.ll"
+#line 1024 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3233,9 +3070,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 97:
 YY_RULE_SETUP
-#line 1014 "dhcp6_lexer.ll"
+#line 1033 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3245,9 +3082,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 98:
 YY_RULE_SETUP
-#line 1023 "dhcp6_lexer.ll"
+#line 1042 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3257,9 +3094,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 99:
 YY_RULE_SETUP
-#line 1032 "dhcp6_lexer.ll"
+#line 1051 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3269,9 +3106,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 100:
 YY_RULE_SETUP
-#line 1041 "dhcp6_lexer.ll"
+#line 1060 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3281,9 +3118,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 101:
 YY_RULE_SETUP
-#line 1051 "dhcp6_lexer.ll"
+#line 1070 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3293,9 +3130,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 100:
+case 102:
 YY_RULE_SETUP
-#line 1060 "dhcp6_lexer.ll"
+#line 1079 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3305,9 +3142,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 101:
+case 103:
 YY_RULE_SETUP
-#line 1069 "dhcp6_lexer.ll"
+#line 1088 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3318,9 +3155,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 102:
+case 104:
 YY_RULE_SETUP
-#line 1079 "dhcp6_lexer.ll"
+#line 1098 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3332,9 +3169,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 103:
+case 105:
 YY_RULE_SETUP
-#line 1090 "dhcp6_lexer.ll"
+#line 1109 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3345,9 +3182,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 104:
+case 106:
 YY_RULE_SETUP
-#line 1100 "dhcp6_lexer.ll"
+#line 1119 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3357,9 +3194,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 105:
+case 107:
 YY_RULE_SETUP
-#line 1109 "dhcp6_lexer.ll"
+#line 1128 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3369,9 +3206,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 106:
+case 108:
 YY_RULE_SETUP
-#line 1118 "dhcp6_lexer.ll"
+#line 1137 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3381,9 +3218,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 107:
+case 109:
 YY_RULE_SETUP
-#line 1127 "dhcp6_lexer.ll"
+#line 1146 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -3395,9 +3232,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 108:
+case 110:
 YY_RULE_SETUP
-#line 1138 "dhcp6_lexer.ll"
+#line 1157 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3408,9 +3245,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 1148 "dhcp6_lexer.ll"
+#line 1167 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3420,9 +3257,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 1157 "dhcp6_lexer.ll"
+#line 1176 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3433,9 +3270,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 111:
+case 113:
 YY_RULE_SETUP
-#line 1167 "dhcp6_lexer.ll"
+#line 1186 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3446,9 +3283,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 112:
+case 114:
 YY_RULE_SETUP
-#line 1177 "dhcp6_lexer.ll"
+#line 1196 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3458,9 +3295,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 113:
+case 115:
 YY_RULE_SETUP
-#line 1186 "dhcp6_lexer.ll"
+#line 1205 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3470,9 +3307,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 114:
+case 116:
 YY_RULE_SETUP
-#line 1195 "dhcp6_lexer.ll"
+#line 1214 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3482,9 +3319,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 115:
+case 117:
 YY_RULE_SETUP
-#line 1204 "dhcp6_lexer.ll"
+#line 1223 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3494,9 +3331,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 116:
+case 118:
 YY_RULE_SETUP
-#line 1213 "dhcp6_lexer.ll"
+#line 1232 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3507,9 +3344,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 117:
+case 119:
 YY_RULE_SETUP
-#line 1223 "dhcp6_lexer.ll"
+#line 1242 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -3519,9 +3356,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 118:
+case 120:
 YY_RULE_SETUP
-#line 1232 "dhcp6_lexer.ll"
+#line 1251 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3531,9 +3368,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 119:
+case 121:
 YY_RULE_SETUP
-#line 1242 "dhcp6_lexer.ll"
+#line 1261 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3543,9 +3380,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 120:
+case 122:
 YY_RULE_SETUP
-#line 1251 "dhcp6_lexer.ll"
+#line 1270 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3555,9 +3392,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 121:
+case 123:
 YY_RULE_SETUP
-#line 1260 "dhcp6_lexer.ll"
+#line 1279 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3567,9 +3404,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 122:
+case 124:
 YY_RULE_SETUP
-#line 1269 "dhcp6_lexer.ll"
+#line 1288 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3579,9 +3416,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 123:
+case 125:
 YY_RULE_SETUP
-#line 1278 "dhcp6_lexer.ll"
+#line 1297 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3591,9 +3428,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 124:
+case 126:
 YY_RULE_SETUP
-#line 1287 "dhcp6_lexer.ll"
+#line 1306 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3603,9 +3440,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 125:
+case 127:
 YY_RULE_SETUP
-#line 1296 "dhcp6_lexer.ll"
+#line 1315 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3615,9 +3452,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 126:
+case 128:
 YY_RULE_SETUP
-#line 1305 "dhcp6_lexer.ll"
+#line 1324 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3627,9 +3464,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 127:
+case 129:
 YY_RULE_SETUP
-#line 1314 "dhcp6_lexer.ll"
+#line 1333 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3639,9 +3476,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 128:
+case 130:
 YY_RULE_SETUP
-#line 1323 "dhcp6_lexer.ll"
+#line 1342 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3651,9 +3488,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 129:
+case 131:
 YY_RULE_SETUP
-#line 1332 "dhcp6_lexer.ll"
+#line 1351 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3663,9 +3500,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 130:
+case 132:
 YY_RULE_SETUP
-#line 1341 "dhcp6_lexer.ll"
+#line 1360 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3675,9 +3512,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 131:
+case 133:
 YY_RULE_SETUP
-#line 1350 "dhcp6_lexer.ll"
+#line 1369 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3687,9 +3524,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 132:
+case 134:
 YY_RULE_SETUP
-#line 1359 "dhcp6_lexer.ll"
+#line 1378 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3699,9 +3536,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 133:
+case 135:
 YY_RULE_SETUP
-#line 1368 "dhcp6_lexer.ll"
+#line 1387 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3711,9 +3548,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 134:
+case 136:
 YY_RULE_SETUP
-#line 1377 "dhcp6_lexer.ll"
+#line 1396 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3723,9 +3560,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 135:
+case 137:
 YY_RULE_SETUP
-#line 1386 "dhcp6_lexer.ll"
+#line 1405 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -3735,9 +3572,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 136:
+case 138:
 YY_RULE_SETUP
-#line 1395 "dhcp6_lexer.ll"
+#line 1414 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3747,9 +3584,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 137:
+case 139:
 YY_RULE_SETUP
-#line 1404 "dhcp6_lexer.ll"
+#line 1423 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3759,9 +3596,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 138:
+case 140:
 YY_RULE_SETUP
-#line 1413 "dhcp6_lexer.ll"
+#line 1432 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3771,9 +3608,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 139:
+case 141:
 YY_RULE_SETUP
-#line 1422 "dhcp6_lexer.ll"
+#line 1441 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3783,9 +3620,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 140:
+case 142:
 YY_RULE_SETUP
-#line 1431 "dhcp6_lexer.ll"
+#line 1450 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3795,9 +3632,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 141:
+case 143:
 YY_RULE_SETUP
-#line 1440 "dhcp6_lexer.ll"
+#line 1459 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3807,9 +3644,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 142:
+case 144:
 YY_RULE_SETUP
-#line 1449 "dhcp6_lexer.ll"
+#line 1468 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3819,9 +3656,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 143:
+case 145:
 YY_RULE_SETUP
-#line 1458 "dhcp6_lexer.ll"
+#line 1477 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3831,14 +3668,14 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 144:
+case 146:
 YY_RULE_SETUP
-#line 1468 "dhcp6_lexer.ll"
+#line 1487 "dhcp6_lexer.ll"
 {
     /* A string has been matched. It contains the actual string and single quotes.
        We need to get those quotes out of the way and just use its content, e.g.
        for 'foo' we should get foo */
-    std::string raw(yytext+1);
+    std::string raw(parser6_text+1);
     size_t len = raw.size() - 1;
     raw.resize(len);
     std::string decoded;
@@ -3933,68 +3770,68 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 145:
-/* rule 145 can match eol */
+case 147:
+/* rule 147 can match eol */
 YY_RULE_SETUP
-#line 1567 "dhcp6_lexer.ll"
+#line 1586 "dhcp6_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
-    driver.error(driver.loc_, "Invalid control in " + std::string(yytext));
+    driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text));
 }
        YY_BREAK
-case 146:
-/* rule 146 can match eol */
+case 148:
+/* rule 148 can match eol */
 YY_RULE_SETUP
-#line 1572 "dhcp6_lexer.ll"
+#line 1591 "dhcp6_lexer.ll"
 {
     /* Bad string with a bad escape inside */
-    driver.error(driver.loc_, "Bad escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 147:
+case 149:
 YY_RULE_SETUP
-#line 1577 "dhcp6_lexer.ll"
+#line 1596 "dhcp6_lexer.ll"
 {
     /* Bad string with an open escape at the end */
-    driver.error(driver.loc_, "Overflow escape in " + std::string(yytext));
+    driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 148:
+case 150:
 YY_RULE_SETUP
-#line 1582 "dhcp6_lexer.ll"
+#line 1601 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 149:
+case 151:
 YY_RULE_SETUP
-#line 1583 "dhcp6_lexer.ll"
+#line 1602 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 150:
+case 152:
 YY_RULE_SETUP
-#line 1584 "dhcp6_lexer.ll"
+#line 1603 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 151:
+case 153:
 YY_RULE_SETUP
-#line 1585 "dhcp6_lexer.ll"
+#line 1604 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 152:
+case 154:
 YY_RULE_SETUP
-#line 1586 "dhcp6_lexer.ll"
+#line 1605 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 153:
+case 155:
 YY_RULE_SETUP
-#line 1587 "dhcp6_lexer.ll"
+#line 1606 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 154:
+case 156:
 YY_RULE_SETUP
-#line 1589 "dhcp6_lexer.ll"
+#line 1608 "dhcp6_lexer.ll"
 {
     /* An integer was found. */
-    std::string tmp(yytext);
+    std::string tmp(parser6_text);
     int64_t integer = 0;
     try {
         /* In substring we want to use negative values (e.g. -1).
@@ -4010,12 +3847,12 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 155:
+case 157:
 YY_RULE_SETUP
-#line 1607 "dhcp6_lexer.ll"
+#line 1626 "dhcp6_lexer.ll"
 {
     /* A floating point was found. */
-    std::string tmp(yytext);
+    std::string tmp(parser6_text);
     double fp = 0.0;
     try {
         fp = boost::lexical_cast<double>(tmp);
@@ -4026,43 +3863,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 156:
+case 158:
 YY_RULE_SETUP
-#line 1620 "dhcp6_lexer.ll"
+#line 1639 "dhcp6_lexer.ll"
 {
-    string tmp(yytext);
+    string tmp(parser6_text);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 157:
+case 159:
 YY_RULE_SETUP
-#line 1625 "dhcp6_lexer.ll"
+#line 1644 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 158:
+case 160:
 YY_RULE_SETUP
-#line 1629 "dhcp6_lexer.ll"
+#line 1648 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 159:
+case 161:
 YY_RULE_SETUP
-#line 1631 "dhcp6_lexer.ll"
+#line 1650 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 160:
+case 162:
 YY_RULE_SETUP
-#line 1633 "dhcp6_lexer.ll"
+#line 1652 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 161:
+case 163:
 YY_RULE_SETUP
-#line 1635 "dhcp6_lexer.ll"
-driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
+#line 1654 "dhcp6_lexer.ll"
+driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1637 "dhcp6_lexer.ll"
+#line 1656 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -4086,12 +3923,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 162:
+case 164:
 YY_RULE_SETUP
-#line 1660 "dhcp6_lexer.ll"
+#line 1679 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4094 "dhcp6_lexer.cc"
+#line 3932 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4106,8 +3943,8 @@ ECHO;
                        {
                        /* We're scanning a new file or input source.  It's
                         * possible that this happened because the user
-                        * just pointed yyin at a new source and called
-                        * yylex().  If so, then we have to assure
+                        * just pointed parser6_in at a new source and called
+                        * parser6_lex().  If so, then we have to assure
                         * consistency between YY_CURRENT_BUFFER and our
                         * globals.  Here is the right place to do so, because
                         * this is the first action (other than possibly a
@@ -4115,7 +3952,7 @@ ECHO;
                         */
                        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
 /* %if-c-only */
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = parser6_in;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4173,11 +4010,11 @@ ECHO;
                                {
                                (yy_did_buffer_switch_on_eof) = 0;
 
-                               if ( yywrap(  ) )
+                               if ( parser6_wrap( ) )
                                        {
                                        /* Note: because we've taken care in
                                         * yy_get_next_buffer() to have set up
-                                        * yytext, we can now set up
+                                        * parser6_text, we can now set up
                                         * yy_c_buf_p so that if some total
                                         * hoser (like flex itself) wants to
                                         * call the scanner after we return the
@@ -4227,11 +4064,12 @@ ECHO;
        } /* end of action switch */
                } /* end of scanning one token */
        } /* end of user's declarations */
-} /* end of yylex */
+} /* end of parser6_lex */
 /* %ok-for-header */
 
 /* %if-c++-only */
 /* %not-for-header */
+
 /* %ok-for-header */
 
 /* %endif */
@@ -4251,7 +4089,7 @@ static int yy_get_next_buffer (void)
 {
        char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
        char *source = (yytext_ptr);
-       int number_to_move, i;
+       yy_size_t number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
@@ -4280,7 +4118,7 @@ static int yy_get_next_buffer (void)
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
+       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -4293,7 +4131,7 @@ static int yy_get_next_buffer (void)
 
        else
                {
-                       int num_to_read =
+                       yy_size_t num_to_read =
                        YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
 
                while ( num_to_read <= 0 )
@@ -4307,7 +4145,7 @@ static int yy_get_next_buffer (void)
 
                        if ( b->yy_is_our_buffer )
                                {
-                               int new_size = b->yy_buf_size * 2;
+                               yy_size_t new_size = b->yy_buf_size * 2;
 
                                if ( new_size <= 0 )
                                        b->yy_buf_size += b->yy_buf_size / 8;
@@ -4316,12 +4154,11 @@ static int yy_get_next_buffer (void)
 
                                b->yy_ch_buf = (char *)
                                        /* Include room in for 2 EOB chars. */
-                                       yyrealloc( (void *) b->yy_ch_buf,
-                                                        (yy_size_t) (b->yy_buf_size + 2)  );
+                                       parser6_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
                                }
                        else
                                /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = NULL;
+                               b->yy_ch_buf = 0;
 
                        if ( ! b->yy_ch_buf )
                                YY_FATAL_ERROR(
@@ -4349,7 +4186,7 @@ static int yy_get_next_buffer (void)
                if ( number_to_move == YY_MORE_ADJ )
                        {
                        ret_val = EOB_ACT_END_OF_FILE;
-                       yyrestart( yyin  );
+                       parser6_restart(parser6_in  );
                        }
 
                else
@@ -4363,15 +4200,12 @@ static int yy_get_next_buffer (void)
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                /* Extend the array by 50%, plus the number we really need. */
                int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
-                       (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) parser6_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
                        YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-               /* "- 2" to take care of EOB's */
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
        }
 
        (yy_n_chars) += number_to_move;
@@ -4387,6 +4221,7 @@ static int yy_get_next_buffer (void)
 
 /* %if-c-only */
 /* %not-for-header */
+
     static yy_state_type yy_get_previous_state (void)
 /* %endif */
 /* %if-c++-only */
@@ -4410,10 +4245,10 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 1272 )
-                               yy_c = yy_meta[yy_c];
+                       if ( yy_current_state >= 1301 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
                        }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                }
 
        return yy_current_state;
@@ -4443,11 +4278,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 1272 )
-                       yy_c = yy_meta[yy_c];
+               if ( yy_current_state >= 1301 )
+                       yy_c = yy_meta[(unsigned int) yy_c];
                }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1271);
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 1300);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4486,7 +4321,7 @@ static int yy_get_next_buffer (void)
 
                else
                        { /* need more input */
-                       int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
                        ++(yy_c_buf_p);
 
                        switch ( yy_get_next_buffer(  ) )
@@ -4503,14 +4338,14 @@ static int yy_get_next_buffer (void)
                                         */
 
                                        /* Reset buffer status. */
-                                       yyrestart( yyin );
+                                       parser6_restart(parser6_in );
 
                                        /*FALLTHROUGH*/
 
                                case EOB_ACT_END_OF_FILE:
                                        {
-                                       if ( yywrap(  ) )
-                                               return 0;
+                                       if ( parser6_wrap( ) )
+                                               return EOF;
 
                                        if ( ! (yy_did_buffer_switch_on_eof) )
                                                YY_NEW_FILE;
@@ -4529,10 +4364,10 @@ static int yy_get_next_buffer (void)
                }
 
        c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-       *(yy_c_buf_p) = '\0';   /* preserve yytext */
+       *(yy_c_buf_p) = '\0';   /* preserve parser6_text */
        (yy_hold_char) = *++(yy_c_buf_p);
 
-/* %% [19.0] update BOL and yylineno */
+/* %% [19.0] update BOL and parser6_lineno */
 
        return c;
 }
@@ -4546,20 +4381,20 @@ static int yy_get_next_buffer (void)
  * @note This function does not reset the start condition to @c INITIAL .
  */
 /* %if-c-only */
-    void yyrestart  (FILE * input_file )
+    void parser6_restart  (FILE * input_file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
     
        if ( ! YY_CURRENT_BUFFER ){
-        yyensure_buffer_stack ();
+        parser6_ensure_buffer_stack ();
                YY_CURRENT_BUFFER_LVALUE =
-            yy_create_buffer( yyin, YY_BUF_SIZE );
+            parser6__create_buffer(parser6_in,YY_BUF_SIZE );
        }
 
-       yy_init_buffer( YY_CURRENT_BUFFER, input_file );
-       yy_load_buffer_state(  );
+       parser6__init_buffer(YY_CURRENT_BUFFER,input_file );
+       parser6__load_buffer_state( );
 }
 
 /* %if-c++-only */
@@ -4570,7 +4405,7 @@ static int yy_get_next_buffer (void)
  * 
  */
 /* %if-c-only */
-    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+    void parser6__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4578,10 +4413,10 @@ static int yy_get_next_buffer (void)
     
        /* TODO. We should be able to replace this entire function body
         * with
-        *              yypop_buffer_state();
-        *              yypush_buffer_state(new_buffer);
+        *              parser6_pop_buffer_state();
+        *              parser6_push_buffer_state(new_buffer);
      */
-       yyensure_buffer_stack ();
+       parser6_ensure_buffer_stack ();
        if ( YY_CURRENT_BUFFER == new_buffer )
                return;
 
@@ -4594,18 +4429,18 @@ static int yy_get_next_buffer (void)
                }
 
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       yy_load_buffer_state(  );
+       parser6__load_buffer_state( );
 
        /* We don't actually know whether we did this switch during
-        * EOF (yywrap()) processing, but the only time this flag
-        * is looked at is after yywrap() is called, so it's safe
+        * EOF (parser6_wrap()) processing, but the only time this flag
+        * is looked at is after parser6_wrap() is called, so it's safe
         * to go ahead and always set it.
         */
        (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /* %if-c-only */
-static void yy_load_buffer_state  (void)
+static void parser6__load_buffer_state  (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4613,7 +4448,7 @@ static void yy_load_buffer_state  (void)
        (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
 /* %if-c-only */
-       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       parser6_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4627,29 +4462,29 @@ static void yy_load_buffer_state  (void)
  * @return the allocated buffer state.
  */
 /* %if-c-only */
-    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+    YY_BUFFER_STATE parser6__create_buffer  (FILE * file, int  size )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
 {
        YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" );
 
-       b->yy_buf_size = size;
+       b->yy_buf_size = (yy_size_t)size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
         */
-       b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
+       b->yy_ch_buf = (char *) parser6_alloc(b->yy_buf_size + 2  );
        if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__create_buffer()" );
 
        b->yy_is_our_buffer = 1;
 
-       yy_init_buffer( b, file );
+       parser6__init_buffer(b,file );
 
        return b;
 }
@@ -4658,11 +4493,11 @@ static void yy_load_buffer_state  (void)
 /* %endif */
 
 /** Destroy the buffer.
- * @param b a buffer created with yy_create_buffer()
+ * @param b a buffer created with parser6__create_buffer()
  * 
  */
 /* %if-c-only */
-    void yy_delete_buffer (YY_BUFFER_STATE  b )
+    void parser6__delete_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4675,17 +4510,17 @@ static void yy_load_buffer_state  (void)
                YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
        if ( b->yy_is_our_buffer )
-               yyfree( (void *) b->yy_ch_buf  );
+               parser6_free((void *) b->yy_ch_buf  );
 
-       yyfree( (void *) b  );
+       parser6_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
- * such as during a yyrestart() or at EOF.
+ * such as during a parser6_restart() or at EOF.
  */
 /* %if-c-only */
-    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+    static void parser6__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4693,7 +4528,7 @@ static void yy_load_buffer_state  (void)
 {
        int oerrno = errno;
     
-       yy_flush_buffer( b );
+       parser6__flush_buffer(b );
 
 /* %if-c-only */
        b->yy_input_file = file;
@@ -4702,8 +4537,8 @@ static void yy_load_buffer_state  (void)
 /* %endif */
        b->yy_fill_buffer = 1;
 
-    /* If b is the current buffer, then yy_init_buffer was _probably_
-     * called from yyrestart() or through yy_get_next_buffer.
+    /* If b is the current buffer, then parser6__init_buffer was _probably_
+     * called from parser6_restart() or through yy_get_next_buffer.
      * In that case, we don't want to reset the lineno or column.
      */
     if (b != YY_CURRENT_BUFFER){
@@ -4726,7 +4561,7 @@ static void yy_load_buffer_state  (void)
  * 
  */
 /* %if-c-only */
-    void yy_flush_buffer (YY_BUFFER_STATE  b )
+    void parser6__flush_buffer (YY_BUFFER_STATE  b )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4749,7 +4584,7 @@ static void yy_load_buffer_state  (void)
        b->yy_buffer_status = YY_BUFFER_NEW;
 
        if ( b == YY_CURRENT_BUFFER )
-               yy_load_buffer_state(  );
+               parser6__load_buffer_state( );
 }
 
 /* %if-c-or-c++ */
@@ -4760,7 +4595,7 @@ static void yy_load_buffer_state  (void)
  *  
  */
 /* %if-c-only */
-void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+void parser6_push_buffer_state (YY_BUFFER_STATE new_buffer )
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4768,9 +4603,9 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
        if (new_buffer == NULL)
                return;
 
-       yyensure_buffer_stack();
+       parser6_ensure_buffer_stack();
 
-       /* This block is copied from yy_switch_to_buffer. */
+       /* This block is copied from parser6__switch_to_buffer. */
        if ( YY_CURRENT_BUFFER )
                {
                /* Flush out information for old buffer. */
@@ -4784,8 +4619,8 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
                (yy_buffer_stack_top)++;
        YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from yy_switch_to_buffer. */
-       yy_load_buffer_state(  );
+       /* copied from parser6__switch_to_buffer. */
+       parser6__load_buffer_state( );
        (yy_did_buffer_switch_on_eof) = 1;
 }
 /* %endif */
@@ -4796,7 +4631,7 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
  *  
  */
 /* %if-c-only */
-void yypop_buffer_state (void)
+void parser6_pop_buffer_state (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4804,13 +4639,13 @@ void yypop_buffer_state (void)
        if (!YY_CURRENT_BUFFER)
                return;
 
-       yy_delete_buffer(YY_CURRENT_BUFFER );
+       parser6__delete_buffer(YY_CURRENT_BUFFER );
        YY_CURRENT_BUFFER_LVALUE = NULL;
        if ((yy_buffer_stack_top) > 0)
                --(yy_buffer_stack_top);
 
        if (YY_CURRENT_BUFFER) {
-               yy_load_buffer_state(  );
+               parser6__load_buffer_state( );
                (yy_did_buffer_switch_on_eof) = 1;
        }
 }
@@ -4821,7 +4656,7 @@ void yypop_buffer_state (void)
  *  Guarantees space for at least one push.
  */
 /* %if-c-only */
-static void yyensure_buffer_stack (void)
+static void parser6_ensure_buffer_stack (void)
 /* %endif */
 /* %if-c++-only */
 /* %endif */
@@ -4834,15 +4669,15 @@ static void yyensure_buffer_stack (void)
                 * scanner will even need a stack. We use 2 instead of 1 to avoid an
                 * immediate realloc on the next call.
          */
-      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+               num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+               (yy_buffer_stack) = (struct yy_buffer_state**)parser6_alloc
                                                                (num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                       YY_FATAL_ERROR( "out of dynamic memory in parser6_ensure_buffer_stack()" );
+                                                                 
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+                               
                (yy_buffer_stack_max) = num_to_alloc;
                (yy_buffer_stack_top) = 0;
                return;
@@ -4854,12 +4689,12 @@ static void yyensure_buffer_stack (void)
                yy_size_t grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+               (yy_buffer_stack) = (struct yy_buffer_state**)parser6_realloc
                                                                ((yy_buffer_stack),
                                                                num_to_alloc * sizeof(struct yy_buffer_state*)
                                                                );
                if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                       YY_FATAL_ERROR( "out of dynamic memory in parser6_ensure_buffer_stack()" );
 
                /* zero only the new slots.*/
                memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -4873,9 +4708,9 @@ static void yyensure_buffer_stack (void)
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
  * 
- * @return the newly allocated buffer state object.
+ * @return the newly allocated buffer state object. 
  */
-YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+YY_BUFFER_STATE parser6__scan_buffer  (char * base, yy_size_t  size )
 {
        YY_BUFFER_STATE b;
     
@@ -4883,73 +4718,73 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
                /* They forgot to leave room for the EOB's. */
-               return NULL;
+               return 0;
 
-       b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
+       b = (YY_BUFFER_STATE) parser6_alloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__scan_buffer()" );
 
-       b->yy_buf_size = (int) (size - 2);      /* "- 2" to take care of EOB's */
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
        b->yy_buf_pos = b->yy_ch_buf = base;
        b->yy_is_our_buffer = 0;
-       b->yy_input_file = NULL;
+       b->yy_input_file = 0;
        b->yy_n_chars = b->yy_buf_size;
        b->yy_is_interactive = 0;
        b->yy_at_bol = 1;
        b->yy_fill_buffer = 0;
        b->yy_buffer_status = YY_BUFFER_NEW;
 
-       yy_switch_to_buffer( b  );
+       parser6__switch_to_buffer(b  );
 
        return b;
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan a string. The next call to yylex() will
+/** Setup the input buffer state to scan a string. The next call to parser6_lex() will
  * scan from a @e copy of @a str.
  * @param yystr a NUL-terminated string to scan
  * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
- *       yy_scan_bytes() instead.
+ *       parser6__scan_bytes() instead.
  */
-YY_BUFFER_STATE yy_scan_string (const char * yystr )
+YY_BUFFER_STATE parser6__scan_string (yyconst char * yystr )
 {
     
-       return yy_scan_bytes( yystr, (int) strlen(yystr) );
+       return parser6__scan_bytes(yystr,strlen(yystr) );
 }
 /* %endif */
 
 /* %if-c-only */
-/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to parser6_lex() will
  * scan from a @e copy of @a bytes.
  * @param yybytes the byte buffer to scan
  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
-YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
+YY_BUFFER_STATE parser6__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
        YY_BUFFER_STATE b;
        char *buf;
        yy_size_t n;
-       int i;
+       yy_size_t i;
     
        /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) (_yybytes_len + 2);
-       buf = (char *) yyalloc( n  );
+       n = _yybytes_len + 2;
+       buf = (char *) parser6_alloc(n  );
        if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "out of dynamic memory in parser6__scan_bytes()" );
 
        for ( i = 0; i < _yybytes_len; ++i )
                buf[i] = yybytes[i];
 
        buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = yy_scan_buffer( buf, n );
+       b = parser6__scan_buffer(buf,n );
        if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+               YY_FATAL_ERROR( "bad buffer in parser6__scan_bytes()" );
 
        /* It's okay to grow etc. this buffer, and we should throw it
         * away when we're done.
@@ -4965,9 +4800,9 @@ YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
 #endif
 
 /* %if-c-only */
-static void yynoreturn yy_fatal_error (const char* msg )
+static void yy_fatal_error (yyconst char* msg )
 {
-                       fprintf( stderr, "%s\n", msg );
+                       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 /* %endif */
@@ -4980,14 +4815,14 @@ static void yynoreturn yy_fatal_error (const char* msg )
 #define yyless(n) \
        do \
                { \
-               /* Undo effects of setting up yytext. */ \
+               /* Undo effects of setting up parser6_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               yytext[yyleng] = (yy_hold_char); \
-               (yy_c_buf_p) = yytext + yyless_macro_arg; \
+               parser6_text[parser6_leng] = (yy_hold_char); \
+               (yy_c_buf_p) = parser6_text + yyless_macro_arg; \
                (yy_hold_char) = *(yy_c_buf_p); \
                *(yy_c_buf_p) = '\0'; \
-               yyleng = yyless_macro_arg; \
+               parser6_leng = yyless_macro_arg; \
                } \
        while ( 0 )
 
@@ -5000,43 +4835,43 @@ static void yynoreturn yy_fatal_error (const char* msg )
 /** Get the current line number.
  * 
  */
-int yyget_lineno  (void)
+int parser6_get_lineno  (void)
 {
-    
-    return yylineno;
+        
+    return parser6_lineno;
 }
 
 /** Get the input stream.
  * 
  */
-FILE *yyget_in  (void)
+FILE *parser6_get_in  (void)
 {
-        return yyin;
+        return parser6_in;
 }
 
 /** Get the output stream.
  * 
  */
-FILE *yyget_out  (void)
+FILE *parser6_get_out  (void)
 {
-        return yyout;
+        return parser6_out;
 }
 
 /** Get the length of the current token.
  * 
  */
-int yyget_leng  (void)
+yy_size_t parser6_get_leng  (void)
 {
-        return yyleng;
+        return parser6_leng;
 }
 
 /** Get the current token.
  * 
  */
 
-char *yyget_text  (void)
+char *parser6_get_text  (void)
 {
-        return yytext;
+        return parser6_text;
 }
 
 /* %if-reentrant */
@@ -5046,36 +4881,36 @@ char *yyget_text  (void)
  * @param _line_number line number
  * 
  */
-void yyset_lineno (int  _line_number )
+void parser6_set_lineno (int  _line_number )
 {
     
-    yylineno = _line_number;
+    parser6_lineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
  * @param _in_str A readable stream.
  * 
- * @see yy_switch_to_buffer
+ * @see parser6__switch_to_buffer
  */
-void yyset_in (FILE *  _in_str )
+void parser6_set_in (FILE *  _in_str )
 {
-        yyin = _in_str ;
+        parser6_in = _in_str ;
 }
 
-void yyset_out (FILE *  _out_str )
+void parser6_set_out (FILE *  _out_str )
 {
-        yyout = _out_str ;
+        parser6_out = _out_str ;
 }
 
-int yyget_debug  (void)
+int parser6_get_debug  (void)
 {
-        return yy_flex_debug;
+        return parser6__flex_debug;
 }
 
-void yyset_debug (int  _bdebug )
+void parser6_set_debug (int  _bdebug )
 {
-        yy_flex_debug = _bdebug ;
+        parser6__flex_debug = _bdebug ;
 }
 
 /* %endif */
@@ -5089,50 +4924,50 @@ void yyset_debug (int  _bdebug )
 static int yy_init_globals (void)
 {
         /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from yylex_destroy(), so don't allocate here.
+     * This function is called from parser6_lex_destroy(), so don't allocate here.
      */
 
-    (yy_buffer_stack) = NULL;
+    (yy_buffer_stack) = 0;
     (yy_buffer_stack_top) = 0;
     (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = NULL;
+    (yy_c_buf_p) = (char *) 0;
     (yy_init) = 0;
     (yy_start) = 0;
 
 /* Defined in main.c */
 #ifdef YY_STDINIT
-    yyin = stdin;
-    yyout = stdout;
+    parser6_in = stdin;
+    parser6_out = stdout;
 #else
-    yyin = NULL;
-    yyout = NULL;
+    parser6_in = (FILE *) 0;
+    parser6_out = (FILE *) 0;
 #endif
 
     /* For future reference: Set errno on error, since we are called by
-     * yylex_init()
+     * parser6_lex_init()
      */
     return 0;
 }
 /* %endif */
 
 /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
-/* yylex_destroy is for both reentrant and non-reentrant scanners. */
-int yylex_destroy  (void)
+/* parser6_lex_destroy is for both reentrant and non-reentrant scanners. */
+int parser6_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
        while(YY_CURRENT_BUFFER){
-               yy_delete_buffer( YY_CURRENT_BUFFER  );
+               parser6__delete_buffer(YY_CURRENT_BUFFER  );
                YY_CURRENT_BUFFER_LVALUE = NULL;
-               yypop_buffer_state();
+               parser6_pop_buffer_state();
        }
 
        /* Destroy the stack itself. */
-       yyfree((yy_buffer_stack) );
+       parser6_free((yy_buffer_stack) );
        (yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * yylex() is called, initialization will occur. */
+     * parser6_lex() is called, initialization will occur. */
     yy_init_globals( );
 
 /* %if-reentrant */
@@ -5146,7 +4981,7 @@ int yylex_destroy  (void)
  */
 
 #ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, const char * s2, int n )
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
                
        int i;
@@ -5156,7 +4991,7 @@ static void yy_flex_strncpy (char* s1, const char * s2, int n )
 #endif
 
 #ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (const char * s )
+static int yy_flex_strlen (yyconst char * s )
 {
        int n;
        for ( n = 0; s[n]; ++n )
@@ -5166,12 +5001,12 @@ static int yy_flex_strlen (const char * s )
 }
 #endif
 
-void *yyalloc (yy_size_t  size )
+void *parser6_alloc (yy_size_t  size )
 {
-                       return malloc(size);
+                       return (void *) malloc( size );
 }
 
-void *yyrealloc  (void * ptr, yy_size_t  size )
+void *parser6_realloc  (void * ptr, yy_size_t  size )
 {
                
        /* The cast to (char *) in the following accommodates both
@@ -5181,12 +5016,12 @@ void *yyrealloc  (void * ptr, yy_size_t  size )
         * any pointer type to void*, and deal with argument conversions
         * as though doing an assignment.
         */
-       return realloc(ptr, size);
+       return (void *) realloc( (char *) ptr, size );
 }
 
-void yyfree (void * ptr )
+void parser6_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+                       free( (char *) ptr );   /* see parser6_realloc() for (char *) cast */
 }
 
 /* %if-tables-serialization definitions */
@@ -5196,7 +5031,8 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 1660 "dhcp6_lexer.ll"
+#line 1679 "dhcp6_lexer.ll"
+
 
 
 using namespace isc::dhcp;
@@ -5210,7 +5046,7 @@ Parser6Context::scanStringBegin(const std::string& str, ParserType parser_type)
     file_ = "<string>";
     sfile_ = 0;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    parser6__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
     buffer = parser6__scan_bytes(str.c_str(), str.size());
     if (!buffer) {
@@ -5230,7 +5066,7 @@ Parser6Context::scanFileBegin(FILE * f,
     file_ = filename;
     sfile_ = f;
     loc_.initialize(&file_);
-    yy_flex_debug = trace_scanning_;
+    parser6__flex_debug = trace_scanning_;
     YY_BUFFER_STATE buffer;
 
     /* See dhcp6_lexer.cc header for available definitions */
index 4805a86bfca8b2d2ac93c051892e76b08d2929a0..c203f2abf83f08878611c0c6c005ec305a0c552a 100644 (file)
@@ -605,6 +605,26 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
+\"max-reconnect-tries\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_MAX_RECONNECT_TRIES(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("max-reconnect-tries", driver.loc_);
+    }
+}
+
+\"reconnect-wait-time\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_RECONNECT_WAIT_TIME(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("reconnect-wait-time", driver.loc_);
+    }
+}
+
 \"preferred-lifetime\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
index 0d6c9caebe892e93ddd4261d678ec869610e3672..66d4bc0c85874c5c3a24ef8c7ff101d081610fc4 100644 (file)
@@ -100,6 +100,33 @@ This informational message is printed every time the IPv6 DHCP server
 is started.  It indicates what database backend type is being to store
 lease and other information.
 
+% DHCP6_DB_RECONNECT_ATTEMPT_SCHEDULE Scheduling attempt %1 of %2 in %3 seconds
+An informational message indicating that the server is scheduling the next
+attempt to reconnect to its lease and/or host databases.  This occurs when the
+server has lost databse connectivity and is attempting to reconnect 
+automatically.
+
+% DHCP6_DB_RECONNECT_ATTEMPT_FAILED database reconnect failed: %1
+An error message indicating that an attempt to reconnect to the lease and/or
+host data bases has failed.  This occurs after connectivity to either one
+has been lost and an automatic attempt to reconnect has failed.
+
+% DHCP6_DB_RECONNECT_NO_DB_CTL unexpected error in database reconnect
+This is an error message indicating a programmatic error that should not
+occur. It will prohibit the server from attempting to reconnect to its
+databases if connectivy is lost, and the server will exit. This error
+should be reported. 
+
+% DHCP6_DB_RECONNECT_DISABLED database reconnect is disabled: max-reconnect-tries %1, reconnect-wait-time %1
+This is an informational message indicating that connetivity to either the
+lease or host database or both and that automatic reconnect is not enabled.
+
+% DHCP6_DB_RECONNECT_RETRIES_EXHAUSTED - Maximum number of Database reconnect attempts: %1, has been exhausted without success, server is shutting down!
+This error indicates that the server is shutting after failing to reconnect to
+the lease and/or host database(s) after making the maximum configured number 
+of reconnect attempts.  Loss of connectivity is typically a network or database
+server issue.
+
 % DHCP6_DDNS_CREATE_ADD_NAME_CHANGE_REQUEST created name change request: %1
 This debug message is logged when the new Name Change Request has been created
 to perform the DNS Update, which adds new RRs.
index 871197461b111bbe7a69184d000ea1a231047de8..c5a7ae566f28ebba10eed4b7f578beb6b9de17d5 100644 (file)
@@ -253,29 +253,29 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         value.move< ElementPtr > (that.value);
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -294,29 +294,29 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -356,79 +356,79 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 153: // "constant string"
+            case 155: // "constant string"
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
 #line 364 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
 #line 371 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
 #line 378 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
 #line 385 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 173: // value
+      case 175: // value
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 392 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 177: // map_value
+      case 179: // map_value
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 399 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 221: // db_type
+      case 223: // db_type
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 406 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 297: // hr_mode
+      case 301: // hr_mode
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 413 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 430: // duid_type
+      case 434: // duid_type
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 420 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 463: // ncr_protocol_value
+      case 467: // ncr_protocol_value
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 427 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 471: // replace_client_name_value
+      case 475: // replace_client_name_value
 
-#line 229 "dhcp6_parser.yy" // lalr1.cc:636
+#line 231 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
 #line 434 "dhcp6_parser.cc" // lalr1.cc:636
         break;
@@ -630,29 +630,29 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -674,133 +674,133 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 238 "dhcp6_parser.yy" // lalr1.cc:859
+#line 240 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 239 "dhcp6_parser.yy" // lalr1.cc:859
+#line 241 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
 #line 686 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 240 "dhcp6_parser.yy" // lalr1.cc:859
+#line 242 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 692 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 241 "dhcp6_parser.yy" // lalr1.cc:859
+#line 243 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 242 "dhcp6_parser.yy" // lalr1.cc:859
+#line 244 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
 #line 704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 243 "dhcp6_parser.yy" // lalr1.cc:859
+#line 245 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
 #line 710 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 244 "dhcp6_parser.yy" // lalr1.cc:859
+#line 246 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
 #line 716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 245 "dhcp6_parser.yy" // lalr1.cc:859
+#line 247 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 722 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 246 "dhcp6_parser.yy" // lalr1.cc:859
+#line 248 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
 #line 728 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 247 "dhcp6_parser.yy" // lalr1.cc:859
+#line 249 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 248 "dhcp6_parser.yy" // lalr1.cc:859
+#line 250 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 249 "dhcp6_parser.yy" // lalr1.cc:859
+#line 251 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 746 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 250 "dhcp6_parser.yy" // lalr1.cc:859
+#line 252 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 251 "dhcp6_parser.yy" // lalr1.cc:859
+#line 253 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.LOGGING; }
 #line 758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 259 "dhcp6_parser.yy" // lalr1.cc:859
+#line 261 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 764 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 260 "dhcp6_parser.yy" // lalr1.cc:859
+#line 262 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 261 "dhcp6_parser.yy" // lalr1.cc:859
+#line 263 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 262 "dhcp6_parser.yy" // lalr1.cc:859
+#line 264 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 782 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 34:
-#line 263 "dhcp6_parser.yy" // lalr1.cc:859
+#line 265 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 35:
-#line 264 "dhcp6_parser.yy" // lalr1.cc:859
+#line 266 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 794 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 36:
-#line 265 "dhcp6_parser.yy" // lalr1.cc:859
+#line 267 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 800 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 37:
-#line 268 "dhcp6_parser.yy" // lalr1.cc:859
+#line 270 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
@@ -809,7 +809,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 38:
-#line 273 "dhcp6_parser.yy" // lalr1.cc:859
+#line 275 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -820,7 +820,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 39:
-#line 278 "dhcp6_parser.yy" // lalr1.cc:859
+#line 280 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -830,13 +830,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 40:
-#line 284 "dhcp6_parser.yy" // lalr1.cc:859
+#line 286 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 836 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 43:
-#line 291 "dhcp6_parser.yy" // lalr1.cc:859
+#line 293 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
@@ -845,7 +845,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44:
-#line 295 "dhcp6_parser.yy" // lalr1.cc:859
+#line 297 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -855,7 +855,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 45:
-#line 302 "dhcp6_parser.yy" // lalr1.cc:859
+#line 304 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -864,7 +864,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 46:
-#line 305 "dhcp6_parser.yy" // lalr1.cc:859
+#line 307 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
@@ -872,7 +872,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 49:
-#line 313 "dhcp6_parser.yy" // lalr1.cc:859
+#line 315 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -881,7 +881,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50:
-#line 317 "dhcp6_parser.yy" // lalr1.cc:859
+#line 319 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
@@ -890,7 +890,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 51:
-#line 324 "dhcp6_parser.yy" // lalr1.cc:859
+#line 326 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
@@ -898,7 +898,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 52:
-#line 326 "dhcp6_parser.yy" // lalr1.cc:859
+#line 328 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -907,7 +907,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55:
-#line 335 "dhcp6_parser.yy" // lalr1.cc:859
+#line 337 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -916,7 +916,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56:
-#line 339 "dhcp6_parser.yy" // lalr1.cc:859
+#line 341 "dhcp6_parser.yy" // lalr1.cc:859
     {
                           ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -925,7 +925,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57:
-#line 350 "dhcp6_parser.yy" // lalr1.cc:859
+#line 352 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
@@ -936,7 +936,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 58:
-#line 360 "dhcp6_parser.yy" // lalr1.cc:859
+#line 362 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -947,7 +947,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 59:
-#line 365 "dhcp6_parser.yy" // lalr1.cc:859
+#line 367 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -960,7 +960,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 68:
-#line 388 "dhcp6_parser.yy" // lalr1.cc:859
+#line 390 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -973,7 +973,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 69:
-#line 395 "dhcp6_parser.yy" // lalr1.cc:859
+#line 397 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -983,7 +983,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 70:
-#line 403 "dhcp6_parser.yy" // lalr1.cc:859
+#line 405 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -993,7 +993,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 71:
-#line 407 "dhcp6_parser.yy" // lalr1.cc:859
+#line 409 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No global parameter is required
     // parsing completed
@@ -1002,7 +1002,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 99:
-#line 445 "dhcp6_parser.yy" // lalr1.cc:859
+#line 447 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
@@ -1011,7 +1011,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 100:
-#line 450 "dhcp6_parser.yy" // lalr1.cc:859
+#line 452 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
@@ -1020,7 +1020,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 101:
-#line 455 "dhcp6_parser.yy" // lalr1.cc:859
+#line 457 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
@@ -1029,7 +1029,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 102:
-#line 460 "dhcp6_parser.yy" // lalr1.cc:859
+#line 462 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
@@ -1038,7 +1038,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 103:
-#line 465 "dhcp6_parser.yy" // lalr1.cc:859
+#line 467 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
@@ -1047,7 +1047,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 104:
-#line 470 "dhcp6_parser.yy" // lalr1.cc:859
+#line 472 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
@@ -1058,7 +1058,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 105:
-#line 475 "dhcp6_parser.yy" // lalr1.cc:859
+#line 477 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     ctx.stack_.pop_back();
@@ -1068,7 +1068,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 106:
-#line 481 "dhcp6_parser.yy" // lalr1.cc:859
+#line 483 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1078,7 +1078,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 107:
-#line 485 "dhcp6_parser.yy" // lalr1.cc:859
+#line 487 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No interfaces config param is required
     // parsing completed
@@ -1087,7 +1087,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 115:
-#line 501 "dhcp6_parser.yy" // lalr1.cc:859
+#line 503 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
@@ -1098,7 +1098,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 116:
-#line 506 "dhcp6_parser.yy" // lalr1.cc:859
+#line 508 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -1107,7 +1107,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 117:
-#line 511 "dhcp6_parser.yy" // lalr1.cc:859
+#line 513 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
@@ -1116,7 +1116,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 118:
-#line 517 "dhcp6_parser.yy" // lalr1.cc:859
+#line 519 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
@@ -1127,7 +1127,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 119:
-#line 522 "dhcp6_parser.yy" // lalr1.cc:859
+#line 524 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1138,7 +1138,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 120:
-#line 529 "dhcp6_parser.yy" // lalr1.cc:859
+#line 531 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
@@ -1149,7 +1149,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 121:
-#line 534 "dhcp6_parser.yy" // lalr1.cc:859
+#line 536 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -1159,16 +1159,16 @@ namespace isc { namespace dhcp {
 #line 1160 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 560 "dhcp6_parser.yy" // lalr1.cc:859
+  case 139:
+#line 564 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DATABASE_TYPE);
 }
 #line 1168 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 562 "dhcp6_parser.yy" // lalr1.cc:859
+  case 140:
+#line 566 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -1176,40 +1176,40 @@ namespace isc { namespace dhcp {
 #line 1177 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 567 "dhcp6_parser.yy" // lalr1.cc:859
+  case 141:
+#line 571 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
 #line 1183 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 568 "dhcp6_parser.yy" // lalr1.cc:859
+  case 142:
+#line 572 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
 #line 1189 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 569 "dhcp6_parser.yy" // lalr1.cc:859
+  case 143:
+#line 573 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
 #line 1195 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 142:
-#line 570 "dhcp6_parser.yy" // lalr1.cc:859
+  case 144:
+#line 574 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
 #line 1201 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 143:
-#line 573 "dhcp6_parser.yy" // lalr1.cc:859
+  case 145:
+#line 577 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1209 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 144:
-#line 575 "dhcp6_parser.yy" // lalr1.cc:859
+  case 146:
+#line 579 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
@@ -1218,16 +1218,16 @@ namespace isc { namespace dhcp {
 #line 1219 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 145:
-#line 581 "dhcp6_parser.yy" // lalr1.cc:859
+  case 147:
+#line 585 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1227 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 583 "dhcp6_parser.yy" // lalr1.cc:859
+  case 148:
+#line 587 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
@@ -1236,16 +1236,16 @@ namespace isc { namespace dhcp {
 #line 1237 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 589 "dhcp6_parser.yy" // lalr1.cc:859
+  case 149:
+#line 593 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1245 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 591 "dhcp6_parser.yy" // lalr1.cc:859
+  case 150:
+#line 595 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
@@ -1254,8 +1254,8 @@ namespace isc { namespace dhcp {
 #line 1255 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 597 "dhcp6_parser.yy" // lalr1.cc:859
+  case 151:
+#line 601 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
@@ -1263,16 +1263,16 @@ namespace isc { namespace dhcp {
 #line 1264 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 150:
-#line 602 "dhcp6_parser.yy" // lalr1.cc:859
+  case 152:
+#line 606 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1272 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 151:
-#line 604 "dhcp6_parser.yy" // lalr1.cc:859
+  case 153:
+#line 608 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
@@ -1281,8 +1281,8 @@ namespace isc { namespace dhcp {
 #line 1282 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 152:
-#line 610 "dhcp6_parser.yy" // lalr1.cc:859
+  case 154:
+#line 614 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
@@ -1290,8 +1290,8 @@ namespace isc { namespace dhcp {
 #line 1291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 153:
-#line 615 "dhcp6_parser.yy" // lalr1.cc:859
+  case 155:
+#line 619 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
@@ -1299,8 +1299,8 @@ namespace isc { namespace dhcp {
 #line 1300 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 154:
-#line 620 "dhcp6_parser.yy" // lalr1.cc:859
+  case 156:
+#line 624 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
@@ -1308,8 +1308,8 @@ namespace isc { namespace dhcp {
 #line 1309 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 155:
-#line 625 "dhcp6_parser.yy" // lalr1.cc:859
+  case 157:
+#line 629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
@@ -1317,16 +1317,16 @@ namespace isc { namespace dhcp {
 #line 1318 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 156:
-#line 630 "dhcp6_parser.yy" // lalr1.cc:859
+  case 158:
+#line 634 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
 #line 1326 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 632 "dhcp6_parser.yy" // lalr1.cc:859
+  case 159:
+#line 636 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("contact-points", cp);
@@ -1335,322 +1335,340 @@ namespace isc { namespace dhcp {
 #line 1336 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 638 "dhcp6_parser.yy" // lalr1.cc:859
+  case 160:
+#line 642 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("max-reconnect-tries", n);
+}
+#line 1345 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 161:
+#line 647 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("reconnect-wait-time", n);
+}
+#line 1354 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 162:
+#line 652 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1344 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1362 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 640 "dhcp6_parser.yy" // lalr1.cc:859
+  case 163:
+#line 654 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("keyspace", ks);
     ctx.leave();
 }
-#line 1354 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1372 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 647 "dhcp6_parser.yy" // lalr1.cc:859
+  case 164:
+#line 661 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 1365 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1383 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 161:
-#line 652 "dhcp6_parser.yy" // lalr1.cc:859
+  case 165:
+#line 666 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1374 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1392 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 166:
-#line 665 "dhcp6_parser.yy" // lalr1.cc:859
+  case 170:
+#line 679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1383 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1401 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 167:
-#line 670 "dhcp6_parser.yy" // lalr1.cc:859
+  case 171:
+#line 684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1392 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1410 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 168:
-#line 675 "dhcp6_parser.yy" // lalr1.cc:859
+  case 172:
+#line 689 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1403 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1421 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 169:
-#line 680 "dhcp6_parser.yy" // lalr1.cc:859
+  case 173:
+#line 694 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1412 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1430 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 694 "dhcp6_parser.yy" // lalr1.cc:859
+  case 179:
+#line 708 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1421 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1439 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 699 "dhcp6_parser.yy" // lalr1.cc:859
+  case 180:
+#line 713 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 1430 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1448 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 177:
-#line 706 "dhcp6_parser.yy" // lalr1.cc:859
+  case 181:
+#line 720 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1441 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1459 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 178:
-#line 711 "dhcp6_parser.yy" // lalr1.cc:859
+  case 182:
+#line 725 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1450 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1468 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 179:
-#line 716 "dhcp6_parser.yy" // lalr1.cc:859
+  case 183:
+#line 730 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1461 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1479 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 180:
-#line 721 "dhcp6_parser.yy" // lalr1.cc:859
+  case 184:
+#line 735 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1470 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1488 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 734 "dhcp6_parser.yy" // lalr1.cc:859
+  case 189:
+#line 748 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1480 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1498 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 738 "dhcp6_parser.yy" // lalr1.cc:859
+  case 190:
+#line 752 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1490 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1508 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 187:
-#line 744 "dhcp6_parser.yy" // lalr1.cc:859
+  case 191:
+#line 758 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1500 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1518 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 188:
-#line 748 "dhcp6_parser.yy" // lalr1.cc:859
+  case 192:
+#line 762 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1510 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1528 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 194:
-#line 763 "dhcp6_parser.yy" // lalr1.cc:859
+  case 198:
+#line 777 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1518 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1536 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 195:
-#line 765 "dhcp6_parser.yy" // lalr1.cc:859
+  case 199:
+#line 779 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1528 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1546 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 771 "dhcp6_parser.yy" // lalr1.cc:859
+  case 200:
+#line 785 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1536 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1554 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 773 "dhcp6_parser.yy" // lalr1.cc:859
+  case 201:
+#line 787 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1545 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1563 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 779 "dhcp6_parser.yy" // lalr1.cc:859
+  case 202:
+#line 793 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 1556 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1574 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 784 "dhcp6_parser.yy" // lalr1.cc:859
+  case 203:
+#line 798 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1566 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1584 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 802 "dhcp6_parser.yy" // lalr1.cc:859
+  case 212:
+#line 816 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
 }
-#line 1575 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1593 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 807 "dhcp6_parser.yy" // lalr1.cc:859
+  case 213:
+#line 821 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
 }
-#line 1584 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1602 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 812 "dhcp6_parser.yy" // lalr1.cc:859
+  case 214:
+#line 826 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1593 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1611 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 817 "dhcp6_parser.yy" // lalr1.cc:859
+  case 215:
+#line 831 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1602 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1620 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 822 "dhcp6_parser.yy" // lalr1.cc:859
+  case 216:
+#line 836 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1611 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1629 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 827 "dhcp6_parser.yy" // lalr1.cc:859
+  case 217:
+#line 841 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1620 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1638 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 835 "dhcp6_parser.yy" // lalr1.cc:859
+  case 218:
+#line 849 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 1631 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1649 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 215:
-#line 840 "dhcp6_parser.yy" // lalr1.cc:859
+  case 219:
+#line 854 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1640 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1658 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 220:
-#line 860 "dhcp6_parser.yy" // lalr1.cc:859
+  case 224:
+#line 874 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1650 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1668 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 221:
-#line 864 "dhcp6_parser.yy" // lalr1.cc:859
+  case 225:
+#line 878 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1672,241 +1690,241 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1676 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1694 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 886 "dhcp6_parser.yy" // lalr1.cc:859
+  case 226:
+#line 900 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1686 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 223:
-#line 890 "dhcp6_parser.yy" // lalr1.cc:859
+  case 227:
+#line 904 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The subnet subnet6 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1696 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1714 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 923 "dhcp6_parser.yy" // lalr1.cc:859
+  case 249:
+#line 937 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1704 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1722 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 925 "dhcp6_parser.yy" // lalr1.cc:859
+  case 250:
+#line 939 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1714 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1732 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 931 "dhcp6_parser.yy" // lalr1.cc:859
+  case 251:
+#line 945 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1722 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1740 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 933 "dhcp6_parser.yy" // lalr1.cc:859
+  case 252:
+#line 947 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1732 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1750 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 939 "dhcp6_parser.yy" // lalr1.cc:859
+  case 253:
+#line 953 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1740 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1758 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 250:
-#line 941 "dhcp6_parser.yy" // lalr1.cc:859
+  case 254:
+#line 955 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1750 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1768 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 251:
-#line 947 "dhcp6_parser.yy" // lalr1.cc:859
+  case 255:
+#line 961 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1758 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1776 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 252:
-#line 949 "dhcp6_parser.yy" // lalr1.cc:859
+  case 256:
+#line 963 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1768 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1786 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 253:
-#line 955 "dhcp6_parser.yy" // lalr1.cc:859
+  case 257:
+#line 969 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 1776 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1794 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 957 "dhcp6_parser.yy" // lalr1.cc:859
+  case 258:
+#line 971 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1785 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1803 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 962 "dhcp6_parser.yy" // lalr1.cc:859
+  case 259:
+#line 976 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1809 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 963 "dhcp6_parser.yy" // lalr1.cc:859
+  case 260:
+#line 977 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 1797 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1815 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 257:
-#line 964 "dhcp6_parser.yy" // lalr1.cc:859
+  case 261:
+#line 978 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 1803 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1821 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 258:
-#line 967 "dhcp6_parser.yy" // lalr1.cc:859
+  case 262:
+#line 981 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1812 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1830 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 259:
-#line 972 "dhcp6_parser.yy" // lalr1.cc:859
+  case 263:
+#line 986 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1821 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1839 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 260:
-#line 980 "dhcp6_parser.yy" // lalr1.cc:859
+  case 264:
+#line 994 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("shared-networks", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 1832 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1850 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 261:
-#line 985 "dhcp6_parser.yy" // lalr1.cc:859
+  case 265:
+#line 999 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1841 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1859 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 266:
-#line 1000 "dhcp6_parser.yy" // lalr1.cc:859
+  case 270:
+#line 1014 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1851 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1869 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 267:
-#line 1004 "dhcp6_parser.yy" // lalr1.cc:859
+  case 271:
+#line 1018 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1859 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1877 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 286:
-#line 1034 "dhcp6_parser.yy" // lalr1.cc:859
+  case 290:
+#line 1048 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1870 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1888 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 287:
-#line 1039 "dhcp6_parser.yy" // lalr1.cc:859
+  case 291:
+#line 1053 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1879 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1897 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 288:
-#line 1047 "dhcp6_parser.yy" // lalr1.cc:859
+  case 292:
+#line 1061 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1888 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1906 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1050 "dhcp6_parser.yy" // lalr1.cc:859
+  case 293:
+#line 1064 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1896 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1914 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 294:
-#line 1066 "dhcp6_parser.yy" // lalr1.cc:859
+  case 298:
+#line 1080 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1906 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1924 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 295:
-#line 1070 "dhcp6_parser.yy" // lalr1.cc:859
+  case 299:
+#line 1084 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1914,21 +1932,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1918 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1936 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 296:
-#line 1081 "dhcp6_parser.yy" // lalr1.cc:859
+  case 300:
+#line 1095 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1928 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1946 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 297:
-#line 1085 "dhcp6_parser.yy" // lalr1.cc:859
+  case 301:
+#line 1099 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -1936,280 +1954,280 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 1940 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1958 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 313:
-#line 1117 "dhcp6_parser.yy" // lalr1.cc:859
+  case 317:
+#line 1131 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1949 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1967 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 315:
-#line 1124 "dhcp6_parser.yy" // lalr1.cc:859
+  case 319:
+#line 1138 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1957 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1975 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 316:
-#line 1126 "dhcp6_parser.yy" // lalr1.cc:859
+  case 320:
+#line 1140 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1967 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1985 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1132 "dhcp6_parser.yy" // lalr1.cc:859
+  case 321:
+#line 1146 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1975 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1993 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1134 "dhcp6_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1148 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1985 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2003 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 319:
-#line 1140 "dhcp6_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1154 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1993 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2011 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 320:
-#line 1142 "dhcp6_parser.yy" // lalr1.cc:859
+  case 324:
+#line 1156 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 2003 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2021 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 322:
-#line 1150 "dhcp6_parser.yy" // lalr1.cc:859
+  case 326:
+#line 1164 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2011 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2029 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 323:
-#line 1152 "dhcp6_parser.yy" // lalr1.cc:859
+  case 327:
+#line 1166 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 2021 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2039 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 324:
-#line 1158 "dhcp6_parser.yy" // lalr1.cc:859
+  case 328:
+#line 1172 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 2030 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2048 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 325:
-#line 1167 "dhcp6_parser.yy" // lalr1.cc:859
+  case 329:
+#line 1181 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 2041 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2059 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 326:
-#line 1172 "dhcp6_parser.yy" // lalr1.cc:859
+  case 330:
+#line 1186 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2050 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2068 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 331:
-#line 1191 "dhcp6_parser.yy" // lalr1.cc:859
+  case 335:
+#line 1205 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2060 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2078 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1195 "dhcp6_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1209 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 2069 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2087 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1203 "dhcp6_parser.yy" // lalr1.cc:859
+  case 337:
+#line 1217 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2079 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2097 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1207 "dhcp6_parser.yy" // lalr1.cc:859
+  case 338:
+#line 1221 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 2088 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2106 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 349:
-#line 1240 "dhcp6_parser.yy" // lalr1.cc:859
+  case 353:
+#line 1254 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2096 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2114 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 350:
-#line 1242 "dhcp6_parser.yy" // lalr1.cc:859
+  case 354:
+#line 1256 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 2106 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2124 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 353:
-#line 1252 "dhcp6_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1266 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 2115 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2133 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1257 "dhcp6_parser.yy" // lalr1.cc:859
+  case 358:
+#line 1271 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 2124 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2142 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1265 "dhcp6_parser.yy" // lalr1.cc:859
+  case 359:
+#line 1279 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 2135 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2153 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 356:
-#line 1270 "dhcp6_parser.yy" // lalr1.cc:859
+  case 360:
+#line 1284 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2144 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 361:
-#line 1285 "dhcp6_parser.yy" // lalr1.cc:859
+  case 365:
+#line 1299 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2154 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2172 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 362:
-#line 1289 "dhcp6_parser.yy" // lalr1.cc:859
+  case 366:
+#line 1303 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2164 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2182 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1295 "dhcp6_parser.yy" // lalr1.cc:859
+  case 367:
+#line 1309 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2174 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2192 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1299 "dhcp6_parser.yy" // lalr1.cc:859
+  case 368:
+#line 1313 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
 }
-#line 2183 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2201 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 372:
-#line 1315 "dhcp6_parser.yy" // lalr1.cc:859
+  case 376:
+#line 1329 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2191 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2209 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 373:
-#line 1317 "dhcp6_parser.yy" // lalr1.cc:859
+  case 377:
+#line 1331 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 2201 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2219 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 374:
-#line 1323 "dhcp6_parser.yy" // lalr1.cc:859
+  case 378:
+#line 1337 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2209 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2227 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 375:
-#line 1325 "dhcp6_parser.yy" // lalr1.cc:859
+  case 379:
+#line 1339 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
@@ -2232,19 +2250,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2236 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2254 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 376:
-#line 1348 "dhcp6_parser.yy" // lalr1.cc:859
+  case 380:
+#line 1362 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2244 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2262 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 377:
-#line 1350 "dhcp6_parser.yy" // lalr1.cc:859
+  case 381:
+#line 1364 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -2269,41 +2287,41 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 2273 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 378:
-#line 1378 "dhcp6_parser.yy" // lalr1.cc:859
+  case 382:
+#line 1392 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 2284 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2302 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 379:
-#line 1383 "dhcp6_parser.yy" // lalr1.cc:859
+  case 383:
+#line 1397 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2293 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2311 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 384:
-#line 1398 "dhcp6_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1412 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2303 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2321 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1402 "dhcp6_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1416 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2311,21 +2329,21 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2315 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2333 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1410 "dhcp6_parser.yy" // lalr1.cc:859
+  case 390:
+#line 1424 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2325 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2343 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1414 "dhcp6_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1428 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The prefix, prefix len and delegated len parameters are required.
     ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -2333,1046 +2351,1046 @@ namespace isc { namespace dhcp {
     ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2337 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2355 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1437 "dhcp6_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1451 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2345 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2363 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1439 "dhcp6_parser.yy" // lalr1.cc:859
+  case 404:
+#line 1453 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 2355 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 401:
-#line 1445 "dhcp6_parser.yy" // lalr1.cc:859
+  case 405:
+#line 1459 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 2364 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2382 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 402:
-#line 1450 "dhcp6_parser.yy" // lalr1.cc:859
+  case 406:
+#line 1464 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2372 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2390 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 403:
-#line 1452 "dhcp6_parser.yy" // lalr1.cc:859
+  case 407:
+#line 1466 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
     ctx.leave();
 }
-#line 2382 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2400 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 404:
-#line 1458 "dhcp6_parser.yy" // lalr1.cc:859
+  case 408:
+#line 1472 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 2391 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2409 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 405:
-#line 1463 "dhcp6_parser.yy" // lalr1.cc:859
+  case 409:
+#line 1477 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 2400 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2418 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 406:
-#line 1471 "dhcp6_parser.yy" // lalr1.cc:859
+  case 410:
+#line 1485 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2411 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2429 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 407:
-#line 1476 "dhcp6_parser.yy" // lalr1.cc:859
+  case 411:
+#line 1490 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2420 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2438 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1489 "dhcp6_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1503 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2430 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2448 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1493 "dhcp6_parser.yy" // lalr1.cc:859
+  case 417:
+#line 1507 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 2439 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2457 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 414:
-#line 1498 "dhcp6_parser.yy" // lalr1.cc:859
+  case 418:
+#line 1512 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2449 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2467 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 415:
-#line 1502 "dhcp6_parser.yy" // lalr1.cc:859
+  case 419:
+#line 1516 "dhcp6_parser.yy" // lalr1.cc:859
     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 2458 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2476 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 431:
-#line 1529 "dhcp6_parser.yy" // lalr1.cc:859
+  case 435:
+#line 1543 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2469 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2487 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 432:
-#line 1534 "dhcp6_parser.yy" // lalr1.cc:859
+  case 436:
+#line 1548 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2478 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2496 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 433:
-#line 1539 "dhcp6_parser.yy" // lalr1.cc:859
+  case 437:
+#line 1553 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2489 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2507 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 434:
-#line 1544 "dhcp6_parser.yy" // lalr1.cc:859
+  case 438:
+#line 1558 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2498 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2516 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 435:
-#line 1549 "dhcp6_parser.yy" // lalr1.cc:859
+  case 439:
+#line 1563 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2506 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2524 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 436:
-#line 1551 "dhcp6_parser.yy" // lalr1.cc:859
+  case 440:
+#line 1565 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2516 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2534 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 437:
-#line 1557 "dhcp6_parser.yy" // lalr1.cc:859
+  case 441:
+#line 1571 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2524 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2542 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 438:
-#line 1559 "dhcp6_parser.yy" // lalr1.cc:859
+  case 442:
+#line 1573 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2534 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2552 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 439:
-#line 1565 "dhcp6_parser.yy" // lalr1.cc:859
+  case 443:
+#line 1579 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2542 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2560 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 440:
-#line 1567 "dhcp6_parser.yy" // lalr1.cc:859
+  case 444:
+#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2552 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2570 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 441:
-#line 1573 "dhcp6_parser.yy" // lalr1.cc:859
+  case 445:
+#line 1587 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2560 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2578 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 442:
-#line 1575 "dhcp6_parser.yy" // lalr1.cc:859
+  case 446:
+#line 1589 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flex-id", hw);
     ctx.leave();
 }
-#line 2570 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2588 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 443:
-#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
+  case 447:
+#line 1595 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2581 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2599 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 444:
-#line 1586 "dhcp6_parser.yy" // lalr1.cc:859
+  case 448:
+#line 1600 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2590 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2608 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 445:
-#line 1594 "dhcp6_parser.yy" // lalr1.cc:859
+  case 449:
+#line 1608 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2601 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2619 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 446:
-#line 1599 "dhcp6_parser.yy" // lalr1.cc:859
+  case 450:
+#line 1613 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2610 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2628 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 447:
-#line 1604 "dhcp6_parser.yy" // lalr1.cc:859
+  case 451:
+#line 1618 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2618 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2636 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 448:
-#line 1606 "dhcp6_parser.yy" // lalr1.cc:859
+  case 452:
+#line 1620 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2628 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2646 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 449:
-#line 1615 "dhcp6_parser.yy" // lalr1.cc:859
+  case 453:
+#line 1629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2639 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2657 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 450:
-#line 1620 "dhcp6_parser.yy" // lalr1.cc:859
+  case 454:
+#line 1634 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2648 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2666 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 453:
-#line 1629 "dhcp6_parser.yy" // lalr1.cc:859
+  case 457:
+#line 1643 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2658 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2676 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 454:
-#line 1633 "dhcp6_parser.yy" // lalr1.cc:859
+  case 458:
+#line 1647 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The name client class parameter is required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2668 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2686 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 466:
-#line 1657 "dhcp6_parser.yy" // lalr1.cc:859
+  case 470:
+#line 1671 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2676 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2694 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 467:
-#line 1659 "dhcp6_parser.yy" // lalr1.cc:859
+  case 471:
+#line 1673 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2686 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2704 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 468:
-#line 1668 "dhcp6_parser.yy" // lalr1.cc:859
+  case 472:
+#line 1682 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2697 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2715 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 469:
-#line 1673 "dhcp6_parser.yy" // lalr1.cc:859
+  case 473:
+#line 1687 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The type parameter is required.
     ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2708 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2726 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 481:
-#line 1695 "dhcp6_parser.yy" // lalr1.cc:859
+  case 485:
+#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 2716 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 482:
-#line 1697 "dhcp6_parser.yy" // lalr1.cc:859
+  case 486:
+#line 1711 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2725 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2743 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 483:
-#line 1702 "dhcp6_parser.yy" // lalr1.cc:859
+  case 487:
+#line 1716 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 2731 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2749 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 484:
-#line 1703 "dhcp6_parser.yy" // lalr1.cc:859
+  case 488:
+#line 1717 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 2737 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2755 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 485:
-#line 1704 "dhcp6_parser.yy" // lalr1.cc:859
+  case 489:
+#line 1718 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 2743 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2761 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 486:
-#line 1707 "dhcp6_parser.yy" // lalr1.cc:859
+  case 490:
+#line 1721 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2752 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2770 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 487:
-#line 1712 "dhcp6_parser.yy" // lalr1.cc:859
+  case 491:
+#line 1726 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2760 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2778 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 488:
-#line 1714 "dhcp6_parser.yy" // lalr1.cc:859
+  case 492:
+#line 1728 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2770 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2788 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 489:
-#line 1720 "dhcp6_parser.yy" // lalr1.cc:859
+  case 493:
+#line 1734 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2779 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2797 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 490:
-#line 1725 "dhcp6_parser.yy" // lalr1.cc:859
+  case 494:
+#line 1739 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2788 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2806 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 491:
-#line 1732 "dhcp6_parser.yy" // lalr1.cc:859
+  case 495:
+#line 1746 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2797 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2815 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 492:
-#line 1739 "dhcp6_parser.yy" // lalr1.cc:859
+  case 496:
+#line 1753 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2808 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2826 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 493:
-#line 1744 "dhcp6_parser.yy" // lalr1.cc:859
+  case 497:
+#line 1758 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2817 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2835 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 501:
-#line 1760 "dhcp6_parser.yy" // lalr1.cc:859
+  case 505:
+#line 1774 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2825 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2843 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 502:
-#line 1762 "dhcp6_parser.yy" // lalr1.cc:859
+  case 506:
+#line 1776 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2835 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2853 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 503:
-#line 1768 "dhcp6_parser.yy" // lalr1.cc:859
+  case 507:
+#line 1782 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2843 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2861 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 504:
-#line 1770 "dhcp6_parser.yy" // lalr1.cc:859
+  case 508:
+#line 1784 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2853 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2871 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 505:
-#line 1778 "dhcp6_parser.yy" // lalr1.cc:859
+  case 509:
+#line 1792 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 2864 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2882 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 506:
-#line 1783 "dhcp6_parser.yy" // lalr1.cc:859
+  case 510:
+#line 1797 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2875 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2893 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 507:
-#line 1790 "dhcp6_parser.yy" // lalr1.cc:859
+  case 511:
+#line 1804 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2885 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2903 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 508:
-#line 1794 "dhcp6_parser.yy" // lalr1.cc:859
+  case 512:
+#line 1808 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2895 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2913 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 528:
-#line 1823 "dhcp6_parser.yy" // lalr1.cc:859
+  case 532:
+#line 1837 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 2904 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2922 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 529:
-#line 1828 "dhcp6_parser.yy" // lalr1.cc:859
+  case 533:
+#line 1842 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2912 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2930 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 530:
-#line 1830 "dhcp6_parser.yy" // lalr1.cc:859
+  case 534:
+#line 1844 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
     ctx.leave();
 }
-#line 2922 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2940 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 531:
-#line 1836 "dhcp6_parser.yy" // lalr1.cc:859
+  case 535:
+#line 1850 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2930 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2948 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 532:
-#line 1838 "dhcp6_parser.yy" // lalr1.cc:859
+  case 536:
+#line 1852 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
     ctx.leave();
 }
-#line 2940 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2958 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 533:
-#line 1844 "dhcp6_parser.yy" // lalr1.cc:859
+  case 537:
+#line 1858 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 2949 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2967 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 534:
-#line 1849 "dhcp6_parser.yy" // lalr1.cc:859
+  case 538:
+#line 1863 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2957 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2975 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 535:
-#line 1851 "dhcp6_parser.yy" // lalr1.cc:859
+  case 539:
+#line 1865 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
     ctx.leave();
 }
-#line 2967 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2985 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 536:
-#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
+  case 540:
+#line 1871 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 2976 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2994 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 537:
-#line 1862 "dhcp6_parser.yy" // lalr1.cc:859
+  case 541:
+#line 1876 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 2985 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3003 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 538:
-#line 1867 "dhcp6_parser.yy" // lalr1.cc:859
+  case 542:
+#line 1881 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 2993 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3011 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 539:
-#line 1869 "dhcp6_parser.yy" // lalr1.cc:859
+  case 543:
+#line 1883 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3002 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3020 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 540:
-#line 1875 "dhcp6_parser.yy" // lalr1.cc:859
+  case 544:
+#line 1889 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 3008 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 541:
-#line 1876 "dhcp6_parser.yy" // lalr1.cc:859
+  case 545:
+#line 1890 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 3014 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3032 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 542:
-#line 1879 "dhcp6_parser.yy" // lalr1.cc:859
+  case 546:
+#line 1893 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 3022 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3040 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 543:
-#line 1881 "dhcp6_parser.yy" // lalr1.cc:859
+  case 547:
+#line 1895 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 3032 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3050 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 544:
-#line 1887 "dhcp6_parser.yy" // lalr1.cc:859
+  case 548:
+#line 1901 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
 }
-#line 3041 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3059 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 545:
-#line 1892 "dhcp6_parser.yy" // lalr1.cc:859
+  case 549:
+#line 1906 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 3050 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3068 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 546:
-#line 1897 "dhcp6_parser.yy" // lalr1.cc:859
+  case 550:
+#line 1911 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 3059 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3077 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 547:
-#line 1902 "dhcp6_parser.yy" // lalr1.cc:859
+  case 551:
+#line 1916 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 3067 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3085 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 548:
-#line 1904 "dhcp6_parser.yy" // lalr1.cc:859
+  case 552:
+#line 1918 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3076 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3094 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 549:
-#line 1910 "dhcp6_parser.yy" // lalr1.cc:859
+  case 553:
+#line 1924 "dhcp6_parser.yy" // lalr1.cc:859
     {
-      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
+      yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3084 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3102 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 550:
-#line 1913 "dhcp6_parser.yy" // lalr1.cc:859
+  case 554:
+#line 1927 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3092 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3110 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 551:
-#line 1916 "dhcp6_parser.yy" // lalr1.cc:859
+  case 555:
+#line 1930 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3100 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3118 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 552:
-#line 1919 "dhcp6_parser.yy" // lalr1.cc:859
+  case 556:
+#line 1933 "dhcp6_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
-#line 3108 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3126 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 553:
-#line 1922 "dhcp6_parser.yy" // lalr1.cc:859
+  case 557:
+#line 1936 "dhcp6_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
       }
-#line 3117 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3135 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 554:
-#line 1928 "dhcp6_parser.yy" // lalr1.cc:859
+  case 558:
+#line 1942 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3125 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3143 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 555:
-#line 1930 "dhcp6_parser.yy" // lalr1.cc:859
+  case 559:
+#line 1944 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
     ctx.leave();
 }
-#line 3135 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3153 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 556:
-#line 1938 "dhcp6_parser.yy" // lalr1.cc:859
+  case 560:
+#line 1952 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3143 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3161 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 557:
-#line 1940 "dhcp6_parser.yy" // lalr1.cc:859
+  case 561:
+#line 1954 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3152 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3170 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 558:
-#line 1945 "dhcp6_parser.yy" // lalr1.cc:859
+  case 562:
+#line 1959 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3160 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3178 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 559:
-#line 1947 "dhcp6_parser.yy" // lalr1.cc:859
+  case 563:
+#line 1961 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3169 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3187 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 560:
-#line 1952 "dhcp6_parser.yy" // lalr1.cc:859
+  case 564:
+#line 1966 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3177 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3195 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 561:
-#line 1954 "dhcp6_parser.yy" // lalr1.cc:859
+  case 565:
+#line 1968 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 3186 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3204 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 562:
-#line 1965 "dhcp6_parser.yy" // lalr1.cc:859
+  case 566:
+#line 1979 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 3197 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3215 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 563:
-#line 1970 "dhcp6_parser.yy" // lalr1.cc:859
+  case 567:
+#line 1984 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3206 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3224 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 564:
-#line 1975 "dhcp6_parser.yy" // lalr1.cc:859
+  case 568:
+#line 1989 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3216 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3234 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 565:
-#line 1979 "dhcp6_parser.yy" // lalr1.cc:859
+  case 569:
+#line 1993 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 3224 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3242 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 569:
-#line 1995 "dhcp6_parser.yy" // lalr1.cc:859
+  case 573:
+#line 2009 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 3235 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3253 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 570:
-#line 2000 "dhcp6_parser.yy" // lalr1.cc:859
+  case 574:
+#line 2014 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3244 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3262 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 573:
-#line 2012 "dhcp6_parser.yy" // lalr1.cc:859
+  case 577:
+#line 2026 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 3254 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3272 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 574:
-#line 2016 "dhcp6_parser.yy" // lalr1.cc:859
+  case 578:
+#line 2030 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3262 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3280 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 584:
-#line 2033 "dhcp6_parser.yy" // lalr1.cc:859
+  case 588:
+#line 2047 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 3271 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3289 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 585:
-#line 2038 "dhcp6_parser.yy" // lalr1.cc:859
+  case 589:
+#line 2052 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3279 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3297 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 586:
-#line 2040 "dhcp6_parser.yy" // lalr1.cc:859
+  case 590:
+#line 2054 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 3289 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3307 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 587:
-#line 2046 "dhcp6_parser.yy" // lalr1.cc:859
+  case 591:
+#line 2060 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 3300 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3318 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 588:
-#line 2051 "dhcp6_parser.yy" // lalr1.cc:859
+  case 592:
+#line 2065 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3309 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3327 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 591:
-#line 2060 "dhcp6_parser.yy" // lalr1.cc:859
+  case 595:
+#line 2074 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3319 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3337 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 592:
-#line 2064 "dhcp6_parser.yy" // lalr1.cc:859
+  case 596:
+#line 2078 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 3327 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3345 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 599:
-#line 2078 "dhcp6_parser.yy" // lalr1.cc:859
+  case 603:
+#line 2092 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3335 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3353 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 600:
-#line 2080 "dhcp6_parser.yy" // lalr1.cc:859
+  case 604:
+#line 2094 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 3345 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3363 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 601:
-#line 2086 "dhcp6_parser.yy" // lalr1.cc:859
+  case 605:
+#line 2100 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 3354 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3372 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 602:
-#line 2091 "dhcp6_parser.yy" // lalr1.cc:859
+  case 606:
+#line 2105 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 3363 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3381 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 603:
-#line 2096 "dhcp6_parser.yy" // lalr1.cc:859
+  case 607:
+#line 2110 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 3372 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3390 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 3376 "dhcp6_parser.cc" // lalr1.cc:859
+#line 3394 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -3627,111 +3645,112 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp6Parser::yypact_ninf_ = -758;
+  const short int Dhcp6Parser::yypact_ninf_ = -768;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     306,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,    60,    28,    68,    72,    74,
-      82,    84,   110,   117,   149,   154,   160,   166,   170,   187,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,    28,    22,
-      32,   482,    36,    40,    70,     2,   177,   194,   106,   230,
-     -33,   320,    86,  -758,   229,   240,   254,   269,   276,  -758,
-    -758,  -758,  -758,  -758,   295,  -758,    35,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,   297,   301,   305,   307,
-     313,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,   316,  -758,  -758,  -758,    79,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,   327,  -758,   115,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,   333,
-     334,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-     168,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,   203,
-    -758,  -758,  -758,  -758,  -758,   337,  -758,   341,   342,  -758,
-    -758,  -758,  -758,   204,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,   344,   311,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,   346,  -758,  -758,   351,  -758,  -758,  -758,   354,  -758,
-    -758,   353,   359,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,   360,   361,  -758,  -758,
-    -758,  -758,   362,   364,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,   214,  -758,  -758,  -758,
-     368,  -758,  -758,   369,  -758,   371,   374,  -758,  -758,   375,
-     378,   384,  -758,  -758,  -758,  -758,  -758,   222,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,   241,  -758,  -758,  -758,    28,    28,
-    -758,   236,   386,   389,   390,   392,   393,  -758,    32,  -758,
-     394,   395,   396,   249,   250,   251,   253,   255,   404,   406,
-     407,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   270,   419,   436,   482,  -758,   437,   303,    36,  -758,
-      38,   456,   457,   458,   459,   460,   312,   309,   463,   464,
-     465,   466,    40,  -758,   467,    70,  -758,   468,   321,   470,
-     322,   323,     2,  -758,   474,   475,   476,   477,   478,   479,
-     480,  -758,   177,  -758,   484,   485,   338,   490,   491,   494,
-     343,  -758,   106,   496,   348,   349,  -758,   230,   503,   505,
-      53,  -758,   355,   506,   517,   373,   521,   376,   377,   524,
-     528,   379,   380,   381,   529,   530,   320,  -758,   536,    86,
-    -758,  -758,  -758,   537,   535,   539,    28,    28,    28,  -758,
-     540,   541,   547,  -758,  -758,  -758,  -758,  -758,   538,   550,
-     551,   552,   405,   558,   559,   561,   564,   565,   566,   567,
-     569,  -758,   570,   571,  -758,   568,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,   549,   576,  -758,  -758,  -758,   575,
-     577,   428,   432,   433,  -758,  -758,   284,   438,   584,   583,
-    -758,   439,  -758,   440,  -758,   441,  -758,  -758,  -758,   568,
-     568,   568,   442,   443,   444,   445,  -758,   446,   447,  -758,
-     448,   449,   450,  -758,  -758,   451,  -758,  -758,  -758,   452,
-      28,  -758,  -758,   453,   454,  -758,   455,  -758,  -758,    29,
-     487,  -758,  -758,  -758,    18,   461,  -758,   605,  -758,    28,
-     482,    86,  -758,  -758,  -758,    36,   174,   174,   604,   606,
-     608,  -758,  -758,  -758,   609,   -38,    28,    80,    43,   610,
-     150,   163,    83,   320,  -758,  -758,   614,  -758,    38,   612,
-     613,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,   615,
-     542,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,   616,  -758,   242,   243,   272,  -758,  -758,
-    -758,  -758,   617,   621,   622,   623,   624,  -758,  -758,  -758,
-     273,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,   275,  -758,   625,   626,  -758,  -758,
-     627,   629,  -758,  -758,   628,   633,  -758,  -758,   631,   635,
-    -758,  -758,  -758,    63,  -758,  -758,  -758,   634,  -758,  -758,
-    -758,   122,  -758,  -758,  -758,  -758,   128,  -758,   636,   638,
-    -758,   639,   640,   641,   642,   643,   644,   285,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,   645,   646,   647,
-    -758,  -758,  -758,  -758,   286,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,   287,  -758,  -758,  -758,
-     288,   486,   499,  -758,  -758,   648,   650,  -758,  -758,   649,
-     653,  -758,  -758,   651,   655,  -758,  -758,   652,  -758,   202,
-    -758,  -758,  -758,  -758,   657,   658,   659,   660,   511,   510,
-     513,   512,   515,   666,   667,   174,  -758,  -758,    40,  -758,
-     604,   106,  -758,   606,   230,  -758,   608,    73,  -758,   609,
-     -38,  -758,  -758,    80,  -758,    43,  -758,   -33,  -758,   610,
-     518,   519,   520,   522,   523,   525,   150,  -758,   671,   674,
-     526,   527,   531,   163,  -758,   678,   679,    83,  -758,  -758,
-    -758,   680,   656,  -758,    70,  -758,   612,     2,  -758,   613,
-     177,  -758,   615,   683,  -758,   153,   616,  -758,   247,   544,
-     553,   557,  -758,  -758,  -758,  -758,  -758,   562,   563,  -758,
-     289,  -758,   676,  -758,   681,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,   299,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,   300,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,   133,   574,  -758,
-    -758,  -758,  -758,   578,   579,  -758,  -758,   581,   310,  -758,
-     326,  -758,   682,  -758,   582,  -758,   684,  -758,  -758,  -758,
-    -758,  -758,   332,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,    73,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,   687,   546,   688,   153,
-    -758,  -758,   607,  -758,   585,  -758,   686,  -758,  -758,   215,
-    -758,   -89,   686,  -758,  -758,   690,   698,   699,   336,  -758,
-    -758,  -758,  -758,  -758,  -758,   716,   573,   586,   587,   -89,
-    -758,   589,  -758,  -758,  -758,  -758,  -758
+     304,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,    60,    28,    62,    80,    84,
+     119,   129,   153,   159,   168,   172,   181,   183,   185,   187,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,    28,     3,
+      32,   162,    34,    38,    97,    -2,   182,   164,   165,   248,
+     -28,   319,    95,  -768,   230,   268,   283,   280,   296,  -768,
+    -768,  -768,  -768,  -768,   301,  -768,   103,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,   323,   327,   348,   350,
+     360,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,   361,  -768,  -768,  -768,   131,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,   368,  -768,   151,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,   369,
+     371,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+     161,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,   207,
+    -768,  -768,  -768,  -768,  -768,   378,  -768,   385,   389,  -768,
+    -768,  -768,  -768,   208,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,   322,   383,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,   386,  -768,  -768,   392,  -768,  -768,  -768,   393,  -768,
+    -768,   390,   396,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,   400,   401,  -768,  -768,
+    -768,  -768,   399,   397,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,   236,  -768,  -768,  -768,
+     404,  -768,  -768,   406,  -768,   407,   415,  -768,  -768,   416,
+     417,   418,  -768,  -768,  -768,  -768,  -768,   240,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,   243,  -768,  -768,  -768,    28,    28,
+    -768,   269,   419,   422,   437,   455,   456,  -768,    32,  -768,
+     457,   458,   459,   309,   311,   312,   313,   314,   460,   462,
+     467,   468,   469,   471,   472,   473,   474,   475,   476,   477,
+     478,   328,   479,   484,   162,  -768,   485,   334,    34,  -768,
+      36,   489,   490,   491,   492,   493,   343,   340,   496,   500,
+     501,   503,    38,  -768,   505,    97,  -768,   506,   357,   507,
+     358,   362,    -2,  -768,   511,   512,   513,   515,   516,   517,
+     521,  -768,   182,  -768,   523,   524,   374,   527,   528,   529,
+     377,  -768,   165,   530,   379,   381,  -768,   248,   532,   534,
+      -7,  -768,   384,   536,   537,   387,   542,   391,   394,   544,
+     545,   395,   398,   405,   547,   548,   319,  -768,   550,    95,
+    -768,  -768,  -768,   551,   552,   557,    28,    28,    28,  -768,
+     558,   559,   561,  -768,  -768,  -768,  -768,  -768,   553,   564,
+     565,   566,   402,   567,   569,   570,   571,   572,   573,   574,
+     575,  -768,   576,   577,  -768,   580,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,   563,   583,  -768,  -768,  -768,   582,
+     584,   424,   425,   435,  -768,  -768,   -27,   436,   587,   586,
+    -768,   439,  -768,   440,  -768,   441,  -768,  -768,  -768,   580,
+     580,   580,   442,   443,   444,   445,  -768,   446,   447,  -768,
+     448,   449,   450,  -768,  -768,   451,  -768,  -768,  -768,   452,
+      28,  -768,  -768,   453,   454,  -768,   461,  -768,  -768,     2,
+     486,  -768,  -768,  -768,     5,   463,  -768,   606,  -768,    28,
+     162,    95,  -768,  -768,  -768,    34,   254,   254,   605,   607,
+     608,  -768,  -768,  -768,   610,   -36,    28,    25,    37,   612,
+     324,    50,    23,   319,  -768,  -768,   609,  -768,    36,   613,
+     614,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,   615,
+     539,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,   617,  -768,   246,   250,   264,  -768,  -768,
+    -768,  -768,   621,   622,   623,   624,   625,  -768,   626,   627,
+    -768,  -768,   293,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,   294,  -768,
+     628,   629,  -768,  -768,   630,   632,  -768,  -768,   631,   635,
+    -768,  -768,   633,   637,  -768,  -768,  -768,   132,  -768,  -768,
+    -768,   636,  -768,  -768,  -768,   139,  -768,  -768,  -768,  -768,
+     201,  -768,   638,   640,  -768,   641,   642,   643,   644,   645,
+     646,   300,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,   647,   648,   649,  -768,  -768,  -768,  -768,   306,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+     308,  -768,  -768,  -768,   310,   499,   502,  -768,  -768,   650,
+     652,  -768,  -768,   653,   655,  -768,  -768,   654,   658,  -768,
+    -768,   656,  -768,   338,  -768,  -768,  -768,  -768,   659,   661,
+     662,   663,   514,   483,   518,   504,   519,   664,   520,   522,
+     665,   254,  -768,  -768,    38,  -768,   605,   165,  -768,   607,
+     248,  -768,   608,    82,  -768,   610,   -36,  -768,  -768,    25,
+    -768,    37,  -768,   -28,  -768,   612,   525,   526,   531,   533,
+     535,   538,   324,  -768,   667,   668,   540,   541,   543,    50,
+    -768,   669,   673,    23,  -768,  -768,  -768,   674,   676,  -768,
+      97,  -768,   613,    -2,  -768,   614,   182,  -768,   615,   679,
+    -768,   215,   617,  -768,   209,   554,   578,   581,  -768,  -768,
+    -768,  -768,  -768,   585,  -768,  -768,   589,  -768,   326,  -768,
+     677,  -768,   678,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,   342,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,   352,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,   121,   590,  -768,  -768,  -768,
+    -768,   591,   592,  -768,  -768,   593,   359,  -768,   376,  -768,
+     680,  -768,   594,  -768,   686,  -768,  -768,  -768,  -768,  -768,
+     380,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,    82,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,   688,   556,   689,   215,  -768,  -768,
+     690,  -768,   596,  -768,   691,  -768,  -768,   355,  -768,   203,
+     691,  -768,  -768,   696,   699,   702,   382,  -768,  -768,  -768,
+    -768,  -768,  -768,   704,   568,   560,   579,   203,  -768,   597,
+    -768,  -768,  -768,  -768,  -768
   };
 
   const unsigned short int
@@ -3741,141 +3760,142 @@ namespace isc { namespace dhcp {
       20,    22,    24,    26,    28,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        1,    45,    38,    34,    33,    30,    31,    32,    37,     3,
-      35,    36,    58,     5,    70,     7,   106,     9,   222,    11,
-     363,    13,   386,    15,   414,    17,   288,    19,   296,    21,
-     333,    23,   187,    25,   507,    27,   564,    29,    47,    41,
-       0,     0,     0,     0,     0,     0,   416,     0,   298,   335,
+      35,    36,    58,     5,    70,     7,   106,     9,   226,    11,
+     367,    13,   390,    15,   418,    17,   292,    19,   300,    21,
+     337,    23,   191,    25,   511,    27,   568,    29,    47,    41,
+       0,     0,     0,     0,     0,     0,   420,     0,   302,   339,
        0,     0,     0,    49,     0,    48,     0,     0,    42,    68,
-     562,   556,   558,   560,     0,    67,     0,    60,    62,    64,
+     566,   560,   562,   564,     0,    67,     0,    60,    62,    64,
       65,    66,    63,   104,   118,   120,     0,     0,     0,     0,
-       0,   214,   286,   325,   374,   376,   260,   160,   177,   168,
-     449,   179,   198,   468,     0,   492,   505,    98,     0,    72,
+       0,   218,   290,   329,   378,   380,   264,   164,   181,   172,
+     453,   183,   202,   472,     0,   496,   509,    98,     0,    72,
       74,    75,    76,    77,    78,    81,    82,    83,    84,    86,
       85,    90,    91,    79,    80,    88,    89,    96,    97,    87,
       92,    93,    94,    95,   115,     0,   114,     0,   108,   110,
-     111,   112,   113,   453,   355,   378,   245,   247,   249,     0,
-       0,   253,   251,   406,   445,   244,   226,   227,   228,   229,
-       0,   224,   233,   234,   235,   238,   240,   236,   237,   230,
-     231,   242,   243,   232,   239,   241,   372,   371,   368,     0,
-     365,   367,   369,   370,   399,     0,   402,     0,     0,   398,
-     393,   396,   397,     0,   388,   390,   391,   394,   395,   392,
-     443,   431,   433,   435,   437,   439,   441,   430,   427,   428,
-     429,     0,   417,   418,   422,   423,   420,   424,   425,   426,
-     421,     0,   315,   150,     0,   319,   317,   322,     0,   311,
-     312,     0,   299,   300,   302,   314,   303,   304,   305,   321,
-     306,   307,   308,   309,   310,   349,     0,     0,   347,   348,
-     351,   352,     0,   336,   337,   339,   340,   341,   342,   343,
-     344,   345,   346,   194,   196,   191,     0,   189,   192,   193,
-       0,   529,   531,     0,   534,     0,     0,   538,   542,     0,
-       0,     0,   547,   554,   527,   525,   526,     0,   509,   511,
-     512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
-     522,   523,   524,   569,     0,   566,   568,    46,     0,     0,
+     111,   112,   113,   457,   359,   382,   249,   251,   253,     0,
+       0,   257,   255,   410,   449,   248,   230,   231,   232,   233,
+       0,   228,   237,   238,   239,   242,   244,   240,   241,   234,
+     235,   246,   247,   236,   243,   245,   376,   375,   372,     0,
+     369,   371,   373,   374,   403,     0,   406,     0,     0,   402,
+     397,   400,   401,     0,   392,   394,   395,   398,   399,   396,
+     447,   435,   437,   439,   441,   443,   445,   434,   431,   432,
+     433,     0,   421,   422,   426,   427,   424,   428,   429,   430,
+     425,     0,   319,   152,     0,   323,   321,   326,     0,   315,
+     316,     0,   303,   304,   306,   318,   307,   308,   309,   325,
+     310,   311,   312,   313,   314,   353,     0,     0,   351,   352,
+     355,   356,     0,   340,   341,   343,   344,   345,   346,   347,
+     348,   349,   350,   198,   200,   195,     0,   193,   196,   197,
+       0,   533,   535,     0,   538,     0,     0,   542,   546,     0,
+       0,     0,   551,   558,   531,   529,   530,     0,   513,   515,
+     516,   517,   518,   519,   520,   521,   522,   523,   524,   525,
+     526,   527,   528,   573,     0,   570,   572,    46,     0,     0,
       39,     0,     0,     0,     0,     0,     0,    57,     0,    59,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    71,     0,     0,     0,   107,
-     455,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   223,     0,     0,   364,     0,     0,     0,
-       0,     0,     0,   387,     0,     0,     0,     0,     0,     0,
-       0,   415,     0,   289,     0,     0,     0,     0,     0,     0,
-       0,   297,     0,     0,     0,     0,   334,     0,     0,     0,
-       0,   188,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   508,     0,     0,
-     565,    50,    43,     0,     0,     0,     0,     0,     0,    61,
+     459,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   227,     0,     0,   368,     0,     0,     0,
+       0,     0,     0,   391,     0,     0,     0,     0,     0,     0,
+       0,   419,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,   301,     0,     0,     0,     0,   338,     0,     0,     0,
+       0,   192,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   512,     0,     0,
+     569,    50,    43,     0,     0,     0,     0,     0,     0,    61,
        0,     0,     0,    99,   100,   101,   102,   103,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   491,     0,     0,    73,     0,   117,   109,   466,   464,
-     465,   461,   462,   463,     0,   456,   457,   459,   460,     0,
-       0,     0,     0,     0,   258,   259,     0,     0,     0,     0,
-     225,     0,   366,     0,   401,     0,   404,   405,   389,     0,
-       0,     0,     0,     0,     0,     0,   419,     0,     0,   313,
-       0,     0,     0,   324,   301,     0,   353,   354,   338,     0,
-       0,   190,   528,     0,     0,   533,     0,   536,   537,     0,
-       0,   544,   545,   546,     0,     0,   510,     0,   567,     0,
-       0,     0,   557,   559,   561,     0,     0,     0,   216,   290,
-     327,    40,   375,   377,   262,     0,    47,     0,     0,   181,
-       0,     0,     0,     0,    51,   116,     0,   454,     0,   357,
-     380,   246,   248,   250,   255,   256,   257,   254,   252,   408,
-       0,   373,   400,   403,   444,   432,   434,   436,   438,   440,
-     442,   316,   151,   320,   318,   323,   350,   195,   197,   530,
-     532,   535,   540,   541,   539,   543,   549,   550,   551,   552,
-     553,   548,   555,     0,    44,     0,     0,     0,   137,   143,
-     145,   147,     0,     0,     0,     0,     0,   156,   158,   136,
-       0,   122,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,     0,   220,     0,   217,   218,   294,
-       0,   291,   292,   331,     0,   328,   329,   266,     0,   263,
-     264,   166,   167,     0,   162,   164,   165,     0,   175,   176,
-     172,     0,   170,   173,   174,   451,     0,   185,     0,   182,
-     183,     0,     0,     0,     0,     0,     0,     0,   200,   202,
-     203,   204,   205,   206,   207,   481,   487,     0,     0,     0,
-     480,   477,   478,   479,     0,   470,   472,   475,   473,   474,
-     476,   501,   503,   500,   498,   499,     0,   494,   496,   497,
-       0,    53,     0,   458,   361,     0,   358,   359,   384,     0,
-     381,   382,   412,     0,   409,   410,   447,     0,   573,     0,
-     571,    69,   563,   105,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   119,   121,     0,   215,
-       0,   298,   287,     0,   335,   326,     0,     0,   261,     0,
-       0,   161,   178,     0,   169,     0,   450,     0,   180,     0,
-       0,     0,     0,     0,     0,     0,     0,   199,     0,     0,
-       0,     0,     0,     0,   469,     0,     0,     0,   493,   506,
-      55,     0,    54,   467,     0,   356,     0,     0,   379,     0,
-     416,   407,     0,     0,   446,     0,     0,   570,     0,     0,
-       0,     0,   149,   152,   153,   154,   155,     0,     0,   123,
-       0,   219,     0,   293,     0,   330,   285,   280,   282,   274,
-     275,   270,   271,   272,   273,   279,   278,   281,     0,   268,
-     276,   283,   284,   277,   265,   163,   171,   452,     0,   184,
-     208,   209,   210,   211,   212,   213,   201,     0,     0,   486,
-     489,   490,   471,     0,     0,   495,    52,     0,     0,   360,
-       0,   383,     0,   411,     0,   587,     0,   585,   583,   577,
-     581,   582,     0,   575,   579,   580,   578,   572,   139,   140,
-     141,   142,   138,   144,   146,   148,   157,   159,   221,   295,
-     332,     0,   267,   186,   483,   484,   485,   482,   488,   502,
-     504,    56,   362,   385,   413,   448,     0,     0,     0,     0,
-     574,   269,     0,   584,     0,   576,     0,   586,   591,     0,
-     589,     0,     0,   588,   599,     0,     0,     0,     0,   593,
-     595,   596,   597,   598,   590,     0,     0,     0,     0,     0,
-     592,     0,   601,   602,   603,   594,   600
+       0,   495,     0,     0,    73,     0,   117,   109,   470,   468,
+     469,   465,   466,   467,     0,   460,   461,   463,   464,     0,
+       0,     0,     0,     0,   262,   263,     0,     0,     0,     0,
+     229,     0,   370,     0,   405,     0,   408,   409,   393,     0,
+       0,     0,     0,     0,     0,     0,   423,     0,     0,   317,
+       0,     0,     0,   328,   305,     0,   357,   358,   342,     0,
+       0,   194,   532,     0,     0,   537,     0,   540,   541,     0,
+       0,   548,   549,   550,     0,     0,   514,     0,   571,     0,
+       0,     0,   561,   563,   565,     0,     0,     0,   220,   294,
+     331,    40,   379,   381,   266,     0,    47,     0,     0,   185,
+       0,     0,     0,     0,    51,   116,     0,   458,     0,   361,
+     384,   250,   252,   254,   259,   260,   261,   258,   256,   412,
+       0,   377,   404,   407,   448,   436,   438,   440,   442,   444,
+     446,   320,   153,   324,   322,   327,   354,   199,   201,   534,
+     536,   539,   544,   545,   543,   547,   553,   554,   555,   556,
+     557,   552,   559,     0,    44,     0,     0,     0,   139,   145,
+     147,   149,     0,     0,     0,     0,     0,   158,     0,     0,
+     162,   138,     0,   122,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,     0,   224,
+       0,   221,   222,   298,     0,   295,   296,   335,     0,   332,
+     333,   270,     0,   267,   268,   170,   171,     0,   166,   168,
+     169,     0,   179,   180,   176,     0,   174,   177,   178,   455,
+       0,   189,     0,   186,   187,     0,     0,     0,     0,     0,
+       0,     0,   204,   206,   207,   208,   209,   210,   211,   485,
+     491,     0,     0,     0,   484,   481,   482,   483,     0,   474,
+     476,   479,   477,   478,   480,   505,   507,   504,   502,   503,
+       0,   498,   500,   501,     0,    53,     0,   462,   365,     0,
+     362,   363,   388,     0,   385,   386,   416,     0,   413,   414,
+     451,     0,   577,     0,   575,    69,   567,   105,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   119,   121,     0,   219,     0,   302,   291,     0,
+     339,   330,     0,     0,   265,     0,     0,   165,   182,     0,
+     173,     0,   454,     0,   184,     0,     0,     0,     0,     0,
+       0,     0,     0,   203,     0,     0,     0,     0,     0,     0,
+     473,     0,     0,     0,   497,   510,    55,     0,    54,   471,
+       0,   360,     0,     0,   383,     0,   420,   411,     0,     0,
+     450,     0,     0,   574,     0,     0,     0,     0,   151,   154,
+     155,   156,   157,     0,   160,   161,     0,   123,     0,   223,
+       0,   297,     0,   334,   289,   284,   286,   278,   279,   274,
+     275,   276,   277,   283,   282,   285,     0,   272,   280,   287,
+     288,   281,   269,   167,   175,   456,     0,   188,   212,   213,
+     214,   215,   216,   217,   205,     0,     0,   490,   493,   494,
+     475,     0,     0,   499,    52,     0,     0,   364,     0,   387,
+       0,   415,     0,   591,     0,   589,   587,   581,   585,   586,
+       0,   579,   583,   584,   582,   576,   141,   142,   143,   144,
+     140,   146,   148,   150,   159,   163,   225,   299,   336,     0,
+     271,   190,   487,   488,   489,   486,   492,   506,   508,    56,
+     366,   389,   417,   452,     0,     0,     0,     0,   578,   273,
+       0,   588,     0,   580,     0,   590,   595,     0,   593,     0,
+       0,   592,   603,     0,     0,     0,     0,   597,   599,   600,
+     601,   602,   594,     0,     0,     0,     0,     0,   596,     0,
+     605,   606,   607,   598,   604
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,    -4,  -758,   111,  -758,
-    -758,  -758,  -758,  -758,  -758,    64,  -758,  -125,  -758,  -758,
-    -758,   -70,  -758,  -758,  -758,   398,  -758,  -758,  -758,  -758,
-     180,   382,   -72,   -59,   -56,   -54,  -758,  -758,  -758,  -758,
-    -758,   169,   383,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-     182,   -22,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,   -66,  -758,  -556,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,   -35,  -551,  -758,  -758,  -758,
-    -758,   -34,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-     -41,  -758,  -758,  -758,   -31,   347,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,   -44,  -758,  -758,  -758,  -758,  -758,  -758,
-    -757,  -758,  -758,  -758,   -17,  -758,  -758,  -758,    -7,   387,
-    -758,  -758,  -756,  -758,  -755,  -758,  -561,  -758,  -749,  -758,
-    -758,  -758,  -743,  -758,  -758,  -758,  -758,   -15,  -758,  -758,
-    -159,   693,  -758,  -758,  -758,  -758,  -758,    -1,  -758,  -758,
-    -758,     3,  -758,   363,  -758,   -61,  -758,  -758,  -758,  -758,
-    -758,   -48,  -758,  -758,  -758,  -758,  -758,    10,  -758,  -758,
-    -758,    -3,  -758,  -758,  -758,     5,  -758,   365,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,   -39,
-    -758,  -758,  -758,   -30,   400,  -758,  -758,   -49,  -758,   -11,
-    -758,  -758,  -758,  -758,  -758,   -36,  -758,  -758,  -758,   -37,
-     397,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,   -32,  -758,  -758,  -758,   -29,  -758,   391,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -741,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,   208,  -758,  -758,  -758,  -758,  -758,  -758,
-      -9,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,   -26,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,   224,   352,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,  -758,
-    -758,  -758,  -758,  -758,  -758,  -758,  -758,   244,   366,  -758,
-    -758,  -758,   -28,  -758,  -758,  -140,  -758,  -758,  -758,  -758,
-    -758,  -758,  -152,  -758,  -758,  -168,  -758,  -758,  -758,  -758,
-    -758
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,    -4,  -768,   223,  -768,
+    -768,  -768,  -768,  -768,  -768,    67,  -768,  -461,  -768,  -768,
+    -768,   -70,  -768,  -768,  -768,   403,  -768,  -768,  -768,  -768,
+     171,   366,   -72,   -59,   -56,   -54,  -768,  -768,  -768,  -768,
+    -768,   167,   370,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+     180,   -29,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,   -66,  -768,  -564,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,   -32,  -547,  -768,
+    -768,  -768,  -768,   -34,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,   -38,  -768,  -768,  -768,   -35,   339,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,   -40,  -768,  -768,  -768,  -768,
+    -768,  -768,  -767,  -768,  -768,  -768,    -9,  -768,  -768,  -768,
+      -6,   388,  -768,  -768,  -762,  -768,  -761,  -768,  -553,  -768,
+    -755,  -768,  -768,  -768,  -749,  -768,  -768,  -768,  -768,   -12,
+    -768,  -768,  -154,   701,  -768,  -768,  -768,  -768,  -768,    -3,
+    -768,  -768,  -768,     4,  -768,   367,  -768,   -61,  -768,  -768,
+    -768,  -768,  -768,   -48,  -768,  -768,  -768,  -768,  -768,    10,
+    -768,  -768,  -768,     1,  -768,  -768,  -768,     0,  -768,   372,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,   -37,  -768,  -768,  -768,   -33,   409,  -768,  -768,   -49,
+    -768,   -11,  -768,  -768,  -768,  -768,  -768,   -39,  -768,  -768,
+    -768,   -31,   408,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,   -25,  -768,  -768,  -768,   -30,  -768,
+     411,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -747,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,   210,  -768,  -768,  -768,  -768,
+    -768,  -768,   -19,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,   -22,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,   222,   363,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,
+    -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,  -768,   253,
+     375,  -768,  -768,  -768,   -26,  -768,  -768,  -150,  -768,  -768,
+    -768,  -768,  -768,  -768,  -159,  -768,  -768,  -172,  -768,  -768,
+    -768,  -768,  -768
   };
 
   const short int
@@ -3883,407 +3903,408 @@ namespace isc { namespace dhcp {
   {
       -1,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    83,    39,    40,    69,
-     562,    87,    88,    41,    68,    84,    85,   575,   731,   811,
-     812,   127,    43,    70,    96,    97,    98,   332,    45,    71,
+     562,    87,    88,    41,    68,    84,    85,   575,   735,   817,
+     818,   127,    43,    70,    96,    97,    98,   332,    45,    71,
      128,   129,   130,   131,   132,   133,   134,   135,   340,    47,
       72,   157,   158,   159,   366,   160,   136,   341,   137,   342,
-     640,   641,   642,   754,   912,   643,   755,   644,   756,   645,
-     757,   646,   250,   405,   648,   649,   650,   651,   652,   763,
-     653,   764,   138,   354,   673,   674,   675,   676,   139,   356,
-     681,   682,   683,   684,   140,   355,   141,   358,   688,   689,
-     690,   787,    63,    80,   286,   287,   288,   418,   289,   419,
-     142,   359,   697,   698,   699,   700,   701,   702,   703,   704,
-     143,   348,   656,   657,   658,   768,    49,    73,   180,   181,
-     182,   373,   183,   374,   184,   375,   185,   379,   186,   378,
-     587,   187,   188,   144,   353,   668,   669,   670,   777,   858,
-     859,   145,   349,    57,    77,   660,   661,   662,   771,    59,
-      78,   251,   252,   253,   254,   255,   256,   257,   404,   258,
-     408,   259,   407,   260,   261,   409,   262,   146,   350,   664,
-     665,   666,   774,    61,    79,   272,   273,   274,   275,   276,
-     413,   277,   278,   279,   280,   190,   371,   735,   736,   737,
-     814,    51,    74,   199,   200,   201,   384,   147,   351,   148,
-     352,   193,   372,   739,   740,   741,   817,    53,    75,   213,
-     214,   215,   387,   216,   217,   389,   218,   219,   194,   380,
-     743,   744,   745,   820,    55,    76,   231,   232,   233,   234,
-     395,   235,   396,   236,   397,   237,   398,   238,   399,   239,
-     400,   240,   394,   195,   381,   747,   823,   149,   357,   686,
-     370,   484,   485,   486,   487,   488,   576,   150,   360,   714,
-     715,   716,   798,   927,   717,   718,   799,   719,   720,   151,
-     152,   362,   726,   727,   728,   805,   729,   806,   153,   363,
-      65,    81,   307,   308,   309,   310,   423,   311,   424,   312,
-     313,   426,   314,   315,   316,   429,   614,   317,   430,   318,
-     319,   320,   321,   434,   621,   322,   435,    99,   334,   100,
-     335,   101,   336,   102,   333,    67,    82,   324,   325,   326,
-     438,   749,   750,   825,   902,   903,   904,   905,   938,   906,
-     936,   949,   950,   951,   958,   959,   960,   965,   961,   962,
-     963
+     642,   643,   644,   758,   920,   645,   759,   646,   760,   647,
+     761,   648,   250,   405,   650,   651,   652,   653,   654,   767,
+     655,   656,   657,   770,   138,   354,   677,   678,   679,   680,
+     139,   356,   685,   686,   687,   688,   140,   355,   141,   358,
+     692,   693,   694,   793,    63,    80,   286,   287,   288,   418,
+     289,   419,   142,   359,   701,   702,   703,   704,   705,   706,
+     707,   708,   143,   348,   660,   661,   662,   774,    49,    73,
+     180,   181,   182,   373,   183,   374,   184,   375,   185,   379,
+     186,   378,   587,   187,   188,   144,   353,   672,   673,   674,
+     783,   866,   867,   145,   349,    57,    77,   664,   665,   666,
+     777,    59,    78,   251,   252,   253,   254,   255,   256,   257,
+     404,   258,   408,   259,   407,   260,   261,   409,   262,   146,
+     350,   668,   669,   670,   780,    61,    79,   272,   273,   274,
+     275,   276,   413,   277,   278,   279,   280,   190,   371,   739,
+     740,   741,   820,    51,    74,   199,   200,   201,   384,   147,
+     351,   148,   352,   193,   372,   743,   744,   745,   823,    53,
+      75,   213,   214,   215,   387,   216,   217,   389,   218,   219,
+     194,   380,   747,   748,   749,   826,    55,    76,   231,   232,
+     233,   234,   395,   235,   396,   236,   397,   237,   398,   238,
+     399,   239,   400,   240,   394,   195,   381,   751,   829,   149,
+     357,   690,   370,   484,   485,   486,   487,   488,   576,   150,
+     360,   718,   719,   720,   804,   935,   721,   722,   805,   723,
+     724,   151,   152,   362,   730,   731,   732,   811,   733,   812,
+     153,   363,    65,    81,   307,   308,   309,   310,   423,   311,
+     424,   312,   313,   426,   314,   315,   316,   429,   614,   317,
+     430,   318,   319,   320,   321,   434,   621,   322,   435,    99,
+     334,   100,   335,   101,   336,   102,   333,    67,    82,   324,
+     325,   326,   438,   753,   754,   831,   910,   911,   912,   913,
+     946,   914,   944,   957,   958,   959,   966,   967,   968,   973,
+     969,   970,   971
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-      95,   176,   156,   175,   197,   209,   227,   685,   249,   268,
-     285,   304,    38,   269,   177,   711,   680,   178,   270,   179,
-     852,   853,   854,   161,   191,   202,   211,   229,   856,   263,
-     281,   271,   305,    31,   857,    32,   863,    33,   338,   671,
-     113,   954,    89,   339,   955,   956,   957,   163,   154,   155,
-     163,   283,   284,   204,   205,   206,   207,   208,   114,   115,
-      30,   162,   192,   203,   212,   230,   780,   264,   282,   781,
-     306,   106,   107,   108,   109,    42,   113,   243,   113,    44,
-     163,    46,   364,   189,   198,   210,   228,   365,   164,    48,
-     165,    50,   114,   115,   114,   115,   114,   115,   166,   167,
-     168,   169,   170,   171,   106,   107,   108,   109,   113,   111,
-     478,   113,   243,   172,   173,   672,   172,    52,   368,   196,
-      94,   174,   242,   369,    54,   783,   114,   115,   784,   114,
-     115,   785,   167,   168,   786,   170,   171,   283,   284,   114,
-     115,   616,   617,   618,   619,   243,   172,   244,   245,   612,
-     613,   246,   247,   248,   174,    94,    56,   671,   678,    90,
-     679,    58,   114,   115,   852,   853,   854,    60,    91,    92,
-      93,   382,   856,    62,   620,    86,   383,    64,   857,   705,
-     863,    34,    35,    36,    37,    94,   721,   722,   633,    94,
-     628,    94,   243,    94,    66,   629,   630,   631,   632,   633,
-     634,   635,   636,   637,   638,   826,   385,   392,   827,   114,
-     115,   386,   393,   243,   323,   113,   855,   420,   952,   114,
-     115,   953,   421,    94,   867,   436,    94,   924,   925,   926,
-     437,   112,   680,   114,   115,   327,    94,   691,   692,   693,
-     694,   695,   696,   328,   439,   364,   439,   711,   220,   440,
-     751,   752,   221,   222,   223,   224,   225,   226,   329,    94,
-     706,   707,   708,   709,   908,   909,   910,   911,    95,   243,
-     265,   244,   245,   266,   267,   368,   765,   330,   765,   331,
-     753,   766,   895,   767,   896,   897,   114,   115,   796,   803,
-     807,   436,   382,   797,   804,   808,   809,   918,   156,   337,
-     479,   343,   921,   420,   480,   344,    94,   922,   923,   345,
-     176,   346,   175,   385,   402,   197,    94,   347,   932,   161,
-     361,   482,   209,   177,   441,   442,   178,    94,   179,   392,
-      94,   367,   227,   191,   933,   939,   202,   376,   377,   969,
-     940,   388,   249,   211,   970,   390,   391,   268,   584,   585,
-     586,   269,   401,   229,   403,   406,   270,   162,   410,   483,
-     855,   411,   412,   263,   414,   415,   304,   417,   281,   271,
-     416,   192,   422,   425,   203,   427,   114,   115,   428,   431,
-     481,   212,   432,    94,   594,   595,   596,   305,   433,   443,
-     444,   230,   189,   445,   446,   198,   447,   448,   450,   451,
-     452,   264,   210,   453,   454,   455,   282,   456,   458,   457,
-     459,   460,   228,   461,   462,   463,   464,   465,   466,   467,
-     468,   469,   470,   472,   471,   306,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     473,   475,   552,   553,   554,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,   476,
-     489,   490,   491,   492,   493,   495,   494,   496,   497,   498,
-     499,   501,   503,    94,   505,   504,   506,   507,   509,   510,
-     511,   512,   513,   514,   515,   156,   639,   639,   517,   518,
-     647,   647,   519,   103,   520,   521,   104,   105,   522,   523,
-     525,   710,   723,   304,   526,   527,   161,   529,   479,   530,
-     533,   532,   480,   106,   107,   108,   109,   110,   111,   112,
-     113,   534,   712,   724,   305,   536,   608,   535,   539,   482,
-     537,   538,   540,   544,   545,   541,   542,   543,   114,   115,
-     547,   549,   550,   558,   162,   624,   551,   555,   556,   116,
-     117,   118,   119,   120,   557,   559,   560,   577,   563,    32,
-     713,   725,   306,   564,   565,   121,   566,   483,   122,   567,
-     568,   569,   561,   574,   570,   123,   571,   572,   573,   578,
-     579,   581,   580,   124,   125,   582,   583,   126,   481,   589,
-     590,   588,   591,   592,   593,   597,   598,   599,   600,   601,
-     602,   603,   604,   605,   606,   607,   609,   610,   611,   615,
-     623,   655,   946,   659,   622,   663,   667,   687,   732,   734,
-     738,   758,   742,   748,   746,   759,   760,   761,   762,   770,
-     677,   769,   773,   772,   775,    94,   776,   778,   779,   810,
-     782,   789,   788,   790,   791,   792,   793,   794,   795,   800,
-     801,   802,   813,   816,   815,   818,   819,   821,   822,   887,
-     824,   828,   829,   830,   831,   832,   833,   834,   835,   836,
-     837,   838,   870,   871,   872,   877,   873,   874,   878,   875,
-     879,   880,   883,   884,   919,   881,   886,   894,   937,   920,
-     934,   942,   944,   948,   966,   639,   176,   913,   175,   647,
-     943,   249,   967,   968,   268,   847,   914,   846,   269,   177,
-     915,   851,   178,   270,   179,   916,   917,   285,   848,   191,
-     971,   849,   263,   850,   627,   281,   271,   928,   861,   972,
-     625,   929,   930,   710,   931,   935,   449,   723,   947,   654,
-     973,   974,   976,   839,   197,   865,   474,   209,   869,   866,
-     227,   477,   876,   841,   712,   898,   868,   192,   724,   899,
-     264,   840,   941,   282,   864,   202,   862,   531,   211,   500,
-     241,   229,   843,   845,   842,   524,   900,   889,   189,   844,
-     890,   885,   528,   891,   888,   502,   733,   860,   546,   508,
-     893,   892,   713,   516,   882,   626,   725,   730,   907,   945,
-     964,   975,     0,   203,     0,   548,   212,     0,     0,   230,
-       0,     0,     0,     0,   901,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   198,     0,     0,   210,     0,     0,
-     228,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   847,
-       0,   846,     0,     0,     0,   851,     0,     0,     0,     0,
-       0,     0,   848,     0,     0,   849,     0,   850,     0,   898,
-       0,     0,   861,   899,     0,     0,     0,     0,     0,     0,
+      95,   176,   156,   175,   197,   209,   227,   715,   249,   268,
+     285,   304,    38,   269,   177,   689,   860,   178,   270,   179,
+     684,   861,   862,   161,   191,   202,   211,   229,   864,   263,
+     281,   271,   305,    31,   865,    32,   871,    33,   113,   584,
+     585,   586,    89,   675,   163,   163,   154,   155,   594,   595,
+     596,   204,   205,   206,   207,   208,   114,   115,   283,   284,
+      30,   162,   192,   203,   212,   230,   709,   264,   282,    42,
+     306,   106,   107,   108,   109,   633,   113,   243,   113,   283,
+     284,   114,   115,   189,   198,   210,   228,    44,   164,   163,
+     165,    46,   114,   115,   114,   115,   114,   115,   166,   167,
+     168,   169,   170,   171,   675,   682,   338,   683,   114,   115,
+     478,   339,   172,   172,   173,   106,   107,   108,   109,   676,
+     111,   174,   113,   243,   612,   613,    48,    94,   725,   726,
+     616,   617,   618,   619,   364,   786,    50,   113,   787,   365,
+     114,   115,   789,   167,   168,   790,   170,   171,   196,   710,
+     711,   712,   713,    94,   368,   114,   115,   172,    86,   369,
+      52,    90,   860,   620,   382,   174,    54,   861,   862,   383,
+      91,    92,    93,   103,   864,    56,   104,   105,    94,    58,
+     865,   242,   871,    34,    35,    36,    37,    94,    60,    94,
+      62,    94,    64,    94,    66,   106,   107,   108,   109,   110,
+     111,   112,   113,   112,   791,    94,   243,   792,   244,   245,
+     385,   392,   246,   247,   248,   386,   393,   932,   933,   934,
+     114,   115,   113,   114,   115,   323,   916,   917,   918,   919,
+     863,   116,   117,   118,   119,   120,   327,    94,   875,   420,
+     114,   115,   684,   436,   421,   715,   439,   121,   437,   364,
+     122,   440,    94,   439,   755,   220,   243,   123,   756,   221,
+     222,   223,   224,   225,   226,   124,   125,   368,    95,   126,
+     628,   328,   757,   114,   115,   629,   630,   631,   632,   633,
+     634,   635,   636,   637,   638,   639,   640,   329,   330,   243,
+     265,   244,   245,   266,   267,   243,   771,   771,   156,   331,
+     479,   772,   773,   802,   480,   337,   114,   115,   803,   809,
+     176,   813,   175,   436,   810,   197,   814,    94,   815,   161,
+      94,   482,   209,   177,   441,   442,   178,   343,   179,   382,
+     401,   344,   227,   191,   926,   962,   202,    94,   963,   964,
+     965,   832,   249,   211,   833,   929,   903,   268,   904,   905,
+     930,   269,   345,   229,   346,   420,   270,   162,   960,   483,
+     931,   961,   385,   263,   347,   361,   304,   940,   281,   271,
+      94,   192,   367,   376,   203,   377,   863,   114,   115,   392,
+     481,   212,   388,   947,   941,   977,   402,   305,   948,   390,
+     978,   230,   189,   391,   403,   198,   406,   410,   411,   412,
+     417,   264,   210,    94,   414,   415,   282,   416,   422,    94,
+     425,   427,   228,   695,   696,   697,   698,   699,   700,   428,
+     431,   432,   433,   444,   443,   306,   445,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   446,   552,   553,   554,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,   447,
+     448,   450,   451,   452,   458,   453,   459,   454,   455,   456,
+     457,   460,   461,   462,    94,   463,   464,   465,   466,   467,
+     468,   469,   470,   472,   471,   156,   641,   641,   473,   475,
+     649,   649,   476,   489,   490,   491,   492,   493,   495,   494,
+     496,   714,   727,   304,   497,   498,   161,   499,   479,   501,
+     503,   505,   480,   504,   506,   509,   510,   511,   507,   512,
+     513,   514,   716,   728,   305,   515,   608,   517,   518,   482,
+     519,   520,   521,   522,   525,   523,   529,   526,   530,   527,
+     533,   534,   532,   535,   162,   624,   536,   537,   539,   540,
+     538,   544,   545,   541,   547,   549,   542,   563,   558,   550,
+     717,   729,   306,   543,   551,   555,   556,   483,   557,   559,
+     560,   577,   564,    32,   565,   566,   567,   568,   569,   581,
+     582,   570,   571,   572,   573,   574,   578,   579,   481,   580,
+     583,   588,   589,   590,   591,   592,   593,   597,   598,   599,
+     600,   601,   602,   603,   604,   605,   606,   607,   609,   610,
+     615,   623,   659,   736,   663,   667,   611,   671,   622,   691,
+     738,   742,   746,   750,   752,   762,   763,   764,   765,   766,
+     768,   769,   776,   681,   775,   779,   778,   781,   782,   784,
+     785,   839,   788,   795,   794,   796,   797,   798,   799,   800,
+     801,   806,   807,   808,   816,   822,   821,   819,   825,   824,
+     827,   828,   841,   834,   830,   835,   836,   837,   843,   846,
+     838,   885,   886,   891,   840,   842,   844,   892,   845,   895,
+     894,   878,   879,   902,   561,   927,   928,   880,   942,   881,
+     945,   882,   950,   952,   883,   954,   887,   888,   956,   889,
+     974,   641,   176,   975,   175,   649,   976,   249,   979,   921,
+     268,   855,   951,   854,   269,   177,   981,   859,   178,   270,
+     179,   625,   627,   285,   856,   191,   980,   857,   263,   858,
+     474,   281,   271,   922,   869,   982,   923,   658,   477,   714,
+     924,   449,   847,   727,   925,   936,   937,   938,   939,   943,
+     197,   955,   984,   209,   873,   874,   227,   877,   876,   531,
+     716,   906,   884,   192,   728,   907,   264,   849,   848,   282,
+     500,   202,   870,   872,   211,   949,   851,   229,   241,   524,
+     852,   850,   908,   853,   189,   897,   899,   896,   737,   528,
+     890,   893,   898,   868,   502,   734,   900,   953,   717,   546,
+     508,   972,   729,   901,   626,   983,   915,     0,     0,   203,
+       0,     0,   212,   516,   548,   230,     0,     0,     0,     0,
+     909,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     198,     0,     0,   210,     0,     0,   228,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   855,     0,   854,
+       0,     0,     0,   859,     0,     0,     0,     0,     0,     0,
+     856,     0,     0,   857,     0,   858,     0,   906,     0,     0,
+     869,   907,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   908,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     900,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   870,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     862,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   901,     0,
-       0,   860
+       0,     0,     0,     0,     0,     0,   909,     0,     0,   868
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
-      70,    73,    72,    73,    74,    75,    76,   568,    78,    79,
-      80,    81,    16,    79,    73,   571,   567,    73,    79,    73,
-     777,   777,   777,    72,    73,    74,    75,    76,   777,    78,
-      79,    79,    81,     5,   777,     7,   777,     9,     3,    77,
-      38,   130,    10,     8,   133,   134,   135,     7,    12,    13,
-       7,    84,    85,    51,    52,    53,    54,    55,    56,    57,
-       0,    72,    73,    74,    75,    76,     3,    78,    79,     6,
-      81,    31,    32,    33,    34,     7,    38,    39,    38,     7,
-       7,     7,     3,    73,    74,    75,    76,     8,    48,     7,
-      50,     7,    56,    57,    56,    57,    56,    57,    58,    59,
-      60,    61,    62,    63,    31,    32,    33,    34,    38,    36,
-      72,    38,    39,    73,    74,   153,    73,     7,     3,    49,
-     153,    81,    16,     8,     7,     3,    56,    57,     6,    56,
-      57,     3,    59,    60,     6,    62,    63,    84,    85,    56,
-      57,   123,   124,   125,   126,    39,    73,    41,    42,   120,
-     121,    45,    46,    47,    81,   153,     7,    77,    78,   127,
-      80,     7,    56,    57,   921,   921,   921,     7,   136,   137,
-     138,     3,   921,     7,   156,   153,     8,     7,   921,    16,
-     921,   153,   154,   155,   156,   153,   103,   104,    25,   153,
-      16,   153,    39,   153,     7,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,     3,     3,     3,     6,    56,
-      57,     8,     8,    39,   128,    38,   777,     3,     3,    56,
-      57,     6,     8,   153,   785,     3,   153,    94,    95,    96,
-       8,    37,   783,    56,    57,     6,   153,    87,    88,    89,
-      90,    91,    92,     3,     3,     3,     3,   803,    71,     8,
-       8,     8,    75,    76,    77,    78,    79,    80,     4,   153,
-      97,    98,    99,   100,    17,    18,    19,    20,   338,    39,
-      40,    41,    42,    43,    44,     3,     3,     8,     3,     3,
-       8,     8,   129,     8,   131,   132,    56,    57,     3,     3,
-       3,     3,     3,     8,     8,     8,     8,     8,   368,     4,
-     370,     4,     3,     3,   370,     4,   153,     8,     8,     4,
-     382,     4,   382,     3,     3,   385,   153,     4,     8,   368,
-       4,   370,   392,   382,   328,   329,   382,   153,   382,     3,
-     153,     4,   402,   382,     8,     3,   385,     4,     4,     3,
-       8,     4,   412,   392,     8,     4,     4,   417,    64,    65,
-      66,   417,     8,   402,     8,     4,   417,   368,     4,   370,
-     921,     8,     3,   412,     4,     4,   436,     3,   417,   417,
-       8,   382,     4,     4,   385,     4,    56,    57,     4,     4,
-     370,   392,     4,   153,   509,   510,   511,   436,     4,   153,
-       4,   402,   382,     4,     4,   385,     4,     4,     4,     4,
-       4,   412,   392,   154,   154,   154,   417,   154,     4,   154,
-       4,     4,   402,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,   154,   436,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-       4,     4,   446,   447,   448,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   156,
-       4,     4,     4,     4,     4,   156,   154,     4,     4,     4,
-       4,     4,     4,   153,     4,   154,   154,   154,     4,     4,
-       4,     4,     4,     4,     4,   555,   556,   557,     4,     4,
-     556,   557,   154,    11,     4,     4,    14,    15,     4,   156,
-       4,   571,   572,   573,   156,   156,   555,     4,   578,     4,
-       4,   156,   578,    31,    32,    33,    34,    35,    36,    37,
-      38,     4,   571,   572,   573,     4,   530,   154,     4,   578,
-     154,   154,     4,     4,     4,   156,   156,   156,    56,    57,
-       4,     4,     7,     5,   555,   549,     7,     7,     7,    67,
-      68,    69,    70,    71,     7,     5,     5,     8,   153,     7,
-     571,   572,   573,     5,     5,    83,     5,   578,    86,     5,
-       5,     5,   461,     5,     7,    93,     7,     7,     7,     3,
-       5,   153,     5,   101,   102,   153,   153,   105,   578,     5,
-       7,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   153,   122,
-       5,     7,     5,     7,   153,     7,     7,     7,     4,     7,
-       7,     4,     7,     7,    82,     4,     4,     4,     4,     3,
-     566,     6,     3,     6,     6,   153,     3,     6,     3,   153,
-       6,     3,     6,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,   153,     3,     6,     6,     3,     6,     3,     3,
-       8,     4,     4,     4,     4,   154,   156,   154,   156,   154,
-       4,     4,   154,   154,   154,     4,   154,   154,     4,   154,
-     154,   154,     4,     4,     8,   154,     6,     4,     4,     8,
-       8,     4,     4,     7,     4,   765,   768,   153,   768,   765,
-     154,   771,     4,     4,   774,   777,   153,   777,   774,   768,
-     153,   777,   768,   774,   768,   153,   153,   787,   777,   768,
-       4,   777,   771,   777,   555,   774,   774,   153,   777,   156,
-     550,   153,   153,   803,   153,   153,   338,   807,   153,   557,
-     154,   154,   153,   765,   814,   780,   364,   817,   789,   783,
-     820,   368,   796,   770,   803,   825,   787,   768,   807,   825,
-     771,   768,   921,   774,   779,   814,   777,   420,   817,   382,
-      77,   820,   773,   776,   771,   412,   825,   816,   768,   774,
-     817,   807,   417,   819,   814,   385,   578,   777,   436,   392,
-     822,   820,   803,   402,   803,   551,   807,   573,   826,   939,
-     952,   969,    -1,   814,    -1,   439,   817,    -1,    -1,   820,
-      -1,    -1,    -1,    -1,   825,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   814,    -1,    -1,   817,    -1,    -1,
-     820,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   921,
-      -1,   921,    -1,    -1,    -1,   921,    -1,    -1,    -1,    -1,
-      -1,    -1,   921,    -1,    -1,   921,    -1,   921,    -1,   939,
-      -1,    -1,   921,   939,    -1,    -1,    -1,    -1,    -1,    -1,
+      70,    73,    72,    73,    74,    75,    76,   571,    78,    79,
+      80,    81,    16,    79,    73,   568,   783,    73,    79,    73,
+     567,   783,   783,    72,    73,    74,    75,    76,   783,    78,
+      79,    79,    81,     5,   783,     7,   783,     9,    40,    66,
+      67,    68,    10,    79,     7,     7,    12,    13,   509,   510,
+     511,    53,    54,    55,    56,    57,    58,    59,    86,    87,
+       0,    72,    73,    74,    75,    76,    16,    78,    79,     7,
+      81,    33,    34,    35,    36,    25,    40,    41,    40,    86,
+      87,    58,    59,    73,    74,    75,    76,     7,    50,     7,
+      52,     7,    58,    59,    58,    59,    58,    59,    60,    61,
+      62,    63,    64,    65,    79,    80,     3,    82,    58,    59,
+      74,     8,    75,    75,    76,    33,    34,    35,    36,   155,
+      38,    83,    40,    41,   122,   123,     7,   155,   105,   106,
+     125,   126,   127,   128,     3,     3,     7,    40,     6,     8,
+      58,    59,     3,    61,    62,     6,    64,    65,    51,    99,
+     100,   101,   102,   155,     3,    58,    59,    75,   155,     8,
+       7,   129,   929,   158,     3,    83,     7,   929,   929,     8,
+     138,   139,   140,    11,   929,     7,    14,    15,   155,     7,
+     929,    16,   929,   155,   156,   157,   158,   155,     7,   155,
+       7,   155,     7,   155,     7,    33,    34,    35,    36,    37,
+      38,    39,    40,    39,     3,   155,    41,     6,    43,    44,
+       3,     3,    47,    48,    49,     8,     8,    96,    97,    98,
+      58,    59,    40,    58,    59,   130,    17,    18,    19,    20,
+     783,    69,    70,    71,    72,    73,     6,   155,   791,     3,
+      58,    59,   789,     3,     8,   809,     3,    85,     8,     3,
+      88,     8,   155,     3,     8,    73,    41,    95,     8,    77,
+      78,    79,    80,    81,    82,   103,   104,     3,   338,   107,
+      16,     3,     8,    58,    59,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,     4,     8,    41,
+      42,    43,    44,    45,    46,    41,     3,     3,   368,     3,
+     370,     8,     8,     3,   370,     4,    58,    59,     8,     3,
+     382,     3,   382,     3,     8,   385,     8,   155,     8,   368,
+     155,   370,   392,   382,   328,   329,   382,     4,   382,     3,
+       8,     4,   402,   382,     8,   132,   385,   155,   135,   136,
+     137,     3,   412,   392,     6,     3,   131,   417,   133,   134,
+       8,   417,     4,   402,     4,     3,   417,   368,     3,   370,
+       8,     6,     3,   412,     4,     4,   436,     8,   417,   417,
+     155,   382,     4,     4,   385,     4,   929,    58,    59,     3,
+     370,   392,     4,     3,     8,     3,     3,   436,     8,     4,
+       8,   402,   382,     4,     8,   385,     4,     4,     8,     3,
+       3,   412,   392,   155,     4,     4,   417,     8,     4,   155,
+       4,     4,   402,    89,    90,    91,    92,    93,    94,     4,
+       4,     4,     4,     4,   155,   436,     4,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,     4,   446,   447,   448,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,     4,
+       4,     4,     4,     4,     4,   156,     4,   156,   156,   156,
+     156,     4,     4,     4,   155,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,   156,   555,   556,   557,     4,     4,
+     556,   557,   158,     4,     4,     4,     4,     4,   158,   156,
+       4,   571,   572,   573,     4,     4,   555,     4,   578,     4,
+       4,     4,   578,   156,   156,     4,     4,     4,   156,     4,
+       4,     4,   571,   572,   573,     4,   530,     4,     4,   578,
+     156,     4,     4,     4,     4,   158,     4,   158,     4,   158,
+       4,     4,   158,   156,   555,   549,     4,   156,     4,     4,
+     156,     4,     4,   158,     4,     4,   158,   155,     5,     7,
+     571,   572,   573,   158,     7,     7,     7,   578,     7,     5,
+       5,     8,     5,     7,     5,     5,     5,     5,     5,   155,
+     155,     7,     7,     7,     7,     5,     3,     5,   578,     5,
+     155,   155,     5,     7,   155,   155,   155,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
+     124,     5,     7,     4,     7,     7,   155,     7,   155,     7,
+       7,     7,     7,    84,     7,     4,     4,     4,     4,     4,
+       4,     4,     3,   566,     6,     3,     6,     6,     3,     6,
+       3,   158,     6,     3,     6,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,   155,     3,     6,   155,     3,     6,
+       6,     3,   158,     4,     8,     4,     4,     4,     4,     4,
+     156,     4,     4,     4,   156,   156,   156,     4,   156,     3,
+       6,   156,   156,     4,   461,     8,     8,   156,     8,   156,
+       4,   156,     4,     4,   156,     5,   156,   156,     7,   156,
+       4,   771,   774,     4,   774,   771,     4,   777,     4,   155,
+     780,   783,   156,   783,   780,   774,   156,   783,   774,   780,
+     774,   550,   555,   793,   783,   774,   158,   783,   777,   783,
+     364,   780,   780,   155,   783,   156,   155,   557,   368,   809,
+     155,   338,   771,   813,   155,   155,   155,   155,   155,   155,
+     820,   155,   155,   823,   786,   789,   826,   795,   793,   420,
+     809,   831,   802,   774,   813,   831,   777,   776,   774,   780,
+     382,   820,   783,   785,   823,   929,   779,   826,    77,   412,
+     780,   777,   831,   782,   774,   822,   825,   820,   578,   417,
+     809,   813,   823,   783,   385,   573,   826,   947,   809,   436,
+     392,   960,   813,   828,   551,   977,   832,    -1,    -1,   820,
+      -1,    -1,   823,   402,   439,   826,    -1,    -1,    -1,    -1,
+     831,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     820,    -1,    -1,   823,    -1,    -1,   826,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     939,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   929,    -1,   929,
+      -1,    -1,    -1,   929,    -1,    -1,    -1,    -1,    -1,    -1,
+     929,    -1,    -1,   929,    -1,   929,    -1,   947,    -1,    -1,
+     929,   947,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   947,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     921,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   939,    -1,
-      -1,   921
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   929,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   947,    -1,    -1,   929
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
-       0,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-       0,     5,     7,     9,   153,   154,   155,   156,   173,   174,
-     175,   180,     7,   189,     7,   195,     7,   206,     7,   283,
-       7,   358,     7,   374,     7,   391,     7,   310,     7,   316,
-       7,   340,     7,   259,     7,   447,     7,   482,   181,   176,
-     190,   196,   207,   284,   359,   375,   392,   311,   317,   341,
-     260,   448,   483,   173,   182,   183,   153,   178,   179,    10,
-     127,   136,   137,   138,   153,   188,   191,   192,   193,   474,
-     476,   478,   480,    11,    14,    15,    31,    32,    33,    34,
-      35,    36,    37,    38,    56,    57,    67,    68,    69,    70,
-      71,    83,    86,    93,   101,   102,   105,   188,   197,   198,
-     199,   200,   201,   202,   203,   204,   213,   215,   239,   245,
-     251,   253,   267,   277,   300,   308,   334,   364,   366,   414,
-     424,   436,   437,   445,    12,    13,   188,   208,   209,   210,
-     212,   364,   366,     7,    48,    50,    58,    59,    60,    61,
-      62,    63,    73,    74,    81,   188,   199,   200,   201,   202,
-     285,   286,   287,   289,   291,   293,   295,   298,   299,   334,
-     352,   364,   366,   368,   385,   410,    49,   188,   334,   360,
-     361,   362,   364,   366,    51,    52,    53,    54,    55,   188,
-     334,   364,   366,   376,   377,   378,   380,   381,   383,   384,
-      71,    75,    76,    77,    78,    79,    80,   188,   334,   364,
-     366,   393,   394,   395,   396,   398,   400,   402,   404,   406,
-     408,   308,    16,    39,    41,    42,    45,    46,    47,   188,
-     229,   318,   319,   320,   321,   322,   323,   324,   326,   328,
-     330,   331,   333,   364,   366,    40,    43,    44,   188,   229,
-     322,   328,   342,   343,   344,   345,   346,   348,   349,   350,
-     351,   364,   366,    84,    85,   188,   261,   262,   263,   265,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   188,   364,   366,   449,   450,   451,
-     452,   454,   456,   457,   459,   460,   461,   464,   466,   467,
-     468,   469,   472,   128,   484,   485,   486,     6,     3,     4,
-       8,     3,   194,   481,   475,   477,   479,     4,     3,     8,
-     205,   214,   216,     4,     4,     4,     4,     4,   278,   309,
-     335,   365,   367,   301,   240,   252,   246,   415,   254,   268,
-     425,     4,   438,   446,     3,     8,   211,     4,     3,     8,
-     417,   353,   369,   288,   290,   292,     4,     4,   296,   294,
-     386,   411,     3,     8,   363,     3,     8,   379,     4,   382,
-       4,     4,     3,     8,   409,   397,   399,   401,   403,   405,
-     407,     8,     3,     8,   325,   230,     4,   329,   327,   332,
-       4,     8,     3,   347,     4,     4,     8,     3,   264,   266,
-       3,     8,     4,   453,   455,     4,   458,     4,     4,   462,
-     465,     4,     4,     4,   470,   473,     3,     8,   487,     3,
-       8,   173,   173,   153,     4,     4,     4,     4,     4,   192,
-       4,     4,     4,   154,   154,   154,   154,   154,     4,     4,
+       0,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+       0,     5,     7,     9,   155,   156,   157,   158,   175,   176,
+     177,   182,     7,   191,     7,   197,     7,   208,     7,   287,
+       7,   362,     7,   378,     7,   395,     7,   314,     7,   320,
+       7,   344,     7,   263,     7,   451,     7,   486,   183,   178,
+     192,   198,   209,   288,   363,   379,   396,   315,   321,   345,
+     264,   452,   487,   175,   184,   185,   155,   180,   181,    10,
+     129,   138,   139,   140,   155,   190,   193,   194,   195,   478,
+     480,   482,   484,    11,    14,    15,    33,    34,    35,    36,
+      37,    38,    39,    40,    58,    59,    69,    70,    71,    72,
+      73,    85,    88,    95,   103,   104,   107,   190,   199,   200,
+     201,   202,   203,   204,   205,   206,   215,   217,   243,   249,
+     255,   257,   271,   281,   304,   312,   338,   368,   370,   418,
+     428,   440,   441,   449,    12,    13,   190,   210,   211,   212,
+     214,   368,   370,     7,    50,    52,    60,    61,    62,    63,
+      64,    65,    75,    76,    83,   190,   201,   202,   203,   204,
+     289,   290,   291,   293,   295,   297,   299,   302,   303,   338,
+     356,   368,   370,   372,   389,   414,    51,   190,   338,   364,
+     365,   366,   368,   370,    53,    54,    55,    56,    57,   190,
+     338,   368,   370,   380,   381,   382,   384,   385,   387,   388,
+      73,    77,    78,    79,    80,    81,    82,   190,   338,   368,
+     370,   397,   398,   399,   400,   402,   404,   406,   408,   410,
+     412,   312,    16,    41,    43,    44,    47,    48,    49,   190,
+     231,   322,   323,   324,   325,   326,   327,   328,   330,   332,
+     334,   335,   337,   368,   370,    42,    45,    46,   190,   231,
+     326,   332,   346,   347,   348,   349,   350,   352,   353,   354,
+     355,   368,   370,    86,    87,   190,   265,   266,   267,   269,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   190,   368,   370,   453,   454,   455,
+     456,   458,   460,   461,   463,   464,   465,   468,   470,   471,
+     472,   473,   476,   130,   488,   489,   490,     6,     3,     4,
+       8,     3,   196,   485,   479,   481,   483,     4,     3,     8,
+     207,   216,   218,     4,     4,     4,     4,     4,   282,   313,
+     339,   369,   371,   305,   244,   256,   250,   419,   258,   272,
+     429,     4,   442,   450,     3,     8,   213,     4,     3,     8,
+     421,   357,   373,   292,   294,   296,     4,     4,   300,   298,
+     390,   415,     3,     8,   367,     3,     8,   383,     4,   386,
+       4,     4,     3,     8,   413,   401,   403,   405,   407,   409,
+     411,     8,     3,     8,   329,   232,     4,   333,   331,   336,
+       4,     8,     3,   351,     4,     4,     8,     3,   268,   270,
+       3,     8,     4,   457,   459,     4,   462,     4,     4,   466,
+     469,     4,     4,     4,   474,   477,     3,     8,   491,     3,
+       8,   175,   175,   155,     4,     4,     4,     4,     4,   194,
+       4,     4,     4,   156,   156,   156,   156,   156,     4,     4,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,   154,     4,     4,   198,     4,   156,   209,    72,   188,
-     229,   334,   364,   366,   418,   419,   420,   421,   422,     4,
-       4,     4,     4,     4,   154,   156,     4,     4,     4,     4,
-     286,     4,   361,     4,   154,     4,   154,   154,   377,     4,
-       4,     4,     4,     4,     4,     4,   395,     4,     4,   154,
-       4,     4,     4,   156,   320,     4,   156,   156,   344,     4,
-       4,   262,   156,     4,     4,   154,     4,   154,   154,     4,
-       4,   156,   156,   156,     4,     4,   450,     4,   485,     4,
-       7,     7,   173,   173,   173,     7,     7,     7,     5,     5,
-       5,   175,   177,   153,     5,     5,     5,     5,     5,     5,
-       7,     7,     7,     7,     5,   184,   423,     8,     3,     5,
-       5,   153,   153,   153,    64,    65,    66,   297,   153,     5,
-       7,   153,   153,   153,   184,   184,   184,   153,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   173,   153,
-     153,   153,   120,   121,   463,   122,   123,   124,   125,   126,
-     156,   471,   153,     5,   173,   197,   484,   208,    16,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,   188,
-     217,   218,   219,   222,   224,   226,   228,   229,   231,   232,
-     233,   234,   235,   237,   217,     7,   279,   280,   281,     7,
-     312,   313,   314,     7,   336,   337,   338,     7,   302,   303,
-     304,    77,   153,   241,   242,   243,   244,   182,    78,    80,
-     243,   247,   248,   249,   250,   293,   416,     7,   255,   256,
-     257,    87,    88,    89,    90,    91,    92,   269,   270,   271,
-     272,   273,   274,   275,   276,    16,    97,    98,    99,   100,
-     188,   231,   364,   366,   426,   427,   428,   431,   432,   434,
-     435,   103,   104,   188,   364,   366,   439,   440,   441,   443,
-     449,   185,     4,   420,     7,   354,   355,   356,     7,   370,
-     371,   372,     7,   387,   388,   389,    82,   412,     7,   488,
-     489,     8,     8,     8,   220,   223,   225,   227,     4,     4,
-       4,     4,     4,   236,   238,     3,     8,     8,   282,     6,
-       3,   315,     6,     3,   339,     6,     3,   305,     6,     3,
-       3,     6,     6,     3,     6,     3,     6,   258,     6,     3,
-       4,     4,     4,     4,     4,     4,     3,     8,   429,   433,
-       4,     4,     4,     3,     8,   442,   444,     3,     8,     8,
-     153,   186,   187,   153,   357,     6,     3,   373,     6,     3,
-     390,     6,     3,   413,     8,   490,     3,     6,     4,     4,
-       4,     4,   154,   156,   154,   156,   154,     4,     4,   218,
-     285,   281,   318,   314,   342,   338,   188,   199,   200,   201,
-     202,   229,   277,   289,   291,   293,   295,   299,   306,   307,
-     334,   364,   366,   410,   304,   242,   248,   293,   261,   257,
-     154,   154,   154,   154,   154,   154,   270,     4,     4,   154,
-     154,   154,   427,     4,     4,   440,     6,     3,   360,   356,
-     376,   372,   393,   389,     4,   129,   131,   132,   188,   229,
-     364,   366,   491,   492,   493,   494,   496,   489,    17,    18,
-      19,    20,   221,   153,   153,   153,   153,   153,     8,     8,
-       8,     3,     8,     8,    94,    95,    96,   430,   153,   153,
-     153,   153,     8,     8,     8,   153,   497,     4,   495,     3,
-       8,   307,     4,   154,     4,   492,     5,   153,     7,   498,
-     499,   500,     3,     6,   130,   133,   134,   135,   501,   502,
-     503,   505,   506,   507,   499,   504,     4,     4,     4,     3,
-       8,     4,   156,   154,   154,   502,   153
+       4,   156,     4,     4,   200,     4,   158,   211,    74,   190,
+     231,   338,   368,   370,   422,   423,   424,   425,   426,     4,
+       4,     4,     4,     4,   156,   158,     4,     4,     4,     4,
+     290,     4,   365,     4,   156,     4,   156,   156,   381,     4,
+       4,     4,     4,     4,     4,     4,   399,     4,     4,   156,
+       4,     4,     4,   158,   324,     4,   158,   158,   348,     4,
+       4,   266,   158,     4,     4,   156,     4,   156,   156,     4,
+       4,   158,   158,   158,     4,     4,   454,     4,   489,     4,
+       7,     7,   175,   175,   175,     7,     7,     7,     5,     5,
+       5,   177,   179,   155,     5,     5,     5,     5,     5,     5,
+       7,     7,     7,     7,     5,   186,   427,     8,     3,     5,
+       5,   155,   155,   155,    66,    67,    68,   301,   155,     5,
+       7,   155,   155,   155,   186,   186,   186,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   175,   155,
+     155,   155,   122,   123,   467,   124,   125,   126,   127,   128,
+     158,   475,   155,     5,   175,   199,   488,   210,    16,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,   190,   219,   220,   221,   224,   226,   228,   230,   231,
+     233,   234,   235,   236,   237,   239,   240,   241,   219,     7,
+     283,   284,   285,     7,   316,   317,   318,     7,   340,   341,
+     342,     7,   306,   307,   308,    79,   155,   245,   246,   247,
+     248,   184,    80,    82,   247,   251,   252,   253,   254,   297,
+     420,     7,   259,   260,   261,    89,    90,    91,    92,    93,
+      94,   273,   274,   275,   276,   277,   278,   279,   280,    16,
+      99,   100,   101,   102,   190,   233,   368,   370,   430,   431,
+     432,   435,   436,   438,   439,   105,   106,   190,   368,   370,
+     443,   444,   445,   447,   453,   187,     4,   424,     7,   358,
+     359,   360,     7,   374,   375,   376,     7,   391,   392,   393,
+      84,   416,     7,   492,   493,     8,     8,     8,   222,   225,
+     227,   229,     4,     4,     4,     4,     4,   238,     4,     4,
+     242,     3,     8,     8,   286,     6,     3,   319,     6,     3,
+     343,     6,     3,   309,     6,     3,     3,     6,     6,     3,
+       6,     3,     6,   262,     6,     3,     4,     4,     4,     4,
+       4,     4,     3,     8,   433,   437,     4,     4,     4,     3,
+       8,   446,   448,     3,     8,     8,   155,   188,   189,   155,
+     361,     6,     3,   377,     6,     3,   394,     6,     3,   417,
+       8,   494,     3,     6,     4,     4,     4,     4,   156,   158,
+     156,   158,   156,     4,   156,   156,     4,   220,   289,   285,
+     322,   318,   346,   342,   190,   201,   202,   203,   204,   231,
+     281,   293,   295,   297,   299,   303,   310,   311,   338,   368,
+     370,   414,   308,   246,   252,   297,   265,   261,   156,   156,
+     156,   156,   156,   156,   274,     4,     4,   156,   156,   156,
+     431,     4,     4,   444,     6,     3,   364,   360,   380,   376,
+     397,   393,     4,   131,   133,   134,   190,   231,   368,   370,
+     495,   496,   497,   498,   500,   493,    17,    18,    19,    20,
+     223,   155,   155,   155,   155,   155,     8,     8,     8,     3,
+       8,     8,    96,    97,    98,   434,   155,   155,   155,   155,
+       8,     8,     8,   155,   501,     4,   499,     3,     8,   311,
+       4,   156,     4,   496,     5,   155,     7,   502,   503,   504,
+       3,     6,   132,   135,   136,   137,   505,   506,   507,   509,
+     510,   511,   503,   508,     4,     4,     4,     3,     8,     4,
+     158,   156,   156,   506,   155
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   157,   159,   158,   160,   158,   161,   158,   162,   158,
-     163,   158,   164,   158,   165,   158,   166,   158,   167,   158,
-     168,   158,   169,   158,   170,   158,   171,   158,   172,   158,
-     173,   173,   173,   173,   173,   173,   173,   174,   176,   175,
-     177,   178,   178,   179,   179,   181,   180,   182,   182,   183,
-     183,   185,   184,   186,   186,   187,   187,   188,   190,   189,
-     191,   191,   192,   192,   192,   192,   192,   192,   194,   193,
-     196,   195,   197,   197,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   198,   198,   198,   198,   199,
-     200,   201,   202,   203,   205,   204,   207,   206,   208,   208,
-     209,   209,   209,   209,   209,   211,   210,   212,   214,   213,
-     216,   215,   217,   217,   218,   218,   218,   218,   218,   218,
-     218,   218,   218,   218,   218,   218,   218,   220,   219,   221,
-     221,   221,   221,   223,   222,   225,   224,   227,   226,   228,
-     230,   229,   231,   232,   233,   234,   236,   235,   238,   237,
-     240,   239,   241,   241,   242,   242,   243,   244,   246,   245,
-     247,   247,   248,   248,   248,   249,   250,   252,   251,   254,
-     253,   255,   255,   256,   256,   258,   257,   260,   259,   261,
-     261,   261,   262,   262,   264,   263,   266,   265,   268,   267,
-     269,   269,   270,   270,   270,   270,   270,   270,   271,   272,
-     273,   274,   275,   276,   278,   277,   279,   279,   280,   280,
-     282,   281,   284,   283,   285,   285,   286,   286,   286,   286,
-     286,   286,   286,   286,   286,   286,   286,   286,   286,   286,
-     286,   286,   286,   286,   286,   288,   287,   290,   289,   292,
-     291,   294,   293,   296,   295,   297,   297,   297,   298,   299,
-     301,   300,   302,   302,   303,   303,   305,   304,   306,   306,
-     307,   307,   307,   307,   307,   307,   307,   307,   307,   307,
-     307,   307,   307,   307,   307,   307,   309,   308,   311,   310,
-     312,   312,   313,   313,   315,   314,   317,   316,   318,   318,
-     319,   319,   320,   320,   320,   320,   320,   320,   320,   320,
-     320,   320,   321,   322,   323,   325,   324,   327,   326,   329,
-     328,   330,   332,   331,   333,   335,   334,   336,   336,   337,
-     337,   339,   338,   341,   340,   342,   342,   343,   343,   344,
-     344,   344,   344,   344,   344,   344,   344,   344,   345,   347,
-     346,   348,   349,   350,   351,   353,   352,   354,   354,   355,
-     355,   357,   356,   359,   358,   360,   360,   361,   361,   361,
-     361,   361,   363,   362,   365,   364,   367,   366,   369,   368,
-     370,   370,   371,   371,   373,   372,   375,   374,   376,   376,
-     377,   377,   377,   377,   377,   377,   377,   377,   377,   379,
-     378,   380,   382,   381,   383,   384,   386,   385,   387,   387,
-     388,   388,   390,   389,   392,   391,   393,   393,   394,   394,
-     395,   395,   395,   395,   395,   395,   395,   395,   395,   395,
-     395,   397,   396,   399,   398,   401,   400,   403,   402,   405,
+       0,   159,   161,   160,   162,   160,   163,   160,   164,   160,
+     165,   160,   166,   160,   167,   160,   168,   160,   169,   160,
+     170,   160,   171,   160,   172,   160,   173,   160,   174,   160,
+     175,   175,   175,   175,   175,   175,   175,   176,   178,   177,
+     179,   180,   180,   181,   181,   183,   182,   184,   184,   185,
+     185,   187,   186,   188,   188,   189,   189,   190,   192,   191,
+     193,   193,   194,   194,   194,   194,   194,   194,   196,   195,
+     198,   197,   199,   199,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   200,   200,   200,   200,   200,   200,   201,
+     202,   203,   204,   205,   207,   206,   209,   208,   210,   210,
+     211,   211,   211,   211,   211,   213,   212,   214,   216,   215,
+     218,   217,   219,   219,   220,   220,   220,   220,   220,   220,
+     220,   220,   220,   220,   220,   220,   220,   220,   220,   222,
+     221,   223,   223,   223,   223,   225,   224,   227,   226,   229,
+     228,   230,   232,   231,   233,   234,   235,   236,   238,   237,
+     239,   240,   242,   241,   244,   243,   245,   245,   246,   246,
+     247,   248,   250,   249,   251,   251,   252,   252,   252,   253,
+     254,   256,   255,   258,   257,   259,   259,   260,   260,   262,
+     261,   264,   263,   265,   265,   265,   266,   266,   268,   267,
+     270,   269,   272,   271,   273,   273,   274,   274,   274,   274,
+     274,   274,   275,   276,   277,   278,   279,   280,   282,   281,
+     283,   283,   284,   284,   286,   285,   288,   287,   289,   289,
+     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
+     290,   290,   290,   290,   290,   290,   290,   290,   290,   292,
+     291,   294,   293,   296,   295,   298,   297,   300,   299,   301,
+     301,   301,   302,   303,   305,   304,   306,   306,   307,   307,
+     309,   308,   310,   310,   311,   311,   311,   311,   311,   311,
+     311,   311,   311,   311,   311,   311,   311,   311,   311,   311,
+     313,   312,   315,   314,   316,   316,   317,   317,   319,   318,
+     321,   320,   322,   322,   323,   323,   324,   324,   324,   324,
+     324,   324,   324,   324,   324,   324,   325,   326,   327,   329,
+     328,   331,   330,   333,   332,   334,   336,   335,   337,   339,
+     338,   340,   340,   341,   341,   343,   342,   345,   344,   346,
+     346,   347,   347,   348,   348,   348,   348,   348,   348,   348,
+     348,   348,   349,   351,   350,   352,   353,   354,   355,   357,
+     356,   358,   358,   359,   359,   361,   360,   363,   362,   364,
+     364,   365,   365,   365,   365,   365,   367,   366,   369,   368,
+     371,   370,   373,   372,   374,   374,   375,   375,   377,   376,
+     379,   378,   380,   380,   381,   381,   381,   381,   381,   381,
+     381,   381,   381,   383,   382,   384,   386,   385,   387,   388,
+     390,   389,   391,   391,   392,   392,   394,   393,   396,   395,
+     397,   397,   398,   398,   399,   399,   399,   399,   399,   399,
+     399,   399,   399,   399,   399,   401,   400,   403,   402,   405,
      404,   407,   406,   409,   408,   411,   410,   413,   412,   415,
-     414,   416,   416,   417,   293,   418,   418,   419,   419,   420,
-     420,   420,   420,   420,   420,   421,   423,   422,   425,   424,
-     426,   426,   427,   427,   427,   427,   427,   427,   427,   427,
-     427,   429,   428,   430,   430,   430,   431,   433,   432,   434,
-     435,   436,   438,   437,   439,   439,   440,   440,   440,   440,
-     440,   442,   441,   444,   443,   446,   445,   448,   447,   449,
-     449,   450,   450,   450,   450,   450,   450,   450,   450,   450,
-     450,   450,   450,   450,   450,   450,   450,   450,   451,   453,
-     452,   455,   454,   456,   458,   457,   459,   460,   462,   461,
-     463,   463,   465,   464,   466,   467,   468,   470,   469,   471,
-     471,   471,   471,   471,   473,   472,   475,   474,   477,   476,
-     479,   478,   481,   480,   483,   482,   484,   484,   485,   487,
-     486,   488,   488,   490,   489,   491,   491,   492,   492,   492,
-     492,   492,   492,   492,   493,   495,   494,   497,   496,   498,
-     498,   500,   499,   501,   501,   502,   502,   502,   502,   504,
-     503,   505,   506,   507
+     414,   417,   416,   419,   418,   420,   420,   421,   297,   422,
+     422,   423,   423,   424,   424,   424,   424,   424,   424,   425,
+     427,   426,   429,   428,   430,   430,   431,   431,   431,   431,
+     431,   431,   431,   431,   431,   433,   432,   434,   434,   434,
+     435,   437,   436,   438,   439,   440,   442,   441,   443,   443,
+     444,   444,   444,   444,   444,   446,   445,   448,   447,   450,
+     449,   452,   451,   453,   453,   454,   454,   454,   454,   454,
+     454,   454,   454,   454,   454,   454,   454,   454,   454,   454,
+     454,   454,   455,   457,   456,   459,   458,   460,   462,   461,
+     463,   464,   466,   465,   467,   467,   469,   468,   470,   471,
+     472,   474,   473,   475,   475,   475,   475,   475,   477,   476,
+     479,   478,   481,   480,   483,   482,   485,   484,   487,   486,
+     488,   488,   489,   491,   490,   492,   492,   494,   493,   495,
+     495,   496,   496,   496,   496,   496,   496,   496,   497,   499,
+     498,   501,   500,   502,   502,   504,   503,   505,   505,   506,
+     506,   506,   506,   508,   507,   509,   510,   511
   };
 
   const unsigned char
@@ -4302,54 +4323,54 @@ namespace isc { namespace dhcp {
        3,     3,     3,     3,     0,     6,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     0,     4,     3,     0,     6,
        0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     3,
-       0,     4,     3,     3,     3,     3,     0,     4,     0,     4,
-       0,     6,     1,     3,     1,     1,     1,     1,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     0,     6,     0,
-       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
-       3,     1,     1,     1,     0,     4,     0,     4,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     1,     3,     3,
-       3,     3,     3,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     1,     1,     1,     3,     3,
-       0,     6,     0,     1,     1,     3,     0,     4,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     6,     0,     4,
-       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     3,     1,     0,     4,     0,     4,     0,
-       4,     1,     0,     4,     3,     0,     6,     0,     1,     1,
-       3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     1,     1,     3,     3,     0,     6,     0,     1,     1,
-       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     0,     4,     0,     4,     0,     4,     0,     6,
+       4,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     3,     0,     4,     3,     3,     3,     3,     0,     4,
+       3,     3,     0,     4,     0,     6,     1,     3,     1,     1,
+       1,     1,     0,     6,     1,     3,     1,     1,     1,     1,
+       1,     0,     6,     0,     6,     0,     1,     1,     3,     0,
+       4,     0,     4,     1,     3,     1,     1,     1,     0,     4,
+       0,     4,     0,     6,     1,     3,     1,     1,     1,     1,
+       1,     1,     3,     3,     3,     3,     3,     3,     0,     6,
        0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     3,     0,     4,     3,     3,     0,     6,     0,     1,
-       1,     3,     0,     4,     0,     4,     0,     1,     1,     3,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     1,
+       1,     1,     3,     3,     0,     6,     0,     1,     1,     3,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     6,     0,     4,     0,     1,     1,     3,     0,     4,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     3,     1,     0,
+       4,     0,     4,     0,     4,     1,     0,     4,     3,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     0,
+       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     1,     1,     3,     3,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     0,     6,     0,     1,     1,     3,     0,     4,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     3,     0,     4,     3,     3,
+       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
+       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     0,     6,     1,     3,     0,     4,     0,
+       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     0,     6,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     4,     1,     1,     1,
+       3,     0,     4,     3,     3,     3,     0,     6,     1,     3,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       6,     0,     4,     1,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     6,     0,     4,     0,
-       6,     1,     3,     0,     4,     0,     1,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     0,     4,     0,     6,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     1,     1,     1,     3,     0,     4,     3,
-       3,     3,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     0,     6,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     0,
-       4,     0,     4,     3,     0,     4,     3,     3,     0,     4,
-       1,     1,     0,     4,     3,     3,     3,     0,     4,     1,
-       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     6,     0,     4,     1,     3,     1,     0,
-       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     3,     0,     4,     0,     6,     1,
-       3,     0,     4,     1,     3,     1,     1,     1,     1,     0,
-       4,     3,     3,     3
+       1,     1,     3,     0,     4,     0,     4,     3,     0,     4,
+       3,     3,     0,     4,     1,     1,     0,     4,     3,     3,
+       3,     0,     4,     1,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     6,     0,     4,
+       1,     3,     1,     0,     6,     1,     3,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     3,     0,
+       4,     0,     6,     1,     3,     0,     4,     1,     3,     1,
+       1,     1,     1,     0,     4,     3,     3,     3
   };
 
 
@@ -4366,42 +4387,42 @@ namespace isc { namespace dhcp {
   "\"mysql\"", "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"",
   "\"host\"", "\"port\"", "\"persist\"", "\"lfc-interval\"",
   "\"readonly\"", "\"connect-timeout\"", "\"contact-points\"",
-  "\"keyspace\"", "\"preferred-lifetime\"", "\"valid-lifetime\"",
-  "\"renew-timer\"", "\"rebind-timer\"", "\"decline-probation-period\"",
-  "\"subnet6\"", "\"option-def\"", "\"option-data\"", "\"name\"",
-  "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"always-send\"",
-  "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"pools\"",
-  "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"",
-  "\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"",
-  "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"",
-  "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
-  "\"disabled\"", "\"out-of-pool\"", "\"all\"", "\"shared-networks\"",
-  "\"mac-sources\"", "\"relay-supplied-options\"",
-  "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"",
-  "\"client-class\"", "\"reservations\"", "\"ip-addresses\"",
-  "\"prefixes\"", "\"duid\"", "\"hw-address\"", "\"hostname\"",
-  "\"flex-id\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"",
-  "\"library\"", "\"parameters\"", "\"expired-leases-processing\"",
-  "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"",
-  "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
-  "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"",
-  "\"LLT\"", "\"EN\"", "\"LL\"", "\"identifier\"", "\"htype\"", "\"time\"",
-  "\"enterprise-id\"", "\"dhcp4o6-port\"", "\"control-socket\"",
-  "\"socket-type\"", "\"socket-name\"", "\"dhcp-ddns\"",
-  "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
-  "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
-  "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
-  "\"always-include-fqdn\"", "\"override-no-update\"",
-  "\"override-client-update\"", "\"replace-client-name\"",
-  "\"generated-prefix\"", "\"UDP\"", "\"TCP\"", "\"JSON\"",
-  "\"when-present\"", "\"never\"", "\"always\"", "\"when-not-present\"",
-  "\"Logging\"", "\"loggers\"", "\"output_options\"", "\"output\"",
-  "\"debuglevel\"", "\"severity\"", "\"flush\"", "\"maxsize\"",
-  "\"maxver\"", "\"Dhcp4\"", "\"DhcpDdns\"", "\"Control-agent\"",
-  "TOPLEVEL_JSON", "TOPLEVEL_DHCP6", "SUB_DHCP6", "SUB_INTERFACES6",
-  "SUB_SUBNET6", "SUB_POOL6", "SUB_PD_POOL", "SUB_RESERVATION",
-  "SUB_OPTION_DEFS", "SUB_OPTION_DEF", "SUB_OPTION_DATA",
-  "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "SUB_LOGGING",
+  "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"keyspace\"",
+  "\"preferred-lifetime\"", "\"valid-lifetime\"", "\"renew-timer\"",
+  "\"rebind-timer\"", "\"decline-probation-period\"", "\"subnet6\"",
+  "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
+  "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"",
+  "\"encapsulate\"", "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"",
+  "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"",
+  "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"",
+  "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
+  "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"",
+  "\"out-of-pool\"", "\"all\"", "\"shared-networks\"", "\"mac-sources\"",
+  "\"relay-supplied-options\"", "\"host-reservation-identifiers\"",
+  "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"",
+  "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", "\"hw-address\"",
+  "\"hostname\"", "\"flex-id\"", "\"relay\"", "\"ip-address\"",
+  "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
+  "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"",
+  "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"",
+  "\"max-reclaim-leases\"", "\"max-reclaim-time\"",
+  "\"unwarned-reclaim-cycles\"", "\"server-id\"", "\"LLT\"", "\"EN\"",
+  "\"LL\"", "\"identifier\"", "\"htype\"", "\"time\"", "\"enterprise-id\"",
+  "\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"",
+  "\"socket-name\"", "\"dhcp-ddns\"", "\"enable-updates\"",
+  "\"qualifying-suffix\"", "\"server-ip\"", "\"server-port\"",
+  "\"sender-ip\"", "\"sender-port\"", "\"max-queue-size\"",
+  "\"ncr-protocol\"", "\"ncr-format\"", "\"always-include-fqdn\"",
+  "\"override-no-update\"", "\"override-client-update\"",
+  "\"replace-client-name\"", "\"generated-prefix\"", "\"UDP\"", "\"TCP\"",
+  "\"JSON\"", "\"when-present\"", "\"never\"", "\"always\"",
+  "\"when-not-present\"", "\"Logging\"", "\"loggers\"",
+  "\"output_options\"", "\"output\"", "\"debuglevel\"", "\"severity\"",
+  "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp4\"", "\"DhcpDdns\"",
+  "\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP6", "SUB_DHCP6",
+  "SUB_INTERFACES6", "SUB_SUBNET6", "SUB_POOL6", "SUB_PD_POOL",
+  "SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
+  "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "SUB_LOGGING",
   "\"constant string\"", "\"integer\"", "\"floating point\"",
   "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
   "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
@@ -4419,8 +4440,9 @@ namespace isc { namespace dhcp {
   "database_map_params", "database_map_param", "database_type", "$@26",
   "db_type", "user", "$@27", "password", "$@28", "host", "$@29", "port",
   "name", "$@30", "persist", "lfc_interval", "readonly", "connect_timeout",
-  "contact_points", "$@31", "keyspace", "$@32", "mac_sources", "$@33",
-  "mac_sources_list", "mac_sources_value", "duid_id", "string_id",
+  "contact_points", "$@31", "max_reconnect_tries", "reconnect_wait_time",
+  "keyspace", "$@32", "mac_sources", "$@33", "mac_sources_list",
+  "mac_sources_value", "duid_id", "string_id",
   "host_reservation_identifiers", "$@34",
   "host_reservation_identifiers_list", "host_reservation_identifier",
   "hw_address_id", "flex_id", "relay_supplied_options", "$@35",
@@ -4493,67 +4515,67 @@ namespace isc { namespace dhcp {
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   238,   238,   238,   239,   239,   240,   240,   241,   241,
-     242,   242,   243,   243,   244,   244,   245,   245,   246,   246,
-     247,   247,   248,   248,   249,   249,   250,   250,   251,   251,
-     259,   260,   261,   262,   263,   264,   265,   268,   273,   273,
-     284,   287,   288,   291,   295,   302,   302,   309,   310,   313,
-     317,   324,   324,   331,   332,   335,   339,   350,   360,   360,
-     375,   376,   380,   381,   382,   383,   384,   385,   388,   388,
-     403,   403,   412,   413,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   445,
-     450,   455,   460,   465,   470,   470,   481,   481,   490,   491,
-     494,   495,   496,   497,   498,   501,   501,   511,   517,   517,
-     529,   529,   541,   542,   545,   546,   547,   548,   549,   550,
-     551,   552,   553,   554,   555,   556,   557,   560,   560,   567,
-     568,   569,   570,   573,   573,   581,   581,   589,   589,   597,
-     602,   602,   610,   615,   620,   625,   630,   630,   638,   638,
-     647,   647,   657,   658,   661,   662,   665,   670,   675,   675,
-     685,   686,   689,   690,   691,   694,   699,   706,   706,   716,
-     716,   726,   727,   730,   731,   734,   734,   744,   744,   754,
-     755,   756,   759,   760,   763,   763,   771,   771,   779,   779,
-     790,   791,   794,   795,   796,   797,   798,   799,   802,   807,
-     812,   817,   822,   827,   835,   835,   848,   849,   852,   853,
-     860,   860,   886,   886,   897,   898,   902,   903,   904,   905,
-     906,   907,   908,   909,   910,   911,   912,   913,   914,   915,
-     916,   917,   918,   919,   920,   923,   923,   931,   931,   939,
-     939,   947,   947,   955,   955,   962,   963,   964,   967,   972,
-     980,   980,   991,   992,   996,   997,  1000,  1000,  1008,  1009,
-    1012,  1013,  1014,  1015,  1016,  1017,  1018,  1019,  1020,  1021,
-    1022,  1023,  1024,  1025,  1026,  1027,  1034,  1034,  1047,  1047,
-    1056,  1057,  1060,  1061,  1066,  1066,  1081,  1081,  1095,  1096,
-    1099,  1100,  1103,  1104,  1105,  1106,  1107,  1108,  1109,  1110,
-    1111,  1112,  1115,  1117,  1122,  1124,  1124,  1132,  1132,  1140,
-    1140,  1148,  1150,  1150,  1158,  1167,  1167,  1179,  1180,  1185,
-    1186,  1191,  1191,  1203,  1203,  1215,  1216,  1221,  1222,  1227,
-    1228,  1229,  1230,  1231,  1232,  1233,  1234,  1235,  1238,  1240,
-    1240,  1248,  1250,  1252,  1257,  1265,  1265,  1277,  1278,  1281,
-    1282,  1285,  1285,  1295,  1295,  1304,  1305,  1308,  1309,  1310,
-    1311,  1312,  1315,  1315,  1323,  1323,  1348,  1348,  1378,  1378,
-    1390,  1391,  1394,  1395,  1398,  1398,  1410,  1410,  1422,  1423,
-    1426,  1427,  1428,  1429,  1430,  1431,  1432,  1433,  1434,  1437,
-    1437,  1445,  1450,  1450,  1458,  1463,  1471,  1471,  1481,  1482,
-    1485,  1486,  1489,  1489,  1498,  1498,  1507,  1508,  1511,  1512,
-    1516,  1517,  1518,  1519,  1520,  1521,  1522,  1523,  1524,  1525,
-    1526,  1529,  1529,  1539,  1539,  1549,  1549,  1557,  1557,  1565,
-    1565,  1573,  1573,  1581,  1581,  1594,  1594,  1604,  1604,  1615,
-    1615,  1625,  1626,  1629,  1629,  1639,  1640,  1643,  1644,  1647,
-    1648,  1649,  1650,  1651,  1652,  1655,  1657,  1657,  1668,  1668,
-    1680,  1681,  1684,  1685,  1686,  1687,  1688,  1689,  1690,  1691,
-    1692,  1695,  1695,  1702,  1703,  1704,  1707,  1712,  1712,  1720,
-    1725,  1732,  1739,  1739,  1749,  1750,  1753,  1754,  1755,  1756,
-    1757,  1760,  1760,  1768,  1768,  1778,  1778,  1790,  1790,  1800,
-    1801,  1804,  1805,  1806,  1807,  1808,  1809,  1810,  1811,  1812,
-    1813,  1814,  1815,  1816,  1817,  1818,  1819,  1820,  1823,  1828,
-    1828,  1836,  1836,  1844,  1849,  1849,  1857,  1862,  1867,  1867,
-    1875,  1876,  1879,  1879,  1887,  1892,  1897,  1902,  1902,  1910,
-    1913,  1916,  1919,  1922,  1928,  1928,  1938,  1938,  1945,  1945,
-    1952,  1952,  1965,  1965,  1975,  1975,  1986,  1987,  1991,  1995,
-    1995,  2007,  2008,  2012,  2012,  2020,  2021,  2024,  2025,  2026,
-    2027,  2028,  2029,  2030,  2033,  2038,  2038,  2046,  2046,  2056,
-    2057,  2060,  2060,  2068,  2069,  2072,  2073,  2074,  2075,  2078,
-    2078,  2086,  2091,  2096
+       0,   240,   240,   240,   241,   241,   242,   242,   243,   243,
+     244,   244,   245,   245,   246,   246,   247,   247,   248,   248,
+     249,   249,   250,   250,   251,   251,   252,   252,   253,   253,
+     261,   262,   263,   264,   265,   266,   267,   270,   275,   275,
+     286,   289,   290,   293,   297,   304,   304,   311,   312,   315,
+     319,   326,   326,   333,   334,   337,   341,   352,   362,   362,
+     377,   378,   382,   383,   384,   385,   386,   387,   390,   390,
+     405,   405,   414,   415,   420,   421,   422,   423,   424,   425,
+     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   443,   444,   447,
+     452,   457,   462,   467,   472,   472,   483,   483,   492,   493,
+     496,   497,   498,   499,   500,   503,   503,   513,   519,   519,
+     531,   531,   543,   544,   547,   548,   549,   550,   551,   552,
+     553,   554,   555,   556,   557,   558,   559,   560,   561,   564,
+     564,   571,   572,   573,   574,   577,   577,   585,   585,   593,
+     593,   601,   606,   606,   614,   619,   624,   629,   634,   634,
+     642,   647,   652,   652,   661,   661,   671,   672,   675,   676,
+     679,   684,   689,   689,   699,   700,   703,   704,   705,   708,
+     713,   720,   720,   730,   730,   740,   741,   744,   745,   748,
+     748,   758,   758,   768,   769,   770,   773,   774,   777,   777,
+     785,   785,   793,   793,   804,   805,   808,   809,   810,   811,
+     812,   813,   816,   821,   826,   831,   836,   841,   849,   849,
+     862,   863,   866,   867,   874,   874,   900,   900,   911,   912,
+     916,   917,   918,   919,   920,   921,   922,   923,   924,   925,
+     926,   927,   928,   929,   930,   931,   932,   933,   934,   937,
+     937,   945,   945,   953,   953,   961,   961,   969,   969,   976,
+     977,   978,   981,   986,   994,   994,  1005,  1006,  1010,  1011,
+    1014,  1014,  1022,  1023,  1026,  1027,  1028,  1029,  1030,  1031,
+    1032,  1033,  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,
+    1048,  1048,  1061,  1061,  1070,  1071,  1074,  1075,  1080,  1080,
+    1095,  1095,  1109,  1110,  1113,  1114,  1117,  1118,  1119,  1120,
+    1121,  1122,  1123,  1124,  1125,  1126,  1129,  1131,  1136,  1138,
+    1138,  1146,  1146,  1154,  1154,  1162,  1164,  1164,  1172,  1181,
+    1181,  1193,  1194,  1199,  1200,  1205,  1205,  1217,  1217,  1229,
+    1230,  1235,  1236,  1241,  1242,  1243,  1244,  1245,  1246,  1247,
+    1248,  1249,  1252,  1254,  1254,  1262,  1264,  1266,  1271,  1279,
+    1279,  1291,  1292,  1295,  1296,  1299,  1299,  1309,  1309,  1318,
+    1319,  1322,  1323,  1324,  1325,  1326,  1329,  1329,  1337,  1337,
+    1362,  1362,  1392,  1392,  1404,  1405,  1408,  1409,  1412,  1412,
+    1424,  1424,  1436,  1437,  1440,  1441,  1442,  1443,  1444,  1445,
+    1446,  1447,  1448,  1451,  1451,  1459,  1464,  1464,  1472,  1477,
+    1485,  1485,  1495,  1496,  1499,  1500,  1503,  1503,  1512,  1512,
+    1521,  1522,  1525,  1526,  1530,  1531,  1532,  1533,  1534,  1535,
+    1536,  1537,  1538,  1539,  1540,  1543,  1543,  1553,  1553,  1563,
+    1563,  1571,  1571,  1579,  1579,  1587,  1587,  1595,  1595,  1608,
+    1608,  1618,  1618,  1629,  1629,  1639,  1640,  1643,  1643,  1653,
+    1654,  1657,  1658,  1661,  1662,  1663,  1664,  1665,  1666,  1669,
+    1671,  1671,  1682,  1682,  1694,  1695,  1698,  1699,  1700,  1701,
+    1702,  1703,  1704,  1705,  1706,  1709,  1709,  1716,  1717,  1718,
+    1721,  1726,  1726,  1734,  1739,  1746,  1753,  1753,  1763,  1764,
+    1767,  1768,  1769,  1770,  1771,  1774,  1774,  1782,  1782,  1792,
+    1792,  1804,  1804,  1814,  1815,  1818,  1819,  1820,  1821,  1822,
+    1823,  1824,  1825,  1826,  1827,  1828,  1829,  1830,  1831,  1832,
+    1833,  1834,  1837,  1842,  1842,  1850,  1850,  1858,  1863,  1863,
+    1871,  1876,  1881,  1881,  1889,  1890,  1893,  1893,  1901,  1906,
+    1911,  1916,  1916,  1924,  1927,  1930,  1933,  1936,  1942,  1942,
+    1952,  1952,  1959,  1959,  1966,  1966,  1979,  1979,  1989,  1989,
+    2000,  2001,  2005,  2009,  2009,  2021,  2022,  2026,  2026,  2034,
+    2035,  2038,  2039,  2040,  2041,  2042,  2043,  2044,  2047,  2052,
+    2052,  2060,  2060,  2070,  2071,  2074,  2074,  2082,  2083,  2086,
+    2087,  2088,  2089,  2092,  2092,  2100,  2105,  2110
   };
 
   // Print the state stack on the debug stream.
@@ -4588,8 +4610,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 4592 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 2101 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 4614 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 2115 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index 0d951f91c43fc3e88a4991f48bb6e68b4d6ddda1..d3d37a6adf5094fe9625a95d3b3a0f6534cbc5ce 100644 (file)
@@ -374,133 +374,135 @@ namespace isc { namespace dhcp {
         TOKEN_READONLY = 282,
         TOKEN_CONNECT_TIMEOUT = 283,
         TOKEN_CONTACT_POINTS = 284,
-        TOKEN_KEYSPACE = 285,
-        TOKEN_PREFERRED_LIFETIME = 286,
-        TOKEN_VALID_LIFETIME = 287,
-        TOKEN_RENEW_TIMER = 288,
-        TOKEN_REBIND_TIMER = 289,
-        TOKEN_DECLINE_PROBATION_PERIOD = 290,
-        TOKEN_SUBNET6 = 291,
-        TOKEN_OPTION_DEF = 292,
-        TOKEN_OPTION_DATA = 293,
-        TOKEN_NAME = 294,
-        TOKEN_DATA = 295,
-        TOKEN_CODE = 296,
-        TOKEN_SPACE = 297,
-        TOKEN_CSV_FORMAT = 298,
-        TOKEN_ALWAYS_SEND = 299,
-        TOKEN_RECORD_TYPES = 300,
-        TOKEN_ENCAPSULATE = 301,
-        TOKEN_ARRAY = 302,
-        TOKEN_POOLS = 303,
-        TOKEN_POOL = 304,
-        TOKEN_PD_POOLS = 305,
-        TOKEN_PREFIX = 306,
-        TOKEN_PREFIX_LEN = 307,
-        TOKEN_EXCLUDED_PREFIX = 308,
-        TOKEN_EXCLUDED_PREFIX_LEN = 309,
-        TOKEN_DELEGATED_LEN = 310,
-        TOKEN_USER_CONTEXT = 311,
-        TOKEN_COMMENT = 312,
-        TOKEN_SUBNET = 313,
-        TOKEN_INTERFACE = 314,
-        TOKEN_INTERFACE_ID = 315,
-        TOKEN_ID = 316,
-        TOKEN_RAPID_COMMIT = 317,
-        TOKEN_RESERVATION_MODE = 318,
-        TOKEN_DISABLED = 319,
-        TOKEN_OUT_OF_POOL = 320,
-        TOKEN_ALL = 321,
-        TOKEN_SHARED_NETWORKS = 322,
-        TOKEN_MAC_SOURCES = 323,
-        TOKEN_RELAY_SUPPLIED_OPTIONS = 324,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 325,
-        TOKEN_CLIENT_CLASSES = 326,
-        TOKEN_TEST = 327,
-        TOKEN_CLIENT_CLASS = 328,
-        TOKEN_RESERVATIONS = 329,
-        TOKEN_IP_ADDRESSES = 330,
-        TOKEN_PREFIXES = 331,
-        TOKEN_DUID = 332,
-        TOKEN_HW_ADDRESS = 333,
-        TOKEN_HOSTNAME = 334,
-        TOKEN_FLEX_ID = 335,
-        TOKEN_RELAY = 336,
-        TOKEN_IP_ADDRESS = 337,
-        TOKEN_HOOKS_LIBRARIES = 338,
-        TOKEN_LIBRARY = 339,
-        TOKEN_PARAMETERS = 340,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 341,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 342,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 343,
-        TOKEN_HOLD_RECLAIMED_TIME = 344,
-        TOKEN_MAX_RECLAIM_LEASES = 345,
-        TOKEN_MAX_RECLAIM_TIME = 346,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 347,
-        TOKEN_SERVER_ID = 348,
-        TOKEN_LLT = 349,
-        TOKEN_EN = 350,
-        TOKEN_LL = 351,
-        TOKEN_IDENTIFIER = 352,
-        TOKEN_HTYPE = 353,
-        TOKEN_TIME = 354,
-        TOKEN_ENTERPRISE_ID = 355,
-        TOKEN_DHCP4O6_PORT = 356,
-        TOKEN_CONTROL_SOCKET = 357,
-        TOKEN_SOCKET_TYPE = 358,
-        TOKEN_SOCKET_NAME = 359,
-        TOKEN_DHCP_DDNS = 360,
-        TOKEN_ENABLE_UPDATES = 361,
-        TOKEN_QUALIFYING_SUFFIX = 362,
-        TOKEN_SERVER_IP = 363,
-        TOKEN_SERVER_PORT = 364,
-        TOKEN_SENDER_IP = 365,
-        TOKEN_SENDER_PORT = 366,
-        TOKEN_MAX_QUEUE_SIZE = 367,
-        TOKEN_NCR_PROTOCOL = 368,
-        TOKEN_NCR_FORMAT = 369,
-        TOKEN_ALWAYS_INCLUDE_FQDN = 370,
-        TOKEN_OVERRIDE_NO_UPDATE = 371,
-        TOKEN_OVERRIDE_CLIENT_UPDATE = 372,
-        TOKEN_REPLACE_CLIENT_NAME = 373,
-        TOKEN_GENERATED_PREFIX = 374,
-        TOKEN_UDP = 375,
-        TOKEN_TCP = 376,
-        TOKEN_JSON = 377,
-        TOKEN_WHEN_PRESENT = 378,
-        TOKEN_NEVER = 379,
-        TOKEN_ALWAYS = 380,
-        TOKEN_WHEN_NOT_PRESENT = 381,
-        TOKEN_LOGGING = 382,
-        TOKEN_LOGGERS = 383,
-        TOKEN_OUTPUT_OPTIONS = 384,
-        TOKEN_OUTPUT = 385,
-        TOKEN_DEBUGLEVEL = 386,
-        TOKEN_SEVERITY = 387,
-        TOKEN_FLUSH = 388,
-        TOKEN_MAXSIZE = 389,
-        TOKEN_MAXVER = 390,
-        TOKEN_DHCP4 = 391,
-        TOKEN_DHCPDDNS = 392,
-        TOKEN_CONTROL_AGENT = 393,
-        TOKEN_TOPLEVEL_JSON = 394,
-        TOKEN_TOPLEVEL_DHCP6 = 395,
-        TOKEN_SUB_DHCP6 = 396,
-        TOKEN_SUB_INTERFACES6 = 397,
-        TOKEN_SUB_SUBNET6 = 398,
-        TOKEN_SUB_POOL6 = 399,
-        TOKEN_SUB_PD_POOL = 400,
-        TOKEN_SUB_RESERVATION = 401,
-        TOKEN_SUB_OPTION_DEFS = 402,
-        TOKEN_SUB_OPTION_DEF = 403,
-        TOKEN_SUB_OPTION_DATA = 404,
-        TOKEN_SUB_HOOKS_LIBRARY = 405,
-        TOKEN_SUB_DHCP_DDNS = 406,
-        TOKEN_SUB_LOGGING = 407,
-        TOKEN_STRING = 408,
-        TOKEN_INTEGER = 409,
-        TOKEN_FLOAT = 410,
-        TOKEN_BOOLEAN = 411
+        TOKEN_MAX_RECONNECT_TRIES = 285,
+        TOKEN_RECONNECT_WAIT_TIME = 286,
+        TOKEN_KEYSPACE = 287,
+        TOKEN_PREFERRED_LIFETIME = 288,
+        TOKEN_VALID_LIFETIME = 289,
+        TOKEN_RENEW_TIMER = 290,
+        TOKEN_REBIND_TIMER = 291,
+        TOKEN_DECLINE_PROBATION_PERIOD = 292,
+        TOKEN_SUBNET6 = 293,
+        TOKEN_OPTION_DEF = 294,
+        TOKEN_OPTION_DATA = 295,
+        TOKEN_NAME = 296,
+        TOKEN_DATA = 297,
+        TOKEN_CODE = 298,
+        TOKEN_SPACE = 299,
+        TOKEN_CSV_FORMAT = 300,
+        TOKEN_ALWAYS_SEND = 301,
+        TOKEN_RECORD_TYPES = 302,
+        TOKEN_ENCAPSULATE = 303,
+        TOKEN_ARRAY = 304,
+        TOKEN_POOLS = 305,
+        TOKEN_POOL = 306,
+        TOKEN_PD_POOLS = 307,
+        TOKEN_PREFIX = 308,
+        TOKEN_PREFIX_LEN = 309,
+        TOKEN_EXCLUDED_PREFIX = 310,
+        TOKEN_EXCLUDED_PREFIX_LEN = 311,
+        TOKEN_DELEGATED_LEN = 312,
+        TOKEN_USER_CONTEXT = 313,
+        TOKEN_COMMENT = 314,
+        TOKEN_SUBNET = 315,
+        TOKEN_INTERFACE = 316,
+        TOKEN_INTERFACE_ID = 317,
+        TOKEN_ID = 318,
+        TOKEN_RAPID_COMMIT = 319,
+        TOKEN_RESERVATION_MODE = 320,
+        TOKEN_DISABLED = 321,
+        TOKEN_OUT_OF_POOL = 322,
+        TOKEN_ALL = 323,
+        TOKEN_SHARED_NETWORKS = 324,
+        TOKEN_MAC_SOURCES = 325,
+        TOKEN_RELAY_SUPPLIED_OPTIONS = 326,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 327,
+        TOKEN_CLIENT_CLASSES = 328,
+        TOKEN_TEST = 329,
+        TOKEN_CLIENT_CLASS = 330,
+        TOKEN_RESERVATIONS = 331,
+        TOKEN_IP_ADDRESSES = 332,
+        TOKEN_PREFIXES = 333,
+        TOKEN_DUID = 334,
+        TOKEN_HW_ADDRESS = 335,
+        TOKEN_HOSTNAME = 336,
+        TOKEN_FLEX_ID = 337,
+        TOKEN_RELAY = 338,
+        TOKEN_IP_ADDRESS = 339,
+        TOKEN_HOOKS_LIBRARIES = 340,
+        TOKEN_LIBRARY = 341,
+        TOKEN_PARAMETERS = 342,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 343,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 344,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 345,
+        TOKEN_HOLD_RECLAIMED_TIME = 346,
+        TOKEN_MAX_RECLAIM_LEASES = 347,
+        TOKEN_MAX_RECLAIM_TIME = 348,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 349,
+        TOKEN_SERVER_ID = 350,
+        TOKEN_LLT = 351,
+        TOKEN_EN = 352,
+        TOKEN_LL = 353,
+        TOKEN_IDENTIFIER = 354,
+        TOKEN_HTYPE = 355,
+        TOKEN_TIME = 356,
+        TOKEN_ENTERPRISE_ID = 357,
+        TOKEN_DHCP4O6_PORT = 358,
+        TOKEN_CONTROL_SOCKET = 359,
+        TOKEN_SOCKET_TYPE = 360,
+        TOKEN_SOCKET_NAME = 361,
+        TOKEN_DHCP_DDNS = 362,
+        TOKEN_ENABLE_UPDATES = 363,
+        TOKEN_QUALIFYING_SUFFIX = 364,
+        TOKEN_SERVER_IP = 365,
+        TOKEN_SERVER_PORT = 366,
+        TOKEN_SENDER_IP = 367,
+        TOKEN_SENDER_PORT = 368,
+        TOKEN_MAX_QUEUE_SIZE = 369,
+        TOKEN_NCR_PROTOCOL = 370,
+        TOKEN_NCR_FORMAT = 371,
+        TOKEN_ALWAYS_INCLUDE_FQDN = 372,
+        TOKEN_OVERRIDE_NO_UPDATE = 373,
+        TOKEN_OVERRIDE_CLIENT_UPDATE = 374,
+        TOKEN_REPLACE_CLIENT_NAME = 375,
+        TOKEN_GENERATED_PREFIX = 376,
+        TOKEN_UDP = 377,
+        TOKEN_TCP = 378,
+        TOKEN_JSON = 379,
+        TOKEN_WHEN_PRESENT = 380,
+        TOKEN_NEVER = 381,
+        TOKEN_ALWAYS = 382,
+        TOKEN_WHEN_NOT_PRESENT = 383,
+        TOKEN_LOGGING = 384,
+        TOKEN_LOGGERS = 385,
+        TOKEN_OUTPUT_OPTIONS = 386,
+        TOKEN_OUTPUT = 387,
+        TOKEN_DEBUGLEVEL = 388,
+        TOKEN_SEVERITY = 389,
+        TOKEN_FLUSH = 390,
+        TOKEN_MAXSIZE = 391,
+        TOKEN_MAXVER = 392,
+        TOKEN_DHCP4 = 393,
+        TOKEN_DHCPDDNS = 394,
+        TOKEN_CONTROL_AGENT = 395,
+        TOKEN_TOPLEVEL_JSON = 396,
+        TOKEN_TOPLEVEL_DHCP6 = 397,
+        TOKEN_SUB_DHCP6 = 398,
+        TOKEN_SUB_INTERFACES6 = 399,
+        TOKEN_SUB_SUBNET6 = 400,
+        TOKEN_SUB_POOL6 = 401,
+        TOKEN_SUB_PD_POOL = 402,
+        TOKEN_SUB_RESERVATION = 403,
+        TOKEN_SUB_OPTION_DEFS = 404,
+        TOKEN_SUB_OPTION_DEF = 405,
+        TOKEN_SUB_OPTION_DATA = 406,
+        TOKEN_SUB_HOOKS_LIBRARY = 407,
+        TOKEN_SUB_DHCP_DDNS = 408,
+        TOKEN_SUB_LOGGING = 409,
+        TOKEN_STRING = 410,
+        TOKEN_INTEGER = 411,
+        TOKEN_FLOAT = 412,
+        TOKEN_BOOLEAN = 413
       };
     };
 
@@ -727,6 +729,14 @@ namespace isc { namespace dhcp {
     symbol_type
     make_CONTACT_POINTS (const location_type& l);
 
+    static inline
+    symbol_type
+    make_MAX_RECONNECT_TRIES (const location_type& l);
+
+    static inline
+    symbol_type
+    make_RECONNECT_WAIT_TIME (const location_type& l);
+
     static inline
     symbol_type
     make_KEYSPACE (const location_type& l);
@@ -1440,12 +1450,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 931,     ///< Last index in yytable_.
-      yynnts_ = 351,  ///< Number of nonterminal symbols.
+      yylast_ = 939,     ///< Last index in yytable_.
+      yynnts_ = 353,  ///< Number of nonterminal symbols.
       yyfinal_ = 30, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 157  ///< Number of tokens.
+      yyntokens_ = 159  ///< Number of tokens.
     };
 
 
@@ -1503,9 +1513,9 @@ namespace isc { namespace dhcp {
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156
+     155,   156,   157,   158
     };
-    const unsigned int user_token_number_max_ = 411;
+    const unsigned int user_token_number_max_ = 413;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1538,29 +1548,29 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1581,29 +1591,29 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         value.copy< ElementPtr > (v);
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1683,29 +1693,29 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         value.template destroy< ElementPtr > ();
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1732,29 +1742,29 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 173: // value
-      case 177: // map_value
-      case 221: // db_type
-      case 297: // hr_mode
-      case 430: // duid_type
-      case 463: // ncr_protocol_value
-      case 471: // replace_client_name_value
+      case 175: // value
+      case 179: // map_value
+      case 223: // db_type
+      case 301: // hr_mode
+      case 434: // duid_type
+      case 467: // ncr_protocol_value
+      case 475: // replace_client_name_value
         value.move< ElementPtr > (s.value);
         break;
 
-      case 156: // "boolean"
+      case 158: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 155: // "floating point"
+      case 157: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 154: // "integer"
+      case 156: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 153: // "constant string"
+      case 155: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1828,7 +1838,7 @@ namespace isc { namespace dhcp {
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411
+     405,   406,   407,   408,   409,   410,   411,   412,   413
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -2001,6 +2011,18 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_CONTACT_POINTS, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MAX_RECONNECT_TRIES (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, l);
+  }
+
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_RECONNECT_WAIT_TIME (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_KEYSPACE (const location_type& l)
   {
@@ -2766,7 +2788,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2770 "dhcp6_parser.h" // lalr1.cc:377
+#line 2792 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index 15c0e8ebb5f4f6ba5e7631894d42188a64ddb02e..141f754c1cdb3d6a4ada5167ab58dd331c41f74e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC")
 
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -70,6 +70,8 @@ using namespace std;
   READONLY "readonly"
   CONNECT_TIMEOUT "connect-timeout"
   CONTACT_POINTS "contact-points"
+  MAX_RECONNECT_TRIES "max-reconnect-tries"
+  RECONNECT_WAIT_TIME "reconnect-wait-time"
   KEYSPACE "keyspace"
 
   PREFERRED_LIFETIME "preferred-lifetime"
@@ -553,6 +555,8 @@ database_map_param: database_type
                   | readonly
                   | connect_timeout
                   | contact_points
+                  | max_reconnect_tries
+                  | reconnect_wait_time
                   | keyspace
                   | unknown_map_entry
                   ;
@@ -635,6 +639,16 @@ contact_points: CONTACT_POINTS {
     ctx.leave();
 };
 
+max_reconnect_tries: MAX_RECONNECT_TRIES COLON INTEGER {
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("max-reconnect-tries", n);
+};
+
+reconnect_wait_time: RECONNECT_WAIT_TIME COLON INTEGER {
+    ElementPtr n(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("reconnect-wait-time", n);
+};
+
 keyspace: KEYSPACE {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON STRING {
@@ -1908,7 +1922,7 @@ replace_client_name: REPLACE_CLIENT_NAME {
 
 replace_client_name_value:
     WHEN_PRESENT {
-      $$ = ElementPtr(new StringElement("when-present", ctx.loc2pos(@1))); 
+      $$ = ElementPtr(new StringElement("when-present", ctx.loc2pos(@1)));
       }
   | NEVER {
       $$ = ElementPtr(new StringElement("never", ctx.loc2pos(@1)));
index 1dde0a0e2f7572fb19be113211366fb961118cfa..9f7a39369f630c09cd6c87729780d03448c14fad 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2016-2018 Internet Systems Consortium, Inc. ("ISC")
 //
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -292,12 +292,12 @@ PgSqlConnection::checkStatementError(const PgSqlResult& r,
         // misleadingly returned as fatal. However, a loss of connectivity
         // can lead to a NULL sqlstate with a status of PGRES_FATAL_ERROR.
         const char* sqlstate = PQresultErrorField(r, PG_DIAG_SQLSTATE);
-        if  ((sqlstate == NULL) || 
+        if  ((sqlstate == NULL) ||
             ((memcmp(sqlstate, "08", 2) == 0) ||  // Connection Exception
              (memcmp(sqlstate, "53", 2) == 0) ||  // Insufficient resources
              (memcmp(sqlstate, "54", 2) == 0) ||  // Program Limit exceeded
              (memcmp(sqlstate, "57", 2) == 0) ||  // Operator intervention
-             (memcmp(sqlstate, "58", 2) == 0))) {// System error
+             (memcmp(sqlstate, "58", 2) == 0))) { // System error
             LOG_ERROR(dhcpsrv_logger, DHCPSRV_PGSQL_FATAL_ERROR)
                          .arg(statement.name)
                          .arg(PQerrorMessage(conn_))
@@ -306,13 +306,19 @@ PgSqlConnection::checkStatementError(const PgSqlResult& r,
             if (!invokeDbLostCallback()) {
                 exit (-1);
             }
+
+            // We still need to throw so caller can error out of the current
+            // processing.
+            isc_throw(DbOperationError,
+                      "fatal database errror or connectivity lost");
         }
 
+        // Apparently it wasn't fatal, so we throw with a helpful message.
         const char* error_message = PQerrorMessage(conn_);
         isc_throw(DbOperationError, "Statement exec failed:" << " for: "
-                  << statement.name << ", status: " << s
-                  << "sqlstate:[ " << (sqlstate ? sqlstate : "<null>") 
-                  <<  "], reason: " << error_message);
+                << statement.name << ", status: " << s
+                << "sqlstate:[ " << (sqlstate ? sqlstate : "<null>")
+                <<  "], reason: " << error_message);
     }
 }