]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2719] Adds offer_lft to globali and network scopes
authorThomas Markwalder <tmark@isc.org>
Fri, 3 Mar 2023 14:56:35 +0000 (09:56 -0500)
committerThomas Markwalder <tmark@isc.org>
Thu, 23 Mar 2023 11:17:48 +0000 (07:17 -0400)
offer-lft added to global, shared-network4, and subnet4
Can be set/fetched/parsed but does nothing yet.

src/lib/dhcpsrv/parsers/simple_parser4.cc
src/lib/dhcpsrv/cfg_globals.*
    Add offer-lft to global, shared-network4, and subnet4 values

src/lib/dhcpsrv/network.*
    Add offer_lft_ to Network4

src/lib/dhcpsrv/parsers/base_network_parser.*
    BaseNetworkParser::parseOfferLft() - new function

src/lib/dhcpsrv/parsers/dhcp_parsers.cc
    Subnet4ConfigParser::initSubnet()

src/lib/dhcpsrv/parsers/shared_network_parser.cc
    SharedNetwork4Parser::parse() - add call to parseOfferLft()

src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
    TEST_F(AllocEngine4Test, discoverOfferLft) - new test, currently
    fails because impl is missing.

src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc
src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc
src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc
src/lib/dhcpsrv/tests/network_unittest.cc
src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc
    Updated tests to account for offer-lft

src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/json_config_parser.cc
    Added offer-lft

src/bin/dhcp4/tests/get_config_unittest.cc
    Regenerated tests.

28 files changed:
doc/examples/kea4/all-keys.json
src/bin/d2/d2_lexer.cc
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/location.hh
src/bin/dhcp4/tests/get_config_unittest.cc
src/lib/dhcpsrv/cfg_globals.cc
src/lib/dhcpsrv/cfg_globals.h
src/lib/dhcpsrv/network.cc
src/lib/dhcpsrv/network.h
src/lib/dhcpsrv/parsers/base_network_parser.cc
src/lib/dhcpsrv/parsers/base_network_parser.h
src/lib/dhcpsrv/parsers/dhcp_parsers.cc
src/lib/dhcpsrv/parsers/shared_network_parser.cc
src/lib/dhcpsrv/parsers/simple_parser4.cc
src/lib/dhcpsrv/tests/alloc_engine4_unittest.cc
src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc
src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc
src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc
src/lib/dhcpsrv/tests/network_unittest.cc
src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc
src/lib/dhcpsrv/tests/subnet_unittest.cc
src/share/database/scripts/mysql/upgrade_014_to_015.sh.in
src/share/database/scripts/pgsql/upgrade_013_to_014.sh.in

index 401feb6ee8c246a5725a02fb63df5052eaa1d3f5..ec19ee74fc0aefd62e7d81ddf1a7f28b52933853 100644 (file)
                 // to be sent in 'siaddr'.
                 "next-server": "192.0.2.123",
 
+                // If greater than zero, it is the lifetime of leases temporarily allocated
+                // on DISCOVER.  When zero (the default) leases are not allocated on DISCOVER.
+                "offer-lft" : 60,
+
                 // List of shared network specific DHCP options.
                 "option-data": [],
 
                         // in 'siaddr'.
                         "next-server": "0.0.0.0",
 
+                        // If greater than zero, it is the lifetime of leases temporarily allocated
+                        // on DISCOVER.  When zero (the default) leases are not allocated on DISCOVER.
+                        "offer-lft" : 60,
+
                         // Turn on storage of extended information (e.g. relay agent
                         // information) with each lease for this subnet.
                         "store-extended-info": true,
             }
         ],
 
+        // If greater than zero, it is the lifetime of leases temporarily allocated
+        // on DISCOVER.  When zero (the default) leases are not allocated on DISCOVER.
+        "offer-lft" : 60,
+
         // Look at advanced example for the use of user-contexts.
         "user-context": { }
     }
index df67bfd54a11b61f76353908653124dc9e199a2e..00765394d076930236ad267d5ec54631a92f675c 100644 (file)
@@ -1,6 +1,6 @@
-#line 1 "d2_lexer.cc"
+#line 2 "d2_lexer.cc"
 
-#line 3 "d2_lexer.cc"
+#line 4 "d2_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
@@ -1136,7 +1136,7 @@ unsigned int comment_start_line = 0;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::d2::D2ParserContext::fatal(msg)
-#line 1139 "d2_lexer.cc"
+#line 1140 "d2_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
@@ -1162,8 +1162,8 @@ unsigned int comment_start_line = 0;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1165 "d2_lexer.cc"
 #line 1166 "d2_lexer.cc"
+#line 1167 "d2_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1483,7 +1483,7 @@ YY_DECL
     }
 
 
-#line 1486 "d2_lexer.cc"
+#line 1487 "d2_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2465,7 +2465,7 @@ YY_RULE_SETUP
 #line 816 "d2_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2468 "d2_lexer.cc"
+#line 2469 "d2_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
index 3217b6324bb887de760f78fbb896ef9906386653..19a8325e1327b656ab36dfdbc3ee91ba45625cb8 100644 (file)
@@ -1,6 +1,6 @@
-#line 1 "dhcp4_lexer.cc"
+#line 2 "dhcp4_lexer.cc"
 
-#line 3 "dhcp4_lexer.cc"
+#line 4 "dhcp4_lexer.cc"
 
 #define  YY_INT_ALIGNED short int
 
@@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 /* %% [3.0] code to copy yytext_ptr to yytext[] 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 223
-#define YY_END_OF_BUFFER 224
+#define YY_NUM_RULES 224
+#define YY_END_OF_BUFFER 225
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -700,21 +700,21 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[2192] =
+static const flex_int16_t yy_accept[2199] =
     {   0,
-      216,  216,    0,    0,    0,    0,    0,    0,    0,    0,
-      224,  222,   10,   11,  222,    1,  216,  213,  216,  216,
-      222,  215,  214,  222,  222,  222,  222,  222,  209,  210,
-      222,  222,  222,  211,  212,    5,    5,    5,  222,  222,
-      222,   10,   11,    0,    0,  204,    0,    0,    0,    0,
+      217,  217,    0,    0,    0,    0,    0,    0,    0,    0,
+      225,  223,   10,   11,  223,    1,  217,  214,  217,  217,
+      223,  216,  215,  223,  223,  223,  223,  223,  210,  211,
+      223,  223,  223,  212,  213,    5,    5,    5,  223,  223,
+      223,   10,   11,    0,    0,  205,    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,  216,
-      216,    0,  215,  216,    3,    2,    6,    0,  216,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  217,
+      217,    0,  216,  217,    3,    2,    6,    0,  217,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
 
-      205,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  207,    0,    0,    0,    0,    0,    0,
+      206,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  208,    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,
@@ -724,7 +724,7 @@ static const flex_int16_t yy_accept[2192] =
         0,    0,    0,    0,    0,    0,    0,    2,    0,    0,
         0,    0,    0,    0,    0,    8,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,  206,  208,    0,
+        0,    0,    0,    0,    0,    0,    0,  207,  209,    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,
@@ -736,8 +736,8 @@ static const flex_int16_t yy_accept[2192] =
         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,  221,
-      219,    0,  218,  217,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  222,
+      220,    0,  219,  218,    0,    0,    0,    0,    0,    0,
         0,  180,    0,  179,    0,    0,  100,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -747,202 +747,202 @@ static const flex_int16_t yy_accept[2192] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
        97,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   18,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       18,    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,
-       19,    0,    0,    0,    0,    0,  220,  217,    0,    0,
-        0,    0,    0,    0,  181,    0,  183,    0,    0,    0,
+        0,   19,    0,    0,    0,    0,    0,  221,  218,    0,
+        0,    0,    0,    0,    0,  181,    0,  183,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  104,    0,    0,    0,    0,    0,    0,   85,    0,
-        0,    0,    0,    0,    0,  127,    0,    0,    0,    0,
+        0,    0,  104,    0,    0,    0,    0,    0,    0,   85,
+        0,    0,    0,    0,    0,    0,  127,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   41,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       41,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         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,   84,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   89,    0,   42,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   89,    0,   42,    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,  123,    0,    0,
-       35,    0,    0,   39,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  123,
+        0,    0,   35,    0,    0,   39,    0,    0,    0,    0,
 
-        0,   12,  185,  184,    0,    0,    0,    0,  137,    0,
+        0,    0,    0,   12,  185,  184,    0,    0,    0,    0,
+      137,    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,  115,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  115,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   37,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   37,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   88,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   88,    0,    0,    0,
 
-        0,    0,    0,    0,  138,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  133,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    7,    0,    0,  186,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  138,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  133,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    7,    0,    0,
+      186,    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,   99,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   99,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,  117,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  113,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  117,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  113,    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,   92,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   92,    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,   91,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   91,    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,  131,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  143,  111,    0,    0,    0,    0,    0,
-        0,  116,   36,    0,    0,    0,    0,    0,    0,   50,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  131,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      118,   43,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  143,  111,    0,
+        0,    0,    0,    0,    0,  116,   36,    0,    0,    0,
+        0,    0,    0,    0,   50,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  118,   43,    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,   79,    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,  162,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  162,    0,    0,    0,    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,
-        0,    0,    0,    0,    0,    0,    0,  132,    0,    0,
-        0,    0,    0,    0,    0,   58,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   96,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  132,    0,    0,    0,    0,    0,    0,    0,
+       58,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   40,    0,    0,    0,    0,    0,   34,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   40,    0,
 
+        0,    0,    0,    0,   34,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
+        0,    0,    0,  119,    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,   68,
-        0,    0,    0,    0,    0,    0,   57,    0,    0,    0,
-      129,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  163,    0,    0,
+        0,    0,    0,    0,    0,   68,    0,    0,    0,    0,
+        0,    0,   57,    0,    0,    0,  129,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   93,
+        0,    0,    0,  163,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   93,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  204,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   24,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  168,    0,    0,    0,  166,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  190,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  130,    0,    0,    0,    0,    0,    0,    0,  134,
-        0,    0,    0,    0,    0,    0,    0,  114,    0,    0,
+       24,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  168,    0,    0,    0,  166,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  190,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  130,    0,
+        0,    0,    0,    0,    0,    0,  134,    0,    0,    0,
+        0,    0,    0,    0,  114,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,  128,    0,
-       23,    0,  139,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  172,    0,   87,
-        0,    0,    0,   82,    0,    0,    0,    0,    0,    0,
-      142,    0,   38,    0,  161,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       66,    0,    0,    0,    0,    0,    0,    0,  107,  108,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   86,    0,    0,    0,    0,    0,   59,    0,
+        0,    0,    0,    0,    0,  128,    0,   23,    0,  139,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  172,    0,   87,    0,    0,    0,
+       82,    0,    0,    0,    0,    0,    0,  142,    0,   38,
+        0,  161,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   66,    0,    0,
+        0,    0,    0,    0,    0,  107,  108,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   86,
+        0,    0,    0,    0,    0,   59,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  136,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  136,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      194,    0,   83,   98,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   63,    0,    0,    0,
-        0,    0,    0,  169,    0,    0,  167,    0,    0,  158,
-      157,    0,    0,    0,    0,    0,    0,    0,    0,   22,
-        0,    0,    0,    0,    0,  182,    0,    0,    0,    0,
-        0,  122,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  151,
-        0,    0,    0,  160,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  140,    0,   15,
-        0,    0,   44,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  171,    0,    0,    0,    0,    0,    0,    0,
-        0,   46,   64,    0,    0,  135,    0,    0,    0,  126,
+        0,    0,    0,    0,    0,    0,    0,  194,    0,   83,
+       98,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   63,    0,    0,    0,    0,    0,    0,
+      169,    0,    0,  167,    0,    0,  158,  157,    0,    0,
+        0,    0,    0,    0,    0,    0,   22,    0,    0,    0,
+        0,    0,  182,    0,    0,    0,    0,    0,  122,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   56,    0,   90,    0,    0,  188,
-        0,    0,  193,    0,  110,    0,    0,    0,  200,    0,
+        0,    0,    0,    0,    0,    0,  151,    0,    0,    0,
+      160,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  140,    0,   15,    0,    0,   44,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  171,
+        0,    0,    0,    0,    0,    0,    0,    0,   46,   64,
+        0,    0,  135,    0,    0,    0,  126,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   56,    0,   90,    0,    0,  188,    0,    0,  193,
+        0,  110,    0,    0,    0,  200,    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,
-       14,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      124,    0,    0,    0,   47,    0,    0,  196,    0,    0,
-      120,   31,    0,    0,    0,  156,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  191,    0,
-      164,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,   29,    0,    0,    0,    0,   28,    0,    0,  170,
-        0,    0,    0,   55,    0,    0,    0,    0,    0,  112,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   14,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  124,    0,    0,
+        0,   47,    0,    0,  196,    0,    0,  120,   31,    0,
+        0,    0,  156,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  191,    0,  164,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,   29,    0,
+        0,    0,    0,   28,    0,    0,  170,    0,    0,    0,
+       55,    0,    0,    0,    0,    0,  112,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   60,    0,    0,  109,
-        0,    0,    0,   45,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  141,    0,    0,    0,   30,    0,    0,
-        0,    0,  192,    0,    0,    0,    0,    0,  152,    0,
+        0,    0,    0,   60,    0,    0,  109,    0,    0,    0,
+       45,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      141,    0,    0,    0,   30,    0,    0,    0,    0,  192,
+        0,    0,    0,    0,    0,  152,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,   21,    0,    0,  195,    0,
-       81,    0,   51,    0,    0,    0,    0,  189,  187,    0,
-       32,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   17,    0,    0,    0,    0,    0,    0,  176,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  149,
-        0,    0,    0,  125,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   95,    0,    0,    0,    0,    0,
-       52,    0,    0,    0,    0,   48,  154,    0,    0,    0,
-        0,    0,    0,    0,    0,   71,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  177,
-
-        0,   13,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  155,    0,  165,    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,    0,
+        0,    0,   21,    0,    0,  195,    0,   81,    0,   51,
+        0,    0,    0,    0,  189,  187,    0,   32,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   17,
+        0,    0,    0,    0,    0,    0,  176,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  149,    0,    0,    0,
+      125,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   95,    0,    0,    0,    0,    0,   52,    0,    0,
+        0,    0,   48,  154,    0,    0,    0,    0,    0,    0,
+        0,    0,   71,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  177,    0,   13,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  155,    0,
+      165,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  148,    0,   62,   61,   20,    0,  173,    0,    0,
+        0,    0,    0,    0,    0,  159,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  148,    0,
+       62,   61,   20,    0,  173,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  106,    0,    0,    0,    0,    0,
+        0,  106,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  147,    0,    0,
+
+        0,    0,    0,   54,    0,   67,    0,   49,  175,    0,
+      101,    0,    0,    0,    0,    0,    0,    0,    0,   80,
+        0,    0,    0,    0,    0,    0,    0,   77,    0,    0,
+        0,    0,    0,    0,   16,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   53,    0,    0,
+        0,    0,    0,    0,   75,    0,    0,    0,    0,    0,
+        0,    0,    0,  203,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      147,    0,    0,    0,    0,    0,   54,    0,   67,    0,
-
-       49,  175,    0,  101,    0,    0,    0,    0,    0,    0,
-        0,    0,   80,    0,    0,    0,    0,    0,    0,    0,
-       77,    0,    0,    0,    0,    0,    0,   16,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       53,    0,    0,    0,    0,    0,    0,   75,    0,    0,
-        0,    0,    0,    0,    0,    0,  203,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   33,    0,    0,   76,    0,
-        0,    0,    0,  153,    0,    0,    0,    0,    0,  198,
-      201,  174,    0,  121,  102,    0,    0,    0,    0,    0,
-
-        0,    0,    0,   72,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  145,    0,    0,    0,    0,    0,    0,
-      150,    0,   74,    0,   65,    0,    0,    0,    0,    0,
-        0,    0,  103,    0,    0,    0,    0,    0,    0,    0,
-      144,    0,    0,  178,  202,  199,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   73,    0,    0,    0,    0,   27,   25,    0,    0,
-        0,   78,    0,    0,  105,    0,   70,    0,    0,    0,
-        0,    0,    0,    0,    0,   69,    0,  146,   26,  197,
-        0
+        0,    0,   33,    0,    0,   76,    0,    0,    0,    0,
+      153,    0,    0,    0,    0,    0,  198,  201,  174,    0,
+
+      121,  102,    0,    0,    0,    0,    0,    0,    0,    0,
+       72,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      145,    0,    0,    0,    0,    0,    0,  150,    0,   74,
+        0,   65,    0,    0,    0,    0,    0,    0,    0,  103,
+        0,    0,    0,    0,    0,    0,    0,  144,    0,    0,
+      178,  202,  199,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   73,    0,
+        0,    0,    0,   27,   25,    0,    0,    0,   78,    0,
+        0,  105,    0,   70,    0,    0,    0,    0,    0,    0,
+        0,    0,   69,    0,  146,   26,  197,    0
 
     } ;
 
@@ -990,281 +990,282 @@ static const YY_CHAR yy_meta[74] =
         1,    1,    1
     } ;
 
-static const flex_int16_t yy_base[2200] =
+static const flex_int16_t yy_base[2207] =
     {   0,
         0,   72,   21,   31,   43,   51,   54,   60,   91,   99,
-     2583, 2584,   34, 2579,  145,    0,  207, 2584,  214,  221,
-       13,  228, 2584, 2559,  118,   25,    2,    6, 2584, 2584,
-       73,   11,   17, 2584, 2584, 2584,  104, 2567, 2520,    0,
-     2557,  108, 2574,   24,  262, 2584, 2516,   67, 2522,   84,
-       75,   88,  224,   91,   89,  290,  220, 2514,  206,  285,
-      236,  204,  197,   60,  291, 2523,  247,  308,  315,  214,
-      286, 2506,  212,  320,  344,  318, 2525,  335,    0,  385,
-      401,  415,  422,  427, 2584,    0, 2584,  441,  446,  236,
-      314,  238,  326,  353,  309, 2584, 2522, 2563, 2584,  263,
-
-     2584,  440, 2550,  308, 2519,  364,   10,  329,  359,  384,
-      391,  241, 2560,    0,  501,  408, 2502, 2499, 2503,  418,
-     2499,   80, 2507,  422, 2493, 2494, 2499,   78, 2509, 2492,
-     2501, 2491, 2500,  341,  343,  340, 2493, 2491,  410, 2539,
-     2543, 2489, 2482, 2535, 2475,  174, 2496, 2496, 2490,  340,
-     2483, 2481, 2482, 2474, 2479, 2473,  429, 2484,  412, 2469,
-     2468, 2482,  425, 2468,  422,  447, 2462,  497,  436,  471,
-     2483, 2480, 2481,  432, 2479, 2514, 2513,  450,  446, 2460,
-      471, 2461,  478, 2453, 2470, 2462, 2464,    0,  477,  483,
-      473,  496,  489,  515, 2460, 2584, 2505,  530, 2454,  499,
-
-      523,  530, 2508,  535, 2507,  532, 2506, 2584, 2584,  578,
-      441,  543, 2465, 2457, 2444, 2455, 2459, 2460, 2440, 2451,
-     2455, 2452, 2451,  475,  516, 2489, 2453, 2434, 2431, 2439,
-     2434, 2448, 2444, 2435, 2431, 2443, 2443, 2431, 2433, 2436,
-     2416, 2420, 2433, 2435, 2432, 2424, 2414, 2432, 2584, 2417,
-     2426,  523, 2464, 2410, 2419, 2461, 2408, 2418, 2421,  510,
-     2417, 2456, 2401, 2403, 2414, 2452,  557, 2397, 2455, 2409,
-     2389, 2404,  561, 2394, 2400,  522, 2391, 2389, 2389, 2395,
-     2386, 2385, 2392, 2382, 2441, 2397, 2396, 2390,  513, 2397,
-     2392, 2384, 2374, 2389, 2388, 2383, 2387, 2368, 2384, 2370,
-
-     2376, 2383, 2365,  527, 2370, 2367, 2366,  603, 2365, 2360,
-     2374,  570, 2373, 2416, 2375,  520, 2366, 2354,  560, 2584,
-     2584,  571, 2584, 2584, 2352,  559,  530, 2400,  585, 2410,
-      576, 2584, 2409, 2584, 2403,  626, 2584, 2365,  575, 2342,
-     2351, 2399, 2359, 2342, 2359, 2395, 2355, 2338, 2344, 2396,
-     2351, 2354, 2345, 2348, 2334, 2345, 2389, 2383, 2341, 2338,
-      619, 2344, 2384, 2319, 2377, 2330, 2325, 2319, 2321, 2324,
-     2371, 2328, 2317, 2333, 2367, 2313,  626, 2327, 2312, 2311,
-     2324, 2322, 2320, 2320, 2319, 2314, 2321, 2316, 2312,  593,
-     2310, 2313, 2308, 2294, 2306, 2302, 2352,  587,  583, 2346,
-
-     2584, 2310, 2344, 2294, 2293, 2292, 2285, 2287, 2299, 2290,
-     2297, 2278, 2295, 2290,  593, 2337, 2290, 2287, 2290, 2584,
-     2289,  604, 2279, 2291,  599, 2266, 2267, 2288, 2279, 2269,
-     2320, 2265, 2279,  609, 2265, 2277, 2276, 2275, 2270, 2312,
-     2272, 2271, 2270, 2269, 2252, 2260, 2310, 2269, 2249, 2307,
-     2584, 2249, 2248,  655, 2261, 2259, 2584, 2584, 2259, 2248,
-     2240,  583, 2299, 2298, 2584, 2297, 2584,  633,  681, 2256,
-      646, 2295, 2237, 2248, 2287, 2240, 2242, 2244, 2231, 2239,
-     2227, 2584, 2232, 2225, 2237, 2240, 2227, 2226, 2584,  651,
-     2228, 2225,  619, 2223, 2225, 2584, 2270, 2232, 2229, 2214,
-
-     2228, 2226, 2226, 2220,  673, 2227, 2215, 2208, 2259, 2584,
-     2206, 2222, 2256, 2217, 2215, 2213, 2214, 2198, 2207, 2249,
-     2200, 2199, 2194, 2193, 2244, 2188,  620, 2207, 2181, 2188,
-     2193, 2203, 2237, 2241, 2584, 2186, 2182,  680, 2180, 2189,
-     2188, 2182, 2189, 2173, 2173, 2183, 2171, 2185, 2185, 2173,
-     2169, 2167, 2584, 2224, 2584, 2166, 2177, 2216, 2161, 2160,
-     2165, 2174, 2168, 2162, 2171, 2213, 2207, 2169, 2153, 2148,
-     2168, 2143, 2149,  568, 2163, 2156, 2160, 2143, 2201, 2142,
-     2142, 2193, 2138, 2139, 2138, 2136, 2153, 2584, 2149, 2186,
-     2584, 2137, 2135, 2584, 2146, 2182, 2181, 2141, 2125, 2142,
-
-     2182, 2584, 2584, 2584,  656,  658, 2122,  712, 2584, 2132,
-     2131,  613, 2138, 2118, 2128, 2170, 2115, 2168, 2113, 2123,
-     2165, 2110, 2117, 2110, 2122, 2104, 2104, 2119, 2118,  658,
-     2117, 2116, 2116, 2098, 2103, 2144, 2111, 2108, 2102, 2147,
-     2091, 2106, 2106, 2104, 2104, 2584, 2089, 2086, 2144, 2099,
-     2091, 2097, 2088, 2096, 2081, 2132, 2096, 2078, 2090, 2082,
-      639, 2073, 2072, 2066, 2071, 2086, 2083, 2084, 2063, 2073,
-     2079, 2122, 2077, 2069, 2060, 2584, 2061, 2063, 2058, 2071,
-     2063, 2068, 2107, 2106, 2057,   16, 2066, 2103, 2048, 2101,
-     2048, 2051, 2044, 2584, 2058, 2037, 2041, 2055, 2050, 2046,
-
-     2091, 2043, 2050, 2088, 2584, 2033, 2047, 2046, 2049, 2030,
-     2082, 2081, 2028, 2079, 2039, 2023, 2076, 2075, 2584, 2016,
-      203,  224,  695,  241,  324,  361,  362,  491,  476,  567,
-      567,  609,  643,  637, 2584,  670,  665, 2584,  688,  699,
-      673,  670,  670,  679,  691,  685,  674,  670,  684,  685,
-      732,  696,  739,  699,  703,  736,  737,  697,  697,  707,
-      712,  698,  701,  712,  712,  696,  753,  706,  716,  719,
-      757,  720,  713,  717,  714,  716,  763,  764,  728,  772,
-      729,  731, 2584,  734,  729,  720,  735,  740,  737,  725,
-      741,  740,  728,  742,  740,  748,  784,  746,  791,  792,
-
-      742,  734,  744,  791,  749,  799, 2584,  800,  753,  755,
-      751,  745,  761,  749,  807,  803,  766,  755,  768, 2584,
-      758,  769,  758,  771,  761,  774,  818,  819,  762,  773,
-      758,  781,  772,  761,  767,  822,  786,  770,  782,  826,
-      827,  774,  829,  793,  788,  793,  791,  835,  777,  789,
-      792,  796,  788,  785, 2584,  849,  808,  809,  797,  811,
-      801,  804,  815,  800,  807,  813,  814,  806,  820,  860,
-      836,  810,  824,  829,  826,  808,  815,  829,  874,  831,
-      828,  829,  827,  836, 2584,  832,  827,  842,  839,  825,
-      827,  846,  843,  831,  838,  839,  848,  852,  888,  851,
-
-      841,  839,  838,  849,  845,  901,  848,  859,  844,  845,
-      851,  867,  863,  858,  905, 2584,  869,  869,  862,  873,
-      871,  916,  858,  860,  879,  876,  864,  862,  924,  881,
-      867,  873,  871, 2584, 2584,  881,  886,  891,  879,  889,
-      891, 2584, 2584,  892,  879,  897,  884,  886,  879, 2584,
-      884,  902,  889,  939,  890,  942,  888,  892,  910,  951,
-     2584, 2584,  896,  900,  899,  896,  912,  957,  910,  900,
-      901,  897,  910,  921,  922,  917,  918,  920,  913,  915,
-      911,  917,  917,  919,  934,  917,  976,  933,  938,  915,
-      938,  924,  923, 2584,  930,  931,  980,  981,  933,  946,
-
-      984,  942,  932,  947,  941,  949,  936,  968,  976,  998,
-      946,  941,  996,  997,  959,  999, 2584, 1005,  948,  964,
-      968, 1009,  959,  958,  953,  954,  966,  961,  957,  960,
-      961,  971,  981, 1017,  965,  983,  975,  970, 1028,  985,
-      986,  977, 2584,  991,  980,  983,  991,  993,  978,  990,
-      995,  992,  990, 1037, 1003,  987,  988, 2584, 1004, 1007,
-      990, 1001, 1050,  993, 1012, 2584, 1011, 1014, 1000,  995,
-     1013, 1053, 1011, 1007, 1004, 1057, 1058, 1020, 1006, 1024,
-     1024, 1024, 1025, 1011, 1026, 1018, 1025, 1015, 1033, 1032,
-     1019, 1036, 2584, 1028, 1034, 1037, 1082, 1029, 2584, 1032,
-
-     1037, 1082, 1033, 1045, 1039, 1040, 1038, 1040, 1050, 1095,
-     1039, 1040, 1040, 1099, 1043, 1055, 1048, 2584, 1044, 1052,
-     1050, 1101, 1043, 1065, 1051, 1052, 1053, 1054, 1060, 1068,
-     1059, 1064, 1074, 1075, 1076, 1081, 1122, 1094, 1099, 2584,
-     1081, 1078, 1074, 1088, 1071, 1071, 2584, 1072, 1132, 1075,
-     2584, 1086, 1076, 1096, 1095, 1086, 1097, 1140, 1101, 1094,
-     1098, 1102, 1085, 1102, 1093, 1148, 1095, 2584, 1145, 1094,
-     1097, 1115, 1097, 1098, 1098, 1119, 1116, 1104, 1122, 1110,
-     1124, 1110, 1118, 1127, 1107, 1122, 1129, 1171, 1167, 2584,
-     1173, 1174, 1116, 1126, 1136, 1120, 1140, 1128, 1124, 1131,
-
-     1140, 1128, 1135, 1136, 1148, 1189, 1136, 1191, 1135, 1137,
-     1154, 1195, 1145, 1144, 1150, 1148, 1146, 1141, 1202, 1153,
-     1204, 1200, 1206, 2584, 1147, 1164, 1157, 1148, 1167, 1155,
-     1165, 1166, 1162, 1175, 1175, 2584, 1160, 1156, 1162, 2584,
-     1163, 1223, 1182, 1163, 1182, 1183, 1185, 1224, 1177, 1231,
-     1232, 1185, 1190, 1184, 1182, 1193, 1192, 1176, 1181, 1187,
-     1200, 2584, 1222, 1213, 1245, 1185, 1207, 1202, 1202, 1206,
-     1251, 2584, 1194, 1194, 1197, 1214, 1209, 1213, 1208, 2584,
-     1200, 1217, 1197, 1218, 1208, 1259, 1212, 2584, 1226, 1226,
-     1264, 1211, 1220, 1268, 1226, 1231, 1217, 1277, 1220, 1221,
-
-     1235, 1233, 1225, 1231, 1227, 1245, 1246, 1247, 2584, 1237,
-     2584, 1247, 2584, 1232, 1243, 1234, 1253, 1246, 1244, 1237,
-     1249, 1293, 1257, 1246, 1253, 1254, 1260, 2584, 1253, 2584,
-     1305, 1246, 1307, 2584, 1308, 1250, 1256, 1263, 1307, 1269,
-     2584, 1270, 2584, 1257, 2584, 1257, 1260, 1274, 1279, 1262,
-     1321, 1278, 1279, 1319, 1271, 1276, 1327, 1323, 1276, 1330,
-     2584, 1281, 1278, 1333, 1334, 1291, 1292, 1294, 2584, 2584,
-     1286, 1281, 1335, 1284, 1300, 1343, 1285, 1297, 1286, 1303,
-     1318, 1349, 2584, 1306, 1299, 1308, 1299, 1310, 2584, 1355,
-     1292, 1303, 1318, 1354, 1306, 1317, 1318, 1319, 1316, 1360,
-
-     1323, 1313, 1323, 1329, 1316, 1312, 1372, 1368, 1326, 1370,
-     1378, 1335, 2584, 1321, 1337, 1328, 1331, 1340, 1341, 1338,
-     1328, 1331, 1331, 1342, 1337, 1392, 1339, 1394, 1337, 1342,
-     1397, 1393, 1335, 1350, 1343, 1346, 1359, 1360, 1358, 1407,
-     2584, 1360, 2584, 2584, 1366, 1358, 1368, 1353, 1409, 1356,
-     1356, 1417, 1418, 1362, 1372, 1421, 2584, 1369, 1370, 1372,
-     1425, 1366, 1369, 2584, 1387, 1388, 2584, 1388, 1376, 2584,
-     2584, 1389, 1372, 1392, 1393, 1379, 1381, 1440, 1390, 2584,
-     1442, 1391, 1385, 1445, 1425, 2584, 1447, 1404, 1449, 1400,
-     1447, 2584, 1395, 1454, 1404, 1398, 1395, 1398, 1400, 1417,
-
-     1456, 1409, 1421, 1424, 1412, 1415, 1408, 1415, 1406, 2584,
-     1414, 1429, 1414, 2584, 1416, 1470, 1418, 1472, 1434, 1434,
-     1437, 1437, 1434, 1478, 1440, 1432, 1433, 2584, 1434, 2584,
-     1444, 1436, 2584, 1442, 1447, 1448, 1445, 1489, 1437, 1452,
-     1453, 1445, 2584, 1442, 1443, 1443, 1449, 1448, 1446, 1500,
-     1461, 2584, 2584, 1502, 1449, 2584, 1450, 1451, 1457, 2584,
-     1466, 1460, 1515, 1462, 1455, 1467, 1462, 1472, 1483, 1476,
-     1482, 1472, 1527, 1480, 2584, 1489, 2584, 1486, 1531, 2584,
-     1484, 1507, 2584, 1534, 2584, 1492, 1477, 1537, 2584, 1538,
-     1495, 1500, 1482, 1542, 1538, 1502, 1499, 1495, 1488, 1543,
-
-     1501, 1502, 1492, 1497, 1509, 1554, 1509, 1557, 1507, 1554,
-     1519, 1519, 1515, 1559, 1507, 1512, 1510, 1569, 1520, 1526,
-     1514, 1573, 1569, 1532, 1576, 1537, 1526, 1520, 1580, 1522,
-     1523, 1537, 1540, 1540, 1586, 1528, 1545, 1541, 1539, 1546,
-     1530, 1588, 1589, 1590, 1553, 1546, 1545, 1545, 1540, 1558,
-     2584, 1549, 1555, 1560, 1547, 1548, 1547, 1549, 1604, 1550,
-     2584, 1546, 1564, 1613, 2584, 1571, 1584, 2584, 1616, 1569,
-     2584, 2584, 1560, 1571, 1620, 2584, 1566, 1571, 1569, 1619,
-     1577, 1582, 1571, 1587, 1576, 1574, 1588, 1575, 2584, 1577,
-     2584, 1595, 1581, 1590, 1633, 1576, 1581, 1641, 1589, 1600,
-
-     1601, 2584, 1646, 1642, 1600, 1644, 2584, 1595, 1651, 2584,
-     1594, 1609, 1597, 2584, 1607, 1608, 1657, 1615, 1619, 2584,
-     1655, 1621, 1597, 1615, 1616, 1625, 1607, 1614, 1626, 1625,
-     1616, 1666, 1618, 1614, 1674, 1616, 1617, 1677, 1673, 1679,
-     1629, 1681, 1634, 1624, 1640, 1633, 2584, 1686, 1687, 2584,
-     1636, 1689, 1631, 2584, 1634, 1644, 1688, 1636, 1651, 1638,
-     1653, 1639, 1646, 1646, 1701, 1658, 1659, 1646, 1648, 1662,
-     1648, 1708, 1661, 2584, 1705, 1656, 1653, 2584, 1655, 1668,
-     1655, 1676, 2584, 1673, 1718, 1671, 1668, 1669, 2584, 1722,
-     1681, 1664, 1666, 1682, 1675, 1665, 1681, 1682, 1691, 1681,
-
-     1733, 1693, 1677, 1686, 1732, 2584, 1690, 1739, 2584, 1688,
-     2584, 1682, 2584, 1689, 1743, 1744, 1741, 2584, 2584, 1703,
-     2584, 1743, 1705, 1706, 1691, 1692, 1700, 1754, 1702, 1751,
-     1752, 1707, 2584, 1702, 1720, 1702, 1708, 1721, 1716, 2584,
-     1713, 1718, 1716, 1768, 1725, 1770, 1718, 1715, 1715, 2584,
-     1730, 1731, 1732, 2584, 1733, 1723, 1735, 1780, 1733, 1782,
-     1724, 1732, 1733, 1746, 2584, 1747, 1728, 1729, 1736, 1738,
-     2584, 1752, 1749, 1789, 1750, 2584, 2584, 1754, 1739, 1739,
-     1754, 1747, 1746, 1757, 1744, 2584, 1760, 1748, 1751, 1807,
-     1747, 1766, 1805, 1769, 1762, 1761, 1770, 1772, 1776, 2584,
-
-     1766, 2584, 1770, 1761, 1820, 1763, 1822, 1823, 1824, 1782,
-     1826, 2584, 1768, 2584, 1823, 1785, 1786, 1773, 1781, 1792,
-     1779, 1790, 1776, 1774, 1782, 1781, 1786, 1778, 1843, 1796,
-     1797, 1787, 1804, 1803, 1844, 1788, 1807, 1808, 2584, 1813,
-     1806, 1845, 1812, 1799, 1814, 1859, 1816, 1819, 1818, 1807,
-     1816, 2584, 1865, 2584, 2584, 2584, 1826, 2584, 1867, 1809,
-     1869, 1870, 1813, 1872, 1820, 1869, 1870, 1832, 1872, 1818,
-     1822, 1840, 1881, 1840, 2584, 1831, 1821, 1880, 1846, 1839,
-     1835, 1889, 1832, 1834, 1833, 1840, 1883, 1837, 1896, 1840,
-     2584, 1845, 1855, 1858, 1841, 1849, 2584, 1844, 2584, 1856,
-
-     2584, 2584, 1861, 2584, 1862, 1862, 1853, 1909, 1853, 1863,
-     1848, 1861, 2584, 1863, 1871, 1916, 1857, 1859, 1856, 1880,
-     2584, 1867, 1874, 1875, 1878, 1925, 1868, 2584, 1922, 1869,
-     1877, 1871, 1887, 1886, 1889, 1882, 1877, 1877, 1889, 1884,
-     2584, 1895, 1883, 1936, 1887, 1899, 1944, 2584, 1890, 1902,
-     1947, 1896, 1898, 1896, 1897, 1952, 2584, 1905, 1892, 1907,
-     1912, 1909, 1958, 1959, 1960, 1917, 1962, 1963, 1907, 1911,
-     1907, 1923, 1906, 1918, 1912, 2584, 1928, 1972, 2584, 1929,
-     1914, 1932, 1923, 2584, 1924, 1938, 1934, 1927, 1927, 2584,
-     2584, 2584, 1982, 2584, 2584, 1925, 1933, 1928, 1981, 1947,
-
-     1944, 1989, 1950, 2584, 1991, 1933, 1993, 1936, 1949, 1948,
-     1949, 1939, 1946, 2584, 1941, 2001, 1954, 1963, 1956, 2000,
-     2584, 1947, 2584, 1959, 2584, 2003, 2009, 1951, 1967, 2012,
-     2013, 2014, 2584, 1971, 1965, 1958, 1978, 1975, 1967, 1971,
-     2584, 2018, 1967, 2584, 2584, 2584, 1967, 1975, 2022, 1982,
-     1975, 2030, 1978, 1978, 1974, 1976, 2035, 2036, 1978, 1994,
-     1979, 2584, 2040, 1987, 1994, 2043, 2584, 2584, 1996, 2045,
-     1993, 2584, 1997, 1996, 2584, 1997, 2584, 1991, 1991, 2008,
-     2009, 2054, 2000, 2056, 2057, 2584, 2058, 2584, 2584, 2584,
-     2584, 2064, 2067, 2070, 2071, 2073, 2076, 2079, 2082
-
+     2589, 2590,   34, 2585,  145,    0,  207, 2590,  214,  221,
+       13,  228, 2590, 2565,  118,   25,    2,    6, 2590, 2590,
+       73,   11,   17, 2590, 2590, 2590,  104, 2573, 2526,    0,
+     2563,  108, 2580,   24,  262, 2590, 2522,   67, 2528,   84,
+       75,   88,  224,   91,   89,  290,  220, 2520,  206,  285,
+      236,  204,  197,   60,  291, 2529,  247,  308,  315,  214,
+      286, 2512,  212,  320,  344,  318, 2531,  335,    0,  385,
+      401,  415,  422,  427, 2590,    0, 2590,  441,  446,  236,
+      314,  238,  326,  353,  309, 2590, 2528, 2569, 2590,  263,
+
+     2590,  440, 2556,  308, 2525,  364,   10,  329,  359,  384,
+      391,  241, 2566,    0,  501,  408, 2508, 2505, 2509,  418,
+     2505,   80, 2513,  422, 2499, 2500, 2505,   78, 2515, 2498,
+     2507, 2497, 2506,  341,  343,  340, 2499, 2497,  410, 2545,
+     2549, 2495, 2488, 2541, 2481,  174, 2502, 2502, 2496,  340,
+     2489, 2487, 2488, 2480, 2485, 2479,  429, 2490,  412, 2475,
+     2474, 2488,  425, 2474,  422,  447, 2468,  497,  436,  471,
+     2489, 2486, 2487,  432, 2485, 2520, 2519,  450,  446, 2466,
+      471, 2467,  478, 2459, 2476, 2468, 2470,    0,  477,  483,
+      473,  496,  489,  515, 2466, 2590, 2511,  530, 2460,  499,
+
+      523,  530, 2514,  535, 2513,  532, 2512, 2590, 2590,  578,
+      441,  543, 2471, 2463, 2450, 2461, 2465, 2466, 2446, 2457,
+     2461, 2458, 2457,  475,  516, 2495, 2459, 2440, 2437, 2445,
+     2440, 2454, 2450, 2441, 2437, 2449, 2449, 2437, 2439, 2442,
+     2422, 2426, 2439, 2441, 2438, 2430, 2420, 2438, 2590, 2423,
+     2432,  523, 2470, 2416, 2425, 2467, 2414, 2424, 2427,  510,
+     2423, 2462, 2407, 2409, 2420, 2458,  557, 2403,  562, 2416,
+     2396, 2411,  561, 2401, 2407,  527, 2398, 2396, 2396, 2402,
+     2393, 2392, 2399, 2389, 2448, 2404, 2403, 2397,  530, 2404,
+     2399, 2391, 2381, 2396, 2395, 2390, 2394, 2375, 2391, 2377,
+
+     2383, 2390, 2372,  536, 2377, 2374, 2373,  603, 2372, 2367,
+     2381,  571, 2380, 2423, 2382,  560, 2373, 2361,  561, 2590,
+     2590,  583, 2590, 2590, 2359,  566,  461, 2407,  586, 2417,
+      580, 2590, 2416, 2590, 2410,  630, 2590, 2372,  590, 2349,
+     2358, 2406, 2366, 2349, 2366, 2402, 2362, 2345, 2351, 2403,
+     2358, 2361, 2352, 2355, 2341, 2352, 2396, 2390, 2348, 2345,
+      621, 2351, 2391, 2326, 2384, 2337, 2332, 2326, 2328, 2331,
+     2378, 2335, 2324, 2340, 2374, 2320,  628, 2334, 2319, 2318,
+     2331, 2329, 2327, 2327, 2326, 2321, 2328, 2323, 2319,  599,
+     2317, 2320, 2315, 2301, 2313, 2309, 2359,  589,  602, 2353,
+
+     2590, 2300, 2316, 2350, 2300, 2299, 2298, 2291, 2293, 2305,
+     2296, 2303, 2284, 2301, 2296,  610, 2343, 2296, 2293, 2296,
+     2590, 2295,  559, 2285, 2297,  600, 2272, 2273, 2294, 2285,
+     2275, 2326, 2271, 2285,  614, 2271, 2283, 2282, 2281, 2276,
+     2318, 2278, 2277, 2276, 2275, 2258, 2266, 2316, 2275, 2255,
+     2313, 2590, 2255, 2254,  661, 2267, 2265, 2590, 2590, 2265,
+     2254, 2246,  605, 2305, 2304, 2590, 2303, 2590,  639,  687,
+     2262,  606, 2301, 2243, 2254, 2293, 2246, 2248, 2250, 2237,
+     2245, 2233, 2590, 2238, 2231, 2243, 2246, 2233, 2232, 2590,
+      631, 2234, 2231,  626, 2229, 2231, 2590, 2276, 2238, 2235,
+
+     2220, 2234, 2232, 2232, 2226,  678, 2233, 2221, 2214, 2265,
+     2590, 2212, 2228, 2262, 2223, 2221, 2219, 2220, 2204, 2213,
+     2255, 2206, 2205, 2200, 2199, 2250, 2194,  636, 2213, 2187,
+     2194, 2199, 2209, 2243, 2247, 2590, 2192, 2188,  710, 2186,
+     2238, 2194, 2193, 2187, 2194, 2178, 2178, 2188, 2176, 2190,
+     2190, 2178, 2174, 2172, 2590, 2229, 2590, 2171, 2182, 2221,
+     2166, 2165, 2170, 2179, 2173, 2167, 2176, 2218, 2212, 2174,
+     2158, 2153, 2173, 2148, 2154,  589, 2168, 2161, 2165, 2148,
+     2206, 2147, 2147, 2198, 2143, 2144, 2143, 2141, 2158, 2590,
+     2154, 2191, 2590, 2142, 2140, 2590, 2151, 2187, 2186, 2146,
+
+     2130, 2147, 2187, 2590, 2590, 2590,  649,  664, 2127,  711,
+     2590, 2137, 2136,  660, 2143, 2123, 2133, 2175, 2120, 2173,
+     2118, 2128, 2170, 2115, 2122, 2115, 2127, 2109, 2109, 2124,
+     2123,  659, 2122, 2121, 2121, 2103, 2108, 2149, 2116, 2113,
+     2107, 2152, 2096, 2111, 2111, 2109, 2109, 2590, 2094, 2091,
+     2149, 2104, 2096, 2102, 2093, 2101, 2086, 2137, 2101, 2083,
+     2095, 2087,  530, 2078, 2077, 2071, 2076, 2091, 2088, 2089,
+     2068, 2078, 2084, 2127, 2082, 2074, 2065, 2590, 2066, 2068,
+     2063, 2076, 2068, 2067, 2072, 2111, 2110, 2061,   16, 2070,
+     2107, 2052, 2105, 2052, 2055, 2048, 2590, 2062, 2041, 2045,
+
+     2059, 2054, 2050, 2095, 2047, 2054, 2092, 2590, 2037, 2051,
+     2050, 2053, 2034, 2086, 2085, 2032, 2083, 2043, 2027, 2076,
+       20, 2590,  188,  224,  239,  702,  324,  363,  377,  457,
+      606,  572,  599,  585,  625,  649,  642, 2590,  674,  667,
+     2590,  691,  702,  670,  667,  667,  682,  694,  688,  677,
+      673,  687,  688,  735,  699,  742,  702,  706,  739,  740,
+      700,  700,  710,  715,  701,  704,  715,  715,  699,  756,
+      709,  719,  722,  760,  723,  716,  720,  717,  719,  766,
+      767,  731,  775,  732,  734, 2590,  737,  732,  723,  738,
+      743,  740,  728,  744,  743,  731,  745,  743,  751,  787,
+
+      749,  794,  795,  745,  737,  747,  794,  752,  802, 2590,
+      803,  756,  758,  754,  748,  764,  752,  765,  811,  807,
+      770,  759,  772, 2590,  762,  773,  762,  775,  765,  778,
+      822,  823,  766,  777,  762,  785,  776,  765,  771,  826,
+      790,  774,  786,  830,  831,  778,  833,  797,  792,  797,
+      795,  839,  781,  793,  796,  800,  792,  789, 2590,  853,
+      812,  813,  801,  815,  805,  808,  819,  804,  811,  817,
+      818,  810,  824,  864,  840,  814,  828,  833,  830,  812,
+      819,  833,  878,  835,  832,  833,  831,  840, 2590,  836,
+      831,  846,  843,  829,  831,  850,  847,  835,  842,  843,
+
+      852,  856,  892,  855,  845,  843,  842,  853,  849,  905,
+      852,  863,  848,  849,  855,  871,  867,  862,  909, 2590,
+      873,  873,  866,  877,  875,  920,  862,  864,  883,  880,
+      868,  866,  928,  885,  871,  877,  875, 2590, 2590,  885,
+      890,  895,  883,  893,  895, 2590, 2590,  896,  883,  901,
+      888,  890,  883,  886, 2590,  889,  907,  894,  944,  895,
+      947,  893,  897,  915,  956, 2590, 2590,  901,  905,  904,
+      901,  917,  962,  915,  905,  906,  902,  915,  926,  927,
+      922,  923,  925,  918,  920,  916,  922,  922,  924,  939,
+      922,  981,  938,  943,  920,  943,  929,  928, 2590,  935,
+
+      936,  985,  986,  938,  951,  989,  947,  937,  952,  946,
+      954,  941,  973,  981, 1003,  951,  946, 1001, 1002,  964,
+     1004, 2590, 1010,  953,  969,  973, 1014,  964,  963,  958,
+      959,  971,  966,  962,  965,  966,  976,  986, 1022,  970,
+      988,  980,  975, 1033,  990,  991,  982, 2590,  996,  985,
+      988,  996,  998,  983,  995, 1000,  997,  995, 1042, 1008,
+      992,  993, 2590, 1009, 1012,  995, 1006, 1055,  998, 1017,
+     2590, 1016, 1019, 1005, 1000, 1018, 1058, 1016, 1012, 1009,
+     1062, 1063, 1025, 1011, 1029, 1029, 1029, 1074, 1031, 1017,
+     1032, 1024, 1031, 1021, 1039, 1038, 1025, 1042, 2590, 1034,
+
+     1040, 1043, 1088, 1035, 2590, 1038, 1043, 1088, 1039, 1051,
+     1045, 1046, 1044, 1046, 1056, 1101, 1045, 1046, 1046, 1105,
+     1049, 1061, 1054, 2590, 1050, 1058, 1056, 1107, 1050, 1071,
+     1057, 1058, 1059, 1060, 1066, 1074, 1065, 1070, 1080, 1081,
+     1082, 1087, 1128, 1100, 1105, 2590, 1087, 1084, 1080, 1094,
+     1077, 1077, 2590, 1078, 1138, 1081, 2590, 1092, 1082, 1102,
+     1101, 1092, 1103, 1146, 1107, 1100, 1104, 1108, 1091, 1108,
+     1099, 1154, 1101, 2590, 1151, 1100, 1103, 1121, 1103, 1104,
+     1104, 1125, 1122, 1110, 1128, 1116, 1130, 1116, 1124, 1133,
+     1113, 1128, 1135, 1177, 1173, 2590, 1179, 1180, 1122, 1132,
+
+     1142, 1126, 1146, 1134, 1130, 1137, 1146, 1134, 1141, 1142,
+     1154, 1195, 1142, 1197, 1141, 2590, 1143, 1160, 1201, 1151,
+     1150, 1156, 1154, 1152, 1147, 1208, 1159, 1210, 1206, 1212,
+     2590, 1153, 1170, 1163, 1154, 1173, 1161, 1171, 1172, 1168,
+     1181, 1181, 2590, 1166, 1162, 1168, 2590, 1169, 1229, 1188,
+     1169, 1188, 1189, 1191, 1230, 1183, 1237, 1238, 1191, 1196,
+     1190, 1188, 1199, 1198, 1182, 1187, 1193, 1206, 2590, 1228,
+     1219, 1251, 1191, 1213, 1208, 1208, 1212, 1257, 2590, 1200,
+     1200, 1203, 1220, 1215, 1219, 1214, 2590, 1206, 1223, 1203,
+     1224, 1214, 1265, 1218, 2590, 1232, 1232, 1270, 1217, 1226,
+
+     1274, 1232, 1237, 1223, 1283, 1226, 1227, 1241, 1239, 1231,
+     1237, 1233, 1251, 1252, 1253, 2590, 1243, 2590, 1253, 2590,
+     1238, 1249, 1240, 1259, 1252, 1250, 1243, 1255, 1299, 1263,
+     1252, 1259, 1260, 1266, 2590, 1259, 2590, 1311, 1252, 1313,
+     2590, 1314, 1256, 1262, 1269, 1313, 1275, 2590, 1276, 2590,
+     1263, 2590, 1263, 1266, 1280, 1285, 1268, 1327, 1284, 1285,
+     1325, 1277, 1282, 1333, 1329, 1282, 1336, 2590, 1287, 1284,
+     1339, 1340, 1297, 1298, 1300, 2590, 2590, 1292, 1287, 1341,
+     1290, 1306, 1349, 1291, 1303, 1292, 1309, 1324, 1355, 2590,
+     1312, 1305, 1314, 1305, 1316, 2590, 1361, 1298, 1309, 1324,
+
+     1360, 1312, 1323, 1324, 1325, 1322, 1366, 1329, 1319, 1329,
+     1335, 1322, 1318, 1378, 1374, 1332, 1376, 1384, 1341, 2590,
+     1327, 1343, 1334, 1337, 1346, 1347, 1344, 1334, 1337, 1337,
+     1348, 1343, 1398, 1345, 1400, 1343, 1348, 1403, 1399, 1341,
+     1356, 1349, 1352, 1365, 1366, 1364, 1413, 2590, 1366, 2590,
+     2590, 1372, 1364, 1374, 1359, 1415, 1362, 1362, 1423, 1424,
+     1368, 1378, 1427, 2590, 1375, 1376, 1378, 1431, 1372, 1375,
+     2590, 1393, 1394, 2590, 1394, 1382, 2590, 2590, 1395, 1378,
+     1398, 1399, 1385, 1387, 1446, 1396, 2590, 1448, 1397, 1391,
+     1451, 1431, 2590, 1453, 1410, 1455, 1406, 1453, 2590, 1401,
+
+     1460, 1410, 1404, 1401, 1404, 1406, 1423, 1462, 1415, 1427,
+     1430, 1418, 1421, 1414, 1421, 1412, 2590, 1420, 1435, 1420,
+     2590, 1422, 1476, 1424, 1478, 1440, 1440, 1443, 1443, 1440,
+     1484, 1446, 1438, 1439, 2590, 1440, 2590, 1450, 1442, 2590,
+     1448, 1453, 1454, 1451, 1495, 1443, 1458, 1459, 1451, 2590,
+     1448, 1449, 1449, 1455, 1454, 1452, 1506, 1467, 2590, 2590,
+     1508, 1455, 2590, 1456, 1457, 1463, 2590, 1472, 1466, 1521,
+     1468, 1461, 1473, 1468, 1478, 1489, 1482, 1488, 1478, 1533,
+     1486, 2590, 1495, 2590, 1492, 1537, 2590, 1490, 1513, 2590,
+     1540, 2590, 1498, 1483, 1543, 2590, 1544, 1501, 1506, 1488,
+
+     1548, 1544, 1508, 1505, 1501, 1494, 1549, 1507, 1508, 1498,
+     1503, 1515, 1560, 1515, 1563, 1513, 1560, 1525, 1525, 1521,
+     1565, 1513, 1518, 1516, 1575, 1526, 1532, 1520, 1579, 1575,
+     1538, 1582, 1543, 1532, 1526, 1586, 1528, 1529, 1543, 1546,
+     1546, 1592, 1534, 1551, 1547, 1545, 1552, 1536, 1594, 1595,
+     1596, 1559, 1552, 1551, 1551, 1546, 1564, 2590, 1555, 1561,
+     1566, 1553, 1554, 1553, 1555, 1610, 1556, 2590, 1552, 1570,
+     1619, 2590, 1577, 1590, 2590, 1622, 1575, 2590, 2590, 1566,
+     1577, 1626, 2590, 1572, 1577, 1575, 1625, 1583, 1588, 1577,
+     1593, 1582, 1580, 1594, 1581, 2590, 1583, 2590, 1601, 1587,
+
+     1596, 1639, 1582, 1587, 1647, 1595, 1606, 1607, 2590, 1652,
+     1648, 1606, 1650, 2590, 1601, 1657, 2590, 1600, 1615, 1603,
+     2590, 1613, 1614, 1663, 1621, 1625, 2590, 1661, 1627, 1603,
+     1621, 1622, 1631, 1613, 1620, 1632, 1631, 1622, 1672, 1624,
+     1620, 1680, 1622, 1623, 1683, 1679, 1685, 1635, 1687, 1640,
+     1630, 1646, 1639, 2590, 1692, 1693, 2590, 1642, 1695, 1637,
+     2590, 1640, 1650, 1694, 1642, 1657, 1644, 1659, 1645, 1652,
+     1652, 1707, 1664, 1665, 1652, 1654, 1668, 1654, 1714, 1667,
+     2590, 1711, 1662, 1659, 2590, 1661, 1674, 1661, 1682, 2590,
+     1679, 1724, 1677, 1674, 1675, 2590, 1728, 1687, 1670, 1672,
+
+     1688, 1681, 1671, 1687, 1688, 1697, 1687, 1739, 1699, 1683,
+     1692, 1738, 2590, 1696, 1745, 2590, 1694, 2590, 1688, 2590,
+     1695, 1749, 1750, 1747, 2590, 2590, 1709, 2590, 1749, 1711,
+     1712, 1697, 1698, 1706, 1760, 1708, 1757, 1758, 1713, 2590,
+     1708, 1726, 1708, 1714, 1727, 1722, 2590, 1719, 1724, 1722,
+     1774, 1731, 1776, 1724, 1721, 1721, 2590, 1736, 1737, 1738,
+     2590, 1739, 1729, 1741, 1786, 1739, 1788, 1730, 1738, 1739,
+     1752, 2590, 1753, 1734, 1735, 1742, 1744, 2590, 1758, 1755,
+     1795, 1756, 2590, 2590, 1760, 1745, 1745, 1760, 1753, 1752,
+     1763, 1750, 2590, 1766, 1754, 1757, 1813, 1753, 1772, 1811,
+
+     1775, 1768, 1767, 1776, 1778, 1782, 2590, 1772, 2590, 1776,
+     1767, 1826, 1769, 1828, 1829, 1830, 1788, 1832, 2590, 1774,
+     2590, 1829, 1791, 1792, 1779, 1787, 1798, 1785, 1796, 1782,
+     1780, 1788, 1787, 1792, 1784, 1849, 1802, 1803, 1793, 1810,
+     1809, 1850, 1794, 1813, 1814, 2590, 1819, 1812, 1851, 1818,
+     1805, 1820, 1865, 1822, 1825, 1824, 1813, 1822, 2590, 1871,
+     2590, 2590, 2590, 1832, 2590, 1873, 1815, 1875, 1876, 1819,
+     1878, 1826, 1875, 1876, 1838, 1878, 1824, 1828, 1846, 1887,
+     1846, 2590, 1837, 1827, 1886, 1852, 1845, 1841, 1895, 1838,
+     1840, 1839, 1846, 1889, 1843, 1902, 1846, 2590, 1851, 1861,
+
+     1864, 1847, 1855, 2590, 1850, 2590, 1862, 2590, 2590, 1867,
+     2590, 1868, 1868, 1859, 1915, 1859, 1869, 1854, 1867, 2590,
+     1869, 1877, 1922, 1863, 1865, 1862, 1886, 2590, 1873, 1880,
+     1881, 1884, 1931, 1874, 2590, 1928, 1875, 1883, 1877, 1893,
+     1892, 1895, 1888, 1883, 1883, 1895, 1890, 2590, 1901, 1889,
+     1942, 1893, 1905, 1950, 2590, 1896, 1908, 1953, 1902, 1904,
+     1902, 1903, 1958, 2590, 1911, 1898, 1913, 1918, 1915, 1964,
+     1965, 1966, 1923, 1968, 1969, 1913, 1917, 1913, 1929, 1912,
+     1924, 1918, 2590, 1934, 1978, 2590, 1935, 1920, 1938, 1929,
+     2590, 1930, 1944, 1940, 1933, 1933, 2590, 2590, 2590, 1988,
+
+     2590, 2590, 1931, 1939, 1934, 1987, 1953, 1950, 1995, 1956,
+     2590, 1997, 1939, 1999, 1942, 1955, 1954, 1955, 1945, 1952,
+     2590, 1947, 2007, 1960, 1969, 1962, 2006, 2590, 1953, 2590,
+     1965, 2590, 2009, 2015, 1957, 1973, 2018, 2019, 2020, 2590,
+     1977, 1971, 1964, 1984, 1981, 1973, 1977, 2590, 2024, 1973,
+     2590, 2590, 2590, 1973, 1981, 2028, 1988, 1981, 2036, 1984,
+     1984, 1980, 1982, 2041, 2042, 1984, 2000, 1985, 2590, 2046,
+     1993, 2000, 2049, 2590, 2590, 2002, 2051, 1999, 2590, 2003,
+     2002, 2590, 2003, 2590, 1997, 1997, 2014, 2015, 2060, 2006,
+     2062, 2063, 2590, 2064, 2590, 2590, 2590, 2590, 2070, 2073,
+
+     2076, 2077, 2079, 2082, 2085, 2088
     } ;
 
-static const flex_int16_t yy_def[2200] =
+static const flex_int16_t yy_def[2207] =
     {   0,
-     2192, 2192, 2193, 2193, 2192, 2192, 2192, 2192, 2192, 2192,
-     2191, 2191, 2191, 2191, 2191, 2194, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2195,
-     2191, 2191, 2191, 2196,   15, 2191,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2197,   45,   45,   45,   45,
+     2199, 2199, 2200, 2200, 2199, 2199, 2199, 2199, 2199, 2199,
+     2198, 2198, 2198, 2198, 2198, 2201, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2202,
+     2198, 2198, 2198, 2203,   15, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2204,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2194, 2191,
-     2191, 2191, 2191, 2191, 2191, 2198, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2195, 2191, 2196,
+       45,   45,   45,   45,   45,   45,   45,   45, 2201, 2198,
+     2198, 2198, 2198, 2198, 2198, 2205, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2202, 2198, 2203,
 
-     2191, 2191,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2199,   45, 2197,   45,   45,   45,   45,   45,
+     2198, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2206,   45, 2204,   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,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2198, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2205, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 2199, 2191, 2191,  115,
+       45,   45,   45,   45,   45,   45, 2206, 2198, 2198,  115,
        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, 2191,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   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,
@@ -1272,9 +1273,9 @@ static const flex_int16_t yy_def[2200] =
        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, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191,   45,   45,   45,   45,   45,
-       45, 2191,   45, 2191,   45,  115, 2191,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198,   45,   45,   45,   45,   45,
+       45, 2198,   45, 2198,   45,  115, 2198,   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,
@@ -1282,215 +1283,216 @@ static const flex_int16_t yy_def[2200] =
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     2191,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2198,   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,
-     2191,   45,   45,   45,   45,   45, 2191, 2191, 2191,   45,
-       45,   45,   45,   45, 2191,   45, 2191,   45,  115,   45,
+       45, 2198,   45,   45,   45,   45,   45, 2198, 2198, 2198,
+       45,   45,   45,   45,   45, 2198,   45, 2198,   45,  115,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191,   45,   45,   45,   45,   45,   45, 2191,   45,
-       45,   45,   45,   45,   45, 2191,   45,   45,   45,   45,
+       45,   45, 2198,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2191,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45, 2191,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2198,   45, 2198,   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, 2191,   45,   45,
-     2191,   45,   45, 2191,   45,   45,   45, 2191,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45, 2198,   45,   45, 2198,   45,   45,   45, 2198,
 
-       45, 2191, 2191, 2191,   45,   45,   45,   45, 2191,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2198, 2198, 2198,   45,   45,   45,   45,
+     2198,   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, 2191,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   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, 2191,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
 
-       45,   45,   45,   45, 2191,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2191,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2191,   45,   45, 2191,   45,   45,
+       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+     2198,   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, 2191,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 2191,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2198,   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, 2191,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   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, 2191,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   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, 2191,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2191, 2191,   45,   45,   45,   45,   45,
-       45, 2191, 2191,   45,   45,   45,   45,   45,   45, 2191,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2191, 2191,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198, 2198,   45,
+       45,   45,   45,   45,   45, 2198, 2198,   45,   45,   45,
+       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2198, 2198,   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, 2191,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2191,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2191,   45,   45,
-       45,   45,   45,   45,   45, 2191,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2198,   45,   45,   45,   45,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45, 2191,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
 
+       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2191,   45,   45,
+       45,   45,   45, 2198,   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, 2191,
-       45,   45,   45,   45,   45,   45, 2191,   45,   45,   45,
-     2191,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2191,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
+       45,   45, 2198,   45,   45,   45, 2198,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
+       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2191,   45,   45,   45, 2191,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191,   45,   45,   45,   45,   45,   45,   45, 2191,
-       45,   45,   45,   45,   45,   45,   45, 2191,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 2198,   45,   45,   45, 2198,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45, 2191,   45,
-     2191,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2191,   45, 2191,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
-     2191,   45, 2191,   45, 2191,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45,   45,   45,   45,   45,   45,   45, 2191, 2191,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45, 2191,   45,
+       45,   45,   45,   45,   45, 2198,   45, 2198,   45, 2198,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2198,   45, 2198,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45, 2198,   45, 2198,
+       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45,   45,   45,   45,   45, 2198, 2198,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45, 2191, 2191,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2191,   45,   45,   45,
-       45,   45,   45, 2191,   45,   45, 2191,   45,   45, 2191,
-     2191,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
-       45,   45,   45,   45,   45, 2191,   45,   45,   45,   45,
-       45, 2191,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 2191,   45, 2191,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191, 2191,   45,   45, 2191,   45,   45,   45, 2191,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45, 2198,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
+     2198,   45,   45, 2198,   45,   45, 2198, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+       45,   45, 2198,   45,   45,   45,   45,   45, 2198,   45,
+
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2191,   45, 2191,   45,   45, 2191,
-       45,   45, 2191,   45, 2191,   45,   45,   45, 2191,   45,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 2198,   45, 2198,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198, 2198,
+       45,   45, 2198,   45,   45,   45, 2198,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2198,   45, 2198,   45,   45, 2198,   45,   45, 2198,
+       45, 2198,   45,   45,   45, 2198,   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,
-     2191,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45,   45,   45, 2191,   45,   45, 2191,   45,   45,
-     2191, 2191,   45,   45,   45, 2191,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2191,   45,
-     2191,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45, 2191,   45,   45,   45,   45, 2191,   45,   45, 2191,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45, 2191,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45, 2198,   45,   45, 2198,   45,   45, 2198, 2198,   45,
+       45,   45, 2198,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45, 2198,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
+       45,   45,   45, 2198,   45,   45, 2198,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 2191,   45,   45, 2191,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2191,   45,   45,   45, 2191,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45, 2191,   45,
+       45,   45,   45, 2198,   45,   45, 2198,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2198,   45,   45,   45, 2198,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45, 2191,   45,   45, 2191,   45,
-     2191,   45, 2191,   45,   45,   45,   45, 2191, 2191,   45,
-     2191,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45, 2191,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2191,   45,   45,   45,   45,   45,
-     2191,   45,   45,   45,   45, 2191, 2191,   45,   45,   45,
-       45,   45,   45,   45,   45, 2191,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 2191,
-
-       45, 2191,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191,   45, 2191,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 2191,   45,
+       45,   45, 2198,   45,   45, 2198,   45, 2198,   45, 2198,
+       45,   45,   45,   45, 2198, 2198,   45, 2198,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 2198,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 2198,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45,   45, 2198, 2198,   45,   45,   45,   45,   45,   45,
+       45,   45, 2198,   45,   45,   45,   45,   45,   45,   45,
+
+       45,   45,   45,   45,   45,   45, 2198,   45, 2198,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191,   45, 2191, 2191, 2191,   45, 2191,   45,   45,
+       45,   45,   45,   45,   45, 2198,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
+     2198, 2198, 2198,   45, 2198,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 2191,   45,   45,   45,   45,   45,
+       45, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+
+       45,   45,   45, 2198,   45, 2198,   45, 2198, 2198,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+       45,   45,   45,   45, 2198,   45,   45,   45,   45,   45,
+       45,   45,   45, 2198,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45,   45,   45,   45,   45, 2191,   45, 2191,   45,
-
-     2191, 2191,   45, 2191,   45,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45,   45,   45,   45,   45,   45, 2191,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45,   45,   45,   45,   45,   45, 2191,   45,   45,
-       45,   45,   45,   45,   45,   45, 2191,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 2191,   45,   45, 2191,   45,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45, 2191,
-     2191, 2191,   45, 2191, 2191,   45,   45,   45,   45,   45,
-
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 2191,   45,   45,   45,   45,   45,   45,
-     2191,   45, 2191,   45, 2191,   45,   45,   45,   45,   45,
-       45,   45, 2191,   45,   45,   45,   45,   45,   45,   45,
-     2191,   45,   45, 2191, 2191, 2191,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 2191,   45,   45,   45,   45, 2191, 2191,   45,   45,
-       45, 2191,   45,   45, 2191,   45, 2191,   45,   45,   45,
-       45,   45,   45,   45,   45, 2191,   45, 2191, 2191, 2191,
-        0, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191
-
+       45,   45, 2198,   45,   45, 2198,   45,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45, 2198, 2198, 2198,   45,
+
+     2198, 2198,   45,   45,   45,   45,   45,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     2198,   45,   45,   45,   45,   45,   45, 2198,   45, 2198,
+       45, 2198,   45,   45,   45,   45,   45,   45,   45, 2198,
+       45,   45,   45,   45,   45,   45,   45, 2198,   45,   45,
+     2198, 2198, 2198,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 2198,   45,
+       45,   45,   45, 2198, 2198,   45,   45,   45, 2198,   45,
+       45, 2198,   45, 2198,   45,   45,   45,   45,   45,   45,
+       45,   45, 2198,   45, 2198, 2198, 2198,    0, 2198, 2198,
+
+     2198, 2198, 2198, 2198, 2198, 2198
     } ;
 
-static const flex_int16_t yy_nxt[2658] =
+static const flex_int16_t yy_nxt[2664] =
     {   0,
-     2191,   13,   14,   13, 2191,   15,   16, 2191,   17,   18,
+     2198,   13,   14,   13, 2198,   15,   16, 2198,   17,   18,
        19,   20,   21,   22,   22,   22,   22,   22,   23,   24,
-       85,  820,   37,   14,   37,   86,   25,   26,   38,  101,
-     2191,   27,   37,   14,   37,   42,   28,   42,   38,   91,
+       85,  824,   37,   14,   37,   86,   25,   26,   38,  101,
+      855,   27,   37,   14,   37,   42,   28,   42,   38,   91,
        92,   29,  201,   30,   13,   14,   13,   90,   91,   25,
        31,   92,   13,   14,   13,   13,   14,   13,   32,   40,
-      821,   13,   14,   13,   33,   40,  102,   91,   92,  201,
+      825,   13,   14,   13,   33,   40,  102,   91,   92,  201,
        90,   34,   35,   13,   14,   13,   94,   15,   16,   95,
        17,   18,   19,   20,   21,   22,   22,   22,   22,   22,
        23,   24,   13,   14,   13,   90,   39,  104,   25,   26,
@@ -1511,10 +1513,10 @@ static const flex_int16_t yy_nxt[2658] =
        81,   81,   81,   81,   81,   80,  106,   83,   83,   83,
        83,   83,  255,   82,   84,   84,   84,   84,   84,   80,
        82,   83,   83,   83,   83,   83,  137,   82,  109,  106,
-      104,  120,  853,  138,   82,  121,   82,  167,  110,  122,
+      104,  120,  856,  138,   82,  121,   82,  167,  110,  122,
       136,  168,  123,   82,  158,  124,  189,  206,  101,  125,
-       82,  109,  159,  854,  160,  191,  116,   82,   45,  161,
-      162,  132,  117,  133,   45,  118,  110,   45,  857,   45,
+       82,  109,  159,  857,  160,  191,  116,   82,   45,  161,
+      162,  132,  117,  133,   45,  118,  110,   45,  858,   45,
       206,   45,  189,   45,  134,  114,  146,  147,   45,   45,
 
       148,   45,   45,  191,  135,  102,  149,   45,   45,   45,
@@ -1524,13 +1526,13 @@ static const flex_int16_t yy_nxt[2658] =
        45,  108,  142,  111,  190,  165,  191,  198,   45,  143,
       131,  144,   45,  150,   45,  115,  189,  151,  176,  177,
       155,  152,  156,  112,  157,  169,  183,  202,  109,  170,
-      190,  858,  171,  153,  194,  198,  184,  154,  110,  172,
+      190,  861,  171,  153,  194,  198,  184,  154,  110,  172,
       173,  185,  192,  190,  174,  175,  236,  112,  237,  241,
       238,  178,  203,  179,  200,  202,  180,  187,   84,   84,
 
        84,   84,   84,  239,  259,  242,  181,  240,  260,  193,
-      859,   82,   80,  182,   81,   81,   81,   81,   81,  203,
-      200,  204,  270,   88,  205,   88,  860,   82,   89,   89,
+      862,   82,   80,  182,   81,   81,   81,   81,   81,  203,
+      200,  204,  270,   88,  205,   88,  863,   82,   89,   89,
        89,   89,   89,   80,   82,   83,   83,   83,   83,   83,
        84,   84,   84,   84,   84,  100,  337,  198,   82,  204,
        82,  205,  100,   82,   89,   89,   89,   89,   89,   89,
@@ -1539,254 +1541,255 @@ static const flex_int16_t yy_nxt[2658] =
       225,  280,  100,  203,  281,  282,  100,  276,  277,  278,
       100,  304,  283,  295,  296,  267,  284,  268,  100,  321,
 
-      338,  861,  100,  309,  100,  100,  209,  286,  204,  310,
+      338,  463,  100,  309,  100,  100,  209,  286,  204,  310,
       308,  205,  319,  320,  210,  210,  210,  210,  210,  320,
-      390,  862,  321,  210,  210,  210,  210,  210,  210,  297,
-      453,  319,  351,  298,  329,  352,  312,  299,  314,  320,
+      390,  864,  321,  210,  210,  210,  210,  210,  210,  297,
+      463,  319,  351,  298,  329,  352,  312,  299,  314,  320,
       319,  321,  287,  288,  289,  323,  210,  210,  210,  210,
       210,  210,  327,  290,  330,  291,  331,  292,  293,  322,
-      294,  333,  329,  335,  324,  327,  353,  410,  381,  424,
-      462,  405,  425,  391,  354,  327,  392,  411,  713,  331,
-      355,  330,  454,  331,  333,  382,  457,  440,  339,  441,
-      335,  336,  336,  336,  336,  336,  333,  457,  553,  462,
-
-      336,  336,  336,  336,  336,  336,  399,  406,  332,  457,
-      466,  464,  460,  445,  560,  462,  863,  466,  601,  333,
-      458,  407,  461,  336,  336,  336,  336,  336,  336,  493,
-      714,  510,  864,  449,  464,  494,  511,  536,  466,  469,
-      469,  469,  469,  469,  471,  538,  601,  537,  469,  469,
-      469,  469,  469,  469,  526,  527,  554,  564,  574,  528,
-      594,  565,  575,  561,  605,  595,  606,  633,  865,  668,
-      745,  469,  469,  469,  469,  469,  469,  746,  646,  669,
-      634,  601,  635,  647,  512,  604,  795,  796,  739,  513,
-      679,  605,  740,  606,   45,   45,   45,   45,   45,  866,
-
-      855,  867,  625,   45,   45,   45,   45,   45,   45,  608,
-      626,  856,  627,  628,  629,  739,  630,  738,  764,  868,
-      740,  765,  742,  869,  870,  871,   45,   45,   45,   45,
-       45,   45,  872,  873,  874,  875,  876,  877,  878,  879,
-      880,  881,  882,  883,  885,  886,  890,  891,  871,  884,
-      887,  888,  870,  889,  892,  893,  894,  895,  896,  897,
-      898,  899,  900,  901,  902,  903,  904,  905,  906,  907,
-      908,  909,  912,  913,  914,  910,  915,  916,  917,  911,
-      918,  919,  920,  921,  922,  923,  924,  925,  926,  927,
-      928,  929,  930,  931,  932,  933,  934,  935,  936,  937,
-
-      938,  940,  941,  939,  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,
-      968,  969,  970,  971,  972,  973,  974,  975,  976,  977,
-      978,  979,  981,  982,  983,  986,  987,  988,  980,  991,
-      989,  984,  992,  993,  994,  985,  990,  995,  996,  997,
-      998,  999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
-     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
-     1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
-     1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1009,
-
-     1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046,
-     1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
-     1057, 1058, 1060, 1061, 1062, 1063, 1059, 1064, 1065, 1066,
-     1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076,
-     1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1086, 1087,
-     1088, 1085, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096,
-     1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
-     1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116,
-     1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126,
-     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
-
-     1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
-     1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
-     1157, 1158, 1159, 1160, 1161, 1139, 1162, 1163, 1138, 1164,
-     1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
-     1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
-     1185, 1186, 1187, 1188, 1189, 1190, 1192, 1193, 1194, 1195,
-     1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205,
-     1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215,
-     1216, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
-     1227, 1217, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
-
-     1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
-     1246, 1247, 1248, 1191, 1249, 1250, 1251, 1252, 1253, 1254,
-     1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1265,
-     1264, 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, 1263, 1264, 1291, 1292,
-     1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302,
-     1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1313,
-     1315, 1316, 1317, 1312, 1318, 1319, 1320, 1321, 1322, 1323,
-     1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333,
-
-     1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343,
-     1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353,
-     1354, 1355, 1356, 1314, 1357, 1358, 1359, 1360, 1361, 1362,
-     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
-     1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382,
-     1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
-     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
-     1403, 1381, 1404, 1405, 1406, 1407, 1408, 1382, 1409, 1410,
-     1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420,
-     1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430,
-
-     1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440,
-     1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450,
-     1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460,
-     1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471,
-     1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481,
-     1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491,
-     1492, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502,
-     1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512,
-     1513, 1485, 1461, 1514, 1515, 1516, 1517, 1518, 1519, 1520,
-     1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530,
-
-     1531, 1532, 1533, 1534, 1493, 1535, 1536, 1538, 1539, 1540,
-     1541, 1542, 1543, 1544, 1537, 1545, 1546, 1547, 1548, 1549,
-     1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559,
-     1560, 1562, 1563, 1566, 1564, 1561, 1565, 1567, 1568, 1569,
-     1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579,
-     1580, 1582, 1583, 1584, 1585, 1581, 1586, 1587, 1588, 1589,
-     1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599,
-     1600, 1601, 1602, 1603, 1582, 1604, 1605, 1606, 1607, 1608,
-     1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618,
-     1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628,
-
-     1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638,
-     1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1650, 1647,
-     1651, 1652, 1648, 1653, 1654, 1649, 1655, 1656, 1657, 1658,
-     1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668,
-     1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678,
-     1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689,
-     1679, 1690, 1691, 1692, 1693, 1667, 1694, 1695, 1696, 1697,
-     1698, 1699, 1700, 1701, 1702, 1704, 1705, 1706, 1707, 1708,
-     1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718,
-     1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728,
-
-     1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738,
-     1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748,
-     1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758,
-     1759, 1760, 1703, 1761, 1762, 1763, 1764, 1765, 1766, 1767,
-     1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1749, 1776,
-     1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786,
-     1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796,
-     1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806,
-     1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816,
-     1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826,
-
-     1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836,
-     1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846,
-     1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856,
-     1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866,
-     1867, 1868, 1869, 1870, 1871, 1872, 1874, 1875, 1876, 1877,
-     1873, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886,
-     1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896,
-     1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906,
-     1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916,
-     1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926,
-
-     1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936,
-     1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946,
-     1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956,
-     1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966,
-     1967, 1968, 1969, 1970, 1972, 1973, 1971, 1974, 1975, 1976,
-     1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986,
-     1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-     1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-     2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
-     2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026,
-
-     2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036,
-     2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046,
-     2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056,
-     2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066,
-     2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076,
-     2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086,
-     2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096,
-     2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106,
-     2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116,
-     2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126,
-
-     2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136,
-     2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146,
-     2147, 2148, 2149, 2150, 2152, 2151, 2153, 2154, 2155, 2156,
-     2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166,
-     2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176,
-     2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186,
-     2187, 2188, 2189, 2190,   12,   12,   12,   36,   36,   36,
-       79,   98,   79,  100,  100,  100,  113,  113,  113,  188,
-      852,  188,  207,  207,  207,  851,  850,  849,  848,  847,
-      846,  845,  844,  843,  842,  841,  840,  839,  838,  837,
-
-      836,  835,  834,  833,  832,  831,  830,  829,  828,  827,
-      826,  825,  824,  823,  822,  819,  818,  817,  816,  815,
-      814,  813,  812,  811,  810,  809,  808,  807,  806,  805,
-      804,  803,  802,  801,  800,  799,  798,  797,  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,  763,  762,  761,
-      760,  759,  758,  757,  756,  755,  754,  753,  752,  751,
-      750,  749,  748,  747,  744,  743,  741,  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,  678,  677,  676,  675,  674,  673,
-      672,  671,  670,  667,  666,  665,  664,  663,  662,  661,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
-      650,  649,  648,  645,  644,  643,  642,  641,  640,  639,
-      638,  637,  636,  632,  631,  624,  623,  622,  621,  620,
-      619,  618,  617,  616,  615,  614,  613,  612,  611,  610,
-
-      609,  607,  604,  603,  602,  600,  599,  598,  597,  596,
-      593,  592,  591,  590,  589,  588,  587,  586,  585,  584,
-      583,  582,  581,  580,  579,  578,  577,  576,  573,  572,
-      571,  570,  569,  568,  567,  566,  563,  562,  559,  558,
-      557,  556,  555,  552,  551,  550,  549,  548,  547,  546,
-      545,  544,  543,  542,  541,  540,  539,  535,  534,  533,
-      532,  531,  530,  529,  525,  524,  523,  522,  521,  520,
-      519,  518,  517,  516,  515,  514,  509,  508,  507,  506,
-      505,  504,  503,  502,  501,  500,  499,  498,  497,  496,
-      495,  492,  491,  490,  489,  488,  487,  486,  485,  484,
-
-      483,  482,  481,  480,  479,  478,  477,  476,  475,  474,
-      473,  472,  470,  468,  467,  465,  463,  459,  456,  455,
-      452,  451,  450,  448,  447,  446,  444,  443,  442,  439,
-      438,  437,  436,  435,  434,  433,  432,  431,  430,  429,
-      428,  427,  426,  423,  422,  421,  420,  419,  418,  417,
-      416,  415,  414,  413,  412,  409,  408,  404,  403,  402,
-      401,  400,  398,  397,  396,  395,  394,  393,  389,  388,
-      387,  386,  385,  384,  383,  380,  379,  378,  377,  376,
-      375,  374,  373,  372,  371,  370,  369,  368,  367,  366,
-      365,  364,  363,  362,  361,  360,  359,  358,  357,  356,
-
-      350,  349,  348,  347,  346,  345,  344,  343,  342,  341,
-      340,  208,  334,  332,  328,  326,  325,  318,  317,  316,
-      315,  313,  311,  307,  306,  305,  302,  301,  300,  285,
-      279,  274,  273,  272,  269,  266,  265,  264,  263,  262,
-      261,  258,  257,  256,  253,  252,  251,  250,  249,  248,
-      244,  243,  235,  234,  233,  232,  231,  228,  227,  226,
-      222,  219,  215,  214,  213,  208,  199,  197,  196,  195,
-      186,  166,  145,  119,  105,  103,   43,   99,   97,   96,
-       87,   43, 2191,   11, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191
+      294,  333,  329,  335,  324,  327,  353,  401,  381,  562,
+      454,  406,  411,  391,  354,  327,  392,  798,  799,  331,
+      355,  330,  412,  331,  333,  382,  425,  458,  339,  426,
+      335,  336,  336,  336,  336,  336,  441,  333,  442,  716,
+
+      336,  336,  336,  336,  336,  336,  399,  407,  332,  458,
+      458,  402,  465,  446,  467,  555,  865,  866,  563,  461,
+      333,  408,  455,  336,  336,  336,  336,  336,  336,  462,
+      463,  494,  459,  511,  450,  465,  467,  495,  512,  537,
+      603,  603,  467,  470,  470,  470,  470,  470,  867,  538,
+      868,  717,  470,  470,  470,  470,  470,  470,  566,  472,
+      527,  528,  567,  576,  539,  529,  596,  577,  603,  610,
+      607,  597,  608,  556,  635,  470,  470,  470,  470,  470,
+      470,  742,  627,  648,  869,  670,  513,  636,  649,  637,
+      628,  514,  629,  630,  631,  671,  632,  607,  743,  608,
+
+       45,   45,   45,   45,   45,  870,  871,  859,  742,   45,
+       45,   45,   45,   45,   45,  606,  741,  748,  860,  767,
+      681,  745,  768,  872,  749,  873,  743,  874,  875,  876,
+      877,  878,   45,   45,   45,   45,   45,   45,  879,  880,
+      881,  882,  883,  884,  885,  886,  887,  889,  890,  894,
+      895,  875,  888,  891,  892,  874,  893,  896,  897,  898,
+      899,  900,  901,  902,  903,  904,  905,  906,  907,  908,
+      909,  910,  911,  912,  913,  916,  917,  918,  914,  919,
+      920,  921,  915,  922,  923,  924,  925,  926,  927,  928,
+      929,  930,  931,  932,  933,  934,  935,  936,  937,  938,
+
+      939,  940,  941,  942,  944,  945,  943,  946,  947,  948,
+      949,  950,  951,  952,  953,  954,  955,  956,  957,  958,
+      959,  960,  961,  962,  963,  964,  965,  966,  967,  968,
+      969,  970,  971,  972,  973,  974,  975,  976,  977,  978,
+      979,  980,  981,  982,  983,  984,  986,  987,  988,  991,
+      992,  993,  985,  996,  994,  989,  997,  998,  999,  990,
+      995, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
+     1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
+     1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
+
+     1039, 1040, 1041, 1014, 1042, 1043, 1044, 1045, 1046, 1047,
+     1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057,
+     1058, 1059, 1060, 1061, 1062, 1063, 1065, 1066, 1067, 1068,
+     1064, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
+     1088, 1089, 1090, 1092, 1093, 1094, 1091, 1095, 1096, 1097,
+     1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+     1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
+     1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
+     1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137,
+
+     1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
+     1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
+     1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167,
+     1145, 1168, 1169, 1144, 1170, 1171, 1172, 1173, 1174, 1175,
+     1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+     1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,
+     1196, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206,
+     1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216,
+     1217, 1218, 1219, 1220, 1221, 1222, 1223, 1225, 1226, 1227,
+     1228, 1229, 1230, 1231, 1232, 1233, 1234, 1224, 1235, 1236,
+
+     1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
+     1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1197, 1255,
+     1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
+     1266, 1267, 1268, 1269, 1270, 1272, 1271, 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, 1270, 1271, 1298, 1299, 1300, 1301, 1302, 1303,
+     1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313,
+     1314, 1315, 1316, 1317, 1318, 1320, 1322, 1323, 1324, 1319,
+     1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334,
+
+     1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344,
+     1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354,
+     1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1321,
+     1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
+     1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383,
+     1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393,
+     1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
+     1404, 1405, 1406, 1407, 1408, 1409, 1410, 1388, 1411, 1412,
+     1413, 1414, 1415, 1389, 1416, 1417, 1418, 1419, 1420, 1421,
+     1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431,
+
+     1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441,
+     1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451,
+     1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461,
+     1462, 1463, 1464, 1465, 1466, 1467, 1469, 1470, 1471, 1472,
+     1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482,
+     1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492,
+     1493, 1494, 1495, 1496, 1497, 1498, 1499, 1501, 1502, 1503,
+     1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513,
+     1514, 1515, 1516, 1517, 1518, 1519, 1520, 1492, 1468, 1521,
+     1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531,
+
+     1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541,
+     1500, 1542, 1543, 1545, 1546, 1547, 1548, 1549, 1550, 1551,
+     1544, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560,
+     1561, 1562, 1563, 1564, 1565, 1566, 1567, 1569, 1570, 1573,
+     1571, 1568, 1572, 1574, 1575, 1576, 1577, 1578, 1579, 1580,
+     1581, 1582, 1583, 1584, 1585, 1586, 1587, 1589, 1590, 1591,
+     1592, 1588, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600,
+     1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610,
+     1589, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619,
+     1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629,
+
+     1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639,
+     1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649,
+     1650, 1651, 1652, 1653, 1657, 1654, 1658, 1659, 1655, 1660,
+     1661, 1656, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669,
+     1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679,
+     1680, 1681, 1682, 1683, 1684, 1685, 1687, 1688, 1689, 1690,
+     1691, 1692, 1693, 1694, 1695, 1696, 1686, 1697, 1698, 1699,
+     1700, 1674, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708,
+     1709, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719,
+     1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729,
+
+     1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739,
+     1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749,
+     1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759,
+     1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1710, 1768,
+     1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778,
+     1779, 1780, 1781, 1782, 1756, 1783, 1784, 1785, 1786, 1787,
+     1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797,
+     1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807,
+     1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817,
+     1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827,
+
+     1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837,
+     1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847,
+     1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857,
+     1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867,
+     1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877,
+     1878, 1879, 1881, 1882, 1883, 1884, 1880, 1885, 1886, 1887,
+     1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
+     1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907,
+     1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917,
+     1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927,
+
+     1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937,
+     1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947,
+     1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957,
+     1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967,
+     1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
+     1979, 1980, 1978, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
+     1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+     1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+     2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
+     2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027,
+
+     2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037,
+     2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
+     2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057,
+     2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067,
+     2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077,
+     2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087,
+     2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097,
+     2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107,
+     2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117,
+     2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127,
+
+     2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137,
+     2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147,
+     2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157,
+     2159, 2158, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
+     2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177,
+     2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187,
+     2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197,
+       12,   12,   12,   36,   36,   36,   79,   98,   79,  100,
+      100,  100,  113,  113,  113,  188,  854,  188,  207,  207,
+      207,  853,  852,  851,  850,  849,  848,  847,  846,  845,
+
+      844,  843,  842,  841,  840,  839,  838,  837,  836,  835,
+      834,  833,  832,  831,  830,  829,  828,  827,  826,  823,
+      822,  821,  820,  819,  818,  817,  816,  815,  814,  813,
+      812,  811,  810,  809,  808,  807,  806,  805,  804,  803,
+      802,  801,  800,  797,  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,  766,  765,  764,  763,  762,  761,  760,  759,
+      758,  757,  756,  755,  754,  753,  752,  751,  750,  747,
+      746,  744,  741,  740,  739,  738,  737,  736,  735,  734,
+
+      733,  732,  731,  730,  729,  728,  727,  726,  725,  724,
+      723,  722,  721,  720,  719,  718,  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,
+      680,  679,  678,  677,  676,  675,  674,  673,  672,  669,
+      668,  667,  666,  665,  664,  663,  662,  661,  660,  659,
+      658,  657,  656,  655,  654,  653,  652,  651,  650,  647,
+      646,  645,  644,  643,  642,  641,  640,  639,  638,  634,
+      633,  626,  625,  624,  623,  622,  621,  620,  619,  618,
+
+      617,  616,  615,  614,  613,  612,  611,  609,  606,  605,
+      604,  602,  601,  600,  599,  598,  595,  594,  593,  592,
+      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
+      581,  580,  579,  578,  575,  574,  573,  572,  571,  570,
+      569,  568,  565,  564,  561,  560,  559,  558,  557,  554,
+      553,  552,  551,  550,  549,  548,  547,  546,  545,  544,
+      543,  542,  541,  540,  536,  535,  534,  533,  532,  531,
+      530,  526,  525,  524,  523,  522,  521,  520,  519,  518,
+      517,  516,  515,  510,  509,  508,  507,  506,  505,  504,
+      503,  502,  501,  500,  499,  498,  497,  496,  493,  492,
+
+      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
+      481,  480,  479,  478,  477,  476,  475,  474,  473,  471,
+      469,  468,  466,  464,  460,  457,  456,  453,  452,  451,
+      449,  448,  447,  445,  444,  443,  440,  439,  438,  437,
+      436,  435,  434,  433,  432,  431,  430,  429,  428,  427,
+      424,  423,  422,  421,  420,  419,  418,  417,  416,  415,
+      414,  413,  410,  409,  405,  404,  403,  400,  398,  397,
+      396,  395,  394,  393,  389,  388,  387,  386,  385,  384,
+      383,  380,  379,  378,  377,  376,  375,  374,  373,  372,
+      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
+
+      361,  360,  359,  358,  357,  356,  350,  349,  348,  347,
+      346,  345,  344,  343,  342,  341,  340,  208,  334,  332,
+      328,  326,  325,  318,  317,  316,  315,  313,  311,  307,
+      306,  305,  302,  301,  300,  285,  279,  274,  273,  272,
+      269,  266,  265,  264,  263,  262,  261,  258,  257,  256,
+      253,  252,  251,  250,  249,  248,  244,  243,  235,  234,
+      233,  232,  231,  228,  227,  226,  222,  219,  215,  214,
+      213,  208,  199,  197,  196,  195,  186,  166,  145,  119,
+      105,  103,   43,   99,   97,   96,   87,   43, 2198,   11,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198
     } ;
 
-static const flex_int16_t yy_chk[2658] =
+static const flex_int16_t yy_chk[2664] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-       21,  686,    3,    3,    3,   21,    1,    1,    3,   44,
-        0,    1,    4,    4,    4,   13,    1,   13,    4,   27,
+       21,  689,    3,    3,    3,   21,    1,    1,    3,   44,
+      721,    1,    4,    4,    4,   13,    1,   13,    4,   27,
        28,    1,  107,    1,    5,    5,    5,   26,   32,    1,
         1,   33,    6,    6,    6,    7,    7,    7,    1,    7,
-      686,    8,    8,    8,    1,    8,   44,   27,   28,  107,
+      689,    8,    8,    8,    1,    8,   44,   27,   28,  107,
        26,    1,    1,    2,    2,    2,   32,    2,    2,   33,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
         2,    2,    9,    9,    9,   31,    5,   48,    2,    2,
@@ -1807,10 +1810,10 @@ static const flex_int16_t yy_chk[2658] =
        17,   17,   17,   17,   17,   19,   62,   19,   19,   19,
        19,   19,  146,   17,   20,   20,   20,   20,   20,   22,
        19,   22,   22,   22,   22,   22,   63,   20,   53,   62,
-       57,   59,  721,   63,   22,   59,   17,   73,   53,   59,
+       57,   59,  723,   63,   22,   59,   17,   73,   53,   59,
        62,   73,   59,   19,   70,   59,   90,  112,  100,   59,
-       20,   53,   70,  722,   70,   92,   57,   22,   45,   70,
-       70,   61,   57,   61,   45,   57,   53,   45,  724,   45,
+       20,   53,   70,  724,   70,   92,   57,   22,   45,   70,
+       70,   61,   57,   61,   45,   57,   53,   45,  725,   45,
       112,   45,   90,   45,   61,   56,   67,   67,   45,   45,
 
        67,   45,   56,   92,   61,  100,   67,   45,   45,   45,
@@ -1820,13 +1823,13 @@ static const flex_int16_t yy_chk[2658] =
        56,   69,   65,   76,   91,   71,   95,  104,   56,   65,
        60,   65,   56,   68,   56,   56,   93,   68,   75,   75,
        69,   68,   69,   78,   69,   74,   76,  108,   75,   74,
-       91,  725,   74,   68,   95,  104,   76,   68,   75,   74,
+       91,  727,   74,   68,   95,  104,   76,   68,   75,   74,
        74,   76,   93,   94,   74,   74,  134,   78,  134,  136,
       135,   75,  109,   75,  106,  108,   75,   78,   80,   80,
 
        80,   80,   80,  135,  150,  136,   75,  135,  150,   94,
-      726,   80,   81,   75,   81,   81,   81,   81,   81,  109,
-      106,  110,  159,   82,  111,   82,  727,   81,   82,   82,
+      728,   80,   81,   75,   81,   81,   81,   81,   81,  109,
+      106,  110,  159,   82,  111,   82,  729,   81,   82,   82,
        82,   82,   82,   83,   80,   83,   83,   83,   83,   83,
        84,   84,   84,   84,   84,  102,  211,  116,   83,  110,
        81,  111,  102,   84,   88,   88,   88,   88,   88,   89,
@@ -1835,243 +1838,244 @@ static const flex_int16_t yy_chk[2658] =
       124,  165,  102,  178,  165,  165,  102,  163,  163,  163,
       102,  174,  166,  169,  169,  157,  166,  157,  102,  191,
 
-      211,  728,  102,  179,  102,  102,  115,  168,  181,  179,
+      211,  327,  102,  179,  102,  102,  115,  168,  181,  179,
       178,  183,  189,  190,  115,  115,  115,  115,  115,  193,
-      260,  729,  191,  115,  115,  115,  115,  115,  115,  170,
-      316,  192,  224,  170,  200,  224,  181,  170,  183,  190,
+      260,  730,  191,  115,  115,  115,  115,  115,  115,  170,
+      327,  192,  224,  170,  200,  224,  181,  170,  183,  190,
       189,  194,  168,  168,  168,  193,  115,  115,  115,  115,
       115,  115,  198,  168,  201,  168,  202,  168,  168,  192,
-      168,  204,  200,  206,  194,  212,  225,  276,  252,  289,
-      327,  273,  289,  260,  225,  198,  260,  276,  574,  202,
-      225,  201,  316,  267,  204,  252,  319,  304,  212,  304,
-      206,  210,  210,  210,  210,  210,  312,  322,  415,  327,
-
-      210,  210,  210,  210,  210,  210,  267,  273,  308,  319,
-      331,  329,  326,  308,  422,  339,  730,  399,  462,  312,
-      322,  273,  326,  210,  210,  210,  210,  210,  210,  361,
-      574,  377,  731,  312,  329,  361,  377,  398,  331,  336,
-      336,  336,  336,  336,  339,  399,  462,  398,  336,  336,
-      336,  336,  336,  336,  390,  390,  415,  425,  434,  390,
-      454,  425,  434,  422,  468,  454,  468,  493,  732,  527,
-      612,  336,  336,  336,  336,  336,  336,  612,  505,  527,
-      493,  471,  493,  505,  377,  538,  661,  661,  605,  377,
-      538,  468,  606,  468,  469,  469,  469,  469,  469,  733,
-
-      723,  734,  490,  469,  469,  469,  469,  469,  469,  471,
-      490,  723,  490,  490,  490,  605,  490,  608,  630,  736,
-      606,  630,  608,  737,  739,  740,  469,  469,  469,  469,
-      469,  469,  741,  742,  743,  744,  745,  746,  747,  748,
-      749,  750,  751,  752,  753,  754,  756,  757,  740,  752,
-      755,  755,  739,  755,  758,  759,  760,  761,  762,  763,
+      168,  204,  200,  206,  194,  212,  225,  269,  252,  423,
+      316,  273,  276,  260,  225,  198,  260,  663,  663,  202,
+      225,  201,  276,  267,  204,  252,  289,  319,  212,  289,
+      206,  210,  210,  210,  210,  210,  304,  312,  304,  576,
+
+      210,  210,  210,  210,  210,  210,  267,  273,  308,  322,
+      319,  269,  329,  308,  331,  416,  731,  732,  423,  326,
+      312,  273,  316,  210,  210,  210,  210,  210,  210,  326,
+      339,  361,  322,  377,  312,  329,  399,  361,  377,  398,
+      463,  472,  331,  336,  336,  336,  336,  336,  733,  398,
+      734,  576,  336,  336,  336,  336,  336,  336,  426,  339,
+      390,  390,  426,  435,  399,  390,  455,  435,  463,  472,
+      469,  455,  469,  416,  494,  336,  336,  336,  336,  336,
+      336,  607,  491,  506,  735,  528,  377,  494,  506,  494,
+      491,  377,  491,  491,  491,  528,  491,  469,  608,  469,
+
+      470,  470,  470,  470,  470,  736,  737,  726,  607,  470,
+      470,  470,  470,  470,  470,  539,  610,  614,  726,  632,
+      539,  610,  632,  739,  614,  740,  608,  742,  743,  744,
+      745,  746,  470,  470,  470,  470,  470,  470,  747,  748,
+      749,  750,  751,  752,  753,  754,  755,  756,  757,  759,
+      760,  743,  755,  758,  758,  742,  758,  761,  762,  763,
       764,  765,  766,  767,  768,  769,  770,  771,  772,  773,
-      774,  775,  776,  777,  778,  775,  779,  780,  781,  775,
-      782,  784,  785,  786,  787,  788,  789,  790,  791,  792,
+      774,  775,  776,  777,  778,  779,  780,  781,  778,  782,
+      783,  784,  778,  785,  787,  788,  789,  790,  791,  792,
       793,  794,  795,  796,  797,  798,  799,  800,  801,  802,
 
-      803,  804,  805,  803,  806,  808,  809,  810,  811,  812,
-      813,  814,  815,  816,  817,  818,  819,  821,  822,  823,
-      824,  825,  826,  827,  828,  829,  830,  831,  832,  833,
+      803,  804,  805,  806,  807,  808,  806,  809,  811,  812,
+      813,  814,  815,  816,  817,  818,  819,  820,  821,  822,
+      823,  825,  826,  827,  828,  829,  830,  831,  832,  833,
       834,  835,  836,  837,  838,  839,  840,  841,  842,  843,
-      844,  845,  846,  847,  847,  848,  849,  850,  845,  852,
-      851,  847,  853,  854,  856,  847,  851,  857,  858,  859,
-      860,  861,  862,  863,  864,  865,  866,  867,  868,  869,
+      844,  845,  846,  847,  848,  849,  850,  851,  851,  852,
+      853,  854,  849,  856,  855,  851,  857,  858,  860,  851,
+      855,  861,  862,  863,  864,  865,  866,  867,  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,  894,  895,  896,  897,  898,  899,  871,
-
-      900,  901,  902,  903,  904,  905,  906,  907,  908,  909,
-      910,  911,  912,  913,  914,  915,  917,  918,  919,  920,
-      921,  922,  923,  924,  925,  926,  922,  927,  928,  929,
-      930,  931,  932,  933,  936,  937,  938,  939,  940,  941,
-      944,  945,  946,  947,  948,  949,  951,  952,  953,  954,
-      955,  952,  956,  957,  958,  959,  960,  963,  964,  965,
-      966,  967,  968,  969,  970,  971,  972,  973,  974,  975,
+      880,  881,  882,  883,  884,  885,  886,  887,  888,  890,
+      891,  892,  893,  894,  895,  896,  897,  898,  899,  900,
+
+      901,  902,  903,  875,  904,  905,  906,  907,  908,  909,
+      910,  911,  912,  913,  914,  915,  916,  917,  918,  919,
+      921,  922,  923,  924,  925,  926,  927,  928,  929,  930,
+      926,  931,  932,  933,  934,  935,  936,  937,  940,  941,
+      942,  943,  944,  945,  948,  949,  950,  951,  952,  953,
+      954,  956,  957,  958,  959,  960,  957,  961,  962,  963,
+      964,  965,  968,  969,  970,  971,  972,  973,  974,  975,
       976,  977,  978,  979,  980,  981,  982,  983,  984,  985,
-      986,  987,  988,  989,  990,  991,  992,  993,  995,  996,
-      997,  998,  999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
+      986,  987,  988,  989,  990,  991,  992,  993,  994,  995,
+      996,  997,  998, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
 
      1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016,
-     1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
-     1028, 1029, 1030, 1031, 1032, 1009, 1033, 1034, 1008, 1035,
-     1036, 1037, 1038, 1039, 1040, 1041, 1042, 1044, 1045, 1046,
-     1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
-     1057, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1067, 1068,
-     1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+     1017, 1018, 1019, 1020, 1021, 1023, 1024, 1025, 1026, 1027,
+     1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
+     1014, 1038, 1039, 1013, 1040, 1041, 1042, 1043, 1044, 1045,
+     1046, 1047, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
+     1057, 1058, 1059, 1060, 1061, 1062, 1064, 1065, 1066, 1067,
+     1068, 1069, 1070, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
      1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
-     1089, 1090, 1091, 1092, 1094, 1095, 1096, 1097, 1098, 1100,
-     1101, 1089, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109,
-
-     1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1119, 1120,
-     1121, 1122, 1123, 1063, 1124, 1125, 1126, 1127, 1128, 1129,
-     1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1141,
-     1139, 1142, 1143, 1144, 1145, 1146, 1148, 1149, 1150, 1152,
-     1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162,
-     1163, 1164, 1165, 1166, 1167, 1169, 1138, 1139, 1170, 1171,
-     1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,
-     1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1191, 1192,
-     1193, 1194, 1195, 1191, 1196, 1197, 1198, 1199, 1200, 1201,
+     1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098,
+     1100, 1101, 1102, 1103, 1104, 1106, 1107, 1095, 1108, 1109,
+
+     1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119,
+     1120, 1121, 1122, 1123, 1125, 1126, 1127, 1128, 1068, 1129,
+     1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
+     1140, 1141, 1142, 1143, 1144, 1147, 1145, 1148, 1149, 1150,
+     1151, 1152, 1154, 1155, 1156, 1158, 1159, 1160, 1161, 1162,
+     1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172,
+     1173, 1175, 1144, 1145, 1176, 1177, 1178, 1179, 1180, 1181,
+     1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191,
+     1192, 1193, 1194, 1195, 1197, 1198, 1199, 1200, 1201, 1197,
      1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211,
 
-     1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221,
-     1222, 1223, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232,
-     1233, 1234, 1235, 1192, 1237, 1238, 1239, 1241, 1242, 1243,
-     1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253,
-     1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264,
-     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1273, 1274, 1275,
-     1276, 1277, 1278, 1279, 1281, 1282, 1283, 1284, 1285, 1286,
-     1287, 1263, 1289, 1290, 1291, 1292, 1293, 1264, 1294, 1295,
-     1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305,
-     1306, 1307, 1308, 1310, 1312, 1314, 1315, 1316, 1317, 1318,
-
-     1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1329,
-     1331, 1332, 1333, 1335, 1336, 1337, 1338, 1339, 1340, 1342,
-     1344, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354,
-     1355, 1356, 1357, 1358, 1359, 1360, 1362, 1363, 1364, 1365,
-     1366, 1367, 1368, 1371, 1372, 1373, 1374, 1375, 1376, 1377,
-     1378, 1379, 1380, 1381, 1382, 1384, 1385, 1386, 1387, 1388,
-     1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399,
-     1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409,
-     1410, 1381, 1354, 1411, 1412, 1414, 1415, 1416, 1417, 1418,
-     1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428,
-
-     1429, 1430, 1431, 1432, 1390, 1433, 1434, 1435, 1436, 1437,
-     1438, 1439, 1440, 1442, 1434, 1445, 1446, 1447, 1448, 1449,
-     1450, 1451, 1452, 1453, 1454, 1455, 1456, 1458, 1459, 1460,
-     1461, 1462, 1463, 1466, 1465, 1461, 1465, 1468, 1469, 1472,
-     1473, 1474, 1475, 1476, 1477, 1478, 1479, 1481, 1482, 1483,
-     1484, 1485, 1487, 1488, 1489, 1484, 1490, 1491, 1493, 1494,
-     1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504,
-     1505, 1506, 1507, 1508, 1485, 1509, 1511, 1512, 1513, 1515,
-     1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525,
-     1526, 1527, 1529, 1531, 1532, 1534, 1535, 1536, 1537, 1538,
-
-     1539, 1540, 1541, 1542, 1544, 1545, 1546, 1547, 1548, 1549,
-     1550, 1551, 1554, 1555, 1557, 1558, 1559, 1561, 1562, 1561,
-     1563, 1564, 1561, 1565, 1566, 1561, 1567, 1568, 1569, 1570,
-     1571, 1572, 1573, 1574, 1576, 1578, 1579, 1581, 1582, 1584,
-     1586, 1587, 1588, 1590, 1591, 1592, 1593, 1594, 1595, 1596,
-     1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606,
-     1596, 1607, 1608, 1609, 1610, 1582, 1611, 1612, 1613, 1614,
-     1615, 1616, 1617, 1617, 1618, 1619, 1620, 1621, 1622, 1623,
-     1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633,
-     1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643,
-
-     1644, 1645, 1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654,
-     1655, 1656, 1657, 1658, 1659, 1660, 1662, 1663, 1664, 1666,
-     1667, 1669, 1670, 1673, 1674, 1675, 1677, 1678, 1679, 1680,
-     1681, 1682, 1618, 1683, 1684, 1685, 1686, 1687, 1688, 1690,
-     1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1667, 1700,
-     1701, 1703, 1704, 1705, 1706, 1708, 1709, 1711, 1712, 1713,
-     1715, 1716, 1717, 1718, 1719, 1721, 1722, 1723, 1724, 1725,
-     1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735,
-     1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745,
-     1746, 1748, 1749, 1751, 1752, 1753, 1755, 1756, 1757, 1758,
-
-     1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768,
-     1769, 1770, 1771, 1772, 1773, 1775, 1776, 1777, 1779, 1780,
-     1781, 1782, 1784, 1785, 1786, 1787, 1788, 1790, 1791, 1792,
-     1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802,
-     1803, 1804, 1805, 1807, 1808, 1810, 1812, 1814, 1815, 1816,
-     1810, 1817, 1820, 1822, 1823, 1824, 1825, 1826, 1827, 1828,
-     1829, 1830, 1831, 1832, 1834, 1835, 1836, 1837, 1838, 1839,
-     1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1851,
-     1852, 1853, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
-     1863, 1864, 1866, 1867, 1868, 1869, 1870, 1872, 1873, 1874,
-
-     1875, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1887,
-     1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
-     1898, 1899, 1901, 1903, 1904, 1905, 1906, 1907, 1908, 1909,
-     1910, 1911, 1913, 1915, 1916, 1917, 1918, 1919, 1920, 1921,
-     1922, 1923, 1924, 1925, 1926, 1927, 1925, 1928, 1929, 1930,
-     1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1940, 1941,
-     1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951,
-     1953, 1957, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966,
-     1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1976, 1977,
-     1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
-
-     1988, 1989, 1990, 1992, 1993, 1994, 1995, 1996, 1998, 2000,
-     2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014,
-     2015, 2016, 2017, 2018, 2019, 2020, 2022, 2023, 2024, 2025,
-     2026, 2027, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036,
-     2037, 2038, 2039, 2040, 2042, 2043, 2044, 2045, 2046, 2047,
-     2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2058, 2059,
-     2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069,
-     2070, 2071, 2072, 2073, 2074, 2075, 2077, 2078, 2080, 2081,
-     2082, 2083, 2085, 2086, 2087, 2088, 2089, 2093, 2096, 2097,
-     2098, 2099, 2100, 2101, 2102, 2103, 2105, 2106, 2107, 2108,
-
-     2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119,
-     2120, 2122, 2124, 2126, 2127, 2128, 2129, 2130, 2131, 2132,
-     2134, 2135, 2136, 2137, 2138, 2137, 2139, 2140, 2142, 2143,
-     2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156,
-     2157, 2158, 2159, 2160, 2161, 2163, 2164, 2165, 2166, 2169,
-     2170, 2171, 2173, 2174, 2176, 2178, 2179, 2180, 2181, 2182,
-     2183, 2184, 2185, 2187, 2192, 2192, 2192, 2193, 2193, 2193,
-     2194, 2195, 2194, 2196, 2196, 2196, 2197, 2197, 2197, 2198,
-      720, 2198, 2199, 2199, 2199,  718,  717,  716,  715,  714,
-      713,  712,  711,  710,  709,  708,  707,  706,  704,  703,
-
-      702,  701,  700,  699,  698,  697,  696,  695,  693,  692,
-      691,  690,  689,  688,  687,  685,  684,  683,  682,  681,
-      680,  679,  678,  677,  675,  674,  673,  672,  671,  670,
-      669,  668,  667,  666,  665,  664,  663,  662,  660,  659,
-      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
-      648,  647,  645,  644,  643,  642,  641,  640,  639,  638,
-      637,  636,  635,  634,  633,  632,  631,  629,  628,  627,
-      626,  625,  624,  623,  622,  621,  620,  619,  618,  617,
-      616,  615,  614,  613,  611,  610,  607,  601,  600,  599,
-      598,  597,  596,  595,  593,  592,  590,  589,  587,  586,
-
-      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-      575,  573,  572,  571,  570,  569,  568,  567,  566,  565,
-      564,  563,  562,  561,  560,  559,  558,  557,  556,  554,
-      552,  551,  550,  549,  548,  547,  546,  545,  544,  543,
-      542,  541,  540,  539,  537,  536,  534,  533,  532,  531,
-      530,  529,  528,  526,  525,  524,  523,  522,  521,  520,
-      519,  518,  517,  516,  515,  514,  513,  512,  511,  509,
-      508,  507,  506,  504,  503,  502,  501,  500,  499,  498,
-      497,  495,  494,  492,  491,  488,  487,  486,  485,  484,
-      483,  481,  480,  479,  478,  477,  476,  475,  474,  473,
-
-      472,  470,  466,  464,  463,  461,  460,  459,  456,  455,
-      453,  452,  450,  449,  448,  447,  446,  445,  444,  443,
-      442,  441,  440,  439,  438,  437,  436,  435,  433,  432,
-      431,  430,  429,  428,  427,  426,  424,  423,  421,  419,
-      418,  417,  416,  414,  413,  412,  411,  410,  409,  408,
-      407,  406,  405,  404,  403,  402,  400,  397,  396,  395,
-      394,  393,  392,  391,  389,  388,  387,  386,  385,  384,
-      383,  382,  381,  380,  379,  378,  376,  375,  374,  373,
-      372,  371,  370,  369,  368,  367,  366,  365,  364,  363,
-      362,  360,  359,  358,  357,  356,  355,  354,  353,  352,
-
-      351,  350,  349,  348,  347,  346,  345,  344,  343,  342,
-      341,  340,  338,  335,  333,  330,  328,  325,  318,  317,
-      315,  314,  313,  311,  310,  309,  307,  306,  305,  303,
-      302,  301,  300,  299,  298,  297,  296,  295,  294,  293,
-      292,  291,  290,  288,  287,  286,  285,  284,  283,  282,
-      281,  280,  279,  278,  277,  275,  274,  272,  271,  270,
-      269,  268,  266,  265,  264,  263,  262,  261,  259,  258,
-      257,  256,  255,  254,  253,  251,  250,  248,  247,  246,
-      245,  244,  243,  242,  241,  240,  239,  238,  237,  236,
-      235,  234,  233,  232,  231,  230,  229,  228,  227,  226,
-
-      223,  222,  221,  220,  219,  218,  217,  216,  215,  214,
-      213,  207,  205,  203,  199,  197,  195,  187,  186,  185,
-      184,  182,  180,  177,  176,  175,  173,  172,  171,  167,
-      164,  162,  161,  160,  158,  156,  155,  154,  153,  152,
-      151,  149,  148,  147,  145,  144,  143,  142,  141,  140,
-      138,  137,  133,  132,  131,  130,  129,  127,  126,  125,
-      123,  121,  119,  118,  117,  113,  105,  103,   98,   97,
-       77,   72,   66,   58,   49,   47,   43,   41,   39,   38,
-       24,   14,   11, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191,
-     2191, 2191, 2191, 2191, 2191, 2191, 2191
+     1212, 1213, 1214, 1215, 1217, 1218, 1219, 1220, 1221, 1222,
+     1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1232, 1233,
+     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1198,
+     1244, 1245, 1246, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
+     1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
+     1265, 1266, 1267, 1268, 1270, 1271, 1272, 1273, 1274, 1275,
+     1276, 1277, 1278, 1280, 1281, 1282, 1283, 1284, 1285, 1286,
+     1288, 1289, 1290, 1291, 1292, 1293, 1294, 1270, 1296, 1297,
+     1298, 1299, 1300, 1271, 1301, 1302, 1303, 1304, 1305, 1306,
+     1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1317,
+
+     1319, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329,
+     1330, 1331, 1332, 1333, 1334, 1336, 1338, 1339, 1340, 1342,
+     1343, 1344, 1345, 1346, 1347, 1349, 1351, 1353, 1354, 1355,
+     1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
+     1366, 1367, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1378,
+     1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388,
+     1389, 1391, 1392, 1393, 1394, 1395, 1397, 1398, 1399, 1400,
+     1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410,
+     1411, 1412, 1413, 1414, 1415, 1416, 1417, 1388, 1361, 1418,
+     1419, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429,
+
+     1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439,
+     1397, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1449,
+     1441, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460,
+     1461, 1462, 1463, 1465, 1466, 1467, 1468, 1469, 1470, 1473,
+     1472, 1468, 1472, 1475, 1476, 1479, 1480, 1481, 1482, 1483,
+     1484, 1485, 1486, 1488, 1489, 1490, 1491, 1492, 1494, 1495,
+     1496, 1491, 1497, 1498, 1500, 1501, 1502, 1503, 1504, 1505,
+     1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515,
+     1492, 1516, 1518, 1519, 1520, 1522, 1523, 1524, 1525, 1526,
+     1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1536, 1538,
+
+     1539, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549,
+     1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1561, 1562,
+     1564, 1565, 1566, 1568, 1569, 1568, 1570, 1571, 1568, 1572,
+     1573, 1568, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581,
+     1583, 1585, 1586, 1588, 1589, 1591, 1593, 1594, 1595, 1597,
+     1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607,
+     1608, 1609, 1610, 1611, 1612, 1613, 1603, 1614, 1615, 1616,
+     1617, 1589, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1624,
+     1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634,
+     1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644,
+
+     1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
+     1655, 1656, 1657, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
+     1666, 1667, 1669, 1670, 1671, 1673, 1674, 1676, 1677, 1680,
+     1681, 1682, 1684, 1685, 1686, 1687, 1688, 1689, 1625, 1690,
+     1691, 1692, 1693, 1694, 1695, 1697, 1699, 1700, 1701, 1702,
+     1703, 1704, 1705, 1706, 1674, 1707, 1708, 1710, 1711, 1712,
+     1713, 1715, 1716, 1718, 1719, 1720, 1722, 1723, 1724, 1725,
+     1726, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736,
+     1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
+     1747, 1748, 1749, 1750, 1751, 1752, 1753, 1755, 1756, 1758,
+
+     1759, 1760, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769,
+     1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779,
+     1780, 1782, 1783, 1784, 1786, 1787, 1788, 1789, 1791, 1792,
+     1793, 1794, 1795, 1797, 1798, 1799, 1800, 1801, 1802, 1803,
+     1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1814,
+     1815, 1817, 1819, 1821, 1822, 1823, 1817, 1824, 1827, 1829,
+     1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839,
+     1841, 1842, 1843, 1844, 1845, 1846, 1848, 1849, 1850, 1851,
+     1852, 1853, 1854, 1855, 1856, 1858, 1859, 1860, 1862, 1863,
+     1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1873, 1874,
+
+     1875, 1876, 1877, 1879, 1880, 1881, 1882, 1885, 1886, 1887,
+     1888, 1889, 1890, 1891, 1892, 1894, 1895, 1896, 1897, 1898,
+     1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1908, 1910,
+     1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1920, 1922,
+     1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932,
+     1933, 1934, 1932, 1935, 1936, 1937, 1938, 1939, 1940, 1941,
+     1942, 1943, 1944, 1945, 1947, 1948, 1949, 1950, 1951, 1952,
+     1953, 1954, 1955, 1956, 1957, 1958, 1960, 1964, 1966, 1967,
+     1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977,
+     1978, 1979, 1980, 1981, 1983, 1984, 1985, 1986, 1987, 1988,
+
+     1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
+     2000, 2001, 2002, 2003, 2005, 2007, 2010, 2012, 2013, 2014,
+     2015, 2016, 2017, 2018, 2019, 2021, 2022, 2023, 2024, 2025,
+     2026, 2027, 2029, 2030, 2031, 2032, 2033, 2034, 2036, 2037,
+     2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047,
+     2049, 2050, 2051, 2052, 2053, 2054, 2056, 2057, 2058, 2059,
+     2060, 2061, 2062, 2063, 2065, 2066, 2067, 2068, 2069, 2070,
+     2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080,
+     2081, 2082, 2084, 2085, 2087, 2088, 2089, 2090, 2092, 2093,
+     2094, 2095, 2096, 2100, 2103, 2104, 2105, 2106, 2107, 2108,
+
+     2109, 2110, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119,
+     2120, 2122, 2123, 2124, 2125, 2126, 2127, 2129, 2131, 2133,
+     2134, 2135, 2136, 2137, 2138, 2139, 2141, 2142, 2143, 2144,
+     2145, 2144, 2146, 2147, 2149, 2150, 2154, 2155, 2156, 2157,
+     2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
+     2168, 2170, 2171, 2172, 2173, 2176, 2177, 2178, 2180, 2181,
+     2183, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2194,
+     2199, 2199, 2199, 2200, 2200, 2200, 2201, 2202, 2201, 2203,
+     2203, 2203, 2204, 2204, 2204, 2205,  720, 2205, 2206, 2206,
+     2206,  719,  718,  717,  716,  715,  714,  713,  712,  711,
+
+      710,  709,  707,  706,  705,  704,  703,  702,  701,  700,
+      699,  698,  696,  695,  694,  693,  692,  691,  690,  688,
+      687,  686,  685,  684,  683,  682,  681,  680,  679,  677,
+      676,  675,  674,  673,  672,  671,  670,  669,  668,  667,
+      666,  665,  664,  662,  661,  660,  659,  658,  657,  656,
+      655,  654,  653,  652,  651,  650,  649,  647,  646,  645,
+      644,  643,  642,  641,  640,  639,  638,  637,  636,  635,
+      634,  633,  631,  630,  629,  628,  627,  626,  625,  624,
+      623,  622,  621,  620,  619,  618,  617,  616,  615,  613,
+      612,  609,  603,  602,  601,  600,  599,  598,  597,  595,
+
+      594,  592,  591,  589,  588,  587,  586,  585,  584,  583,
+      582,  581,  580,  579,  578,  577,  575,  574,  573,  572,
+      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
+      561,  560,  559,  558,  556,  554,  553,  552,  551,  550,
+      549,  548,  547,  546,  545,  544,  543,  542,  541,  540,
+      538,  537,  535,  534,  533,  532,  531,  530,  529,  527,
+      526,  525,  524,  523,  522,  521,  520,  519,  518,  517,
+      516,  515,  514,  513,  512,  510,  509,  508,  507,  505,
+      504,  503,  502,  501,  500,  499,  498,  496,  495,  493,
+      492,  489,  488,  487,  486,  485,  484,  482,  481,  480,
+
+      479,  478,  477,  476,  475,  474,  473,  471,  467,  465,
+      464,  462,  461,  460,  457,  456,  454,  453,  451,  450,
+      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
+      439,  438,  437,  436,  434,  433,  432,  431,  430,  429,
+      428,  427,  425,  424,  422,  420,  419,  418,  417,  415,
+      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
+      404,  403,  402,  400,  397,  396,  395,  394,  393,  392,
+      391,  389,  388,  387,  386,  385,  384,  383,  382,  381,
+      380,  379,  378,  376,  375,  374,  373,  372,  371,  370,
+      369,  368,  367,  366,  365,  364,  363,  362,  360,  359,
+
+      358,  357,  356,  355,  354,  353,  352,  351,  350,  349,
+      348,  347,  346,  345,  344,  343,  342,  341,  340,  338,
+      335,  333,  330,  328,  325,  318,  317,  315,  314,  313,
+      311,  310,  309,  307,  306,  305,  303,  302,  301,  300,
+      299,  298,  297,  296,  295,  294,  293,  292,  291,  290,
+      288,  287,  286,  285,  284,  283,  282,  281,  280,  279,
+      278,  277,  275,  274,  272,  271,  270,  268,  266,  265,
+      264,  263,  262,  261,  259,  258,  257,  256,  255,  254,
+      253,  251,  250,  248,  247,  246,  245,  244,  243,  242,
+      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
+
+      231,  230,  229,  228,  227,  226,  223,  222,  221,  220,
+      219,  218,  217,  216,  215,  214,  213,  207,  205,  203,
+      199,  197,  195,  187,  186,  185,  184,  182,  180,  177,
+      176,  175,  173,  172,  171,  167,  164,  162,  161,  160,
+      158,  156,  155,  154,  153,  152,  151,  149,  148,  147,
+      145,  144,  143,  142,  141,  140,  138,  137,  133,  132,
+      131,  130,  129,  127,  126,  125,  123,  121,  119,  118,
+      117,  113,  105,  103,   98,   97,   77,   72,   66,   58,
+       49,   47,   43,   41,   39,   38,   24,   14,   11, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198,
+     2198, 2198, 2198
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2080,7 +2084,7 @@ static char *yy_last_accepting_cpos;
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static const flex_int16_t yy_rule_linenum[223] =
+static const flex_int16_t yy_rule_linenum[224] =
     {   0,
       146,  148,  150,  155,  156,  161,  162,  163,  175,  178,
       183,  190,  199,  208,  217,  226,  235,  244,  253,  263,
@@ -2104,9 +2108,9 @@ static const flex_int16_t yy_rule_linenum[223] =
      1867, 1877, 1887, 1897, 1907, 1917, 1927, 1937, 1946, 1955,
      1964, 1973, 1984, 1995, 2008, 2021, 2034, 2043, 2052, 2061,
 
-     2070, 2079, 2088, 2098, 2199, 2215, 2264, 2272, 2287, 2288,
-     2289, 2290, 2291, 2292, 2294, 2312, 2325, 2330, 2334, 2336,
-     2338, 2340
+     2070, 2079, 2088, 2097, 2108, 2209, 2225, 2274, 2282, 2297,
+     2298, 2299, 2300, 2301, 2302, 2304, 2322, 2335, 2340, 2344,
+     2346, 2348, 2350
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2160,7 +2164,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 2163 "dhcp4_lexer.cc"
+#line 2168 "dhcp4_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
@@ -2186,8 +2190,8 @@ using namespace isc::dhcp;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 2189 "dhcp4_lexer.cc"
-#line 2190 "dhcp4_lexer.cc"
+#line 2194 "dhcp4_lexer.cc"
+#line 2195 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2515,7 +2519,7 @@ YY_DECL
     }
 
 
-#line 2518 "dhcp4_lexer.cc"
+#line 2523 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2544,13 +2548,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 >= 2192 )
+                               if ( yy_current_state >= 2199 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 2191 );
+               while ( yy_current_state != 2198 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2569,13 +2573,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 223 )
+                       else if ( yy_act < 224 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], yytext );
-                       else if ( yy_act == 223 )
+                       else if ( yy_act == 224 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         yytext );
-                       else if ( yy_act == 224 )
+                       else if ( yy_act == 225 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -5162,7 +5166,21 @@ YY_RULE_SETUP
        YY_BREAK
 case 204:
 YY_RULE_SETUP
-#line 2098 "dhcp4_lexer.ll"
+#line 2097 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_OFFER_LFT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("offer-lft", driver.loc_);
+    }
+}
+       YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 2108 "dhcp4_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.
@@ -5264,10 +5282,10 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 205:
-/* rule 205 can match eol */
+case 206:
+/* rule 206 can match eol */
 YY_RULE_SETUP
-#line 2199 "dhcp4_lexer.ll"
+#line 2209 "dhcp4_lexer.ll"
 {
     /* Bad string with a forbidden control character inside */
     std::string raw(yytext+1);
@@ -5284,10 +5302,10 @@ YY_RULE_SETUP
                  pos + 1);
 }
        YY_BREAK
-case 206:
-/* rule 206 can match eol */
+case 207:
+/* rule 207 can match eol */
 YY_RULE_SETUP
-#line 2215 "dhcp4_lexer.ll"
+#line 2225 "dhcp4_lexer.ll"
 {
     /* Bad string with a bad escape inside */
     std::string raw(yytext+1);
@@ -5337,9 +5355,9 @@ YY_RULE_SETUP
                  pos);
 }
        YY_BREAK
-case 207:
+case 208:
 YY_RULE_SETUP
-#line 2264 "dhcp4_lexer.ll"
+#line 2274 "dhcp4_lexer.ll"
 {
     /* Bad string with an open escape at the end */
     std::string raw(yytext+1);
@@ -5348,9 +5366,9 @@ YY_RULE_SETUP
                  raw.size() + 1);
 }
        YY_BREAK
-case 208:
+case 209:
 YY_RULE_SETUP
-#line 2272 "dhcp4_lexer.ll"
+#line 2282 "dhcp4_lexer.ll"
 {
     /* Bad string with an open unicode escape at the end */
     std::string raw(yytext+1);
@@ -5366,39 +5384,39 @@ YY_RULE_SETUP
                  pos + 1);
 }
        YY_BREAK
-case 209:
+case 210:
 YY_RULE_SETUP
-#line 2287 "dhcp4_lexer.ll"
+#line 2297 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 210:
+case 211:
 YY_RULE_SETUP
-#line 2288 "dhcp4_lexer.ll"
+#line 2298 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 211:
+case 212:
 YY_RULE_SETUP
-#line 2289 "dhcp4_lexer.ll"
+#line 2299 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 212:
+case 213:
 YY_RULE_SETUP
-#line 2290 "dhcp4_lexer.ll"
+#line 2300 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 213:
+case 214:
 YY_RULE_SETUP
-#line 2291 "dhcp4_lexer.ll"
+#line 2301 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 214:
+case 215:
 YY_RULE_SETUP
-#line 2292 "dhcp4_lexer.ll"
+#line 2302 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 215:
+case 216:
 YY_RULE_SETUP
-#line 2294 "dhcp4_lexer.ll"
+#line 2304 "dhcp4_lexer.ll"
 {
     /* An integer was found. */
     std::string tmp(yytext);
@@ -5417,9 +5435,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 216:
+case 217:
 YY_RULE_SETUP
-#line 2312 "dhcp4_lexer.ll"
+#line 2322 "dhcp4_lexer.ll"
 {
     /* A floating point was found. */
     std::string tmp(yytext);
@@ -5433,43 +5451,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 217:
+case 218:
 YY_RULE_SETUP
-#line 2325 "dhcp4_lexer.ll"
+#line 2335 "dhcp4_lexer.ll"
 {
     string tmp(yytext);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 218:
+case 219:
 YY_RULE_SETUP
-#line 2330 "dhcp4_lexer.ll"
+#line 2340 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 219:
+case 220:
 YY_RULE_SETUP
-#line 2334 "dhcp4_lexer.ll"
+#line 2344 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 220:
+case 221:
 YY_RULE_SETUP
-#line 2336 "dhcp4_lexer.ll"
+#line 2346 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 221:
+case 222:
 YY_RULE_SETUP
-#line 2338 "dhcp4_lexer.ll"
+#line 2348 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 222:
+case 223:
 YY_RULE_SETUP
-#line 2340 "dhcp4_lexer.ll"
+#line 2350 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(yytext));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 2342 "dhcp4_lexer.ll"
+#line 2352 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -5493,12 +5511,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 223:
+case 224:
 YY_RULE_SETUP
-#line 2365 "dhcp4_lexer.ll"
+#line 2375 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 5501 "dhcp4_lexer.cc"
+#line 5520 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -5817,7 +5835,7 @@ 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 >= 2192 )
+                       if ( yy_current_state >= 2199 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -5850,11 +5868,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 >= 2192 )
+               if ( yy_current_state >= 2199 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 2191);
+       yy_is_jam = (yy_current_state == 2198);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -6603,7 +6621,7 @@ void yyfree (void * ptr )
 
 /* %ok-for-header */
 
-#line 2365 "dhcp4_lexer.ll"
+#line 2375 "dhcp4_lexer.ll"
 
 
 using namespace isc::dhcp;
index ed105269d601251e090046bd54e5dd9f62ac33b6..22d36a5cf4c699da1ff6ebe09b813d03468a8e7a 100644 (file)
@@ -2093,6 +2093,16 @@ ControlCharacterFill            [^"\\]|\\["\\/bfnrtu]
     }
 }
 
+\"offer-lft\" {
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DHCP4:
+    case isc::dhcp::Parser4Context::SUBNET4:
+    case isc::dhcp::Parser4Context::SHARED_NETWORK:
+        return isc::dhcp::Dhcp4Parser::make_OFFER_LFT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("offer-lft", driver.loc_);
+    }
+}
 
 {JSONString} {
     /* A string has been matched. It contains the actual string and single quotes.
index 17b46ce86cdb2d4802b98f27c55a669fc05eb9d7..afcfcd548e261c6d730f4d04cf341a2ac8f732f3 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
 
 // Skeleton implementation for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
 // GNU General Public License for more details.
 
 // You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 // As a special exception, you may create a larger work that contains
 // part or all of the Bison parser skeleton and distribute that work
 #else // !PARSER4_DEBUG
 
 # define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol)  YY_USE (Symbol)
+# define YY_SYMBOL_PRINT(Title, Symbol)  YYUSE (Symbol)
 # define YY_REDUCE_PRINT(Rule)           static_cast<void> (0)
 # define YY_STACK_PRINT()                static_cast<void> (0)
 
@@ -160,9 +160,9 @@ namespace isc { namespace dhcp {
   Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
   {}
 
-  /*---------.
-  | symbol.  |
-  `---------*/
+  /*---------------.
+  | symbol kinds.  |
+  `---------------*/
 
 
 
@@ -390,7 +390,7 @@ namespace isc { namespace dhcp {
   Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
   {
     std::ostream& yyoutput = yyo;
-    YY_USE (yyoutput);
+    YYUSE (yyoutput);
     if (yysym.empty ())
       yyo << "empty symbol";
     else
@@ -402,79 +402,79 @@ namespace isc { namespace dhcp {
         switch (yykind)
     {
       case symbol_kind::S_STRING: // "constant string"
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < std::string > (); }
 #line 408 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_INTEGER: // "integer"
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < int64_t > (); }
 #line 414 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_FLOAT: // "floating point"
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < double > (); }
 #line 420 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_BOOLEAN: // "boolean"
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < bool > (); }
 #line 426 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_value: // value
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 432 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_map_value: // map_value
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 438 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 444 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_socket_type: // socket_type
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 450 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_outbound_interface_value: // outbound_interface_value
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 456 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_db_type: // db_type
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 462 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_on_fail_mode: // on_fail_mode
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 468 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_hr_mode: // hr_mode
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 474 "dhcp4_parser.cc"
         break;
 
       case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
-#line 295 "dhcp4_parser.yy"
+#line 296 "dhcp4_parser.yy"
                  { yyoutput << yysym.value.template as < ElementPtr > (); }
 #line 480 "dhcp4_parser.cc"
         break;
@@ -507,7 +507,7 @@ namespace isc { namespace dhcp {
   }
 
   void
-  Dhcp4Parser::yypop_ (int n) YY_NOEXCEPT
+  Dhcp4Parser::yypop_ (int n)
   {
     yystack_.pop (n);
   }
@@ -550,13 +550,13 @@ namespace isc { namespace dhcp {
   }
 
   bool
-  Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
+  Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue)
   {
     return yyvalue == yypact_ninf_;
   }
 
   bool
-  Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
+  Dhcp4Parser::yy_table_value_is_error_ (int yyvalue)
   {
     return yyvalue == yytable_ninf_;
   }
@@ -755,127 +755,127 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2: // $@1: %empty
-#line 304 "dhcp4_parser.yy"
+#line 305 "dhcp4_parser.yy"
                      { ctx.ctx_ = ctx.NO_KEYWORD; }
 #line 761 "dhcp4_parser.cc"
     break;
 
   case 4: // $@2: %empty
-#line 305 "dhcp4_parser.yy"
+#line 306 "dhcp4_parser.yy"
                       { ctx.ctx_ = ctx.CONFIG; }
 #line 767 "dhcp4_parser.cc"
     break;
 
   case 6: // $@3: %empty
-#line 306 "dhcp4_parser.yy"
+#line 307 "dhcp4_parser.yy"
                  { ctx.ctx_ = ctx.DHCP4; }
 #line 773 "dhcp4_parser.cc"
     break;
 
   case 8: // $@4: %empty
-#line 307 "dhcp4_parser.yy"
+#line 308 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
 #line 779 "dhcp4_parser.cc"
     break;
 
   case 10: // $@5: %empty
-#line 308 "dhcp4_parser.yy"
+#line 309 "dhcp4_parser.yy"
                    { ctx.ctx_ = ctx.SUBNET4; }
 #line 785 "dhcp4_parser.cc"
     break;
 
   case 12: // $@6: %empty
-#line 309 "dhcp4_parser.yy"
+#line 310 "dhcp4_parser.yy"
                  { ctx.ctx_ = ctx.POOLS; }
 #line 791 "dhcp4_parser.cc"
     break;
 
   case 14: // $@7: %empty
-#line 310 "dhcp4_parser.yy"
+#line 311 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.RESERVATIONS; }
 #line 797 "dhcp4_parser.cc"
     break;
 
   case 16: // $@8: %empty
-#line 311 "dhcp4_parser.yy"
+#line 312 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.DHCP4; }
 #line 803 "dhcp4_parser.cc"
     break;
 
   case 18: // $@9: %empty
-#line 312 "dhcp4_parser.yy"
+#line 313 "dhcp4_parser.yy"
                       { ctx.ctx_ = ctx.OPTION_DEF; }
 #line 809 "dhcp4_parser.cc"
     break;
 
   case 20: // $@10: %empty
-#line 313 "dhcp4_parser.yy"
+#line 314 "dhcp4_parser.yy"
                        { ctx.ctx_ = ctx.OPTION_DATA; }
 #line 815 "dhcp4_parser.cc"
     break;
 
   case 22: // $@11: %empty
-#line 314 "dhcp4_parser.yy"
+#line 315 "dhcp4_parser.yy"
                          { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
 #line 821 "dhcp4_parser.cc"
     break;
 
   case 24: // $@12: %empty
-#line 315 "dhcp4_parser.yy"
+#line 316 "dhcp4_parser.yy"
                      { ctx.ctx_ = ctx.DHCP_DDNS; }
 #line 827 "dhcp4_parser.cc"
     break;
 
   case 26: // $@13: %empty
-#line 316 "dhcp4_parser.yy"
+#line 317 "dhcp4_parser.yy"
                           { ctx.ctx_ = ctx.CONFIG_CONTROL; }
 #line 833 "dhcp4_parser.cc"
     break;
 
   case 28: // value: "integer"
-#line 324 "dhcp4_parser.yy"
+#line 325 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
 #line 839 "dhcp4_parser.cc"
     break;
 
   case 29: // value: "floating point"
-#line 325 "dhcp4_parser.yy"
+#line 326 "dhcp4_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
 #line 845 "dhcp4_parser.cc"
     break;
 
   case 30: // value: "boolean"
-#line 326 "dhcp4_parser.yy"
+#line 327 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
 #line 851 "dhcp4_parser.cc"
     break;
 
   case 31: // value: "constant string"
-#line 327 "dhcp4_parser.yy"
+#line 328 "dhcp4_parser.yy"
               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
 #line 857 "dhcp4_parser.cc"
     break;
 
   case 32: // value: "null"
-#line 328 "dhcp4_parser.yy"
+#line 329 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
 #line 863 "dhcp4_parser.cc"
     break;
 
   case 33: // value: map2
-#line 329 "dhcp4_parser.yy"
+#line 330 "dhcp4_parser.yy"
             { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 869 "dhcp4_parser.cc"
     break;
 
   case 34: // value: list_generic
-#line 330 "dhcp4_parser.yy"
+#line 331 "dhcp4_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 875 "dhcp4_parser.cc"
     break;
 
   case 35: // sub_json: value
-#line 333 "dhcp4_parser.yy"
+#line 334 "dhcp4_parser.yy"
                 {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
@@ -884,7 +884,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 36: // $@14: %empty
-#line 338 "dhcp4_parser.yy"
+#line 339 "dhcp4_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -895,7 +895,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 37: // map2: "{" $@14 map_content "}"
-#line 343 "dhcp4_parser.yy"
+#line 344 "dhcp4_parser.yy"
                              {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -905,13 +905,13 @@ namespace isc { namespace dhcp {
     break;
 
   case 38: // map_value: map2
-#line 349 "dhcp4_parser.yy"
+#line 350 "dhcp4_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
 #line 911 "dhcp4_parser.cc"
     break;
 
   case 41: // not_empty_map: "constant string" ":" value
-#line 356 "dhcp4_parser.yy"
+#line 357 "dhcp4_parser.yy"
                                   {
                   // map containing a single entry
                   ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
@@ -921,7 +921,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 42: // not_empty_map: not_empty_map "," "constant string" ":" value
-#line 361 "dhcp4_parser.yy"
+#line 362 "dhcp4_parser.yy"
                                                       {
                   // map consisting of a shorter map followed by
                   // comma and string:value
@@ -932,7 +932,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 43: // not_empty_map: not_empty_map ","
-#line 367 "dhcp4_parser.yy"
+#line 368 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
@@ -940,7 +940,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 44: // $@15: %empty
-#line 372 "dhcp4_parser.yy"
+#line 373 "dhcp4_parser.yy"
                               {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
@@ -949,7 +949,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 45: // list_generic: "[" $@15 list_content "]"
-#line 375 "dhcp4_parser.yy"
+#line 376 "dhcp4_parser.yy"
                                {
     // list parsing complete. Put any sanity checking here
 }
@@ -957,7 +957,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 48: // not_empty_list: value
-#line 383 "dhcp4_parser.yy"
+#line 384 "dhcp4_parser.yy"
                       {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
@@ -966,7 +966,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 49: // not_empty_list: not_empty_list "," value
-#line 387 "dhcp4_parser.yy"
+#line 388 "dhcp4_parser.yy"
                                            {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
@@ -975,7 +975,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 50: // not_empty_list: not_empty_list ","
-#line 391 "dhcp4_parser.yy"
+#line 392 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
@@ -983,7 +983,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 51: // $@16: %empty
-#line 397 "dhcp4_parser.yy"
+#line 398 "dhcp4_parser.yy"
                               {
     // List parsing about to start
 }
@@ -991,7 +991,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 52: // list_strings: "[" $@16 list_strings_content "]"
-#line 399 "dhcp4_parser.yy"
+#line 400 "dhcp4_parser.yy"
                                        {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
@@ -1000,7 +1000,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 55: // not_empty_list_strings: "constant string"
-#line 408 "dhcp4_parser.yy"
+#line 409 "dhcp4_parser.yy"
                                {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -1009,7 +1009,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string"
-#line 412 "dhcp4_parser.yy"
+#line 413 "dhcp4_parser.yy"
                                                             {
                           ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
                           ctx.stack_.back()->add(s);
@@ -1018,7 +1018,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 57: // not_empty_list_strings: not_empty_list_strings ","
-#line 416 "dhcp4_parser.yy"
+#line 417 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
@@ -1026,7 +1026,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 58: // unknown_map_entry: "constant string" ":"
-#line 426 "dhcp4_parser.yy"
+#line 427 "dhcp4_parser.yy"
                                 {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as < std::string > ();
@@ -1037,7 +1037,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 59: // $@17: %empty
-#line 435 "dhcp4_parser.yy"
+#line 436 "dhcp4_parser.yy"
                            {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1048,7 +1048,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 60: // syntax_map: "{" $@17 global_object "}"
-#line 440 "dhcp4_parser.yy"
+#line 441 "dhcp4_parser.yy"
                                {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -1061,7 +1061,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 61: // $@18: %empty
-#line 450 "dhcp4_parser.yy"
+#line 451 "dhcp4_parser.yy"
                      {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -1076,7 +1076,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}"
-#line 459 "dhcp4_parser.yy"
+#line 460 "dhcp4_parser.yy"
                                                     {
     // No global parameter is required
     ctx.stack_.pop_back();
@@ -1086,7 +1086,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 64: // global_object_comma: global_object ","
-#line 467 "dhcp4_parser.yy"
+#line 468 "dhcp4_parser.yy"
                                          {
     ctx.warnAboutExtraCommas(yystack_[0].location);
 }
@@ -1094,7 +1094,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 65: // $@19: %empty
-#line 473 "dhcp4_parser.yy"
+#line 474 "dhcp4_parser.yy"
                           {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1104,7 +1104,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 66: // sub_dhcp4: "{" $@19 global_params "}"
-#line 477 "dhcp4_parser.yy"
+#line 478 "dhcp4_parser.yy"
                                {
     // No global parameter is required
     // parsing completed
@@ -1113,15 +1113,15 @@ namespace isc { namespace dhcp {
     break;
 
   case 69: // global_params: global_params ","
-#line 484 "dhcp4_parser.yy"
+#line 485 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
 #line 1121 "dhcp4_parser.cc"
     break;
 
-  case 135: // valid_lifetime: "valid-lifetime" ":" "integer"
-#line 558 "dhcp4_parser.yy"
+  case 136: // valid_lifetime: "valid-lifetime" ":" "integer"
+#line 560 "dhcp4_parser.yy"
                                              {
     ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1130,8 +1130,8 @@ namespace isc { namespace dhcp {
 #line 1131 "dhcp4_parser.cc"
     break;
 
-  case 136: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
-#line 564 "dhcp4_parser.yy"
+  case 137: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
+#line 566 "dhcp4_parser.yy"
                                                      {
     ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1140,8 +1140,8 @@ namespace isc { namespace dhcp {
 #line 1141 "dhcp4_parser.cc"
     break;
 
-  case 137: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
-#line 570 "dhcp4_parser.yy"
+  case 138: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
+#line 572 "dhcp4_parser.yy"
                                                      {
     ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1150,8 +1150,8 @@ namespace isc { namespace dhcp {
 #line 1151 "dhcp4_parser.cc"
     break;
 
-  case 138: // renew_timer: "renew-timer" ":" "integer"
-#line 576 "dhcp4_parser.yy"
+  case 139: // renew_timer: "renew-timer" ":" "integer"
+#line 578 "dhcp4_parser.yy"
                                        {
     ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1160,8 +1160,8 @@ namespace isc { namespace dhcp {
 #line 1161 "dhcp4_parser.cc"
     break;
 
-  case 139: // rebind_timer: "rebind-timer" ":" "integer"
-#line 582 "dhcp4_parser.yy"
+  case 140: // rebind_timer: "rebind-timer" ":" "integer"
+#line 584 "dhcp4_parser.yy"
                                          {
     ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1170,8 +1170,8 @@ namespace isc { namespace dhcp {
 #line 1171 "dhcp4_parser.cc"
     break;
 
-  case 140: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
-#line 588 "dhcp4_parser.yy"
+  case 141: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
+#line 590 "dhcp4_parser.yy"
                                                        {
     ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
     ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1180,8 +1180,8 @@ namespace isc { namespace dhcp {
 #line 1181 "dhcp4_parser.cc"
     break;
 
-  case 141: // t1_percent: "t1-percent" ":" "floating point"
-#line 594 "dhcp4_parser.yy"
+  case 142: // t1_percent: "t1-percent" ":" "floating point"
+#line 596 "dhcp4_parser.yy"
                                    {
     ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1190,8 +1190,8 @@ namespace isc { namespace dhcp {
 #line 1191 "dhcp4_parser.cc"
     break;
 
-  case 142: // t2_percent: "t2-percent" ":" "floating point"
-#line 600 "dhcp4_parser.yy"
+  case 143: // t2_percent: "t2-percent" ":" "floating point"
+#line 602 "dhcp4_parser.yy"
                                    {
     ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
     ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1200,8 +1200,8 @@ namespace isc { namespace dhcp {
 #line 1201 "dhcp4_parser.cc"
     break;
 
-  case 143: // cache_threshold: "cache-threshold" ":" "floating point"
-#line 606 "dhcp4_parser.yy"
+  case 144: // cache_threshold: "cache-threshold" ":" "floating point"
+#line 608 "dhcp4_parser.yy"
                                              {
     ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
     ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
@@ -1210,8 +1210,8 @@ namespace isc { namespace dhcp {
 #line 1211 "dhcp4_parser.cc"
     break;
 
-  case 144: // cache_max_age: "cache-max-age" ":" "integer"
-#line 612 "dhcp4_parser.yy"
+  case 145: // cache_max_age: "cache-max-age" ":" "integer"
+#line 614 "dhcp4_parser.yy"
                                            {
     ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1220,8 +1220,8 @@ namespace isc { namespace dhcp {
 #line 1221 "dhcp4_parser.cc"
     break;
 
-  case 145: // decline_probation_period: "decline-probation-period" ":" "integer"
-#line 618 "dhcp4_parser.yy"
+  case 146: // decline_probation_period: "decline-probation-period" ":" "integer"
+#line 620 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
     ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1230,8 +1230,8 @@ namespace isc { namespace dhcp {
 #line 1231 "dhcp4_parser.cc"
     break;
 
-  case 146: // $@20: %empty
-#line 624 "dhcp4_parser.yy"
+  case 147: // $@20: %empty
+#line 626 "dhcp4_parser.yy"
                        {
     ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1239,8 +1239,8 @@ namespace isc { namespace dhcp {
 #line 1240 "dhcp4_parser.cc"
     break;
 
-  case 147: // server_tag: "server-tag" $@20 ":" "constant string"
-#line 627 "dhcp4_parser.yy"
+  case 148: // server_tag: "server-tag" $@20 ":" "constant string"
+#line 629 "dhcp4_parser.yy"
                {
     ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-tag", stag);
@@ -1249,8 +1249,8 @@ namespace isc { namespace dhcp {
 #line 1250 "dhcp4_parser.cc"
     break;
 
-  case 148: // parked_packet_limit: "parked-packet-limit" ":" "integer"
-#line 633 "dhcp4_parser.yy"
+  case 149: // parked_packet_limit: "parked-packet-limit" ":" "integer"
+#line 635 "dhcp4_parser.yy"
                                                        {
     ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
     ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1259,8 +1259,8 @@ namespace isc { namespace dhcp {
 #line 1260 "dhcp4_parser.cc"
     break;
 
-  case 149: // $@21: %empty
-#line 639 "dhcp4_parser.yy"
+  case 150: // $@21: %empty
+#line 641 "dhcp4_parser.yy"
                      {
     ctx.unique("allocator", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1268,8 +1268,8 @@ namespace isc { namespace dhcp {
 #line 1269 "dhcp4_parser.cc"
     break;
 
-  case 150: // allocator: "allocator" $@21 ":" "constant string"
-#line 642 "dhcp4_parser.yy"
+  case 151: // allocator: "allocator" $@21 ":" "constant string"
+#line 644 "dhcp4_parser.yy"
                {
     ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("allocator", al);
@@ -1278,8 +1278,8 @@ namespace isc { namespace dhcp {
 #line 1279 "dhcp4_parser.cc"
     break;
 
-  case 151: // echo_client_id: "echo-client-id" ":" "boolean"
-#line 648 "dhcp4_parser.yy"
+  case 152: // echo_client_id: "echo-client-id" ":" "boolean"
+#line 650 "dhcp4_parser.yy"
                                              {
     ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1288,8 +1288,8 @@ namespace isc { namespace dhcp {
 #line 1289 "dhcp4_parser.cc"
     break;
 
-  case 152: // match_client_id: "match-client-id" ":" "boolean"
-#line 654 "dhcp4_parser.yy"
+  case 153: // match_client_id: "match-client-id" ":" "boolean"
+#line 656 "dhcp4_parser.yy"
                                                {
     ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location));
     ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1298,8 +1298,8 @@ namespace isc { namespace dhcp {
 #line 1299 "dhcp4_parser.cc"
     break;
 
-  case 153: // authoritative: "authoritative" ":" "boolean"
-#line 660 "dhcp4_parser.yy"
+  case 154: // authoritative: "authoritative" ":" "boolean"
+#line 662 "dhcp4_parser.yy"
                                            {
     ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1308,8 +1308,8 @@ namespace isc { namespace dhcp {
 #line 1309 "dhcp4_parser.cc"
     break;
 
-  case 154: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
-#line 666 "dhcp4_parser.yy"
+  case 155: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
+#line 668 "dhcp4_parser.yy"
                                                    {
     ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1318,8 +1318,8 @@ namespace isc { namespace dhcp {
 #line 1319 "dhcp4_parser.cc"
     break;
 
-  case 155: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
-#line 672 "dhcp4_parser.yy"
+  case 156: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
+#line 674 "dhcp4_parser.yy"
                                                                {
     ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1328,8 +1328,8 @@ namespace isc { namespace dhcp {
 #line 1329 "dhcp4_parser.cc"
     break;
 
-  case 156: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
-#line 678 "dhcp4_parser.yy"
+  case 157: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
+#line 680 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1338,8 +1338,8 @@ namespace isc { namespace dhcp {
 #line 1339 "dhcp4_parser.cc"
     break;
 
-  case 157: // $@22: %empty
-#line 684 "dhcp4_parser.yy"
+  case 158: // $@22: %empty
+#line 686 "dhcp4_parser.yy"
                                                    {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
     ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
@@ -1347,8 +1347,8 @@ namespace isc { namespace dhcp {
 #line 1348 "dhcp4_parser.cc"
     break;
 
-  case 158: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
-#line 687 "dhcp4_parser.yy"
+  case 159: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
+#line 689 "dhcp4_parser.yy"
                                        {
     ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
@@ -1356,40 +1356,40 @@ namespace isc { namespace dhcp {
 #line 1357 "dhcp4_parser.cc"
     break;
 
-  case 159: // ddns_replace_client_name_value: "when-present"
-#line 693 "dhcp4_parser.yy"
+  case 160: // ddns_replace_client_name_value: "when-present"
+#line 695 "dhcp4_parser.yy"
                  {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
       }
 #line 1365 "dhcp4_parser.cc"
     break;
 
-  case 160: // ddns_replace_client_name_value: "never"
-#line 696 "dhcp4_parser.yy"
+  case 161: // ddns_replace_client_name_value: "never"
+#line 698 "dhcp4_parser.yy"
           {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
 #line 1373 "dhcp4_parser.cc"
     break;
 
-  case 161: // ddns_replace_client_name_value: "always"
-#line 699 "dhcp4_parser.yy"
+  case 162: // ddns_replace_client_name_value: "always"
+#line 701 "dhcp4_parser.yy"
            {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
 #line 1381 "dhcp4_parser.cc"
     break;
 
-  case 162: // ddns_replace_client_name_value: "when-not-present"
-#line 702 "dhcp4_parser.yy"
+  case 163: // ddns_replace_client_name_value: "when-not-present"
+#line 704 "dhcp4_parser.yy"
                      {
       yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
 #line 1389 "dhcp4_parser.cc"
     break;
 
-  case 163: // ddns_replace_client_name_value: "boolean"
-#line 705 "dhcp4_parser.yy"
+  case 164: // ddns_replace_client_name_value: "boolean"
+#line 707 "dhcp4_parser.yy"
             {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
@@ -1397,8 +1397,8 @@ namespace isc { namespace dhcp {
 #line 1398 "dhcp4_parser.cc"
     break;
 
-  case 164: // $@23: %empty
-#line 711 "dhcp4_parser.yy"
+  case 165: // $@23: %empty
+#line 713 "dhcp4_parser.yy"
                                              {
     ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1406,8 +1406,8 @@ namespace isc { namespace dhcp {
 #line 1407 "dhcp4_parser.cc"
     break;
 
-  case 165: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
-#line 714 "dhcp4_parser.yy"
+  case 166: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
+#line 716 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-generated-prefix", s);
@@ -1416,8 +1416,8 @@ namespace isc { namespace dhcp {
 #line 1417 "dhcp4_parser.cc"
     break;
 
-  case 166: // $@24: %empty
-#line 720 "dhcp4_parser.yy"
+  case 167: // $@24: %empty
+#line 722 "dhcp4_parser.yy"
                                                {
     ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1425,8 +1425,8 @@ namespace isc { namespace dhcp {
 #line 1426 "dhcp4_parser.cc"
     break;
 
-  case 167: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
-#line 723 "dhcp4_parser.yy"
+  case 168: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
+#line 725 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ddns-qualifying-suffix", s);
@@ -1435,8 +1435,8 @@ namespace isc { namespace dhcp {
 #line 1436 "dhcp4_parser.cc"
     break;
 
-  case 168: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
-#line 729 "dhcp4_parser.yy"
+  case 169: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
+#line 731 "dhcp4_parser.yy"
                                                          {
     ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1445,8 +1445,8 @@ namespace isc { namespace dhcp {
 #line 1446 "dhcp4_parser.cc"
     break;
 
-  case 169: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
-#line 735 "dhcp4_parser.yy"
+  case 170: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
+#line 737 "dhcp4_parser.yy"
                                                                          {
     ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1455,8 +1455,8 @@ namespace isc { namespace dhcp {
 #line 1456 "dhcp4_parser.cc"
     break;
 
-  case 170: // $@25: %empty
-#line 741 "dhcp4_parser.yy"
+  case 171: // $@25: %empty
+#line 743 "dhcp4_parser.yy"
                                      {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1464,8 +1464,8 @@ namespace isc { namespace dhcp {
 #line 1465 "dhcp4_parser.cc"
     break;
 
-  case 171: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
-#line 744 "dhcp4_parser.yy"
+  case 172: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string"
+#line 746 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
@@ -1474,8 +1474,8 @@ namespace isc { namespace dhcp {
 #line 1475 "dhcp4_parser.cc"
     break;
 
-  case 172: // $@26: %empty
-#line 750 "dhcp4_parser.yy"
+  case 173: // $@26: %empty
+#line 752 "dhcp4_parser.yy"
                                                      {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
@@ -1483,8 +1483,8 @@ namespace isc { namespace dhcp {
 #line 1484 "dhcp4_parser.cc"
     break;
 
-  case 173: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
-#line 753 "dhcp4_parser.yy"
+  case 174: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string"
+#line 755 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
@@ -1493,8 +1493,8 @@ namespace isc { namespace dhcp {
 #line 1494 "dhcp4_parser.cc"
     break;
 
-  case 174: // store_extended_info: "store-extended-info" ":" "boolean"
-#line 759 "dhcp4_parser.yy"
+  case 175: // store_extended_info: "store-extended-info" ":" "boolean"
+#line 761 "dhcp4_parser.yy"
                                                        {
     ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1503,8 +1503,8 @@ namespace isc { namespace dhcp {
 #line 1504 "dhcp4_parser.cc"
     break;
 
-  case 175: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
-#line 765 "dhcp4_parser.yy"
+  case 176: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
+#line 767 "dhcp4_parser.yy"
                                                                              {
     ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
     ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1513,8 +1513,8 @@ namespace isc { namespace dhcp {
 #line 1514 "dhcp4_parser.cc"
     break;
 
-  case 176: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
-#line 771 "dhcp4_parser.yy"
+  case 177: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
+#line 773 "dhcp4_parser.yy"
                                                                          {
     ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
     ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
@@ -1523,8 +1523,8 @@ namespace isc { namespace dhcp {
 #line 1524 "dhcp4_parser.cc"
     break;
 
-  case 177: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
-#line 777 "dhcp4_parser.yy"
+  case 178: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
+#line 779 "dhcp4_parser.yy"
                                                                                  {
     ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
     ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1533,8 +1533,8 @@ namespace isc { namespace dhcp {
 #line 1534 "dhcp4_parser.cc"
     break;
 
-  case 178: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
-#line 783 "dhcp4_parser.yy"
+  case 179: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
+#line 785 "dhcp4_parser.yy"
                                                              {
     ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
     ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1543,8 +1543,8 @@ namespace isc { namespace dhcp {
 #line 1544 "dhcp4_parser.cc"
     break;
 
-  case 179: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
-#line 789 "dhcp4_parser.yy"
+  case 180: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
+#line 791 "dhcp4_parser.yy"
                                                                    {
     ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
     ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
@@ -1553,8 +1553,18 @@ namespace isc { namespace dhcp {
 #line 1554 "dhcp4_parser.cc"
     break;
 
-  case 180: // $@27: %empty
-#line 795 "dhcp4_parser.yy"
+  case 181: // offer_lft: "offer-lft" ":" "integer"
+#line 797 "dhcp4_parser.yy"
+                                   {
+    ctx.unique("offer-lft", ctx.loc2pos(yystack_[2].location));
+    ElementPtr offer_lft(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("offer-lft", offer_lft);
+}
+#line 1564 "dhcp4_parser.cc"
+    break;
+
+  case 182: // $@27: %empty
+#line 803 "dhcp4_parser.yy"
                                      {
     ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1562,48 +1572,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 1566 "dhcp4_parser.cc"
+#line 1576 "dhcp4_parser.cc"
     break;
 
-  case 181: // interfaces_config: "interfaces-config" $@27 ":" "{" interfaces_config_params "}"
-#line 801 "dhcp4_parser.yy"
+  case 183: // interfaces_config: "interfaces-config" $@27 ":" "{" interfaces_config_params "}"
+#line 809 "dhcp4_parser.yy"
                                                                {
     // No interfaces config param is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1576 "dhcp4_parser.cc"
+#line 1586 "dhcp4_parser.cc"
     break;
 
-  case 184: // interfaces_config_params: interfaces_config_params ","
-#line 809 "dhcp4_parser.yy"
+  case 186: // interfaces_config_params: interfaces_config_params ","
+#line 817 "dhcp4_parser.yy"
                                                          {
                             ctx.warnAboutExtraCommas(yystack_[0].location);
                             }
-#line 1584 "dhcp4_parser.cc"
+#line 1594 "dhcp4_parser.cc"
     break;
 
-  case 195: // $@28: %empty
-#line 826 "dhcp4_parser.yy"
+  case 197: // $@28: %empty
+#line 834 "dhcp4_parser.yy"
                                 {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1594 "dhcp4_parser.cc"
+#line 1604 "dhcp4_parser.cc"
     break;
 
-  case 196: // sub_interfaces4: "{" $@28 interfaces_config_params "}"
-#line 830 "dhcp4_parser.yy"
+  case 198: // sub_interfaces4: "{" $@28 interfaces_config_params "}"
+#line 838 "dhcp4_parser.yy"
                                           {
     // No interfaces config param is required
     // parsing completed
 }
-#line 1603 "dhcp4_parser.cc"
+#line 1613 "dhcp4_parser.cc"
     break;
 
-  case 197: // $@29: %empty
-#line 835 "dhcp4_parser.yy"
+  case 199: // $@29: %empty
+#line 843 "dhcp4_parser.yy"
                             {
     ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1611,124 +1621,124 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1615 "dhcp4_parser.cc"
+#line 1625 "dhcp4_parser.cc"
     break;
 
-  case 198: // interfaces_list: "interfaces" $@29 ":" list_strings
-#line 841 "dhcp4_parser.yy"
+  case 200: // interfaces_list: "interfaces" $@29 ":" list_strings
+#line 849 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1624 "dhcp4_parser.cc"
+#line 1634 "dhcp4_parser.cc"
     break;
 
-  case 199: // $@30: %empty
-#line 846 "dhcp4_parser.yy"
+  case 201: // $@30: %empty
+#line 854 "dhcp4_parser.yy"
                                    {
     ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
-#line 1633 "dhcp4_parser.cc"
+#line 1643 "dhcp4_parser.cc"
     break;
 
-  case 200: // dhcp_socket_type: "dhcp-socket-type" $@30 ":" socket_type
-#line 849 "dhcp4_parser.yy"
+  case 202: // dhcp_socket_type: "dhcp-socket-type" $@30 ":" socket_type
+#line 857 "dhcp4_parser.yy"
                     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1642 "dhcp4_parser.cc"
+#line 1652 "dhcp4_parser.cc"
     break;
 
-  case 201: // socket_type: "raw"
-#line 854 "dhcp4_parser.yy"
+  case 203: // socket_type: "raw"
+#line 862 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1648 "dhcp4_parser.cc"
+#line 1658 "dhcp4_parser.cc"
     break;
 
-  case 202: // socket_type: "udp"
-#line 855 "dhcp4_parser.yy"
+  case 204: // socket_type: "udp"
+#line 863 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1654 "dhcp4_parser.cc"
+#line 1664 "dhcp4_parser.cc"
     break;
 
-  case 203: // $@31: %empty
-#line 858 "dhcp4_parser.yy"
+  case 205: // $@31: %empty
+#line 866 "dhcp4_parser.yy"
                                        {
     ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.OUTBOUND_INTERFACE);
 }
-#line 1663 "dhcp4_parser.cc"
+#line 1673 "dhcp4_parser.cc"
     break;
 
-  case 204: // outbound_interface: "outbound-interface" $@31 ":" outbound_interface_value
-#line 861 "dhcp4_parser.yy"
+  case 206: // outbound_interface: "outbound-interface" $@31 ":" outbound_interface_value
+#line 869 "dhcp4_parser.yy"
                                  {
     ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1672 "dhcp4_parser.cc"
+#line 1682 "dhcp4_parser.cc"
     break;
 
-  case 205: // outbound_interface_value: "same-as-inbound"
-#line 866 "dhcp4_parser.yy"
+  case 207: // outbound_interface_value: "same-as-inbound"
+#line 874 "dhcp4_parser.yy"
                                           {
     yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
 }
-#line 1680 "dhcp4_parser.cc"
+#line 1690 "dhcp4_parser.cc"
     break;
 
-  case 206: // outbound_interface_value: "use-routing"
-#line 868 "dhcp4_parser.yy"
+  case 208: // outbound_interface_value: "use-routing"
+#line 876 "dhcp4_parser.yy"
                 {
     yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
     }
-#line 1688 "dhcp4_parser.cc"
+#line 1698 "dhcp4_parser.cc"
     break;
 
-  case 207: // re_detect: "re-detect" ":" "boolean"
-#line 872 "dhcp4_parser.yy"
+  case 209: // re_detect: "re-detect" ":" "boolean"
+#line 880 "dhcp4_parser.yy"
                                    {
     ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("re-detect", b);
 }
-#line 1698 "dhcp4_parser.cc"
+#line 1708 "dhcp4_parser.cc"
     break;
 
-  case 208: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
-#line 878 "dhcp4_parser.yy"
+  case 210: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
+#line 886 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-require-all", b);
 }
-#line 1708 "dhcp4_parser.cc"
+#line 1718 "dhcp4_parser.cc"
     break;
 
-  case 209: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
-#line 884 "dhcp4_parser.yy"
+  case 211: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
+#line 892 "dhcp4_parser.yy"
                                                                                {
     ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-retry-wait-time", n);
 }
-#line 1718 "dhcp4_parser.cc"
+#line 1728 "dhcp4_parser.cc"
     break;
 
-  case 210: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
-#line 890 "dhcp4_parser.yy"
+  case 212: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
+#line 898 "dhcp4_parser.yy"
                                                                        {
     ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("service-sockets-max-retries", n);
 }
-#line 1728 "dhcp4_parser.cc"
+#line 1738 "dhcp4_parser.cc"
     break;
 
-  case 211: // $@32: %empty
-#line 896 "dhcp4_parser.yy"
+  case 213: // $@32: %empty
+#line 904 "dhcp4_parser.yy"
                                {
     ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1736,22 +1746,22 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1740 "dhcp4_parser.cc"
+#line 1750 "dhcp4_parser.cc"
     break;
 
-  case 212: // lease_database: "lease-database" $@32 ":" "{" database_map_params "}"
-#line 902 "dhcp4_parser.yy"
+  case 214: // lease_database: "lease-database" $@32 ":" "{" database_map_params "}"
+#line 910 "dhcp4_parser.yy"
                                                           {
     // 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 1751 "dhcp4_parser.cc"
+#line 1761 "dhcp4_parser.cc"
     break;
 
-  case 213: // $@33: %empty
-#line 909 "dhcp4_parser.yy"
+  case 215: // $@33: %empty
+#line 917 "dhcp4_parser.yy"
                              {
     ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1759,37 +1769,37 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SANITY_CHECKS);
 }
-#line 1763 "dhcp4_parser.cc"
+#line 1773 "dhcp4_parser.cc"
     break;
 
-  case 214: // sanity_checks: "sanity-checks" $@33 ":" "{" sanity_checks_params "}"
-#line 915 "dhcp4_parser.yy"
+  case 216: // sanity_checks: "sanity-checks" $@33 ":" "{" sanity_checks_params "}"
+#line 923 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1772 "dhcp4_parser.cc"
+#line 1782 "dhcp4_parser.cc"
     break;
 
-  case 217: // sanity_checks_params: sanity_checks_params ","
-#line 922 "dhcp4_parser.yy"
+  case 219: // sanity_checks_params: sanity_checks_params ","
+#line 930 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 1780 "dhcp4_parser.cc"
+#line 1790 "dhcp4_parser.cc"
     break;
 
-  case 220: // $@34: %empty
-#line 931 "dhcp4_parser.yy"
+  case 222: // $@34: %empty
+#line 939 "dhcp4_parser.yy"
                            {
     ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1789 "dhcp4_parser.cc"
+#line 1799 "dhcp4_parser.cc"
     break;
 
-  case 221: // lease_checks: "lease-checks" $@34 ":" "constant string"
-#line 934 "dhcp4_parser.yy"
+  case 223: // lease_checks: "lease-checks" $@34 ":" "constant string"
+#line 942 "dhcp4_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -1805,20 +1815,20 @@ namespace isc { namespace dhcp {
               ", supported values are: none, warn, fix, fix-del, del");
     }
 }
-#line 1809 "dhcp4_parser.cc"
+#line 1819 "dhcp4_parser.cc"
     break;
 
-  case 222: // $@35: %empty
-#line 950 "dhcp4_parser.yy"
+  case 224: // $@35: %empty
+#line 958 "dhcp4_parser.yy"
                                            {
     ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1818 "dhcp4_parser.cc"
+#line 1828 "dhcp4_parser.cc"
     break;
 
-  case 223: // extended_info_checks: "extended-info-checks" $@35 ":" "constant string"
-#line 953 "dhcp4_parser.yy"
+  case 225: // extended_info_checks: "extended-info-checks" $@35 ":" "constant string"
+#line 961 "dhcp4_parser.yy"
                {
 
     if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
@@ -1833,11 +1843,11 @@ namespace isc { namespace dhcp {
               ", supported values are: none, fix, strict, pedantic");
     }
 }
-#line 1837 "dhcp4_parser.cc"
+#line 1847 "dhcp4_parser.cc"
     break;
 
-  case 224: // $@36: %empty
-#line 968 "dhcp4_parser.yy"
+  case 226: // $@36: %empty
+#line 976 "dhcp4_parser.yy"
                                {
     ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -1845,22 +1855,22 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1849 "dhcp4_parser.cc"
+#line 1859 "dhcp4_parser.cc"
     break;
 
-  case 225: // hosts_database: "hosts-database" $@36 ":" "{" database_map_params "}"
-#line 974 "dhcp4_parser.yy"
+  case 227: // hosts_database: "hosts-database" $@36 ":" "{" database_map_params "}"
+#line 982 "dhcp4_parser.yy"
                                                           {
     // 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 1860 "dhcp4_parser.cc"
+#line 1870 "dhcp4_parser.cc"
     break;
 
-  case 226: // $@37: %empty
-#line 981 "dhcp4_parser.yy"
+  case 228: // $@37: %empty
+#line 989 "dhcp4_parser.yy"
                                  {
     ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -1868,390 +1878,390 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1872 "dhcp4_parser.cc"
+#line 1882 "dhcp4_parser.cc"
     break;
 
-  case 227: // hosts_databases: "hosts-databases" $@37 ":" "[" database_list "]"
-#line 987 "dhcp4_parser.yy"
+  case 229: // hosts_databases: "hosts-databases" $@37 ":" "[" database_list "]"
+#line 995 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1881 "dhcp4_parser.cc"
+#line 1891 "dhcp4_parser.cc"
     break;
 
-  case 232: // not_empty_database_list: not_empty_database_list ","
-#line 998 "dhcp4_parser.yy"
+  case 234: // not_empty_database_list: not_empty_database_list ","
+#line 1006 "dhcp4_parser.yy"
                                                        {
                            ctx.warnAboutExtraCommas(yystack_[0].location);
                            }
-#line 1889 "dhcp4_parser.cc"
+#line 1899 "dhcp4_parser.cc"
     break;
 
-  case 233: // $@38: %empty
-#line 1003 "dhcp4_parser.yy"
+  case 235: // $@38: %empty
+#line 1011 "dhcp4_parser.yy"
                          {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1899 "dhcp4_parser.cc"
+#line 1909 "dhcp4_parser.cc"
     break;
 
-  case 234: // database: "{" $@38 database_map_params "}"
-#line 1007 "dhcp4_parser.yy"
+  case 236: // database: "{" $@38 database_map_params "}"
+#line 1015 "dhcp4_parser.yy"
                                      {
     // The type parameter is required
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 1909 "dhcp4_parser.cc"
+#line 1919 "dhcp4_parser.cc"
     break;
 
-  case 237: // database_map_params: database_map_params ","
-#line 1015 "dhcp4_parser.yy"
+  case 239: // database_map_params: database_map_params ","
+#line 1023 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 1917 "dhcp4_parser.cc"
+#line 1927 "dhcp4_parser.cc"
     break;
 
-  case 260: // $@39: %empty
-#line 1044 "dhcp4_parser.yy"
+  case 262: // $@39: %empty
+#line 1052 "dhcp4_parser.yy"
                     {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1926 "dhcp4_parser.cc"
+#line 1936 "dhcp4_parser.cc"
     break;
 
-  case 261: // database_type: "type" $@39 ":" db_type
-#line 1047 "dhcp4_parser.yy"
+  case 263: // database_type: "type" $@39 ":" db_type
+#line 1055 "dhcp4_parser.yy"
                 {
     ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 1935 "dhcp4_parser.cc"
+#line 1945 "dhcp4_parser.cc"
     break;
 
-  case 262: // db_type: "memfile"
-#line 1052 "dhcp4_parser.yy"
+  case 264: // db_type: "memfile"
+#line 1060 "dhcp4_parser.yy"
                  { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
-#line 1941 "dhcp4_parser.cc"
+#line 1951 "dhcp4_parser.cc"
     break;
 
-  case 263: // db_type: "mysql"
-#line 1053 "dhcp4_parser.yy"
+  case 265: // db_type: "mysql"
+#line 1061 "dhcp4_parser.yy"
                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
-#line 1947 "dhcp4_parser.cc"
+#line 1957 "dhcp4_parser.cc"
     break;
 
-  case 264: // db_type: "postgresql"
-#line 1054 "dhcp4_parser.yy"
+  case 266: // db_type: "postgresql"
+#line 1062 "dhcp4_parser.yy"
                     { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
-#line 1953 "dhcp4_parser.cc"
+#line 1963 "dhcp4_parser.cc"
     break;
 
-  case 265: // $@40: %empty
-#line 1057 "dhcp4_parser.yy"
+  case 267: // $@40: %empty
+#line 1065 "dhcp4_parser.yy"
            {
     ctx.unique("user", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1962 "dhcp4_parser.cc"
+#line 1972 "dhcp4_parser.cc"
     break;
 
-  case 266: // user: "user" $@40 ":" "constant string"
-#line 1060 "dhcp4_parser.yy"
+  case 268: // user: "user" $@40 ":" "constant string"
+#line 1068 "dhcp4_parser.yy"
                {
     ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1972 "dhcp4_parser.cc"
+#line 1982 "dhcp4_parser.cc"
     break;
 
-  case 267: // $@41: %empty
-#line 1066 "dhcp4_parser.yy"
+  case 269: // $@41: %empty
+#line 1074 "dhcp4_parser.yy"
                    {
     ctx.unique("password", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1981 "dhcp4_parser.cc"
+#line 1991 "dhcp4_parser.cc"
     break;
 
-  case 268: // password: "password" $@41 ":" "constant string"
-#line 1069 "dhcp4_parser.yy"
+  case 270: // password: "password" $@41 ":" "constant string"
+#line 1077 "dhcp4_parser.yy"
                {
     ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1991 "dhcp4_parser.cc"
+#line 2001 "dhcp4_parser.cc"
     break;
 
-  case 269: // $@42: %empty
-#line 1075 "dhcp4_parser.yy"
+  case 271: // $@42: %empty
+#line 1083 "dhcp4_parser.yy"
            {
     ctx.unique("host", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2000 "dhcp4_parser.cc"
+#line 2010 "dhcp4_parser.cc"
     break;
 
-  case 270: // host: "host" $@42 ":" "constant string"
-#line 1078 "dhcp4_parser.yy"
+  case 272: // host: "host" $@42 ":" "constant string"
+#line 1086 "dhcp4_parser.yy"
                {
     ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 2010 "dhcp4_parser.cc"
+#line 2020 "dhcp4_parser.cc"
     break;
 
-  case 271: // port: "port" ":" "integer"
-#line 1084 "dhcp4_parser.yy"
+  case 273: // port: "port" ":" "integer"
+#line 1092 "dhcp4_parser.yy"
                          {
     ctx.unique("port", ctx.loc2pos(yystack_[2].location));
     ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("port", p);
 }
-#line 2020 "dhcp4_parser.cc"
+#line 2030 "dhcp4_parser.cc"
     break;
 
-  case 272: // $@43: %empty
-#line 1090 "dhcp4_parser.yy"
+  case 274: // $@43: %empty
+#line 1098 "dhcp4_parser.yy"
            {
     ctx.unique("name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2029 "dhcp4_parser.cc"
+#line 2039 "dhcp4_parser.cc"
     break;
 
-  case 273: // name: "name" $@43 ":" "constant string"
-#line 1093 "dhcp4_parser.yy"
+  case 275: // name: "name" $@43 ":" "constant string"
+#line 1101 "dhcp4_parser.yy"
                {
     ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 2039 "dhcp4_parser.cc"
+#line 2049 "dhcp4_parser.cc"
     break;
 
-  case 274: // persist: "persist" ":" "boolean"
-#line 1099 "dhcp4_parser.yy"
+  case 276: // persist: "persist" ":" "boolean"
+#line 1107 "dhcp4_parser.yy"
                                {
     ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 2049 "dhcp4_parser.cc"
+#line 2059 "dhcp4_parser.cc"
     break;
 
-  case 275: // lfc_interval: "lfc-interval" ":" "integer"
-#line 1105 "dhcp4_parser.yy"
+  case 277: // lfc_interval: "lfc-interval" ":" "integer"
+#line 1113 "dhcp4_parser.yy"
                                          {
     ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 2059 "dhcp4_parser.cc"
+#line 2069 "dhcp4_parser.cc"
     break;
 
-  case 276: // readonly: "readonly" ":" "boolean"
-#line 1111 "dhcp4_parser.yy"
+  case 278: // readonly: "readonly" ":" "boolean"
+#line 1119 "dhcp4_parser.yy"
                                  {
     ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 2069 "dhcp4_parser.cc"
+#line 2079 "dhcp4_parser.cc"
     break;
 
-  case 277: // connect_timeout: "connect-timeout" ":" "integer"
-#line 1117 "dhcp4_parser.yy"
+  case 279: // connect_timeout: "connect-timeout" ":" "integer"
+#line 1125 "dhcp4_parser.yy"
                                                {
     ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 2079 "dhcp4_parser.cc"
+#line 2089 "dhcp4_parser.cc"
     break;
 
-  case 278: // read_timeout: "read-timeout" ":" "integer"
-#line 1123 "dhcp4_parser.yy"
+  case 280: // read_timeout: "read-timeout" ":" "integer"
+#line 1131 "dhcp4_parser.yy"
                                          {
     ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("read-timeout", n);
 }
-#line 2089 "dhcp4_parser.cc"
+#line 2099 "dhcp4_parser.cc"
     break;
 
-  case 279: // write_timeout: "write-timeout" ":" "integer"
-#line 1129 "dhcp4_parser.yy"
+  case 281: // write_timeout: "write-timeout" ":" "integer"
+#line 1137 "dhcp4_parser.yy"
                                            {
     ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("write-timeout", n);
 }
-#line 2099 "dhcp4_parser.cc"
+#line 2109 "dhcp4_parser.cc"
     break;
 
-  case 280: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
-#line 1135 "dhcp4_parser.yy"
+  case 282: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
+#line 1143 "dhcp4_parser.yy"
                                                  {
     ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("tcp-user-timeout", n);
 }
-#line 2109 "dhcp4_parser.cc"
+#line 2119 "dhcp4_parser.cc"
     break;
 
-  case 281: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
-#line 1141 "dhcp4_parser.yy"
+  case 283: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
+#line 1149 "dhcp4_parser.yy"
                                                        {
     ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reconnect-tries", n);
 }
-#line 2119 "dhcp4_parser.cc"
+#line 2129 "dhcp4_parser.cc"
     break;
 
-  case 282: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
-#line 1147 "dhcp4_parser.yy"
+  case 284: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
+#line 1155 "dhcp4_parser.yy"
                                                        {
     ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reconnect-wait-time", n);
 }
-#line 2129 "dhcp4_parser.cc"
+#line 2139 "dhcp4_parser.cc"
     break;
 
-  case 283: // $@44: %empty
-#line 1153 "dhcp4_parser.yy"
+  case 285: // $@44: %empty
+#line 1161 "dhcp4_parser.yy"
                  {
     ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.DATABASE_ON_FAIL);
 }
-#line 2138 "dhcp4_parser.cc"
+#line 2148 "dhcp4_parser.cc"
     break;
 
-  case 284: // on_fail: "on-fail" $@44 ":" on_fail_mode
-#line 1156 "dhcp4_parser.yy"
+  case 286: // on_fail: "on-fail" $@44 ":" on_fail_mode
+#line 1164 "dhcp4_parser.yy"
                      {
     ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2147 "dhcp4_parser.cc"
+#line 2157 "dhcp4_parser.cc"
     break;
 
-  case 285: // on_fail_mode: "stop-retry-exit"
-#line 1161 "dhcp4_parser.yy"
+  case 287: // on_fail_mode: "stop-retry-exit"
+#line 1169 "dhcp4_parser.yy"
                               { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2153 "dhcp4_parser.cc"
+#line 2163 "dhcp4_parser.cc"
     break;
 
-  case 286: // on_fail_mode: "serve-retry-exit"
-#line 1162 "dhcp4_parser.yy"
+  case 288: // on_fail_mode: "serve-retry-exit"
+#line 1170 "dhcp4_parser.yy"
                                { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
-#line 2159 "dhcp4_parser.cc"
+#line 2169 "dhcp4_parser.cc"
     break;
 
-  case 287: // on_fail_mode: "serve-retry-continue"
-#line 1163 "dhcp4_parser.yy"
+  case 289: // on_fail_mode: "serve-retry-continue"
+#line 1171 "dhcp4_parser.yy"
                                    { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
-#line 2165 "dhcp4_parser.cc"
+#line 2175 "dhcp4_parser.cc"
     break;
 
-  case 288: // max_row_errors: "max-row-errors" ":" "integer"
-#line 1166 "dhcp4_parser.yy"
+  case 290: // max_row_errors: "max-row-errors" ":" "integer"
+#line 1174 "dhcp4_parser.yy"
                                              {
     ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location));
     ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-row-errors", n);
 }
-#line 2175 "dhcp4_parser.cc"
+#line 2185 "dhcp4_parser.cc"
     break;
 
-  case 289: // $@45: %empty
-#line 1172 "dhcp4_parser.yy"
+  case 291: // $@45: %empty
+#line 1180 "dhcp4_parser.yy"
                            {
     ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2184 "dhcp4_parser.cc"
+#line 2194 "dhcp4_parser.cc"
     break;
 
-  case 290: // trust_anchor: "trust-anchor" $@45 ":" "constant string"
-#line 1175 "dhcp4_parser.yy"
+  case 292: // trust_anchor: "trust-anchor" $@45 ":" "constant string"
+#line 1183 "dhcp4_parser.yy"
                {
     ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("trust-anchor", ca);
     ctx.leave();
 }
-#line 2194 "dhcp4_parser.cc"
+#line 2204 "dhcp4_parser.cc"
     break;
 
-  case 291: // $@46: %empty
-#line 1181 "dhcp4_parser.yy"
+  case 293: // $@46: %empty
+#line 1189 "dhcp4_parser.yy"
                      {
     ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2203 "dhcp4_parser.cc"
+#line 2213 "dhcp4_parser.cc"
     break;
 
-  case 292: // cert_file: "cert-file" $@46 ":" "constant string"
-#line 1184 "dhcp4_parser.yy"
+  case 294: // cert_file: "cert-file" $@46 ":" "constant string"
+#line 1192 "dhcp4_parser.yy"
                {
     ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cert-file", cert);
     ctx.leave();
 }
-#line 2213 "dhcp4_parser.cc"
+#line 2223 "dhcp4_parser.cc"
     break;
 
-  case 293: // $@47: %empty
-#line 1190 "dhcp4_parser.yy"
+  case 295: // $@47: %empty
+#line 1198 "dhcp4_parser.yy"
                    {
     ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2222 "dhcp4_parser.cc"
+#line 2232 "dhcp4_parser.cc"
     break;
 
-  case 294: // key_file: "key-file" $@47 ":" "constant string"
-#line 1193 "dhcp4_parser.yy"
+  case 296: // key_file: "key-file" $@47 ":" "constant string"
+#line 1201 "dhcp4_parser.yy"
                {
     ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("key-file", key);
     ctx.leave();
 }
-#line 2232 "dhcp4_parser.cc"
+#line 2242 "dhcp4_parser.cc"
     break;
 
-  case 295: // $@48: %empty
-#line 1199 "dhcp4_parser.yy"
+  case 297: // $@48: %empty
+#line 1207 "dhcp4_parser.yy"
                          {
     ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2241 "dhcp4_parser.cc"
+#line 2251 "dhcp4_parser.cc"
     break;
 
-  case 296: // cipher_list: "cipher-list" $@48 ":" "constant string"
-#line 1202 "dhcp4_parser.yy"
+  case 298: // cipher_list: "cipher-list" $@48 ":" "constant string"
+#line 1210 "dhcp4_parser.yy"
                {
     ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("cipher-list", cl);
     ctx.leave();
 }
-#line 2251 "dhcp4_parser.cc"
+#line 2261 "dhcp4_parser.cc"
     break;
 
-  case 297: // $@49: %empty
-#line 1208 "dhcp4_parser.yy"
+  case 299: // $@49: %empty
+#line 1216 "dhcp4_parser.yy"
                                                            {
     ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2259,73 +2269,73 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 2263 "dhcp4_parser.cc"
+#line 2273 "dhcp4_parser.cc"
     break;
 
-  case 298: // host_reservation_identifiers: "host-reservation-identifiers" $@49 ":" "[" host_reservation_identifiers_list "]"
-#line 1214 "dhcp4_parser.yy"
+  case 300: // host_reservation_identifiers: "host-reservation-identifiers" $@49 ":" "[" host_reservation_identifiers_list "]"
+#line 1222 "dhcp4_parser.yy"
                                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2272 "dhcp4_parser.cc"
+#line 2282 "dhcp4_parser.cc"
     break;
 
-  case 301: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
-#line 1221 "dhcp4_parser.yy"
+  case 303: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
+#line 1229 "dhcp4_parser.yy"
                                               {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2280 "dhcp4_parser.cc"
+#line 2290 "dhcp4_parser.cc"
     break;
 
-  case 307: // duid_id: "duid"
-#line 1233 "dhcp4_parser.yy"
+  case 309: // duid_id: "duid"
+#line 1241 "dhcp4_parser.yy"
               {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 2289 "dhcp4_parser.cc"
+#line 2299 "dhcp4_parser.cc"
     break;
 
-  case 308: // hw_address_id: "hw-address"
-#line 1238 "dhcp4_parser.yy"
+  case 310: // hw_address_id: "hw-address"
+#line 1246 "dhcp4_parser.yy"
                           {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 2298 "dhcp4_parser.cc"
+#line 2308 "dhcp4_parser.cc"
     break;
 
-  case 309: // circuit_id: "circuit-id"
-#line 1243 "dhcp4_parser.yy"
+  case 311: // circuit_id: "circuit-id"
+#line 1251 "dhcp4_parser.yy"
                        {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 2307 "dhcp4_parser.cc"
+#line 2317 "dhcp4_parser.cc"
     break;
 
-  case 310: // client_id: "client-id"
-#line 1248 "dhcp4_parser.yy"
+  case 312: // client_id: "client-id"
+#line 1256 "dhcp4_parser.yy"
                      {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 2316 "dhcp4_parser.cc"
+#line 2326 "dhcp4_parser.cc"
     break;
 
-  case 311: // flex_id: "flex-id"
-#line 1253 "dhcp4_parser.yy"
+  case 313: // flex_id: "flex-id"
+#line 1261 "dhcp4_parser.yy"
                  {
     ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(flex_id);
 }
-#line 2325 "dhcp4_parser.cc"
+#line 2335 "dhcp4_parser.cc"
     break;
 
-  case 312: // $@50: %empty
-#line 1260 "dhcp4_parser.yy"
+  case 314: // $@50: %empty
+#line 1268 "dhcp4_parser.yy"
                                            {
     ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
     ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2333,60 +2343,60 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(mt);
     ctx.enter(ctx.DHCP_MULTI_THREADING);
 }
-#line 2337 "dhcp4_parser.cc"
+#line 2347 "dhcp4_parser.cc"
     break;
 
-  case 313: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}"
-#line 1266 "dhcp4_parser.yy"
+  case 315: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}"
+#line 1274 "dhcp4_parser.yy"
                                                              {
     // The enable parameter is required.
     ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2348 "dhcp4_parser.cc"
+#line 2358 "dhcp4_parser.cc"
     break;
 
-  case 316: // multi_threading_params: multi_threading_params ","
-#line 1275 "dhcp4_parser.yy"
+  case 318: // multi_threading_params: multi_threading_params ","
+#line 1283 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2356 "dhcp4_parser.cc"
+#line 2366 "dhcp4_parser.cc"
     break;
 
-  case 323: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
-#line 1288 "dhcp4_parser.yy"
+  case 325: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
+#line 1296 "dhcp4_parser.yy"
                                                              {
     ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-multi-threading", b);
 }
-#line 2366 "dhcp4_parser.cc"
+#line 2376 "dhcp4_parser.cc"
     break;
 
-  case 324: // thread_pool_size: "thread-pool-size" ":" "integer"
-#line 1294 "dhcp4_parser.yy"
+  case 326: // thread_pool_size: "thread-pool-size" ":" "integer"
+#line 1302 "dhcp4_parser.yy"
                                                  {
     ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("thread-pool-size", prf);
 }
-#line 2376 "dhcp4_parser.cc"
+#line 2386 "dhcp4_parser.cc"
     break;
 
-  case 325: // packet_queue_size: "packet-queue-size" ":" "integer"
-#line 1300 "dhcp4_parser.yy"
+  case 327: // packet_queue_size: "packet-queue-size" ":" "integer"
+#line 1308 "dhcp4_parser.yy"
                                                    {
     ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("packet-queue-size", prf);
 }
-#line 2386 "dhcp4_parser.cc"
+#line 2396 "dhcp4_parser.cc"
     break;
 
-  case 326: // $@51: %empty
-#line 1306 "dhcp4_parser.yy"
+  case 328: // $@51: %empty
+#line 1314 "dhcp4_parser.yy"
                                  {
     ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2394,113 +2404,113 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 2398 "dhcp4_parser.cc"
+#line 2408 "dhcp4_parser.cc"
     break;
 
-  case 327: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]"
-#line 1312 "dhcp4_parser.yy"
+  case 329: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]"
+#line 1320 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2407 "dhcp4_parser.cc"
+#line 2417 "dhcp4_parser.cc"
     break;
 
-  case 332: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
-#line 1323 "dhcp4_parser.yy"
+  case 334: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
+#line 1331 "dhcp4_parser.yy"
                                            {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 2415 "dhcp4_parser.cc"
+#line 2425 "dhcp4_parser.cc"
     break;
 
-  case 333: // $@52: %empty
-#line 1328 "dhcp4_parser.yy"
+  case 335: // $@52: %empty
+#line 1336 "dhcp4_parser.yy"
                               {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2425 "dhcp4_parser.cc"
+#line 2435 "dhcp4_parser.cc"
     break;
 
-  case 334: // hooks_library: "{" $@52 hooks_params "}"
-#line 1332 "dhcp4_parser.yy"
+  case 336: // hooks_library: "{" $@52 hooks_params "}"
+#line 1340 "dhcp4_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2435 "dhcp4_parser.cc"
+#line 2445 "dhcp4_parser.cc"
     break;
 
-  case 335: // $@53: %empty
-#line 1338 "dhcp4_parser.yy"
+  case 337: // $@53: %empty
+#line 1346 "dhcp4_parser.yy"
                                   {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2445 "dhcp4_parser.cc"
+#line 2455 "dhcp4_parser.cc"
     break;
 
-  case 336: // sub_hooks_library: "{" $@53 hooks_params "}"
-#line 1342 "dhcp4_parser.yy"
+  case 338: // sub_hooks_library: "{" $@53 hooks_params "}"
+#line 1350 "dhcp4_parser.yy"
                               {
     // The library hooks parameter is required
     ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2455 "dhcp4_parser.cc"
+#line 2465 "dhcp4_parser.cc"
     break;
 
-  case 339: // hooks_params: hooks_params ","
-#line 1350 "dhcp4_parser.yy"
+  case 341: // hooks_params: hooks_params ","
+#line 1358 "dhcp4_parser.yy"
                                  {
                 ctx.warnAboutExtraCommas(yystack_[0].location);
                 }
-#line 2463 "dhcp4_parser.cc"
+#line 2473 "dhcp4_parser.cc"
     break;
 
-  case 343: // $@54: %empty
-#line 1360 "dhcp4_parser.yy"
+  case 345: // $@54: %empty
+#line 1368 "dhcp4_parser.yy"
                  {
     ctx.unique("library", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2472 "dhcp4_parser.cc"
+#line 2482 "dhcp4_parser.cc"
     break;
 
-  case 344: // library: "library" $@54 ":" "constant string"
-#line 1363 "dhcp4_parser.yy"
+  case 346: // library: "library" $@54 ":" "constant string"
+#line 1371 "dhcp4_parser.yy"
                {
     ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 2482 "dhcp4_parser.cc"
+#line 2492 "dhcp4_parser.cc"
     break;
 
-  case 345: // $@55: %empty
-#line 1369 "dhcp4_parser.yy"
+  case 347: // $@55: %empty
+#line 1377 "dhcp4_parser.yy"
                        {
     ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2491 "dhcp4_parser.cc"
+#line 2501 "dhcp4_parser.cc"
     break;
 
-  case 346: // parameters: "parameters" $@55 ":" map_value
-#line 1372 "dhcp4_parser.yy"
+  case 348: // parameters: "parameters" $@55 ":" map_value
+#line 1380 "dhcp4_parser.yy"
                   {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2500 "dhcp4_parser.cc"
+#line 2510 "dhcp4_parser.cc"
     break;
 
-  case 347: // $@56: %empty
-#line 1378 "dhcp4_parser.yy"
+  case 349: // $@56: %empty
+#line 1386 "dhcp4_parser.yy"
                                                      {
     ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -2508,89 +2518,89 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 2512 "dhcp4_parser.cc"
+#line 2522 "dhcp4_parser.cc"
     break;
 
-  case 348: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}"
-#line 1384 "dhcp4_parser.yy"
+  case 350: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}"
+#line 1392 "dhcp4_parser.yy"
                                                             {
     // No expired lease parameter is required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2522 "dhcp4_parser.cc"
+#line 2532 "dhcp4_parser.cc"
     break;
 
-  case 351: // expired_leases_params: expired_leases_params ","
-#line 1392 "dhcp4_parser.yy"
+  case 353: // expired_leases_params: expired_leases_params ","
+#line 1400 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2530 "dhcp4_parser.cc"
+#line 2540 "dhcp4_parser.cc"
     break;
 
-  case 358: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
-#line 1405 "dhcp4_parser.yy"
+  case 360: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
+#line 1413 "dhcp4_parser.yy"
                                                                {
     ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location));
     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 2540 "dhcp4_parser.cc"
+#line 2550 "dhcp4_parser.cc"
     break;
 
-  case 359: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
-#line 1411 "dhcp4_parser.yy"
+  case 361: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
+#line 1419 "dhcp4_parser.yy"
                                                                                {
     ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location));
     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 2550 "dhcp4_parser.cc"
+#line 2560 "dhcp4_parser.cc"
     break;
 
-  case 360: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
-#line 1417 "dhcp4_parser.yy"
+  case 362: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
+#line 1425 "dhcp4_parser.yy"
                                                        {
     ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 2560 "dhcp4_parser.cc"
+#line 2570 "dhcp4_parser.cc"
     break;
 
-  case 361: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
-#line 1423 "dhcp4_parser.yy"
+  case 363: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
+#line 1431 "dhcp4_parser.yy"
                                                      {
     ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 2570 "dhcp4_parser.cc"
+#line 2580 "dhcp4_parser.cc"
     break;
 
-  case 362: // max_reclaim_time: "max-reclaim-time" ":" "integer"
-#line 1429 "dhcp4_parser.yy"
+  case 364: // max_reclaim_time: "max-reclaim-time" ":" "integer"
+#line 1437 "dhcp4_parser.yy"
                                                  {
     ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 2580 "dhcp4_parser.cc"
+#line 2590 "dhcp4_parser.cc"
     break;
 
-  case 363: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
-#line 1435 "dhcp4_parser.yy"
+  case 365: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
+#line 1443 "dhcp4_parser.yy"
                                                                {
     ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 2590 "dhcp4_parser.cc"
+#line 2600 "dhcp4_parser.cc"
     break;
 
-  case 364: // $@57: %empty
-#line 1444 "dhcp4_parser.yy"
+  case 366: // $@57: %empty
+#line 1452 "dhcp4_parser.yy"
                       {
     ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2598,38 +2608,38 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 2602 "dhcp4_parser.cc"
+#line 2612 "dhcp4_parser.cc"
     break;
 
-  case 365: // subnet4_list: "subnet4" $@57 ":" "[" subnet4_list_content "]"
-#line 1450 "dhcp4_parser.yy"
+  case 367: // subnet4_list: "subnet4" $@57 ":" "[" subnet4_list_content "]"
+#line 1458 "dhcp4_parser.yy"
                                                              {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2611 "dhcp4_parser.cc"
+#line 2621 "dhcp4_parser.cc"
     break;
 
-  case 370: // not_empty_subnet4_list: not_empty_subnet4_list ","
-#line 1464 "dhcp4_parser.yy"
+  case 372: // not_empty_subnet4_list: not_empty_subnet4_list ","
+#line 1472 "dhcp4_parser.yy"
                                                      {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 2619 "dhcp4_parser.cc"
+#line 2629 "dhcp4_parser.cc"
     break;
 
-  case 371: // $@58: %empty
-#line 1473 "dhcp4_parser.yy"
+  case 373: // $@58: %empty
+#line 1481 "dhcp4_parser.yy"
                         {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2629 "dhcp4_parser.cc"
+#line 2639 "dhcp4_parser.cc"
     break;
 
-  case 372: // subnet4: "{" $@58 subnet4_params "}"
-#line 1477 "dhcp4_parser.yy"
+  case 374: // subnet4: "{" $@58 subnet4_params "}"
+#line 1485 "dhcp4_parser.yy"
                                 {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -2651,153 +2661,153 @@ namespace isc { namespace dhcp {
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 2655 "dhcp4_parser.cc"
+#line 2665 "dhcp4_parser.cc"
     break;
 
-  case 373: // $@59: %empty
-#line 1499 "dhcp4_parser.yy"
+  case 375: // $@59: %empty
+#line 1507 "dhcp4_parser.yy"
                             {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2665 "dhcp4_parser.cc"
+#line 2675 "dhcp4_parser.cc"
     break;
 
-  case 374: // sub_subnet4: "{" $@59 subnet4_params "}"
-#line 1503 "dhcp4_parser.yy"
+  case 376: // sub_subnet4: "{" $@59 subnet4_params "}"
+#line 1511 "dhcp4_parser.yy"
                                 {
     // The subnet subnet4 parameter is required
     ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 2675 "dhcp4_parser.cc"
+#line 2685 "dhcp4_parser.cc"
     break;
 
-  case 377: // subnet4_params: subnet4_params ","
-#line 1512 "dhcp4_parser.yy"
+  case 379: // subnet4_params: subnet4_params ","
+#line 1520 "dhcp4_parser.yy"
                                      {
                   ctx.warnAboutExtraCommas(yystack_[0].location);
                   }
-#line 2683 "dhcp4_parser.cc"
+#line 2693 "dhcp4_parser.cc"
     break;
 
-  case 424: // $@60: %empty
-#line 1566 "dhcp4_parser.yy"
+  case 427: // $@60: %empty
+#line 1575 "dhcp4_parser.yy"
                {
     ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2692 "dhcp4_parser.cc"
+#line 2702 "dhcp4_parser.cc"
     break;
 
-  case 425: // subnet: "subnet" $@60 ":" "constant string"
-#line 1569 "dhcp4_parser.yy"
+  case 428: // subnet: "subnet" $@60 ":" "constant string"
+#line 1578 "dhcp4_parser.yy"
                {
     ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 2702 "dhcp4_parser.cc"
+#line 2712 "dhcp4_parser.cc"
     break;
 
-  case 426: // $@61: %empty
-#line 1575 "dhcp4_parser.yy"
+  case 429: // $@61: %empty
+#line 1584 "dhcp4_parser.yy"
                                            {
     ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2711 "dhcp4_parser.cc"
+#line 2721 "dhcp4_parser.cc"
     break;
 
-  case 427: // subnet_4o6_interface: "4o6-interface" $@61 ":" "constant string"
-#line 1578 "dhcp4_parser.yy"
+  case 430: // subnet_4o6_interface: "4o6-interface" $@61 ":" "constant string"
+#line 1587 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
     ctx.leave();
 }
-#line 2721 "dhcp4_parser.cc"
+#line 2731 "dhcp4_parser.cc"
     break;
 
-  case 428: // $@62: %empty
-#line 1584 "dhcp4_parser.yy"
+  case 431: // $@62: %empty
+#line 1593 "dhcp4_parser.yy"
                                                  {
     ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2730 "dhcp4_parser.cc"
+#line 2740 "dhcp4_parser.cc"
     break;
 
-  case 429: // subnet_4o6_interface_id: "4o6-interface-id" $@62 ":" "constant string"
-#line 1587 "dhcp4_parser.yy"
+  case 432: // subnet_4o6_interface_id: "4o6-interface-id" $@62 ":" "constant string"
+#line 1596 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
     ctx.leave();
 }
-#line 2740 "dhcp4_parser.cc"
+#line 2750 "dhcp4_parser.cc"
     break;
 
-  case 430: // $@63: %empty
-#line 1593 "dhcp4_parser.yy"
+  case 433: // $@63: %empty
+#line 1602 "dhcp4_parser.yy"
                                      {
     ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2749 "dhcp4_parser.cc"
+#line 2759 "dhcp4_parser.cc"
     break;
 
-  case 431: // subnet_4o6_subnet: "4o6-subnet" $@63 ":" "constant string"
-#line 1596 "dhcp4_parser.yy"
+  case 434: // subnet_4o6_subnet: "4o6-subnet" $@63 ":" "constant string"
+#line 1605 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
     ctx.leave();
 }
-#line 2759 "dhcp4_parser.cc"
+#line 2769 "dhcp4_parser.cc"
     break;
 
-  case 432: // $@64: %empty
-#line 1602 "dhcp4_parser.yy"
+  case 435: // $@64: %empty
+#line 1611 "dhcp4_parser.yy"
                      {
     ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2768 "dhcp4_parser.cc"
+#line 2778 "dhcp4_parser.cc"
     break;
 
-  case 433: // interface: "interface" $@64 ":" "constant string"
-#line 1605 "dhcp4_parser.yy"
+  case 436: // interface: "interface" $@64 ":" "constant string"
+#line 1614 "dhcp4_parser.yy"
                {
     ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 2778 "dhcp4_parser.cc"
+#line 2788 "dhcp4_parser.cc"
     break;
 
-  case 434: // $@65: %empty
-#line 1611 "dhcp4_parser.yy"
+  case 437: // $@65: %empty
+#line 1620 "dhcp4_parser.yy"
                            {
     ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2787 "dhcp4_parser.cc"
+#line 2797 "dhcp4_parser.cc"
     break;
 
-  case 435: // client_class: "client-class" $@65 ":" "constant string"
-#line 1614 "dhcp4_parser.yy"
+  case 438: // client_class: "client-class" $@65 ":" "constant string"
+#line 1623 "dhcp4_parser.yy"
                {
     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 2797 "dhcp4_parser.cc"
+#line 2807 "dhcp4_parser.cc"
     break;
 
-  case 436: // $@66: %empty
-#line 1620 "dhcp4_parser.yy"
+  case 439: // $@66: %empty
+#line 1629 "dhcp4_parser.yy"
                                                {
     ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2805,102 +2815,102 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2809 "dhcp4_parser.cc"
+#line 2819 "dhcp4_parser.cc"
     break;
 
-  case 437: // require_client_classes: "require-client-classes" $@66 ":" list_strings
-#line 1626 "dhcp4_parser.yy"
+  case 440: // require_client_classes: "require-client-classes" $@66 ":" list_strings
+#line 1635 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2818 "dhcp4_parser.cc"
+#line 2828 "dhcp4_parser.cc"
     break;
 
-  case 438: // reservations_global: "reservations-global" ":" "boolean"
-#line 1631 "dhcp4_parser.yy"
+  case 441: // reservations_global: "reservations-global" ":" "boolean"
+#line 1640 "dhcp4_parser.yy"
                                                        {
     ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-global", b);
 }
-#line 2828 "dhcp4_parser.cc"
+#line 2838 "dhcp4_parser.cc"
     break;
 
-  case 439: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
-#line 1637 "dhcp4_parser.yy"
+  case 442: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
+#line 1646 "dhcp4_parser.yy"
                                                              {
     ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-in-subnet", b);
 }
-#line 2838 "dhcp4_parser.cc"
+#line 2848 "dhcp4_parser.cc"
     break;
 
-  case 440: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
-#line 1643 "dhcp4_parser.yy"
+  case 443: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
+#line 1652 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations-out-of-pool", b);
 }
-#line 2848 "dhcp4_parser.cc"
+#line 2858 "dhcp4_parser.cc"
     break;
 
-  case 441: // $@67: %empty
-#line 1649 "dhcp4_parser.yy"
+  case 444: // $@67: %empty
+#line 1658 "dhcp4_parser.yy"
                                    {
     ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.RESERVATION_MODE);
 }
-#line 2857 "dhcp4_parser.cc"
+#line 2867 "dhcp4_parser.cc"
     break;
 
-  case 442: // reservation_mode: "reservation-mode" $@67 ":" hr_mode
-#line 1652 "dhcp4_parser.yy"
+  case 445: // reservation_mode: "reservation-mode" $@67 ":" hr_mode
+#line 1661 "dhcp4_parser.yy"
                 {
     ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 2866 "dhcp4_parser.cc"
+#line 2876 "dhcp4_parser.cc"
     break;
 
-  case 443: // hr_mode: "disabled"
-#line 1657 "dhcp4_parser.yy"
+  case 446: // hr_mode: "disabled"
+#line 1666 "dhcp4_parser.yy"
                   { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
-#line 2872 "dhcp4_parser.cc"
+#line 2882 "dhcp4_parser.cc"
     break;
 
-  case 444: // hr_mode: "out-of-pool"
-#line 1658 "dhcp4_parser.yy"
+  case 447: // hr_mode: "out-of-pool"
+#line 1667 "dhcp4_parser.yy"
                      { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
-#line 2878 "dhcp4_parser.cc"
+#line 2888 "dhcp4_parser.cc"
     break;
 
-  case 445: // hr_mode: "global"
-#line 1659 "dhcp4_parser.yy"
+  case 448: // hr_mode: "global"
+#line 1668 "dhcp4_parser.yy"
                 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
-#line 2884 "dhcp4_parser.cc"
+#line 2894 "dhcp4_parser.cc"
     break;
 
-  case 446: // hr_mode: "all"
-#line 1660 "dhcp4_parser.yy"
+  case 449: // hr_mode: "all"
+#line 1669 "dhcp4_parser.yy"
              { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
-#line 2890 "dhcp4_parser.cc"
+#line 2900 "dhcp4_parser.cc"
     break;
 
-  case 447: // id: "id" ":" "integer"
-#line 1663 "dhcp4_parser.yy"
+  case 450: // id: "id" ":" "integer"
+#line 1672 "dhcp4_parser.yy"
                      {
     ctx.unique("id", ctx.loc2pos(yystack_[2].location));
     ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 2900 "dhcp4_parser.cc"
+#line 2910 "dhcp4_parser.cc"
     break;
 
-  case 448: // $@68: %empty
-#line 1671 "dhcp4_parser.yy"
+  case 451: // $@68: %empty
+#line 1680 "dhcp4_parser.yy"
                                  {
     ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2908,54 +2918,54 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SHARED_NETWORK);
 }
-#line 2912 "dhcp4_parser.cc"
+#line 2922 "dhcp4_parser.cc"
     break;
 
-  case 449: // shared_networks: "shared-networks" $@68 ":" "[" shared_networks_content "]"
-#line 1677 "dhcp4_parser.yy"
+  case 452: // shared_networks: "shared-networks" $@68 ":" "[" shared_networks_content "]"
+#line 1686 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2921 "dhcp4_parser.cc"
+#line 2931 "dhcp4_parser.cc"
     break;
 
-  case 454: // shared_networks_list: shared_networks_list ","
-#line 1690 "dhcp4_parser.yy"
+  case 457: // shared_networks_list: shared_networks_list ","
+#line 1699 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 2929 "dhcp4_parser.cc"
+#line 2939 "dhcp4_parser.cc"
     break;
 
-  case 455: // $@69: %empty
-#line 1695 "dhcp4_parser.yy"
+  case 458: // $@69: %empty
+#line 1704 "dhcp4_parser.yy"
                                {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2939 "dhcp4_parser.cc"
+#line 2949 "dhcp4_parser.cc"
     break;
 
-  case 456: // shared_network: "{" $@69 shared_network_params "}"
-#line 1699 "dhcp4_parser.yy"
+  case 459: // shared_network: "{" $@69 shared_network_params "}"
+#line 1708 "dhcp4_parser.yy"
                                        {
     ctx.stack_.pop_back();
 }
-#line 2947 "dhcp4_parser.cc"
+#line 2957 "dhcp4_parser.cc"
     break;
 
-  case 459: // shared_network_params: shared_network_params ","
-#line 1705 "dhcp4_parser.yy"
+  case 462: // shared_network_params: shared_network_params ","
+#line 1714 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 2955 "dhcp4_parser.cc"
+#line 2965 "dhcp4_parser.cc"
     break;
 
-  case 501: // $@70: %empty
-#line 1757 "dhcp4_parser.yy"
+  case 505: // $@70: %empty
+#line 1767 "dhcp4_parser.yy"
                             {
     ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -2963,55 +2973,55 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 2967 "dhcp4_parser.cc"
+#line 2977 "dhcp4_parser.cc"
     break;
 
-  case 502: // option_def_list: "option-def" $@70 ":" "[" option_def_list_content "]"
-#line 1763 "dhcp4_parser.yy"
+  case 506: // option_def_list: "option-def" $@70 ":" "[" option_def_list_content "]"
+#line 1773 "dhcp4_parser.yy"
                                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2976 "dhcp4_parser.cc"
+#line 2986 "dhcp4_parser.cc"
     break;
 
-  case 503: // $@71: %empty
-#line 1771 "dhcp4_parser.yy"
+  case 507: // $@71: %empty
+#line 1781 "dhcp4_parser.yy"
                                     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2985 "dhcp4_parser.cc"
+#line 2995 "dhcp4_parser.cc"
     break;
 
-  case 504: // sub_option_def_list: "{" $@71 option_def_list "}"
-#line 1774 "dhcp4_parser.yy"
+  case 508: // sub_option_def_list: "{" $@71 option_def_list "}"
+#line 1784 "dhcp4_parser.yy"
                                  {
     // parsing completed
 }
-#line 2993 "dhcp4_parser.cc"
+#line 3003 "dhcp4_parser.cc"
     break;
 
-  case 509: // not_empty_option_def_list: not_empty_option_def_list ","
-#line 1786 "dhcp4_parser.yy"
+  case 513: // not_empty_option_def_list: not_empty_option_def_list ","
+#line 1796 "dhcp4_parser.yy"
                                                            {
                              ctx.warnAboutExtraCommas(yystack_[0].location);
                              }
-#line 3001 "dhcp4_parser.cc"
+#line 3011 "dhcp4_parser.cc"
     break;
 
-  case 510: // $@72: %empty
-#line 1793 "dhcp4_parser.yy"
+  case 514: // $@72: %empty
+#line 1803 "dhcp4_parser.yy"
                                  {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3011 "dhcp4_parser.cc"
+#line 3021 "dhcp4_parser.cc"
     break;
 
-  case 511: // option_def_entry: "{" $@72 option_def_params "}"
-#line 1797 "dhcp4_parser.yy"
+  case 515: // option_def_entry: "{" $@72 option_def_params "}"
+#line 1807 "dhcp4_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3019,21 +3029,21 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3023 "dhcp4_parser.cc"
+#line 3033 "dhcp4_parser.cc"
     break;
 
-  case 512: // $@73: %empty
-#line 1808 "dhcp4_parser.yy"
+  case 516: // $@73: %empty
+#line 1818 "dhcp4_parser.yy"
                                {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3033 "dhcp4_parser.cc"
+#line 3043 "dhcp4_parser.cc"
     break;
 
-  case 513: // sub_option_def: "{" $@73 option_def_params "}"
-#line 1812 "dhcp4_parser.yy"
+  case 517: // sub_option_def: "{" $@73 option_def_params "}"
+#line 1822 "dhcp4_parser.yy"
                                    {
     // The name, code and type option def parameters are required.
     ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3041,115 +3051,115 @@ namespace isc { namespace dhcp {
     ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3045 "dhcp4_parser.cc"
+#line 3055 "dhcp4_parser.cc"
     break;
 
-  case 518: // not_empty_option_def_params: not_empty_option_def_params ","
-#line 1828 "dhcp4_parser.yy"
+  case 522: // not_empty_option_def_params: not_empty_option_def_params ","
+#line 1838 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3053 "dhcp4_parser.cc"
+#line 3063 "dhcp4_parser.cc"
     break;
 
-  case 530: // code: "code" ":" "integer"
-#line 1847 "dhcp4_parser.yy"
+  case 534: // code: "code" ":" "integer"
+#line 1857 "dhcp4_parser.yy"
                          {
     ctx.unique("code", ctx.loc2pos(yystack_[2].location));
     ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 3063 "dhcp4_parser.cc"
+#line 3073 "dhcp4_parser.cc"
     break;
 
-  case 532: // $@74: %empty
-#line 1855 "dhcp4_parser.yy"
+  case 536: // $@74: %empty
+#line 1865 "dhcp4_parser.yy"
                       {
     ctx.unique("type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3072 "dhcp4_parser.cc"
+#line 3082 "dhcp4_parser.cc"
     break;
 
-  case 533: // option_def_type: "type" $@74 ":" "constant string"
-#line 1858 "dhcp4_parser.yy"
+  case 537: // option_def_type: "type" $@74 ":" "constant string"
+#line 1868 "dhcp4_parser.yy"
                {
     ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 3082 "dhcp4_parser.cc"
+#line 3092 "dhcp4_parser.cc"
     break;
 
-  case 534: // $@75: %empty
-#line 1864 "dhcp4_parser.yy"
+  case 538: // $@75: %empty
+#line 1874 "dhcp4_parser.yy"
                                       {
     ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3091 "dhcp4_parser.cc"
+#line 3101 "dhcp4_parser.cc"
     break;
 
-  case 535: // option_def_record_types: "record-types" $@75 ":" "constant string"
-#line 1867 "dhcp4_parser.yy"
+  case 539: // option_def_record_types: "record-types" $@75 ":" "constant string"
+#line 1877 "dhcp4_parser.yy"
                {
     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 3101 "dhcp4_parser.cc"
+#line 3111 "dhcp4_parser.cc"
     break;
 
-  case 536: // $@76: %empty
-#line 1873 "dhcp4_parser.yy"
+  case 540: // $@76: %empty
+#line 1883 "dhcp4_parser.yy"
              {
     ctx.unique("space", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3110 "dhcp4_parser.cc"
+#line 3120 "dhcp4_parser.cc"
     break;
 
-  case 537: // space: "space" $@76 ":" "constant string"
-#line 1876 "dhcp4_parser.yy"
+  case 541: // space: "space" $@76 ":" "constant string"
+#line 1886 "dhcp4_parser.yy"
                {
     ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 3120 "dhcp4_parser.cc"
+#line 3130 "dhcp4_parser.cc"
     break;
 
-  case 539: // $@77: %empty
-#line 1884 "dhcp4_parser.yy"
+  case 543: // $@77: %empty
+#line 1894 "dhcp4_parser.yy"
                                     {
     ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3129 "dhcp4_parser.cc"
+#line 3139 "dhcp4_parser.cc"
     break;
 
-  case 540: // option_def_encapsulate: "encapsulate" $@77 ":" "constant string"
-#line 1887 "dhcp4_parser.yy"
+  case 544: // option_def_encapsulate: "encapsulate" $@77 ":" "constant string"
+#line 1897 "dhcp4_parser.yy"
                {
     ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 3139 "dhcp4_parser.cc"
+#line 3149 "dhcp4_parser.cc"
     break;
 
-  case 541: // option_def_array: "array" ":" "boolean"
-#line 1893 "dhcp4_parser.yy"
+  case 545: // option_def_array: "array" ":" "boolean"
+#line 1903 "dhcp4_parser.yy"
                                       {
     ctx.unique("array", ctx.loc2pos(yystack_[2].location));
     ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 3149 "dhcp4_parser.cc"
+#line 3159 "dhcp4_parser.cc"
     break;
 
-  case 542: // $@78: %empty
-#line 1903 "dhcp4_parser.yy"
+  case 546: // $@78: %empty
+#line 1913 "dhcp4_parser.yy"
                               {
     ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3157,123 +3167,123 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 3161 "dhcp4_parser.cc"
+#line 3171 "dhcp4_parser.cc"
     break;
 
-  case 543: // option_data_list: "option-data" $@78 ":" "[" option_data_list_content "]"
-#line 1909 "dhcp4_parser.yy"
+  case 547: // option_data_list: "option-data" $@78 ":" "[" option_data_list_content "]"
+#line 1919 "dhcp4_parser.yy"
                                                                  {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3170 "dhcp4_parser.cc"
+#line 3180 "dhcp4_parser.cc"
     break;
 
-  case 548: // not_empty_option_data_list: not_empty_option_data_list ","
-#line 1924 "dhcp4_parser.yy"
+  case 552: // not_empty_option_data_list: not_empty_option_data_list ","
+#line 1934 "dhcp4_parser.yy"
                                                              {
                               ctx.warnAboutExtraCommas(yystack_[0].location);
                               }
-#line 3178 "dhcp4_parser.cc"
+#line 3188 "dhcp4_parser.cc"
     break;
 
-  case 549: // $@79: %empty
-#line 1931 "dhcp4_parser.yy"
+  case 553: // $@79: %empty
+#line 1941 "dhcp4_parser.yy"
                                   {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3188 "dhcp4_parser.cc"
+#line 3198 "dhcp4_parser.cc"
     break;
 
-  case 550: // option_data_entry: "{" $@79 option_data_params "}"
-#line 1935 "dhcp4_parser.yy"
+  case 554: // option_data_entry: "{" $@79 option_data_params "}"
+#line 1945 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     ctx.stack_.pop_back();
 }
-#line 3197 "dhcp4_parser.cc"
+#line 3207 "dhcp4_parser.cc"
     break;
 
-  case 551: // $@80: %empty
-#line 1943 "dhcp4_parser.yy"
+  case 555: // $@80: %empty
+#line 1953 "dhcp4_parser.yy"
                                 {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3207 "dhcp4_parser.cc"
+#line 3217 "dhcp4_parser.cc"
     break;
 
-  case 552: // sub_option_data: "{" $@80 option_data_params "}"
-#line 1947 "dhcp4_parser.yy"
+  case 556: // sub_option_data: "{" $@80 option_data_params "}"
+#line 1957 "dhcp4_parser.yy"
                                     {
     /// @todo: the code or name parameters are required.
     // parsing completed
 }
-#line 3216 "dhcp4_parser.cc"
+#line 3226 "dhcp4_parser.cc"
     break;
 
-  case 557: // not_empty_option_data_params: not_empty_option_data_params ","
-#line 1963 "dhcp4_parser.yy"
+  case 561: // not_empty_option_data_params: not_empty_option_data_params ","
+#line 1973 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3224 "dhcp4_parser.cc"
+#line 3234 "dhcp4_parser.cc"
     break;
 
-  case 569: // $@81: %empty
-#line 1984 "dhcp4_parser.yy"
+  case 573: // $@81: %empty
+#line 1994 "dhcp4_parser.yy"
                        {
     ctx.unique("data", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3233 "dhcp4_parser.cc"
+#line 3243 "dhcp4_parser.cc"
     break;
 
-  case 570: // option_data_data: "data" $@81 ":" "constant string"
-#line 1987 "dhcp4_parser.yy"
+  case 574: // option_data_data: "data" $@81 ":" "constant string"
+#line 1997 "dhcp4_parser.yy"
                {
     ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 3243 "dhcp4_parser.cc"
+#line 3253 "dhcp4_parser.cc"
     break;
 
-  case 573: // option_data_csv_format: "csv-format" ":" "boolean"
-#line 1997 "dhcp4_parser.yy"
+  case 577: // option_data_csv_format: "csv-format" ":" "boolean"
+#line 2007 "dhcp4_parser.yy"
                                                  {
     ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
     ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", csv);
 }
-#line 3253 "dhcp4_parser.cc"
+#line 3263 "dhcp4_parser.cc"
     break;
 
-  case 574: // option_data_always_send: "always-send" ":" "boolean"
-#line 2003 "dhcp4_parser.yy"
+  case 578: // option_data_always_send: "always-send" ":" "boolean"
+#line 2013 "dhcp4_parser.yy"
                                                    {
     ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-send", persist);
 }
-#line 3263 "dhcp4_parser.cc"
+#line 3273 "dhcp4_parser.cc"
     break;
 
-  case 575: // option_data_never_send: "never-send" ":" "boolean"
-#line 2009 "dhcp4_parser.yy"
+  case 579: // option_data_never_send: "never-send" ":" "boolean"
+#line 2019 "dhcp4_parser.yy"
                                                  {
     ctx.unique("never-send", ctx.loc2pos(yystack_[2].location));
     ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("never-send", cancel);
 }
-#line 3273 "dhcp4_parser.cc"
+#line 3283 "dhcp4_parser.cc"
     break;
 
-  case 576: // $@82: %empty
-#line 2018 "dhcp4_parser.yy"
+  case 580: // $@82: %empty
+#line 2028 "dhcp4_parser.yy"
                   {
     ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3281,103 +3291,103 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 3285 "dhcp4_parser.cc"
+#line 3295 "dhcp4_parser.cc"
     break;
 
-  case 577: // pools_list: "pools" $@82 ":" "[" pools_list_content "]"
-#line 2024 "dhcp4_parser.yy"
+  case 581: // pools_list: "pools" $@82 ":" "[" pools_list_content "]"
+#line 2034 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3294 "dhcp4_parser.cc"
+#line 3304 "dhcp4_parser.cc"
     break;
 
-  case 582: // not_empty_pools_list: not_empty_pools_list ","
-#line 2037 "dhcp4_parser.yy"
+  case 586: // not_empty_pools_list: not_empty_pools_list ","
+#line 2047 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3302 "dhcp4_parser.cc"
+#line 3312 "dhcp4_parser.cc"
     break;
 
-  case 583: // $@83: %empty
-#line 2042 "dhcp4_parser.yy"
+  case 587: // $@83: %empty
+#line 2052 "dhcp4_parser.yy"
                                 {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3312 "dhcp4_parser.cc"
+#line 3322 "dhcp4_parser.cc"
     break;
 
-  case 584: // pool_list_entry: "{" $@83 pool_params "}"
-#line 2046 "dhcp4_parser.yy"
+  case 588: // pool_list_entry: "{" $@83 pool_params "}"
+#line 2056 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
 }
-#line 3322 "dhcp4_parser.cc"
+#line 3332 "dhcp4_parser.cc"
     break;
 
-  case 585: // $@84: %empty
-#line 2052 "dhcp4_parser.yy"
+  case 589: // $@84: %empty
+#line 2062 "dhcp4_parser.yy"
                           {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3332 "dhcp4_parser.cc"
+#line 3342 "dhcp4_parser.cc"
     break;
 
-  case 586: // sub_pool4: "{" $@84 pool_params "}"
-#line 2056 "dhcp4_parser.yy"
+  case 590: // sub_pool4: "{" $@84 pool_params "}"
+#line 2066 "dhcp4_parser.yy"
                              {
     // The pool parameter is required.
     ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
     // parsing completed
 }
-#line 3342 "dhcp4_parser.cc"
+#line 3352 "dhcp4_parser.cc"
     break;
 
-  case 589: // pool_params: pool_params ","
-#line 2064 "dhcp4_parser.yy"
+  case 593: // pool_params: pool_params ","
+#line 2074 "dhcp4_parser.yy"
                                {
                ctx.warnAboutExtraCommas(yystack_[0].location);
                }
-#line 3350 "dhcp4_parser.cc"
+#line 3360 "dhcp4_parser.cc"
     break;
 
-  case 597: // $@85: %empty
-#line 2078 "dhcp4_parser.yy"
+  case 601: // $@85: %empty
+#line 2088 "dhcp4_parser.yy"
                  {
     ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3359 "dhcp4_parser.cc"
+#line 3369 "dhcp4_parser.cc"
     break;
 
-  case 598: // pool_entry: "pool" $@85 ":" "constant string"
-#line 2081 "dhcp4_parser.yy"
+  case 602: // pool_entry: "pool" $@85 ":" "constant string"
+#line 2091 "dhcp4_parser.yy"
                {
     ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 3369 "dhcp4_parser.cc"
+#line 3379 "dhcp4_parser.cc"
     break;
 
-  case 599: // $@86: %empty
-#line 2087 "dhcp4_parser.yy"
+  case 603: // $@86: %empty
+#line 2097 "dhcp4_parser.yy"
                            {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3377 "dhcp4_parser.cc"
+#line 3387 "dhcp4_parser.cc"
     break;
 
-  case 600: // user_context: "user-context" $@86 ":" map_value
-#line 2089 "dhcp4_parser.yy"
+  case 604: // user_context: "user-context" $@86 ":" map_value
+#line 2099 "dhcp4_parser.yy"
                   {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
@@ -3400,19 +3410,19 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3404 "dhcp4_parser.cc"
+#line 3414 "dhcp4_parser.cc"
     break;
 
-  case 601: // $@87: %empty
-#line 2112 "dhcp4_parser.yy"
+  case 605: // $@87: %empty
+#line 2122 "dhcp4_parser.yy"
                  {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3412 "dhcp4_parser.cc"
+#line 3422 "dhcp4_parser.cc"
     break;
 
-  case 602: // comment: "comment" $@87 ":" "constant string"
-#line 2114 "dhcp4_parser.yy"
+  case 606: // comment: "comment" $@87 ":" "constant string"
+#line 2124 "dhcp4_parser.yy"
                {
     ElementPtr parent = ctx.stack_.back();
     ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
@@ -3437,11 +3447,11 @@ namespace isc { namespace dhcp {
     parent->set("user-context", user_context);
     ctx.leave();
 }
-#line 3441 "dhcp4_parser.cc"
+#line 3451 "dhcp4_parser.cc"
     break;
 
-  case 603: // $@88: %empty
-#line 2142 "dhcp4_parser.yy"
+  case 607: // $@88: %empty
+#line 2152 "dhcp4_parser.yy"
                            {
     ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3449,150 +3459,150 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 3453 "dhcp4_parser.cc"
+#line 3463 "dhcp4_parser.cc"
     break;
 
-  case 604: // reservations: "reservations" $@88 ":" "[" reservations_list "]"
-#line 2148 "dhcp4_parser.yy"
+  case 608: // reservations: "reservations" $@88 ":" "[" reservations_list "]"
+#line 2158 "dhcp4_parser.yy"
                                                           {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3462 "dhcp4_parser.cc"
+#line 3472 "dhcp4_parser.cc"
     break;
 
-  case 609: // not_empty_reservations_list: not_empty_reservations_list ","
-#line 2159 "dhcp4_parser.yy"
+  case 613: // not_empty_reservations_list: not_empty_reservations_list ","
+#line 2169 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 3470 "dhcp4_parser.cc"
+#line 3480 "dhcp4_parser.cc"
     break;
 
-  case 610: // $@89: %empty
-#line 2164 "dhcp4_parser.yy"
+  case 614: // $@89: %empty
+#line 2174 "dhcp4_parser.yy"
                             {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3480 "dhcp4_parser.cc"
+#line 3490 "dhcp4_parser.cc"
     break;
 
-  case 611: // reservation: "{" $@89 reservation_params "}"
-#line 2168 "dhcp4_parser.yy"
+  case 615: // reservation: "{" $@89 reservation_params "}"
+#line 2178 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     ctx.stack_.pop_back();
 }
-#line 3489 "dhcp4_parser.cc"
+#line 3499 "dhcp4_parser.cc"
     break;
 
-  case 612: // $@90: %empty
-#line 2173 "dhcp4_parser.yy"
+  case 616: // $@90: %empty
+#line 2183 "dhcp4_parser.yy"
                                 {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 3499 "dhcp4_parser.cc"
+#line 3509 "dhcp4_parser.cc"
     break;
 
-  case 613: // sub_reservation: "{" $@90 reservation_params "}"
-#line 2177 "dhcp4_parser.yy"
+  case 617: // sub_reservation: "{" $@90 reservation_params "}"
+#line 2187 "dhcp4_parser.yy"
                                     {
     /// @todo: an identifier parameter is required.
     // parsing completed
 }
-#line 3508 "dhcp4_parser.cc"
+#line 3518 "dhcp4_parser.cc"
     break;
 
-  case 618: // not_empty_reservation_params: not_empty_reservation_params ","
-#line 2188 "dhcp4_parser.yy"
+  case 622: // not_empty_reservation_params: not_empty_reservation_params ","
+#line 2198 "dhcp4_parser.yy"
                                          {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3516 "dhcp4_parser.cc"
+#line 3526 "dhcp4_parser.cc"
     break;
 
-  case 634: // $@91: %empty
-#line 2211 "dhcp4_parser.yy"
+  case 638: // $@91: %empty
+#line 2221 "dhcp4_parser.yy"
                          {
     ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3525 "dhcp4_parser.cc"
+#line 3535 "dhcp4_parser.cc"
     break;
 
-  case 635: // next_server: "next-server" $@91 ":" "constant string"
-#line 2214 "dhcp4_parser.yy"
+  case 639: // next_server: "next-server" $@91 ":" "constant string"
+#line 2224 "dhcp4_parser.yy"
                {
     ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
     ctx.leave();
 }
-#line 3535 "dhcp4_parser.cc"
+#line 3545 "dhcp4_parser.cc"
     break;
 
-  case 636: // $@92: %empty
-#line 2220 "dhcp4_parser.yy"
+  case 640: // $@92: %empty
+#line 2230 "dhcp4_parser.yy"
                                  {
     ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3544 "dhcp4_parser.cc"
+#line 3554 "dhcp4_parser.cc"
     break;
 
-  case 637: // server_hostname: "server-hostname" $@92 ":" "constant string"
-#line 2223 "dhcp4_parser.yy"
+  case 641: // server_hostname: "server-hostname" $@92 ":" "constant string"
+#line 2233 "dhcp4_parser.yy"
                {
     ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
     ctx.leave();
 }
-#line 3554 "dhcp4_parser.cc"
+#line 3564 "dhcp4_parser.cc"
     break;
 
-  case 638: // $@93: %empty
-#line 2229 "dhcp4_parser.yy"
+  case 642: // $@93: %empty
+#line 2239 "dhcp4_parser.yy"
                                {
     ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3563 "dhcp4_parser.cc"
+#line 3573 "dhcp4_parser.cc"
     break;
 
-  case 639: // boot_file_name: "boot-file-name" $@93 ":" "constant string"
-#line 2232 "dhcp4_parser.yy"
+  case 643: // boot_file_name: "boot-file-name" $@93 ":" "constant string"
+#line 2242 "dhcp4_parser.yy"
                {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
     ctx.leave();
 }
-#line 3573 "dhcp4_parser.cc"
+#line 3583 "dhcp4_parser.cc"
     break;
 
-  case 640: // $@94: %empty
-#line 2238 "dhcp4_parser.yy"
+  case 644: // $@94: %empty
+#line 2248 "dhcp4_parser.yy"
                        {
     ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3582 "dhcp4_parser.cc"
+#line 3592 "dhcp4_parser.cc"
     break;
 
-  case 641: // ip_address: "ip-address" $@94 ":" "constant string"
-#line 2241 "dhcp4_parser.yy"
+  case 645: // ip_address: "ip-address" $@94 ":" "constant string"
+#line 2251 "dhcp4_parser.yy"
                {
     ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
     ctx.leave();
 }
-#line 3592 "dhcp4_parser.cc"
+#line 3602 "dhcp4_parser.cc"
     break;
 
-  case 642: // $@95: %empty
-#line 2247 "dhcp4_parser.yy"
+  case 646: // $@95: %empty
+#line 2257 "dhcp4_parser.yy"
                            {
     ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3600,134 +3610,134 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3604 "dhcp4_parser.cc"
+#line 3614 "dhcp4_parser.cc"
     break;
 
-  case 643: // ip_addresses: "ip-addresses" $@95 ":" list_strings
-#line 2253 "dhcp4_parser.yy"
+  case 647: // ip_addresses: "ip-addresses" $@95 ":" list_strings
+#line 2263 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3613 "dhcp4_parser.cc"
+#line 3623 "dhcp4_parser.cc"
     break;
 
-  case 644: // $@96: %empty
-#line 2258 "dhcp4_parser.yy"
+  case 648: // $@96: %empty
+#line 2268 "dhcp4_parser.yy"
            {
     ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3622 "dhcp4_parser.cc"
+#line 3632 "dhcp4_parser.cc"
     break;
 
-  case 645: // duid: "duid" $@96 ":" "constant string"
-#line 2261 "dhcp4_parser.yy"
+  case 649: // duid: "duid" $@96 ":" "constant string"
+#line 2271 "dhcp4_parser.yy"
                {
     ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 3632 "dhcp4_parser.cc"
+#line 3642 "dhcp4_parser.cc"
     break;
 
-  case 646: // $@97: %empty
-#line 2267 "dhcp4_parser.yy"
+  case 650: // $@97: %empty
+#line 2277 "dhcp4_parser.yy"
                        {
     ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3641 "dhcp4_parser.cc"
+#line 3651 "dhcp4_parser.cc"
     break;
 
-  case 647: // hw_address: "hw-address" $@97 ":" "constant string"
-#line 2270 "dhcp4_parser.yy"
+  case 651: // hw_address: "hw-address" $@97 ":" "constant string"
+#line 2280 "dhcp4_parser.yy"
                {
     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 3651 "dhcp4_parser.cc"
+#line 3661 "dhcp4_parser.cc"
     break;
 
-  case 648: // $@98: %empty
-#line 2276 "dhcp4_parser.yy"
+  case 652: // $@98: %empty
+#line 2286 "dhcp4_parser.yy"
                            {
     ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3660 "dhcp4_parser.cc"
+#line 3670 "dhcp4_parser.cc"
     break;
 
-  case 649: // client_id_value: "client-id" $@98 ":" "constant string"
-#line 2279 "dhcp4_parser.yy"
+  case 653: // client_id_value: "client-id" $@98 ":" "constant string"
+#line 2289 "dhcp4_parser.yy"
                {
     ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 3670 "dhcp4_parser.cc"
+#line 3680 "dhcp4_parser.cc"
     break;
 
-  case 650: // $@99: %empty
-#line 2285 "dhcp4_parser.yy"
+  case 654: // $@99: %empty
+#line 2295 "dhcp4_parser.yy"
                              {
     ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3679 "dhcp4_parser.cc"
+#line 3689 "dhcp4_parser.cc"
     break;
 
-  case 651: // circuit_id_value: "circuit-id" $@99 ":" "constant string"
-#line 2288 "dhcp4_parser.yy"
+  case 655: // circuit_id_value: "circuit-id" $@99 ":" "constant string"
+#line 2298 "dhcp4_parser.yy"
                {
     ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 3689 "dhcp4_parser.cc"
+#line 3699 "dhcp4_parser.cc"
     break;
 
-  case 652: // $@100: %empty
-#line 2294 "dhcp4_parser.yy"
+  case 656: // $@100: %empty
+#line 2304 "dhcp4_parser.yy"
                        {
     ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3698 "dhcp4_parser.cc"
+#line 3708 "dhcp4_parser.cc"
     break;
 
-  case 653: // flex_id_value: "flex-id" $@100 ":" "constant string"
-#line 2297 "dhcp4_parser.yy"
+  case 657: // flex_id_value: "flex-id" $@100 ":" "constant string"
+#line 2307 "dhcp4_parser.yy"
                {
     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 3708 "dhcp4_parser.cc"
+#line 3718 "dhcp4_parser.cc"
     break;
 
-  case 654: // $@101: %empty
-#line 2303 "dhcp4_parser.yy"
+  case 658: // $@101: %empty
+#line 2313 "dhcp4_parser.yy"
                    {
     ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3717 "dhcp4_parser.cc"
+#line 3727 "dhcp4_parser.cc"
     break;
 
-  case 655: // hostname: "hostname" $@101 ":" "constant string"
-#line 2306 "dhcp4_parser.yy"
+  case 659: // hostname: "hostname" $@101 ":" "constant string"
+#line 2316 "dhcp4_parser.yy"
                {
     ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 3727 "dhcp4_parser.cc"
+#line 3737 "dhcp4_parser.cc"
     break;
 
-  case 656: // $@102: %empty
-#line 2312 "dhcp4_parser.yy"
+  case 660: // $@102: %empty
+#line 2322 "dhcp4_parser.yy"
                                            {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3735,20 +3745,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3739 "dhcp4_parser.cc"
+#line 3749 "dhcp4_parser.cc"
     break;
 
-  case 657: // reservation_client_classes: "client-classes" $@102 ":" list_strings
-#line 2318 "dhcp4_parser.yy"
+  case 661: // reservation_client_classes: "client-classes" $@102 ":" list_strings
+#line 2328 "dhcp4_parser.yy"
                      {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3748 "dhcp4_parser.cc"
+#line 3758 "dhcp4_parser.cc"
     break;
 
-  case 658: // $@103: %empty
-#line 2326 "dhcp4_parser.yy"
+  case 662: // $@103: %empty
+#line 2336 "dhcp4_parser.yy"
              {
     ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3756,20 +3766,20 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 3760 "dhcp4_parser.cc"
+#line 3770 "dhcp4_parser.cc"
     break;
 
-  case 659: // relay: "relay" $@103 ":" "{" relay_map "}"
-#line 2332 "dhcp4_parser.yy"
+  case 663: // relay: "relay" $@103 ":" "{" relay_map "}"
+#line 2342 "dhcp4_parser.yy"
                                                 {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3769 "dhcp4_parser.cc"
+#line 3779 "dhcp4_parser.cc"
     break;
 
-  case 662: // $@104: %empty
-#line 2344 "dhcp4_parser.yy"
+  case 666: // $@104: %empty
+#line 2354 "dhcp4_parser.yy"
                                {
     ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -3777,114 +3787,114 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 3781 "dhcp4_parser.cc"
+#line 3791 "dhcp4_parser.cc"
     break;
 
-  case 663: // client_classes: "client-classes" $@104 ":" "[" client_classes_list "]"
-#line 2350 "dhcp4_parser.yy"
+  case 667: // client_classes: "client-classes" $@104 ":" "[" client_classes_list "]"
+#line 2360 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3790 "dhcp4_parser.cc"
+#line 3800 "dhcp4_parser.cc"
     break;
 
-  case 666: // client_classes_list: client_classes_list ","
-#line 2357 "dhcp4_parser.yy"
+  case 670: // client_classes_list: client_classes_list ","
+#line 2367 "dhcp4_parser.yy"
                                                {
                        ctx.warnAboutExtraCommas(yystack_[0].location);
                        }
-#line 3798 "dhcp4_parser.cc"
+#line 3808 "dhcp4_parser.cc"
     break;
 
-  case 667: // $@105: %empty
-#line 2362 "dhcp4_parser.yy"
+  case 671: // $@105: %empty
+#line 2372 "dhcp4_parser.yy"
                                    {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 3808 "dhcp4_parser.cc"
+#line 3818 "dhcp4_parser.cc"
     break;
 
-  case 668: // client_class_entry: "{" $@105 client_class_params "}"
-#line 2366 "dhcp4_parser.yy"
+  case 672: // client_class_entry: "{" $@105 client_class_params "}"
+#line 2376 "dhcp4_parser.yy"
                                      {
     // 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 3818 "dhcp4_parser.cc"
+#line 3828 "dhcp4_parser.cc"
     break;
 
-  case 673: // not_empty_client_class_params: not_empty_client_class_params ","
-#line 2378 "dhcp4_parser.yy"
+  case 677: // not_empty_client_class_params: not_empty_client_class_params ","
+#line 2388 "dhcp4_parser.yy"
                                           {
         ctx.warnAboutExtraCommas(yystack_[0].location);
         }
-#line 3826 "dhcp4_parser.cc"
+#line 3836 "dhcp4_parser.cc"
     break;
 
-  case 690: // $@106: %empty
-#line 2402 "dhcp4_parser.yy"
+  case 694: // $@106: %empty
+#line 2412 "dhcp4_parser.yy"
                         {
     ctx.unique("test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3835 "dhcp4_parser.cc"
+#line 3845 "dhcp4_parser.cc"
     break;
 
-  case 691: // client_class_test: "test" $@106 ":" "constant string"
-#line 2405 "dhcp4_parser.yy"
+  case 695: // client_class_test: "test" $@106 ":" "constant string"
+#line 2415 "dhcp4_parser.yy"
                {
     ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 3845 "dhcp4_parser.cc"
+#line 3855 "dhcp4_parser.cc"
     break;
 
-  case 692: // $@107: %empty
-#line 2411 "dhcp4_parser.yy"
+  case 696: // $@107: %empty
+#line 2421 "dhcp4_parser.yy"
                                           {
     ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3854 "dhcp4_parser.cc"
+#line 3864 "dhcp4_parser.cc"
     break;
 
-  case 693: // client_class_template_test: "template-test" $@107 ":" "constant string"
-#line 2414 "dhcp4_parser.yy"
+  case 697: // client_class_template_test: "template-test" $@107 ":" "constant string"
+#line 2424 "dhcp4_parser.yy"
                {
     ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("template-test", template_test);
     ctx.leave();
 }
-#line 3864 "dhcp4_parser.cc"
+#line 3874 "dhcp4_parser.cc"
     break;
 
-  case 694: // only_if_required: "only-if-required" ":" "boolean"
-#line 2420 "dhcp4_parser.yy"
+  case 698: // only_if_required: "only-if-required" ":" "boolean"
+#line 2430 "dhcp4_parser.yy"
                                                  {
     ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("only-if-required", b);
 }
-#line 3874 "dhcp4_parser.cc"
+#line 3884 "dhcp4_parser.cc"
     break;
 
-  case 695: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
-#line 2428 "dhcp4_parser.yy"
+  case 699: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
+#line 2438 "dhcp4_parser.yy"
                                          {
     ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 3884 "dhcp4_parser.cc"
+#line 3894 "dhcp4_parser.cc"
     break;
 
-  case 696: // $@108: %empty
-#line 2436 "dhcp4_parser.yy"
+  case 700: // $@108: %empty
+#line 2446 "dhcp4_parser.yy"
                                {
     ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3892,66 +3902,66 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 3896 "dhcp4_parser.cc"
+#line 3906 "dhcp4_parser.cc"
     break;
 
-  case 697: // control_socket: "control-socket" $@108 ":" "{" control_socket_params "}"
-#line 2442 "dhcp4_parser.yy"
+  case 701: // control_socket: "control-socket" $@108 ":" "{" control_socket_params "}"
+#line 2452 "dhcp4_parser.yy"
                                                             {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3905 "dhcp4_parser.cc"
+#line 3915 "dhcp4_parser.cc"
     break;
 
-  case 700: // control_socket_params: control_socket_params ","
-#line 2449 "dhcp4_parser.yy"
+  case 704: // control_socket_params: control_socket_params ","
+#line 2459 "dhcp4_parser.yy"
                                                    {
                           ctx.warnAboutExtraCommas(yystack_[0].location);
                           }
-#line 3913 "dhcp4_parser.cc"
+#line 3923 "dhcp4_parser.cc"
     break;
 
-  case 706: // $@109: %empty
-#line 2461 "dhcp4_parser.yy"
+  case 710: // $@109: %empty
+#line 2471 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3922 "dhcp4_parser.cc"
+#line 3932 "dhcp4_parser.cc"
     break;
 
-  case 707: // control_socket_type: "socket-type" $@109 ":" "constant string"
-#line 2464 "dhcp4_parser.yy"
+  case 711: // control_socket_type: "socket-type" $@109 ":" "constant string"
+#line 2474 "dhcp4_parser.yy"
                {
     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 3932 "dhcp4_parser.cc"
+#line 3942 "dhcp4_parser.cc"
     break;
 
-  case 708: // $@110: %empty
-#line 2470 "dhcp4_parser.yy"
+  case 712: // $@110: %empty
+#line 2480 "dhcp4_parser.yy"
                                  {
     ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 3941 "dhcp4_parser.cc"
+#line 3951 "dhcp4_parser.cc"
     break;
 
-  case 709: // control_socket_name: "socket-name" $@110 ":" "constant string"
-#line 2473 "dhcp4_parser.yy"
+  case 713: // control_socket_name: "socket-name" $@110 ":" "constant string"
+#line 2483 "dhcp4_parser.yy"
                {
     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 3951 "dhcp4_parser.cc"
+#line 3961 "dhcp4_parser.cc"
     break;
 
-  case 710: // $@111: %empty
-#line 2482 "dhcp4_parser.yy"
+  case 714: // $@111: %empty
+#line 2492 "dhcp4_parser.yy"
                                        {
     ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3959,87 +3969,87 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(qc);
     ctx.enter(ctx.DHCP_QUEUE_CONTROL);
 }
-#line 3963 "dhcp4_parser.cc"
+#line 3973 "dhcp4_parser.cc"
     break;
 
-  case 711: // dhcp_queue_control: "dhcp-queue-control" $@111 ":" "{" queue_control_params "}"
-#line 2488 "dhcp4_parser.yy"
+  case 715: // dhcp_queue_control: "dhcp-queue-control" $@111 ":" "{" queue_control_params "}"
+#line 2498 "dhcp4_parser.yy"
                                                            {
     // The enable queue parameter is required.
     ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 3974 "dhcp4_parser.cc"
+#line 3984 "dhcp4_parser.cc"
     break;
 
-  case 714: // queue_control_params: queue_control_params ","
-#line 2497 "dhcp4_parser.yy"
+  case 718: // queue_control_params: queue_control_params ","
+#line 2507 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 3982 "dhcp4_parser.cc"
+#line 3992 "dhcp4_parser.cc"
     break;
 
-  case 721: // enable_queue: "enable-queue" ":" "boolean"
-#line 2510 "dhcp4_parser.yy"
+  case 725: // enable_queue: "enable-queue" ":" "boolean"
+#line 2520 "dhcp4_parser.yy"
                                          {
     ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-queue", b);
 }
-#line 3992 "dhcp4_parser.cc"
+#line 4002 "dhcp4_parser.cc"
     break;
 
-  case 722: // $@112: %empty
-#line 2516 "dhcp4_parser.yy"
+  case 726: // $@112: %empty
+#line 2526 "dhcp4_parser.yy"
                        {
     ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4001 "dhcp4_parser.cc"
+#line 4011 "dhcp4_parser.cc"
     break;
 
-  case 723: // queue_type: "queue-type" $@112 ":" "constant string"
-#line 2519 "dhcp4_parser.yy"
+  case 727: // queue_type: "queue-type" $@112 ":" "constant string"
+#line 2529 "dhcp4_parser.yy"
                {
     ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("queue-type", qt);
     ctx.leave();
 }
-#line 4011 "dhcp4_parser.cc"
+#line 4021 "dhcp4_parser.cc"
     break;
 
-  case 724: // capacity: "capacity" ":" "integer"
-#line 2525 "dhcp4_parser.yy"
+  case 728: // capacity: "capacity" ":" "integer"
+#line 2535 "dhcp4_parser.yy"
                                  {
     ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
     ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("capacity", c);
 }
-#line 4021 "dhcp4_parser.cc"
+#line 4031 "dhcp4_parser.cc"
     break;
 
-  case 725: // $@113: %empty
-#line 2531 "dhcp4_parser.yy"
+  case 729: // $@113: %empty
+#line 2541 "dhcp4_parser.yy"
                             {
     ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4030 "dhcp4_parser.cc"
+#line 4040 "dhcp4_parser.cc"
     break;
 
-  case 726: // arbitrary_map_entry: "constant string" $@113 ":" value
-#line 2534 "dhcp4_parser.yy"
+  case 730: // arbitrary_map_entry: "constant string" $@113 ":" value
+#line 2544 "dhcp4_parser.yy"
               {
     ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4039 "dhcp4_parser.cc"
+#line 4049 "dhcp4_parser.cc"
     break;
 
-  case 727: // $@114: %empty
-#line 2541 "dhcp4_parser.yy"
+  case 731: // $@114: %empty
+#line 2551 "dhcp4_parser.yy"
                      {
     ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4047,291 +4057,291 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP_DDNS);
 }
-#line 4051 "dhcp4_parser.cc"
+#line 4061 "dhcp4_parser.cc"
     break;
 
-  case 728: // dhcp_ddns: "dhcp-ddns" $@114 ":" "{" dhcp_ddns_params "}"
-#line 2547 "dhcp4_parser.yy"
+  case 732: // dhcp_ddns: "dhcp-ddns" $@114 ":" "{" dhcp_ddns_params "}"
+#line 2557 "dhcp4_parser.yy"
                                                        {
     // 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 4062 "dhcp4_parser.cc"
+#line 4072 "dhcp4_parser.cc"
     break;
 
-  case 729: // $@115: %empty
-#line 2554 "dhcp4_parser.yy"
+  case 733: // $@115: %empty
+#line 2564 "dhcp4_parser.yy"
                               {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4072 "dhcp4_parser.cc"
+#line 4082 "dhcp4_parser.cc"
     break;
 
-  case 730: // sub_dhcp_ddns: "{" $@115 dhcp_ddns_params "}"
-#line 2558 "dhcp4_parser.yy"
+  case 734: // sub_dhcp_ddns: "{" $@115 dhcp_ddns_params "}"
+#line 2568 "dhcp4_parser.yy"
                                   {
     // 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 4082 "dhcp4_parser.cc"
+#line 4092 "dhcp4_parser.cc"
     break;
 
-  case 733: // dhcp_ddns_params: dhcp_ddns_params ","
-#line 2566 "dhcp4_parser.yy"
+  case 737: // dhcp_ddns_params: dhcp_ddns_params ","
+#line 2576 "dhcp4_parser.yy"
                                          {
                     ctx.warnAboutExtraCommas(yystack_[0].location);
                     }
-#line 4090 "dhcp4_parser.cc"
+#line 4100 "dhcp4_parser.cc"
     break;
 
-  case 752: // enable_updates: "enable-updates" ":" "boolean"
-#line 2591 "dhcp4_parser.yy"
+  case 756: // enable_updates: "enable-updates" ":" "boolean"
+#line 2601 "dhcp4_parser.yy"
                                              {
     ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
 }
-#line 4100 "dhcp4_parser.cc"
+#line 4110 "dhcp4_parser.cc"
     break;
 
-  case 753: // $@116: %empty
-#line 2597 "dhcp4_parser.yy"
+  case 757: // $@116: %empty
+#line 2607 "dhcp4_parser.yy"
                      {
     ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4109 "dhcp4_parser.cc"
+#line 4119 "dhcp4_parser.cc"
     break;
 
-  case 754: // server_ip: "server-ip" $@116 ":" "constant string"
-#line 2600 "dhcp4_parser.yy"
+  case 758: // server_ip: "server-ip" $@116 ":" "constant string"
+#line 2610 "dhcp4_parser.yy"
                {
     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 4119 "dhcp4_parser.cc"
+#line 4129 "dhcp4_parser.cc"
     break;
 
-  case 755: // server_port: "server-port" ":" "integer"
-#line 2606 "dhcp4_parser.yy"
+  case 759: // server_port: "server-port" ":" "integer"
+#line 2616 "dhcp4_parser.yy"
                                        {
     ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
 }
-#line 4129 "dhcp4_parser.cc"
+#line 4139 "dhcp4_parser.cc"
     break;
 
-  case 756: // $@117: %empty
-#line 2612 "dhcp4_parser.yy"
+  case 760: // $@117: %empty
+#line 2622 "dhcp4_parser.yy"
                      {
     ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4138 "dhcp4_parser.cc"
+#line 4148 "dhcp4_parser.cc"
     break;
 
-  case 757: // sender_ip: "sender-ip" $@117 ":" "constant string"
-#line 2615 "dhcp4_parser.yy"
+  case 761: // sender_ip: "sender-ip" $@117 ":" "constant string"
+#line 2625 "dhcp4_parser.yy"
                {
     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 4148 "dhcp4_parser.cc"
+#line 4158 "dhcp4_parser.cc"
     break;
 
-  case 758: // sender_port: "sender-port" ":" "integer"
-#line 2621 "dhcp4_parser.yy"
+  case 762: // sender_port: "sender-port" ":" "integer"
+#line 2631 "dhcp4_parser.yy"
                                        {
     ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
 }
-#line 4158 "dhcp4_parser.cc"
+#line 4168 "dhcp4_parser.cc"
     break;
 
-  case 759: // max_queue_size: "max-queue-size" ":" "integer"
-#line 2627 "dhcp4_parser.yy"
+  case 763: // max_queue_size: "max-queue-size" ":" "integer"
+#line 2637 "dhcp4_parser.yy"
                                              {
     ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location));
     ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
 }
-#line 4168 "dhcp4_parser.cc"
+#line 4178 "dhcp4_parser.cc"
     break;
 
-  case 760: // $@118: %empty
-#line 2633 "dhcp4_parser.yy"
+  case 764: // $@118: %empty
+#line 2643 "dhcp4_parser.yy"
                            {
     ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_PROTOCOL);
 }
-#line 4177 "dhcp4_parser.cc"
+#line 4187 "dhcp4_parser.cc"
     break;
 
-  case 761: // ncr_protocol: "ncr-protocol" $@118 ":" ncr_protocol_value
-#line 2636 "dhcp4_parser.yy"
+  case 765: // ncr_protocol: "ncr-protocol" $@118 ":" ncr_protocol_value
+#line 2646 "dhcp4_parser.yy"
                            {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4186 "dhcp4_parser.cc"
+#line 4196 "dhcp4_parser.cc"
     break;
 
-  case 762: // ncr_protocol_value: "udp"
-#line 2642 "dhcp4_parser.yy"
+  case 766: // ncr_protocol_value: "udp"
+#line 2652 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
-#line 4192 "dhcp4_parser.cc"
+#line 4202 "dhcp4_parser.cc"
     break;
 
-  case 763: // ncr_protocol_value: "tcp"
-#line 2643 "dhcp4_parser.yy"
+  case 767: // ncr_protocol_value: "tcp"
+#line 2653 "dhcp4_parser.yy"
         { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
-#line 4198 "dhcp4_parser.cc"
+#line 4208 "dhcp4_parser.cc"
     break;
 
-  case 764: // $@119: %empty
-#line 2646 "dhcp4_parser.yy"
+  case 768: // $@119: %empty
+#line 2656 "dhcp4_parser.yy"
                        {
     ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NCR_FORMAT);
 }
-#line 4207 "dhcp4_parser.cc"
+#line 4217 "dhcp4_parser.cc"
     break;
 
-  case 765: // ncr_format: "ncr-format" $@119 ":" "JSON"
-#line 2649 "dhcp4_parser.yy"
+  case 769: // ncr_format: "ncr-format" $@119 ":" "JSON"
+#line 2659 "dhcp4_parser.yy"
              {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
     ctx.leave();
 }
-#line 4217 "dhcp4_parser.cc"
+#line 4227 "dhcp4_parser.cc"
     break;
 
-  case 766: // $@120: %empty
-#line 2656 "dhcp4_parser.yy"
+  case 770: // $@120: %empty
+#line 2666 "dhcp4_parser.yy"
                                          {
     ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4226 "dhcp4_parser.cc"
+#line 4236 "dhcp4_parser.cc"
     break;
 
-  case 767: // dep_qualifying_suffix: "qualifying-suffix" $@120 ":" "constant string"
-#line 2659 "dhcp4_parser.yy"
+  case 771: // dep_qualifying_suffix: "qualifying-suffix" $@120 ":" "constant string"
+#line 2669 "dhcp4_parser.yy"
                {
     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 4236 "dhcp4_parser.cc"
+#line 4246 "dhcp4_parser.cc"
     break;
 
-  case 768: // dep_override_no_update: "override-no-update" ":" "boolean"
-#line 2666 "dhcp4_parser.yy"
+  case 772: // dep_override_no_update: "override-no-update" ":" "boolean"
+#line 2676 "dhcp4_parser.yy"
                                                          {
     ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
 }
-#line 4246 "dhcp4_parser.cc"
+#line 4256 "dhcp4_parser.cc"
     break;
 
-  case 769: // dep_override_client_update: "override-client-update" ":" "boolean"
-#line 2673 "dhcp4_parser.yy"
+  case 773: // dep_override_client_update: "override-client-update" ":" "boolean"
+#line 2683 "dhcp4_parser.yy"
                                                                  {
     ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
 }
-#line 4256 "dhcp4_parser.cc"
+#line 4266 "dhcp4_parser.cc"
     break;
 
-  case 770: // $@121: %empty
-#line 2680 "dhcp4_parser.yy"
+  case 774: // $@121: %empty
+#line 2690 "dhcp4_parser.yy"
                                              {
     ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
-#line 4265 "dhcp4_parser.cc"
+#line 4275 "dhcp4_parser.cc"
     break;
 
-  case 771: // dep_replace_client_name: "replace-client-name" $@121 ":" ddns_replace_client_name_value
-#line 2683 "dhcp4_parser.yy"
+  case 775: // dep_replace_client_name: "replace-client-name" $@121 ":" ddns_replace_client_name_value
+#line 2693 "dhcp4_parser.yy"
                                        {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
     ctx.leave();
 }
-#line 4274 "dhcp4_parser.cc"
+#line 4284 "dhcp4_parser.cc"
     break;
 
-  case 772: // $@122: %empty
-#line 2689 "dhcp4_parser.yy"
+  case 776: // $@122: %empty
+#line 2699 "dhcp4_parser.yy"
                                        {
     ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4283 "dhcp4_parser.cc"
+#line 4293 "dhcp4_parser.cc"
     break;
 
-  case 773: // dep_generated_prefix: "generated-prefix" $@122 ":" "constant string"
-#line 2692 "dhcp4_parser.yy"
+  case 777: // dep_generated_prefix: "generated-prefix" $@122 ":" "constant string"
+#line 2702 "dhcp4_parser.yy"
                {
     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 4293 "dhcp4_parser.cc"
+#line 4303 "dhcp4_parser.cc"
     break;
 
-  case 774: // $@123: %empty
-#line 2699 "dhcp4_parser.yy"
+  case 778: // $@123: %empty
+#line 2709 "dhcp4_parser.yy"
                                          {
     ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4302 "dhcp4_parser.cc"
+#line 4312 "dhcp4_parser.cc"
     break;
 
-  case 775: // dep_hostname_char_set: "hostname-char-set" $@123 ":" "constant string"
-#line 2702 "dhcp4_parser.yy"
+  case 779: // dep_hostname_char_set: "hostname-char-set" $@123 ":" "constant string"
+#line 2712 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
     ctx.leave();
 }
-#line 4312 "dhcp4_parser.cc"
+#line 4322 "dhcp4_parser.cc"
     break;
 
-  case 776: // $@124: %empty
-#line 2709 "dhcp4_parser.yy"
+  case 780: // $@124: %empty
+#line 2719 "dhcp4_parser.yy"
                                                          {
     ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4321 "dhcp4_parser.cc"
+#line 4331 "dhcp4_parser.cc"
     break;
 
-  case 777: // dep_hostname_char_replacement: "hostname-char-replacement" $@124 ":" "constant string"
-#line 2712 "dhcp4_parser.yy"
+  case 781: // dep_hostname_char_replacement: "hostname-char-replacement" $@124 ":" "constant string"
+#line 2722 "dhcp4_parser.yy"
                {
     ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
     ctx.leave();
 }
-#line 4331 "dhcp4_parser.cc"
+#line 4341 "dhcp4_parser.cc"
     break;
 
-  case 778: // $@125: %empty
-#line 2721 "dhcp4_parser.yy"
+  case 782: // $@125: %empty
+#line 2731 "dhcp4_parser.yy"
                                {
     ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4339,48 +4349,48 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.CONFIG_CONTROL);
 }
-#line 4343 "dhcp4_parser.cc"
+#line 4353 "dhcp4_parser.cc"
     break;
 
-  case 779: // config_control: "config-control" $@125 ":" "{" config_control_params "}"
-#line 2727 "dhcp4_parser.yy"
+  case 783: // config_control: "config-control" $@125 ":" "{" config_control_params "}"
+#line 2737 "dhcp4_parser.yy"
                                                             {
     // No config control params are required
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4353 "dhcp4_parser.cc"
+#line 4363 "dhcp4_parser.cc"
     break;
 
-  case 780: // $@126: %empty
-#line 2733 "dhcp4_parser.yy"
+  case 784: // $@126: %empty
+#line 2743 "dhcp4_parser.yy"
                                    {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 4363 "dhcp4_parser.cc"
+#line 4373 "dhcp4_parser.cc"
     break;
 
-  case 781: // sub_config_control: "{" $@126 config_control_params "}"
-#line 2737 "dhcp4_parser.yy"
+  case 785: // sub_config_control: "{" $@126 config_control_params "}"
+#line 2747 "dhcp4_parser.yy"
                                        {
     // No config_control params are required
     // parsing completed
 }
-#line 4372 "dhcp4_parser.cc"
+#line 4382 "dhcp4_parser.cc"
     break;
 
-  case 784: // config_control_params: config_control_params ","
-#line 2745 "dhcp4_parser.yy"
+  case 788: // config_control_params: config_control_params ","
+#line 2755 "dhcp4_parser.yy"
                                                    {
                          ctx.warnAboutExtraCommas(yystack_[0].location);
                          }
-#line 4380 "dhcp4_parser.cc"
+#line 4390 "dhcp4_parser.cc"
     break;
 
-  case 787: // $@127: %empty
-#line 2755 "dhcp4_parser.yy"
+  case 791: // $@127: %empty
+#line 2765 "dhcp4_parser.yy"
                                    {
     ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4388,30 +4398,30 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CONFIG_DATABASE);
 }
-#line 4392 "dhcp4_parser.cc"
+#line 4402 "dhcp4_parser.cc"
     break;
 
-  case 788: // config_databases: "config-databases" $@127 ":" "[" database_list "]"
-#line 2761 "dhcp4_parser.yy"
+  case 792: // config_databases: "config-databases" $@127 ":" "[" database_list "]"
+#line 2771 "dhcp4_parser.yy"
                                                       {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4401 "dhcp4_parser.cc"
+#line 4411 "dhcp4_parser.cc"
     break;
 
-  case 789: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
-#line 2766 "dhcp4_parser.yy"
+  case 793: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
+#line 2776 "dhcp4_parser.yy"
                                                              {
     ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location));
     ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-fetch-wait-time", value);
 }
-#line 4411 "dhcp4_parser.cc"
+#line 4421 "dhcp4_parser.cc"
     break;
 
-  case 790: // $@128: %empty
-#line 2774 "dhcp4_parser.yy"
+  case 794: // $@128: %empty
+#line 2784 "dhcp4_parser.yy"
                  {
     ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4419,83 +4429,83 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 4423 "dhcp4_parser.cc"
+#line 4433 "dhcp4_parser.cc"
     break;
 
-  case 791: // loggers: "loggers" $@128 ":" "[" loggers_entries "]"
-#line 2780 "dhcp4_parser.yy"
+  case 795: // loggers: "loggers" $@128 ":" "[" loggers_entries "]"
+#line 2790 "dhcp4_parser.yy"
                                                          {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4432 "dhcp4_parser.cc"
+#line 4442 "dhcp4_parser.cc"
     break;
 
-  case 794: // loggers_entries: loggers_entries ","
-#line 2789 "dhcp4_parser.yy"
+  case 798: // loggers_entries: loggers_entries ","
+#line 2799 "dhcp4_parser.yy"
                                        {
                    ctx.warnAboutExtraCommas(yystack_[0].location);
                    }
-#line 4440 "dhcp4_parser.cc"
+#line 4450 "dhcp4_parser.cc"
     break;
 
-  case 795: // $@129: %empty
-#line 2795 "dhcp4_parser.yy"
+  case 799: // $@129: %empty
+#line 2805 "dhcp4_parser.yy"
                              {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 4450 "dhcp4_parser.cc"
+#line 4460 "dhcp4_parser.cc"
     break;
 
-  case 796: // logger_entry: "{" $@129 logger_params "}"
-#line 2799 "dhcp4_parser.yy"
+  case 800: // logger_entry: "{" $@129 logger_params "}"
+#line 2809 "dhcp4_parser.yy"
                                {
     ctx.stack_.pop_back();
 }
-#line 4458 "dhcp4_parser.cc"
+#line 4468 "dhcp4_parser.cc"
     break;
 
-  case 799: // logger_params: logger_params ","
-#line 2805 "dhcp4_parser.yy"
+  case 803: // logger_params: logger_params ","
+#line 2815 "dhcp4_parser.yy"
                                    {
                  ctx.warnAboutExtraCommas(yystack_[0].location);
                  }
-#line 4466 "dhcp4_parser.cc"
+#line 4476 "dhcp4_parser.cc"
     break;
 
-  case 807: // debuglevel: "debuglevel" ":" "integer"
-#line 2819 "dhcp4_parser.yy"
+  case 811: // debuglevel: "debuglevel" ":" "integer"
+#line 2829 "dhcp4_parser.yy"
                                      {
     ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
     ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 4476 "dhcp4_parser.cc"
+#line 4486 "dhcp4_parser.cc"
     break;
 
-  case 808: // $@130: %empty
-#line 2825 "dhcp4_parser.yy"
+  case 812: // $@130: %empty
+#line 2835 "dhcp4_parser.yy"
                    {
     ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4485 "dhcp4_parser.cc"
+#line 4495 "dhcp4_parser.cc"
     break;
 
-  case 809: // severity: "severity" $@130 ":" "constant string"
-#line 2828 "dhcp4_parser.yy"
+  case 813: // severity: "severity" $@130 ":" "constant string"
+#line 2838 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 4495 "dhcp4_parser.cc"
+#line 4505 "dhcp4_parser.cc"
     break;
 
-  case 810: // $@131: %empty
-#line 2834 "dhcp4_parser.yy"
+  case 814: // $@131: %empty
+#line 2844 "dhcp4_parser.yy"
                                     {
     ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
@@ -4503,122 +4513,122 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 4507 "dhcp4_parser.cc"
+#line 4517 "dhcp4_parser.cc"
     break;
 
-  case 811: // output_options_list: "output_options" $@131 ":" "[" output_options_list_content "]"
-#line 2840 "dhcp4_parser.yy"
+  case 815: // output_options_list: "output_options" $@131 ":" "[" output_options_list_content "]"
+#line 2850 "dhcp4_parser.yy"
                                                                     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4516 "dhcp4_parser.cc"
+#line 4526 "dhcp4_parser.cc"
     break;
 
-  case 814: // output_options_list_content: output_options_list_content ","
-#line 2847 "dhcp4_parser.yy"
+  case 818: // output_options_list_content: output_options_list_content ","
+#line 2857 "dhcp4_parser.yy"
                                                                {
                                ctx.warnAboutExtraCommas(yystack_[0].location);
                                }
-#line 4524 "dhcp4_parser.cc"
+#line 4534 "dhcp4_parser.cc"
     break;
 
-  case 815: // $@132: %empty
-#line 2852 "dhcp4_parser.yy"
+  case 819: // $@132: %empty
+#line 2862 "dhcp4_parser.yy"
                              {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 4534 "dhcp4_parser.cc"
+#line 4544 "dhcp4_parser.cc"
     break;
 
-  case 816: // output_entry: "{" $@132 output_params_list "}"
-#line 2856 "dhcp4_parser.yy"
+  case 820: // output_entry: "{" $@132 output_params_list "}"
+#line 2866 "dhcp4_parser.yy"
                                     {
     ctx.stack_.pop_back();
 }
-#line 4542 "dhcp4_parser.cc"
+#line 4552 "dhcp4_parser.cc"
     break;
 
-  case 819: // output_params_list: output_params_list ","
-#line 2862 "dhcp4_parser.yy"
+  case 823: // output_params_list: output_params_list ","
+#line 2872 "dhcp4_parser.yy"
                                              {
                       ctx.warnAboutExtraCommas(yystack_[0].location);
                       }
-#line 4550 "dhcp4_parser.cc"
+#line 4560 "dhcp4_parser.cc"
     break;
 
-  case 825: // $@133: %empty
-#line 2874 "dhcp4_parser.yy"
+  case 829: // $@133: %empty
+#line 2884 "dhcp4_parser.yy"
                {
     ctx.unique("output", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4559 "dhcp4_parser.cc"
+#line 4569 "dhcp4_parser.cc"
     break;
 
-  case 826: // output: "output" $@133 ":" "constant string"
-#line 2877 "dhcp4_parser.yy"
+  case 830: // output: "output" $@133 ":" "constant string"
+#line 2887 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 4569 "dhcp4_parser.cc"
+#line 4579 "dhcp4_parser.cc"
     break;
 
-  case 827: // flush: "flush" ":" "boolean"
-#line 2883 "dhcp4_parser.yy"
+  case 831: // flush: "flush" ":" "boolean"
+#line 2893 "dhcp4_parser.yy"
                            {
     ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
     ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
 }
-#line 4579 "dhcp4_parser.cc"
+#line 4589 "dhcp4_parser.cc"
     break;
 
-  case 828: // maxsize: "maxsize" ":" "integer"
-#line 2889 "dhcp4_parser.yy"
+  case 832: // maxsize: "maxsize" ":" "integer"
+#line 2899 "dhcp4_parser.yy"
                                {
     ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
 }
-#line 4589 "dhcp4_parser.cc"
+#line 4599 "dhcp4_parser.cc"
     break;
 
-  case 829: // maxver: "maxver" ":" "integer"
-#line 2895 "dhcp4_parser.yy"
+  case 833: // maxver: "maxver" ":" "integer"
+#line 2905 "dhcp4_parser.yy"
                              {
     ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
     ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
 }
-#line 4599 "dhcp4_parser.cc"
+#line 4609 "dhcp4_parser.cc"
     break;
 
-  case 830: // $@134: %empty
-#line 2901 "dhcp4_parser.yy"
+  case 834: // $@134: %empty
+#line 2911 "dhcp4_parser.yy"
                  {
     ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 4608 "dhcp4_parser.cc"
+#line 4618 "dhcp4_parser.cc"
     break;
 
-  case 831: // pattern: "pattern" $@134 ":" "constant string"
-#line 2904 "dhcp4_parser.yy"
+  case 835: // pattern: "pattern" $@134 ":" "constant string"
+#line 2914 "dhcp4_parser.yy"
                {
     ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pattern", sev);
     ctx.leave();
 }
-#line 4618 "dhcp4_parser.cc"
+#line 4628 "dhcp4_parser.cc"
     break;
 
-  case 832: // $@135: %empty
-#line 2910 "dhcp4_parser.yy"
+  case 836: // $@135: %empty
+#line 2920 "dhcp4_parser.yy"
                              {
     ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -4626,58 +4636,58 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(i);
     ctx.enter(ctx.COMPATIBILITY);
 }
-#line 4630 "dhcp4_parser.cc"
+#line 4640 "dhcp4_parser.cc"
     break;
 
-  case 833: // compatibility: "compatibility" $@135 ":" "{" compatibility_params "}"
-#line 2916 "dhcp4_parser.yy"
+  case 837: // compatibility: "compatibility" $@135 ":" "{" compatibility_params "}"
+#line 2926 "dhcp4_parser.yy"
                                                            {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 4639 "dhcp4_parser.cc"
+#line 4649 "dhcp4_parser.cc"
     break;
 
-  case 836: // compatibility_params: compatibility_params ","
-#line 2923 "dhcp4_parser.yy"
+  case 840: // compatibility_params: compatibility_params ","
+#line 2933 "dhcp4_parser.yy"
                                                  {
                         ctx.warnAboutExtraCommas(yystack_[0].location);
                         }
-#line 4647 "dhcp4_parser.cc"
+#line 4657 "dhcp4_parser.cc"
     break;
 
-  case 841: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
-#line 2934 "dhcp4_parser.yy"
+  case 845: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
+#line 2944 "dhcp4_parser.yy"
                                                              {
     ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lenient-option-parsing", b);
 }
-#line 4657 "dhcp4_parser.cc"
+#line 4667 "dhcp4_parser.cc"
     break;
 
-  case 842: // ignore-rai-link-selection: "ignore-rai-link-selection" ":" "boolean"
-#line 2940 "dhcp4_parser.yy"
+  case 846: // ignore-rai-link-selection: "ignore-rai-link-selection" ":" "boolean"
+#line 2950 "dhcp4_parser.yy"
                                                              {
     ctx.unique("ignore-rai-link-selection", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ignore-rai-link-selection", b);
 }
-#line 4667 "dhcp4_parser.cc"
+#line 4677 "dhcp4_parser.cc"
     break;
 
-  case 843: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
-#line 2946 "dhcp4_parser.yy"
+  case 847: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
+#line 2956 "dhcp4_parser.yy"
                                                            {
     ctx.unique("exclude-first-last-24", ctx.loc2pos(yystack_[2].location));
     ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("exclude-first-last-24", b);
 }
-#line 4677 "dhcp4_parser.cc"
+#line 4687 "dhcp4_parser.cc"
     break;
 
 
-#line 4681 "dhcp4_parser.cc"
+#line 4691 "dhcp4_parser.cc"
 
             default:
               break;
@@ -4915,16 +4925,16 @@ namespace isc { namespace dhcp {
     // Actual number of expected tokens
     int yycount = 0;
 
-    const int yyn = yypact_[+yyparser_.yystack_[0].state];
+    int yyn = yypact_[+yyparser_.yystack_[0].state];
     if (!yy_pact_value_is_default_ (yyn))
       {
         /* Start YYX at -YYN if negative to avoid negative indexes in
            YYCHECK.  In other words, skip the first -YYN actions for
            this state because they are default actions.  */
-        const int yyxbegin = yyn < 0 ? -yyn : 0;
+        int yyxbegin = yyn < 0 ? -yyn : 0;
         // Stay within bounds of both yycheck and yytname.
-        const int yychecklim = yylast_ - yyn + 1;
-        const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+        int yychecklim = yylast_ - yyn + 1;
+        int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
         for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
           if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
               && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
@@ -4945,9 +4955,6 @@ namespace isc { namespace dhcp {
 
 
 
-
-
-
   int
   Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx,
                                                  symbol_kind_type yyarg[], int yyargn) const
@@ -5029,143 +5036,144 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short Dhcp4Parser::yypact_ninf_ = -992;
+  const short Dhcp4Parser::yypact_ninf_ = -997;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short
   Dhcp4Parser::yypact_[] =
   {
-     219,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,    36,    42,    43,    64,   130,   133,
-     136,   143,   156,   162,   178,   204,   245,   255,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,    42,  -177,    35,   122,   149,   257,
-     191,   490,   -43,   172,   300,  -108,   648,   102,  -992,    56,
-      61,    54,    77,    72,  -992,    34,  -992,  -992,  -992,  -992,
-      92,   100,   265,  -992,  -992,  -992,  -992,  -992,  -992,   291,
-     313,   315,   330,   340,   346,   354,   358,   367,   374,   387,
-    -992,   399,   400,   406,   407,   409,  -992,  -992,  -992,   429,
-     430,   437,  -992,  -992,  -992,   438,  -992,  -992,  -992,  -992,
-    -992,   439,   440,   441,  -992,  -992,  -992,  -992,  -992,   442,
-    -992,  -992,  -992,  -992,  -992,  -992,   446,   448,   449,  -992,
-    -992,   451,  -992,    71,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,   454,   455,   456,   458,  -992,    74,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,   459,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,    78,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,    80,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   139,   290,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,   382,  -992,  -992,   462,  -992,  -992,  -992,   463,
-    -992,  -992,   428,   379,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,   466,   467,   469,
-    -992,  -992,  -992,  -992,   470,   471,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,    89,
-    -992,  -992,  -992,   473,  -992,  -992,   476,  -992,   478,   481,
-    -992,  -992,   482,   485,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,    91,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   488,
-      97,  -992,  -992,  -992,  -992,    42,    42,  -992,  -138,   492,
-    -992,  -992,   494,   496,   500,   295,   299,   301,   501,   503,
-     512,   516,   522,   523,   318,   319,   320,   321,   325,   327,
-     322,   329,   331,   333,   336,   539,   337,   341,   338,   342,
-     343,   556,   557,   559,   350,   357,   364,   564,   575,   581,
-     377,   582,   586,   588,   589,   591,   388,   389,   390,   592,
-     596,   597,   601,   602,   395,   604,   605,   606,   607,   609,
-     610,   401,   402,   403,   614,   621,  -992,   122,  -992,   623,
-     624,   625,   416,   417,   420,   421,   149,  -992,   630,   631,
-     632,   633,   634,   635,   431,   636,   637,   641,   257,  -992,
-     643,   191,  -992,   644,   645,   646,   647,   649,   650,   652,
-     653,  -992,   490,  -992,   654,   655,   434,   656,   657,   659,
-     450,  -992,   172,   661,   452,   453,   457,  -992,   300,   664,
-     665,    27,  -992,   464,   666,   673,   472,   679,   475,   477,
-     681,   684,   479,   480,   686,   687,   688,   691,   648,  -992,
-     692,   491,   102,  -992,  -992,  -992,   698,   697,   723,   724,
-     725,  -992,  -992,  -992,   525,   526,   527,   726,   732,   700,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,   529,  -992,  -992,  -992,  -992,  -992,  -124,   530,   531,
-    -992,  -992,  -992,   739,   740,   742,  -992,   532,   743,   745,
-     538,    67,  -992,  -992,  -992,   749,   753,   754,   758,   757,
-    -992,   759,   760,   761,   763,   560,   561,  -992,  -992,  -992,
-     768,   767,  -992,   770,   231,   311,  -992,  -992,  -992,  -992,
-    -992,   567,   568,   583,   790,   585,   593,  -992,   770,   594,
-     795,  -992,   595,  -992,   770,   613,   615,   616,   619,   622,
-     626,   627,  -992,   628,   629,  -992,   638,   639,   640,  -992,
-    -992,   651,  -992,  -992,  -992,  -992,   658,   745,  -992,  -992,
-     660,   662,  -992,   663,  -992,  -992,    38,   667,  -992,  -992,
-    -124,   668,   669,   670,  -992,   798,  -992,  -992,    42,   122,
-     102,   149,   218,  -992,  -992,  -992,   738,   738,   800,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   801,   818,
-     825,  -992,   827,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,    86,   828,   829,   834,   166,    10,    68,    21,   648,
-    -992,  -992,   836,  -127,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,   837,  -992,  -992,  -992,  -992,
-     140,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   800,
-    -992,   104,   138,   141,  -992,  -992,   167,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,   841,   842,   843,   844,   848,   850,
-     851,   852,   853,   854,  -992,   856,  -992,  -992,  -992,  -992,
-    -992,   216,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,   225,  -992,   855,   860,  -992,  -992,
-     858,   862,  -992,  -992,   861,   863,  -992,  -992,   864,   865,
-    -992,  -992,   866,   872,  -992,  -992,  -992,  -992,  -992,  -992,
-      57,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   105,  -992,
-    -992,   870,   874,  -992,  -992,   876,   875,  -992,   879,   880,
-     881,   882,   883,   884,   226,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,   885,   886,   887,  -992,   256,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   258,  -992,
-    -992,  -992,   888,  -992,   889,  -992,  -992,  -992,   289,  -992,
-    -992,  -992,  -992,  -992,   293,  -992,   119,  -992,   890,   891,
-     892,  -992,   312,  -992,  -992,  -992,  -992,   689,  -992,   893,
-     894,  -992,  -992,  -992,  -992,   895,   896,  -992,  -992,  -992,
-     897,   900,   218,  -992,   901,   902,   903,   904,   699,   695,
-     701,   696,   702,   703,   704,   705,   706,   707,   908,   708,
-     917,   918,   919,   920,   738,  -992,  -992,   738,  -992,   800,
-     257,  -992,   801,   172,  -992,   818,   300,  -992,   825,   642,
-    -992,   827,    86,  -992,   323,   828,  -992,   490,  -992,   829,
-    -108,  -992,   834,   713,   714,   715,   716,   717,   718,   166,
-    -992,   720,   719,   728,    10,  -992,   928,   931,    68,  -992,
-     727,   933,   744,   934,    21,  -992,  -992,   386,   836,  -992,
-     748,   764,   769,  -127,  -992,  -992,   953,   960,   191,  -992,
-     837,   968,  -992,  -992,   766,   771,  -992,   197,   783,   789,
-     804,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,   228,  -992,   808,   812,   815,   819,  -992,   356,  -992,
-     371,  -992,   966,  -992,   973,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-     378,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  1041,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  1069,  1077,  -992,  -992,
-    -992,  -992,  -992,  -992,  1073,  -992,   397,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   873,
-     877,  -992,  -992,   878,  -992,    42,  -992,  -992,  1082,  -992,
-    -992,  -992,  -992,  -992,   398,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,   898,   404,  -992,   770,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-     642,  -992,  1083,  1086,   899,  -992,   323,  -992,  -992,  -992,
-    -992,  -992,  -992,  1087,   905,  1088,   386,  -992,  -992,  -992,
-    -992,  -992,   907,   909,  -992,  -992,  1089,  -992,   910,  -992,
-    -992,  -992,  1090,  -992,  -992,   120,  -992,   161,  1090,  -992,
-    -992,  1091,  1092,  1094,  -992,   432,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  1095,   911,   912,   914,  1096,   161,  -992,
-     916,  -992,  -992,  -992,   922,  -992,  -992,  -992
+     584,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,    36,    42,    27,    43,    53,    61,
+      68,    81,   108,   142,   154,   156,   169,   228,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,    42,  -167,    86,   122,   149,   258,
+     299,   281,   -19,   172,   124,  -109,   462,   157,  -997,    56,
+     101,    54,   118,   213,  -997,    34,  -997,  -997,  -997,  -997,
+     225,   249,   266,  -997,  -997,  -997,   280,  -997,  -997,  -997,
+     291,   314,   318,   329,   331,   342,   346,   358,   362,   369,
+     377,  -997,   381,   385,   389,   395,   422,  -997,  -997,  -997,
+     431,   432,   433,  -997,  -997,  -997,   434,  -997,  -997,  -997,
+    -997,  -997,   437,   438,   440,  -997,  -997,  -997,  -997,  -997,
+     441,  -997,  -997,  -997,  -997,  -997,  -997,   442,   443,   444,
+    -997,  -997,   445,  -997,    71,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,   446,   447,   448,   449,  -997,    74,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,   450,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,    78,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,    89,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,   255,   309,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,   352,  -997,  -997,   452,  -997,
+    -997,  -997,   453,  -997,  -997,   413,   456,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+     458,   459,   460,  -997,  -997,  -997,  -997,   463,   464,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,    91,  -997,  -997,  -997,   468,  -997,  -997,   470,
+    -997,   471,   473,  -997,  -997,   474,   477,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,    97,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,   478,   104,  -997,  -997,  -997,  -997,    42,    42,
+    -997,   254,   479,  -997,  -997,   480,   482,   485,   275,   283,
+     284,   492,   496,   498,   296,   500,   504,   509,   302,   304,
+     306,   307,   311,   312,   316,   317,   320,   315,   322,   522,
+     323,   324,   326,   330,   332,   534,   535,   542,   333,   334,
+     337,   549,   552,   553,   347,   560,   561,   563,   571,   572,
+     363,   364,   367,   579,   582,   585,   586,   589,   348,   590,
+     593,   610,   611,   612,   618,   408,   423,   424,   633,   636,
+    -997,   122,  -997,   637,   638,   641,   435,   439,   451,   455,
+     149,  -997,   642,   644,   648,   649,   651,   652,   457,   653,
+     654,   655,   258,  -997,   657,   299,  -997,   658,   659,   661,
+     662,   665,   667,   668,   669,  -997,   281,  -997,   671,   678,
+     475,   679,   685,   686,   481,  -997,   172,   688,   483,   484,
+     486,  -997,   124,   689,   690,   106,  -997,   491,   691,   693,
+     487,   703,   495,   497,   705,   731,   521,   523,   733,   737,
+     741,   742,   462,  -997,   743,   536,   157,  -997,  -997,  -997,
+     744,   745,   746,   747,   750,  -997,  -997,  -997,   538,   547,
+     550,  -997,   754,   756,   759,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,   556,  -997,  -997,  -997,
+    -997,  -997,  -125,   559,   566,  -997,  -997,  -997,   767,   768,
+     774,  -997,   568,   776,   789,   587,   313,  -997,  -997,  -997,
+     792,   793,   795,   796,   798,  -997,   799,   800,   801,   802,
+     598,   599,  -997,  -997,  -997,   807,   806,  -997,   809,   269,
+     289,  -997,  -997,  -997,  -997,  -997,   603,   604,   605,   813,
+     609,   613,  -997,   809,   614,   815,  -997,   617,  -997,   809,
+     619,   620,   621,   622,   626,   627,   628,  -997,   629,   630,
+    -997,   631,   632,   634,  -997,  -997,   635,  -997,  -997,  -997,
+    -997,   639,   789,  -997,  -997,   640,   643,  -997,   645,  -997,
+    -997,    38,   647,  -997,  -997,  -125,   650,   656,   660,  -997,
+     819,  -997,  -997,    42,   122,   157,   149,   375,  -997,  -997,
+    -997,   557,   557,   823,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,   838,   841,   842,  -997,   843,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,   265,   846,   847,   849,
+     210,   168,   -26,   140,   462,  -997,  -997,   852,  -127,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+     853,  -997,  -997,  -997,  -997,   295,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,   823,  -997,   111,   115,   159,  -997,
+    -997,   174,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   857,
+     859,   860,   861,   862,   863,   865,   866,   867,   869,  -997,
+     870,  -997,  -997,  -997,  -997,  -997,   209,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   222,
+    -997,   871,   872,  -997,  -997,   873,   875,  -997,  -997,   874,
+     878,  -997,  -997,   876,   880,  -997,  -997,   879,   881,  -997,
+    -997,  -997,  -997,  -997,  -997,   105,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,   119,  -997,  -997,   882,   883,  -997,  -997,
+     884,   886,  -997,   887,   888,   889,   890,   891,   892,   257,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,   893,   894,   895,
+    -997,   259,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,   277,  -997,  -997,  -997,   896,  -997,   897,
+    -997,  -997,  -997,   293,  -997,  -997,  -997,  -997,  -997,   294,
+    -997,   134,  -997,   898,   899,   900,  -997,   308,  -997,  -997,
+    -997,  -997,   664,  -997,   901,   902,  -997,  -997,  -997,  -997,
+     903,   904,  -997,  -997,  -997,   905,   908,   375,  -997,   909,
+     910,   911,   912,   674,   702,   695,   704,   707,   708,   711,
+     712,   713,   714,   914,   715,   919,   925,   926,   927,   557,
+    -997,  -997,   557,  -997,   823,   258,  -997,   838,   172,  -997,
+     841,   124,  -997,   842,   646,  -997,   843,   265,  -997,   710,
+     846,  -997,   281,  -997,   847,  -109,  -997,   849,   719,   720,
+     721,   722,   723,   724,   210,  -997,   725,   726,   729,   168,
+    -997,   939,   941,   -26,  -997,   739,   942,   748,   960,   140,
+    -997,  -997,   -46,   852,  -997,   752,   753,   762,  -127,  -997,
+    -997,   973,   979,   299,  -997,   853,   982,  -997,  -997,   694,
+     771,  -997,   143,   775,   787,   808,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,   180,  -997,   812,   816,
+     877,   885,  -997,   356,  -997,   380,  -997,   980,  -997,   997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,   398,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  1027,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  1042,  1032,  -997,  -997,  -997,  -997,  -997,  -997,
+    1077,  -997,   402,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,   906,   907,  -997,  -997,   913,
+    -997,    42,  -997,  -997,  1082,  -997,  -997,  -997,  -997,  -997,
+     414,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,   915,   416,  -997,   809,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,   646,  -997,  1088,  1089,
+     916,  -997,   710,  -997,  -997,  -997,  -997,  -997,  -997,  1090,
+     917,  1091,   -46,  -997,  -997,  -997,  -997,  -997,   920,   921,
+    -997,  -997,  1093,  -997,   922,  -997,  -997,  -997,  1092,  -997,
+    -997,   144,  -997,   -13,  1092,  -997,  -997,  1096,  1097,  1098,
+    -997,   417,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  1099,
+     924,   923,   928,  1100,   -13,  -997,   930,  -997,  -997,  -997,
+     931,  -997,  -997,  -997
   };
 
   const short
@@ -5175,727 +5183,731 @@ namespace isc { namespace dhcp {
       20,    22,    24,    26,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     1,    44,
       36,    32,    31,    28,    29,    30,    35,     3,    33,    34,
-      59,     5,    65,     7,   195,     9,   373,    11,   585,    13,
-     612,    15,   503,    17,   512,    19,   551,    21,   335,    23,
-     729,    25,   780,    27,    46,    39,     0,     0,     0,     0,
-       0,   614,     0,   514,   553,     0,     0,     0,    48,     0,
-      47,     0,     0,    40,    61,     0,    63,   778,   180,   213,
-       0,     0,     0,   634,   636,   638,   211,   224,   226,     0,
+      59,     5,    65,     7,   197,     9,   375,    11,   589,    13,
+     616,    15,   507,    17,   516,    19,   555,    21,   337,    23,
+     733,    25,   784,    27,    46,    39,     0,     0,     0,     0,
+       0,   618,     0,   518,   557,     0,     0,     0,    48,     0,
+      47,     0,     0,    40,    61,     0,    63,   782,   182,   215,
+       0,     0,     0,   638,   640,   642,     0,   213,   226,   228,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   147,     0,     0,     0,     0,     0,   158,   165,   167,
+       0,     0,     0,   366,   505,   546,     0,   150,   451,   603,
+     605,   444,     0,     0,     0,   299,   666,   607,   328,   349,
+       0,   314,   700,   714,   731,   171,   173,     0,     0,     0,
+     794,   836,     0,   135,     0,    67,    70,    71,    72,    73,
+      74,   108,   109,   110,   111,   112,    75,   103,   132,   133,
+      92,    93,    94,   116,   117,   118,   119,   120,   121,   122,
+     123,   114,   115,   124,   125,   126,   128,   129,   130,   134,
+      78,    79,   100,    80,    81,    82,   127,    86,    87,    76,
+     105,   106,   107,   104,    77,    84,    85,    98,    99,   101,
+      95,    96,    97,    83,    88,    89,    90,    91,   102,   113,
+     131,   199,   201,   205,     0,     0,     0,     0,   196,     0,
+     184,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     429,   431,   433,   580,   427,   435,     0,   439,   437,   662,
+     426,   380,   381,   382,   383,   384,   408,   409,   410,   411,
+     412,   424,   398,   399,   413,   414,   415,   416,   417,   418,
+     419,   420,   421,   422,   423,   425,     0,   377,   387,   403,
+     404,   405,   388,   390,   391,   394,   395,   396,   393,   389,
+     385,   386,   406,   407,   392,   400,   401,   402,   397,   601,
+     600,   596,   597,   595,     0,   591,   594,   598,   599,   660,
+     648,   650,   654,   652,   658,   656,   644,   637,   631,   635,
+     636,     0,   619,   620,   632,   633,   634,   628,   623,   629,
+     625,   626,   627,   630,   624,     0,   536,   274,     0,   540,
+     538,   543,     0,   532,   533,     0,   519,   520,   523,   535,
+     524,   525,   526,   542,   527,   528,   529,   530,   531,   573,
+       0,     0,     0,   571,   572,   575,   576,     0,   558,   559,
+     562,   563,   564,   565,   566,   567,   568,   569,   570,   345,
+     347,   342,     0,   339,   343,   344,     0,   770,   757,     0,
+     760,     0,     0,   764,   768,     0,     0,   774,   776,   778,
+     780,   755,   753,   754,     0,   735,   738,   739,   740,   741,
+     742,   743,   744,   745,   750,   746,   747,   748,   749,   751,
+     752,   791,     0,     0,   786,   789,   790,    45,    50,     0,
+      37,    43,     0,    64,    60,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     146,     0,     0,     0,     0,     0,   157,   164,   166,     0,
-       0,     0,   364,   501,   542,     0,   149,   448,   599,   601,
-     441,     0,     0,     0,   297,   662,   603,   326,   347,     0,
-     312,   696,   710,   727,   170,   172,     0,     0,     0,   790,
-     832,     0,   134,     0,    67,    70,    71,    72,    73,    74,
-     108,   109,   110,   111,   112,    75,   103,   132,   133,    92,
-      93,    94,   116,   117,   118,   119,   120,   121,   122,   123,
-     114,   115,   124,   125,   126,   128,   129,   130,    78,    79,
-     100,    80,    81,    82,   127,    86,    87,    76,   105,   106,
-     107,   104,    77,    84,    85,    98,    99,   101,    95,    96,
-      97,    83,    88,    89,    90,    91,   102,   113,   131,   197,
-     199,   203,     0,     0,     0,     0,   194,     0,   182,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   426,   428,
-     430,   576,   424,   432,     0,   436,   434,   658,   423,   378,
-     379,   380,   381,   382,   406,   407,   408,   409,   410,   422,
-     396,   397,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,   421,     0,   375,   385,   401,   402,   403,   386,
-     388,   389,   392,   393,   394,   391,   387,   383,   384,   404,
-     405,   390,   398,   399,   400,   395,   597,   596,   592,   593,
-     591,     0,   587,   590,   594,   595,   656,   644,   646,   650,
-     648,   654,   652,   640,   633,   627,   631,   632,     0,   615,
-     616,   628,   629,   630,   624,   619,   625,   621,   622,   623,
-     626,   620,     0,   532,   272,     0,   536,   534,   539,     0,
-     528,   529,     0,   515,   516,   519,   531,   520,   521,   522,
-     538,   523,   524,   525,   526,   527,   569,     0,     0,     0,
-     567,   568,   571,   572,     0,   554,   555,   558,   559,   560,
-     561,   562,   563,   564,   565,   566,   343,   345,   340,     0,
-     337,   341,   342,     0,   766,   753,     0,   756,     0,     0,
-     760,   764,     0,     0,   770,   772,   774,   776,   751,   749,
-     750,     0,   731,   734,   735,   736,   737,   738,   739,   740,
-     741,   746,   742,   743,   744,   745,   747,   748,   787,     0,
-       0,   782,   785,   786,    45,    50,     0,    37,    43,     0,
-      64,    60,     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,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    58,    69,    66,     0,
-       0,     0,     0,     0,     0,     0,   184,   196,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   377,   374,
-       0,   589,   586,     0,     0,     0,     0,     0,     0,     0,
-       0,   613,   618,   504,     0,     0,     0,     0,     0,     0,
-       0,   513,   518,     0,     0,     0,     0,   552,   557,     0,
-       0,   339,   336,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   733,   730,
-       0,     0,   784,   781,    49,    41,     0,     0,     0,     0,
-       0,   151,   152,   153,     0,     0,     0,     0,     0,     0,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,     0,   175,   176,   154,   155,   156,     0,     0,     0,
-     168,   169,   174,     0,     0,     0,   148,     0,     0,     0,
-       0,     0,   438,   439,   440,     0,     0,     0,     0,     0,
-     695,     0,     0,     0,     0,     0,     0,   177,   178,   179,
-       0,     0,    68,     0,     0,     0,   207,   208,   209,   210,
-     183,     0,     0,     0,     0,     0,     0,   447,     0,     0,
-       0,   376,     0,   588,     0,     0,     0,     0,     0,     0,
-       0,     0,   617,     0,     0,   530,     0,     0,     0,   541,
-     517,     0,   573,   574,   575,   556,     0,     0,   338,   752,
-       0,     0,   755,     0,   758,   759,     0,     0,   768,   769,
-       0,     0,     0,     0,   732,     0,   789,   783,     0,     0,
-       0,     0,     0,   635,   637,   639,     0,     0,   228,   147,
-     159,   160,   161,   162,   163,   158,   165,   167,   366,   505,
-     544,   150,   450,    38,   600,   602,   443,   444,   445,   446,
-     442,     0,     0,   605,   328,     0,     0,     0,     0,     0,
-     171,   173,     0,     0,    51,   198,   201,   202,   200,   205,
-     206,   204,   427,   429,   431,   578,   425,   433,   437,   435,
-       0,   598,   657,   645,   647,   651,   649,   655,   653,   641,
-     533,   273,   537,   535,   540,   570,   344,   346,   767,   754,
-     757,   762,   763,   761,   765,   771,   773,   775,   777,   228,
-      42,     0,     0,     0,   220,   222,     0,   215,   218,   219,
-     260,   265,   267,   269,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   283,     0,   289,   291,   293,   295,
-     259,     0,   235,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,     0,   233,     0,   229,   230,   371,
-       0,   367,   368,   510,     0,   506,   507,   549,     0,   545,
-     546,   455,     0,   451,   452,   307,   308,   309,   310,   311,
-       0,   299,   302,   303,   304,   305,   306,   667,     0,   664,
-     610,     0,   606,   607,   333,     0,   329,   330,     0,     0,
-       0,     0,     0,     0,     0,   349,   352,   353,   354,   355,
-     356,   357,     0,     0,     0,   322,     0,   314,   317,   318,
-     319,   320,   321,   706,   708,   705,   703,   704,     0,   698,
-     701,   702,     0,   722,     0,   725,   718,   719,     0,   712,
-     715,   716,   717,   720,     0,   795,     0,   792,     0,     0,
-       0,   840,     0,   834,   837,   838,   839,    53,   583,     0,
-     579,   580,   642,   660,   661,     0,     0,    62,   779,   181,
-       0,     0,   217,   214,     0,     0,     0,     0,     0,     0,
+      58,    69,    66,     0,     0,     0,     0,     0,     0,     0,
+     186,   198,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   379,   376,     0,   593,   590,     0,     0,     0,
+       0,     0,     0,     0,     0,   617,   622,   508,     0,     0,
+       0,     0,     0,     0,     0,   517,   522,     0,     0,     0,
+       0,   556,   561,     0,     0,   341,   338,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   237,   212,   225,     0,   227,   232,
-       0,   365,   370,   514,   502,   509,   553,   543,   548,     0,
-     449,   454,   301,   298,   669,   666,   663,   614,   604,   609,
-       0,   327,   332,     0,     0,     0,     0,     0,     0,   351,
-     348,     0,     0,     0,   316,   313,     0,     0,   700,   697,
-       0,     0,     0,     0,   714,   711,   728,     0,   794,   791,
-       0,     0,     0,   836,   833,    55,     0,    54,     0,   577,
-     582,     0,   659,   788,     0,     0,   216,     0,     0,     0,
-       0,   271,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,     0,   288,     0,     0,     0,     0,   236,     0,   231,
-       0,   369,     0,   508,     0,   547,   500,   478,   479,   480,
-     463,   464,   483,   484,   485,   486,   487,   499,   466,   467,
-     488,   489,   490,   491,   492,   493,   494,   495,   496,   497,
-     498,   460,   461,   462,   476,   477,   473,   474,   475,   472,
-       0,   457,   465,   481,   482,   468,   469,   470,   471,   453,
-     300,   690,   692,     0,   685,   686,   687,   688,   689,   678,
-     679,   683,   684,   680,   681,   682,     0,   670,   671,   674,
-     675,   676,   677,   665,     0,   608,     0,   331,   358,   359,
-     360,   361,   362,   363,   350,   323,   324,   325,   315,     0,
-       0,   699,   721,     0,   724,     0,   713,   810,     0,   808,
-     806,   800,   804,   805,     0,   797,   802,   803,   801,   793,
-     841,   842,   843,   835,    52,    57,     0,   581,     0,   221,
-     223,   262,   263,   264,   261,   266,   268,   270,   285,   286,
-     287,   284,   290,   292,   294,   296,   234,   372,   511,   550,
-     459,   456,     0,     0,     0,   668,   673,   611,   334,   707,
-     709,   723,   726,     0,     0,     0,   799,   796,    56,   584,
-     643,   458,     0,     0,   694,   672,     0,   807,     0,   798,
-     691,   693,     0,   809,   815,     0,   812,     0,   814,   811,
-     825,     0,     0,     0,   830,     0,   817,   820,   821,   822,
-     823,   824,   813,     0,     0,     0,     0,     0,   819,   816,
-       0,   827,   828,   829,     0,   818,   826,   831
+       0,     0,   737,   734,     0,     0,   788,   785,    49,    41,
+       0,     0,     0,     0,     0,   152,   153,   154,     0,     0,
+       0,   181,     0,     0,     0,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,     0,   176,   177,   155,
+     156,   157,     0,     0,     0,   169,   170,   175,     0,     0,
+       0,   149,     0,     0,     0,     0,     0,   441,   442,   443,
+       0,     0,     0,     0,     0,   699,     0,     0,     0,     0,
+       0,     0,   178,   179,   180,     0,     0,    68,     0,     0,
+       0,   209,   210,   211,   212,   185,     0,     0,     0,     0,
+       0,     0,   450,     0,     0,     0,   378,     0,   592,     0,
+       0,     0,     0,     0,     0,     0,     0,   621,     0,     0,
+     534,     0,     0,     0,   545,   521,     0,   577,   578,   579,
+     560,     0,     0,   340,   756,     0,     0,   759,     0,   762,
+     763,     0,     0,   772,   773,     0,     0,     0,     0,   736,
+       0,   793,   787,     0,     0,     0,     0,     0,   639,   641,
+     643,     0,     0,   230,   148,   160,   161,   162,   163,   164,
+     159,   166,   168,   368,   509,   548,   151,   453,    38,   604,
+     606,   446,   447,   448,   449,   445,     0,     0,   609,   330,
+       0,     0,     0,     0,     0,   172,   174,     0,     0,    51,
+     200,   203,   204,   202,   207,   208,   206,   430,   432,   434,
+     582,   428,   436,   440,   438,     0,   602,   661,   649,   651,
+     655,   653,   659,   657,   645,   537,   275,   541,   539,   544,
+     574,   346,   348,   771,   758,   761,   766,   767,   765,   769,
+     775,   777,   779,   781,   230,    42,     0,     0,     0,   222,
+     224,     0,   217,   220,   221,   262,   267,   269,   271,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   285,
+       0,   291,   293,   295,   297,   261,     0,   237,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,     0,
+     235,     0,   231,   232,   373,     0,   369,   370,   514,     0,
+     510,   511,   553,     0,   549,   550,   458,     0,   454,   455,
+     309,   310,   311,   312,   313,     0,   301,   304,   305,   306,
+     307,   308,   671,     0,   668,   614,     0,   610,   611,   335,
+       0,   331,   332,     0,     0,     0,     0,     0,     0,     0,
+     351,   354,   355,   356,   357,   358,   359,     0,     0,     0,
+     324,     0,   316,   319,   320,   321,   322,   323,   710,   712,
+     709,   707,   708,     0,   702,   705,   706,     0,   726,     0,
+     729,   722,   723,     0,   716,   719,   720,   721,   724,     0,
+     799,     0,   796,     0,     0,     0,   844,     0,   838,   841,
+     842,   843,    53,   587,     0,   583,   584,   646,   664,   665,
+       0,     0,    62,   783,   183,     0,     0,   219,   216,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   239,
+     214,   227,     0,   229,   234,     0,   367,   372,   518,   506,
+     513,   557,   547,   552,     0,   452,   457,   303,   300,   673,
+     670,   667,   618,   608,   613,     0,   329,   334,     0,     0,
+       0,     0,     0,     0,   353,   350,     0,     0,     0,   318,
+     315,     0,     0,   704,   701,     0,     0,     0,     0,   718,
+     715,   732,     0,   798,   795,     0,     0,     0,   840,   837,
+      55,     0,    54,     0,   581,   586,     0,   663,   792,     0,
+       0,   218,     0,     0,     0,     0,   273,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,     0,   290,     0,     0,
+       0,     0,   238,     0,   233,     0,   371,     0,   512,     0,
+     551,   504,   481,   482,   483,   466,   467,   486,   487,   488,
+     489,   490,   502,   469,   470,   491,   492,   493,   494,   495,
+     496,   497,   498,   499,   500,   501,   503,   463,   464,   465,
+     479,   480,   476,   477,   478,   475,     0,   460,   468,   484,
+     485,   471,   472,   473,   474,   456,   302,   694,   696,     0,
+     689,   690,   691,   692,   693,   682,   683,   687,   688,   684,
+     685,   686,     0,   674,   675,   678,   679,   680,   681,   669,
+       0,   612,     0,   333,   360,   361,   362,   363,   364,   365,
+     352,   325,   326,   327,   317,     0,     0,   703,   725,     0,
+     728,     0,   717,   814,     0,   812,   810,   804,   808,   809,
+       0,   801,   806,   807,   805,   797,   845,   846,   847,   839,
+      52,    57,     0,   585,     0,   223,   225,   264,   265,   266,
+     263,   268,   270,   272,   287,   288,   289,   286,   292,   294,
+     296,   298,   236,   374,   515,   554,   462,   459,     0,     0,
+       0,   672,   677,   615,   336,   711,   713,   727,   730,     0,
+       0,     0,   803,   800,    56,   588,   647,   461,     0,     0,
+     698,   676,     0,   811,     0,   802,   695,   697,     0,   813,
+     819,     0,   816,     0,   818,   815,   829,     0,     0,     0,
+     834,     0,   821,   824,   825,   826,   827,   828,   817,     0,
+       0,     0,     0,     0,   823,   820,     0,   831,   832,   833,
+       0,   822,   830,   835
   };
 
   const short
   Dhcp4Parser::yypgoto_[] =
   {
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,   -53,  -992,  -586,  -992,   -35,
-    -992,  -992,  -992,  -992,  -992,  -992,  -641,  -992,  -992,  -992,
-     -67,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   189,   608,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,   -53,  -997,  -591,  -997,   404,
+    -997,  -997,  -997,  -997,  -997,  -997,  -646,  -997,  -997,  -997,
+     -67,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   391,   606,
       -8,    11,    29,   -54,   -34,   -12,   -10,     3,    33,    37,
-    -992,  -992,  -992,  -992,    40,  -992,  -992,    41,    44,    47,
-      48,    51,    52,  -992,   393,    55,  -992,    58,  -992,    59,
-      62,    63,  -992,    65,  -992,    66,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,   391,   598,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,   129,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,   304,  -992,   107,  -992,  -703,   113,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   -45,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,    96,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,    81,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,    88,  -992,  -992,  -992,    94,   565,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,    82,  -992,  -992,  -992,  -992,
-    -992,  -992,  -991,  -992,  -992,  -992,   110,  -992,  -992,  -992,
-     123,   611,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -983,  -992,   -65,  -992,    25,  -992,    69,    70,    73,    76,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,   108,  -992,  -992,
-    -102,   -62,  -992,  -992,  -992,  -992,  -992,   117,  -992,  -992,
-    -992,   127,  -992,   599,  -992,   -61,  -992,  -992,  -992,  -992,
-    -992,   -58,  -992,  -992,  -992,  -992,  -992,    -4,  -992,  -992,
-    -992,   126,  -992,  -992,  -992,   125,  -992,   587,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-      79,  -992,  -992,  -992,    84,   617,  -992,  -992,   -49,  -992,
-     -30,  -992,   -57,  -992,  -992,  -992,   118,  -992,  -992,  -992,
-     128,  -992,   612,     7,  -992,    18,  -992,    22,  -992,   366,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -979,  -992,  -992,
-    -992,  -992,  -992,   131,  -992,  -992,  -992,   -96,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   109,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,    99,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,   405,   580,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,   443,   577,
-    -992,  -992,  -992,  -992,  -992,  -992,   103,  -992,  -992,   -94,
-    -992,  -992,  -992,  -992,  -992,  -992,  -118,  -992,  -992,  -133,
-    -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,  -992,
-     106,  -992,  -992,  -992
+    -997,  -997,  -997,  -997,    40,  -997,  -997,    41,    44,    47,
+      48,    51,    52,  -997,   401,    55,  -997,    58,  -997,    59,
+      62,    63,  -997,    65,  -997,    66,  -997,  -997,  -997,  -997,
+    -997,    69,  -997,  -997,   392,   600,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,   132,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,   310,  -997,   107,  -997,  -708,   113,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+     -45,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,    96,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,    82,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,    88,  -997,  -997,  -997,    92,   565,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,    90,  -997,  -997,  -997,
+    -997,  -997,  -997,  -996,  -997,  -997,  -997,   109,  -997,  -997,
+    -997,   117,   601,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -988,  -997,   -65,  -997,    25,  -997,    70,    73,    76,
+      77,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   110,  -997,
+    -997,  -108,   -62,  -997,  -997,  -997,  -997,  -997,   125,  -997,
+    -997,  -997,   121,  -997,   591,  -997,   -61,  -997,  -997,  -997,
+    -997,  -997,   -58,  -997,  -997,  -997,  -997,  -997,    -4,  -997,
+    -997,  -997,   127,  -997,  -997,  -997,   133,  -997,   594,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,    80,  -997,  -997,  -997,    84,   623,  -997,  -997,   -49,
+    -997,   -30,  -997,   -57,  -997,  -997,  -997,   126,  -997,  -997,
+    -997,   129,  -997,   616,     7,  -997,    18,  -997,    22,  -997,
+     374,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -984,  -997,
+    -997,  -997,  -997,  -997,   135,  -997,  -997,  -997,   -89,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   114,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,   112,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   400,   588,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,   461,
+     580,  -997,  -997,  -997,  -997,  -997,  -997,   120,  -997,  -997,
+     -94,  -997,  -997,  -997,  -997,  -997,  -997,  -115,  -997,  -997,
+    -132,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,  -997,
+    -997,   116,  -997,  -997,  -997
   };
 
   const short
   Dhcp4Parser::yydefgoto_[] =
   {
-       0,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    36,    37,    38,    65,   734,
-      82,    83,    39,    64,    79,    80,   755,   957,  1056,  1057,
-     830,    41,    66,    85,   429,    86,    43,    67,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   455,   167,   168,   471,   169,   170,   171,   172,
-     173,   174,   175,   461,   725,   176,   462,   177,   463,   178,
-     179,   180,   489,   181,   490,   182,   183,   184,   185,   186,
-     187,   188,   433,   227,   228,    45,    68,   229,   499,   230,
-     500,   758,   231,   501,   761,   232,   233,   234,   235,   189,
-     441,   190,   434,   806,   807,   808,   970,   809,   971,   191,
-     442,   192,   443,   856,   857,   858,   997,   831,   832,   833,
-     974,  1214,   834,   975,   835,   976,   836,   977,   837,   838,
-     535,   839,   840,   841,   842,   843,   844,   845,   846,   847,
-     848,   988,  1221,   849,   850,   990,   851,   991,   852,   992,
-     853,   993,   193,   479,   880,   881,   882,   883,   884,   885,
-     886,   194,   485,   916,   917,   918,   919,   920,   195,   482,
-     895,   896,   897,  1020,    59,    75,   379,   380,   381,   549,
-     382,   550,   196,   483,   904,   905,   906,   907,   908,   909,
-     910,   911,   197,   467,   860,   861,   862,  1000,    47,    69,
-     273,   274,   275,   512,   276,   508,   277,   509,   278,   510,
-     279,   513,   280,   516,   281,   515,   198,   199,   200,   201,
-     475,   740,   286,   202,   472,   872,   873,   874,  1009,  1130,
-    1131,   203,   468,    53,    72,   864,   865,   866,  1003,    55,
-      73,   342,   343,   344,   345,   346,   347,   348,   534,   349,
-     538,   350,   537,   351,   352,   539,   353,   204,   469,   868,
-     869,   870,  1006,    57,    74,   364,   365,   366,   367,   368,
-     543,   369,   370,   371,   372,   373,   288,   511,   959,   960,
-     961,  1058,    49,    70,   301,   302,   303,   520,   205,   473,
-     206,   474,   207,   481,   891,   892,   893,  1017,    51,    71,
-     318,   319,   320,   208,   438,   209,   439,   210,   440,   324,
-     530,   964,  1061,   325,   524,   326,   525,   327,   527,   328,
-     526,   329,   529,   330,   528,   331,   523,   295,   517,   965,
-     211,   480,   888,   889,  1014,  1156,  1157,  1158,  1159,  1160,
-    1232,  1161,  1233,  1162,   212,   213,   486,   928,   929,   930,
-    1036,   931,  1037,   214,   487,   938,   939,   940,   941,  1041,
-     942,   943,  1043,   215,   488,    61,    76,   401,   402,   403,
-     404,   555,   405,   406,   557,   407,   408,   409,   560,   793,
-     410,   561,   411,   554,   412,   413,   414,   564,   415,   565,
-     416,   566,   417,   567,   216,   432,    63,    77,   420,   421,
-     422,   570,   423,   217,   494,   946,   947,  1047,  1194,  1195,
-    1196,  1197,  1245,  1198,  1243,  1265,  1266,  1267,  1275,  1276,
-    1277,  1283,  1278,  1279,  1280,  1281,  1287,   218,   495,   952,
-     953,   954,   955,   956
+      -1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    36,    37,    38,    65,   739,
+      82,    83,    39,    64,    79,    80,   760,   962,  1061,  1062,
+     835,    41,    66,    85,   432,    86,    43,    67,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   459,   168,   169,   475,   170,   171,   172,   173,
+     174,   175,   176,   465,   730,   177,   466,   178,   467,   179,
+     180,   181,   493,   182,   494,   183,   184,   185,   186,   187,
+     188,   189,   190,   436,   229,   230,    45,    68,   231,   503,
+     232,   504,   763,   233,   505,   766,   234,   235,   236,   237,
+     191,   445,   192,   437,   811,   812,   813,   975,   814,   976,
+     193,   446,   194,   447,   861,   862,   863,  1002,   836,   837,
+     838,   979,  1220,   839,   980,   840,   981,   841,   982,   842,
+     843,   539,   844,   845,   846,   847,   848,   849,   850,   851,
+     852,   853,   993,  1227,   854,   855,   995,   856,   996,   857,
+     997,   858,   998,   195,   483,   885,   886,   887,   888,   889,
+     890,   891,   196,   489,   921,   922,   923,   924,   925,   197,
+     486,   900,   901,   902,  1025,    59,    75,   382,   383,   384,
+     553,   385,   554,   198,   487,   909,   910,   911,   912,   913,
+     914,   915,   916,   199,   471,   865,   866,   867,  1005,    47,
+      69,   276,   277,   278,   516,   279,   512,   280,   513,   281,
+     514,   282,   517,   283,   520,   284,   519,   200,   201,   202,
+     203,   479,   745,   289,   204,   476,   877,   878,   879,  1014,
+    1136,  1137,   205,   472,    53,    72,   869,   870,   871,  1008,
+      55,    73,   345,   346,   347,   348,   349,   350,   351,   538,
+     352,   542,   353,   541,   354,   355,   543,   356,   206,   473,
+     873,   874,   875,  1011,    57,    74,   367,   368,   369,   370,
+     371,   547,   372,   373,   374,   375,   376,   291,   515,   964,
+     965,   966,  1063,    49,    70,   304,   305,   306,   524,   207,
+     477,   208,   478,   209,   485,   896,   897,   898,  1022,    51,
+      71,   321,   322,   323,   210,   441,   211,   442,   212,   443,
+     327,   534,   969,  1066,   328,   528,   329,   529,   330,   531,
+     331,   530,   332,   533,   333,   532,   334,   527,   298,   521,
+     970,   213,   484,   893,   894,  1019,  1162,  1163,  1164,  1165,
+    1166,  1238,  1167,  1239,  1168,   214,   215,   490,   933,   934,
+     935,  1041,   936,  1042,   216,   491,   943,   944,   945,   946,
+    1046,   947,   948,  1048,   217,   492,    61,    76,   404,   405,
+     406,   407,   559,   408,   409,   561,   410,   411,   412,   564,
+     798,   413,   565,   414,   558,   415,   416,   417,   568,   418,
+     569,   419,   570,   420,   571,   218,   435,    63,    77,   423,
+     424,   425,   574,   426,   219,   498,   951,   952,  1052,  1200,
+    1201,  1202,  1203,  1251,  1204,  1249,  1271,  1272,  1273,  1281,
+    1282,  1283,  1289,  1284,  1285,  1286,  1287,  1293,   220,   499,
+     957,   958,   959,   960,   961
   };
 
   const short
   Dhcp4Parser::yytable_[] =
   {
-     152,   226,   248,   297,   314,   298,   340,   360,   378,   398,
-     332,    78,   291,   362,   854,   252,   363,   768,  1122,   236,
-     289,   304,   316,   772,   354,   374,  1123,   399,   341,   361,
-    1138,   376,   377,   733,    81,   253,    28,   430,   237,   290,
-     305,   317,   431,   355,   375,    84,   400,    29,   123,    30,
-      40,    31,   720,   721,   722,   723,   791,   254,   426,   255,
-    1012,   249,   424,  1013,   425,   287,   300,   315,   948,   949,
-     950,    42,   256,   576,   497,   428,   292,   506,   321,   498,
-     250,   518,   507,   521,   151,   427,   519,   293,   522,   322,
-     724,   294,   551,   323,   568,   299,   435,   552,   251,   569,
-     572,   733,   257,   151,   436,   573,   258,   497,  1015,   259,
-     260,  1016,   967,   261,   418,   419,   262,   263,   128,   129,
-     264,   265,  1048,  1268,   266,  1049,  1269,   267,   268,   128,
-     129,   269,   270,    87,   271,   272,    88,    44,   282,   283,
-      46,   572,   284,    48,   506,   285,   968,   531,    89,   969,
-      50,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-     912,   913,   914,    52,   219,   220,   376,   377,   221,    54,
-     972,   222,   223,   224,   225,   973,   128,   129,   932,   933,
-     934,   736,   737,   738,   739,    56,    99,   100,   101,   102,
+     153,   228,   250,   300,   317,   301,   343,   363,   381,   401,
+     335,    78,   294,   365,   859,   254,   366,   773,  1128,   238,
+     292,   307,   319,   777,   357,   377,  1129,   402,   344,   364,
+    1144,   379,   380,   738,    40,   255,    28,   433,   239,   293,
+     308,   320,   434,   358,   378,    81,   403,    29,   337,    30,
+      42,    31,   725,   726,   727,   728,   796,   256,   429,   257,
+      44,   251,   427,   129,   130,   290,   303,   318,    46,   953,
+     954,   955,   258,   124,   501,    48,   295,   510,   324,   502,
+     252,   522,   511,   129,   130,   152,   523,   296,    50,   325,
+     729,   297,   525,   326,   555,   302,    84,   526,   253,   556,
+     572,   738,   259,   152,   428,   573,   260,   576,  1017,   261,
+     262,  1018,   577,   263,   501,    52,   264,   265,   576,   972,
+     266,   267,  1020,   973,   268,  1021,   430,   269,   270,   928,
+     929,   271,   272,    87,   273,   274,    88,  1053,   275,   285,
+    1054,  1193,   286,  1194,  1195,   287,   288,  1274,    89,    54,
+    1275,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,    56,   510,    58,   221,   222,   152,   974,   223,   421,
+     422,   224,   225,   226,   227,  1276,    60,   977,  1277,  1278,
+    1279,  1280,   978,  1217,  1218,  1219,   152,   100,   101,   102,
      103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     333,    58,   792,   123,   124,   875,   876,   877,   878,   994,
-     879,   151,   923,   924,   995,   125,   126,   127,   994,  1029,
-     128,   129,   935,   996,  1030,   130,  1211,  1212,  1213,  1122,
-     131,   132,   133,   134,   135,   804,   805,  1123,   756,   757,
-     136,  1138,    60,    32,    33,    34,    35,   128,   129,  1034,
-     137,  1038,    62,   138,  1035,   334,  1039,   335,   336,   437,
-     139,   140,   337,   338,   339,   141,   313,   962,   142,   151,
-     128,   129,   143,   124,  1218,  1219,  1220,    91,    92,    93,
-      94,    95,  1044,   532,  1088,   444,   568,  1045,   296,   128,
-     129,  1046,   144,   145,   146,   147,   148,   149,   898,   899,
-     900,   901,   902,   903,   245,  1053,   150,   445,   246,   446,
-    1054,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   759,   760,   151,   447,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   448,   238,   239,   240,  1270,   124,
-     449,  1271,  1272,  1273,  1274,    93,    94,    95,   450,   994,
-     151,   126,   451,   241,  1226,   128,   129,   242,   243,   244,
-     130,   452,   574,   575,   518,   131,   132,   133,   453,  1227,
-     245,  1230,   542,   151,   246,   136,  1231,    99,   100,   101,
-     533,   454,   247,   334,   356,   335,   336,   357,   358,   359,
-     551,  1246,   151,   456,   457,  1238,  1247,   521,   128,   129,
-     458,   459,  1249,   460,   123,   124,   334,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-     152,   128,   129,   464,   465,  1288,   541,   144,   145,   226,
-    1289,   466,   470,   476,   477,   478,   484,  1141,  1142,  1143,
-     491,   248,   492,   493,   297,   496,   298,   236,   502,   503,
-     504,   291,   505,   514,   252,   314,   536,   540,   151,   289,
-     544,   545,   304,   546,   548,   340,   237,   553,   547,   334,
-     556,   360,   558,   316,   253,   559,   562,   362,   290,   563,
-     363,   305,   571,   354,   128,   129,   577,   341,   578,   374,
-     579,   398,   317,   361,   580,   584,   254,   585,   255,   581,
-     249,   151,   355,   582,   287,   583,   586,   300,   375,   399,
-     587,   256,    93,    94,    95,   292,   588,   589,   315,   250,
-     590,   591,   592,   593,   151,   596,   293,   594,   400,   321,
-     294,   595,   597,   601,   598,   599,   299,   251,   600,   602,
-     322,   257,   604,   603,   323,   258,   605,   606,   259,   260,
-     607,   608,   261,   609,   610,   262,   263,  1250,   613,   264,
-     265,   611,  1187,   266,  1188,  1189,   267,   268,   612,   614,
-     269,   270,   124,   271,   272,   615,   617,   282,   283,   616,
-     618,   284,   619,   620,   285,   621,   625,   151,   128,   129,
-     626,   627,   622,   623,   624,   628,   629,   630,   631,   632,
-     633,   634,   306,   635,   636,   637,   638,   639,   640,   307,
-     308,   309,   310,   311,   312,   641,   313,   643,   644,   645,
-     646,   647,   648,   649,   651,   652,   653,   654,   655,   656,
-     658,   659,   152,   657,   226,   660,   675,   662,   664,   665,
-     666,   667,   787,   668,   669,   800,   670,   671,   673,   674,
-     676,   677,   236,   678,   679,   681,   682,   683,   686,   687,
-     690,   684,    91,    92,    93,    94,    95,   691,   689,   915,
-     925,   237,   398,   693,   692,   696,   951,   694,   697,   695,
-     700,   701,   702,   698,   699,   703,   705,   921,   926,   936,
-     399,   151,   708,   706,   709,   718,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   922,   927,   937,   400,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     710,   711,   712,   716,   124,   334,   713,   714,   715,   717,
-     719,   726,   727,   731,   728,   729,   126,   730,   732,   735,
-     128,   129,    30,   243,   741,   130,   128,   129,   742,   743,
-     131,   132,   133,   744,   745,   245,   746,   747,   748,   246,
-     749,   750,   751,   752,   753,   754,   810,   247,   762,   763,
-     811,   812,   813,   814,   815,   816,   817,   818,   819,   820,
-     821,   822,   823,   824,   764,   765,   766,   825,   826,   827,
-     828,   829,   770,   799,   767,   769,   771,   855,   859,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   144,   145,   773,   863,   774,   775,   396,   397,
-     776,   334,   867,   777,   871,   887,   890,   778,   779,   780,
-     781,   894,   794,   945,   958,   978,   979,   980,   981,   782,
-     783,   784,   982,   151,   983,   984,   985,   986,   987,   151,
-     989,   998,   785,   999,  1001,  1002,  1005,  1004,  1008,   786,
-    1007,   788,  1010,   789,   790,  1011,  1018,  1019,  1022,   796,
-     797,   798,  1021,  1023,  1024,  1025,  1026,  1027,  1028,  1031,
-    1032,  1033,  1040,  1042,  1050,  1051,  1052,  1060,   801,  1059,
-    1055,  1064,  1063,  1062,  1065,  1067,  1068,  1069,  1070,  1072,
-    1074,  1071,  1081,  1073,  1075,  1076,  1077,  1078,  1079,  1080,
-    1082,  1083,  1084,  1085,  1086,  1168,  1169,  1170,  1171,  1172,
-    1173,  1176,  1179,   248,  1175,  1180,   340,  1183,  1185,   360,
-    1177,  1182,  1096,   291,  1124,   362,   252,  1144,   363,   151,
-     314,   289,  1149,   378,   354,  1100,  1184,   374,   341,  1204,
-    1133,   361,  1200,  1205,  1121,  1151,   253,   915,   316,  1148,
-     290,   925,  1208,   355,  1228,  1101,   375,  1209,  1201,  1134,
-    1190,  1229,  1210,  1202,  1152,   921,   951,   317,   254,   926,
-     255,   297,   249,   298,  1215,   936,   287,  1102,  1192,  1103,
-    1216,  1097,  1191,   256,   922,  1132,  1145,   292,   927,   304,
-    1150,   250,  1104,   315,   937,  1217,  1135,  1193,   293,  1222,
-    1098,  1153,   294,  1223,   321,  1146,  1224,  1136,   305,   251,
-    1225,  1137,  1154,   257,  1125,   322,  1155,   258,  1099,   323,
-     259,   260,  1105,  1147,   261,  1234,  1106,   262,   263,  1107,
-    1108,   264,   265,  1109,   300,   266,  1110,  1111,   267,   268,
-    1112,  1113,   269,   270,  1114,   271,   272,  1115,  1116,   282,
-     283,  1117,  1118,   284,  1119,  1120,   285,  1235,  1126,  1127,
-    1236,  1237,  1128,   299,  1239,  1129,  1244,  1252,  1240,  1241,
-    1253,  1256,  1258,   795,  1262,  1284,  1285,  1264,  1286,  1290,
-    1294,  1066,   803,   966,   650,   642,  1089,  1087,  1140,  1248,
-    1167,  1174,  1091,  1254,  1166,  1178,   688,  1257,  1260,  1139,
-    1261,  1263,  1093,  1090,  1292,  1291,  1293,  1296,  1251,   661,
-    1092,  1094,  1242,  1297,  1095,   685,   963,  1165,   663,  1207,
-    1255,   680,  1206,  1186,   672,  1164,  1163,  1181,   704,   707,
-    1282,  1199,  1259,   802,   944,  1295,     0,     0,     0,  1203,
-       0,     0,     0,  1096,     0,  1124,     0,     0,     0,  1144,
-       0,     0,     0,     0,  1149,     0,  1100,     0,     0,  1190,
-       0,  1133,     0,     0,     0,  1121,     0,  1151,     0,     0,
-       0,  1148,     0,     0,     0,     0,  1101,  1192,     0,     0,
-    1134,  1191,     0,     0,     0,     0,  1152,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1193,     0,  1102,     0,
-    1103,     0,  1097,     0,     0,     0,  1132,     0,  1145,     0,
-       0,     0,  1150,  1104,     0,     0,     0,  1135,     0,     0,
-       0,  1098,     0,  1153,     0,     0,     0,  1146,  1136,     0,
-       0,     0,  1137,     0,  1154,  1125,     0,     0,  1155,  1099,
-       0,     0,     0,  1105,     0,  1147,     0,  1106,     0,     0,
-    1107,  1108,     0,     0,  1109,     0,     0,  1110,  1111,     0,
-       0,  1112,  1113,     0,     0,  1114,     0,     0,  1115,  1116,
-       0,     0,  1117,  1118,     0,  1119,  1120,     0,     0,  1126,
-    1127,     0,     0,  1128,     0,     0,  1129
+     123,   336,   999,   797,   124,   125,   431,  1000,   337,   359,
+     338,   339,   360,   361,   362,   999,   126,   127,   128,   438,
+    1001,   129,   130,   129,   130,    62,   131,  1224,  1225,  1226,
+    1128,   132,   133,   134,   135,   136,   379,   380,  1129,   129,
+     130,   137,  1144,   439,    32,    33,    34,    35,   129,   130,
+    1034,   138,  1039,   535,   139,  1035,   337,  1040,   338,   339,
+     440,   140,   141,   340,   341,   342,   142,   129,   130,   143,
+    1043,   129,   130,   144,   444,  1044,   761,   762,    91,    92,
+      93,    94,    95,    96,  1093,   448,  1049,   572,   937,   938,
+     939,  1050,  1051,   145,   146,   147,   148,   149,   150,   764,
+     765,  1058,   536,    93,    94,    95,  1059,   151,   449,   917,
+     918,   919,   450,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   451,   152,   452,   152,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   453,   240,   241,   242,
+     454,   125,   940,   903,   904,   905,   906,   907,   908,   999,
+     537,   152,   455,   127,  1232,   243,   456,   129,   130,   244,
+     245,   246,   131,   457,   125,   578,   579,   132,   133,   134,
+     152,   458,   247,   522,   152,   460,   248,   137,  1233,   461,
+     129,   130,   125,   462,   249,   880,   881,   882,   883,   463,
+     884,  1236,   809,   810,   309,   555,  1237,   299,   129,   130,
+    1244,   310,   311,   312,   313,   314,   315,  1252,   316,   525,
+    1294,   545,  1253,   247,  1255,  1295,   464,   248,   741,   742,
+     743,   744,   316,   967,   153,   468,   469,   470,   474,   145,
+     146,   480,   481,   228,   482,   488,   495,   496,   497,   500,
+     506,   507,   508,   509,   518,   250,   540,   544,   300,   546,
+     301,   238,   548,   549,   550,   294,   580,   552,   254,   317,
+     152,   551,   557,   292,   560,   562,   307,   563,   566,   343,
+     239,   567,   575,   581,   582,   363,   583,   319,   255,   584,
+     585,   365,   293,   152,   366,   308,   588,   357,   586,   587,
+     589,   344,   590,   377,   592,   401,   320,   364,   593,   591,
+     256,   152,   257,   594,   251,   595,   358,   596,   290,   597,
+     598,   303,   378,   402,   599,   258,   606,   600,   604,   295,
+     601,   602,   318,   252,   603,   605,   607,   608,   612,   613,
+     296,   609,   403,   324,   297,   610,   614,   611,   615,   616,
+     302,   253,   617,   618,   325,   259,   619,   620,   326,   260,
+     621,   635,   261,   262,   622,   623,   263,   624,  1256,   264,
+     265,   129,   130,   266,   267,   625,   626,   268,   627,   628,
+     269,   270,   629,   630,   271,   272,   631,   273,   274,   632,
+     633,   275,   285,   634,   636,   286,   815,   637,   287,   288,
+     816,   817,   818,   819,   820,   821,   822,   823,   824,   825,
+     826,   827,   828,   829,   638,   639,   640,   830,   831,   832,
+     833,   834,   641,   642,   386,   387,   388,   389,   390,   391,
+     392,   393,   394,   395,   396,   397,   398,   645,   643,   644,
+     646,   648,   649,   399,   400,   650,   656,   153,   657,   228,
+     651,   337,   658,   659,   652,   660,   661,   663,   664,   665,
+     805,   667,   669,   670,   653,   671,   672,   238,   654,   673,
+     662,   674,   675,   676,   152,   678,    91,    92,    93,    94,
+      95,    96,   679,   681,   920,   930,   239,   401,   680,   682,
+     683,   956,   686,   691,   692,   695,   684,   696,   687,   688,
+     697,   689,   926,   931,   941,   402,   694,   698,   699,   701,
+     700,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   927,   932,   942,   403,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   702,   703,   705,   704,   125,
+     337,   706,    93,    94,    95,   707,   708,   710,   713,   711,
+     718,   127,   714,   715,   716,   129,   130,   717,   245,   719,
+     131,   721,   720,   722,   723,   132,   133,   134,   724,   152,
+     247,   731,   733,   734,   248,   100,   101,   102,   732,   735,
+     736,   737,   249,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    30,   746,   747,   740,
+     748,   749,   124,   125,   337,   750,   751,   752,   753,   754,
+     755,   756,   757,   758,   759,   767,   768,   769,   770,   129,
+     130,   771,   775,   799,   804,   772,   774,   145,   146,   776,
+     860,   778,   779,   780,   781,  1147,  1148,  1149,   782,   783,
+     784,   785,   786,   787,   788,   864,   789,   790,   868,   872,
+     876,   791,   793,   892,   895,   794,   899,   795,   152,   950,
+     963,   983,   801,   984,   985,   986,   987,   988,   802,   989,
+     990,   991,   803,   992,   994,  1004,  1060,  1003,  1007,  1006,
+    1009,  1010,  1012,  1013,  1016,  1015,  1024,  1076,  1023,  1027,
+    1026,  1028,  1029,  1030,  1031,  1032,  1033,  1036,  1037,  1038,
+    1045,  1047,  1055,  1056,  1057,  1065,  1215,  1064,  1078,  1069,
+    1068,  1067,  1070,  1072,  1073,  1074,  1075,  1077,  1086,  1079,
+    1080,  1081,   152,  1088,  1082,  1083,  1084,  1085,  1087,  1089,
+    1090,  1091,  1174,  1175,  1176,  1177,  1178,  1179,   250,  1182,
+    1181,   343,  1183,  1185,   363,  1186,  1189,  1101,   294,  1130,
+     365,   254,  1150,   366,  1188,   317,   292,  1155,   381,   357,
+    1105,  1190,   377,   344,  1191,  1139,   364,  1206,  1207,  1127,
+    1157,   255,   920,   319,  1154,   293,   930,  1208,   358,  1210,
+    1106,   378,  1211,  1216,  1140,  1196,  1214,  1221,  1234,  1158,
+     926,   956,   320,   256,   931,   257,   300,   251,   301,  1222,
+     941,   290,  1107,  1198,  1108,  1235,  1102,  1197,   258,   927,
+    1138,  1151,   295,   932,   307,  1156,   252,  1109,   318,   942,
+    1223,  1141,  1199,   296,  1228,  1103,  1159,   297,  1229,   324,
+    1152,  1240,  1142,   308,   253,  1242,  1143,  1160,   259,  1131,
+     325,  1161,   260,  1104,   326,   261,   262,  1110,  1153,   263,
+    1241,  1111,   264,   265,  1112,  1113,   266,   267,  1114,   303,
+     268,  1115,  1116,   269,   270,  1117,  1118,   271,   272,  1119,
+     273,   274,  1120,  1121,   275,   285,  1122,  1123,   286,  1124,
+    1125,   287,   288,  1126,  1132,  1243,  1250,  1133,   302,  1230,
+    1134,  1135,  1258,  1259,  1262,  1264,   792,  1231,  1268,  1270,
+    1290,  1291,  1292,  1296,  1300,   806,   800,   647,   808,  1071,
+     655,  1094,  1092,  1146,   971,  1173,  1096,  1172,  1245,  1246,
+     693,  1184,  1095,   666,  1180,  1247,  1145,  1254,  1257,  1097,
+    1263,  1260,  1266,  1267,  1269,  1098,  1298,   685,  1248,  1297,
+    1100,  1299,  1302,  1303,  1099,  1213,   690,  1212,   668,   968,
+    1171,  1170,   677,  1261,   949,  1169,   712,  1187,  1265,  1288,
+     709,  1192,  1301,     0,     0,     0,     0,     0,     0,  1101,
+       0,  1130,     0,  1205,  1209,  1150,   807,     0,     0,     0,
+    1155,     0,  1105,     0,     0,  1196,     0,  1139,     0,     0,
+       0,  1127,     0,  1157,     0,     0,     0,  1154,     0,     0,
+       0,     0,  1106,  1198,     0,     0,  1140,  1197,     0,     0,
+       0,     0,  1158,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  1199,     0,  1107,     0,  1108,     0,  1102,     0,
+       0,     0,  1138,     0,  1151,     0,     0,     0,  1156,  1109,
+       0,     0,     0,  1141,     0,     0,     0,  1103,     0,  1159,
+       0,     0,     0,  1152,  1142,     0,     0,     0,  1143,     0,
+    1160,  1131,     0,     0,  1161,  1104,     0,     0,     0,  1110,
+       0,  1153,     0,  1111,     0,     0,  1112,  1113,     0,     0,
+    1114,     0,     0,  1115,  1116,     0,     0,  1117,  1118,     0,
+       0,  1119,     0,     0,  1120,  1121,     0,     0,  1122,  1123,
+       0,  1124,  1125,     0,     0,  1126,  1132,     0,     0,  1133,
+       0,     0,  1134,  1135
   };
 
   const short
   Dhcp4Parser::yycheck_[] =
   {
       67,    68,    69,    70,    71,    70,    73,    74,    75,    76,
-      72,    64,    69,    74,   717,    69,    74,   658,  1009,    68,
-      69,    70,    71,   664,    73,    74,  1009,    76,    73,    74,
-    1009,   139,   140,   619,   211,    69,     0,     3,    68,    69,
-      70,    71,     8,    73,    74,    10,    76,     5,    91,     7,
-       7,     9,   176,   177,   178,   179,    18,    69,     4,    69,
-       3,    69,     6,     6,     3,    69,    70,    71,   195,   196,
-     197,     7,    69,   211,     3,     3,    69,     3,    71,     8,
-      69,     3,     8,     3,   211,     8,     8,    69,     8,    71,
-     214,    69,     3,    71,     3,    70,     4,     8,    69,     8,
-       3,   687,    69,   211,     4,     8,    69,     3,     3,    69,
-      69,     6,     8,    69,    12,    13,    69,    69,   108,   109,
-      69,    69,     3,     3,    69,     6,     6,    69,    69,   108,
-     109,    69,    69,    11,    69,    69,    14,     7,    69,    69,
-       7,     3,    69,     7,     3,    69,     8,     8,    26,     8,
-       7,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-     150,   151,   152,     7,    15,    16,   139,   140,    19,     7,
-       3,    22,    23,    24,    25,     8,   108,   109,   157,   158,
-     159,   114,   115,   116,   117,     7,    64,    65,    66,    67,
+      72,    64,    69,    74,   722,    69,    74,   663,  1014,    68,
+      69,    70,    71,   669,    73,    74,  1014,    76,    73,    74,
+    1014,   140,   141,   624,     7,    69,     0,     3,    68,    69,
+      70,    71,     8,    73,    74,   212,    76,     5,    94,     7,
+       7,     9,   177,   178,   179,   180,    18,    69,     4,    69,
+       7,    69,     6,   109,   110,    69,    70,    71,     7,   196,
+     197,   198,    69,    92,     3,     7,    69,     3,    71,     8,
+      69,     3,     8,   109,   110,   212,     8,    69,     7,    71,
+     215,    69,     3,    71,     3,    70,    10,     8,    69,     8,
+       3,   692,    69,   212,     3,     8,    69,     3,     3,    69,
+      69,     6,     8,    69,     3,     7,    69,    69,     3,     8,
+      69,    69,     3,     8,    69,     6,     8,    69,    69,   155,
+     156,    69,    69,    11,    69,    69,    14,     3,    69,    69,
+       6,   187,    69,   189,   190,    69,    69,     3,    26,     7,
+       6,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,     7,     3,     7,    15,    16,   212,     8,    19,    12,
+      13,    22,    23,    24,    25,   188,     7,     3,   191,   192,
+     193,   194,     8,    40,    41,    42,   212,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      38,     7,   174,    91,    92,   129,   130,   131,   132,     3,
-     134,   211,   154,   155,     8,   103,   104,   105,     3,     3,
-     108,   109,   211,     8,     8,   113,    39,    40,    41,  1230,
-     118,   119,   120,   121,   122,    27,    28,  1230,    17,    18,
-     128,  1230,     7,   211,   212,   213,   214,   108,   109,     3,
-     138,     3,     7,   141,     8,    93,     8,    95,    96,     4,
-     148,   149,   100,   101,   102,   153,   136,   137,   156,   211,
-     108,   109,   160,    92,    56,    57,    58,    30,    31,    32,
-      33,    34,     3,     3,   997,     4,     3,     8,   107,   108,
-     109,     8,   180,   181,   182,   183,   184,   185,   142,   143,
-     144,   145,   146,   147,   123,     3,   194,     4,   127,     4,
-       8,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    20,    21,   211,     4,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,     4,    88,    89,    90,   187,    92,
-       4,   190,   191,   192,   193,    32,    33,    34,     4,     3,
-     211,   104,     4,   106,     8,   108,   109,   110,   111,   112,
-     113,     4,   425,   426,     3,   118,   119,   120,     4,     8,
-     123,     3,     3,   211,   127,   128,     8,    64,    65,    66,
-       8,     4,   135,    93,    94,    95,    96,    97,    98,    99,
-       3,     3,   211,     4,     4,     8,     8,     3,   108,   109,
-       4,     4,     8,     4,    91,    92,    93,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     497,   108,   109,     4,     4,     3,     8,   180,   181,   506,
-       8,     4,     4,     4,     4,     4,     4,   124,   125,   126,
-       4,   518,     4,     4,   521,     4,   521,   506,     4,     4,
-       4,   518,     4,     4,   518,   532,     4,     4,   211,   518,
-       4,     4,   521,     4,     3,   542,   506,     4,     8,    93,
-       4,   548,     4,   532,   518,     4,     4,   548,   518,     4,
-     548,   521,     4,   542,   108,   109,     4,   542,     4,   548,
-       4,   568,   532,   548,     4,     4,   518,     4,   518,   214,
-     518,   211,   542,   214,   518,   214,     4,   521,   548,   568,
-       4,   518,    32,    33,    34,   518,     4,     4,   532,   518,
-     212,   212,   212,   212,   211,   213,   518,   212,   568,   532,
-     518,   214,   213,     4,   213,   212,   521,   518,   212,   212,
-     532,   518,   214,   212,   532,   518,   214,   214,   518,   518,
-       4,     4,   518,     4,   214,   518,   518,  1208,     4,   518,
-     518,   214,   186,   518,   188,   189,   518,   518,   214,     4,
-     518,   518,    92,   518,   518,     4,     4,   518,   518,   212,
-       4,   518,     4,     4,   518,     4,     4,   211,   108,   109,
-       4,     4,   214,   214,   214,     4,     4,   212,     4,     4,
-       4,     4,   122,     4,     4,   214,   214,   214,     4,   129,
-     130,   131,   132,   133,   134,     4,   136,     4,     4,     4,
-     214,   214,   212,   212,     4,     4,     4,     4,     4,     4,
-       4,     4,   709,   212,   711,     4,   212,     4,     4,     4,
-       4,     4,   687,     4,     4,   708,     4,     4,     4,     4,
-       4,     4,   711,     4,   214,     4,   214,   214,     4,     4,
-       4,   214,    30,    31,    32,    33,    34,     4,   214,   746,
-     747,   711,   749,     4,   212,     4,   753,   212,     4,   212,
-       4,     4,     4,   214,   214,     4,     4,   746,   747,   748,
-     749,   211,     4,   212,     7,     5,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,   746,   747,   748,   749,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-       7,     7,     7,     7,    92,    93,   211,   211,   211,     7,
-     211,   211,   211,   211,     5,     5,   104,     5,     5,   211,
-     108,   109,     7,   111,     5,   113,   108,   109,     5,     5,
-     118,   119,   120,     5,     7,   123,     7,     7,     7,   127,
-       7,   211,   211,     5,     7,     5,    38,   135,   211,   211,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,   211,     5,   211,    59,    60,    61,
-      62,    63,     7,     5,   211,   211,   211,     7,     7,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   180,   181,   211,     7,   211,   211,   180,   181,
-     211,    93,     7,   211,     7,     7,     7,   211,   211,   211,
-     211,     7,   175,     7,     7,     4,     4,     4,     4,   211,
-     211,   211,     4,   211,     4,     4,     4,     4,     4,   211,
-       4,     6,   211,     3,     6,     3,     3,     6,     3,   211,
-       6,   211,     6,   211,   211,     3,     6,     3,     3,   211,
-     211,   211,     6,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     3,   709,     6,
-     211,     4,     6,     8,     4,     4,     4,     4,     4,   214,
-     214,   212,     4,   212,   212,   212,   212,   212,   212,   212,
-     212,     4,     4,     4,     4,   212,   212,   212,   212,   212,
-     212,   212,     4,  1000,   214,     4,  1003,     4,     4,  1006,
-     212,   214,  1009,  1000,  1009,  1006,  1000,  1014,  1006,   211,
-    1017,  1000,  1014,  1020,  1003,  1009,   212,  1006,  1003,     6,
-    1009,  1006,   214,     3,  1009,  1014,  1000,  1034,  1017,  1014,
-    1000,  1038,     4,  1003,     8,  1009,  1006,   211,   214,  1009,
-    1047,     8,   211,   214,  1014,  1034,  1053,  1017,  1000,  1038,
-    1000,  1058,  1000,  1058,   211,  1044,  1000,  1009,  1047,  1009,
-     211,  1009,  1047,  1000,  1034,  1009,  1014,  1000,  1038,  1058,
-    1014,  1000,  1009,  1017,  1044,   211,  1009,  1047,  1000,   211,
-    1009,  1014,  1000,   211,  1017,  1014,   211,  1009,  1058,  1000,
-     211,  1009,  1014,  1000,  1009,  1017,  1014,  1000,  1009,  1017,
-    1000,  1000,  1009,  1014,  1000,     4,  1009,  1000,  1000,  1009,
-    1009,  1000,  1000,  1009,  1058,  1000,  1009,  1009,  1000,  1000,
-    1009,  1009,  1000,  1000,  1009,  1000,  1000,  1009,  1009,  1000,
-    1000,  1009,  1009,  1000,  1009,  1009,  1000,     8,  1009,  1009,
-       3,     8,  1009,  1058,   211,  1009,     4,     4,   211,   211,
-       4,     4,     4,   700,     5,     4,     4,     7,     4,     4,
-       4,   972,   711,   799,   506,   497,   999,   994,  1012,   211,
-    1022,  1029,  1002,   214,  1020,  1034,   551,   212,   211,  1011,
-     211,   211,  1005,  1000,   212,   214,   212,   211,  1230,   518,
-    1003,  1006,  1185,   211,  1008,   548,   770,  1019,   521,  1060,
-    1236,   542,  1058,  1044,   532,  1017,  1015,  1038,   568,   572,
-    1268,  1048,  1246,   710,   749,  1288,    -1,    -1,    -1,  1053,
-      -1,    -1,    -1,  1230,    -1,  1230,    -1,    -1,    -1,  1236,
-      -1,    -1,    -1,    -1,  1236,    -1,  1230,    -1,    -1,  1246,
-      -1,  1230,    -1,    -1,    -1,  1230,    -1,  1236,    -1,    -1,
-      -1,  1236,    -1,    -1,    -1,    -1,  1230,  1246,    -1,    -1,
-    1230,  1246,    -1,    -1,    -1,    -1,  1236,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1246,    -1,  1230,    -1,
-    1230,    -1,  1230,    -1,    -1,    -1,  1230,    -1,  1236,    -1,
-      -1,    -1,  1236,  1230,    -1,    -1,    -1,  1230,    -1,    -1,
-      -1,  1230,    -1,  1236,    -1,    -1,    -1,  1236,  1230,    -1,
-      -1,    -1,  1230,    -1,  1236,  1230,    -1,    -1,  1236,  1230,
-      -1,    -1,    -1,  1230,    -1,  1236,    -1,  1230,    -1,    -1,
-    1230,  1230,    -1,    -1,  1230,    -1,    -1,  1230,  1230,    -1,
-      -1,  1230,  1230,    -1,    -1,  1230,    -1,    -1,  1230,  1230,
-      -1,    -1,  1230,  1230,    -1,  1230,  1230,    -1,    -1,  1230,
-    1230,    -1,    -1,  1230,    -1,    -1,  1230
+      88,    39,     3,   175,    92,    93,     3,     8,    94,    95,
+      96,    97,    98,    99,   100,     3,   104,   105,   106,     4,
+       8,   109,   110,   109,   110,     7,   114,    57,    58,    59,
+    1236,   119,   120,   121,   122,   123,   140,   141,  1236,   109,
+     110,   129,  1236,     4,   212,   213,   214,   215,   109,   110,
+       3,   139,     3,     8,   142,     8,    94,     8,    96,    97,
+       4,   149,   150,   101,   102,   103,   154,   109,   110,   157,
+       3,   109,   110,   161,     4,     8,    17,    18,    30,    31,
+      32,    33,    34,    35,  1002,     4,     3,     3,   158,   159,
+     160,     8,     8,   181,   182,   183,   184,   185,   186,    20,
+      21,     3,     3,    32,    33,    34,     8,   195,     4,   151,
+     152,   153,     4,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,     4,   212,     4,   212,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,     4,    89,    90,    91,
+       4,    93,   212,   143,   144,   145,   146,   147,   148,     3,
+       8,   212,     4,   105,     8,   107,     4,   109,   110,   111,
+     112,   113,   114,     4,    93,   428,   429,   119,   120,   121,
+     212,     4,   124,     3,   212,     4,   128,   129,     8,     4,
+     109,   110,    93,     4,   136,   130,   131,   132,   133,     4,
+     135,     3,    27,    28,   123,     3,     8,   108,   109,   110,
+       8,   130,   131,   132,   133,   134,   135,     3,   137,     3,
+       3,     8,     8,   124,     8,     8,     4,   128,   115,   116,
+     117,   118,   137,   138,   501,     4,     4,     4,     4,   181,
+     182,     4,     4,   510,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   522,     4,     4,   525,     3,
+     525,   510,     4,     4,     4,   522,   212,     3,   522,   536,
+     212,     8,     4,   522,     4,     4,   525,     4,     4,   546,
+     510,     4,     4,     4,     4,   552,     4,   536,   522,     4,
+     215,   552,   522,   212,   552,   525,     4,   546,   215,   215,
+       4,   546,     4,   552,     4,   572,   536,   552,     4,   213,
+     522,   212,   522,     4,   522,   213,   546,   213,   522,   213,
+     213,   525,   552,   572,   213,   522,     4,   215,   213,   522,
+     214,   214,   536,   522,   214,   213,   213,   213,     4,     4,
+     522,   215,   572,   536,   522,   215,     4,   215,   215,   215,
+     525,   522,   215,     4,   536,   522,     4,     4,   536,   522,
+     213,   213,   522,   522,     4,     4,   522,     4,  1214,   522,
+     522,   109,   110,   522,   522,     4,     4,   522,   215,   215,
+     522,   522,   215,     4,   522,   522,     4,   522,   522,     4,
+       4,   522,   522,     4,     4,   522,    39,     4,   522,   522,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,     4,     4,     4,    60,    61,    62,
+      63,    64,     4,   215,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,     4,   215,   215,
+       4,     4,     4,   181,   182,     4,     4,   714,     4,   716,
+     215,    94,     4,     4,   215,     4,     4,     4,     4,     4,
+     713,     4,     4,     4,   213,     4,     4,   716,   213,     4,
+     213,     4,     4,     4,   212,     4,    30,    31,    32,    33,
+      34,    35,     4,     4,   751,   752,   716,   754,   213,     4,
+       4,   758,     4,     4,     4,     4,   215,     4,   215,   215,
+     213,   215,   751,   752,   753,   754,   215,     4,   213,     4,
+     213,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,   751,   752,   753,   754,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,     4,   215,     4,   215,    93,
+      94,     4,    32,    33,    34,     4,     4,     4,     4,   213,
+     212,   105,     7,     7,     7,   109,   110,     7,   112,   212,
+     114,     7,   212,     7,     5,   119,   120,   121,   212,   212,
+     124,   212,     5,     5,   128,    65,    66,    67,   212,     5,
+     212,     5,   136,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,     7,     5,     5,   212,
+       5,     5,    92,    93,    94,     7,     7,     7,     7,     7,
+     212,   212,     5,     7,     5,   212,   212,   212,     5,   109,
+     110,   212,     7,   176,     5,   212,   212,   181,   182,   212,
+       7,   212,   212,   212,   212,   125,   126,   127,   212,   212,
+     212,   212,   212,   212,   212,     7,   212,   212,     7,     7,
+       7,   212,   212,     7,     7,   212,     7,   212,   212,     7,
+       7,     4,   212,     4,     4,     4,     4,     4,   212,     4,
+       4,     4,   212,     4,     4,     3,   212,     6,     3,     6,
+       6,     3,     6,     3,     3,     6,     3,   213,     6,     3,
+       6,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     3,   212,     6,   213,     4,
+       6,     8,     4,     4,     4,     4,     4,   215,     4,   215,
+     213,   213,   212,     4,   213,   213,   213,   213,   213,     4,
+       4,     4,   213,   213,   213,   213,   213,   213,  1005,   213,
+     215,  1008,   213,     4,  1011,     4,     4,  1014,  1005,  1014,
+    1011,  1005,  1019,  1011,   215,  1022,  1005,  1019,  1025,  1008,
+    1014,   213,  1011,  1008,     4,  1014,  1011,   215,   215,  1014,
+    1019,  1005,  1039,  1022,  1019,  1005,  1043,   215,  1008,     6,
+    1014,  1011,     3,   212,  1014,  1052,     4,   212,     8,  1019,
+    1039,  1058,  1022,  1005,  1043,  1005,  1063,  1005,  1063,   212,
+    1049,  1005,  1014,  1052,  1014,     8,  1014,  1052,  1005,  1039,
+    1014,  1019,  1005,  1043,  1063,  1019,  1005,  1014,  1022,  1049,
+     212,  1014,  1052,  1005,   212,  1014,  1019,  1005,   212,  1022,
+    1019,     4,  1014,  1063,  1005,     3,  1014,  1019,  1005,  1014,
+    1022,  1019,  1005,  1014,  1022,  1005,  1005,  1014,  1019,  1005,
+       8,  1014,  1005,  1005,  1014,  1014,  1005,  1005,  1014,  1063,
+    1005,  1014,  1014,  1005,  1005,  1014,  1014,  1005,  1005,  1014,
+    1005,  1005,  1014,  1014,  1005,  1005,  1014,  1014,  1005,  1014,
+    1014,  1005,  1005,  1014,  1014,     8,     4,  1014,  1063,   212,
+    1014,  1014,     4,     4,     4,     4,   692,   212,     5,     7,
+       4,     4,     4,     4,     4,   714,   705,   501,   716,   977,
+     510,  1004,   999,  1017,   804,  1027,  1007,  1025,   212,   212,
+     555,  1039,  1005,   522,  1034,   212,  1016,   212,  1236,  1008,
+     213,   215,   212,   212,   212,  1010,   213,   546,  1191,   215,
+    1013,   213,   212,   212,  1011,  1065,   552,  1063,   525,   775,
+    1024,  1022,   536,  1242,   754,  1020,   576,  1043,  1252,  1274,
+     572,  1049,  1294,    -1,    -1,    -1,    -1,    -1,    -1,  1236,
+      -1,  1236,    -1,  1053,  1058,  1242,   715,    -1,    -1,    -1,
+    1242,    -1,  1236,    -1,    -1,  1252,    -1,  1236,    -1,    -1,
+      -1,  1236,    -1,  1242,    -1,    -1,    -1,  1242,    -1,    -1,
+      -1,    -1,  1236,  1252,    -1,    -1,  1236,  1252,    -1,    -1,
+      -1,    -1,  1242,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1252,    -1,  1236,    -1,  1236,    -1,  1236,    -1,
+      -1,    -1,  1236,    -1,  1242,    -1,    -1,    -1,  1242,  1236,
+      -1,    -1,    -1,  1236,    -1,    -1,    -1,  1236,    -1,  1242,
+      -1,    -1,    -1,  1242,  1236,    -1,    -1,    -1,  1236,    -1,
+    1242,  1236,    -1,    -1,  1242,  1236,    -1,    -1,    -1,  1236,
+      -1,  1242,    -1,  1236,    -1,    -1,  1236,  1236,    -1,    -1,
+    1236,    -1,    -1,  1236,  1236,    -1,    -1,  1236,  1236,    -1,
+      -1,  1236,    -1,    -1,  1236,  1236,    -1,    -1,  1236,  1236,
+      -1,  1236,  1236,    -1,    -1,  1236,  1236,    -1,    -1,  1236,
+      -1,    -1,  1236,  1236
   };
 
   const short
   Dhcp4Parser::yystos_[] =
   {
-       0,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,     0,     5,
-       7,     9,   211,   212,   213,   214,   230,   231,   232,   237,
-       7,   246,     7,   251,     7,   300,     7,   413,     7,   497,
-       7,   513,     7,   448,     7,   454,     7,   478,     7,   389,
-       7,   580,     7,   611,   238,   233,   247,   252,   301,   414,
-     498,   514,   449,   455,   479,   390,   581,   612,   230,   239,
-     240,   211,   235,   236,    10,   248,   250,    11,    14,    26,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    64,
+       0,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,     0,     5,
+       7,     9,   212,   213,   214,   215,   231,   232,   233,   238,
+       7,   247,     7,   252,     7,   302,     7,   415,     7,   499,
+       7,   515,     7,   450,     7,   456,     7,   480,     7,   391,
+       7,   582,     7,   613,   239,   234,   248,   253,   303,   416,
+     500,   516,   451,   457,   481,   392,   583,   614,   231,   240,
+     241,   212,   236,   237,    10,   249,   251,    11,    14,    26,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    91,    92,   103,   104,   105,   108,   109,
-     113,   118,   119,   120,   121,   122,   128,   138,   141,   148,
-     149,   153,   156,   160,   180,   181,   182,   183,   184,   185,
-     194,   211,   245,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   268,   269,   271,
-     272,   273,   274,   275,   276,   277,   280,   282,   284,   285,
-     286,   288,   290,   291,   292,   293,   294,   295,   296,   314,
-     316,   324,   326,   367,   376,   383,   397,   407,   431,   432,
-     433,   434,   438,   446,   472,   503,   505,   507,   518,   520,
-     522,   545,   559,   560,   568,   578,   609,   618,   642,    15,
-      16,    19,    22,    23,    24,    25,   245,   298,   299,   302,
-     304,   307,   310,   311,   312,   313,   503,   505,    88,    89,
-      90,   106,   110,   111,   112,   123,   127,   135,   245,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   269,
-     272,   273,   274,   275,   276,   277,   280,   282,   284,   285,
-     286,   288,   290,   415,   416,   417,   419,   421,   423,   425,
-     427,   429,   431,   432,   433,   434,   437,   472,   491,   503,
-     505,   507,   518,   520,   522,   542,   107,   245,   427,   429,
-     472,   499,   500,   501,   503,   505,   122,   129,   130,   131,
-     132,   133,   134,   136,   245,   472,   503,   505,   515,   516,
-     517,   518,   520,   522,   524,   528,   530,   532,   534,   536,
-     538,   540,   446,    38,    93,    95,    96,   100,   101,   102,
-     245,   344,   456,   457,   458,   459,   460,   461,   462,   464,
-     466,   468,   469,   471,   503,   505,    94,    97,    98,    99,
-     245,   344,   460,   466,   480,   481,   482,   483,   484,   486,
-     487,   488,   489,   490,   503,   505,   139,   140,   245,   391,
-     392,   393,   395,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   180,   181,   245,   503,
-     505,   582,   583,   584,   585,   587,   588,   590,   591,   592,
-     595,   597,   599,   600,   601,   603,   605,   607,    12,    13,
-     613,   614,   615,   617,     6,     3,     4,     8,     3,   249,
-       3,     8,   610,   297,   317,     4,     4,     4,   519,   521,
-     523,   315,   325,   327,     4,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   267,     4,     4,     4,     4,
-       4,   278,   281,   283,     4,     4,     4,   408,   447,   473,
-       4,   270,   439,   504,   506,   435,     4,     4,     4,   368,
-     546,   508,   384,   398,     4,   377,   561,   569,   579,   287,
-     289,     4,     4,     4,   619,   643,     4,     3,     8,   303,
-     305,   308,     4,     4,     4,     4,     3,     8,   420,   422,
-     424,   492,   418,   426,     4,   430,   428,   543,     3,     8,
-     502,     3,     8,   541,   529,   531,   535,   533,   539,   537,
-     525,     8,     3,     8,   463,   345,     4,   467,   465,   470,
-       4,     8,     3,   485,     4,     4,     4,     8,     3,   394,
-     396,     3,     8,     4,   598,   586,     4,   589,     4,     4,
-     593,   596,     4,     4,   602,   604,   606,   608,     3,     8,
-     616,     4,     3,     8,   230,   230,   211,     4,     4,     4,
-       4,   214,   214,   214,     4,     4,     4,     4,     4,     4,
-     212,   212,   212,   212,   212,   214,   213,   213,   213,   212,
-     212,     4,   212,   212,   214,   214,   214,     4,     4,     4,
-     214,   214,   214,     4,     4,     4,   212,     4,     4,     4,
-       4,     4,   214,   214,   214,     4,     4,     4,     4,     4,
-     212,     4,     4,     4,     4,     4,     4,   214,   214,   214,
-       4,     4,   254,     4,     4,     4,   214,   214,   212,   212,
-     299,     4,     4,     4,     4,     4,     4,   212,     4,     4,
-       4,   416,     4,   500,     4,     4,     4,     4,     4,     4,
-       4,     4,   517,     4,     4,   212,     4,     4,     4,   214,
-     458,     4,   214,   214,   214,   482,     4,     4,   392,   214,
-       4,     4,   212,     4,   212,   212,     4,     4,   214,   214,
-       4,     4,     4,     4,   583,     4,   212,   614,     4,     7,
-       7,     7,     7,   211,   211,   211,     7,     7,     5,   211,
-     176,   177,   178,   179,   214,   279,   211,   211,     5,     5,
-       5,   211,     5,   232,   234,   211,   114,   115,   116,   117,
-     436,     5,     5,     5,     5,     7,     7,     7,     7,     7,
-     211,   211,     5,     7,     5,   241,    17,    18,   306,    20,
-      21,   309,   211,   211,   211,     5,   211,   211,   241,   211,
-       7,   211,   241,   211,   211,   211,   211,   211,   211,   211,
-     211,   211,   211,   211,   211,   211,   211,   234,   211,   211,
-     211,    18,   174,   594,   175,   279,   211,   211,   211,     5,
-     230,   253,   613,   298,    27,    28,   318,   319,   320,   322,
-      38,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    59,    60,    61,    62,    63,
-     245,   332,   333,   334,   337,   339,   341,   343,   344,   346,
-     347,   348,   349,   350,   351,   352,   353,   354,   355,   358,
-     359,   361,   363,   365,   332,     7,   328,   329,   330,     7,
-     409,   410,   411,     7,   450,   451,   452,     7,   474,   475,
-     476,     7,   440,   441,   442,   129,   130,   131,   132,   134,
-     369,   370,   371,   372,   373,   374,   375,     7,   547,   548,
-       7,   509,   510,   511,     7,   385,   386,   387,   142,   143,
-     144,   145,   146,   147,   399,   400,   401,   402,   403,   404,
-     405,   406,   150,   151,   152,   245,   378,   379,   380,   381,
-     382,   503,   505,   154,   155,   245,   503,   505,   562,   563,
-     564,   566,   157,   158,   159,   211,   503,   505,   570,   571,
-     572,   573,   575,   576,   582,     7,   620,   621,   195,   196,
-     197,   245,   644,   645,   646,   647,   648,   242,     7,   493,
-     494,   495,   137,   524,   526,   544,   328,     8,     8,     8,
-     321,   323,     3,     8,   335,   338,   340,   342,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,     4,   356,     4,
-     360,   362,   364,   366,     3,     8,     8,   331,     6,     3,
-     412,     6,     3,   453,     6,     3,   477,     6,     3,   443,
-       6,     3,     3,     6,   549,     3,     6,   512,     6,     3,
-     388,     6,     3,     4,     4,     4,     4,     4,     4,     3,
-       8,     4,     4,     4,     3,     8,   565,   567,     3,     8,
-       4,   574,     4,   577,     3,     8,     8,   622,     3,     6,
-       4,     4,     4,     3,     8,   211,   243,   244,   496,     6,
-       3,   527,     8,     6,     4,     4,   319,     4,     4,     4,
-       4,   212,   214,   212,   214,   212,   212,   212,   212,   212,
-     212,     4,   212,     4,     4,     4,     4,   333,   332,   330,
-     415,   411,   456,   452,   480,   476,   245,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   269,   272,   273,
-     274,   275,   276,   277,   280,   282,   284,   285,   286,   288,
-     290,   344,   407,   425,   427,   429,   431,   432,   433,   434,
-     444,   445,   472,   503,   505,   518,   520,   522,   542,   442,
-     370,   124,   125,   126,   245,   255,   256,   257,   344,   446,
-     472,   503,   505,   518,   520,   522,   550,   551,   552,   553,
-     554,   556,   558,   548,   515,   511,   391,   387,   212,   212,
-     212,   212,   212,   212,   400,   214,   212,   212,   379,     4,
-       4,   563,   214,     4,   212,     4,   571,   186,   188,   189,
-     245,   344,   503,   505,   623,   624,   625,   626,   628,   621,
-     214,   214,   214,   645,     6,     3,   499,   495,     4,   211,
-     211,    39,    40,    41,   336,   211,   211,   211,    56,    57,
-      58,   357,   211,   211,   211,   211,     8,     8,     8,     8,
-       3,     8,   555,   557,     4,     8,     3,     8,     8,   211,
-     211,   211,   230,   629,     4,   627,     3,     8,   211,     8,
-     241,   445,     4,     4,   214,   552,     4,   212,     4,   624,
-     211,   211,     5,   211,     7,   630,   631,   632,     3,     6,
-     187,   190,   191,   192,   193,   633,   634,   635,   637,   638,
-     639,   640,   631,   636,     4,     4,     4,   641,     3,     8,
-       4,   214,   212,   212,     4,   634,   211,   211
+      85,    86,    87,    88,    92,    93,   104,   105,   106,   109,
+     110,   114,   119,   120,   121,   122,   123,   129,   139,   142,
+     149,   150,   154,   157,   161,   181,   182,   183,   184,   185,
+     186,   195,   212,   246,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   269,   270,
+     272,   273,   274,   275,   276,   277,   278,   281,   283,   285,
+     286,   287,   289,   291,   292,   293,   294,   295,   296,   297,
+     298,   316,   318,   326,   328,   369,   378,   385,   399,   409,
+     433,   434,   435,   436,   440,   448,   474,   505,   507,   509,
+     520,   522,   524,   547,   561,   562,   570,   580,   611,   620,
+     644,    15,    16,    19,    22,    23,    24,    25,   246,   300,
+     301,   304,   306,   309,   312,   313,   314,   315,   505,   507,
+      89,    90,    91,   107,   111,   112,   113,   124,   128,   136,
+     246,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   270,   273,   274,   275,   276,   277,   278,   281,   283,
+     285,   286,   287,   289,   291,   297,   417,   418,   419,   421,
+     423,   425,   427,   429,   431,   433,   434,   435,   436,   439,
+     474,   493,   505,   507,   509,   520,   522,   524,   544,   108,
+     246,   429,   431,   474,   501,   502,   503,   505,   507,   123,
+     130,   131,   132,   133,   134,   135,   137,   246,   474,   505,
+     507,   517,   518,   519,   520,   522,   524,   526,   530,   532,
+     534,   536,   538,   540,   542,   448,    39,    94,    96,    97,
+     101,   102,   103,   246,   346,   458,   459,   460,   461,   462,
+     463,   464,   466,   468,   470,   471,   473,   505,   507,    95,
+      98,    99,   100,   246,   346,   462,   468,   482,   483,   484,
+     485,   486,   488,   489,   490,   491,   492,   505,   507,   140,
+     141,   246,   393,   394,   395,   397,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   181,
+     182,   246,   505,   507,   584,   585,   586,   587,   589,   590,
+     592,   593,   594,   597,   599,   601,   602,   603,   605,   607,
+     609,    12,    13,   615,   616,   617,   619,     6,     3,     4,
+       8,     3,   250,     3,     8,   612,   299,   319,     4,     4,
+       4,   521,   523,   525,     4,   317,   327,   329,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,   268,
+       4,     4,     4,     4,     4,   279,   282,   284,     4,     4,
+       4,   410,   449,   475,     4,   271,   441,   506,   508,   437,
+       4,     4,     4,   370,   548,   510,   386,   400,     4,   379,
+     563,   571,   581,   288,   290,     4,     4,     4,   621,   645,
+       4,     3,     8,   305,   307,   310,     4,     4,     4,     4,
+       3,     8,   422,   424,   426,   494,   420,   428,     4,   432,
+     430,   545,     3,     8,   504,     3,     8,   543,   531,   533,
+     537,   535,   541,   539,   527,     8,     3,     8,   465,   347,
+       4,   469,   467,   472,     4,     8,     3,   487,     4,     4,
+       4,     8,     3,   396,   398,     3,     8,     4,   600,   588,
+       4,   591,     4,     4,   595,   598,     4,     4,   604,   606,
+     608,   610,     3,     8,   618,     4,     3,     8,   231,   231,
+     212,     4,     4,     4,     4,   215,   215,   215,     4,     4,
+       4,   213,     4,     4,     4,   213,   213,   213,   213,   213,
+     215,   214,   214,   214,   213,   213,     4,   213,   213,   215,
+     215,   215,     4,     4,     4,   215,   215,   215,     4,     4,
+       4,   213,     4,     4,     4,     4,     4,   215,   215,   215,
+       4,     4,     4,     4,     4,   213,     4,     4,     4,     4,
+       4,     4,   215,   215,   215,     4,     4,   255,     4,     4,
+       4,   215,   215,   213,   213,   301,     4,     4,     4,     4,
+       4,     4,   213,     4,     4,     4,   418,     4,   502,     4,
+       4,     4,     4,     4,     4,     4,     4,   519,     4,     4,
+     213,     4,     4,     4,   215,   460,     4,   215,   215,   215,
+     484,     4,     4,   394,   215,     4,     4,   213,     4,   213,
+     213,     4,     4,   215,   215,     4,     4,     4,     4,   585,
+       4,   213,   616,     4,     7,     7,     7,     7,   212,   212,
+     212,     7,     7,     5,   212,   177,   178,   179,   180,   215,
+     280,   212,   212,     5,     5,     5,   212,     5,   233,   235,
+     212,   115,   116,   117,   118,   438,     5,     5,     5,     5,
+       7,     7,     7,     7,     7,   212,   212,     5,     7,     5,
+     242,    17,    18,   308,    20,    21,   311,   212,   212,   212,
+       5,   212,   212,   242,   212,     7,   212,   242,   212,   212,
+     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
+     212,   212,   235,   212,   212,   212,    18,   175,   596,   176,
+     280,   212,   212,   212,     5,   231,   254,   615,   300,    27,
+      28,   320,   321,   322,   324,    39,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      60,    61,    62,    63,    64,   246,   334,   335,   336,   339,
+     341,   343,   345,   346,   348,   349,   350,   351,   352,   353,
+     354,   355,   356,   357,   360,   361,   363,   365,   367,   334,
+       7,   330,   331,   332,     7,   411,   412,   413,     7,   452,
+     453,   454,     7,   476,   477,   478,     7,   442,   443,   444,
+     130,   131,   132,   133,   135,   371,   372,   373,   374,   375,
+     376,   377,     7,   549,   550,     7,   511,   512,   513,     7,
+     387,   388,   389,   143,   144,   145,   146,   147,   148,   401,
+     402,   403,   404,   405,   406,   407,   408,   151,   152,   153,
+     246,   380,   381,   382,   383,   384,   505,   507,   155,   156,
+     246,   505,   507,   564,   565,   566,   568,   158,   159,   160,
+     212,   505,   507,   572,   573,   574,   575,   577,   578,   584,
+       7,   622,   623,   196,   197,   198,   246,   646,   647,   648,
+     649,   650,   243,     7,   495,   496,   497,   138,   526,   528,
+     546,   330,     8,     8,     8,   323,   325,     3,     8,   337,
+     340,   342,   344,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,     4,   358,     4,   362,   364,   366,   368,     3,
+       8,     8,   333,     6,     3,   414,     6,     3,   455,     6,
+       3,   479,     6,     3,   445,     6,     3,     3,     6,   551,
+       3,     6,   514,     6,     3,   390,     6,     3,     4,     4,
+       4,     4,     4,     4,     3,     8,     4,     4,     4,     3,
+       8,   567,   569,     3,     8,     4,   576,     4,   579,     3,
+       8,     8,   624,     3,     6,     4,     4,     4,     3,     8,
+     212,   244,   245,   498,     6,     3,   529,     8,     6,     4,
+       4,   321,     4,     4,     4,     4,   213,   215,   213,   215,
+     213,   213,   213,   213,   213,   213,     4,   213,     4,     4,
+       4,     4,   335,   334,   332,   417,   413,   458,   454,   482,
+     478,   246,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   270,   273,   274,   275,   276,   277,   278,   281,
+     283,   285,   286,   287,   289,   291,   297,   346,   409,   427,
+     429,   431,   433,   434,   435,   436,   446,   447,   474,   505,
+     507,   520,   522,   524,   544,   444,   372,   125,   126,   127,
+     246,   256,   257,   258,   346,   448,   474,   505,   507,   520,
+     522,   524,   552,   553,   554,   555,   556,   558,   560,   550,
+     517,   513,   393,   389,   213,   213,   213,   213,   213,   213,
+     402,   215,   213,   213,   381,     4,     4,   565,   215,     4,
+     213,     4,   573,   187,   189,   190,   246,   346,   505,   507,
+     625,   626,   627,   628,   630,   623,   215,   215,   215,   647,
+       6,     3,   501,   497,     4,   212,   212,    40,    41,    42,
+     338,   212,   212,   212,    57,    58,    59,   359,   212,   212,
+     212,   212,     8,     8,     8,     8,     3,     8,   557,   559,
+       4,     8,     3,     8,     8,   212,   212,   212,   231,   631,
+       4,   629,     3,     8,   212,     8,   242,   447,     4,     4,
+     215,   554,     4,   213,     4,   626,   212,   212,     5,   212,
+       7,   632,   633,   634,     3,     6,   188,   191,   192,   193,
+     194,   635,   636,   637,   639,   640,   641,   642,   633,   638,
+       4,     4,     4,   643,     3,     8,     4,   215,   213,   213,
+       4,   636,   212,   212
   };
 
   const short
   Dhcp4Parser::yyr1_[] =
   {
-       0,   215,   217,   216,   218,   216,   219,   216,   220,   216,
-     221,   216,   222,   216,   223,   216,   224,   216,   225,   216,
-     226,   216,   227,   216,   228,   216,   229,   216,   230,   230,
-     230,   230,   230,   230,   230,   231,   233,   232,   234,   235,
-     235,   236,   236,   236,   238,   237,   239,   239,   240,   240,
-     240,   242,   241,   243,   243,   244,   244,   244,   245,   247,
-     246,   249,   248,   248,   250,   252,   251,   253,   253,   253,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   254,   254,   254,   254,   254,
-     254,   254,   254,   254,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   267,   266,   268,   270,
-     269,   271,   272,   273,   274,   275,   276,   278,   277,   279,
-     279,   279,   279,   279,   281,   280,   283,   282,   284,   285,
-     287,   286,   289,   288,   290,   291,   292,   293,   294,   295,
-     297,   296,   298,   298,   298,   299,   299,   299,   299,   299,
-     299,   299,   299,   299,   299,   301,   300,   303,   302,   305,
-     304,   306,   306,   308,   307,   309,   309,   310,   311,   312,
-     313,   315,   314,   317,   316,   318,   318,   318,   319,   319,
-     321,   320,   323,   322,   325,   324,   327,   326,   328,   328,
-     329,   329,   329,   331,   330,   332,   332,   332,   333,   333,
-     333,   333,   333,   333,   333,   333,   333,   333,   333,   333,
-     333,   333,   333,   333,   333,   333,   333,   333,   333,   333,
-     335,   334,   336,   336,   336,   338,   337,   340,   339,   342,
-     341,   343,   345,   344,   346,   347,   348,   349,   350,   351,
-     352,   353,   354,   356,   355,   357,   357,   357,   358,   360,
-     359,   362,   361,   364,   363,   366,   365,   368,   367,   369,
-     369,   369,   370,   370,   370,   370,   370,   371,   372,   373,
-     374,   375,   377,   376,   378,   378,   378,   379,   379,   379,
-     379,   379,   379,   380,   381,   382,   384,   383,   385,   385,
-     386,   386,   386,   388,   387,   390,   389,   391,   391,   391,
-     391,   392,   392,   394,   393,   396,   395,   398,   397,   399,
-     399,   399,   400,   400,   400,   400,   400,   400,   401,   402,
-     403,   404,   405,   406,   408,   407,   409,   409,   410,   410,
-     410,   412,   411,   414,   413,   415,   415,   415,   416,   416,
-     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
-     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
-     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
-     416,   416,   416,   416,   416,   416,   416,   416,   416,   416,
-     416,   416,   416,   416,   418,   417,   420,   419,   422,   421,
-     424,   423,   426,   425,   428,   427,   430,   429,   431,   432,
-     433,   435,   434,   436,   436,   436,   436,   437,   439,   438,
-     440,   440,   441,   441,   441,   443,   442,   444,   444,   444,
-     445,   445,   445,   445,   445,   445,   445,   445,   445,   445,
-     445,   445,   445,   445,   445,   445,   445,   445,   445,   445,
-     445,   445,   445,   445,   445,   445,   445,   445,   445,   445,
-     445,   445,   445,   445,   445,   445,   445,   445,   445,   445,
-     445,   447,   446,   449,   448,   450,   450,   451,   451,   451,
-     453,   452,   455,   454,   456,   456,   457,   457,   457,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   458,   459,
-     460,   461,   463,   462,   465,   464,   467,   466,   468,   470,
-     469,   471,   473,   472,   474,   474,   475,   475,   475,   477,
-     476,   479,   478,   480,   480,   481,   481,   481,   482,   482,
-     482,   482,   482,   482,   482,   482,   482,   482,   483,   485,
-     484,   486,   487,   488,   489,   490,   492,   491,   493,   493,
-     494,   494,   494,   496,   495,   498,   497,   499,   499,   499,
-     500,   500,   500,   500,   500,   500,   500,   502,   501,   504,
-     503,   506,   505,   508,   507,   509,   509,   510,   510,   510,
-     512,   511,   514,   513,   515,   515,   516,   516,   516,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   519,   518,   521,   520,   523,   522,
-     525,   524,   527,   526,   529,   528,   531,   530,   533,   532,
-     535,   534,   537,   536,   539,   538,   541,   540,   543,   542,
-     544,   544,   546,   545,   547,   547,   547,   549,   548,   550,
-     550,   551,   551,   551,   552,   552,   552,   552,   552,   552,
-     552,   552,   552,   552,   552,   552,   552,   552,   552,   553,
-     555,   554,   557,   556,   558,   559,   561,   560,   562,   562,
-     562,   563,   563,   563,   563,   563,   565,   564,   567,   566,
-     569,   568,   570,   570,   570,   571,   571,   571,   571,   571,
-     571,   572,   574,   573,   575,   577,   576,   579,   578,   581,
-     580,   582,   582,   582,   583,   583,   583,   583,   583,   583,
-     583,   583,   583,   583,   583,   583,   583,   583,   583,   583,
-     583,   583,   584,   586,   585,   587,   589,   588,   590,   591,
-     593,   592,   594,   594,   596,   595,   598,   597,   599,   600,
-     602,   601,   604,   603,   606,   605,   608,   607,   610,   609,
-     612,   611,   613,   613,   613,   614,   614,   616,   615,   617,
-     619,   618,   620,   620,   620,   622,   621,   623,   623,   623,
-     624,   624,   624,   624,   624,   624,   624,   625,   627,   626,
-     629,   628,   630,   630,   630,   632,   631,   633,   633,   633,
-     634,   634,   634,   634,   634,   636,   635,   637,   638,   639,
-     641,   640,   643,   642,   644,   644,   644,   645,   645,   645,
-     645,   646,   647,   648
+       0,   216,   218,   217,   219,   217,   220,   217,   221,   217,
+     222,   217,   223,   217,   224,   217,   225,   217,   226,   217,
+     227,   217,   228,   217,   229,   217,   230,   217,   231,   231,
+     231,   231,   231,   231,   231,   232,   234,   233,   235,   236,
+     236,   237,   237,   237,   239,   238,   240,   240,   241,   241,
+     241,   243,   242,   244,   244,   245,   245,   245,   246,   248,
+     247,   250,   249,   249,   251,   253,   252,   254,   254,   254,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   255,   255,   255,   255,   255,   255,   255,   255,
+     255,   255,   255,   255,   255,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   268,   267,   269,
+     271,   270,   272,   273,   274,   275,   276,   277,   279,   278,
+     280,   280,   280,   280,   280,   282,   281,   284,   283,   285,
+     286,   288,   287,   290,   289,   291,   292,   293,   294,   295,
+     296,   297,   299,   298,   300,   300,   300,   301,   301,   301,
+     301,   301,   301,   301,   301,   301,   301,   303,   302,   305,
+     304,   307,   306,   308,   308,   310,   309,   311,   311,   312,
+     313,   314,   315,   317,   316,   319,   318,   320,   320,   320,
+     321,   321,   323,   322,   325,   324,   327,   326,   329,   328,
+     330,   330,   331,   331,   331,   333,   332,   334,   334,   334,
+     335,   335,   335,   335,   335,   335,   335,   335,   335,   335,
+     335,   335,   335,   335,   335,   335,   335,   335,   335,   335,
+     335,   335,   337,   336,   338,   338,   338,   340,   339,   342,
+     341,   344,   343,   345,   347,   346,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   358,   357,   359,   359,   359,
+     360,   362,   361,   364,   363,   366,   365,   368,   367,   370,
+     369,   371,   371,   371,   372,   372,   372,   372,   372,   373,
+     374,   375,   376,   377,   379,   378,   380,   380,   380,   381,
+     381,   381,   381,   381,   381,   382,   383,   384,   386,   385,
+     387,   387,   388,   388,   388,   390,   389,   392,   391,   393,
+     393,   393,   393,   394,   394,   396,   395,   398,   397,   400,
+     399,   401,   401,   401,   402,   402,   402,   402,   402,   402,
+     403,   404,   405,   406,   407,   408,   410,   409,   411,   411,
+     412,   412,   412,   414,   413,   416,   415,   417,   417,   417,
+     418,   418,   418,   418,   418,   418,   418,   418,   418,   418,
+     418,   418,   418,   418,   418,   418,   418,   418,   418,   418,
+     418,   418,   418,   418,   418,   418,   418,   418,   418,   418,
+     418,   418,   418,   418,   418,   418,   418,   418,   418,   418,
+     418,   418,   418,   418,   418,   418,   418,   420,   419,   422,
+     421,   424,   423,   426,   425,   428,   427,   430,   429,   432,
+     431,   433,   434,   435,   437,   436,   438,   438,   438,   438,
+     439,   441,   440,   442,   442,   443,   443,   443,   445,   444,
+     446,   446,   446,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
+     447,   447,   447,   447,   447,   449,   448,   451,   450,   452,
+     452,   453,   453,   453,   455,   454,   457,   456,   458,   458,
+     459,   459,   459,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   461,   462,   463,   465,   464,   467,   466,
+     469,   468,   470,   472,   471,   473,   475,   474,   476,   476,
+     477,   477,   477,   479,   478,   481,   480,   482,   482,   483,
+     483,   483,   484,   484,   484,   484,   484,   484,   484,   484,
+     484,   484,   485,   487,   486,   488,   489,   490,   491,   492,
+     494,   493,   495,   495,   496,   496,   496,   498,   497,   500,
+     499,   501,   501,   501,   502,   502,   502,   502,   502,   502,
+     502,   504,   503,   506,   505,   508,   507,   510,   509,   511,
+     511,   512,   512,   512,   514,   513,   516,   515,   517,   517,
+     518,   518,   518,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   521,   520,
+     523,   522,   525,   524,   527,   526,   529,   528,   531,   530,
+     533,   532,   535,   534,   537,   536,   539,   538,   541,   540,
+     543,   542,   545,   544,   546,   546,   548,   547,   549,   549,
+     549,   551,   550,   552,   552,   553,   553,   553,   554,   554,
+     554,   554,   554,   554,   554,   554,   554,   554,   554,   554,
+     554,   554,   554,   555,   557,   556,   559,   558,   560,   561,
+     563,   562,   564,   564,   564,   565,   565,   565,   565,   565,
+     567,   566,   569,   568,   571,   570,   572,   572,   572,   573,
+     573,   573,   573,   573,   573,   574,   576,   575,   577,   579,
+     578,   581,   580,   583,   582,   584,   584,   584,   585,   585,
+     585,   585,   585,   585,   585,   585,   585,   585,   585,   585,
+     585,   585,   585,   585,   585,   585,   586,   588,   587,   589,
+     591,   590,   592,   593,   595,   594,   596,   596,   598,   597,
+     600,   599,   601,   602,   604,   603,   606,   605,   608,   607,
+     610,   609,   612,   611,   614,   613,   615,   615,   615,   616,
+     616,   618,   617,   619,   621,   620,   622,   622,   622,   624,
+     623,   625,   625,   625,   626,   626,   626,   626,   626,   626,
+     626,   627,   629,   628,   631,   630,   632,   632,   632,   634,
+     633,   635,   635,   635,   636,   636,   636,   636,   636,   638,
+     637,   639,   640,   641,   643,   642,   645,   644,   646,   646,
+     646,   647,   647,   647,   647,   648,   649,   650
   };
 
   const signed char
@@ -5914,78 +5926,78 @@ namespace isc { namespace dhcp {
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     0,     4,     3,     0,
-       4,     3,     3,     3,     3,     3,     3,     0,     4,     1,
-       1,     1,     1,     1,     0,     4,     0,     4,     3,     3,
-       0,     4,     0,     4,     3,     3,     3,     3,     3,     3,
-       0,     6,     1,     3,     2,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     1,     1,     0,     4,     1,     1,     3,     3,     3,
-       3,     0,     6,     0,     6,     1,     3,     2,     1,     1,
-       0,     4,     0,     4,     0,     6,     0,     6,     0,     1,
-       1,     3,     2,     0,     4,     1,     3,     2,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     0,     4,     3,
+       0,     4,     3,     3,     3,     3,     3,     3,     0,     4,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     3,
+       3,     0,     4,     0,     4,     3,     3,     3,     3,     3,
+       3,     3,     0,     6,     1,     3,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     1,     1,     0,     4,     1,     1,     3,
+       3,     3,     3,     0,     6,     0,     6,     1,     3,     2,
+       1,     1,     0,     4,     0,     4,     0,     6,     0,     6,
+       0,     1,     1,     3,     2,     0,     4,     1,     3,     2,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     3,     0,     4,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     0,     4,     1,     1,     1,     3,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     6,     1,
-       3,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     6,     1,     3,     2,     1,     1,     1,
-       1,     1,     1,     3,     3,     3,     0,     6,     0,     1,
+       1,     1,     0,     4,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     3,     0,     4,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     0,     4,     1,     1,     1,
+       3,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     6,     1,     3,     2,     1,
+       1,     1,     1,     1,     1,     3,     3,     3,     0,     6,
+       0,     1,     1,     3,     2,     0,     4,     0,     4,     1,
+       3,     2,     1,     1,     1,     0,     4,     0,     4,     0,
+       6,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     0,     6,     0,     1,
        1,     3,     2,     0,     4,     0,     4,     1,     3,     2,
-       1,     1,     1,     0,     4,     0,     4,     0,     6,     1,
-       3,     2,     1,     1,     1,     1,     1,     1,     3,     3,
-       3,     3,     3,     3,     0,     6,     0,     1,     1,     3,
-       2,     0,     4,     0,     4,     1,     3,     2,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     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,     0,     4,     0,     4,     3,     3,
-       3,     0,     4,     1,     1,     1,     1,     3,     0,     6,
-       0,     1,     1,     3,     2,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     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,     0,     4,     0,
+       4,     3,     3,     3,     0,     4,     1,     1,     1,     1,
+       3,     0,     6,     0,     1,     1,     3,     2,     0,     4,
+       1,     3,     2,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     6,     0,     4,     0,     1,     1,     3,     2,
-       0,     4,     0,     4,     0,     1,     1,     3,     2,     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,     2,     0,
-       4,     0,     4,     0,     1,     1,     3,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     1,     1,     3,     3,     3,     0,     6,     0,     1,
-       1,     3,     2,     0,     4,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     1,     1,     3,     2,
-       0,     4,     0,     4,     0,     1,     1,     3,     2,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
+       1,     1,     1,     1,     1,     0,     6,     0,     4,     0,
+       1,     1,     3,     2,     0,     4,     0,     4,     0,     1,
+       1,     3,     2,     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,     2,     0,     4,     0,     4,     0,     1,     1,
+       3,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     1,     1,     3,     3,     3,
+       0,     6,     0,     1,     1,     3,     2,     0,     4,     0,
+       4,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       1,     0,     4,     0,     4,     0,     4,     0,     6,     0,
+       1,     1,     3,     2,     0,     4,     0,     4,     0,     1,
+       1,     3,     2,     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,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
-       1,     1,     0,     6,     1,     3,     2,     0,     4,     0,
-       1,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       0,     4,     0,     6,     1,     1,     0,     6,     1,     3,
+       2,     0,     4,     0,     1,     1,     3,     2,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     0,     4,     3,     3,     0,     6,     1,     3,
-       2,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       1,     1,     1,     1,     0,     4,     0,     4,     3,     3,
        0,     6,     1,     3,     2,     1,     1,     1,     1,     1,
-       1,     3,     0,     4,     3,     0,     4,     0,     6,     0,
-       4,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       0,     4,     0,     4,     0,     6,     1,     3,     2,     1,
+       1,     1,     1,     1,     1,     3,     0,     4,     3,     0,
+       4,     0,     6,     0,     4,     1,     3,     2,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     0,     4,     3,     0,     4,     3,     3,
-       0,     4,     1,     1,     0,     4,     0,     4,     3,     3,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
-       0,     4,     1,     3,     2,     1,     1,     0,     6,     3,
-       0,     6,     1,     3,     2,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     1,     1,     3,     0,     4,
-       0,     6,     1,     3,     2,     0,     4,     1,     3,     2,
-       1,     1,     1,     1,     1,     0,     4,     3,     3,     3,
-       0,     4,     0,     6,     1,     3,     2,     1,     1,     1,
-       1,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     3,     0,     4,     3,
+       0,     4,     3,     3,     0,     4,     1,     1,     0,     4,
+       0,     4,     3,     3,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     6,     0,     4,     1,     3,     2,     1,
+       1,     0,     6,     3,     0,     6,     1,     3,     2,     0,
+       4,     1,     3,     2,     1,     1,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     6,     1,     3,     2,     0,
+       4,     1,     3,     2,     1,     1,     1,     1,     1,     0,
+       4,     3,     3,     3,     0,     4,     0,     6,     1,     3,
+       2,     1,     1,     1,     1,     3,     3,     3
   };
 
 
@@ -6005,19 +6017,20 @@ namespace isc { namespace dhcp {
   "\"service-sockets-max-retries\"", "\"sanity-checks\"",
   "\"lease-checks\"", "\"extended-info-checks\"", "\"echo-client-id\"",
   "\"match-client-id\"", "\"authoritative\"", "\"next-server\"",
-  "\"server-hostname\"", "\"boot-file-name\"", "\"lease-database\"",
-  "\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"",
-  "\"mysql\"", "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"",
-  "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
-  "\"connect-timeout\"", "\"read-timeout\"", "\"write-timeout\"",
-  "\"tcp-user-timeout\"", "\"max-reconnect-tries\"",
-  "\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"",
-  "\"serve-retry-exit\"", "\"serve-retry-continue\"", "\"max-row-errors\"",
-  "\"trust-anchor\"", "\"cert-file\"", "\"key-file\"", "\"cipher-list\"",
-  "\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"",
-  "\"renew-timer\"", "\"rebind-timer\"", "\"calculate-tee-times\"",
-  "\"t1-percent\"", "\"t2-percent\"", "\"cache-threshold\"",
-  "\"cache-max-age\"", "\"decline-probation-period\"", "\"server-tag\"",
+  "\"server-hostname\"", "\"boot-file-name\"", "\"offer-lft\"",
+  "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"",
+  "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"user\"",
+  "\"password\"", "\"host\"", "\"port\"", "\"persist\"",
+  "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
+  "\"read-timeout\"", "\"write-timeout\"", "\"tcp-user-timeout\"",
+  "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"",
+  "\"stop-retry-exit\"", "\"serve-retry-exit\"",
+  "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"",
+  "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", "\"valid-lifetime\"",
+  "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"",
+  "\"rebind-timer\"", "\"calculate-tee-times\"", "\"t1-percent\"",
+  "\"t2-percent\"", "\"cache-threshold\"", "\"cache-max-age\"",
+  "\"decline-probation-period\"", "\"server-tag\"",
   "\"statistic-default-sample-count\"", "\"statistic-default-sample-age\"",
   "\"ddns-send-updates\"", "\"ddns-override-no-update\"",
   "\"ddns-override-client-update\"", "\"ddns-replace-client-name\"",
@@ -6084,7 +6097,7 @@ namespace isc { namespace dhcp {
   "hostname_char_set", "$@25", "hostname_char_replacement", "$@26",
   "store_extended_info", "statistic_default_sample_count",
   "statistic_default_sample_age", "early_global_reservations_lookup",
-  "ip_reservations_unique", "reservations_lookup_first",
+  "ip_reservations_unique", "reservations_lookup_first", "offer_lft",
   "interfaces_config", "$@27", "interfaces_config_params",
   "interfaces_config_param", "sub_interfaces4", "$@28", "interfaces_list",
   "$@29", "dhcp_socket_type", "$@30", "socket_type", "outbound_interface",
@@ -6182,91 +6195,91 @@ namespace isc { namespace dhcp {
   const short
   Dhcp4Parser::yyrline_[] =
   {
-       0,   304,   304,   304,   305,   305,   306,   306,   307,   307,
-     308,   308,   309,   309,   310,   310,   311,   311,   312,   312,
-     313,   313,   314,   314,   315,   315,   316,   316,   324,   325,
-     326,   327,   328,   329,   330,   333,   338,   338,   349,   352,
-     353,   356,   361,   367,   372,   372,   379,   380,   383,   387,
-     391,   397,   397,   404,   405,   408,   412,   416,   426,   435,
-     435,   450,   450,   464,   467,   473,   473,   482,   483,   484,
-     491,   492,   493,   494,   495,   496,   497,   498,   499,   500,
-     501,   502,   503,   504,   505,   506,   507,   508,   509,   510,
-     511,   512,   513,   514,   515,   516,   517,   518,   519,   520,
-     521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
-     531,   532,   533,   534,   535,   536,   537,   538,   539,   540,
-     541,   542,   543,   544,   545,   546,   547,   548,   549,   550,
-     551,   552,   553,   554,   555,   558,   564,   570,   576,   582,
-     588,   594,   600,   606,   612,   618,   624,   624,   633,   639,
-     639,   648,   654,   660,   666,   672,   678,   684,   684,   693,
-     696,   699,   702,   705,   711,   711,   720,   720,   729,   735,
-     741,   741,   750,   750,   759,   765,   771,   777,   783,   789,
-     795,   795,   807,   808,   809,   814,   815,   816,   817,   818,
-     819,   820,   821,   822,   823,   826,   826,   835,   835,   846,
-     846,   854,   855,   858,   858,   866,   868,   872,   878,   884,
-     890,   896,   896,   909,   909,   920,   921,   922,   927,   928,
-     931,   931,   950,   950,   968,   968,   981,   981,   992,   993,
-     996,   997,   998,  1003,  1003,  1013,  1014,  1015,  1020,  1021,
-    1022,  1023,  1024,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
-    1032,  1033,  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,
-    1044,  1044,  1052,  1053,  1054,  1057,  1057,  1066,  1066,  1075,
-    1075,  1084,  1090,  1090,  1099,  1105,  1111,  1117,  1123,  1129,
-    1135,  1141,  1147,  1153,  1153,  1161,  1162,  1163,  1166,  1172,
-    1172,  1181,  1181,  1190,  1190,  1199,  1199,  1208,  1208,  1219,
-    1220,  1221,  1226,  1227,  1228,  1229,  1230,  1233,  1238,  1243,
-    1248,  1253,  1260,  1260,  1273,  1274,  1275,  1280,  1281,  1282,
-    1283,  1284,  1285,  1288,  1294,  1300,  1306,  1306,  1317,  1318,
-    1321,  1322,  1323,  1328,  1328,  1338,  1338,  1348,  1349,  1350,
-    1353,  1356,  1357,  1360,  1360,  1369,  1369,  1378,  1378,  1390,
-    1391,  1392,  1397,  1398,  1399,  1400,  1401,  1402,  1405,  1411,
-    1417,  1423,  1429,  1435,  1444,  1444,  1458,  1459,  1462,  1463,
-    1464,  1473,  1473,  1499,  1499,  1510,  1511,  1512,  1518,  1519,
-    1520,  1521,  1522,  1523,  1524,  1525,  1526,  1527,  1528,  1529,
-    1530,  1531,  1532,  1533,  1534,  1535,  1536,  1537,  1538,  1539,
-    1540,  1541,  1542,  1543,  1544,  1545,  1546,  1547,  1548,  1549,
-    1550,  1551,  1552,  1553,  1554,  1555,  1556,  1557,  1558,  1559,
-    1560,  1561,  1562,  1563,  1566,  1566,  1575,  1575,  1584,  1584,
-    1593,  1593,  1602,  1602,  1611,  1611,  1620,  1620,  1631,  1637,
-    1643,  1649,  1649,  1657,  1658,  1659,  1660,  1663,  1671,  1671,
-    1683,  1684,  1688,  1689,  1690,  1695,  1695,  1703,  1704,  1705,
-    1710,  1711,  1712,  1713,  1714,  1715,  1716,  1717,  1718,  1719,
-    1720,  1721,  1722,  1723,  1724,  1725,  1726,  1727,  1728,  1729,
-    1730,  1731,  1732,  1733,  1734,  1735,  1736,  1737,  1738,  1739,
-    1740,  1741,  1742,  1743,  1744,  1745,  1746,  1747,  1748,  1749,
-    1750,  1757,  1757,  1771,  1771,  1780,  1781,  1784,  1785,  1786,
-    1793,  1793,  1808,  1808,  1822,  1823,  1826,  1827,  1828,  1833,
-    1834,  1835,  1836,  1837,  1838,  1839,  1840,  1841,  1842,  1845,
-    1847,  1853,  1855,  1855,  1864,  1864,  1873,  1873,  1882,  1884,
-    1884,  1893,  1903,  1903,  1916,  1917,  1922,  1923,  1924,  1931,
-    1931,  1943,  1943,  1955,  1956,  1961,  1962,  1963,  1970,  1971,
-    1972,  1973,  1974,  1975,  1976,  1977,  1978,  1979,  1982,  1984,
-    1984,  1993,  1995,  1997,  2003,  2009,  2018,  2018,  2031,  2032,
-    2035,  2036,  2037,  2042,  2042,  2052,  2052,  2062,  2063,  2064,
-    2069,  2070,  2071,  2072,  2073,  2074,  2075,  2078,  2078,  2087,
-    2087,  2112,  2112,  2142,  2142,  2153,  2154,  2157,  2158,  2159,
-    2164,  2164,  2173,  2173,  2182,  2183,  2186,  2187,  2188,  2194,
-    2195,  2196,  2197,  2198,  2199,  2200,  2201,  2202,  2203,  2204,
-    2205,  2206,  2207,  2208,  2211,  2211,  2220,  2220,  2229,  2229,
-    2238,  2238,  2247,  2247,  2258,  2258,  2267,  2267,  2276,  2276,
-    2285,  2285,  2294,  2294,  2303,  2303,  2312,  2312,  2326,  2326,
-    2337,  2338,  2344,  2344,  2355,  2356,  2357,  2362,  2362,  2372,
-    2373,  2376,  2377,  2378,  2383,  2384,  2385,  2386,  2387,  2388,
-    2389,  2390,  2391,  2392,  2393,  2394,  2395,  2396,  2397,  2400,
-    2402,  2402,  2411,  2411,  2420,  2428,  2436,  2436,  2447,  2448,
-    2449,  2454,  2455,  2456,  2457,  2458,  2461,  2461,  2470,  2470,
-    2482,  2482,  2495,  2496,  2497,  2502,  2503,  2504,  2505,  2506,
-    2507,  2510,  2516,  2516,  2525,  2531,  2531,  2541,  2541,  2554,
-    2554,  2564,  2565,  2566,  2571,  2572,  2573,  2574,  2575,  2576,
-    2577,  2578,  2579,  2580,  2581,  2582,  2583,  2584,  2585,  2586,
-    2587,  2588,  2591,  2597,  2597,  2606,  2612,  2612,  2621,  2627,
-    2633,  2633,  2642,  2643,  2646,  2646,  2656,  2656,  2666,  2673,
-    2680,  2680,  2689,  2689,  2699,  2699,  2709,  2709,  2721,  2721,
-    2733,  2733,  2743,  2744,  2745,  2751,  2752,  2755,  2755,  2766,
-    2774,  2774,  2787,  2788,  2789,  2795,  2795,  2803,  2804,  2805,
-    2810,  2811,  2812,  2813,  2814,  2815,  2816,  2819,  2825,  2825,
-    2834,  2834,  2845,  2846,  2847,  2852,  2852,  2860,  2861,  2862,
-    2867,  2868,  2869,  2870,  2871,  2874,  2874,  2883,  2889,  2895,
-    2901,  2901,  2910,  2910,  2921,  2922,  2923,  2928,  2929,  2930,
-    2931,  2934,  2940,  2946
+       0,   305,   305,   305,   306,   306,   307,   307,   308,   308,
+     309,   309,   310,   310,   311,   311,   312,   312,   313,   313,
+     314,   314,   315,   315,   316,   316,   317,   317,   325,   326,
+     327,   328,   329,   330,   331,   334,   339,   339,   350,   353,
+     354,   357,   362,   368,   373,   373,   380,   381,   384,   388,
+     392,   398,   398,   405,   406,   409,   413,   417,   427,   436,
+     436,   451,   451,   465,   468,   474,   474,   483,   484,   485,
+     492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
+     502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
+     512,   513,   514,   515,   516,   517,   518,   519,   520,   521,
+     522,   523,   524,   525,   526,   527,   528,   529,   530,   531,
+     532,   533,   534,   535,   536,   537,   538,   539,   540,   541,
+     542,   543,   544,   545,   546,   547,   548,   549,   550,   551,
+     552,   553,   554,   555,   556,   557,   560,   566,   572,   578,
+     584,   590,   596,   602,   608,   614,   620,   626,   626,   635,
+     641,   641,   650,   656,   662,   668,   674,   680,   686,   686,
+     695,   698,   701,   704,   707,   713,   713,   722,   722,   731,
+     737,   743,   743,   752,   752,   761,   767,   773,   779,   785,
+     791,   797,   803,   803,   815,   816,   817,   822,   823,   824,
+     825,   826,   827,   828,   829,   830,   831,   834,   834,   843,
+     843,   854,   854,   862,   863,   866,   866,   874,   876,   880,
+     886,   892,   898,   904,   904,   917,   917,   928,   929,   930,
+     935,   936,   939,   939,   958,   958,   976,   976,   989,   989,
+    1000,  1001,  1004,  1005,  1006,  1011,  1011,  1021,  1022,  1023,
+    1028,  1029,  1030,  1031,  1032,  1033,  1034,  1035,  1036,  1037,
+    1038,  1039,  1040,  1041,  1042,  1043,  1044,  1045,  1046,  1047,
+    1048,  1049,  1052,  1052,  1060,  1061,  1062,  1065,  1065,  1074,
+    1074,  1083,  1083,  1092,  1098,  1098,  1107,  1113,  1119,  1125,
+    1131,  1137,  1143,  1149,  1155,  1161,  1161,  1169,  1170,  1171,
+    1174,  1180,  1180,  1189,  1189,  1198,  1198,  1207,  1207,  1216,
+    1216,  1227,  1228,  1229,  1234,  1235,  1236,  1237,  1238,  1241,
+    1246,  1251,  1256,  1261,  1268,  1268,  1281,  1282,  1283,  1288,
+    1289,  1290,  1291,  1292,  1293,  1296,  1302,  1308,  1314,  1314,
+    1325,  1326,  1329,  1330,  1331,  1336,  1336,  1346,  1346,  1356,
+    1357,  1358,  1361,  1364,  1365,  1368,  1368,  1377,  1377,  1386,
+    1386,  1398,  1399,  1400,  1405,  1406,  1407,  1408,  1409,  1410,
+    1413,  1419,  1425,  1431,  1437,  1443,  1452,  1452,  1466,  1467,
+    1470,  1471,  1472,  1481,  1481,  1507,  1507,  1518,  1519,  1520,
+    1526,  1527,  1528,  1529,  1530,  1531,  1532,  1533,  1534,  1535,
+    1536,  1537,  1538,  1539,  1540,  1541,  1542,  1543,  1544,  1545,
+    1546,  1547,  1548,  1549,  1550,  1551,  1552,  1553,  1554,  1555,
+    1556,  1557,  1558,  1559,  1560,  1561,  1562,  1563,  1564,  1565,
+    1566,  1567,  1568,  1569,  1570,  1571,  1572,  1575,  1575,  1584,
+    1584,  1593,  1593,  1602,  1602,  1611,  1611,  1620,  1620,  1629,
+    1629,  1640,  1646,  1652,  1658,  1658,  1666,  1667,  1668,  1669,
+    1672,  1680,  1680,  1692,  1693,  1697,  1698,  1699,  1704,  1704,
+    1712,  1713,  1714,  1719,  1720,  1721,  1722,  1723,  1724,  1725,
+    1726,  1727,  1728,  1729,  1730,  1731,  1732,  1733,  1734,  1735,
+    1736,  1737,  1738,  1739,  1740,  1741,  1742,  1743,  1744,  1745,
+    1746,  1747,  1748,  1749,  1750,  1751,  1752,  1753,  1754,  1755,
+    1756,  1757,  1758,  1759,  1760,  1767,  1767,  1781,  1781,  1790,
+    1791,  1794,  1795,  1796,  1803,  1803,  1818,  1818,  1832,  1833,
+    1836,  1837,  1838,  1843,  1844,  1845,  1846,  1847,  1848,  1849,
+    1850,  1851,  1852,  1855,  1857,  1863,  1865,  1865,  1874,  1874,
+    1883,  1883,  1892,  1894,  1894,  1903,  1913,  1913,  1926,  1927,
+    1932,  1933,  1934,  1941,  1941,  1953,  1953,  1965,  1966,  1971,
+    1972,  1973,  1980,  1981,  1982,  1983,  1984,  1985,  1986,  1987,
+    1988,  1989,  1992,  1994,  1994,  2003,  2005,  2007,  2013,  2019,
+    2028,  2028,  2041,  2042,  2045,  2046,  2047,  2052,  2052,  2062,
+    2062,  2072,  2073,  2074,  2079,  2080,  2081,  2082,  2083,  2084,
+    2085,  2088,  2088,  2097,  2097,  2122,  2122,  2152,  2152,  2163,
+    2164,  2167,  2168,  2169,  2174,  2174,  2183,  2183,  2192,  2193,
+    2196,  2197,  2198,  2204,  2205,  2206,  2207,  2208,  2209,  2210,
+    2211,  2212,  2213,  2214,  2215,  2216,  2217,  2218,  2221,  2221,
+    2230,  2230,  2239,  2239,  2248,  2248,  2257,  2257,  2268,  2268,
+    2277,  2277,  2286,  2286,  2295,  2295,  2304,  2304,  2313,  2313,
+    2322,  2322,  2336,  2336,  2347,  2348,  2354,  2354,  2365,  2366,
+    2367,  2372,  2372,  2382,  2383,  2386,  2387,  2388,  2393,  2394,
+    2395,  2396,  2397,  2398,  2399,  2400,  2401,  2402,  2403,  2404,
+    2405,  2406,  2407,  2410,  2412,  2412,  2421,  2421,  2430,  2438,
+    2446,  2446,  2457,  2458,  2459,  2464,  2465,  2466,  2467,  2468,
+    2471,  2471,  2480,  2480,  2492,  2492,  2505,  2506,  2507,  2512,
+    2513,  2514,  2515,  2516,  2517,  2520,  2526,  2526,  2535,  2541,
+    2541,  2551,  2551,  2564,  2564,  2574,  2575,  2576,  2581,  2582,
+    2583,  2584,  2585,  2586,  2587,  2588,  2589,  2590,  2591,  2592,
+    2593,  2594,  2595,  2596,  2597,  2598,  2601,  2607,  2607,  2616,
+    2622,  2622,  2631,  2637,  2643,  2643,  2652,  2653,  2656,  2656,
+    2666,  2666,  2676,  2683,  2690,  2690,  2699,  2699,  2709,  2709,
+    2719,  2719,  2731,  2731,  2743,  2743,  2753,  2754,  2755,  2761,
+    2762,  2765,  2765,  2776,  2784,  2784,  2797,  2798,  2799,  2805,
+    2805,  2813,  2814,  2815,  2820,  2821,  2822,  2823,  2824,  2825,
+    2826,  2829,  2835,  2835,  2844,  2844,  2855,  2856,  2857,  2862,
+    2862,  2870,  2871,  2872,  2877,  2878,  2879,  2880,  2881,  2884,
+    2884,  2893,  2899,  2905,  2911,  2911,  2920,  2920,  2931,  2932,
+    2933,  2938,  2939,  2940,  2941,  2944,  2950,  2956
   };
 
   void
@@ -6299,9 +6312,9 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy"
 } } // isc::dhcp
-#line 6303 "dhcp4_parser.cc"
+#line 6316 "dhcp4_parser.cc"
 
-#line 2952 "dhcp4_parser.yy"
+#line 2962 "dhcp4_parser.yy"
 
 
 void
index bcad63c0c59307c042b7b3577e3ec1b49868aa93..8d0a3714a07a699902d64b8978f854a7b96e9b3e 100644 (file)
@@ -1,8 +1,8 @@
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
 
 // Skeleton interface for Bison LALR(1) parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
 // GNU General Public License for more details.
 
 // You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 // As a special exception, you may create a larger work that contains
 // part or all of the Bison parser skeleton and distribute that work
@@ -104,9 +104,9 @@ using namespace std;
 #endif
 # include "location.hh"
 #include <typeinfo>
-#ifndef PARSER4__ASSERT
+#ifndef YY_ASSERT
 # include <cassert>
-# define PARSER4__ASSERT assert
+# define YY_ASSERT assert
 #endif
 
 
@@ -128,23 +128,17 @@ using namespace std;
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YY_USE(E) ((void) (E))
+# define YYUSE(E) ((void) (E))
 #else
-# define YY_USE(E) /* empty */
+# define YYUSE(E) /* empty */
 #endif
 
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
-# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
-#  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
-    _Pragma ("GCC diagnostic push")                                     \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
-# else
-#  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
     _Pragma ("GCC diagnostic push")                                     \
     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# endif
 # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
     _Pragma ("GCC diagnostic pop")
 #else
@@ -206,7 +200,7 @@ using namespace std;
 
 #line 14 "dhcp4_parser.yy"
 namespace isc { namespace dhcp {
-#line 210 "dhcp4_parser.h"
+#line 204 "dhcp4_parser.h"
 
 
 
@@ -215,49 +209,44 @@ namespace isc { namespace dhcp {
   class Dhcp4Parser
   {
   public:
-#ifdef PARSER4_STYPE
-# ifdef __GNUC__
-#  pragma GCC message "bison: do not #define PARSER4_STYPE in C++, use %define api.value.type"
-# endif
-    typedef PARSER4_STYPE value_type;
-#else
+#ifndef PARSER4_STYPE
   /// A buffer to store and retrieve objects.
   ///
   /// Sort of a variant, but does not keep track of the nature
   /// of the stored data, since that knowledge is available
   /// via the current parser state.
-  class value_type
+  class semantic_type
   {
   public:
     /// Type of *this.
-    typedef value_type self_type;
+    typedef semantic_type self_type;
 
     /// Empty construction.
-    value_type () YY_NOEXCEPT
-      : yyraw_ ()
+    semantic_type () YY_NOEXCEPT
+      : yybuffer_ ()
       , yytypeid_ (YY_NULLPTR)
     {}
 
     /// Construct and fill.
     template <typename T>
-    value_type (YY_RVREF (T) t)
+    semantic_type (YY_RVREF (T) t)
       : yytypeid_ (&typeid (T))
     {
-      PARSER4__ASSERT (sizeof (T) <= size);
+      YY_ASSERT (sizeof (T) <= size);
       new (yyas_<T> ()) T (YY_MOVE (t));
     }
 
 #if 201103L <= YY_CPLUSPLUS
     /// Non copyable.
-    value_type (const self_type&) = delete;
+    semantic_type (const self_type&) = delete;
     /// Non copyable.
     self_type& operator= (const self_type&) = delete;
 #endif
 
     /// Destruction, allowed only if empty.
-    ~value_type () YY_NOEXCEPT
+    ~semantic_type () YY_NOEXCEPT
     {
-      PARSER4__ASSERT (!yytypeid_);
+      YY_ASSERT (!yytypeid_);
     }
 
 # if 201103L <= YY_CPLUSPLUS
@@ -266,8 +255,8 @@ namespace isc { namespace dhcp {
     T&
     emplace (U&&... u)
     {
-      PARSER4__ASSERT (!yytypeid_);
-      PARSER4__ASSERT (sizeof (T) <= size);
+      YY_ASSERT (!yytypeid_);
+      YY_ASSERT (sizeof (T) <= size);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T (std::forward <U>(u)...);
     }
@@ -277,8 +266,8 @@ namespace isc { namespace dhcp {
     T&
     emplace ()
     {
-      PARSER4__ASSERT (!yytypeid_);
-      PARSER4__ASSERT (sizeof (T) <= size);
+      YY_ASSERT (!yytypeid_);
+      YY_ASSERT (sizeof (T) <= size);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T ();
     }
@@ -288,8 +277,8 @@ namespace isc { namespace dhcp {
     T&
     emplace (const T& t)
     {
-      PARSER4__ASSERT (!yytypeid_);
-      PARSER4__ASSERT (sizeof (T) <= size);
+      YY_ASSERT (!yytypeid_);
+      YY_ASSERT (sizeof (T) <= size);
       yytypeid_ = & typeid (T);
       return *new (yyas_<T> ()) T (t);
     }
@@ -318,9 +307,9 @@ namespace isc { namespace dhcp {
     T&
     as () YY_NOEXCEPT
     {
-      PARSER4__ASSERT (yytypeid_);
-      PARSER4__ASSERT (*yytypeid_ == typeid (T));
-      PARSER4__ASSERT (sizeof (T) <= size);
+      YY_ASSERT (yytypeid_);
+      YY_ASSERT (*yytypeid_ == typeid (T));
+      YY_ASSERT (sizeof (T) <= size);
       return *yyas_<T> ();
     }
 
@@ -329,9 +318,9 @@ namespace isc { namespace dhcp {
     const T&
     as () const YY_NOEXCEPT
     {
-      PARSER4__ASSERT (yytypeid_);
-      PARSER4__ASSERT (*yytypeid_ == typeid (T));
-      PARSER4__ASSERT (sizeof (T) <= size);
+      YY_ASSERT (yytypeid_);
+      YY_ASSERT (*yytypeid_ == typeid (T));
+      YY_ASSERT (sizeof (T) <= size);
       return *yyas_<T> ();
     }
 
@@ -347,8 +336,8 @@ namespace isc { namespace dhcp {
     void
     swap (self_type& that) YY_NOEXCEPT
     {
-      PARSER4__ASSERT (yytypeid_);
-      PARSER4__ASSERT (*yytypeid_ == *that.yytypeid_);
+      YY_ASSERT (yytypeid_);
+      YY_ASSERT (*yytypeid_ == *that.yytypeid_);
       std::swap (as<T> (), that.as<T> ());
     }
 
@@ -399,7 +388,7 @@ namespace isc { namespace dhcp {
   private:
 #if YY_CPLUSPLUS < 201103L
     /// Non copyable.
-    value_type (const self_type&);
+    semantic_type (const self_type&);
     /// Non copyable.
     self_type& operator= (const self_type&);
 #endif
@@ -409,7 +398,7 @@ namespace isc { namespace dhcp {
     T*
     yyas_ () YY_NOEXCEPT
     {
-      void *yyp = yyraw_;
+      void *yyp = yybuffer_.yyraw;
       return static_cast<T*> (yyp);
      }
 
@@ -418,7 +407,7 @@ namespace isc { namespace dhcp {
     const T*
     yyas_ () const YY_NOEXCEPT
     {
-      const void *yyp = yyraw_;
+      const void *yyp = yybuffer_.yyraw;
       return static_cast<const T*> (yyp);
      }
 
@@ -456,19 +445,18 @@ namespace isc { namespace dhcp {
     union
     {
       /// Strongest alignment constraints.
-      long double yyalign_me_;
+      long double yyalign_me;
       /// A buffer large enough to store any of the semantic values.
-      char yyraw_[size];
-    };
+      char yyraw[size];
+    } yybuffer_;
 
     /// Whether the content is built: if defined, the name of the stored type.
     const std::type_info *yytypeid_;
   };
 
+#else
+    typedef PARSER4_STYPE semantic_type;
 #endif
-    /// Backward compatibility (Bison 3.8).
-    typedef value_type semantic_type;
-
     /// Symbol locations.
     typedef location location_type;
 
@@ -531,193 +519,194 @@ namespace isc { namespace dhcp {
     TOKEN_NEXT_SERVER = 287,       // "next-server"
     TOKEN_SERVER_HOSTNAME = 288,   // "server-hostname"
     TOKEN_BOOT_FILE_NAME = 289,    // "boot-file-name"
-    TOKEN_LEASE_DATABASE = 290,    // "lease-database"
-    TOKEN_HOSTS_DATABASE = 291,    // "hosts-database"
-    TOKEN_HOSTS_DATABASES = 292,   // "hosts-databases"
-    TOKEN_TYPE = 293,              // "type"
-    TOKEN_MEMFILE = 294,           // "memfile"
-    TOKEN_MYSQL = 295,             // "mysql"
-    TOKEN_POSTGRESQL = 296,        // "postgresql"
-    TOKEN_USER = 297,              // "user"
-    TOKEN_PASSWORD = 298,          // "password"
-    TOKEN_HOST = 299,              // "host"
-    TOKEN_PORT = 300,              // "port"
-    TOKEN_PERSIST = 301,           // "persist"
-    TOKEN_LFC_INTERVAL = 302,      // "lfc-interval"
-    TOKEN_READONLY = 303,          // "readonly"
-    TOKEN_CONNECT_TIMEOUT = 304,   // "connect-timeout"
-    TOKEN_READ_TIMEOUT = 305,      // "read-timeout"
-    TOKEN_WRITE_TIMEOUT = 306,     // "write-timeout"
-    TOKEN_TCP_USER_TIMEOUT = 307,  // "tcp-user-timeout"
-    TOKEN_MAX_RECONNECT_TRIES = 308, // "max-reconnect-tries"
-    TOKEN_RECONNECT_WAIT_TIME = 309, // "reconnect-wait-time"
-    TOKEN_ON_FAIL = 310,           // "on-fail"
-    TOKEN_STOP_RETRY_EXIT = 311,   // "stop-retry-exit"
-    TOKEN_SERVE_RETRY_EXIT = 312,  // "serve-retry-exit"
-    TOKEN_SERVE_RETRY_CONTINUE = 313, // "serve-retry-continue"
-    TOKEN_MAX_ROW_ERRORS = 314,    // "max-row-errors"
-    TOKEN_TRUST_ANCHOR = 315,      // "trust-anchor"
-    TOKEN_CERT_FILE = 316,         // "cert-file"
-    TOKEN_KEY_FILE = 317,          // "key-file"
-    TOKEN_CIPHER_LIST = 318,       // "cipher-list"
-    TOKEN_VALID_LIFETIME = 319,    // "valid-lifetime"
-    TOKEN_MIN_VALID_LIFETIME = 320, // "min-valid-lifetime"
-    TOKEN_MAX_VALID_LIFETIME = 321, // "max-valid-lifetime"
-    TOKEN_RENEW_TIMER = 322,       // "renew-timer"
-    TOKEN_REBIND_TIMER = 323,      // "rebind-timer"
-    TOKEN_CALCULATE_TEE_TIMES = 324, // "calculate-tee-times"
-    TOKEN_T1_PERCENT = 325,        // "t1-percent"
-    TOKEN_T2_PERCENT = 326,        // "t2-percent"
-    TOKEN_CACHE_THRESHOLD = 327,   // "cache-threshold"
-    TOKEN_CACHE_MAX_AGE = 328,     // "cache-max-age"
-    TOKEN_DECLINE_PROBATION_PERIOD = 329, // "decline-probation-period"
-    TOKEN_SERVER_TAG = 330,        // "server-tag"
-    TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 331, // "statistic-default-sample-count"
-    TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 332, // "statistic-default-sample-age"
-    TOKEN_DDNS_SEND_UPDATES = 333, // "ddns-send-updates"
-    TOKEN_DDNS_OVERRIDE_NO_UPDATE = 334, // "ddns-override-no-update"
-    TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 335, // "ddns-override-client-update"
-    TOKEN_DDNS_REPLACE_CLIENT_NAME = 336, // "ddns-replace-client-name"
-    TOKEN_DDNS_GENERATED_PREFIX = 337, // "ddns-generated-prefix"
-    TOKEN_DDNS_QUALIFYING_SUFFIX = 338, // "ddns-qualifying-suffix"
-    TOKEN_DDNS_UPDATE_ON_RENEW = 339, // "ddns-update-on-renew"
-    TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 340, // "ddns-use-conflict-resolution"
-    TOKEN_STORE_EXTENDED_INFO = 341, // "store-extended-info"
-    TOKEN_SUBNET4 = 342,           // "subnet4"
-    TOKEN_SUBNET_4O6_INTERFACE = 343, // "4o6-interface"
-    TOKEN_SUBNET_4O6_INTERFACE_ID = 344, // "4o6-interface-id"
-    TOKEN_SUBNET_4O6_SUBNET = 345, // "4o6-subnet"
-    TOKEN_OPTION_DEF = 346,        // "option-def"
-    TOKEN_OPTION_DATA = 347,       // "option-data"
-    TOKEN_NAME = 348,              // "name"
-    TOKEN_DATA = 349,              // "data"
-    TOKEN_CODE = 350,              // "code"
-    TOKEN_SPACE = 351,             // "space"
-    TOKEN_CSV_FORMAT = 352,        // "csv-format"
-    TOKEN_ALWAYS_SEND = 353,       // "always-send"
-    TOKEN_NEVER_SEND = 354,        // "never-send"
-    TOKEN_RECORD_TYPES = 355,      // "record-types"
-    TOKEN_ENCAPSULATE = 356,       // "encapsulate"
-    TOKEN_ARRAY = 357,             // "array"
-    TOKEN_PARKED_PACKET_LIMIT = 358, // "parked-packet-limit"
-    TOKEN_ALLOCATOR = 359,         // "allocator"
-    TOKEN_SHARED_NETWORKS = 360,   // "shared-networks"
-    TOKEN_POOLS = 361,             // "pools"
-    TOKEN_POOL = 362,              // "pool"
-    TOKEN_USER_CONTEXT = 363,      // "user-context"
-    TOKEN_COMMENT = 364,           // "comment"
-    TOKEN_SUBNET = 365,            // "subnet"
-    TOKEN_INTERFACE = 366,         // "interface"
-    TOKEN_ID = 367,                // "id"
-    TOKEN_RESERVATION_MODE = 368,  // "reservation-mode"
-    TOKEN_DISABLED = 369,          // "disabled"
-    TOKEN_OUT_OF_POOL = 370,       // "out-of-pool"
-    TOKEN_GLOBAL = 371,            // "global"
-    TOKEN_ALL = 372,               // "all"
-    TOKEN_RESERVATIONS_GLOBAL = 373, // "reservations-global"
-    TOKEN_RESERVATIONS_IN_SUBNET = 374, // "reservations-in-subnet"
-    TOKEN_RESERVATIONS_OUT_OF_POOL = 375, // "reservations-out-of-pool"
-    TOKEN_HOST_RESERVATION_IDENTIFIERS = 376, // "host-reservation-identifiers"
-    TOKEN_CLIENT_CLASSES = 377,    // "client-classes"
-    TOKEN_REQUIRE_CLIENT_CLASSES = 378, // "require-client-classes"
-    TOKEN_TEST = 379,              // "test"
-    TOKEN_TEMPLATE_TEST = 380,     // "template-test"
-    TOKEN_ONLY_IF_REQUIRED = 381,  // "only-if-required"
-    TOKEN_CLIENT_CLASS = 382,      // "client-class"
-    TOKEN_RESERVATIONS = 383,      // "reservations"
-    TOKEN_DUID = 384,              // "duid"
-    TOKEN_HW_ADDRESS = 385,        // "hw-address"
-    TOKEN_CIRCUIT_ID = 386,        // "circuit-id"
-    TOKEN_CLIENT_ID = 387,         // "client-id"
-    TOKEN_HOSTNAME = 388,          // "hostname"
-    TOKEN_FLEX_ID = 389,           // "flex-id"
-    TOKEN_RELAY = 390,             // "relay"
-    TOKEN_IP_ADDRESS = 391,        // "ip-address"
-    TOKEN_IP_ADDRESSES = 392,      // "ip-addresses"
-    TOKEN_HOOKS_LIBRARIES = 393,   // "hooks-libraries"
-    TOKEN_LIBRARY = 394,           // "library"
-    TOKEN_PARAMETERS = 395,        // "parameters"
-    TOKEN_EXPIRED_LEASES_PROCESSING = 396, // "expired-leases-processing"
-    TOKEN_RECLAIM_TIMER_WAIT_TIME = 397, // "reclaim-timer-wait-time"
-    TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 398, // "flush-reclaimed-timer-wait-time"
-    TOKEN_HOLD_RECLAIMED_TIME = 399, // "hold-reclaimed-time"
-    TOKEN_MAX_RECLAIM_LEASES = 400, // "max-reclaim-leases"
-    TOKEN_MAX_RECLAIM_TIME = 401,  // "max-reclaim-time"
-    TOKEN_UNWARNED_RECLAIM_CYCLES = 402, // "unwarned-reclaim-cycles"
-    TOKEN_DHCP4O6_PORT = 403,      // "dhcp4o6-port"
-    TOKEN_DHCP_MULTI_THREADING = 404, // "multi-threading"
-    TOKEN_ENABLE_MULTI_THREADING = 405, // "enable-multi-threading"
-    TOKEN_THREAD_POOL_SIZE = 406,  // "thread-pool-size"
-    TOKEN_PACKET_QUEUE_SIZE = 407, // "packet-queue-size"
-    TOKEN_CONTROL_SOCKET = 408,    // "control-socket"
-    TOKEN_SOCKET_TYPE = 409,       // "socket-type"
-    TOKEN_SOCKET_NAME = 410,       // "socket-name"
-    TOKEN_DHCP_QUEUE_CONTROL = 411, // "dhcp-queue-control"
-    TOKEN_ENABLE_QUEUE = 412,      // "enable-queue"
-    TOKEN_QUEUE_TYPE = 413,        // "queue-type"
-    TOKEN_CAPACITY = 414,          // "capacity"
-    TOKEN_DHCP_DDNS = 415,         // "dhcp-ddns"
-    TOKEN_ENABLE_UPDATES = 416,    // "enable-updates"
-    TOKEN_QUALIFYING_SUFFIX = 417, // "qualifying-suffix"
-    TOKEN_SERVER_IP = 418,         // "server-ip"
-    TOKEN_SERVER_PORT = 419,       // "server-port"
-    TOKEN_SENDER_IP = 420,         // "sender-ip"
-    TOKEN_SENDER_PORT = 421,       // "sender-port"
-    TOKEN_MAX_QUEUE_SIZE = 422,    // "max-queue-size"
-    TOKEN_NCR_PROTOCOL = 423,      // "ncr-protocol"
-    TOKEN_NCR_FORMAT = 424,        // "ncr-format"
-    TOKEN_OVERRIDE_NO_UPDATE = 425, // "override-no-update"
-    TOKEN_OVERRIDE_CLIENT_UPDATE = 426, // "override-client-update"
-    TOKEN_REPLACE_CLIENT_NAME = 427, // "replace-client-name"
-    TOKEN_GENERATED_PREFIX = 428,  // "generated-prefix"
-    TOKEN_TCP = 429,               // "tcp"
-    TOKEN_JSON = 430,              // "JSON"
-    TOKEN_WHEN_PRESENT = 431,      // "when-present"
-    TOKEN_NEVER = 432,             // "never"
-    TOKEN_ALWAYS = 433,            // "always"
-    TOKEN_WHEN_NOT_PRESENT = 434,  // "when-not-present"
-    TOKEN_HOSTNAME_CHAR_SET = 435, // "hostname-char-set"
-    TOKEN_HOSTNAME_CHAR_REPLACEMENT = 436, // "hostname-char-replacement"
-    TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 437, // "early-global-reservations-lookup"
-    TOKEN_IP_RESERVATIONS_UNIQUE = 438, // "ip-reservations-unique"
-    TOKEN_RESERVATIONS_LOOKUP_FIRST = 439, // "reservations-lookup-first"
-    TOKEN_LOGGERS = 440,           // "loggers"
-    TOKEN_OUTPUT_OPTIONS = 441,    // "output_options"
-    TOKEN_OUTPUT = 442,            // "output"
-    TOKEN_DEBUGLEVEL = 443,        // "debuglevel"
-    TOKEN_SEVERITY = 444,          // "severity"
-    TOKEN_FLUSH = 445,             // "flush"
-    TOKEN_MAXSIZE = 446,           // "maxsize"
-    TOKEN_MAXVER = 447,            // "maxver"
-    TOKEN_PATTERN = 448,           // "pattern"
-    TOKEN_COMPATIBILITY = 449,     // "compatibility"
-    TOKEN_LENIENT_OPTION_PARSING = 450, // "lenient-option-parsing"
-    TOKEN_IGNORE_RAI_LINK_SEL = 451, // "ignore-rai-link-selection"
-    TOKEN_EXCLUDE_FIRST_LAST_24 = 452, // "exclude-first-last-24"
-    TOKEN_TOPLEVEL_JSON = 453,     // TOPLEVEL_JSON
-    TOKEN_TOPLEVEL_DHCP4 = 454,    // TOPLEVEL_DHCP4
-    TOKEN_SUB_DHCP4 = 455,         // SUB_DHCP4
-    TOKEN_SUB_INTERFACES4 = 456,   // SUB_INTERFACES4
-    TOKEN_SUB_SUBNET4 = 457,       // SUB_SUBNET4
-    TOKEN_SUB_POOL4 = 458,         // SUB_POOL4
-    TOKEN_SUB_RESERVATION = 459,   // SUB_RESERVATION
-    TOKEN_SUB_OPTION_DEFS = 460,   // SUB_OPTION_DEFS
-    TOKEN_SUB_OPTION_DEF = 461,    // SUB_OPTION_DEF
-    TOKEN_SUB_OPTION_DATA = 462,   // SUB_OPTION_DATA
-    TOKEN_SUB_HOOKS_LIBRARY = 463, // SUB_HOOKS_LIBRARY
-    TOKEN_SUB_DHCP_DDNS = 464,     // SUB_DHCP_DDNS
-    TOKEN_SUB_CONFIG_CONTROL = 465, // SUB_CONFIG_CONTROL
-    TOKEN_STRING = 466,            // "constant string"
-    TOKEN_INTEGER = 467,           // "integer"
-    TOKEN_FLOAT = 468,             // "floating point"
-    TOKEN_BOOLEAN = 469            // "boolean"
+    TOKEN_OFFER_LFT = 290,         // "offer-lft"
+    TOKEN_LEASE_DATABASE = 291,    // "lease-database"
+    TOKEN_HOSTS_DATABASE = 292,    // "hosts-database"
+    TOKEN_HOSTS_DATABASES = 293,   // "hosts-databases"
+    TOKEN_TYPE = 294,              // "type"
+    TOKEN_MEMFILE = 295,           // "memfile"
+    TOKEN_MYSQL = 296,             // "mysql"
+    TOKEN_POSTGRESQL = 297,        // "postgresql"
+    TOKEN_USER = 298,              // "user"
+    TOKEN_PASSWORD = 299,          // "password"
+    TOKEN_HOST = 300,              // "host"
+    TOKEN_PORT = 301,              // "port"
+    TOKEN_PERSIST = 302,           // "persist"
+    TOKEN_LFC_INTERVAL = 303,      // "lfc-interval"
+    TOKEN_READONLY = 304,          // "readonly"
+    TOKEN_CONNECT_TIMEOUT = 305,   // "connect-timeout"
+    TOKEN_READ_TIMEOUT = 306,      // "read-timeout"
+    TOKEN_WRITE_TIMEOUT = 307,     // "write-timeout"
+    TOKEN_TCP_USER_TIMEOUT = 308,  // "tcp-user-timeout"
+    TOKEN_MAX_RECONNECT_TRIES = 309, // "max-reconnect-tries"
+    TOKEN_RECONNECT_WAIT_TIME = 310, // "reconnect-wait-time"
+    TOKEN_ON_FAIL = 311,           // "on-fail"
+    TOKEN_STOP_RETRY_EXIT = 312,   // "stop-retry-exit"
+    TOKEN_SERVE_RETRY_EXIT = 313,  // "serve-retry-exit"
+    TOKEN_SERVE_RETRY_CONTINUE = 314, // "serve-retry-continue"
+    TOKEN_MAX_ROW_ERRORS = 315,    // "max-row-errors"
+    TOKEN_TRUST_ANCHOR = 316,      // "trust-anchor"
+    TOKEN_CERT_FILE = 317,         // "cert-file"
+    TOKEN_KEY_FILE = 318,          // "key-file"
+    TOKEN_CIPHER_LIST = 319,       // "cipher-list"
+    TOKEN_VALID_LIFETIME = 320,    // "valid-lifetime"
+    TOKEN_MIN_VALID_LIFETIME = 321, // "min-valid-lifetime"
+    TOKEN_MAX_VALID_LIFETIME = 322, // "max-valid-lifetime"
+    TOKEN_RENEW_TIMER = 323,       // "renew-timer"
+    TOKEN_REBIND_TIMER = 324,      // "rebind-timer"
+    TOKEN_CALCULATE_TEE_TIMES = 325, // "calculate-tee-times"
+    TOKEN_T1_PERCENT = 326,        // "t1-percent"
+    TOKEN_T2_PERCENT = 327,        // "t2-percent"
+    TOKEN_CACHE_THRESHOLD = 328,   // "cache-threshold"
+    TOKEN_CACHE_MAX_AGE = 329,     // "cache-max-age"
+    TOKEN_DECLINE_PROBATION_PERIOD = 330, // "decline-probation-period"
+    TOKEN_SERVER_TAG = 331,        // "server-tag"
+    TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 332, // "statistic-default-sample-count"
+    TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 333, // "statistic-default-sample-age"
+    TOKEN_DDNS_SEND_UPDATES = 334, // "ddns-send-updates"
+    TOKEN_DDNS_OVERRIDE_NO_UPDATE = 335, // "ddns-override-no-update"
+    TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 336, // "ddns-override-client-update"
+    TOKEN_DDNS_REPLACE_CLIENT_NAME = 337, // "ddns-replace-client-name"
+    TOKEN_DDNS_GENERATED_PREFIX = 338, // "ddns-generated-prefix"
+    TOKEN_DDNS_QUALIFYING_SUFFIX = 339, // "ddns-qualifying-suffix"
+    TOKEN_DDNS_UPDATE_ON_RENEW = 340, // "ddns-update-on-renew"
+    TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 341, // "ddns-use-conflict-resolution"
+    TOKEN_STORE_EXTENDED_INFO = 342, // "store-extended-info"
+    TOKEN_SUBNET4 = 343,           // "subnet4"
+    TOKEN_SUBNET_4O6_INTERFACE = 344, // "4o6-interface"
+    TOKEN_SUBNET_4O6_INTERFACE_ID = 345, // "4o6-interface-id"
+    TOKEN_SUBNET_4O6_SUBNET = 346, // "4o6-subnet"
+    TOKEN_OPTION_DEF = 347,        // "option-def"
+    TOKEN_OPTION_DATA = 348,       // "option-data"
+    TOKEN_NAME = 349,              // "name"
+    TOKEN_DATA = 350,              // "data"
+    TOKEN_CODE = 351,              // "code"
+    TOKEN_SPACE = 352,             // "space"
+    TOKEN_CSV_FORMAT = 353,        // "csv-format"
+    TOKEN_ALWAYS_SEND = 354,       // "always-send"
+    TOKEN_NEVER_SEND = 355,        // "never-send"
+    TOKEN_RECORD_TYPES = 356,      // "record-types"
+    TOKEN_ENCAPSULATE = 357,       // "encapsulate"
+    TOKEN_ARRAY = 358,             // "array"
+    TOKEN_PARKED_PACKET_LIMIT = 359, // "parked-packet-limit"
+    TOKEN_ALLOCATOR = 360,         // "allocator"
+    TOKEN_SHARED_NETWORKS = 361,   // "shared-networks"
+    TOKEN_POOLS = 362,             // "pools"
+    TOKEN_POOL = 363,              // "pool"
+    TOKEN_USER_CONTEXT = 364,      // "user-context"
+    TOKEN_COMMENT = 365,           // "comment"
+    TOKEN_SUBNET = 366,            // "subnet"
+    TOKEN_INTERFACE = 367,         // "interface"
+    TOKEN_ID = 368,                // "id"
+    TOKEN_RESERVATION_MODE = 369,  // "reservation-mode"
+    TOKEN_DISABLED = 370,          // "disabled"
+    TOKEN_OUT_OF_POOL = 371,       // "out-of-pool"
+    TOKEN_GLOBAL = 372,            // "global"
+    TOKEN_ALL = 373,               // "all"
+    TOKEN_RESERVATIONS_GLOBAL = 374, // "reservations-global"
+    TOKEN_RESERVATIONS_IN_SUBNET = 375, // "reservations-in-subnet"
+    TOKEN_RESERVATIONS_OUT_OF_POOL = 376, // "reservations-out-of-pool"
+    TOKEN_HOST_RESERVATION_IDENTIFIERS = 377, // "host-reservation-identifiers"
+    TOKEN_CLIENT_CLASSES = 378,    // "client-classes"
+    TOKEN_REQUIRE_CLIENT_CLASSES = 379, // "require-client-classes"
+    TOKEN_TEST = 380,              // "test"
+    TOKEN_TEMPLATE_TEST = 381,     // "template-test"
+    TOKEN_ONLY_IF_REQUIRED = 382,  // "only-if-required"
+    TOKEN_CLIENT_CLASS = 383,      // "client-class"
+    TOKEN_RESERVATIONS = 384,      // "reservations"
+    TOKEN_DUID = 385,              // "duid"
+    TOKEN_HW_ADDRESS = 386,        // "hw-address"
+    TOKEN_CIRCUIT_ID = 387,        // "circuit-id"
+    TOKEN_CLIENT_ID = 388,         // "client-id"
+    TOKEN_HOSTNAME = 389,          // "hostname"
+    TOKEN_FLEX_ID = 390,           // "flex-id"
+    TOKEN_RELAY = 391,             // "relay"
+    TOKEN_IP_ADDRESS = 392,        // "ip-address"
+    TOKEN_IP_ADDRESSES = 393,      // "ip-addresses"
+    TOKEN_HOOKS_LIBRARIES = 394,   // "hooks-libraries"
+    TOKEN_LIBRARY = 395,           // "library"
+    TOKEN_PARAMETERS = 396,        // "parameters"
+    TOKEN_EXPIRED_LEASES_PROCESSING = 397, // "expired-leases-processing"
+    TOKEN_RECLAIM_TIMER_WAIT_TIME = 398, // "reclaim-timer-wait-time"
+    TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 399, // "flush-reclaimed-timer-wait-time"
+    TOKEN_HOLD_RECLAIMED_TIME = 400, // "hold-reclaimed-time"
+    TOKEN_MAX_RECLAIM_LEASES = 401, // "max-reclaim-leases"
+    TOKEN_MAX_RECLAIM_TIME = 402,  // "max-reclaim-time"
+    TOKEN_UNWARNED_RECLAIM_CYCLES = 403, // "unwarned-reclaim-cycles"
+    TOKEN_DHCP4O6_PORT = 404,      // "dhcp4o6-port"
+    TOKEN_DHCP_MULTI_THREADING = 405, // "multi-threading"
+    TOKEN_ENABLE_MULTI_THREADING = 406, // "enable-multi-threading"
+    TOKEN_THREAD_POOL_SIZE = 407,  // "thread-pool-size"
+    TOKEN_PACKET_QUEUE_SIZE = 408, // "packet-queue-size"
+    TOKEN_CONTROL_SOCKET = 409,    // "control-socket"
+    TOKEN_SOCKET_TYPE = 410,       // "socket-type"
+    TOKEN_SOCKET_NAME = 411,       // "socket-name"
+    TOKEN_DHCP_QUEUE_CONTROL = 412, // "dhcp-queue-control"
+    TOKEN_ENABLE_QUEUE = 413,      // "enable-queue"
+    TOKEN_QUEUE_TYPE = 414,        // "queue-type"
+    TOKEN_CAPACITY = 415,          // "capacity"
+    TOKEN_DHCP_DDNS = 416,         // "dhcp-ddns"
+    TOKEN_ENABLE_UPDATES = 417,    // "enable-updates"
+    TOKEN_QUALIFYING_SUFFIX = 418, // "qualifying-suffix"
+    TOKEN_SERVER_IP = 419,         // "server-ip"
+    TOKEN_SERVER_PORT = 420,       // "server-port"
+    TOKEN_SENDER_IP = 421,         // "sender-ip"
+    TOKEN_SENDER_PORT = 422,       // "sender-port"
+    TOKEN_MAX_QUEUE_SIZE = 423,    // "max-queue-size"
+    TOKEN_NCR_PROTOCOL = 424,      // "ncr-protocol"
+    TOKEN_NCR_FORMAT = 425,        // "ncr-format"
+    TOKEN_OVERRIDE_NO_UPDATE = 426, // "override-no-update"
+    TOKEN_OVERRIDE_CLIENT_UPDATE = 427, // "override-client-update"
+    TOKEN_REPLACE_CLIENT_NAME = 428, // "replace-client-name"
+    TOKEN_GENERATED_PREFIX = 429,  // "generated-prefix"
+    TOKEN_TCP = 430,               // "tcp"
+    TOKEN_JSON = 431,              // "JSON"
+    TOKEN_WHEN_PRESENT = 432,      // "when-present"
+    TOKEN_NEVER = 433,             // "never"
+    TOKEN_ALWAYS = 434,            // "always"
+    TOKEN_WHEN_NOT_PRESENT = 435,  // "when-not-present"
+    TOKEN_HOSTNAME_CHAR_SET = 436, // "hostname-char-set"
+    TOKEN_HOSTNAME_CHAR_REPLACEMENT = 437, // "hostname-char-replacement"
+    TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 438, // "early-global-reservations-lookup"
+    TOKEN_IP_RESERVATIONS_UNIQUE = 439, // "ip-reservations-unique"
+    TOKEN_RESERVATIONS_LOOKUP_FIRST = 440, // "reservations-lookup-first"
+    TOKEN_LOGGERS = 441,           // "loggers"
+    TOKEN_OUTPUT_OPTIONS = 442,    // "output_options"
+    TOKEN_OUTPUT = 443,            // "output"
+    TOKEN_DEBUGLEVEL = 444,        // "debuglevel"
+    TOKEN_SEVERITY = 445,          // "severity"
+    TOKEN_FLUSH = 446,             // "flush"
+    TOKEN_MAXSIZE = 447,           // "maxsize"
+    TOKEN_MAXVER = 448,            // "maxver"
+    TOKEN_PATTERN = 449,           // "pattern"
+    TOKEN_COMPATIBILITY = 450,     // "compatibility"
+    TOKEN_LENIENT_OPTION_PARSING = 451, // "lenient-option-parsing"
+    TOKEN_IGNORE_RAI_LINK_SEL = 452, // "ignore-rai-link-selection"
+    TOKEN_EXCLUDE_FIRST_LAST_24 = 453, // "exclude-first-last-24"
+    TOKEN_TOPLEVEL_JSON = 454,     // TOPLEVEL_JSON
+    TOKEN_TOPLEVEL_DHCP4 = 455,    // TOPLEVEL_DHCP4
+    TOKEN_SUB_DHCP4 = 456,         // SUB_DHCP4
+    TOKEN_SUB_INTERFACES4 = 457,   // SUB_INTERFACES4
+    TOKEN_SUB_SUBNET4 = 458,       // SUB_SUBNET4
+    TOKEN_SUB_POOL4 = 459,         // SUB_POOL4
+    TOKEN_SUB_RESERVATION = 460,   // SUB_RESERVATION
+    TOKEN_SUB_OPTION_DEFS = 461,   // SUB_OPTION_DEFS
+    TOKEN_SUB_OPTION_DEF = 462,    // SUB_OPTION_DEF
+    TOKEN_SUB_OPTION_DATA = 463,   // SUB_OPTION_DATA
+    TOKEN_SUB_HOOKS_LIBRARY = 464, // SUB_HOOKS_LIBRARY
+    TOKEN_SUB_DHCP_DDNS = 465,     // SUB_DHCP_DDNS
+    TOKEN_SUB_CONFIG_CONTROL = 466, // SUB_CONFIG_CONTROL
+    TOKEN_STRING = 467,            // "constant string"
+    TOKEN_INTEGER = 468,           // "integer"
+    TOKEN_FLOAT = 469,             // "floating point"
+    TOKEN_BOOLEAN = 470            // "boolean"
       };
       /// Backward compatibility alias (Bison 3.6).
       typedef token_kind_type yytokentype;
     };
 
     /// Token kind, as returned by yylex.
-    typedef token::token_kind_type token_kind_type;
+    typedef token::yytokentype token_kind_type;
 
     /// Backward compatibility alias (Bison 3.6).
     typedef token_kind_type token_type;
@@ -727,7 +716,7 @@ namespace isc { namespace dhcp {
     {
       enum symbol_kind_type
       {
-        YYNTOKENS = 215, ///< Number of tokens.
+        YYNTOKENS = 216, ///< Number of tokens.
         S_YYEMPTY = -2,
         S_YYEOF = 0,                             // "end of file"
         S_YYerror = 1,                           // error
@@ -764,620 +753,622 @@ namespace isc { namespace dhcp {
         S_NEXT_SERVER = 32,                      // "next-server"
         S_SERVER_HOSTNAME = 33,                  // "server-hostname"
         S_BOOT_FILE_NAME = 34,                   // "boot-file-name"
-        S_LEASE_DATABASE = 35,                   // "lease-database"
-        S_HOSTS_DATABASE = 36,                   // "hosts-database"
-        S_HOSTS_DATABASES = 37,                  // "hosts-databases"
-        S_TYPE = 38,                             // "type"
-        S_MEMFILE = 39,                          // "memfile"
-        S_MYSQL = 40,                            // "mysql"
-        S_POSTGRESQL = 41,                       // "postgresql"
-        S_USER = 42,                             // "user"
-        S_PASSWORD = 43,                         // "password"
-        S_HOST = 44,                             // "host"
-        S_PORT = 45,                             // "port"
-        S_PERSIST = 46,                          // "persist"
-        S_LFC_INTERVAL = 47,                     // "lfc-interval"
-        S_READONLY = 48,                         // "readonly"
-        S_CONNECT_TIMEOUT = 49,                  // "connect-timeout"
-        S_READ_TIMEOUT = 50,                     // "read-timeout"
-        S_WRITE_TIMEOUT = 51,                    // "write-timeout"
-        S_TCP_USER_TIMEOUT = 52,                 // "tcp-user-timeout"
-        S_MAX_RECONNECT_TRIES = 53,              // "max-reconnect-tries"
-        S_RECONNECT_WAIT_TIME = 54,              // "reconnect-wait-time"
-        S_ON_FAIL = 55,                          // "on-fail"
-        S_STOP_RETRY_EXIT = 56,                  // "stop-retry-exit"
-        S_SERVE_RETRY_EXIT = 57,                 // "serve-retry-exit"
-        S_SERVE_RETRY_CONTINUE = 58,             // "serve-retry-continue"
-        S_MAX_ROW_ERRORS = 59,                   // "max-row-errors"
-        S_TRUST_ANCHOR = 60,                     // "trust-anchor"
-        S_CERT_FILE = 61,                        // "cert-file"
-        S_KEY_FILE = 62,                         // "key-file"
-        S_CIPHER_LIST = 63,                      // "cipher-list"
-        S_VALID_LIFETIME = 64,                   // "valid-lifetime"
-        S_MIN_VALID_LIFETIME = 65,               // "min-valid-lifetime"
-        S_MAX_VALID_LIFETIME = 66,               // "max-valid-lifetime"
-        S_RENEW_TIMER = 67,                      // "renew-timer"
-        S_REBIND_TIMER = 68,                     // "rebind-timer"
-        S_CALCULATE_TEE_TIMES = 69,              // "calculate-tee-times"
-        S_T1_PERCENT = 70,                       // "t1-percent"
-        S_T2_PERCENT = 71,                       // "t2-percent"
-        S_CACHE_THRESHOLD = 72,                  // "cache-threshold"
-        S_CACHE_MAX_AGE = 73,                    // "cache-max-age"
-        S_DECLINE_PROBATION_PERIOD = 74,         // "decline-probation-period"
-        S_SERVER_TAG = 75,                       // "server-tag"
-        S_STATISTIC_DEFAULT_SAMPLE_COUNT = 76,   // "statistic-default-sample-count"
-        S_STATISTIC_DEFAULT_SAMPLE_AGE = 77,     // "statistic-default-sample-age"
-        S_DDNS_SEND_UPDATES = 78,                // "ddns-send-updates"
-        S_DDNS_OVERRIDE_NO_UPDATE = 79,          // "ddns-override-no-update"
-        S_DDNS_OVERRIDE_CLIENT_UPDATE = 80,      // "ddns-override-client-update"
-        S_DDNS_REPLACE_CLIENT_NAME = 81,         // "ddns-replace-client-name"
-        S_DDNS_GENERATED_PREFIX = 82,            // "ddns-generated-prefix"
-        S_DDNS_QUALIFYING_SUFFIX = 83,           // "ddns-qualifying-suffix"
-        S_DDNS_UPDATE_ON_RENEW = 84,             // "ddns-update-on-renew"
-        S_DDNS_USE_CONFLICT_RESOLUTION = 85,     // "ddns-use-conflict-resolution"
-        S_STORE_EXTENDED_INFO = 86,              // "store-extended-info"
-        S_SUBNET4 = 87,                          // "subnet4"
-        S_SUBNET_4O6_INTERFACE = 88,             // "4o6-interface"
-        S_SUBNET_4O6_INTERFACE_ID = 89,          // "4o6-interface-id"
-        S_SUBNET_4O6_SUBNET = 90,                // "4o6-subnet"
-        S_OPTION_DEF = 91,                       // "option-def"
-        S_OPTION_DATA = 92,                      // "option-data"
-        S_NAME = 93,                             // "name"
-        S_DATA = 94,                             // "data"
-        S_CODE = 95,                             // "code"
-        S_SPACE = 96,                            // "space"
-        S_CSV_FORMAT = 97,                       // "csv-format"
-        S_ALWAYS_SEND = 98,                      // "always-send"
-        S_NEVER_SEND = 99,                       // "never-send"
-        S_RECORD_TYPES = 100,                    // "record-types"
-        S_ENCAPSULATE = 101,                     // "encapsulate"
-        S_ARRAY = 102,                           // "array"
-        S_PARKED_PACKET_LIMIT = 103,             // "parked-packet-limit"
-        S_ALLOCATOR = 104,                       // "allocator"
-        S_SHARED_NETWORKS = 105,                 // "shared-networks"
-        S_POOLS = 106,                           // "pools"
-        S_POOL = 107,                            // "pool"
-        S_USER_CONTEXT = 108,                    // "user-context"
-        S_COMMENT = 109,                         // "comment"
-        S_SUBNET = 110,                          // "subnet"
-        S_INTERFACE = 111,                       // "interface"
-        S_ID = 112,                              // "id"
-        S_RESERVATION_MODE = 113,                // "reservation-mode"
-        S_DISABLED = 114,                        // "disabled"
-        S_OUT_OF_POOL = 115,                     // "out-of-pool"
-        S_GLOBAL = 116,                          // "global"
-        S_ALL = 117,                             // "all"
-        S_RESERVATIONS_GLOBAL = 118,             // "reservations-global"
-        S_RESERVATIONS_IN_SUBNET = 119,          // "reservations-in-subnet"
-        S_RESERVATIONS_OUT_OF_POOL = 120,        // "reservations-out-of-pool"
-        S_HOST_RESERVATION_IDENTIFIERS = 121,    // "host-reservation-identifiers"
-        S_CLIENT_CLASSES = 122,                  // "client-classes"
-        S_REQUIRE_CLIENT_CLASSES = 123,          // "require-client-classes"
-        S_TEST = 124,                            // "test"
-        S_TEMPLATE_TEST = 125,                   // "template-test"
-        S_ONLY_IF_REQUIRED = 126,                // "only-if-required"
-        S_CLIENT_CLASS = 127,                    // "client-class"
-        S_RESERVATIONS = 128,                    // "reservations"
-        S_DUID = 129,                            // "duid"
-        S_HW_ADDRESS = 130,                      // "hw-address"
-        S_CIRCUIT_ID = 131,                      // "circuit-id"
-        S_CLIENT_ID = 132,                       // "client-id"
-        S_HOSTNAME = 133,                        // "hostname"
-        S_FLEX_ID = 134,                         // "flex-id"
-        S_RELAY = 135,                           // "relay"
-        S_IP_ADDRESS = 136,                      // "ip-address"
-        S_IP_ADDRESSES = 137,                    // "ip-addresses"
-        S_HOOKS_LIBRARIES = 138,                 // "hooks-libraries"
-        S_LIBRARY = 139,                         // "library"
-        S_PARAMETERS = 140,                      // "parameters"
-        S_EXPIRED_LEASES_PROCESSING = 141,       // "expired-leases-processing"
-        S_RECLAIM_TIMER_WAIT_TIME = 142,         // "reclaim-timer-wait-time"
-        S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 143, // "flush-reclaimed-timer-wait-time"
-        S_HOLD_RECLAIMED_TIME = 144,             // "hold-reclaimed-time"
-        S_MAX_RECLAIM_LEASES = 145,              // "max-reclaim-leases"
-        S_MAX_RECLAIM_TIME = 146,                // "max-reclaim-time"
-        S_UNWARNED_RECLAIM_CYCLES = 147,         // "unwarned-reclaim-cycles"
-        S_DHCP4O6_PORT = 148,                    // "dhcp4o6-port"
-        S_DHCP_MULTI_THREADING = 149,            // "multi-threading"
-        S_ENABLE_MULTI_THREADING = 150,          // "enable-multi-threading"
-        S_THREAD_POOL_SIZE = 151,                // "thread-pool-size"
-        S_PACKET_QUEUE_SIZE = 152,               // "packet-queue-size"
-        S_CONTROL_SOCKET = 153,                  // "control-socket"
-        S_SOCKET_TYPE = 154,                     // "socket-type"
-        S_SOCKET_NAME = 155,                     // "socket-name"
-        S_DHCP_QUEUE_CONTROL = 156,              // "dhcp-queue-control"
-        S_ENABLE_QUEUE = 157,                    // "enable-queue"
-        S_QUEUE_TYPE = 158,                      // "queue-type"
-        S_CAPACITY = 159,                        // "capacity"
-        S_DHCP_DDNS = 160,                       // "dhcp-ddns"
-        S_ENABLE_UPDATES = 161,                  // "enable-updates"
-        S_QUALIFYING_SUFFIX = 162,               // "qualifying-suffix"
-        S_SERVER_IP = 163,                       // "server-ip"
-        S_SERVER_PORT = 164,                     // "server-port"
-        S_SENDER_IP = 165,                       // "sender-ip"
-        S_SENDER_PORT = 166,                     // "sender-port"
-        S_MAX_QUEUE_SIZE = 167,                  // "max-queue-size"
-        S_NCR_PROTOCOL = 168,                    // "ncr-protocol"
-        S_NCR_FORMAT = 169,                      // "ncr-format"
-        S_OVERRIDE_NO_UPDATE = 170,              // "override-no-update"
-        S_OVERRIDE_CLIENT_UPDATE = 171,          // "override-client-update"
-        S_REPLACE_CLIENT_NAME = 172,             // "replace-client-name"
-        S_GENERATED_PREFIX = 173,                // "generated-prefix"
-        S_TCP = 174,                             // "tcp"
-        S_JSON = 175,                            // "JSON"
-        S_WHEN_PRESENT = 176,                    // "when-present"
-        S_NEVER = 177,                           // "never"
-        S_ALWAYS = 178,                          // "always"
-        S_WHEN_NOT_PRESENT = 179,                // "when-not-present"
-        S_HOSTNAME_CHAR_SET = 180,               // "hostname-char-set"
-        S_HOSTNAME_CHAR_REPLACEMENT = 181,       // "hostname-char-replacement"
-        S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 182, // "early-global-reservations-lookup"
-        S_IP_RESERVATIONS_UNIQUE = 183,          // "ip-reservations-unique"
-        S_RESERVATIONS_LOOKUP_FIRST = 184,       // "reservations-lookup-first"
-        S_LOGGERS = 185,                         // "loggers"
-        S_OUTPUT_OPTIONS = 186,                  // "output_options"
-        S_OUTPUT = 187,                          // "output"
-        S_DEBUGLEVEL = 188,                      // "debuglevel"
-        S_SEVERITY = 189,                        // "severity"
-        S_FLUSH = 190,                           // "flush"
-        S_MAXSIZE = 191,                         // "maxsize"
-        S_MAXVER = 192,                          // "maxver"
-        S_PATTERN = 193,                         // "pattern"
-        S_COMPATIBILITY = 194,                   // "compatibility"
-        S_LENIENT_OPTION_PARSING = 195,          // "lenient-option-parsing"
-        S_IGNORE_RAI_LINK_SEL = 196,             // "ignore-rai-link-selection"
-        S_EXCLUDE_FIRST_LAST_24 = 197,           // "exclude-first-last-24"
-        S_TOPLEVEL_JSON = 198,                   // TOPLEVEL_JSON
-        S_TOPLEVEL_DHCP4 = 199,                  // TOPLEVEL_DHCP4
-        S_SUB_DHCP4 = 200,                       // SUB_DHCP4
-        S_SUB_INTERFACES4 = 201,                 // SUB_INTERFACES4
-        S_SUB_SUBNET4 = 202,                     // SUB_SUBNET4
-        S_SUB_POOL4 = 203,                       // SUB_POOL4
-        S_SUB_RESERVATION = 204,                 // SUB_RESERVATION
-        S_SUB_OPTION_DEFS = 205,                 // SUB_OPTION_DEFS
-        S_SUB_OPTION_DEF = 206,                  // SUB_OPTION_DEF
-        S_SUB_OPTION_DATA = 207,                 // SUB_OPTION_DATA
-        S_SUB_HOOKS_LIBRARY = 208,               // SUB_HOOKS_LIBRARY
-        S_SUB_DHCP_DDNS = 209,                   // SUB_DHCP_DDNS
-        S_SUB_CONFIG_CONTROL = 210,              // SUB_CONFIG_CONTROL
-        S_STRING = 211,                          // "constant string"
-        S_INTEGER = 212,                         // "integer"
-        S_FLOAT = 213,                           // "floating point"
-        S_BOOLEAN = 214,                         // "boolean"
-        S_YYACCEPT = 215,                        // $accept
-        S_start = 216,                           // start
-        S_217_1 = 217,                           // $@1
-        S_218_2 = 218,                           // $@2
-        S_219_3 = 219,                           // $@3
-        S_220_4 = 220,                           // $@4
-        S_221_5 = 221,                           // $@5
-        S_222_6 = 222,                           // $@6
-        S_223_7 = 223,                           // $@7
-        S_224_8 = 224,                           // $@8
-        S_225_9 = 225,                           // $@9
-        S_226_10 = 226,                          // $@10
-        S_227_11 = 227,                          // $@11
-        S_228_12 = 228,                          // $@12
-        S_229_13 = 229,                          // $@13
-        S_value = 230,                           // value
-        S_sub_json = 231,                        // sub_json
-        S_map2 = 232,                            // map2
-        S_233_14 = 233,                          // $@14
-        S_map_value = 234,                       // map_value
-        S_map_content = 235,                     // map_content
-        S_not_empty_map = 236,                   // not_empty_map
-        S_list_generic = 237,                    // list_generic
-        S_238_15 = 238,                          // $@15
-        S_list_content = 239,                    // list_content
-        S_not_empty_list = 240,                  // not_empty_list
-        S_list_strings = 241,                    // list_strings
-        S_242_16 = 242,                          // $@16
-        S_list_strings_content = 243,            // list_strings_content
-        S_not_empty_list_strings = 244,          // not_empty_list_strings
-        S_unknown_map_entry = 245,               // unknown_map_entry
-        S_syntax_map = 246,                      // syntax_map
-        S_247_17 = 247,                          // $@17
-        S_global_object = 248,                   // global_object
-        S_249_18 = 249,                          // $@18
-        S_global_object_comma = 250,             // global_object_comma
-        S_sub_dhcp4 = 251,                       // sub_dhcp4
-        S_252_19 = 252,                          // $@19
-        S_global_params = 253,                   // global_params
-        S_global_param = 254,                    // global_param
-        S_valid_lifetime = 255,                  // valid_lifetime
-        S_min_valid_lifetime = 256,              // min_valid_lifetime
-        S_max_valid_lifetime = 257,              // max_valid_lifetime
-        S_renew_timer = 258,                     // renew_timer
-        S_rebind_timer = 259,                    // rebind_timer
-        S_calculate_tee_times = 260,             // calculate_tee_times
-        S_t1_percent = 261,                      // t1_percent
-        S_t2_percent = 262,                      // t2_percent
-        S_cache_threshold = 263,                 // cache_threshold
-        S_cache_max_age = 264,                   // cache_max_age
-        S_decline_probation_period = 265,        // decline_probation_period
-        S_server_tag = 266,                      // server_tag
-        S_267_20 = 267,                          // $@20
-        S_parked_packet_limit = 268,             // parked_packet_limit
-        S_allocator = 269,                       // allocator
-        S_270_21 = 270,                          // $@21
-        S_echo_client_id = 271,                  // echo_client_id
-        S_match_client_id = 272,                 // match_client_id
-        S_authoritative = 273,                   // authoritative
-        S_ddns_send_updates = 274,               // ddns_send_updates
-        S_ddns_override_no_update = 275,         // ddns_override_no_update
-        S_ddns_override_client_update = 276,     // ddns_override_client_update
-        S_ddns_replace_client_name = 277,        // ddns_replace_client_name
-        S_278_22 = 278,                          // $@22
-        S_ddns_replace_client_name_value = 279,  // ddns_replace_client_name_value
-        S_ddns_generated_prefix = 280,           // ddns_generated_prefix
-        S_281_23 = 281,                          // $@23
-        S_ddns_qualifying_suffix = 282,          // ddns_qualifying_suffix
-        S_283_24 = 283,                          // $@24
-        S_ddns_update_on_renew = 284,            // ddns_update_on_renew
-        S_ddns_use_conflict_resolution = 285,    // ddns_use_conflict_resolution
-        S_hostname_char_set = 286,               // hostname_char_set
-        S_287_25 = 287,                          // $@25
-        S_hostname_char_replacement = 288,       // hostname_char_replacement
-        S_289_26 = 289,                          // $@26
-        S_store_extended_info = 290,             // store_extended_info
-        S_statistic_default_sample_count = 291,  // statistic_default_sample_count
-        S_statistic_default_sample_age = 292,    // statistic_default_sample_age
-        S_early_global_reservations_lookup = 293, // early_global_reservations_lookup
-        S_ip_reservations_unique = 294,          // ip_reservations_unique
-        S_reservations_lookup_first = 295,       // reservations_lookup_first
-        S_interfaces_config = 296,               // interfaces_config
-        S_297_27 = 297,                          // $@27
-        S_interfaces_config_params = 298,        // interfaces_config_params
-        S_interfaces_config_param = 299,         // interfaces_config_param
-        S_sub_interfaces4 = 300,                 // sub_interfaces4
-        S_301_28 = 301,                          // $@28
-        S_interfaces_list = 302,                 // interfaces_list
-        S_303_29 = 303,                          // $@29
-        S_dhcp_socket_type = 304,                // dhcp_socket_type
-        S_305_30 = 305,                          // $@30
-        S_socket_type = 306,                     // socket_type
-        S_outbound_interface = 307,              // outbound_interface
-        S_308_31 = 308,                          // $@31
-        S_outbound_interface_value = 309,        // outbound_interface_value
-        S_re_detect = 310,                       // re_detect
-        S_service_sockets_require_all = 311,     // service_sockets_require_all
-        S_service_sockets_retry_wait_time = 312, // service_sockets_retry_wait_time
-        S_service_sockets_max_retries = 313,     // service_sockets_max_retries
-        S_lease_database = 314,                  // lease_database
-        S_315_32 = 315,                          // $@32
-        S_sanity_checks = 316,                   // sanity_checks
-        S_317_33 = 317,                          // $@33
-        S_sanity_checks_params = 318,            // sanity_checks_params
-        S_sanity_checks_param = 319,             // sanity_checks_param
-        S_lease_checks = 320,                    // lease_checks
-        S_321_34 = 321,                          // $@34
-        S_extended_info_checks = 322,            // extended_info_checks
-        S_323_35 = 323,                          // $@35
-        S_hosts_database = 324,                  // hosts_database
-        S_325_36 = 325,                          // $@36
-        S_hosts_databases = 326,                 // hosts_databases
-        S_327_37 = 327,                          // $@37
-        S_database_list = 328,                   // database_list
-        S_not_empty_database_list = 329,         // not_empty_database_list
-        S_database = 330,                        // database
-        S_331_38 = 331,                          // $@38
-        S_database_map_params = 332,             // database_map_params
-        S_database_map_param = 333,              // database_map_param
-        S_database_type = 334,                   // database_type
-        S_335_39 = 335,                          // $@39
-        S_db_type = 336,                         // db_type
-        S_user = 337,                            // user
-        S_338_40 = 338,                          // $@40
-        S_password = 339,                        // password
-        S_340_41 = 340,                          // $@41
-        S_host = 341,                            // host
-        S_342_42 = 342,                          // $@42
-        S_port = 343,                            // port
-        S_name = 344,                            // name
-        S_345_43 = 345,                          // $@43
-        S_persist = 346,                         // persist
-        S_lfc_interval = 347,                    // lfc_interval
-        S_readonly = 348,                        // readonly
-        S_connect_timeout = 349,                 // connect_timeout
-        S_read_timeout = 350,                    // read_timeout
-        S_write_timeout = 351,                   // write_timeout
-        S_tcp_user_timeout = 352,                // tcp_user_timeout
-        S_max_reconnect_tries = 353,             // max_reconnect_tries
-        S_reconnect_wait_time = 354,             // reconnect_wait_time
-        S_on_fail = 355,                         // on_fail
-        S_356_44 = 356,                          // $@44
-        S_on_fail_mode = 357,                    // on_fail_mode
-        S_max_row_errors = 358,                  // max_row_errors
-        S_trust_anchor = 359,                    // trust_anchor
-        S_360_45 = 360,                          // $@45
-        S_cert_file = 361,                       // cert_file
-        S_362_46 = 362,                          // $@46
-        S_key_file = 363,                        // key_file
-        S_364_47 = 364,                          // $@47
-        S_cipher_list = 365,                     // cipher_list
-        S_366_48 = 366,                          // $@48
-        S_host_reservation_identifiers = 367,    // host_reservation_identifiers
-        S_368_49 = 368,                          // $@49
-        S_host_reservation_identifiers_list = 369, // host_reservation_identifiers_list
-        S_host_reservation_identifier = 370,     // host_reservation_identifier
-        S_duid_id = 371,                         // duid_id
-        S_hw_address_id = 372,                   // hw_address_id
-        S_circuit_id = 373,                      // circuit_id
-        S_client_id = 374,                       // client_id
-        S_flex_id = 375,                         // flex_id
-        S_dhcp_multi_threading = 376,            // dhcp_multi_threading
-        S_377_50 = 377,                          // $@50
-        S_multi_threading_params = 378,          // multi_threading_params
-        S_multi_threading_param = 379,           // multi_threading_param
-        S_enable_multi_threading = 380,          // enable_multi_threading
-        S_thread_pool_size = 381,                // thread_pool_size
-        S_packet_queue_size = 382,               // packet_queue_size
-        S_hooks_libraries = 383,                 // hooks_libraries
-        S_384_51 = 384,                          // $@51
-        S_hooks_libraries_list = 385,            // hooks_libraries_list
-        S_not_empty_hooks_libraries_list = 386,  // not_empty_hooks_libraries_list
-        S_hooks_library = 387,                   // hooks_library
-        S_388_52 = 388,                          // $@52
-        S_sub_hooks_library = 389,               // sub_hooks_library
-        S_390_53 = 390,                          // $@53
-        S_hooks_params = 391,                    // hooks_params
-        S_hooks_param = 392,                     // hooks_param
-        S_library = 393,                         // library
-        S_394_54 = 394,                          // $@54
-        S_parameters = 395,                      // parameters
-        S_396_55 = 396,                          // $@55
-        S_expired_leases_processing = 397,       // expired_leases_processing
-        S_398_56 = 398,                          // $@56
-        S_expired_leases_params = 399,           // expired_leases_params
-        S_expired_leases_param = 400,            // expired_leases_param
-        S_reclaim_timer_wait_time = 401,         // reclaim_timer_wait_time
-        S_flush_reclaimed_timer_wait_time = 402, // flush_reclaimed_timer_wait_time
-        S_hold_reclaimed_time = 403,             // hold_reclaimed_time
-        S_max_reclaim_leases = 404,              // max_reclaim_leases
-        S_max_reclaim_time = 405,                // max_reclaim_time
-        S_unwarned_reclaim_cycles = 406,         // unwarned_reclaim_cycles
-        S_subnet4_list = 407,                    // subnet4_list
-        S_408_57 = 408,                          // $@57
-        S_subnet4_list_content = 409,            // subnet4_list_content
-        S_not_empty_subnet4_list = 410,          // not_empty_subnet4_list
-        S_subnet4 = 411,                         // subnet4
-        S_412_58 = 412,                          // $@58
-        S_sub_subnet4 = 413,                     // sub_subnet4
-        S_414_59 = 414,                          // $@59
-        S_subnet4_params = 415,                  // subnet4_params
-        S_subnet4_param = 416,                   // subnet4_param
-        S_subnet = 417,                          // subnet
-        S_418_60 = 418,                          // $@60
-        S_subnet_4o6_interface = 419,            // subnet_4o6_interface
-        S_420_61 = 420,                          // $@61
-        S_subnet_4o6_interface_id = 421,         // subnet_4o6_interface_id
-        S_422_62 = 422,                          // $@62
-        S_subnet_4o6_subnet = 423,               // subnet_4o6_subnet
-        S_424_63 = 424,                          // $@63
-        S_interface = 425,                       // interface
-        S_426_64 = 426,                          // $@64
-        S_client_class = 427,                    // client_class
-        S_428_65 = 428,                          // $@65
-        S_require_client_classes = 429,          // require_client_classes
-        S_430_66 = 430,                          // $@66
-        S_reservations_global = 431,             // reservations_global
-        S_reservations_in_subnet = 432,          // reservations_in_subnet
-        S_reservations_out_of_pool = 433,        // reservations_out_of_pool
-        S_reservation_mode = 434,                // reservation_mode
-        S_435_67 = 435,                          // $@67
-        S_hr_mode = 436,                         // hr_mode
-        S_id = 437,                              // id
-        S_shared_networks = 438,                 // shared_networks
-        S_439_68 = 439,                          // $@68
-        S_shared_networks_content = 440,         // shared_networks_content
-        S_shared_networks_list = 441,            // shared_networks_list
-        S_shared_network = 442,                  // shared_network
-        S_443_69 = 443,                          // $@69
-        S_shared_network_params = 444,           // shared_network_params
-        S_shared_network_param = 445,            // shared_network_param
-        S_option_def_list = 446,                 // option_def_list
-        S_447_70 = 447,                          // $@70
-        S_sub_option_def_list = 448,             // sub_option_def_list
-        S_449_71 = 449,                          // $@71
-        S_option_def_list_content = 450,         // option_def_list_content
-        S_not_empty_option_def_list = 451,       // not_empty_option_def_list
-        S_option_def_entry = 452,                // option_def_entry
-        S_453_72 = 453,                          // $@72
-        S_sub_option_def = 454,                  // sub_option_def
-        S_455_73 = 455,                          // $@73
-        S_option_def_params = 456,               // option_def_params
-        S_not_empty_option_def_params = 457,     // not_empty_option_def_params
-        S_option_def_param = 458,                // option_def_param
-        S_option_def_name = 459,                 // option_def_name
-        S_code = 460,                            // code
-        S_option_def_code = 461,                 // option_def_code
-        S_option_def_type = 462,                 // option_def_type
-        S_463_74 = 463,                          // $@74
-        S_option_def_record_types = 464,         // option_def_record_types
-        S_465_75 = 465,                          // $@75
-        S_space = 466,                           // space
-        S_467_76 = 467,                          // $@76
-        S_option_def_space = 468,                // option_def_space
-        S_option_def_encapsulate = 469,          // option_def_encapsulate
-        S_470_77 = 470,                          // $@77
-        S_option_def_array = 471,                // option_def_array
-        S_option_data_list = 472,                // option_data_list
-        S_473_78 = 473,                          // $@78
-        S_option_data_list_content = 474,        // option_data_list_content
-        S_not_empty_option_data_list = 475,      // not_empty_option_data_list
-        S_option_data_entry = 476,               // option_data_entry
-        S_477_79 = 477,                          // $@79
-        S_sub_option_data = 478,                 // sub_option_data
-        S_479_80 = 479,                          // $@80
-        S_option_data_params = 480,              // option_data_params
-        S_not_empty_option_data_params = 481,    // not_empty_option_data_params
-        S_option_data_param = 482,               // option_data_param
-        S_option_data_name = 483,                // option_data_name
-        S_option_data_data = 484,                // option_data_data
-        S_485_81 = 485,                          // $@81
-        S_option_data_code = 486,                // option_data_code
-        S_option_data_space = 487,               // option_data_space
-        S_option_data_csv_format = 488,          // option_data_csv_format
-        S_option_data_always_send = 489,         // option_data_always_send
-        S_option_data_never_send = 490,          // option_data_never_send
-        S_pools_list = 491,                      // pools_list
-        S_492_82 = 492,                          // $@82
-        S_pools_list_content = 493,              // pools_list_content
-        S_not_empty_pools_list = 494,            // not_empty_pools_list
-        S_pool_list_entry = 495,                 // pool_list_entry
-        S_496_83 = 496,                          // $@83
-        S_sub_pool4 = 497,                       // sub_pool4
-        S_498_84 = 498,                          // $@84
-        S_pool_params = 499,                     // pool_params
-        S_pool_param = 500,                      // pool_param
-        S_pool_entry = 501,                      // pool_entry
-        S_502_85 = 502,                          // $@85
-        S_user_context = 503,                    // user_context
-        S_504_86 = 504,                          // $@86
-        S_comment = 505,                         // comment
-        S_506_87 = 506,                          // $@87
-        S_reservations = 507,                    // reservations
-        S_508_88 = 508,                          // $@88
-        S_reservations_list = 509,               // reservations_list
-        S_not_empty_reservations_list = 510,     // not_empty_reservations_list
-        S_reservation = 511,                     // reservation
-        S_512_89 = 512,                          // $@89
-        S_sub_reservation = 513,                 // sub_reservation
-        S_514_90 = 514,                          // $@90
-        S_reservation_params = 515,              // reservation_params
-        S_not_empty_reservation_params = 516,    // not_empty_reservation_params
-        S_reservation_param = 517,               // reservation_param
-        S_next_server = 518,                     // next_server
-        S_519_91 = 519,                          // $@91
-        S_server_hostname = 520,                 // server_hostname
-        S_521_92 = 521,                          // $@92
-        S_boot_file_name = 522,                  // boot_file_name
-        S_523_93 = 523,                          // $@93
-        S_ip_address = 524,                      // ip_address
-        S_525_94 = 525,                          // $@94
-        S_ip_addresses = 526,                    // ip_addresses
-        S_527_95 = 527,                          // $@95
-        S_duid = 528,                            // duid
-        S_529_96 = 529,                          // $@96
-        S_hw_address = 530,                      // hw_address
-        S_531_97 = 531,                          // $@97
-        S_client_id_value = 532,                 // client_id_value
-        S_533_98 = 533,                          // $@98
-        S_circuit_id_value = 534,                // circuit_id_value
-        S_535_99 = 535,                          // $@99
-        S_flex_id_value = 536,                   // flex_id_value
-        S_537_100 = 537,                         // $@100
-        S_hostname = 538,                        // hostname
-        S_539_101 = 539,                         // $@101
-        S_reservation_client_classes = 540,      // reservation_client_classes
-        S_541_102 = 541,                         // $@102
-        S_relay = 542,                           // relay
-        S_543_103 = 543,                         // $@103
-        S_relay_map = 544,                       // relay_map
-        S_client_classes = 545,                  // client_classes
-        S_546_104 = 546,                         // $@104
-        S_client_classes_list = 547,             // client_classes_list
-        S_client_class_entry = 548,              // client_class_entry
-        S_549_105 = 549,                         // $@105
-        S_client_class_params = 550,             // client_class_params
-        S_not_empty_client_class_params = 551,   // not_empty_client_class_params
-        S_client_class_param = 552,              // client_class_param
-        S_client_class_name = 553,               // client_class_name
-        S_client_class_test = 554,               // client_class_test
-        S_555_106 = 555,                         // $@106
-        S_client_class_template_test = 556,      // client_class_template_test
-        S_557_107 = 557,                         // $@107
-        S_only_if_required = 558,                // only_if_required
-        S_dhcp4o6_port = 559,                    // dhcp4o6_port
-        S_control_socket = 560,                  // control_socket
-        S_561_108 = 561,                         // $@108
-        S_control_socket_params = 562,           // control_socket_params
-        S_control_socket_param = 563,            // control_socket_param
-        S_control_socket_type = 564,             // control_socket_type
-        S_565_109 = 565,                         // $@109
-        S_control_socket_name = 566,             // control_socket_name
-        S_567_110 = 567,                         // $@110
-        S_dhcp_queue_control = 568,              // dhcp_queue_control
-        S_569_111 = 569,                         // $@111
-        S_queue_control_params = 570,            // queue_control_params
-        S_queue_control_param = 571,             // queue_control_param
-        S_enable_queue = 572,                    // enable_queue
-        S_queue_type = 573,                      // queue_type
-        S_574_112 = 574,                         // $@112
-        S_capacity = 575,                        // capacity
-        S_arbitrary_map_entry = 576,             // arbitrary_map_entry
-        S_577_113 = 577,                         // $@113
-        S_dhcp_ddns = 578,                       // dhcp_ddns
-        S_579_114 = 579,                         // $@114
-        S_sub_dhcp_ddns = 580,                   // sub_dhcp_ddns
-        S_581_115 = 581,                         // $@115
-        S_dhcp_ddns_params = 582,                // dhcp_ddns_params
-        S_dhcp_ddns_param = 583,                 // dhcp_ddns_param
-        S_enable_updates = 584,                  // enable_updates
-        S_server_ip = 585,                       // server_ip
-        S_586_116 = 586,                         // $@116
-        S_server_port = 587,                     // server_port
-        S_sender_ip = 588,                       // sender_ip
-        S_589_117 = 589,                         // $@117
-        S_sender_port = 590,                     // sender_port
-        S_max_queue_size = 591,                  // max_queue_size
-        S_ncr_protocol = 592,                    // ncr_protocol
-        S_593_118 = 593,                         // $@118
-        S_ncr_protocol_value = 594,              // ncr_protocol_value
-        S_ncr_format = 595,                      // ncr_format
-        S_596_119 = 596,                         // $@119
-        S_dep_qualifying_suffix = 597,           // dep_qualifying_suffix
-        S_598_120 = 598,                         // $@120
-        S_dep_override_no_update = 599,          // dep_override_no_update
-        S_dep_override_client_update = 600,      // dep_override_client_update
-        S_dep_replace_client_name = 601,         // dep_replace_client_name
-        S_602_121 = 602,                         // $@121
-        S_dep_generated_prefix = 603,            // dep_generated_prefix
-        S_604_122 = 604,                         // $@122
-        S_dep_hostname_char_set = 605,           // dep_hostname_char_set
-        S_606_123 = 606,                         // $@123
-        S_dep_hostname_char_replacement = 607,   // dep_hostname_char_replacement
-        S_608_124 = 608,                         // $@124
-        S_config_control = 609,                  // config_control
-        S_610_125 = 610,                         // $@125
-        S_sub_config_control = 611,              // sub_config_control
-        S_612_126 = 612,                         // $@126
-        S_config_control_params = 613,           // config_control_params
-        S_config_control_param = 614,            // config_control_param
-        S_config_databases = 615,                // config_databases
-        S_616_127 = 616,                         // $@127
-        S_config_fetch_wait_time = 617,          // config_fetch_wait_time
-        S_loggers = 618,                         // loggers
-        S_619_128 = 619,                         // $@128
-        S_loggers_entries = 620,                 // loggers_entries
-        S_logger_entry = 621,                    // logger_entry
-        S_622_129 = 622,                         // $@129
-        S_logger_params = 623,                   // logger_params
-        S_logger_param = 624,                    // logger_param
-        S_debuglevel = 625,                      // debuglevel
-        S_severity = 626,                        // severity
-        S_627_130 = 627,                         // $@130
-        S_output_options_list = 628,             // output_options_list
-        S_629_131 = 629,                         // $@131
-        S_output_options_list_content = 630,     // output_options_list_content
-        S_output_entry = 631,                    // output_entry
-        S_632_132 = 632,                         // $@132
-        S_output_params_list = 633,              // output_params_list
-        S_output_params = 634,                   // output_params
-        S_output = 635,                          // output
-        S_636_133 = 636,                         // $@133
-        S_flush = 637,                           // flush
-        S_maxsize = 638,                         // maxsize
-        S_maxver = 639,                          // maxver
-        S_pattern = 640,                         // pattern
-        S_641_134 = 641,                         // $@134
-        S_compatibility = 642,                   // compatibility
-        S_643_135 = 643,                         // $@135
-        S_compatibility_params = 644,            // compatibility_params
-        S_compatibility_param = 645,             // compatibility_param
-        S_lenient_option_parsing = 646,          // lenient_option_parsing
-        S_647_ignore_rai_link_selection = 647,   // ignore-rai-link-selection
-        S_exclude_first_last_24 = 648            // exclude_first_last_24
+        S_OFFER_LFT = 35,                        // "offer-lft"
+        S_LEASE_DATABASE = 36,                   // "lease-database"
+        S_HOSTS_DATABASE = 37,                   // "hosts-database"
+        S_HOSTS_DATABASES = 38,                  // "hosts-databases"
+        S_TYPE = 39,                             // "type"
+        S_MEMFILE = 40,                          // "memfile"
+        S_MYSQL = 41,                            // "mysql"
+        S_POSTGRESQL = 42,                       // "postgresql"
+        S_USER = 43,                             // "user"
+        S_PASSWORD = 44,                         // "password"
+        S_HOST = 45,                             // "host"
+        S_PORT = 46,                             // "port"
+        S_PERSIST = 47,                          // "persist"
+        S_LFC_INTERVAL = 48,                     // "lfc-interval"
+        S_READONLY = 49,                         // "readonly"
+        S_CONNECT_TIMEOUT = 50,                  // "connect-timeout"
+        S_READ_TIMEOUT = 51,                     // "read-timeout"
+        S_WRITE_TIMEOUT = 52,                    // "write-timeout"
+        S_TCP_USER_TIMEOUT = 53,                 // "tcp-user-timeout"
+        S_MAX_RECONNECT_TRIES = 54,              // "max-reconnect-tries"
+        S_RECONNECT_WAIT_TIME = 55,              // "reconnect-wait-time"
+        S_ON_FAIL = 56,                          // "on-fail"
+        S_STOP_RETRY_EXIT = 57,                  // "stop-retry-exit"
+        S_SERVE_RETRY_EXIT = 58,                 // "serve-retry-exit"
+        S_SERVE_RETRY_CONTINUE = 59,             // "serve-retry-continue"
+        S_MAX_ROW_ERRORS = 60,                   // "max-row-errors"
+        S_TRUST_ANCHOR = 61,                     // "trust-anchor"
+        S_CERT_FILE = 62,                        // "cert-file"
+        S_KEY_FILE = 63,                         // "key-file"
+        S_CIPHER_LIST = 64,                      // "cipher-list"
+        S_VALID_LIFETIME = 65,                   // "valid-lifetime"
+        S_MIN_VALID_LIFETIME = 66,               // "min-valid-lifetime"
+        S_MAX_VALID_LIFETIME = 67,               // "max-valid-lifetime"
+        S_RENEW_TIMER = 68,                      // "renew-timer"
+        S_REBIND_TIMER = 69,                     // "rebind-timer"
+        S_CALCULATE_TEE_TIMES = 70,              // "calculate-tee-times"
+        S_T1_PERCENT = 71,                       // "t1-percent"
+        S_T2_PERCENT = 72,                       // "t2-percent"
+        S_CACHE_THRESHOLD = 73,                  // "cache-threshold"
+        S_CACHE_MAX_AGE = 74,                    // "cache-max-age"
+        S_DECLINE_PROBATION_PERIOD = 75,         // "decline-probation-period"
+        S_SERVER_TAG = 76,                       // "server-tag"
+        S_STATISTIC_DEFAULT_SAMPLE_COUNT = 77,   // "statistic-default-sample-count"
+        S_STATISTIC_DEFAULT_SAMPLE_AGE = 78,     // "statistic-default-sample-age"
+        S_DDNS_SEND_UPDATES = 79,                // "ddns-send-updates"
+        S_DDNS_OVERRIDE_NO_UPDATE = 80,          // "ddns-override-no-update"
+        S_DDNS_OVERRIDE_CLIENT_UPDATE = 81,      // "ddns-override-client-update"
+        S_DDNS_REPLACE_CLIENT_NAME = 82,         // "ddns-replace-client-name"
+        S_DDNS_GENERATED_PREFIX = 83,            // "ddns-generated-prefix"
+        S_DDNS_QUALIFYING_SUFFIX = 84,           // "ddns-qualifying-suffix"
+        S_DDNS_UPDATE_ON_RENEW = 85,             // "ddns-update-on-renew"
+        S_DDNS_USE_CONFLICT_RESOLUTION = 86,     // "ddns-use-conflict-resolution"
+        S_STORE_EXTENDED_INFO = 87,              // "store-extended-info"
+        S_SUBNET4 = 88,                          // "subnet4"
+        S_SUBNET_4O6_INTERFACE = 89,             // "4o6-interface"
+        S_SUBNET_4O6_INTERFACE_ID = 90,          // "4o6-interface-id"
+        S_SUBNET_4O6_SUBNET = 91,                // "4o6-subnet"
+        S_OPTION_DEF = 92,                       // "option-def"
+        S_OPTION_DATA = 93,                      // "option-data"
+        S_NAME = 94,                             // "name"
+        S_DATA = 95,                             // "data"
+        S_CODE = 96,                             // "code"
+        S_SPACE = 97,                            // "space"
+        S_CSV_FORMAT = 98,                       // "csv-format"
+        S_ALWAYS_SEND = 99,                      // "always-send"
+        S_NEVER_SEND = 100,                      // "never-send"
+        S_RECORD_TYPES = 101,                    // "record-types"
+        S_ENCAPSULATE = 102,                     // "encapsulate"
+        S_ARRAY = 103,                           // "array"
+        S_PARKED_PACKET_LIMIT = 104,             // "parked-packet-limit"
+        S_ALLOCATOR = 105,                       // "allocator"
+        S_SHARED_NETWORKS = 106,                 // "shared-networks"
+        S_POOLS = 107,                           // "pools"
+        S_POOL = 108,                            // "pool"
+        S_USER_CONTEXT = 109,                    // "user-context"
+        S_COMMENT = 110,                         // "comment"
+        S_SUBNET = 111,                          // "subnet"
+        S_INTERFACE = 112,                       // "interface"
+        S_ID = 113,                              // "id"
+        S_RESERVATION_MODE = 114,                // "reservation-mode"
+        S_DISABLED = 115,                        // "disabled"
+        S_OUT_OF_POOL = 116,                     // "out-of-pool"
+        S_GLOBAL = 117,                          // "global"
+        S_ALL = 118,                             // "all"
+        S_RESERVATIONS_GLOBAL = 119,             // "reservations-global"
+        S_RESERVATIONS_IN_SUBNET = 120,          // "reservations-in-subnet"
+        S_RESERVATIONS_OUT_OF_POOL = 121,        // "reservations-out-of-pool"
+        S_HOST_RESERVATION_IDENTIFIERS = 122,    // "host-reservation-identifiers"
+        S_CLIENT_CLASSES = 123,                  // "client-classes"
+        S_REQUIRE_CLIENT_CLASSES = 124,          // "require-client-classes"
+        S_TEST = 125,                            // "test"
+        S_TEMPLATE_TEST = 126,                   // "template-test"
+        S_ONLY_IF_REQUIRED = 127,                // "only-if-required"
+        S_CLIENT_CLASS = 128,                    // "client-class"
+        S_RESERVATIONS = 129,                    // "reservations"
+        S_DUID = 130,                            // "duid"
+        S_HW_ADDRESS = 131,                      // "hw-address"
+        S_CIRCUIT_ID = 132,                      // "circuit-id"
+        S_CLIENT_ID = 133,                       // "client-id"
+        S_HOSTNAME = 134,                        // "hostname"
+        S_FLEX_ID = 135,                         // "flex-id"
+        S_RELAY = 136,                           // "relay"
+        S_IP_ADDRESS = 137,                      // "ip-address"
+        S_IP_ADDRESSES = 138,                    // "ip-addresses"
+        S_HOOKS_LIBRARIES = 139,                 // "hooks-libraries"
+        S_LIBRARY = 140,                         // "library"
+        S_PARAMETERS = 141,                      // "parameters"
+        S_EXPIRED_LEASES_PROCESSING = 142,       // "expired-leases-processing"
+        S_RECLAIM_TIMER_WAIT_TIME = 143,         // "reclaim-timer-wait-time"
+        S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 144, // "flush-reclaimed-timer-wait-time"
+        S_HOLD_RECLAIMED_TIME = 145,             // "hold-reclaimed-time"
+        S_MAX_RECLAIM_LEASES = 146,              // "max-reclaim-leases"
+        S_MAX_RECLAIM_TIME = 147,                // "max-reclaim-time"
+        S_UNWARNED_RECLAIM_CYCLES = 148,         // "unwarned-reclaim-cycles"
+        S_DHCP4O6_PORT = 149,                    // "dhcp4o6-port"
+        S_DHCP_MULTI_THREADING = 150,            // "multi-threading"
+        S_ENABLE_MULTI_THREADING = 151,          // "enable-multi-threading"
+        S_THREAD_POOL_SIZE = 152,                // "thread-pool-size"
+        S_PACKET_QUEUE_SIZE = 153,               // "packet-queue-size"
+        S_CONTROL_SOCKET = 154,                  // "control-socket"
+        S_SOCKET_TYPE = 155,                     // "socket-type"
+        S_SOCKET_NAME = 156,                     // "socket-name"
+        S_DHCP_QUEUE_CONTROL = 157,              // "dhcp-queue-control"
+        S_ENABLE_QUEUE = 158,                    // "enable-queue"
+        S_QUEUE_TYPE = 159,                      // "queue-type"
+        S_CAPACITY = 160,                        // "capacity"
+        S_DHCP_DDNS = 161,                       // "dhcp-ddns"
+        S_ENABLE_UPDATES = 162,                  // "enable-updates"
+        S_QUALIFYING_SUFFIX = 163,               // "qualifying-suffix"
+        S_SERVER_IP = 164,                       // "server-ip"
+        S_SERVER_PORT = 165,                     // "server-port"
+        S_SENDER_IP = 166,                       // "sender-ip"
+        S_SENDER_PORT = 167,                     // "sender-port"
+        S_MAX_QUEUE_SIZE = 168,                  // "max-queue-size"
+        S_NCR_PROTOCOL = 169,                    // "ncr-protocol"
+        S_NCR_FORMAT = 170,                      // "ncr-format"
+        S_OVERRIDE_NO_UPDATE = 171,              // "override-no-update"
+        S_OVERRIDE_CLIENT_UPDATE = 172,          // "override-client-update"
+        S_REPLACE_CLIENT_NAME = 173,             // "replace-client-name"
+        S_GENERATED_PREFIX = 174,                // "generated-prefix"
+        S_TCP = 175,                             // "tcp"
+        S_JSON = 176,                            // "JSON"
+        S_WHEN_PRESENT = 177,                    // "when-present"
+        S_NEVER = 178,                           // "never"
+        S_ALWAYS = 179,                          // "always"
+        S_WHEN_NOT_PRESENT = 180,                // "when-not-present"
+        S_HOSTNAME_CHAR_SET = 181,               // "hostname-char-set"
+        S_HOSTNAME_CHAR_REPLACEMENT = 182,       // "hostname-char-replacement"
+        S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 183, // "early-global-reservations-lookup"
+        S_IP_RESERVATIONS_UNIQUE = 184,          // "ip-reservations-unique"
+        S_RESERVATIONS_LOOKUP_FIRST = 185,       // "reservations-lookup-first"
+        S_LOGGERS = 186,                         // "loggers"
+        S_OUTPUT_OPTIONS = 187,                  // "output_options"
+        S_OUTPUT = 188,                          // "output"
+        S_DEBUGLEVEL = 189,                      // "debuglevel"
+        S_SEVERITY = 190,                        // "severity"
+        S_FLUSH = 191,                           // "flush"
+        S_MAXSIZE = 192,                         // "maxsize"
+        S_MAXVER = 193,                          // "maxver"
+        S_PATTERN = 194,                         // "pattern"
+        S_COMPATIBILITY = 195,                   // "compatibility"
+        S_LENIENT_OPTION_PARSING = 196,          // "lenient-option-parsing"
+        S_IGNORE_RAI_LINK_SEL = 197,             // "ignore-rai-link-selection"
+        S_EXCLUDE_FIRST_LAST_24 = 198,           // "exclude-first-last-24"
+        S_TOPLEVEL_JSON = 199,                   // TOPLEVEL_JSON
+        S_TOPLEVEL_DHCP4 = 200,                  // TOPLEVEL_DHCP4
+        S_SUB_DHCP4 = 201,                       // SUB_DHCP4
+        S_SUB_INTERFACES4 = 202,                 // SUB_INTERFACES4
+        S_SUB_SUBNET4 = 203,                     // SUB_SUBNET4
+        S_SUB_POOL4 = 204,                       // SUB_POOL4
+        S_SUB_RESERVATION = 205,                 // SUB_RESERVATION
+        S_SUB_OPTION_DEFS = 206,                 // SUB_OPTION_DEFS
+        S_SUB_OPTION_DEF = 207,                  // SUB_OPTION_DEF
+        S_SUB_OPTION_DATA = 208,                 // SUB_OPTION_DATA
+        S_SUB_HOOKS_LIBRARY = 209,               // SUB_HOOKS_LIBRARY
+        S_SUB_DHCP_DDNS = 210,                   // SUB_DHCP_DDNS
+        S_SUB_CONFIG_CONTROL = 211,              // SUB_CONFIG_CONTROL
+        S_STRING = 212,                          // "constant string"
+        S_INTEGER = 213,                         // "integer"
+        S_FLOAT = 214,                           // "floating point"
+        S_BOOLEAN = 215,                         // "boolean"
+        S_YYACCEPT = 216,                        // $accept
+        S_start = 217,                           // start
+        S_218_1 = 218,                           // $@1
+        S_219_2 = 219,                           // $@2
+        S_220_3 = 220,                           // $@3
+        S_221_4 = 221,                           // $@4
+        S_222_5 = 222,                           // $@5
+        S_223_6 = 223,                           // $@6
+        S_224_7 = 224,                           // $@7
+        S_225_8 = 225,                           // $@8
+        S_226_9 = 226,                           // $@9
+        S_227_10 = 227,                          // $@10
+        S_228_11 = 228,                          // $@11
+        S_229_12 = 229,                          // $@12
+        S_230_13 = 230,                          // $@13
+        S_value = 231,                           // value
+        S_sub_json = 232,                        // sub_json
+        S_map2 = 233,                            // map2
+        S_234_14 = 234,                          // $@14
+        S_map_value = 235,                       // map_value
+        S_map_content = 236,                     // map_content
+        S_not_empty_map = 237,                   // not_empty_map
+        S_list_generic = 238,                    // list_generic
+        S_239_15 = 239,                          // $@15
+        S_list_content = 240,                    // list_content
+        S_not_empty_list = 241,                  // not_empty_list
+        S_list_strings = 242,                    // list_strings
+        S_243_16 = 243,                          // $@16
+        S_list_strings_content = 244,            // list_strings_content
+        S_not_empty_list_strings = 245,          // not_empty_list_strings
+        S_unknown_map_entry = 246,               // unknown_map_entry
+        S_syntax_map = 247,                      // syntax_map
+        S_248_17 = 248,                          // $@17
+        S_global_object = 249,                   // global_object
+        S_250_18 = 250,                          // $@18
+        S_global_object_comma = 251,             // global_object_comma
+        S_sub_dhcp4 = 252,                       // sub_dhcp4
+        S_253_19 = 253,                          // $@19
+        S_global_params = 254,                   // global_params
+        S_global_param = 255,                    // global_param
+        S_valid_lifetime = 256,                  // valid_lifetime
+        S_min_valid_lifetime = 257,              // min_valid_lifetime
+        S_max_valid_lifetime = 258,              // max_valid_lifetime
+        S_renew_timer = 259,                     // renew_timer
+        S_rebind_timer = 260,                    // rebind_timer
+        S_calculate_tee_times = 261,             // calculate_tee_times
+        S_t1_percent = 262,                      // t1_percent
+        S_t2_percent = 263,                      // t2_percent
+        S_cache_threshold = 264,                 // cache_threshold
+        S_cache_max_age = 265,                   // cache_max_age
+        S_decline_probation_period = 266,        // decline_probation_period
+        S_server_tag = 267,                      // server_tag
+        S_268_20 = 268,                          // $@20
+        S_parked_packet_limit = 269,             // parked_packet_limit
+        S_allocator = 270,                       // allocator
+        S_271_21 = 271,                          // $@21
+        S_echo_client_id = 272,                  // echo_client_id
+        S_match_client_id = 273,                 // match_client_id
+        S_authoritative = 274,                   // authoritative
+        S_ddns_send_updates = 275,               // ddns_send_updates
+        S_ddns_override_no_update = 276,         // ddns_override_no_update
+        S_ddns_override_client_update = 277,     // ddns_override_client_update
+        S_ddns_replace_client_name = 278,        // ddns_replace_client_name
+        S_279_22 = 279,                          // $@22
+        S_ddns_replace_client_name_value = 280,  // ddns_replace_client_name_value
+        S_ddns_generated_prefix = 281,           // ddns_generated_prefix
+        S_282_23 = 282,                          // $@23
+        S_ddns_qualifying_suffix = 283,          // ddns_qualifying_suffix
+        S_284_24 = 284,                          // $@24
+        S_ddns_update_on_renew = 285,            // ddns_update_on_renew
+        S_ddns_use_conflict_resolution = 286,    // ddns_use_conflict_resolution
+        S_hostname_char_set = 287,               // hostname_char_set
+        S_288_25 = 288,                          // $@25
+        S_hostname_char_replacement = 289,       // hostname_char_replacement
+        S_290_26 = 290,                          // $@26
+        S_store_extended_info = 291,             // store_extended_info
+        S_statistic_default_sample_count = 292,  // statistic_default_sample_count
+        S_statistic_default_sample_age = 293,    // statistic_default_sample_age
+        S_early_global_reservations_lookup = 294, // early_global_reservations_lookup
+        S_ip_reservations_unique = 295,          // ip_reservations_unique
+        S_reservations_lookup_first = 296,       // reservations_lookup_first
+        S_offer_lft = 297,                       // offer_lft
+        S_interfaces_config = 298,               // interfaces_config
+        S_299_27 = 299,                          // $@27
+        S_interfaces_config_params = 300,        // interfaces_config_params
+        S_interfaces_config_param = 301,         // interfaces_config_param
+        S_sub_interfaces4 = 302,                 // sub_interfaces4
+        S_303_28 = 303,                          // $@28
+        S_interfaces_list = 304,                 // interfaces_list
+        S_305_29 = 305,                          // $@29
+        S_dhcp_socket_type = 306,                // dhcp_socket_type
+        S_307_30 = 307,                          // $@30
+        S_socket_type = 308,                     // socket_type
+        S_outbound_interface = 309,              // outbound_interface
+        S_310_31 = 310,                          // $@31
+        S_outbound_interface_value = 311,        // outbound_interface_value
+        S_re_detect = 312,                       // re_detect
+        S_service_sockets_require_all = 313,     // service_sockets_require_all
+        S_service_sockets_retry_wait_time = 314, // service_sockets_retry_wait_time
+        S_service_sockets_max_retries = 315,     // service_sockets_max_retries
+        S_lease_database = 316,                  // lease_database
+        S_317_32 = 317,                          // $@32
+        S_sanity_checks = 318,                   // sanity_checks
+        S_319_33 = 319,                          // $@33
+        S_sanity_checks_params = 320,            // sanity_checks_params
+        S_sanity_checks_param = 321,             // sanity_checks_param
+        S_lease_checks = 322,                    // lease_checks
+        S_323_34 = 323,                          // $@34
+        S_extended_info_checks = 324,            // extended_info_checks
+        S_325_35 = 325,                          // $@35
+        S_hosts_database = 326,                  // hosts_database
+        S_327_36 = 327,                          // $@36
+        S_hosts_databases = 328,                 // hosts_databases
+        S_329_37 = 329,                          // $@37
+        S_database_list = 330,                   // database_list
+        S_not_empty_database_list = 331,         // not_empty_database_list
+        S_database = 332,                        // database
+        S_333_38 = 333,                          // $@38
+        S_database_map_params = 334,             // database_map_params
+        S_database_map_param = 335,              // database_map_param
+        S_database_type = 336,                   // database_type
+        S_337_39 = 337,                          // $@39
+        S_db_type = 338,                         // db_type
+        S_user = 339,                            // user
+        S_340_40 = 340,                          // $@40
+        S_password = 341,                        // password
+        S_342_41 = 342,                          // $@41
+        S_host = 343,                            // host
+        S_344_42 = 344,                          // $@42
+        S_port = 345,                            // port
+        S_name = 346,                            // name
+        S_347_43 = 347,                          // $@43
+        S_persist = 348,                         // persist
+        S_lfc_interval = 349,                    // lfc_interval
+        S_readonly = 350,                        // readonly
+        S_connect_timeout = 351,                 // connect_timeout
+        S_read_timeout = 352,                    // read_timeout
+        S_write_timeout = 353,                   // write_timeout
+        S_tcp_user_timeout = 354,                // tcp_user_timeout
+        S_max_reconnect_tries = 355,             // max_reconnect_tries
+        S_reconnect_wait_time = 356,             // reconnect_wait_time
+        S_on_fail = 357,                         // on_fail
+        S_358_44 = 358,                          // $@44
+        S_on_fail_mode = 359,                    // on_fail_mode
+        S_max_row_errors = 360,                  // max_row_errors
+        S_trust_anchor = 361,                    // trust_anchor
+        S_362_45 = 362,                          // $@45
+        S_cert_file = 363,                       // cert_file
+        S_364_46 = 364,                          // $@46
+        S_key_file = 365,                        // key_file
+        S_366_47 = 366,                          // $@47
+        S_cipher_list = 367,                     // cipher_list
+        S_368_48 = 368,                          // $@48
+        S_host_reservation_identifiers = 369,    // host_reservation_identifiers
+        S_370_49 = 370,                          // $@49
+        S_host_reservation_identifiers_list = 371, // host_reservation_identifiers_list
+        S_host_reservation_identifier = 372,     // host_reservation_identifier
+        S_duid_id = 373,                         // duid_id
+        S_hw_address_id = 374,                   // hw_address_id
+        S_circuit_id = 375,                      // circuit_id
+        S_client_id = 376,                       // client_id
+        S_flex_id = 377,                         // flex_id
+        S_dhcp_multi_threading = 378,            // dhcp_multi_threading
+        S_379_50 = 379,                          // $@50
+        S_multi_threading_params = 380,          // multi_threading_params
+        S_multi_threading_param = 381,           // multi_threading_param
+        S_enable_multi_threading = 382,          // enable_multi_threading
+        S_thread_pool_size = 383,                // thread_pool_size
+        S_packet_queue_size = 384,               // packet_queue_size
+        S_hooks_libraries = 385,                 // hooks_libraries
+        S_386_51 = 386,                          // $@51
+        S_hooks_libraries_list = 387,            // hooks_libraries_list
+        S_not_empty_hooks_libraries_list = 388,  // not_empty_hooks_libraries_list
+        S_hooks_library = 389,                   // hooks_library
+        S_390_52 = 390,                          // $@52
+        S_sub_hooks_library = 391,               // sub_hooks_library
+        S_392_53 = 392,                          // $@53
+        S_hooks_params = 393,                    // hooks_params
+        S_hooks_param = 394,                     // hooks_param
+        S_library = 395,                         // library
+        S_396_54 = 396,                          // $@54
+        S_parameters = 397,                      // parameters
+        S_398_55 = 398,                          // $@55
+        S_expired_leases_processing = 399,       // expired_leases_processing
+        S_400_56 = 400,                          // $@56
+        S_expired_leases_params = 401,           // expired_leases_params
+        S_expired_leases_param = 402,            // expired_leases_param
+        S_reclaim_timer_wait_time = 403,         // reclaim_timer_wait_time
+        S_flush_reclaimed_timer_wait_time = 404, // flush_reclaimed_timer_wait_time
+        S_hold_reclaimed_time = 405,             // hold_reclaimed_time
+        S_max_reclaim_leases = 406,              // max_reclaim_leases
+        S_max_reclaim_time = 407,                // max_reclaim_time
+        S_unwarned_reclaim_cycles = 408,         // unwarned_reclaim_cycles
+        S_subnet4_list = 409,                    // subnet4_list
+        S_410_57 = 410,                          // $@57
+        S_subnet4_list_content = 411,            // subnet4_list_content
+        S_not_empty_subnet4_list = 412,          // not_empty_subnet4_list
+        S_subnet4 = 413,                         // subnet4
+        S_414_58 = 414,                          // $@58
+        S_sub_subnet4 = 415,                     // sub_subnet4
+        S_416_59 = 416,                          // $@59
+        S_subnet4_params = 417,                  // subnet4_params
+        S_subnet4_param = 418,                   // subnet4_param
+        S_subnet = 419,                          // subnet
+        S_420_60 = 420,                          // $@60
+        S_subnet_4o6_interface = 421,            // subnet_4o6_interface
+        S_422_61 = 422,                          // $@61
+        S_subnet_4o6_interface_id = 423,         // subnet_4o6_interface_id
+        S_424_62 = 424,                          // $@62
+        S_subnet_4o6_subnet = 425,               // subnet_4o6_subnet
+        S_426_63 = 426,                          // $@63
+        S_interface = 427,                       // interface
+        S_428_64 = 428,                          // $@64
+        S_client_class = 429,                    // client_class
+        S_430_65 = 430,                          // $@65
+        S_require_client_classes = 431,          // require_client_classes
+        S_432_66 = 432,                          // $@66
+        S_reservations_global = 433,             // reservations_global
+        S_reservations_in_subnet = 434,          // reservations_in_subnet
+        S_reservations_out_of_pool = 435,        // reservations_out_of_pool
+        S_reservation_mode = 436,                // reservation_mode
+        S_437_67 = 437,                          // $@67
+        S_hr_mode = 438,                         // hr_mode
+        S_id = 439,                              // id
+        S_shared_networks = 440,                 // shared_networks
+        S_441_68 = 441,                          // $@68
+        S_shared_networks_content = 442,         // shared_networks_content
+        S_shared_networks_list = 443,            // shared_networks_list
+        S_shared_network = 444,                  // shared_network
+        S_445_69 = 445,                          // $@69
+        S_shared_network_params = 446,           // shared_network_params
+        S_shared_network_param = 447,            // shared_network_param
+        S_option_def_list = 448,                 // option_def_list
+        S_449_70 = 449,                          // $@70
+        S_sub_option_def_list = 450,             // sub_option_def_list
+        S_451_71 = 451,                          // $@71
+        S_option_def_list_content = 452,         // option_def_list_content
+        S_not_empty_option_def_list = 453,       // not_empty_option_def_list
+        S_option_def_entry = 454,                // option_def_entry
+        S_455_72 = 455,                          // $@72
+        S_sub_option_def = 456,                  // sub_option_def
+        S_457_73 = 457,                          // $@73
+        S_option_def_params = 458,               // option_def_params
+        S_not_empty_option_def_params = 459,     // not_empty_option_def_params
+        S_option_def_param = 460,                // option_def_param
+        S_option_def_name = 461,                 // option_def_name
+        S_code = 462,                            // code
+        S_option_def_code = 463,                 // option_def_code
+        S_option_def_type = 464,                 // option_def_type
+        S_465_74 = 465,                          // $@74
+        S_option_def_record_types = 466,         // option_def_record_types
+        S_467_75 = 467,                          // $@75
+        S_space = 468,                           // space
+        S_469_76 = 469,                          // $@76
+        S_option_def_space = 470,                // option_def_space
+        S_option_def_encapsulate = 471,          // option_def_encapsulate
+        S_472_77 = 472,                          // $@77
+        S_option_def_array = 473,                // option_def_array
+        S_option_data_list = 474,                // option_data_list
+        S_475_78 = 475,                          // $@78
+        S_option_data_list_content = 476,        // option_data_list_content
+        S_not_empty_option_data_list = 477,      // not_empty_option_data_list
+        S_option_data_entry = 478,               // option_data_entry
+        S_479_79 = 479,                          // $@79
+        S_sub_option_data = 480,                 // sub_option_data
+        S_481_80 = 481,                          // $@80
+        S_option_data_params = 482,              // option_data_params
+        S_not_empty_option_data_params = 483,    // not_empty_option_data_params
+        S_option_data_param = 484,               // option_data_param
+        S_option_data_name = 485,                // option_data_name
+        S_option_data_data = 486,                // option_data_data
+        S_487_81 = 487,                          // $@81
+        S_option_data_code = 488,                // option_data_code
+        S_option_data_space = 489,               // option_data_space
+        S_option_data_csv_format = 490,          // option_data_csv_format
+        S_option_data_always_send = 491,         // option_data_always_send
+        S_option_data_never_send = 492,          // option_data_never_send
+        S_pools_list = 493,                      // pools_list
+        S_494_82 = 494,                          // $@82
+        S_pools_list_content = 495,              // pools_list_content
+        S_not_empty_pools_list = 496,            // not_empty_pools_list
+        S_pool_list_entry = 497,                 // pool_list_entry
+        S_498_83 = 498,                          // $@83
+        S_sub_pool4 = 499,                       // sub_pool4
+        S_500_84 = 500,                          // $@84
+        S_pool_params = 501,                     // pool_params
+        S_pool_param = 502,                      // pool_param
+        S_pool_entry = 503,                      // pool_entry
+        S_504_85 = 504,                          // $@85
+        S_user_context = 505,                    // user_context
+        S_506_86 = 506,                          // $@86
+        S_comment = 507,                         // comment
+        S_508_87 = 508,                          // $@87
+        S_reservations = 509,                    // reservations
+        S_510_88 = 510,                          // $@88
+        S_reservations_list = 511,               // reservations_list
+        S_not_empty_reservations_list = 512,     // not_empty_reservations_list
+        S_reservation = 513,                     // reservation
+        S_514_89 = 514,                          // $@89
+        S_sub_reservation = 515,                 // sub_reservation
+        S_516_90 = 516,                          // $@90
+        S_reservation_params = 517,              // reservation_params
+        S_not_empty_reservation_params = 518,    // not_empty_reservation_params
+        S_reservation_param = 519,               // reservation_param
+        S_next_server = 520,                     // next_server
+        S_521_91 = 521,                          // $@91
+        S_server_hostname = 522,                 // server_hostname
+        S_523_92 = 523,                          // $@92
+        S_boot_file_name = 524,                  // boot_file_name
+        S_525_93 = 525,                          // $@93
+        S_ip_address = 526,                      // ip_address
+        S_527_94 = 527,                          // $@94
+        S_ip_addresses = 528,                    // ip_addresses
+        S_529_95 = 529,                          // $@95
+        S_duid = 530,                            // duid
+        S_531_96 = 531,                          // $@96
+        S_hw_address = 532,                      // hw_address
+        S_533_97 = 533,                          // $@97
+        S_client_id_value = 534,                 // client_id_value
+        S_535_98 = 535,                          // $@98
+        S_circuit_id_value = 536,                // circuit_id_value
+        S_537_99 = 537,                          // $@99
+        S_flex_id_value = 538,                   // flex_id_value
+        S_539_100 = 539,                         // $@100
+        S_hostname = 540,                        // hostname
+        S_541_101 = 541,                         // $@101
+        S_reservation_client_classes = 542,      // reservation_client_classes
+        S_543_102 = 543,                         // $@102
+        S_relay = 544,                           // relay
+        S_545_103 = 545,                         // $@103
+        S_relay_map = 546,                       // relay_map
+        S_client_classes = 547,                  // client_classes
+        S_548_104 = 548,                         // $@104
+        S_client_classes_list = 549,             // client_classes_list
+        S_client_class_entry = 550,              // client_class_entry
+        S_551_105 = 551,                         // $@105
+        S_client_class_params = 552,             // client_class_params
+        S_not_empty_client_class_params = 553,   // not_empty_client_class_params
+        S_client_class_param = 554,              // client_class_param
+        S_client_class_name = 555,               // client_class_name
+        S_client_class_test = 556,               // client_class_test
+        S_557_106 = 557,                         // $@106
+        S_client_class_template_test = 558,      // client_class_template_test
+        S_559_107 = 559,                         // $@107
+        S_only_if_required = 560,                // only_if_required
+        S_dhcp4o6_port = 561,                    // dhcp4o6_port
+        S_control_socket = 562,                  // control_socket
+        S_563_108 = 563,                         // $@108
+        S_control_socket_params = 564,           // control_socket_params
+        S_control_socket_param = 565,            // control_socket_param
+        S_control_socket_type = 566,             // control_socket_type
+        S_567_109 = 567,                         // $@109
+        S_control_socket_name = 568,             // control_socket_name
+        S_569_110 = 569,                         // $@110
+        S_dhcp_queue_control = 570,              // dhcp_queue_control
+        S_571_111 = 571,                         // $@111
+        S_queue_control_params = 572,            // queue_control_params
+        S_queue_control_param = 573,             // queue_control_param
+        S_enable_queue = 574,                    // enable_queue
+        S_queue_type = 575,                      // queue_type
+        S_576_112 = 576,                         // $@112
+        S_capacity = 577,                        // capacity
+        S_arbitrary_map_entry = 578,             // arbitrary_map_entry
+        S_579_113 = 579,                         // $@113
+        S_dhcp_ddns = 580,                       // dhcp_ddns
+        S_581_114 = 581,                         // $@114
+        S_sub_dhcp_ddns = 582,                   // sub_dhcp_ddns
+        S_583_115 = 583,                         // $@115
+        S_dhcp_ddns_params = 584,                // dhcp_ddns_params
+        S_dhcp_ddns_param = 585,                 // dhcp_ddns_param
+        S_enable_updates = 586,                  // enable_updates
+        S_server_ip = 587,                       // server_ip
+        S_588_116 = 588,                         // $@116
+        S_server_port = 589,                     // server_port
+        S_sender_ip = 590,                       // sender_ip
+        S_591_117 = 591,                         // $@117
+        S_sender_port = 592,                     // sender_port
+        S_max_queue_size = 593,                  // max_queue_size
+        S_ncr_protocol = 594,                    // ncr_protocol
+        S_595_118 = 595,                         // $@118
+        S_ncr_protocol_value = 596,              // ncr_protocol_value
+        S_ncr_format = 597,                      // ncr_format
+        S_598_119 = 598,                         // $@119
+        S_dep_qualifying_suffix = 599,           // dep_qualifying_suffix
+        S_600_120 = 600,                         // $@120
+        S_dep_override_no_update = 601,          // dep_override_no_update
+        S_dep_override_client_update = 602,      // dep_override_client_update
+        S_dep_replace_client_name = 603,         // dep_replace_client_name
+        S_604_121 = 604,                         // $@121
+        S_dep_generated_prefix = 605,            // dep_generated_prefix
+        S_606_122 = 606,                         // $@122
+        S_dep_hostname_char_set = 607,           // dep_hostname_char_set
+        S_608_123 = 608,                         // $@123
+        S_dep_hostname_char_replacement = 609,   // dep_hostname_char_replacement
+        S_610_124 = 610,                         // $@124
+        S_config_control = 611,                  // config_control
+        S_612_125 = 612,                         // $@125
+        S_sub_config_control = 613,              // sub_config_control
+        S_614_126 = 614,                         // $@126
+        S_config_control_params = 615,           // config_control_params
+        S_config_control_param = 616,            // config_control_param
+        S_config_databases = 617,                // config_databases
+        S_618_127 = 618,                         // $@127
+        S_config_fetch_wait_time = 619,          // config_fetch_wait_time
+        S_loggers = 620,                         // loggers
+        S_621_128 = 621,                         // $@128
+        S_loggers_entries = 622,                 // loggers_entries
+        S_logger_entry = 623,                    // logger_entry
+        S_624_129 = 624,                         // $@129
+        S_logger_params = 625,                   // logger_params
+        S_logger_param = 626,                    // logger_param
+        S_debuglevel = 627,                      // debuglevel
+        S_severity = 628,                        // severity
+        S_629_130 = 629,                         // $@130
+        S_output_options_list = 630,             // output_options_list
+        S_631_131 = 631,                         // $@131
+        S_output_options_list_content = 632,     // output_options_list_content
+        S_output_entry = 633,                    // output_entry
+        S_634_132 = 634,                         // $@132
+        S_output_params_list = 635,              // output_params_list
+        S_output_params = 636,                   // output_params
+        S_output = 637,                          // output
+        S_638_133 = 638,                         // $@133
+        S_flush = 639,                           // flush
+        S_maxsize = 640,                         // maxsize
+        S_maxver = 641,                          // maxver
+        S_pattern = 642,                         // pattern
+        S_643_134 = 643,                         // $@134
+        S_compatibility = 644,                   // compatibility
+        S_645_135 = 645,                         // $@135
+        S_compatibility_params = 646,            // compatibility_params
+        S_compatibility_param = 647,             // compatibility_param
+        S_lenient_option_parsing = 648,          // lenient_option_parsing
+        S_649_ignore_rai_link_selection = 649,   // ignore-rai-link-selection
+        S_exclude_first_last_24 = 650            // exclude_first_last_24
       };
     };
 
@@ -1400,7 +1391,7 @@ namespace isc { namespace dhcp {
       typedef Base super_type;
 
       /// Default constructor.
-      basic_symbol () YY_NOEXCEPT
+      basic_symbol ()
         : value ()
         , location ()
       {}
@@ -1452,7 +1443,7 @@ namespace isc { namespace dhcp {
       /// Copy constructor.
       basic_symbol (const basic_symbol& that);
 
-      /// Constructors for typed symbols.
+      /// Constructor for valueless symbols, and symbols from each type.
 #if 201103L <= YY_CPLUSPLUS
       basic_symbol (typename Base::kind_type t, location_type&& l)
         : Base (t)
@@ -1464,7 +1455,6 @@ namespace isc { namespace dhcp {
         , location (l)
       {}
 #endif
-
 #if 201103L <= YY_CPLUSPLUS
       basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l)
         : Base (t)
@@ -1478,7 +1468,6 @@ namespace isc { namespace dhcp {
         , location (l)
       {}
 #endif
-
 #if 201103L <= YY_CPLUSPLUS
       basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l)
         : Base (t)
@@ -1492,7 +1481,6 @@ namespace isc { namespace dhcp {
         , location (l)
       {}
 #endif
-
 #if 201103L <= YY_CPLUSPLUS
       basic_symbol (typename Base::kind_type t, double&& v, location_type&& l)
         : Base (t)
@@ -1506,7 +1494,6 @@ namespace isc { namespace dhcp {
         , location (l)
       {}
 #endif
-
 #if 201103L <= YY_CPLUSPLUS
       basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l)
         : Base (t)
@@ -1520,7 +1507,6 @@ namespace isc { namespace dhcp {
         , location (l)
       {}
 #endif
-
 #if 201103L <= YY_CPLUSPLUS
       basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l)
         : Base (t)
@@ -1541,10 +1527,8 @@ namespace isc { namespace dhcp {
         clear ();
       }
 
-
-
       /// Destroy contents, and record that is empty.
-      void clear () YY_NOEXCEPT
+      void clear ()
       {
         // User destructor.
         symbol_kind_type yykind = this->kind ();
@@ -1610,7 +1594,7 @@ switch (yykind)
       void move (basic_symbol& s);
 
       /// The semantic value.
-      value_type value;
+      semantic_type value;
 
       /// The location.
       location_type location;
@@ -1625,27 +1609,25 @@ switch (yykind)
     /// Type access provider for token (enum) based symbols.
     struct by_kind
     {
-      /// The symbol kind as needed by the constructor.
-      typedef token_kind_type kind_type;
-
       /// Default constructor.
-      by_kind () YY_NOEXCEPT;
+      by_kind ();
 
 #if 201103L <= YY_CPLUSPLUS
       /// Move constructor.
-      by_kind (by_kind&& that) YY_NOEXCEPT;
+      by_kind (by_kind&& that);
 #endif
 
       /// Copy constructor.
-      by_kind (const by_kind& that) YY_NOEXCEPT;
-
-      /// Constructor from (external) token numbers.
-      by_kind (kind_type t) YY_NOEXCEPT;
+      by_kind (const by_kind& that);
 
+      /// The symbol kind as needed by the constructor.
+      typedef token_kind_type kind_type;
 
+      /// Constructor from (external) token numbers.
+      by_kind (kind_type t);
 
       /// Record that this symbol is empty.
-      void clear () YY_NOEXCEPT;
+      void clear ();
 
       /// Steal the symbol kind from \a that.
       void move (by_kind& that);
@@ -1672,70 +1654,74 @@ switch (yykind)
       typedef basic_symbol<by_kind> super_type;
 
       /// Empty symbol.
-      symbol_type () YY_NOEXCEPT {}
+      symbol_type () {}
 
       /// Constructor for valueless symbols, and symbols from each type.
 #if 201103L <= YY_CPLUSPLUS
       symbol_type (int tok, location_type l)
-        : super_type (token_kind_type (tok), std::move (l))
+        : super_type(token_type (tok), std::move (l))
+      {
+        YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER4_error || tok == token::TOKEN_PARSER4_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SERVICE_SOCKETS_REQUIRE_ALL || tok == token::TOKEN_SERVICE_SOCKETS_RETRY_WAIT_TIME || tok == token::TOKEN_SERVICE_SOCKETS_MAX_RETRIES || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_EXTENDED_INFO_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_OFFER_LFT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_READ_TIMEOUT || tok == token::TOKEN_WRITE_TIMEOUT || tok == token::TOKEN_TCP_USER_TIMEOUT || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_TRUST_ANCHOR || tok == token::TOKEN_CERT_FILE || tok == token::TOKEN_KEY_FILE || tok == token::TOKEN_CIPHER_LIST || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_NEVER_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_ALLOCATOR || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_TEMPLATE_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_RESERVATIONS_LOOKUP_FIRST || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_IGNORE_RAI_LINK_SEL || tok == token::TOKEN_EXCLUDE_FIRST_LAST_24 || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL);
+      }
 #else
       symbol_type (int tok, const location_type& l)
-        : super_type (token_kind_type (tok), l)
-#endif
+        : super_type(token_type (tok), l)
       {
-#if !defined _MSC_VER || defined __clang__
-        PARSER4__ASSERT (tok == token::TOKEN_END
-                   || (token::TOKEN_PARSER4_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL));
-#endif
+        YY_ASSERT (tok == token::TOKEN_END || tok == token::TOKEN_PARSER4_error || tok == token::TOKEN_PARSER4_UNDEF || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_CONFIG_FETCH_WAIT_TIME || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_DHCP_SOCKET_TYPE || tok == token::TOKEN_RAW || tok == token::TOKEN_UDP || tok == token::TOKEN_OUTBOUND_INTERFACE || tok == token::TOKEN_SAME_AS_INBOUND || tok == token::TOKEN_USE_ROUTING || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_SERVICE_SOCKETS_REQUIRE_ALL || tok == token::TOKEN_SERVICE_SOCKETS_RETRY_WAIT_TIME || tok == token::TOKEN_SERVICE_SOCKETS_MAX_RETRIES || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_EXTENDED_INFO_CHECKS || tok == token::TOKEN_ECHO_CLIENT_ID || tok == token::TOKEN_MATCH_CLIENT_ID || tok == token::TOKEN_AUTHORITATIVE || tok == token::TOKEN_NEXT_SERVER || tok == token::TOKEN_SERVER_HOSTNAME || tok == token::TOKEN_BOOT_FILE_NAME || tok == token::TOKEN_OFFER_LFT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_READ_TIMEOUT || tok == token::TOKEN_WRITE_TIMEOUT || tok == token::TOKEN_TCP_USER_TIMEOUT || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_ON_FAIL || tok == token::TOKEN_STOP_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_EXIT || tok == token::TOKEN_SERVE_RETRY_CONTINUE || tok == token::TOKEN_MAX_ROW_ERRORS || tok == token::TOKEN_TRUST_ANCHOR || tok == token::TOKEN_CERT_FILE || tok == token::TOKEN_KEY_FILE || tok == token::TOKEN_CIPHER_LIST || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_MIN_VALID_LIFETIME || tok == token::TOKEN_MAX_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_CALCULATE_TEE_TIMES || tok == token::TOKEN_T1_PERCENT || tok == token::TOKEN_T2_PERCENT || tok == token::TOKEN_CACHE_THRESHOLD || tok == token::TOKEN_CACHE_MAX_AGE || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT || tok == token::TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE || tok == token::TOKEN_DDNS_SEND_UPDATES || tok == token::TOKEN_DDNS_OVERRIDE_NO_UPDATE || tok == token::TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_DDNS_REPLACE_CLIENT_NAME || tok == token::TOKEN_DDNS_GENERATED_PREFIX || tok == token::TOKEN_DDNS_QUALIFYING_SUFFIX || tok == token::TOKEN_DDNS_UPDATE_ON_RENEW || tok == token::TOKEN_DDNS_USE_CONFLICT_RESOLUTION || tok == token::TOKEN_STORE_EXTENDED_INFO || tok == token::TOKEN_SUBNET4 || tok == token::TOKEN_SUBNET_4O6_INTERFACE || tok == token::TOKEN_SUBNET_4O6_INTERFACE_ID || tok == token::TOKEN_SUBNET_4O6_SUBNET || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_NEVER_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_PARKED_PACKET_LIMIT || tok == token::TOKEN_ALLOCATOR || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_ID || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_RESERVATIONS_GLOBAL || tok == token::TOKEN_RESERVATIONS_IN_SUBNET || tok == token::TOKEN_RESERVATIONS_OUT_OF_POOL || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_TEMPLATE_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_CIRCUIT_ID || tok == token::TOKEN_CLIENT_ID || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_DHCP_MULTI_THREADING || tok == token::TOKEN_ENABLE_MULTI_THREADING || tok == token::TOKEN_THREAD_POOL_SIZE || tok == token::TOKEN_PACKET_QUEUE_SIZE || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_ENABLE_QUEUE || tok == token::TOKEN_QUEUE_TYPE || tok == token::TOKEN_CAPACITY || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP || tok == token::TOKEN_IP_RESERVATIONS_UNIQUE || tok == token::TOKEN_RESERVATIONS_LOOKUP_FIRST || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_PATTERN || tok == token::TOKEN_COMPATIBILITY || tok == token::TOKEN_LENIENT_OPTION_PARSING || tok == token::TOKEN_IGNORE_RAI_LINK_SEL || tok == token::TOKEN_EXCLUDE_FIRST_LAST_24 || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP4 || tok == token::TOKEN_SUB_DHCP4 || tok == token::TOKEN_SUB_INTERFACES4 || tok == token::TOKEN_SUB_SUBNET4 || tok == token::TOKEN_SUB_POOL4 || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_CONFIG_CONTROL);
       }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       symbol_type (int tok, bool v, location_type l)
-        : super_type (token_kind_type (tok), std::move (v), std::move (l))
+        : super_type(token_type (tok), std::move (v), std::move (l))
+      {
+        YY_ASSERT (tok == token::TOKEN_BOOLEAN);
+      }
 #else
       symbol_type (int tok, const bool& v, const location_type& l)
-        : super_type (token_kind_type (tok), v, l)
-#endif
+        : super_type(token_type (tok), v, l)
       {
-#if !defined _MSC_VER || defined __clang__
-        PARSER4__ASSERT (tok == token::TOKEN_BOOLEAN);
-#endif
+        YY_ASSERT (tok == token::TOKEN_BOOLEAN);
       }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       symbol_type (int tok, double v, location_type l)
-        : super_type (token_kind_type (tok), std::move (v), std::move (l))
+        : super_type(token_type (tok), std::move (v), std::move (l))
+      {
+        YY_ASSERT (tok == token::TOKEN_FLOAT);
+      }
 #else
       symbol_type (int tok, const double& v, const location_type& l)
-        : super_type (token_kind_type (tok), v, l)
-#endif
+        : super_type(token_type (tok), v, l)
       {
-#if !defined _MSC_VER || defined __clang__
-        PARSER4__ASSERT (tok == token::TOKEN_FLOAT);
-#endif
+        YY_ASSERT (tok == token::TOKEN_FLOAT);
       }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       symbol_type (int tok, int64_t v, location_type l)
-        : super_type (token_kind_type (tok), std::move (v), std::move (l))
+        : super_type(token_type (tok), std::move (v), std::move (l))
+      {
+        YY_ASSERT (tok == token::TOKEN_INTEGER);
+      }
 #else
       symbol_type (int tok, const int64_t& v, const location_type& l)
-        : super_type (token_kind_type (tok), v, l)
-#endif
+        : super_type(token_type (tok), v, l)
       {
-#if !defined _MSC_VER || defined __clang__
-        PARSER4__ASSERT (tok == token::TOKEN_INTEGER);
-#endif
+        YY_ASSERT (tok == token::TOKEN_INTEGER);
       }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       symbol_type (int tok, std::string v, location_type l)
-        : super_type (token_kind_type (tok), std::move (v), std::move (l))
+        : super_type(token_type (tok), std::move (v), std::move (l))
+      {
+        YY_ASSERT (tok == token::TOKEN_STRING);
+      }
 #else
       symbol_type (int tok, const std::string& v, const location_type& l)
-        : super_type (token_kind_type (tok), v, l)
-#endif
+        : super_type(token_type (tok), v, l)
       {
-#if !defined _MSC_VER || defined __clang__
-        PARSER4__ASSERT (tok == token::TOKEN_STRING);
-#endif
+        YY_ASSERT (tok == token::TOKEN_STRING);
       }
+#endif
     };
 
     /// Build a parser object.
@@ -1783,7 +1769,7 @@ switch (yykind)
     /// YYSYMBOL.  No bounds checking.
     static std::string symbol_name (symbol_kind_type yysymbol);
 
-    // Implementation of make_symbol for each token kind.
+    // Implementation of make_symbol for each symbol type.
 #if 201103L <= YY_CPLUSPLUS
       static
       symbol_type
@@ -2309,6 +2295,21 @@ switch (yykind)
         return symbol_type (token::TOKEN_BOOT_FILE_NAME, l);
       }
 #endif
+#if 201103L <= YY_CPLUSPLUS
+      static
+      symbol_type
+      make_OFFER_LFT (location_type l)
+      {
+        return symbol_type (token::TOKEN_OFFER_LFT, std::move (l));
+      }
+#else
+      static
+      symbol_type
+      make_OFFER_LFT (const location_type& l)
+      {
+        return symbol_type (token::TOKEN_OFFER_LFT, l);
+      }
+#endif
 #if 201103L <= YY_CPLUSPLUS
       static
       symbol_type
@@ -5015,9 +5016,9 @@ switch (yykind)
     {
     public:
       context (const Dhcp4Parser& yyparser, const symbol_type& yyla);
-      const symbol_type& lookahead () const YY_NOEXCEPT { return yyla_; }
-      symbol_kind_type token () const YY_NOEXCEPT { return yyla_.kind (); }
-      const location_type& location () const YY_NOEXCEPT { return yyla_.location; }
+      const symbol_type& lookahead () const { return yyla_; }
+      symbol_kind_type token () const { return yyla_.kind (); }
+      const location_type& location () const { return yyla_.location; }
 
       /// Put in YYARG at most YYARGN of the expected tokens, and return the
       /// number of tokens stored in YYARG.  If YYARG is null, return the
@@ -5055,19 +5056,19 @@ switch (yykind)
 
     /// Whether the given \c yypact_ value indicates a defaulted state.
     /// \param yyvalue   the value to check
-    static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT;
+    static bool yy_pact_value_is_default_ (int yyvalue);
 
     /// Whether the given \c yytable_ value indicates a syntax error.
     /// \param yyvalue   the value to check
-    static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT;
+    static bool yy_table_value_is_error_ (int yyvalue);
 
     static const short yypact_ninf_;
     static const signed char yytable_ninf_;
 
     /// Convert a scanner token kind \a t to a symbol kind.
     /// In theory \a t should be a token_kind_type, but character literals
-    /// are valid, yet not members of the token_kind_type enum.
-    static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT;
+    /// are valid, yet not members of the token_type enum.
+    static symbol_kind_type yytranslate_ (int t);
 
     /// Convert the symbol name \a n to a form suitable for a diagnostic.
     static std::string yytnamerr_ (const char *yystr);
@@ -5099,14 +5100,14 @@ switch (yykind)
 
     static const short yycheck_[];
 
-    // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
-    // state STATE-NUM.
+    // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    // symbol of state STATE-NUM.
     static const short yystos_[];
 
-    // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.
+    // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
     static const short yyr1_[];
 
-    // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.
+    // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
     static const signed char yyr2_[];
 
 
@@ -5205,7 +5206,7 @@ switch (yykind)
       typedef typename S::size_type size_type;
       typedef typename std::ptrdiff_t index_type;
 
-      stack (size_type n = 200) YY_NOEXCEPT
+      stack (size_type n = 200)
         : seq_ (n)
       {}
 
@@ -5284,7 +5285,7 @@ switch (yykind)
       class slice
       {
       public:
-        slice (const stack& stack, index_type range) YY_NOEXCEPT
+        slice (const stack& stack, index_type range)
           : stack_ (stack)
           , range_ (range)
         {}
@@ -5334,13 +5335,13 @@ switch (yykind)
     void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
 
     /// Pop \a n symbols from the stack.
-    void yypop_ (int n = 1) YY_NOEXCEPT;
+    void yypop_ (int n = 1);
 
     /// Constants.
     enum
     {
-      yylast_ = 1306,     ///< Last index in yytable_.
-      yynnts_ = 434,  ///< Number of nonterminal symbols.
+      yylast_ = 1313,     ///< Last index in yytable_.
+      yynnts_ = 435,  ///< Number of nonterminal symbols.
       yyfinal_ = 28 ///< Termination state number.
     };
 
@@ -5352,7 +5353,7 @@ switch (yykind)
 
   inline
   Dhcp4Parser::symbol_kind_type
-  Dhcp4Parser::yytranslate_ (int t) YY_NOEXCEPT
+  Dhcp4Parser::yytranslate_ (int t)
   {
     // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
     // TOKEN-NUM as returned by yylex.
@@ -5406,15 +5407,16 @@ switch (yykind)
      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215
     };
     // Last valid token kind.
-    const int code_max = 469;
+    const int code_max = 470;
 
     if (t <= 0)
       return symbol_kind::S_YYEOF;
     else if (t <= code_max)
-      return static_cast <symbol_kind_type> (translate_table[t]);
+      return YY_CAST (symbol_kind_type, translate_table[t]);
     else
       return symbol_kind::S_YYUNDEF;
   }
@@ -5464,7 +5466,6 @@ switch (yykind)
 
 
 
-
   template <typename Base>
   Dhcp4Parser::symbol_kind_type
   Dhcp4Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
@@ -5472,7 +5473,6 @@ switch (yykind)
     return this->kind ();
   }
 
-
   template <typename Base>
   bool
   Dhcp4Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
@@ -5524,13 +5524,13 @@ switch (yykind)
 
   // by_kind.
   inline
-  Dhcp4Parser::by_kind::by_kind () YY_NOEXCEPT
+  Dhcp4Parser::by_kind::by_kind ()
     : kind_ (symbol_kind::S_YYEMPTY)
   {}
 
 #if 201103L <= YY_CPLUSPLUS
   inline
-  Dhcp4Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT
+  Dhcp4Parser::by_kind::by_kind (by_kind&& that)
     : kind_ (that.kind_)
   {
     that.clear ();
@@ -5538,20 +5538,18 @@ switch (yykind)
 #endif
 
   inline
-  Dhcp4Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT
+  Dhcp4Parser::by_kind::by_kind (const by_kind& that)
     : kind_ (that.kind_)
   {}
 
   inline
-  Dhcp4Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT
+  Dhcp4Parser::by_kind::by_kind (token_kind_type t)
     : kind_ (yytranslate_ (t))
   {}
 
-
-
   inline
   void
-  Dhcp4Parser::by_kind::clear () YY_NOEXCEPT
+  Dhcp4Parser::by_kind::clear ()
   {
     kind_ = symbol_kind::S_YYEMPTY;
   }
@@ -5571,7 +5569,6 @@ switch (yykind)
     return kind_;
   }
 
-
   inline
   Dhcp4Parser::symbol_kind_type
   Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT
@@ -5579,10 +5576,9 @@ switch (yykind)
     return this->kind ();
   }
 
-
 #line 14 "dhcp4_parser.yy"
 } } // isc::dhcp
-#line 5586 "dhcp4_parser.h"
+#line 5582 "dhcp4_parser.h"
 
 
 
index e39c35ed6f7bb34bb4b5a7ef58867c8d2188e0b5..6f1e4ad8ba755db1c9a4a466d79585dfea92cb74 100644 (file)
@@ -78,6 +78,7 @@ using namespace std;
   NEXT_SERVER "next-server"
   SERVER_HOSTNAME "server-hostname"
   BOOT_FILE_NAME "boot-file-name"
+  OFFER_LFT "offer-lft"
 
   LEASE_DATABASE "lease-database"
   HOSTS_DATABASE "hosts-database"
@@ -552,6 +553,7 @@ global_param: valid_lifetime
             | compatibility
             | parked_packet_limit
             | allocator
+            | offer_lft
             | unknown_map_entry
             ;
 
@@ -792,6 +794,12 @@ reservations_lookup_first: RESERVATIONS_LOOKUP_FIRST COLON BOOLEAN {
     ctx.stack_.back()->set("reservations-lookup-first", first);
 };
 
+offer_lft: OFFER_LFT COLON INTEGER {
+    ctx.unique("offer-lft", ctx.loc2pos(@1));
+    ElementPtr offer_lft(new IntElement($3, ctx.loc2pos(@3)));
+    ctx.stack_.back()->set("offer-lft", offer_lft);
+};
+
 interfaces_config: INTERFACES_CONFIG {
     ctx.unique("interfaces-config", ctx.loc2pos(@1));
     ElementPtr i(new MapElement(ctx.loc2pos(@1)));
@@ -1560,6 +1568,7 @@ subnet4_param: valid_lifetime
              | hostname_char_replacement
              | store_extended_info
              | allocator
+             | offer_lft
              | unknown_map_entry
              ;
 
@@ -1747,6 +1756,7 @@ shared_network_param: name
                     | hostname_char_replacement
                     | store_extended_info
                     | allocator
+                    | offer_lft
                     | unknown_map_entry
                     ;
 
index 5891e157d17c2af650efa4628571aa200e557f69..0a399963569b3273f7c3847c34950d2ea39ab1fc 100644 (file)
@@ -683,7 +683,8 @@ processDhcp4Config(isc::data::ConstElementPtr config_set) {
                  (config_pair.first == "ip-reservations-unique") ||
                  (config_pair.first == "reservations-lookup-first") ||
                  (config_pair.first == "parked-packet-limit") ||
-                 (config_pair.first == "allocator") ) {
+                 (config_pair.first == "allocator") ||
+                 (config_pair.first == "offer-lft") ) {
                 CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first,
                                                                         config_pair.second);
                 continue;
index ff19102db9bc5cfb85d440e4baff0e2b982f690e..874f94b29a0b241da6e61d049b65eee848fe4dd9 100644 (file)
@@ -1,9 +1,8 @@
-// Generated 202303131406
-// A Bison parser, made by GNU Bison 3.8.2.
+// A Bison parser, made by GNU Bison 3.7.2.
 
 // Locations for Bison parsers in C++
 
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
+// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
 
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,7 +15,7 @@
 // GNU General Public License for more details.
 
 // You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <https://www.gnu.org/licenses/>.
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 // As a special exception, you may create a larger work that contains
 // part or all of the Bison parser skeleton and distribute that work
index be9b62dc69eece28f9ce0b5f0d84a79edc9bf4be..ee5f486f513cfe8f4e5df43239f4261ab99651b1 100644 (file)
@@ -2438,6 +2438,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2522,6 +2523,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2550,6 +2552,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2633,6 +2636,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2661,6 +2665,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2746,6 +2751,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2775,6 +2781,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 5000,\n"
 "                \"min-valid-lifetime\": 3000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2859,6 +2866,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -2888,6 +2896,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2916,6 +2925,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2944,6 +2954,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 3,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -2972,6 +2983,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 4,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3056,6 +3068,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3085,6 +3098,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3113,6 +3127,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 34,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3141,6 +3156,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 100,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3169,6 +3185,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1024,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3253,6 +3270,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"1.2.3.4\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3282,6 +3300,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3366,6 +3385,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3397,6 +3417,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3482,6 +3503,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"192.0.0.1\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3513,6 +3535,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
 "                \"next-server\": \"1.2.3.4\",\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3598,6 +3621,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3627,6 +3651,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3711,6 +3736,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3740,6 +3766,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -3942,6 +3969,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -3972,6 +4000,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"match-client-id\": true,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4001,6 +4030,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"match-client-id\": false,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4085,6 +4115,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4115,6 +4146,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"match-client-id\": false,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4143,6 +4175,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4227,6 +4260,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4257,6 +4291,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4286,6 +4321,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4370,6 +4406,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4400,6 +4437,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4428,6 +4466,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4514,6 +4553,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4543,6 +4583,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 5,\n"
 "                \"min-valid-lifetime\": 3,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4627,6 +4668,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4656,6 +4698,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4688,6 +4731,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4776,6 +4820,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -4805,6 +4850,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -4889,6 +4935,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -4981,6 +5028,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5073,6 +5121,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5174,6 +5223,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5266,6 +5316,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5358,6 +5409,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5450,6 +5502,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -5542,6 +5595,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -5590,6 +5644,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -5674,6 +5729,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -5703,6 +5759,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -5806,6 +5863,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -5864,6 +5922,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -5948,6 +6007,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6070,6 +6130,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6155,6 +6216,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 3000,\n"
 "                \"min-valid-lifetime\": 3000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6239,6 +6301,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6278,6 +6341,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -6381,6 +6445,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -6410,6 +6475,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -6448,6 +6514,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [\n"
 "                    {\n"
 "                        \"always-send\": false,\n"
@@ -6542,6 +6609,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -6571,6 +6639,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6674,6 +6743,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -6703,6 +6773,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6811,6 +6882,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -6859,6 +6931,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -6943,6 +7016,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7065,6 +7139,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7141,6 +7216,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 3000,\n"
 "                \"min-valid-lifetime\": 3000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7225,6 +7301,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7271,6 +7348,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7355,6 +7433,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -7404,6 +7483,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7488,6 +7568,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7572,6 +7653,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7656,6 +7738,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7685,6 +7768,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7769,6 +7853,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7798,6 +7883,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7882,6 +7968,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -7911,6 +7998,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -7995,6 +8083,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8024,6 +8113,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4,\n"
 "                \"min-valid-lifetime\": 4,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8108,6 +8198,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8137,6 +8228,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4,\n"
 "                \"min-valid-lifetime\": 4,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8221,6 +8313,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8251,6 +8344,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8280,6 +8374,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8309,6 +8404,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 3,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8337,6 +8433,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 4,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8421,6 +8518,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8450,6 +8548,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8549,6 +8648,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -8578,6 +8678,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 123,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8606,6 +8707,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 234,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8693,6 +8795,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 542,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8827,6 +8930,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [\n"
 "            {\n"
@@ -8866,6 +8970,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 234,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -8971,6 +9076,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9000,6 +9106,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9031,6 +9138,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9062,6 +9170,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 3,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9092,6 +9201,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 4,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9122,6 +9232,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 5,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9150,6 +9261,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 6,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9181,6 +9293,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 7,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9268,6 +9381,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9297,6 +9411,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9328,6 +9443,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9412,6 +9528,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9494,6 +9611,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9576,6 +9694,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9658,6 +9777,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9740,6 +9860,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9769,6 +9890,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9853,6 +9975,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9882,6 +10005,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -9966,6 +10090,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -9995,6 +10120,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10079,6 +10205,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10108,6 +10235,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10192,6 +10320,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10221,6 +10350,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10331,6 +10461,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10360,6 +10491,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10465,6 +10597,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10492,6 +10625,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 7200,\n"
 "                \"min-valid-lifetime\": 7200,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10597,6 +10731,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10624,6 +10759,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 7200,\n"
 "                \"min-valid-lifetime\": 7200,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10706,6 +10842,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10735,6 +10872,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10819,6 +10957,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10848,6 +10987,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -10933,6 +11073,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -10962,6 +11103,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11051,6 +11193,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11080,6 +11223,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11183,6 +11327,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11314,6 +11459,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [\n"
 "            {\n"
 "                \"always-send\": false,\n"
@@ -11360,6 +11506,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 7200,\n"
 "                \"min-valid-lifetime\": 7200,\n"
 "                \"name\": \"foo\",\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"relay\": {\n"
 "                    \"ip-addresses\": [ ]\n"
@@ -11375,6 +11522,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"id\": 100,\n"
 "                        \"max-valid-lifetime\": 7200,\n"
 "                        \"min-valid-lifetime\": 7200,\n"
+"                        \"offer-lft\": 0,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pools\": [\n"
 "                            {\n"
@@ -11504,6 +11652,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11592,6 +11741,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 123,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11620,6 +11770,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 542,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11704,6 +11855,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11724,6 +11876,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
 "                \"name\": \"foo\",\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"relay\": {\n"
 "                    \"ip-addresses\": [ ]\n"
@@ -11739,6 +11892,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"id\": 100,\n"
 "                        \"max-valid-lifetime\": 4000,\n"
 "                        \"min-valid-lifetime\": 4000,\n"
+"                        \"offer-lft\": 0,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pools\": [\n"
 "                            {\n"
@@ -11765,6 +11919,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                        \"id\": 200,\n"
 "                        \"max-valid-lifetime\": 4000,\n"
 "                        \"min-valid-lifetime\": 4000,\n"
+"                        \"offer-lft\": 0,\n"
 "                        \"option-data\": [ ],\n"
 "                        \"pools\": [\n"
 "                            {\n"
@@ -11801,6 +11956,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 300,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11883,6 +12039,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -11912,6 +12069,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -11940,6 +12098,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12024,6 +12183,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12053,6 +12213,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 1,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12081,6 +12242,7 @@ const char* UNPARSED_CONFIGS[] = {
 "                \"id\": 2,\n"
 "                \"max-valid-lifetime\": 4000,\n"
 "                \"min-valid-lifetime\": 4000,\n"
+"                \"offer-lft\": 0,\n"
 "                \"option-data\": [ ],\n"
 "                \"pools\": [\n"
 "                    {\n"
@@ -12165,6 +12327,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12249,6 +12412,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 0\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
@@ -12331,6 +12495,7 @@ const char* UNPARSED_CONFIGS[] = {
 "            \"thread-pool-size\": 48\n"
 "        },\n"
 "        \"next-server\": \"0.0.0.0\",\n"
+"        \"offer-lft\": 0,\n"
 "        \"option-data\": [ ],\n"
 "        \"option-def\": [ ],\n"
 "        \"parked-packet-limit\": 256,\n"
index da9f0780a6b90305ba7f8ce98b3897d89a9eaf08..823bfe663a28a4157496fc816907cc93c497addd 100644 (file)
@@ -59,6 +59,7 @@ CfgGlobals::nameToIndex = {
     { "next-server", NEXT_SERVER },
     { "server-hostname", SERVER_HOSTNAME },
     { "boot-file-name", BOOT_FILE_NAME },
+    { "offer-lft", OFFER_LFT },
 
     // DHCPv6 specific parameters.
     { "data-directory", DATA_DIRECTORY },
index d9fc47f1b856f0be7101f0fe94a833f49588cae1..20062c87cf3f4c1c2250d2bf7f2924a0e42d93ef 100644 (file)
@@ -82,6 +82,7 @@ public:
         NEXT_SERVER,
         SERVER_HOSTNAME,
         BOOT_FILE_NAME,
+        OFFER_LFT,
 
         // DHCPv6 specific parameters.
         DATA_DIRECTORY,
index 449c453fb3f4e72f817a3b15ee1cd1ee97c71b76..ccb002f50205fa15fbe8294636f6480ab52e0b9c 100644 (file)
@@ -320,6 +320,11 @@ Network4::toElement() const {
         map->set("boot-file-name",Element::create(filename_.get()));
     }
 
+    // Set offer-lft
+    if (!offer_lft_.unspecified()) {
+        map->set("offer-lft",Element::create(offer_lft_.get()));
+    }
+
     return (map);
 }
 
index e5e0b90ca8ccbf6fa28373e52b26536c93b64d6f..8f2acff806429e9fa9ea8754b39905fd1abb3cfb 100644 (file)
@@ -1215,7 +1215,7 @@ public:
     /// @brief Constructor.
     Network4()
         : Network(), match_client_id_(true, true), authoritative_(),
-          siaddr_(), sname_(), filename_() {
+          siaddr_(), sname_(), filename_(), offer_lft_() {
     }
 
     /// @brief Returns the flag indicating if the client identifiers should
@@ -1310,6 +1310,24 @@ public:
                                       CfgGlobals::BOOT_FILE_NAME));
     }
 
+    /// @brief Sets offer lifetime for the network.
+    ///
+    /// Will be used for the offer lifetime (may be empty if not defined)
+    void setOfferLft(const util::Optional<uint32_t>& offer_lft) {
+        offer_lft_ = offer_lft;
+    }
+
+    /// @brief Returns offer lifetime for the network
+    ///
+    /// @param inheritance inheritance mode to be used.
+    /// @return offer lifetime value
+    util::Optional<uint32_t>
+    getOfferLft(const Inheritance& inheritance = Inheritance::ALL) const {
+        return (getProperty<Network4>(&Network4::getOfferLft, offer_lft_,
+                                      inheritance,
+                                      CfgGlobals::OFFER_LFT));
+    }
+
     /// @brief Unparses network object.
     ///
     /// @return A pointer to unparsed network configuration.
@@ -1330,16 +1348,22 @@ private:
     /// @brief Should requests for unknown IP addresses be rejected.
     util::Optional<bool> authoritative_;
 
-    /// @brief siaddr value for this subnet
+    /// @brief siaddr value for this network
     util::Optional<asiolink::IOAddress> siaddr_;
 
-    /// @brief server hostname for this subnet
+    /// @brief server hostname for this network
     util::Optional<std::string> sname_;
 
-    /// @brief boot file name for this subnet
+    /// @brief boot file name for this network
     util::Optional<std::string> filename_;
+
+    /// @brief offer lifetime for this network
+    util::Optional<uint32_t> offer_lft_;
 };
 
+/// @brief Pointer to the @ref Network4 object.
+typedef boost::shared_ptr<Network4> Network4Ptr;
+
 class Network6;
 
 /// @brief Pointer to the @ref Network6 object.
index b1f00a6918f93a1f1286f8ff8954c0d2a5db5de5..0358b30fb92b546d31e9441fb3d5a133585b763a 100644 (file)
@@ -298,5 +298,21 @@ BaseNetworkParser::parsePdAllocatorParams(const data::ConstElementPtr& network_d
     }
 }
 
+void
+BaseNetworkParser::parseOfferLft(const data::ConstElementPtr& network_data,
+                                        Network4Ptr& network) {
+    if (network_data->contains("offer-lft")) {
+        auto value = getInteger(network_data, "offer-lft");
+        if (value < 0) {
+            isc_throw(DhcpConfigError, "the value of offer-lft '"
+                      << value << "' must be a positive number ("
+                      << getPosition("offer-lft", network_data) << ")");
+        }
+
+        network->setOfferLft(value);
+    }
+}
+
+
 } // end of namespace isc::dhcp
 } // end of namespace isc
index 020953c45119b7a575d1827f1ef8ef6747cb0759..36b44c0ba6ca976a43829745cede1725b236f258 100644 (file)
@@ -130,6 +130,16 @@ protected:
     /// to be stored.
     void parsePdAllocatorParams(const data::ConstElementPtr& network_data,
                                 Network6Ptr& network);
+
+    /// @brief Parses offer-lft parameter (v4 only)
+    ///
+    /// @param network_data Data element holding shared network
+    /// configuration to be parsed.
+    /// @param [out] network Pointer to the v4 network in which parsed data is
+    /// to be stored.
+    /// @throw DhcpConfigError if the value is less than 0.
+    void parseOfferLft(const data::ConstElementPtr& network_data,
+                       Network4Ptr& network);
 };
 
 } // end of namespace isc::dhcp
index 6ee1f51f0d373c5a1878c18b79798683161dd1d0..a4867e74700b5a3666718c0a5e343cb62ec98189 100644 (file)
@@ -959,6 +959,17 @@ Subnet4ConfigParser::initSubnet(data::ConstElementPtr params,
 
     // Parse lease cache parameters
     parseCacheParams(params, network);
+
+    // Set the offer_lft value for the subnet.
+    if (params->contains("offer-lft")) {
+        uint32_t offer_lft = getInteger(params, "offer-lft");
+        subnet4->setOfferLft(offer_lft);
+    }
+
+    // Parse offer-lft parameter.
+    Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(subnet4);
+    parseOfferLft(params, network4);
+
 }
 
 void
index d973a212826fb8365771ae14ab4a9de84b644ff3..6a103914802d76c34a9e2d7f7b43d9937b0c9682 100644 (file)
@@ -201,6 +201,10 @@ SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
         // Parse allocator params.
         parseAllocatorParams(shared_network_data, network);
 
+        // Parse offer-lft parameter.
+        Network4Ptr network4 = boost::dynamic_pointer_cast<Network4>(shared_network);
+        parseOfferLft(shared_network_data, network4);
+
     } catch (const DhcpConfigError&) {
         // Position was already added
         throw;
index 551b00154999d6c695e5cb6e054bed03feb7be42..ea8f13b066221b33999dc49c41bf0471786e2220 100644 (file)
@@ -100,6 +100,7 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = {
     { "compatibility",                    Element::map },
     { "parked-packet-limit",              Element::integer },
     { "allocator",                        Element::string },
+    { "offer-lft",                        Element::integer },
 };
 
 /// @brief This table defines default global values for DHCPv4
@@ -142,6 +143,7 @@ const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = {
     { "ddns-use-conflict-resolution",     Element::boolean, "true" },
     { "parked-packet-limit",              Element::integer, "256" },
     { "allocator",                        Element::string,  "iterative" },
+    { "offer-lft",                        Element::integer, "0" },
 };
 
 /// @brief This table defines all option definition parameters.
@@ -254,7 +256,8 @@ const SimpleKeywords SimpleParser4::SUBNET4_PARAMETERS = {
     { "cache-max-age",                  Element::integer },
     { "ddns-update-on-renew",           Element::boolean },
     { "ddns-use-conflict-resolution",   Element::boolean },
-    { "allocator",                      Element::string }
+    { "allocator",                      Element::string },
+    { "offer-lft",                      Element::integer }
 };
 
 /// @brief This table defines default values for each IPv4 subnet.
@@ -309,6 +312,7 @@ const ParamsList SimpleParser4::INHERIT_TO_SUBNET4 = {
     "cache-threshold",
     "cache-max-age",
     "allocator",
+    "offer-lft",
 };
 
 /// @brief This table defines all pool parameters.
@@ -372,7 +376,8 @@ const SimpleKeywords SimpleParser4::SHARED_NETWORK4_PARAMETERS = {
     { "cache-max-age",                  Element::integer },
     { "ddns-update-on-renew",           Element::boolean },
     { "ddns-use-conflict-resolution",   Element::boolean },
-    { "allocator",                      Element::string }
+    { "allocator",                      Element::string },
+    { "offer-lft",                      Element::integer }
 };
 
 /// @brief This table defines default values for each IPv4 shared network.
index e5a25573f9fd5b4a7b07e7f3fd2c6f65d949862c..645b2389254e715c2c68ba61184331dedcea1371 100644 (file)
@@ -5653,6 +5653,67 @@ TEST_F(PgSqlAllocEngine4Test, bootpDelete) {
 }
 #endif
 
+// Verifies that offer_lft is non-zero, that an offered lease is stored
+// in the lease database.
+// @todo Currently fails, enable when offer-lft is functional.
+TEST_F(AllocEngine4Test, DISABLED_discoverOfferLft) {
+    boost::scoped_ptr<AllocEngine> engine;
+    ASSERT_NO_THROW(engine.reset(new AllocEngine(0)));
+    ASSERT_TRUE(engine);
+
+    IOAddress addr("192.0.2.15");
+    CfgMgr& cfg_mgr = CfgMgr::instance();
+    // Get rid of the default test configuration.
+    cfg_mgr.clear();
+
+    // Create configuration similar to other tests, but with a single address pool
+    subnet_ = Subnet4::create(IOAddress("192.0.2.0"), 24, 1, 2, 3);
+    pool_ = Pool4Ptr(new Pool4(addr, addr)); // just a single address
+    subnet_->addPool(pool_);
+
+    // Set subnet's offer-lft to a non-zero, positive value.
+    uint32_t offer_lft = (subnet_->getValid() / 3);
+    subnet_->setOfferLft(offer_lft);
+    ASSERT_EQ(offer_lft, subnet_->getOfferLft().get());
+
+    cfg_mgr.getStagingCfg()->getCfgSubnets4()->add(subnet_);
+
+    // Ask for any address
+    AllocEngine::ClientContext4 ctx1(subnet_, clientid_, hwaddr_,
+                                     IOAddress("0.0.0.0"), true, true,
+                                     "one", true);
+    ctx1.query_.reset(new Pkt4(DHCPDISCOVER, 1234));
+
+    // Check that we got that single lease
+    Lease4Ptr lease = engine->allocateLease4(ctx1);
+    ASSERT_TRUE(lease);
+    EXPECT_EQ(addr, lease->addr_);
+    EXPECT_EQ(offer_lft, lease->valid_lft_);
+    EXPECT_FALSE(lease->fqdn_fwd_);
+    EXPECT_FALSE(lease->fqdn_rev_);
+
+    // Check that the lease has been stored by LeaseMgr.
+    Lease4Ptr from_mgr = LeaseMgrFactory::instance().getLease4(lease->addr_);
+    ASSERT_TRUE(from_mgr);
+    EXPECT_EQ(offer_lft, from_mgr->valid_lft_);
+    EXPECT_FALSE(from_mgr->fqdn_fwd_);
+    EXPECT_FALSE(from_mgr->fqdn_rev_);
+
+    // Try to discover an address for a second client.
+    uint8_t hwaddr2_data[] = { 0, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe };
+    HWAddrPtr hwaddr2(new HWAddr(hwaddr2_data, sizeof(hwaddr2_data), HTYPE_ETHER));
+
+    // Ask for any address.
+    AllocEngine::ClientContext4 ctx2(subnet_, ClientIdPtr(), hwaddr2,
+                                     IOAddress("0.0.0.0"), true, true,
+                                     "two", true);
+    ctx2.query_.reset(new Pkt4(DHCPDISCOVER, 1235));
+
+    // Verify that we did not get a lease.
+    lease = engine->allocateLease4(ctx1);
+    ASSERT_FALSE(lease);
+}
+
 }  // namespace test
 }  // namespace dhcp
 }  // namespace isc
index 9a1a7319316710279b77fcf3376728ae4ea551f2..e9d517afbf947b7982dc06bbfe6c2808723c3b64 100644 (file)
@@ -209,6 +209,7 @@ TEST(CfgSharedNetworks4Test, unparse) {
     network1->setHostnameCharSet("[^A-Z]");
     network1->setHostnameCharReplacement("x");
     network1->setCacheThreshold(.20);
+    network1->setOfferLft(77);
 
     network2->setIface("eth1");
     network2->setT1(Triplet<uint32_t>(100));
@@ -270,7 +271,8 @@ TEST(CfgSharedNetworks4Test, unparse) {
         "    \"t2-percent\": .655,\n"
         "    \"hostname-char-replacement\": \"x\",\n"
         "    \"hostname-char-set\": \"[^A-Z]\",\n"
-        "    \"cache-threshold\": .20\n"
+        "    \"cache-threshold\": .20,\n"
+        "    \"offer-lft\": 77\n"
         "  }\n"
         "]\n";
 
index 788ad0f51e22727db944a79f643acad4839f0d21..757638ff05cb1736189b2ad63e8daf232a3c9349 100644 (file)
@@ -1059,6 +1059,7 @@ TEST(CfgSubnets4Test, unparseSubnet) {
     subnet2->setValid(Triplet<uint32_t>(100));
     subnet2->setStoreExtendedInfo(true);
     subnet2->setCacheMaxAge(80);
+    subnet2->setOfferLft(99);
 
     subnet3->setIface("eth1");
     subnet3->requireClientClass("foo");
@@ -1131,7 +1132,8 @@ TEST(CfgSubnets4Test, unparseSubnet) {
         "    \"option-data\": [ ],\n"
         "    \"pools\": [ ],\n"
         "    \"store-extended-info\": true,\n"
-        "    \"cache-max-age\": 80\n"
+        "    \"cache-max-age\": 80,\n"
+        "    \"offer-lft\": 99\n"
         "},{\n"
         "    \"id\": 125,\n"
         "    \"subnet\": \"192.0.2.128/26\",\n"
index 2f052804f1fcb0b20d0a6d3b3b28b036335fab19..897199f09fc0edcfb3c30543a20f2d9201300ebc 100644 (file)
@@ -425,7 +425,8 @@ public:
             // If error was reported, the error string should contain
             // position of the data element which caused failure.
             if (rcode_ != 0) {
-                EXPECT_TRUE(errorContainsPosition(status, "<string>"));
+                EXPECT_TRUE(errorContainsPosition(status, "<string>"))
+                            << "error text:" << error_text_;
             }
         }
 
@@ -2814,6 +2815,9 @@ TEST_F(ParseConfigTest, defaultSubnet4) {
 
     auto allocator = subnet->getAllocator(Lease::TYPE_V4);
     EXPECT_TRUE(boost::dynamic_pointer_cast<IterativeAllocator>(allocator));
+
+    EXPECT_TRUE(subnet->getOfferLft().unspecified());
+    EXPECT_EQ(0, subnet->getOfferLft().get());
 }
 
 // This test verifies that it is possible to parse an IPv6 subnet for which
@@ -3008,6 +3012,9 @@ TEST_F(ParseConfigTest, defaultSharedNetwork4) {
 
     EXPECT_TRUE(network->getAllocatorType().unspecified());
     EXPECT_TRUE(network->getAllocatorType().get().empty());
+
+    EXPECT_TRUE(network->getOfferLft().unspecified());
+    EXPECT_EQ(0, network->getOfferLft().get());
 }
 
 // This test verifies that it is possible to parse an IPv6 shared network
@@ -3419,4 +3426,41 @@ TEST_F(ParseConfigTest, selfEncapsulationTest) {
     cfg.runCfgOptionsTest(family_, config);
 }
 
+// This test verifies parsing offer-lft for Subnet4.
+TEST_F(ParseConfigTest, subnet4OfferLft) {
+    std::string config =
+        "{"
+        "    \"subnet4\": [ {"
+        "        \"subnet\": \"192.0.2.0/24\","
+        "        \"id\": 123,"
+        "        \"offer-lft\": 888"
+        "    } ]"
+        "}";
+
+    int rcode = parseConfiguration(config, false, false);
+    ASSERT_EQ(0, rcode);
+
+    auto subnet = CfgMgr::instance().getStagingCfg()->getCfgSubnets4()->getBySubnetId(123);
+    ASSERT_TRUE(subnet);
+
+    EXPECT_FALSE(subnet->getOfferLft().unspecified());
+    EXPECT_EQ(888, subnet->getOfferLft().get());
+}
+
+// This test verifies parsing invalid offer-lft for Subnet4.
+TEST_F(ParseConfigTest, subnet4InvalidOfferLft) {
+    std::string config =
+        "{"
+        "    \"subnet4\": [ {"
+        "        \"subnet\": \"192.0.2.0/24\","
+        "        \"id\": 123,"
+        "        \"offer-lft\": -77"
+        "    } ]"
+        "}";
+
+    int rcode = parseConfiguration(config, false, false);
+    ASSERT_NE(0, rcode);
+}
+
+
 }  // Anonymous namespace
index 09d9eb8701724b0e2451fecafe5d65dcaf6027ce..85ad150bfb32b98c730fff2aa8dabff29a19375b 100644 (file)
@@ -181,6 +181,7 @@ TEST_F(NetworkTest, inheritanceSupport4) {
     globals_->set("ddns-update-on-renew", Element::create(true));
     globals_->set("ddns-use-conflict-resolution", Element::create(true));
     globals_->set("allocator", Element::create("random"));
+    globals_->set("offer-lft", Element::create(45));
 
     // For each parameter for which inheritance is supported run
     // the test that checks if the values are inherited properly.
@@ -359,6 +360,12 @@ TEST_F(NetworkTest, inheritanceSupport4) {
                                              &Network4::setAllocatorType,
                                              "iterative", "random");
     }
+    {
+        SCOPED_TRACE("offer-lft");
+        testNetworkInheritance<TestNetwork4>(&Network4::getOfferLft,
+                                             &Network4::setOfferLft,
+                                             10, 45);
+    }
 }
 
 // This test verifies that the inheritance is supported for DHCPv6
index d889c24a209d1dd16a5fcad45303e7fafed1bb95..24312fff0b58a3c2463596a4159ee3ffca594f95 100644 (file)
@@ -153,6 +153,7 @@ public:
                 "    \"store-extended-info\": true,"
                 "    \"cache-threshold\": 0.123,"
                 "    \"cache-max-age\": 123,"
+                "    \"offer-lft\": 777,"
                 "    \"ddns-update-on-renew\": true,"
                 "    \"option-data\": ["
                 "        {"
@@ -282,6 +283,7 @@ TEST_F(SharedNetwork4ParserTest, parse) {
     EXPECT_TRUE(network->getStoreExtendedInfo().get());
     EXPECT_EQ(0.123, network->getCacheThreshold());
     EXPECT_EQ(123, network->getCacheMaxAge().get());
+    EXPECT_EQ(777, network->getOfferLft().get());
     EXPECT_TRUE(network->getDdnsUpdateOnRenew().get());
     EXPECT_EQ("iterative", network->getAllocatorType().get());
 
index 58da38f59b94a482f0ee05940263f9a0f5dbb67c..85de81ee0b6d296068c0b2a32abb02c435c88f4c 100644 (file)
@@ -149,6 +149,9 @@ TEST(Subnet4Test, defaults) {
 
     EXPECT_TRUE(subnet.getDdnsUpdateOnRenew().unspecified());
     EXPECT_FALSE(subnet.getDdnsUpdateOnRenew().get());
+
+    EXPECT_TRUE(subnet.getOfferLft().unspecified());
+    EXPECT_EQ(0, subnet.getOfferLft().get());
 }
 
 // Checks that the subnet id can be either autogenerated or set to an
index 2682df8a15f75e369710d99c223fd553b3772518..a65ac76e3848300c91370aa829470366a5103ad1 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright (C) 2022 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2022-2023 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
@@ -62,6 +62,16 @@ ALTER TABLE dhcp4_options
 ALTER TABLE dhcp6_options
     ADD COLUMN cancelled TINYINT(1) NOT NULL DEFAULT 0;
 
+-- Add offer_lifetime column to v4 tables.
+ALTER TABLE dhcp4_shared_network
+    ADD COLUMN offer_lifetime INT(10) DEFAULT NULL;
+
+ALTER TABLE dhcp4_subnet
+    ADD COLUMN offer_lifetime INT(10) DEFAULT NULL;
+
+ALTER TABLE dhcp4_client_class
+    ADD COLUMN offer_lifetime INT(10) DEFAULT NULL;
+
 -- Update the schema version number.
 UPDATE schema_version
     SET version = '15', minor = '0';
index 164d3345ecb7343fb099891bcfc2760f4467fe4a..938a91370a62cba2ede5ae54eb8d0c0297d94c0a 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright (C) 2022 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2023 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
@@ -28,7 +28,7 @@ fi
 VERSION=$(pgsql_version "$@")
 
 if [ "$VERSION" != "13.0" ]; then
-    printf 'This script upgrades 13.0 to 14.0. '
+    printf 'This script upgrades 13.0 to 13.0. '
     printf 'Reported version is %s. Skipping upgrade.\n' "${VERSION}"
     exit 0
 fi
@@ -43,6 +43,16 @@ START TRANSACTION;
 ALTER TABLE dhcp4_options ADD COLUMN cancelled BOOLEAN NOT NULL DEFAULT 'f';
 ALTER TABLE dhcp6_options ADD COLUMN cancelled BOOLEAN NOT NULL DEFAULT 'f';
 
+-- Add offer_lifetime column to v4 tables.
+ALTER TABLE dhcp4_shared_network
+    ADD COLUMN offer_lifetime BIGINT DEFAULT NULL;
+
+ALTER TABLE dhcp4_subnet
+    ADD COLUMN offer_lifetime BIGINT DEFAULT NULL;
+
+ALTER TABLE dhcp4_client_class
+    ADD COLUMN offer_lifetime BIGINT DEFAULT NULL;
+
 -- Update the schema version number.
 UPDATE schema_version
     SET version = '14', minor = '0';