]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[trac5097] regen flex/bison files
authorFrancis Dupont <fdupont@isc.org>
Thu, 12 Jan 2017 00:57:16 +0000 (00:57 +0000)
committerFrancis Dupont <fdupont@isc.org>
Thu, 12 Jan 2017 00:57:16 +0000 (00:57 +0000)
12 files changed:
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/location.hh
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh

index 23145b4bc47ecd787ee210d1fdff40d11cc3051d..957c71e1e02de39d39336dd436628c00c4c9148b 100644 (file)
@@ -467,8 +467,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
        (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 116
-#define YY_END_OF_BUFFER 117
+#define YY_NUM_RULES 117
+#define YY_END_OF_BUFFER 118
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -476,107 +476,108 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[901] =
+static yyconst flex_int16_t yy_accept[910] =
     {   0,
-      109,  109,    0,    0,    0,    0,    0,    0,    0,    0,
-      117,  115,   10,   11,  115,    1,  109,  106,  109,  109,
-      115,  108,  107,  115,  115,  115,  115,  115,  102,  103,
-      115,  115,  115,  104,  105,    5,    5,    5,  115,  115,
-      115,   10,   11,    0,    0,   98,    0,    0,    0,    0,
+      110,  110,    0,    0,    0,    0,    0,    0,    0,    0,
+      118,  116,   10,   11,  116,    1,  110,  107,  110,  110,
+      116,  109,  108,  116,  116,  116,  116,  116,  103,  104,
+      116,  116,  116,  105,  106,    5,    5,    5,  116,  116,
+      116,   10,   11,    0,    0,   99,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    1,  109,
-      109,    0,  108,  109,    3,    2,    6,    0,  109,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    1,  110,
+      110,    0,  109,  110,    3,    2,    6,    0,  110,    0,
         0,    0,    0,    0,    0,    4,    0,    0,    9,    0,
-       99,    0,    0,    0,    0,    0,  101,    0,    0,    0,
+      100,    0,    0,    0,    0,    0,  102,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    2,    0,    0,    0,    0,    0,    0,
-        0,    8,    0,    0,    0,    0,    0,  100,    0,    0,
+        0,    8,    0,    0,    0,    0,    0,  101,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   41,    0,    0,    0,    0,    0,    0,    0,    0,
+        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,    0,    0,    0,    0,    0,    0,    0,    0,
-      114,  112,    0,  111,  110,    0,    0,    0,    0,    0,
+      115,  113,    0,  112,  111,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,   15,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   16,    0,    0,
-        0,  113,  110,    0,    0,    0,    0,    0,    0,    0,
+        0,  114,  111,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,   44,    0,    0,   35,
-        0,    0,    0,    0,   56,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   45,    0,    0,   35,
+        0,    0,    0,    0,   57,    0,    0,    0,    0,    0,
         0,    0,   24,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   34,    0,    0,
         0,    0,    0,    0,   37,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   54,
-       74,   21,    0,   22,    0,    0,    0,    0,    0,   12,
-       88,    0,    0,   65,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   55,
+       75,   21,    0,   22,    0,    0,    0,    0,    0,    0,
+       12,   89,    0,    0,   66,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   73,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   74,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   36,    0,    0,    0,    0,    0,   66,    0,    0,
-        0,    0,    0,   61,    0,    0,    0,    7,    0,    0,
+        0,    0,   36,    0,    0,    0,    0,    0,   67,    0,
+        0,    0,    0,    0,   62,    0,    0,    0,    0,    7,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   49,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   38,
-        0,    0,    0,    0,    0,    0,   46,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   50,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   39,    0,    0,    0,    0,    0,    0,    0,   47,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   70,   47,    0,    0,    0,    0,
-        0,    0,    0,   25,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   31,    0,    0,    0,
-        0,   89,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   71,   48,    0,
+        0,    0,    0,    0,    0,    0,   25,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   31,
+        0,    0,    0,    0,    0,   90,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   61,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   60,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   23,    0,   20,    0,
-        0,    0,    0,    0,    0,    0,   51,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   58,    0,    0,    0,
+       23,    0,   20,    0,    0,    0,    0,    0,    0,    0,
+       52,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,   87,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   39,    0,    0,    0,    0,
+        0,   59,    0,    0,    0,    0,   88,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   71,    0,    0,    0,    0,
-        0,   92,    0,   59,    0,    0,   62,   50,    0,    0,
+       40,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       57,   72,    0,   17,    0,   67,    0,    0,    0,    0,
-        0,    0,   32,    0,   69,    0,    0,    0,    0,    0,
+       72,    0,    0,    0,    0,    0,    0,   93,    0,   60,
+        0,    0,   63,   51,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   58,   73,    0,   17,
+        0,   68,    0,    0,    0,    0,    0,    0,   32,    0,
+       70,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   64,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,   95,   33,
-        0,    0,    0,    0,    0,   28,    0,    0,    0,   86,
-       85,    0,    0,    0,    0,   53,    0,    0,    0,    0,
-       83,    0,    0,    0,    0,    0,    0,    0,    0,   40,
-        0,    0,   26,    0,    0,    0,    0,   42,   29,    0,
-       63,    0,   55,    0,    0,    0,   90,    0,    0,    0,
-        0,    0,    0,    0,   75,    0,    0,    0,    0,    0,
+
+        0,   65,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   96,   33,    0,    0,    0,
+        0,    0,   28,    0,    0,    0,   87,   86,    0,    0,
+        0,    0,    0,   54,    0,    0,    0,    0,   84,    0,
+        0,    0,    0,    0,    0,    0,    0,   41,    0,    0,
+       26,    0,    0,    0,    0,   43,   29,    0,   64,    0,
+       56,    0,    0,   38,    0,   91,    0,    0,    0,    0,
+        0,    0,    0,   76,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   97,   52,   84,    0,    0,   93,    0,
-        0,    0,    0,    0,   19,    0,   18,    0,    0,    0,
-
-       48,    0,    0,    0,    0,   27,    0,    0,    0,    0,
-        0,    0,   68,    0,    0,   94,    0,    0,    0,    0,
-       96,    0,   91,    0,   14,    0,    0,    0,    0,    0,
-        0,   81,    0,   43,    0,    0,    0,    0,    0,    0,
-       13,    0,    0,    0,    0,    0,    0,    0,    0,   80,
-        0,    0,    0,    0,    0,   79,    0,    0,    0,    0,
+        0,    0,   98,   53,   85,    0,    0,   94,    0,    0,
+
+        0,    0,    0,   19,    0,   18,    0,    0,    0,   49,
+        0,    0,    0,    0,   27,    0,    0,    0,    0,    0,
+        0,   69,    0,    0,   95,    0,    0,    0,    0,   97,
+        0,   92,    0,   14,    0,    0,    0,    0,    0,    0,
+       82,    0,   44,    0,    0,    0,    0,    0,    0,   13,
+        0,    0,    0,    0,    0,    0,    0,    0,   81,    0,
+        0,    0,    0,    0,   80,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   77,   82,   30,    0,    0,    0,   76,    0,    0,
-        0,    0,    0,    0,    0,   45,    0,    0,   78,    0
+       78,   83,   30,    0,    0,    0,   77,    0,    0,    0,
 
+        0,    0,    0,    0,   46,    0,    0,   79,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -621,217 +622,219 @@ static yyconst YY_CHAR yy_meta[61] =
         5,    3,    5,    5,    3,    3,    3,    3,    3,    3
     } ;
 
-static yyconst flex_uint16_t yy_base[913] =
+static yyconst flex_uint16_t yy_base[922] =
     {   0,
         0,    0,   59,   62,   65,    0,   63,   67,   64,   66,
-     1204, 1205,   83, 1200,  125,    0,  174, 1205,  179,  185,
-       80,  192, 1205, 1182,   87,   79,   37,   66, 1205, 1205,
-       83,  156,  164, 1205, 1205, 1205,  110, 1188, 1152,    0,
-     1180,  118, 1195,  190,  218, 1205, 1148, 1153, 1146,  247,
-     1143, 1144,  178,  177,  164, 1146,  186,  190,  234, 1155,
-      207,  195,  241,  210,  242,  245,  254, 1154,    0,  293,
-      298,  309,  315,  320, 1205,    0, 1205,  326,  331,  202,
-      253,  180,  302,  306,  232, 1205, 1151, 1182, 1205,  288,
-     1205, 1133, 1170, 1147, 1142, 1177,    0,  347, 1131, 1132,
-
-     1129, 1135,  310, 1123, 1124,  199, 1138, 1131, 1131,  266,
-     1123, 1118,  304, 1113, 1159,  212, 1116, 1157, 1131, 1128,
-     1128, 1122,  258, 1116, 1105, 1108, 1107,  313, 1108, 1109,
-      287,  343,  322, 1119, 1120, 1118, 1102, 1106, 1102, 1101,
-     1094, 1109, 1102,    0,  322,  350,  335,  338,  352,  342,
-     1101, 1205,    0, 1135, 1095, 1102, 1137, 1205,  385, 1106,
-     1088, 1102, 1099, 1098, 1084, 1125, 1099, 1080, 1087, 1082,
-     1092, 1081, 1093, 1088, 1083, 1074, 1086, 1079, 1070, 1072,
-     1085, 1205, 1072, 1079, 1082, 1065, 1105, 1064, 1072, 1075,
-     1101, 1071, 1057, 1065, 1058, 1071, 1054, 1053, 1058, 1059,
-
-     1096, 1062, 1056,  308, 1063, 1058, 1057, 1041, 1055, 1049,
-     1055, 1044, 1038, 1050, 1049, 1082, 1051, 1035, 1041,  373,
-     1205, 1205,  378, 1205, 1205, 1030,    0,  153,  388, 1039,
-      413, 1024, 1070, 1026, 1031, 1072, 1026, 1035, 1069, 1032,
-     1029,  401, 1066, 1060, 1020, 1018, 1017, 1024, 1055, 1013,
-      408, 1024, 1024, 1009, 1010, 1021, 1019, 1014, 1021, 1016,
-     1012, 1003, 1047, 1041, 1002,  996, 1002,  992, 1003,  245,
-     1007, 1205,  996,  996, 1007,  991,  983,  984,  988,  998,
-      986,  996,  995,  994, 1027, 1026, 1025, 1205,  979, 1023,
-      989, 1205, 1205,  988,    0,  978,  971, 1018, 1017,  983,
-
-      973,  447, 1014,  978,  974,  964, 1205,  967,  966, 1205,
-      968,  965,  353,  963, 1205,  973,  958,  959,  968,  996,
-      955,  994, 1205,  953,  967,  991,  995,  961,  955,  957,
-      958,  985,  947,  943,  942,  981,  951, 1205,  938,  941,
-      935,  947,  937,  933, 1205,  978,  972,  934,  942,  936,
-      940,  972,  966,  921,  924,  930,  920,  966,  918, 1205,
-     1205, 1205,  922, 1205,  958,  928,    0,  914,  929, 1205,
-     1205,  917,  922, 1205,  919,  909,  950,  914,  908,  918,
-      917,  917,  906,  938,  907,  898,  900,  911,  898,  908,
-      901,  906,  898,  905, 1205,  892,  901,  905,  889,  900,
-
-      885,  879,  884,  897,  896,  893,  921,  270,  878,  879,
-      876, 1205,  890,  881,  915,  878,  913, 1205,  870,  886,
-      910,  867,  908, 1205,  424,  878,  871, 1205,  876,  867,
-      862,  907,  866,  900,  402,  899,  862,  853,  896,  858,
-      867,  893,  859,  856,  857,  889,  859,  860,  853,  844,
-      855,  858,  853,  848,  853,  850,  853,  848,  881,  880,
-      839,  838,  832,  843, 1205,  832,  840,  840,  872,  828,
-      818,  822,  863,  820,  828,  818,  350,  812,   68, 1205,
-      863,  829,  823,  815,  825,  858, 1205,  823,  818,  815,
-      821,  807,  822,  817,  806,  803,  809,  803,  812,  815,
-
-      798,  803,  810,  801,  809,  805,  838,  790,  790,  801,
-      800,  787,  785,  786, 1205, 1205,  792,  799,  779,  405,
-      783,  781,  825, 1205,  783,  823,  784,  774,  768,  778,
-      780,  774,  783,  815,  784,  761, 1205,  807,  776,  775,
-      762, 1205,  803,  774,  776,  805,  761,  756,  762,  756,
-      800,  765,  755,  755,  749,  761,  760,  753,  762,  746,
-      745, 1205,  759,  742,  742,  437,  740,  755,  735,  749,
-      744,  747,  733,  744,  731,  731, 1205,  735, 1205,  734,
-      736,  729,  738,  728,  724,  769, 1205,  727,  723,  721,
-      731,  734,  763,  720,  761,  714, 1205,  727,  758,  757,
-
-      713, 1205,  708,  709,  706,  718,  746,  720,  719,  710,
-      717,  697,  714,  744,  743, 1205,  704,  409,  741,  709,
-      709,  696,  696,  691,  705,  734,  695,  732,  693,  696,
-      688,  694,  682,  684,  678, 1205,  690,  689,  688,  674,
-      688, 1205,  689, 1205,  672,  678, 1205, 1205,  685,  710,
-      667,  708,  712,  673,  664,  671,  667,  662,  676,  675,
-     1205, 1205,  657, 1205,  650, 1205,  633,  621,  607,  112,
-      220,  281, 1205,  267, 1205,  273,  366,  391,  380,  427,
-      444,  394,  438,  441,  419,  414,  419,  417,  459,  426,
-      431,  420,  468,  431, 1205,  437,  437,  431,  439,  436,
-
-      428,  430,  484,  442,  440,  487,  483,  449, 1205, 1205,
-      449,  492,  494,  450,  497, 1205,  457,  499,  470, 1205,
-     1205,  461,  461,  503,  470, 1205,  459,  459,  460,  457,
-     1205,  477,  511,  466,  479,  481,  481,  478,  483, 1205,
-      476,  485, 1205,  482,  487,  484,  477, 1205, 1205,  519,
-     1205,  482, 1205,  485,  497,  494, 1205,  491,  530,  531,
-      532,  495,  490,  535, 1205,  531,  504,  533,  493,  497,
-      541,  507,  543,  511,  515,  505,  547,  498,  516,  516,
-      513,  552,  520, 1205, 1205, 1205,  511,  521, 1205,  512,
-      552,  511,  559,  518, 1205,  523, 1205,  562,  517,  530,
-
-     1205,  535,  532,  567,  527, 1205,  569,  528,  571,  527,
-      526,  536, 1205,  570,  540, 1205,  543,  578,  541,  580,
-     1205,  576, 1205,  577, 1205,  540,  546,  544,  548,  587,
-      542, 1205,  542, 1205,  558,  547,  560,  552,  560,  562,
-     1205,  596,  592,  546,  565,  566,  567,  602,  569, 1205,
-      557,  573,  561,  561,  563, 1205,  567,  572,  571,  574,
-      567,  609,  568,  575,  583,  575,  581,  570,  583,  588,
-      577,  591,  583,  596,  592,  628,  629,  630,  595,  594,
-      595, 1205, 1205, 1205,  634,  588,  602, 1205,  632,  593,
-      592,  594,  603,  642,  602, 1205,  610,  645, 1205, 1205,
-
-      651,  658,  665,  672,  679,  686,  690,  695,  697,  699,
-      701,  703
+     1213, 1214,   83, 1209,  125,    0,  174, 1214,  179,  185,
+       80,  192, 1214, 1191,   87,   79,   37,   66, 1214, 1214,
+       83,  156,  164, 1214, 1214, 1214,  110, 1197, 1161,    0,
+     1189,  118, 1204,  190,  218, 1214, 1157, 1162, 1155,  247,
+     1152, 1153,  178,  177,  164, 1155,  186,  190,  234, 1164,
+      207,  195,  241,  210,  242,  245,  254, 1163,    0,  293,
+      298,  309,  315,  320, 1214,    0, 1214,  326,  331,  202,
+      253,  180,  302,  306,  232, 1214, 1160, 1191, 1214,  288,
+     1214, 1142, 1179, 1156, 1151, 1186,    0,  347, 1140, 1141,
+
+     1138, 1144,  310, 1132, 1133,  199, 1147, 1140, 1140,  266,
+     1132, 1127,  304, 1122, 1168,  212, 1125, 1166, 1140, 1137,
+     1137, 1131,  258, 1125, 1114, 1117, 1116,  313, 1117, 1118,
+      287,  343,  322, 1128, 1129, 1127, 1111, 1115, 1111, 1110,
+     1103, 1118, 1111,    0,  322,  350,  335,  338,  352,  342,
+     1110, 1214,    0, 1144, 1104, 1111, 1146, 1214,  385, 1115,
+     1097, 1111, 1108, 1107, 1093, 1134, 1108, 1089, 1096, 1091,
+     1101, 1090, 1102, 1097, 1092, 1083, 1095, 1088, 1079, 1081,
+     1094, 1214, 1081, 1088, 1091, 1074, 1114, 1073, 1081, 1084,
+     1110, 1080, 1066, 1074, 1067, 1080, 1063, 1062, 1067, 1068,
+
+     1105, 1071, 1065,  308, 1072, 1067, 1066, 1050, 1064, 1058,
+     1064, 1053, 1047, 1059, 1058, 1091, 1060, 1044, 1050,  373,
+     1214, 1214,  378, 1214, 1214, 1039,    0,  153,  388, 1048,
+      413, 1033, 1079, 1035, 1040, 1081, 1035, 1044, 1078, 1041,
+     1038,  401, 1075, 1069, 1029, 1027, 1026, 1033, 1064, 1022,
+      408, 1033, 1033, 1018, 1019, 1030, 1028, 1023, 1030, 1025,
+     1021, 1012, 1056, 1050, 1011, 1005, 1011, 1001, 1012,  245,
+     1016, 1214, 1005, 1005, 1016, 1000,  992,  993,  997, 1007,
+      995, 1005, 1004, 1003, 1036, 1035, 1034, 1214,  988,  110,
+      999, 1214, 1214,  998,    0,  988,  981, 1028, 1027,  993,
+
+      983,  447, 1024,  988,  984,  974, 1214,  977,  976, 1214,
+      978,  975,  353,  973, 1214,  983,  968,  969,  978, 1006,
+      965, 1004, 1214,  963,  977, 1001, 1005,  971,  965,  967,
+      968,  995,  957,  953,  952,  991,  961, 1214,  948,  951,
+      945,  957,  947,  943, 1214,  988,  982,  944,  952,  946,
+      950,  982,  976,  931,  934,  940,  930,  976,  928, 1214,
+     1214, 1214,  932, 1214,  941,  967,  937,    0,  923,  938,
+     1214, 1214,  926,  931, 1214,  928,  918,  959,  923,  917,
+      927,  926,  926,  915,  947,  916,  907,  909,  920,  907,
+      917,  910,  915,  907,  914, 1214,  901,  910,  914,  898,
+
+      909,  894,  888,  893,  906,  905,  902,  930,  270,  887,
+      888,  885, 1214,  899,  890,  924,  887,  922, 1214,  879,
+      895,  919,  876,  917, 1214,  424,  887,  877,  879, 1214,
+      884,  875,  870,  915,  874,  908,  402,  907,  870,  861,
+      904,  866,  875,  901,  867,  864,  865,  897,  867,  868,
+      861,  852,  863,  866,  861,  856,  861,  858,  861,  856,
+      889,  888,  847,  846,  840,  851, 1214,  840,  848,  848,
+      880,  836,  826,  830,  871,  828,  836,  826,  350,  820,
+      367, 1214,  871,  837,  827,  830,  822,  832,  865, 1214,
+      830,  825,  822,  828,  814,  829,  824,  813,  810,  816,
+
+      810,  819,  822,  805,  810,  817,  808,  816,  812,  845,
+      797,  797,  808,  807,  794,  792,  793, 1214, 1214,  799,
+      806,  786,  405,  790,  788,  832, 1214,  790,  830,  791,
+      781,  775,  785,  787,  781,  790,  822,  791,  768, 1214,
+      814,  771,  782,  781,  768, 1214,  809,  780,  782,  811,
+      767,  762,  768,  762,  806,  771,  761,  761,  755,  767,
+      766,  759,  768,  752,  751, 1214,  765,  748,  748,  437,
+      746,  761,  741,  755,  750,  753,  739,  750,  737,  737,
+     1214,  741, 1214,  740,  742,  735,  744,  734,  730,  775,
+     1214,  733,  729,  727,  737,  736,  739,  768,  725,  766,
+
+      719, 1214,  732,  763,  762,  718, 1214,  713,  714,  711,
+      723,  751,  725,  724,  715,  722,  702,  719,  749,  748,
+     1214,  709,  436,  746,  714,  714,  701,  701,  696,  710,
+      739,  700,  737,  698,  701,  693,  699,  687,  689,  683,
+     1214,  695,  694,  693,  675,  678,  692, 1214,  693, 1214,
+      676,  682, 1214, 1214,  689,  714,  671,  712,  716,  677,
+      668,  661,  650,  627,  640,  633, 1214, 1214,   84, 1214,
+      188, 1214,  251,  270,  273,  406,  425,  426, 1214,  384,
+     1214,  391,  404,  417,  406,  453,  453,  417,  460,  461,
+      435,  421,  431,  436,  430,  472,  439,  444,  428,  476,
+
+      446, 1214,  452,  452,  446,  454,  451,  443,  445,  492,
+      450,  448,  495,  491,  457, 1214, 1214,  456,  500,  501,
+      457,  503, 1214,  464,  507,  478, 1214, 1214,  469,  510,
+      470,  512,  479, 1214,  468,  468,  469,  466, 1214,  486,
+      520,  475,  488,  490,  490,  487,  492, 1214,  485,  494,
+     1214,  491,  496,  493,  486, 1214, 1214,  528, 1214,  491,
+     1214,  494,  506, 1214,  503, 1214,  500,  539,  540,  541,
+      504,  499,  544, 1214,  540,  513,  542,  502,  506,  550,
+      516,  552,  520,  524,  514,  556,  507,  525,  525,  522,
+      561,  529, 1214, 1214, 1214,  520,  530, 1214,  521,  561,
+
+      520,  568,  527, 1214,  532, 1214,  571,  526,  539, 1214,
+      544,  541,  576,  536, 1214,  578,  537,  580,  536,  535,
+      545, 1214,  579,  549, 1214,  552,  587,  550,  589, 1214,
+      585, 1214,  586, 1214,  549,  555,  553,  557,  596,  551,
+     1214,  551, 1214,  567,  556,  569,  561,  569,  571, 1214,
+      605,  601,  555,  574,  575,  576,  611,  578, 1214,  566,
+      582,  570,  570,  572, 1214,  576,  581,  580,  583,  576,
+      618,  577,  584,  592,  584,  590,  579,  592,  597,  586,
+      600,  592,  605,  601,  637,  638,  639,  604,  603,  604,
+     1214, 1214, 1214,  643,  597,  611, 1214,  641,  602,  601,
+
+      603,  612,  651,  611, 1214,  619,  654, 1214, 1214,  660,
+      667,  674,  681,  688,  695,  699,  704,  706,  708,  710,
+      712
     } ;
 
-static yyconst flex_int16_t yy_def[913] =
+static yyconst flex_int16_t yy_def[922] =
     {   0,
-      900,    1,  901,  901,    1,    5,    5,    5,    5,    5,
-      900,  900,  900,  900,  900,  902,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  903,
-      900,  900,  900,  904,   15,  900,   45,   45,   45,  905,
+      909,    1,  910,  910,    1,    5,    5,    5,    5,    5,
+      909,  909,  909,  909,  909,  911,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  912,
+      909,  909,  909,  913,   15,  909,   45,   45,   45,  914,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,  902,  900,
-      900,  900,  900,  900,  900,  906,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  903,  900,  904,
-      900,  907,   45,   45,   45,  908,   45,  905,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,  911,  909,
+      909,  909,  909,  909,  909,  915,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  912,  909,  913,
+      909,  916,   45,   45,   45,  917,   45,  914,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  906,  900,  900,  900,  900,  900,  900,
-      900,  900,  909,   45,   45,   45,  908,  900,  905,   45,
+       45,   45,   45,  915,  909,  909,  909,  909,  909,  909,
+      909,  909,  918,   45,   45,   45,  917,  909,  914,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  900,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,  909,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  900,
-      900,  900,  900,  900,  900,  900,  910,   45,   45,   45,
-      905,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  909,
+      909,  909,  909,  909,  909,  909,  919,   45,   45,   45,
+      914,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  900,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  900,   45,   45,
-       45,  900,  900,  900,  911,   45,   45,   45,   45,   45,
-
-       45,  905,   45,   45,   45,   45,  900,   45,   45,  900,
-       45,   45,   45,   45,  900,   45,   45,   45,   45,   45,
-       45,   45,  900,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  900,   45,   45,
-       45,   45,   45,   45,  900,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  900,
-      900,  900,   45,  900,   45,  900,  912,   45,   45,  900,
-      900,   45,   45,  900,   45,   45,   45,   45,   45,   45,
+       45,  909,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  909,   45,   45,
+       45,  909,  909,  909,  920,   45,   45,   45,   45,   45,
+
+       45,  914,   45,   45,   45,   45,  909,   45,   45,  909,
+       45,   45,   45,   45,  909,   45,   45,   45,   45,   45,
+       45,   45,  909,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  909,   45,   45,
+       45,   45,   45,   45,  909,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  909,
+      909,  909,   45,  909,   45,   45,  909,  921,   45,   45,
+      909,  909,   45,   45,  909,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  900,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  909,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  900,   45,   45,   45,   45,   45,  900,   45,   45,
-       45,   45,   45,  900,   45,   45,   45,  900,   45,   45,
+       45,   45,  909,   45,   45,   45,   45,   45,  909,   45,
+       45,   45,   45,   45,  909,   45,   45,   45,   45,  909,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  900,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  900,
-       45,   45,   45,   45,   45,   45,  900,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  909,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,  909,   45,   45,   45,   45,   45,   45,   45,  909,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  900,  900,   45,   45,   45,   45,
-       45,   45,   45,  900,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  900,   45,   45,   45,
-       45,  900,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  909,  909,   45,
+       45,   45,   45,   45,   45,   45,  909,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  909,
+       45,   45,   45,   45,   45,  909,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  909,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  900,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  900,   45,  900,   45,
-       45,   45,   45,   45,   45,   45,  900,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  900,   45,   45,   45,
+      909,   45,  909,   45,   45,   45,   45,   45,   45,   45,
+      909,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,  900,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,  900,   45,   45,   45,   45,
+       45,  909,   45,   45,   45,   45,  909,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,  900,   45,   45,   45,   45,
-       45,  900,   45,  900,   45,   45,  900,  900,   45,   45,
+      909,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      900,  900,   45,  900,   45,  900,   45,   45,   45,   45,
-       45,   45,  900,   45,  900,   45,   45,   45,   45,   45,
+      909,   45,   45,   45,   45,   45,   45,  909,   45,  909,
+       45,   45,  909,  909,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  909,  909,   45,  909,
+       45,  909,   45,   45,   45,   45,   45,   45,  909,   45,
+      909,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  900,   45,   45,   45,   45,   45,
-
-       45,   45,   45,   45,   45,   45,   45,   45,  900,  900,
-       45,   45,   45,   45,   45,  900,   45,   45,   45,  900,
-      900,   45,   45,   45,   45,  900,   45,   45,   45,   45,
-      900,   45,   45,   45,   45,   45,   45,   45,   45,  900,
-       45,   45,  900,   45,   45,   45,   45,  900,  900,   45,
-      900,   45,  900,   45,   45,   45,  900,   45,   45,   45,
-       45,   45,   45,   45,  900,   45,   45,   45,   45,   45,
+
+       45,  909,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  909,  909,   45,   45,   45,
+       45,   45,  909,   45,   45,   45,  909,  909,   45,   45,
+       45,   45,   45,  909,   45,   45,   45,   45,  909,   45,
+       45,   45,   45,   45,   45,   45,   45,  909,   45,   45,
+      909,   45,   45,   45,   45,  909,  909,   45,  909,   45,
+      909,   45,   45,  909,   45,  909,   45,   45,   45,   45,
+       45,   45,   45,  909,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  900,  900,  900,   45,   45,  900,   45,
-       45,   45,   45,   45,  900,   45,  900,   45,   45,   45,
-
-      900,   45,   45,   45,   45,  900,   45,   45,   45,   45,
-       45,   45,  900,   45,   45,  900,   45,   45,   45,   45,
-      900,   45,  900,   45,  900,   45,   45,   45,   45,   45,
-       45,  900,   45,  900,   45,   45,   45,   45,   45,   45,
-      900,   45,   45,   45,   45,   45,   45,   45,   45,  900,
-       45,   45,   45,   45,   45,  900,   45,   45,   45,   45,
+       45,   45,  909,  909,  909,   45,   45,  909,   45,   45,
+
+       45,   45,   45,  909,   45,  909,   45,   45,   45,  909,
+       45,   45,   45,   45,  909,   45,   45,   45,   45,   45,
+       45,  909,   45,   45,  909,   45,   45,   45,   45,  909,
+       45,  909,   45,  909,   45,   45,   45,   45,   45,   45,
+      909,   45,  909,   45,   45,   45,   45,   45,   45,  909,
+       45,   45,   45,   45,   45,   45,   45,   45,  909,   45,
+       45,   45,   45,   45,  909,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  900,  900,  900,   45,   45,   45,  900,   45,   45,
-       45,   45,   45,   45,   45,  900,   45,   45,  900,    0,
+      909,  909,  909,   45,   45,   45,  909,   45,   45,   45,
 
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900
+       45,   45,   45,   45,  909,   45,   45,  909,    0,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1266] =
+static yyconst flex_uint16_t yy_nxt[1275] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
@@ -845,8 +848,8 @@ static yyconst flex_uint16_t yy_nxt[1266] =
        81,   12,   76,   82,   12,   78,   12,   78,   12,   80,
 
        79,   79,   79,   80,   12,   12,   12,   12,   39,   12,
-       12,   42,   12,   42,   80,  535,   82,   12,   83,   42,
-      536,   42,  708,   12,   12,   44,   44,   44,   45,   45,
+       12,   42,   12,   42,   80,  364,   82,   12,   83,   42,
+      365,   42,  710,   12,   12,   44,   44,   44,   45,   45,
        46,   45,   45,   45,   45,   45,   45,   45,   45,   47,
        45,   45,   45,   45,   45,   45,   45,   48,   45,   45,
        49,   45,   45,   45,   45,   45,   45,   50,   45,   45,
@@ -857,40 +860,40 @@ static yyconst flex_uint16_t yy_nxt[1266] =
 
        74,  109,   72,   70,  297,   73,   73,   73,   72,   84,
       147,  110,  105,   72,   85,   72,  106,  182,   72,  107,
-      111,  101,   92,  102,   72,  709,  103,  145,  116,  104,
+      111,  101,   92,  102,   72,  711,  103,  145,  116,  104,
       108,   72,   45,  147,  113,  168,  169,  117,  114,  118,
        45,  115,  124,   45,  126,  131,  125,  145,  127,  132,
       345,  183,   97,   45,   45,   45,   45,   45,   45,   45,
        45,   45,  147,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  119,  120,  465,  128,  121,  146,   45,
-      129,  133,  122,   45,  137,  150,  710,   45,  138,  130,
+       45,   45,   45,  119,  120,  467,  128,  121,  146,   45,
+      129,  133,  122,   45,  137,  150,  712,   45,  138,  130,
       134,  135,  140,   91,   45,  136,  346,   45,  146,   45,
 
-       98,  141,  139,  173,  466,  142,   74,   74,   74,   70,
-      190,   71,   71,   71,  191,  711,   72,   78,  174,   78,
-       92,   72,   79,   79,   79,  712,   70,  145,   73,   73,
+       98,  141,  139,  173,  468,  142,   74,   74,   74,   70,
+      190,   71,   71,   71,  191,  713,   72,   78,  174,   78,
+       92,   72,   79,   79,   79,  714,   70,  145,   73,   73,
        73,  146,   72,   74,   74,   74,  200,   72,   72,   79,
        79,   79,  201,   72,   79,   79,   79,  148,  164,  177,
       220,  149,  178,  275,   72,  179,  276,  165,  222,   72,
       159,  159,  159,  196,  197,  222,  220,  159,  159,  159,
       159,  159,  208,  220,  222,  221,  209,  221,  202,  203,
       204,  225,  159,  159,  159,  159,  159,  159,  205,  223,
-      206,  382,  532,  533,  207,  221,  292,  224,  231,  231,
-
-      231,  292,  298,  299,  383,  231,  231,  231,  231,  231,
-      300,  313,  292,  323,  664,  314,  713,  293,  324,  665,
-      231,  231,  231,  231,  231,  231,  302,  302,  302,  480,
-      714,  715,  716,  302,  302,  302,  302,  302,  481,  490,
-      573,  719,  616,  720,  574,  491,  721,  617,  302,  302,
-      302,  302,  302,  302,  717,  325,  722,  723,  724,  326,
-       45,   45,   45,  725,  726,  728,  729,   45,   45,   45,
-       45,   45,  730,  731,  732,  733,  734,  735,  736,  737,
-      738,  739,   45,   45,   45,   45,   45,   45,  618,  740,
-      741,  742,  743,  744,  745,  718,  747,  748,  727,  749,
-
-      750,  746,  751,  752,  753,  754,  755,  756,  757,  759,
-      760,  761,  762,  758,  763,  764,  765,  766,  767,  768,
-      769,  770,  771,  772,  773,  774,  775,  776,  777,  778,
+      206,  383,  535,  536,  207,  221,  292,  224,  231,  231,
+
+      231,  292,  298,  299,  384,  231,  231,  231,  231,  231,
+      300,  313,  292,  323,  538,  314,  715,  293,  324,  539,
+      231,  231,  231,  231,  231,  231,  302,  302,  302,  482,
+      716,  717,  718,  302,  302,  302,  302,  302,  483,  493,
+      577,  670,  621,  719,  578,  494,  671,  622,  302,  302,
+      302,  302,  302,  302,  720,  325,  721,  722,  723,  326,
+       45,   45,   45,  724,  726,  727,  728,   45,   45,   45,
+       45,   45,  729,  730,  731,  732,  733,  734,  736,  737,
+      738,  739,   45,   45,   45,   45,   45,   45,  623,  740,
+      741,  742,  743,  744,  745,  746,  747,  748,  749,  750,
+
+      751,  752,  753,  755,  725,  756,  757,  758,  759,  754,
+      760,  735,  761,  762,  763,  764,  765,  766,  768,  769,
+      770,  771,  767,  772,  773,  774,  775,  776,  777,  778,
       779,  780,  781,  782,  783,  784,  785,  786,  787,  788,
       789,  790,  791,  792,  793,  794,  795,  796,  797,  798,
       799,  800,  801,  802,  803,  804,  805,  806,  807,  808,
@@ -904,77 +907,78 @@ static yyconst flex_uint16_t yy_nxt[1266] =
       869,  870,  871,  872,  873,  874,  875,  876,  877,  878,
       879,  880,  881,  882,  883,  884,  885,  886,  887,  888,
       889,  890,  891,  892,  893,  894,  895,  896,  897,  898,
-      899,   36,   36,   36,   36,   36,   36,   36,   69,  707,
-       69,   69,   69,   69,   69,   88,  706,   88,  705,   88,
-       88,   88,   90,   90,   90,   90,   90,   90,   90,   96,
-       96,   96,   96,   96,   96,   96,  144,  704,  144,  144,
-      144,  144,  144,   90,   90,  703,   90,  157,  157,  157,
-
-      157,  157,  227,  227,  295,  295,  367,  367,   90,   90,
-      702,  701,  700,  699,  698,  697,  696,  695,  694,  693,
-      692,  691,  690,  689,  688,  687,  686,  685,  684,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  674,  673,
-      672,  671,  670,  669,  668,  667,  666,  663,  662,  661,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
-      650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
-      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
-      620,  619,  615,  614,  613,  612,  611,  610,  609,  608,
-
-      607,  606,  605,  604,  603,  602,  601,  600,  599,  598,
-      597,  596,  595,  594,  593,  592,  591,  590,  589,  588,
-      587,  586,  585,  584,  583,  582,  581,  580,  579,  578,
-      577,  576,  575,  572,  571,  570,  569,  568,  567,  566,
-      565,  564,  563,  562,  561,  560,  559,  558,  557,  556,
-      555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-      545,  544,  543,  542,  541,  540,  539,  538,  537,  534,
-      531,  530,  529,  528,  527,  526,  525,  524,  523,  522,
-      521,  520,  519,  518,  517,  516,  515,  514,  513,  512,
-      511,  510,  509,  508,  507,  506,  505,  504,  503,  502,
-
-      501,  500,  499,  498,  497,  496,  495,  494,  493,  492,
-      489,  488,  487,  486,  485,  484,  483,  482,  479,  478,
-      477,  476,  475,  474,  473,  472,  471,  470,  469,  468,
-      467,  464,  463,  462,  461,  460,  459,  458,  457,  456,
-      455,  454,  453,  452,  451,  450,  449,  448,  447,  446,
-      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
-      435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
-      425,  424,  423,  422,  421,  420,  419,  418,  417,  416,
-      415,  414,  413,  412,  411,  410,  409,  408,  407,  406,
-      405,  404,  403,  402,  401,  400,  399,  398,  397,  396,
-
-      395,  394,  393,  392,  391,  390,  389,  388,  387,  386,
-      385,  384,  381,  380,  379,  378,  377,  376,  375,  374,
-      373,  372,  371,  370,  369,  368,  366,  365,  364,  363,
-      362,  361,  360,  359,  358,  357,  356,  355,  354,  353,
-      352,  351,  350,  349,  348,  347,  344,  343,  342,  341,
-      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
-      330,  329,  328,  327,  322,  321,  320,  319,  318,  317,
-      316,  315,  312,  311,  310,  309,  308,  307,  306,  305,
-      304,  303,  301,  294,  291,  290,  289,  288,  287,  286,
-      285,  284,  283,  282,  281,  280,  279,  278,  277,  274,
-
-      273,  272,  271,  270,  269,  268,  267,  266,  265,  264,
-      263,  262,  261,  260,  259,  258,  257,  256,  255,  254,
-      253,  252,  251,  250,  249,  248,  247,  246,  245,  244,
-      243,  242,  241,  240,  239,  238,  237,  236,  235,  234,
-      233,  232,  158,  230,  229,  228,  226,  219,  218,  217,
-      216,  215,  214,  213,  212,  211,  210,  199,  198,  195,
-      194,  193,  192,  189,  188,  187,  186,  185,  184,  181,
-      180,  176,  175,  172,  171,  170,  167,  166,  163,  162,
-      161,  160,  158,  156,  155,  154,  153,  152,  151,  143,
-      123,  112,  100,   99,   95,   94,   93,   43,   89,   87,
-
-       86,   77,   43,  900,   11,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900
+      899,  900,  901,  902,  903,  904,  905,  906,  907,  908,
+       36,   36,   36,   36,   36,   36,   36,   69,  709,   69,
+       69,   69,   69,   69,   88,  708,   88,  707,   88,   88,
+       88,   90,   90,   90,   90,   90,   90,   90,   96,   96,
+       96,   96,   96,   96,   96,  144,  706,  144,  144,  144,
+
+      144,  144,   90,   90,  705,   90,  157,  157,  157,  157,
+      157,  227,  227,  295,  295,  368,  368,   90,   90,  704,
+      703,  702,  701,  700,  699,  698,  697,  696,  695,  694,
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
+      673,  672,  669,  668,  667,  666,  665,  664,  663,  662,
+      661,  660,  659,  658,  657,  656,  655,  654,  653,  652,
+      651,  650,  649,  648,  647,  646,  645,  644,  643,  642,
+      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  620,  619,
+
+      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
+      608,  607,  606,  605,  604,  603,  602,  601,  600,  599,
+      598,  597,  596,  595,  594,  593,  592,  591,  590,  589,
+      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
+      576,  575,  574,  573,  572,  571,  570,  569,  568,  567,
+      566,  565,  564,  563,  562,  561,  560,  559,  558,  557,
+      556,  555,  554,  553,  552,  551,  550,  549,  548,  547,
+      546,  545,  544,  543,  542,  541,  540,  537,  534,  533,
+      532,  531,  530,  529,  528,  527,  526,  525,  524,  523,
+      522,  521,  520,  519,  518,  517,  516,  515,  514,  513,
+
+      512,  511,  510,  509,  508,  507,  506,  505,  504,  503,
+      502,  501,  500,  499,  498,  497,  496,  495,  492,  491,
+      490,  489,  488,  487,  486,  485,  484,  481,  480,  479,
+      478,  477,  476,  475,  474,  473,  472,  471,  470,  469,
+      466,  465,  464,  463,  462,  461,  460,  459,  458,  457,
+      456,  455,  454,  453,  452,  451,  450,  449,  448,  447,
+      446,  445,  444,  443,  442,  441,  440,  439,  438,  437,
+      436,  435,  434,  433,  432,  431,  430,  429,  428,  427,
+      426,  425,  424,  423,  422,  421,  420,  419,  418,  417,
+      416,  415,  414,  413,  412,  411,  410,  409,  408,  407,
+
+      406,  405,  404,  403,  402,  401,  400,  399,  398,  397,
+      396,  395,  394,  393,  392,  391,  390,  389,  388,  387,
+      386,  385,  382,  381,  380,  379,  378,  377,  376,  375,
+      374,  373,  372,  371,  370,  369,  367,  366,  363,  362,
+      361,  360,  359,  358,  357,  356,  355,  354,  353,  352,
+      351,  350,  349,  348,  347,  344,  343,  342,  341,  340,
+      339,  338,  337,  336,  335,  334,  333,  332,  331,  330,
+      329,  328,  327,  322,  321,  320,  319,  318,  317,  316,
+      315,  312,  311,  310,  309,  308,  307,  306,  305,  304,
+      303,  301,  294,  291,  290,  289,  288,  287,  286,  285,
+
+      284,  283,  282,  281,  280,  279,  278,  277,  274,  273,
+      272,  271,  270,  269,  268,  267,  266,  265,  264,  263,
+      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
+      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
+      242,  241,  240,  239,  238,  237,  236,  235,  234,  233,
+      232,  158,  230,  229,  228,  226,  219,  218,  217,  216,
+      215,  214,  213,  212,  211,  210,  199,  198,  195,  194,
+      193,  192,  189,  188,  187,  186,  185,  184,  181,  180,
+      176,  175,  172,  171,  170,  167,  166,  163,  162,  161,
+      160,  158,  156,  155,  154,  153,  152,  151,  143,  123,
+
+      112,  100,   99,   95,   94,   93,   43,   89,   87,   86,
+       77,   43,  909,   11,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909
     } ;
 
-static yyconst flex_int16_t yy_chk[1266] =
+static yyconst flex_int16_t yy_chk[1275] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -988,8 +992,8 @@ static yyconst flex_int16_t yy_chk[1266] =
        27,    5,   21,   28,    5,   25,    5,   25,    5,   26,
 
        25,   25,   25,   31,    5,    5,    7,    9,    5,   10,
-        8,   37,    5,   37,   26,  479,   28,    5,   31,   42,
-      479,   42,  670,    5,    5,   15,   15,   15,   15,   15,
+        8,   37,    5,   37,   26,  290,   28,    5,   31,   42,
+      290,   42,  669,    5,    5,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1005,116 +1009,117 @@ static yyconst flex_int16_t yy_chk[1266] =
        45,   57,   61,   45,   62,   64,   61,   80,   62,   64,
       270,  116,   50,   45,   45,   45,   45,   45,   45,   50,
        45,   45,   85,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   59,   59,  408,   63,   59,   81,   50,
-       63,   65,   59,   50,   66,   85,  672,   50,   66,   63,
+       45,   45,   45,   59,   59,  409,   63,   59,   81,   50,
+       63,   65,   59,   50,   66,   85,  673,   50,   66,   63,
        65,   65,   67,   90,   50,   65,  270,   50,   81,   50,
 
-       50,   67,   66,  110,  408,   67,   70,   70,   70,   71,
+       50,   67,   66,  110,  409,   67,   70,   70,   70,   71,
       123,   71,   71,   71,  123,  674,   70,   72,  110,   72,
-       90,   71,   72,   72,   72,  676,   73,   83,   73,   73,
+       90,   71,   72,   72,   72,  675,   73,   83,   73,   73,
        73,   84,   70,   74,   74,   74,  131,   71,   73,   78,
        78,   78,  131,   74,   79,   79,   79,   83,  103,  113,
       145,   84,  113,  204,   73,  113,  204,  103,  147,   74,
        98,   98,   98,  128,  128,  150,  148,   98,   98,   98,
        98,   98,  133,  145,  147,  146,  133,  149,  132,  132,
       132,  150,   98,   98,   98,   98,   98,   98,  132,  148,
-      132,  313,  477,  477,  132,  146,  220,  149,  159,  159,
+      132,  313,  479,  479,  132,  146,  220,  149,  159,  159,
 
       159,  223,  229,  229,  313,  159,  159,  159,  159,  159,
-      229,  242,  220,  251,  618,  242,  677,  223,  251,  618,
-      159,  159,  159,  159,  159,  159,  231,  231,  231,  425,
-      678,  679,  680,  231,  231,  231,  231,  231,  425,  435,
-      520,  682,  566,  683,  520,  435,  684,  566,  231,  231,
-      231,  231,  231,  231,  681,  251,  685,  686,  687,  251,
-      302,  302,  302,  688,  689,  690,  691,  302,  302,  302,
-      302,  302,  692,  693,  694,  696,  697,  698,  699,  700,
-      701,  702,  302,  302,  302,  302,  302,  302,  566,  703,
-      704,  705,  706,  707,  708,  681,  711,  712,  689,  713,
-
-      714,  708,  715,  717,  718,  719,  722,  723,  724,  725,
-      727,  728,  729,  724,  730,  732,  733,  734,  735,  736,
-      737,  738,  739,  741,  742,  744,  745,  746,  747,  750,
-      752,  754,  755,  756,  758,  759,  760,  761,  762,  763,
-      764,  766,  767,  768,  769,  770,  771,  772,  773,  774,
-      775,  776,  777,  778,  779,  780,  781,  782,  783,  787,
-      788,  790,  791,  792,  793,  794,  796,  798,  799,  800,
-      802,  803,  804,  805,  807,  808,  809,  810,  811,  812,
-      814,  815,  817,  818,  819,  820,  822,  824,  826,  827,
-      828,  829,  830,  831,  833,  835,  836,  837,  838,  839,
-
-      840,  842,  843,  844,  845,  846,  847,  848,  849,  851,
-      852,  853,  854,  855,  857,  858,  859,  860,  861,  862,
-      863,  864,  865,  866,  867,  868,  869,  870,  871,  872,
-      873,  874,  875,  876,  877,  878,  879,  880,  881,  885,
-      886,  887,  889,  890,  891,  892,  893,  894,  895,  897,
-      898,  901,  901,  901,  901,  901,  901,  901,  902,  669,
-      902,  902,  902,  902,  902,  903,  668,  903,  667,  903,
-      903,  903,  904,  904,  904,  904,  904,  904,  904,  905,
-      905,  905,  905,  905,  905,  905,  906,  665,  906,  906,
-      906,  906,  906,  907,  907,  663,  907,  908,  908,  908,
-
-      908,  908,  909,  909,  910,  910,  911,  911,  912,  912,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
-      650,  649,  646,  645,  643,  641,  640,  639,  638,  637,
+      229,  242,  220,  251,  481,  242,  676,  223,  251,  481,
+      159,  159,  159,  159,  159,  159,  231,  231,  231,  426,
+      677,  678,  680,  231,  231,  231,  231,  231,  426,  437,
+      523,  623,  570,  682,  523,  437,  623,  570,  231,  231,
+      231,  231,  231,  231,  683,  251,  684,  685,  686,  251,
+      302,  302,  302,  687,  688,  689,  690,  302,  302,  302,
+      302,  302,  691,  692,  693,  694,  695,  696,  697,  698,
+      699,  700,  302,  302,  302,  302,  302,  302,  570,  701,
+      703,  704,  705,  706,  707,  708,  709,  710,  711,  712,
+
+      713,  714,  715,  718,  687,  719,  720,  721,  722,  715,
+      724,  696,  725,  726,  729,  730,  731,  732,  733,  735,
+      736,  737,  732,  738,  740,  741,  742,  743,  744,  745,
+      746,  747,  749,  750,  752,  753,  754,  755,  758,  760,
+      762,  763,  765,  767,  768,  769,  770,  771,  772,  773,
+      775,  776,  777,  778,  779,  780,  781,  782,  783,  784,
+      785,  786,  787,  788,  789,  790,  791,  792,  796,  797,
+      799,  800,  801,  802,  803,  805,  807,  808,  809,  811,
+      812,  813,  814,  816,  817,  818,  819,  820,  821,  823,
+      824,  826,  827,  828,  829,  831,  833,  835,  836,  837,
+
+      838,  839,  840,  842,  844,  845,  846,  847,  848,  849,
+      851,  852,  853,  854,  855,  856,  857,  858,  860,  861,
+      862,  863,  864,  866,  867,  868,  869,  870,  871,  872,
+      873,  874,  875,  876,  877,  878,  879,  880,  881,  882,
+      883,  884,  885,  886,  887,  888,  889,  890,  894,  895,
+      896,  898,  899,  900,  901,  902,  903,  904,  906,  907,
+      910,  910,  910,  910,  910,  910,  910,  911,  666,  911,
+      911,  911,  911,  911,  912,  665,  912,  664,  912,  912,
+      912,  913,  913,  913,  913,  913,  913,  913,  914,  914,
+      914,  914,  914,  914,  914,  915,  663,  915,  915,  915,
+
+      915,  915,  916,  916,  662,  916,  917,  917,  917,  917,
+      917,  918,  918,  919,  919,  920,  920,  921,  921,  661,
+      660,  659,  658,  657,  656,  655,  652,  651,  649,  647,
+      646,  645,  644,  643,  642,  640,  639,  638,  637,  636,
       635,  634,  633,  632,  631,  630,  629,  628,  627,  626,
-      625,  624,  623,  622,  621,  620,  619,  617,  615,  614,
-      613,  612,  611,  610,  609,  608,  607,  606,  605,  604,
-      603,  601,  600,  599,  598,  596,  595,  594,  593,  592,
-      591,  590,  589,  588,  586,  585,  584,  583,  582,  581,
-      580,  578,  576,  575,  574,  573,  572,  571,  570,  569,
-      568,  567,  565,  564,  563,  561,  560,  559,  558,  557,
+      625,  624,  622,  620,  619,  618,  617,  616,  615,  614,
+      613,  612,  611,  610,  609,  608,  606,  605,  604,  603,
+      601,  600,  599,  598,  597,  596,  595,  594,  593,  592,
+      590,  589,  588,  587,  586,  585,  584,  582,  580,  579,
+      578,  577,  576,  575,  574,  573,  572,  571,  569,  568,
 
+      567,  565,  564,  563,  562,  561,  560,  559,  558,  557,
       556,  555,  554,  553,  552,  551,  550,  549,  548,  547,
-      546,  545,  544,  543,  541,  540,  539,  538,  536,  535,
-      534,  533,  532,  531,  530,  529,  528,  527,  526,  525,
-      523,  522,  521,  519,  518,  517,  514,  513,  512,  511,
+      545,  544,  543,  542,  541,  539,  538,  537,  536,  535,
+      534,  533,  532,  531,  530,  529,  528,  526,  525,  524,
+      522,  521,  520,  517,  516,  515,  514,  513,  512,  511,
       510,  509,  508,  507,  506,  505,  504,  503,  502,  501,
       500,  499,  498,  497,  496,  495,  494,  493,  492,  491,
-      490,  489,  488,  486,  485,  484,  483,  482,  481,  478,
-      476,  475,  474,  473,  472,  471,  470,  469,  468,  467,
-      466,  464,  463,  462,  461,  460,  459,  458,  457,  456,
-      455,  454,  453,  452,  451,  450,  449,  448,  447,  446,
+      489,  488,  487,  486,  485,  484,  483,  480,  478,  477,
+      476,  475,  474,  473,  472,  471,  470,  469,  468,  466,
+      465,  464,  463,  462,  461,  460,  459,  458,  457,  456,
 
-      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
-      434,  433,  432,  431,  430,  429,  427,  426,  423,  422,
-      421,  420,  419,  417,  416,  415,  414,  413,  411,  410,
-      409,  407,  406,  405,  404,  403,  402,  401,  400,  399,
-      398,  397,  396,  394,  393,  392,  391,  390,  389,  388,
+      455,  454,  453,  452,  451,  450,  449,  448,  447,  446,
+      445,  444,  443,  442,  441,  440,  439,  438,  436,  435,
+      434,  433,  432,  431,  429,  428,  427,  424,  423,  422,
+      421,  420,  418,  417,  416,  415,  414,  412,  411,  410,
+      408,  407,  406,  405,  404,  403,  402,  401,  400,  399,
+      398,  397,  395,  394,  393,  392,  391,  390,  389,  388,
       387,  386,  385,  384,  383,  382,  381,  380,  379,  378,
-      377,  376,  375,  373,  372,  369,  368,  366,  365,  363,
+      377,  376,  374,  373,  370,  369,  367,  366,  365,  363,
       359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
       349,  348,  347,  346,  344,  343,  342,  341,  340,  339,
-      337,  336,  335,  334,  333,  332,  331,  330,  329,  328,
 
+      337,  336,  335,  334,  333,  332,  331,  330,  329,  328,
       327,  326,  325,  324,  322,  321,  320,  319,  318,  317,
       316,  314,  312,  311,  309,  308,  306,  305,  304,  303,
-      301,  300,  299,  298,  297,  296,  294,  291,  290,  289,
-      287,  286,  285,  284,  283,  282,  281,  280,  279,  278,
-      277,  276,  275,  274,  273,  271,  269,  268,  267,  266,
-      265,  264,  263,  262,  261,  260,  259,  258,  257,  256,
-      255,  254,  253,  252,  250,  249,  248,  247,  246,  245,
-      244,  243,  241,  240,  239,  238,  237,  236,  235,  234,
-      233,  232,  230,  226,  219,  218,  217,  216,  215,  214,
-      213,  212,  211,  210,  209,  208,  207,  206,  205,  203,
-
-      202,  201,  200,  199,  198,  197,  196,  195,  194,  193,
-      192,  191,  190,  189,  188,  187,  186,  185,  184,  183,
-      181,  180,  179,  178,  177,  176,  175,  174,  173,  172,
-      171,  170,  169,  168,  167,  166,  165,  164,  163,  162,
-      161,  160,  157,  156,  155,  154,  151,  143,  142,  141,
-      140,  139,  138,  137,  136,  135,  134,  130,  129,  127,
-      126,  125,  124,  122,  121,  120,  119,  118,  117,  115,
-      114,  112,  111,  109,  108,  107,  105,  104,  102,  101,
-      100,   99,   96,   95,   94,   93,   92,   88,   87,   68,
-       60,   56,   52,   51,   49,   48,   47,   43,   41,   39,
-
-       38,   24,   14,   11,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
-      900,  900,  900,  900,  900
+      301,  300,  299,  298,  297,  296,  294,  291,  289,  287,
+      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
+      276,  275,  274,  273,  271,  269,  268,  267,  266,  265,
+      264,  263,  262,  261,  260,  259,  258,  257,  256,  255,
+      254,  253,  252,  250,  249,  248,  247,  246,  245,  244,
+      243,  241,  240,  239,  238,  237,  236,  235,  234,  233,
+      232,  230,  226,  219,  218,  217,  216,  215,  214,  213,
+
+      212,  211,  210,  209,  208,  207,  206,  205,  203,  202,
+      201,  200,  199,  198,  197,  196,  195,  194,  193,  192,
+      191,  190,  189,  188,  187,  186,  185,  184,  183,  181,
+      180,  179,  178,  177,  176,  175,  174,  173,  172,  171,
+      170,  169,  168,  167,  166,  165,  164,  163,  162,  161,
+      160,  157,  156,  155,  154,  151,  143,  142,  141,  140,
+      139,  138,  137,  136,  135,  134,  130,  129,  127,  126,
+      125,  124,  122,  121,  120,  119,  118,  117,  115,  114,
+      112,  111,  109,  108,  107,  105,  104,  102,  101,  100,
+       99,   96,   95,   94,   93,   92,   88,   87,   68,   60,
+
+       56,   52,   51,   49,   48,   47,   43,   41,   39,   38,
+       24,   14,   11,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  909,  909,
+      909,  909,  909,  909
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1123,21 +1128,21 @@ static char *yy_last_accepting_cpos;
 extern int parser4__flex_debug;
 int parser4__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[116] =
+static yyconst flex_int16_t yy_rule_linenum[117] =
     {   0,
       128,  130,  132,  137,  138,  143,  144,  145,  157,  160,
       165,  172,  181,  190,  199,  208,  217,  226,  235,  244,
       253,  265,  275,  285,  295,  306,  316,  326,  336,  346,
       355,  364,  373,  387,  402,  411,  420,  429,  438,  447,
-      456,  465,  474,  483,  493,  502,  511,  520,  529,  538,
-      547,  556,  566,  576,  586,  595,  605,  615,  625,  635,
-      644,  654,  663,  672,  681,  690,  699,  709,  719,  728,
+      456,  465,  474,  483,  492,  502,  511,  520,  529,  538,
+      547,  556,  565,  575,  585,  595,  604,  614,  624,  634,
+      644,  653,  663,  672,  681,  690,  699,  708,  718,  728,
       737,  746,  755,  764,  773,  782,  791,  800,  809,  818,
       827,  836,  845,  854,  863,  872,  881,  890,  899,  908,
-      917,  926,  935,  945,  955,  967,  978,  991, 1089, 1094,
+      917,  926,  935,  944,  954,  964,  976,  987, 1000, 1098,
 
-     1099, 1104, 1105, 1106, 1107, 1108, 1109, 1111, 1129, 1142,
-     1147, 1151, 1153, 1155, 1157
+     1103, 1108, 1113, 1114, 1115, 1116, 1117, 1118, 1120, 1138,
+     1151, 1156, 1160, 1162, 1164, 1166
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1208,7 +1213,7 @@ unsigned int comment_start_line = 0;
 // by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the
 // currently matched token.
 #define YY_USER_ACTION  driver.loc_.columns(parser4_leng);
-#line 1212 "dhcp4_lexer.cc"
+#line 1217 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1532,7 +1537,7 @@ YY_DECL
     }
 
 
-#line 1536 "dhcp4_lexer.cc"
+#line 1541 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1561,13 +1566,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 >= 901 )
+                               if ( yy_current_state >= 910 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 900 );
+               while ( yy_current_state != 909 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1586,13 +1591,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 < 116 )
+                       else if ( yy_act < 117 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser4_text );
-                       else if ( yy_act == 116 )
+                       else if ( yy_act == 117 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser4_text );
-                       else if ( yy_act == 117 )
+                       else if ( yy_act == 118 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2034,6 +2039,18 @@ YY_RULE_SETUP
 case 38:
 YY_RULE_SETUP
 #line 429 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::POOLS:
+        return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_);
+    }
+}
+       YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 438 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2043,9 +2060,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 39:
+case 40:
 YY_RULE_SETUP
-#line 438 "dhcp4_lexer.ll"
+#line 447 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2055,9 +2072,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 40:
+case 41:
 YY_RULE_SETUP
-#line 447 "dhcp4_lexer.ll"
+#line 456 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2067,9 +2084,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 41:
+case 42:
 YY_RULE_SETUP
-#line 456 "dhcp4_lexer.ll"
+#line 465 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2079,9 +2096,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 42:
+case 43:
 YY_RULE_SETUP
-#line 465 "dhcp4_lexer.ll"
+#line 474 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2091,9 +2108,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 44:
 YY_RULE_SETUP
-#line 474 "dhcp4_lexer.ll"
+#line 483 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2103,9 +2120,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 45:
 YY_RULE_SETUP
-#line 483 "dhcp4_lexer.ll"
+#line 492 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2116,9 +2133,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 45:
+case 46:
 YY_RULE_SETUP
-#line 493 "dhcp4_lexer.ll"
+#line 502 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2128,9 +2145,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 46:
+case 47:
 YY_RULE_SETUP
-#line 502 "dhcp4_lexer.ll"
+#line 511 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2140,9 +2157,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 47:
+case 48:
 YY_RULE_SETUP
-#line 511 "dhcp4_lexer.ll"
+#line 520 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGING:
@@ -2152,9 +2169,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 49:
 YY_RULE_SETUP
-#line 520 "dhcp4_lexer.ll"
+#line 529 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2164,9 +2181,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 529 "dhcp4_lexer.ll"
+#line 538 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -2176,9 +2193,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 538 "dhcp4_lexer.ll"
+#line 547 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2188,9 +2205,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 547 "dhcp4_lexer.ll"
+#line 556 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2200,9 +2217,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 556 "dhcp4_lexer.ll"
+#line 565 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2213,9 +2230,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 54:
 YY_RULE_SETUP
-#line 566 "dhcp4_lexer.ll"
+#line 575 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2226,9 +2243,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 54:
+case 55:
 YY_RULE_SETUP
-#line 576 "dhcp4_lexer.ll"
+#line 585 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -2239,9 +2256,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 55:
+case 56:
 YY_RULE_SETUP
-#line 586 "dhcp4_lexer.ll"
+#line 595 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2251,9 +2268,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 56:
+case 57:
 YY_RULE_SETUP
-#line 595 "dhcp4_lexer.ll"
+#line 604 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2264,9 +2281,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 58:
 YY_RULE_SETUP
-#line 605 "dhcp4_lexer.ll"
+#line 614 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2277,9 +2294,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 59:
 YY_RULE_SETUP
-#line 615 "dhcp4_lexer.ll"
+#line 624 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2290,9 +2307,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 60:
 YY_RULE_SETUP
-#line 625 "dhcp4_lexer.ll"
+#line 634 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2303,9 +2320,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 61:
 YY_RULE_SETUP
-#line 635 "dhcp4_lexer.ll"
+#line 644 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -2315,9 +2332,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 62:
 YY_RULE_SETUP
-#line 644 "dhcp4_lexer.ll"
+#line 653 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2328,9 +2345,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 63:
 YY_RULE_SETUP
-#line 654 "dhcp4_lexer.ll"
+#line 663 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2340,9 +2357,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 64:
 YY_RULE_SETUP
-#line 663 "dhcp4_lexer.ll"
+#line 672 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2352,9 +2369,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 65:
 YY_RULE_SETUP
-#line 672 "dhcp4_lexer.ll"
+#line 681 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2364,9 +2381,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 66:
 YY_RULE_SETUP
-#line 681 "dhcp4_lexer.ll"
+#line 690 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2376,9 +2393,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 67:
 YY_RULE_SETUP
-#line 690 "dhcp4_lexer.ll"
+#line 699 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2388,9 +2405,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 68:
 YY_RULE_SETUP
-#line 699 "dhcp4_lexer.ll"
+#line 708 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -2401,9 +2418,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 69:
 YY_RULE_SETUP
-#line 709 "dhcp4_lexer.ll"
+#line 718 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2413,9 +2430,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 70:
 YY_RULE_SETUP
-#line 719 "dhcp4_lexer.ll"
+#line 728 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -2425,9 +2442,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 71:
 YY_RULE_SETUP
-#line 728 "dhcp4_lexer.ll"
+#line 737 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -2437,9 +2454,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 72:
 YY_RULE_SETUP
-#line 737 "dhcp4_lexer.ll"
+#line 746 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2449,9 +2466,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 73:
 YY_RULE_SETUP
-#line 746 "dhcp4_lexer.ll"
+#line 755 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SERVER_ID:
@@ -2461,9 +2478,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 74:
 YY_RULE_SETUP
-#line 755 "dhcp4_lexer.ll"
+#line 764 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SERVER_ID:
@@ -2473,9 +2490,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 75:
 YY_RULE_SETUP
-#line 764 "dhcp4_lexer.ll"
+#line 773 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SERVER_ID:
@@ -2485,9 +2502,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 773 "dhcp4_lexer.ll"
+#line 782 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SERVER_ID:
@@ -2497,9 +2514,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 77:
 YY_RULE_SETUP
-#line 782 "dhcp4_lexer.ll"
+#line 791 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2509,9 +2526,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 78:
 YY_RULE_SETUP
-#line 791 "dhcp4_lexer.ll"
+#line 800 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -2521,9 +2538,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 79:
 YY_RULE_SETUP
-#line 800 "dhcp4_lexer.ll"
+#line 809 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -2533,9 +2550,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 80:
 YY_RULE_SETUP
-#line 809 "dhcp4_lexer.ll"
+#line 818 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -2545,9 +2562,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 81:
 YY_RULE_SETUP
-#line 818 "dhcp4_lexer.ll"
+#line 827 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -2557,9 +2574,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 82:
 YY_RULE_SETUP
-#line 827 "dhcp4_lexer.ll"
+#line 836 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -2569,9 +2586,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 83:
 YY_RULE_SETUP
-#line 836 "dhcp4_lexer.ll"
+#line 845 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING:
@@ -2581,9 +2598,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 84:
 YY_RULE_SETUP
-#line 845 "dhcp4_lexer.ll"
+#line 854 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2593,9 +2610,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 85:
 YY_RULE_SETUP
-#line 854 "dhcp4_lexer.ll"
+#line 863 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2605,9 +2622,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 86:
 YY_RULE_SETUP
-#line 863 "dhcp4_lexer.ll"
+#line 872 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -2617,9 +2634,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 87:
 YY_RULE_SETUP
-#line 872 "dhcp4_lexer.ll"
+#line 881 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -2629,9 +2646,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 88:
 YY_RULE_SETUP
-#line 881 "dhcp4_lexer.ll"
+#line 890 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2641,9 +2658,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 89:
 YY_RULE_SETUP
-#line 890 "dhcp4_lexer.ll"
+#line 899 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2653,9 +2670,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 90:
 YY_RULE_SETUP
-#line 899 "dhcp4_lexer.ll"
+#line 908 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2665,9 +2682,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 91:
 YY_RULE_SETUP
-#line 908 "dhcp4_lexer.ll"
+#line 917 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2677,9 +2694,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 92:
 YY_RULE_SETUP
-#line 917 "dhcp4_lexer.ll"
+#line 926 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2689,9 +2706,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 93:
 YY_RULE_SETUP
-#line 926 "dhcp4_lexer.ll"
+#line 935 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2701,9 +2718,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 94:
 YY_RULE_SETUP
-#line 935 "dhcp4_lexer.ll"
+#line 944 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2714,9 +2731,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 95:
 YY_RULE_SETUP
-#line 945 "dhcp4_lexer.ll"
+#line 954 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2727,9 +2744,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 96:
 YY_RULE_SETUP
-#line 955 "dhcp4_lexer.ll"
+#line 964 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2742,9 +2759,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 97:
 YY_RULE_SETUP
-#line 967 "dhcp4_lexer.ll"
+#line 976 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2756,9 +2773,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 98:
 YY_RULE_SETUP
-#line 978 "dhcp4_lexer.ll"
+#line 987 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2770,9 +2787,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 99:
 YY_RULE_SETUP
-#line 991 "dhcp4_lexer.ll"
+#line 1000 "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.
@@ -2871,65 +2888,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 99:
-/* rule 99 can match eol */
+case 100:
+/* rule 100 can match eol */
 YY_RULE_SETUP
-#line 1089 "dhcp4_lexer.ll"
+#line 1098 "dhcp4_lexer.ll"
 {
     // Bad string with a forbidden control character inside
     driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text));
 }
        YY_BREAK
-case 100:
-/* rule 100 can match eol */
+case 101:
+/* rule 101 can match eol */
 YY_RULE_SETUP
-#line 1094 "dhcp4_lexer.ll"
+#line 1103 "dhcp4_lexer.ll"
 {
     // Bad string with a bad escape inside
     driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 101:
+case 102:
 YY_RULE_SETUP
-#line 1099 "dhcp4_lexer.ll"
+#line 1108 "dhcp4_lexer.ll"
 {
     // Bad string with an open escape at the end
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 102:
+case 103:
 YY_RULE_SETUP
-#line 1104 "dhcp4_lexer.ll"
+#line 1113 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 103:
+case 104:
 YY_RULE_SETUP
-#line 1105 "dhcp4_lexer.ll"
+#line 1114 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 104:
+case 105:
 YY_RULE_SETUP
-#line 1106 "dhcp4_lexer.ll"
+#line 1115 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 105:
+case 106:
 YY_RULE_SETUP
-#line 1107 "dhcp4_lexer.ll"
+#line 1116 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 106:
+case 107:
 YY_RULE_SETUP
-#line 1108 "dhcp4_lexer.ll"
+#line 1117 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 107:
+case 108:
 YY_RULE_SETUP
-#line 1109 "dhcp4_lexer.ll"
+#line 1118 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 108:
+case 109:
 YY_RULE_SETUP
-#line 1111 "dhcp4_lexer.ll"
+#line 1120 "dhcp4_lexer.ll"
 {
     // An integer was found.
     std::string tmp(parser4_text);
@@ -2948,9 +2965,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 109:
+case 110:
 YY_RULE_SETUP
-#line 1129 "dhcp4_lexer.ll"
+#line 1138 "dhcp4_lexer.ll"
 {
     // A floating point was found.
     std::string tmp(parser4_text);
@@ -2964,43 +2981,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 1142 "dhcp4_lexer.ll"
+#line 1151 "dhcp4_lexer.ll"
 {
     string tmp(parser4_text);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 1147 "dhcp4_lexer.ll"
+#line 1156 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 1151 "dhcp4_lexer.ll"
+#line 1160 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 1153 "dhcp4_lexer.ll"
+#line 1162 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 114:
+case 115:
 YY_RULE_SETUP
-#line 1155 "dhcp4_lexer.ll"
+#line 1164 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 1157 "dhcp4_lexer.ll"
+#line 1166 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1159 "dhcp4_lexer.ll"
+#line 1168 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -3024,12 +3041,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 1182 "dhcp4_lexer.ll"
+#line 1191 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 3033 "dhcp4_lexer.cc"
+#line 3050 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -3346,7 +3363,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 >= 901 )
+                       if ( yy_current_state >= 910 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -3379,11 +3396,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 >= 901 )
+               if ( yy_current_state >= 910 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 900);
+       yy_is_jam = (yy_current_state == 909);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4132,7 +4149,7 @@ void parser4_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1182 "dhcp4_lexer.ll"
+#line 1191 "dhcp4_lexer.ll"
 
 
 
index c8d7c9041ea315e68d590490dd2988fcea58fefd..0f26b846ea92b4b5f057716f40319461e2bb2a0a 100644 (file)
@@ -253,24 +253,25 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         value.move< ElementPtr > (that.value);
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -289,24 +290,25 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -346,46 +348,53 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 106: // "constant string"
+            case 107: // "constant string"
 
-#line 198 "dhcp4_parser.yy" // lalr1.cc:636
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
-#line 354 "dhcp4_parser.cc" // lalr1.cc:636
+#line 356 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
 
-#line 198 "dhcp4_parser.yy" // lalr1.cc:636
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
-#line 361 "dhcp4_parser.cc" // lalr1.cc:636
+#line 363 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
 
-#line 198 "dhcp4_parser.yy" // lalr1.cc:636
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
-#line 368 "dhcp4_parser.cc" // lalr1.cc:636
+#line 370 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
 
-#line 198 "dhcp4_parser.yy" // lalr1.cc:636
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
-#line 375 "dhcp4_parser.cc" // lalr1.cc:636
+#line 377 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 122: // value
+      case 123: // value
 
-#line 198 "dhcp4_parser.yy" // lalr1.cc:636
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 382 "dhcp4_parser.cc" // lalr1.cc:636
+#line 384 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 161: // socket_type
+      case 127: // map_value
 
-#line 198 "dhcp4_parser.yy" // lalr1.cc:636
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 389 "dhcp4_parser.cc" // lalr1.cc:636
+#line 391 "dhcp4_parser.cc" // lalr1.cc:636
+        break;
+
+      case 163: // socket_type
+
+#line 200 "dhcp4_parser.yy" // lalr1.cc:636
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 398 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
 
@@ -585,24 +594,25 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -624,242 +634,248 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 207 "dhcp4_parser.yy" // lalr1.cc:859
+#line 209 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 630 "dhcp4_parser.cc" // lalr1.cc:859
+#line 640 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 208 "dhcp4_parser.yy" // lalr1.cc:859
+#line 210 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
-#line 636 "dhcp4_parser.cc" // lalr1.cc:859
+#line 646 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 209 "dhcp4_parser.yy" // lalr1.cc:859
+#line 211 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
-#line 642 "dhcp4_parser.cc" // lalr1.cc:859
+#line 652 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 210 "dhcp4_parser.yy" // lalr1.cc:859
+#line 212 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 648 "dhcp4_parser.cc" // lalr1.cc:859
+#line 658 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 211 "dhcp4_parser.yy" // lalr1.cc:859
+#line 213 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
-#line 654 "dhcp4_parser.cc" // lalr1.cc:859
+#line 664 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 212 "dhcp4_parser.yy" // lalr1.cc:859
+#line 214 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
-#line 660 "dhcp4_parser.cc" // lalr1.cc:859
+#line 670 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 213 "dhcp4_parser.yy" // lalr1.cc:859
+#line 215 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 666 "dhcp4_parser.cc" // lalr1.cc:859
+#line 676 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 214 "dhcp4_parser.yy" // lalr1.cc:859
+#line 216 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 672 "dhcp4_parser.cc" // lalr1.cc:859
+#line 682 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 215 "dhcp4_parser.yy" // lalr1.cc:859
+#line 217 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 678 "dhcp4_parser.cc" // lalr1.cc:859
+#line 688 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 216 "dhcp4_parser.yy" // lalr1.cc:859
+#line 218 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 684 "dhcp4_parser.cc" // lalr1.cc:859
+#line 694 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 224 "dhcp4_parser.yy" // lalr1.cc:859
+#line 226 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 690 "dhcp4_parser.cc" // lalr1.cc:859
+#line 700 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 23:
-#line 225 "dhcp4_parser.yy" // lalr1.cc:859
+#line 227 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 696 "dhcp4_parser.cc" // lalr1.cc:859
+#line 706 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 226 "dhcp4_parser.yy" // lalr1.cc:859
+#line 228 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 702 "dhcp4_parser.cc" // lalr1.cc:859
+#line 712 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 25:
-#line 227 "dhcp4_parser.yy" // lalr1.cc:859
+#line 229 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 708 "dhcp4_parser.cc" // lalr1.cc:859
+#line 718 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 228 "dhcp4_parser.yy" // lalr1.cc:859
+#line 230 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 714 "dhcp4_parser.cc" // lalr1.cc:859
+#line 724 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 27:
-#line 229 "dhcp4_parser.yy" // lalr1.cc:859
+#line 231 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 720 "dhcp4_parser.cc" // lalr1.cc:859
+#line 730 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 230 "dhcp4_parser.yy" // lalr1.cc:859
+#line 232 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 726 "dhcp4_parser.cc" // lalr1.cc:859
+#line 736 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 233 "dhcp4_parser.yy" // lalr1.cc:859
+#line 235 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 735 "dhcp4_parser.cc" // lalr1.cc:859
+#line 745 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 238 "dhcp4_parser.yy" // lalr1.cc:859
+#line 240 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 746 "dhcp4_parser.cc" // lalr1.cc:859
+#line 756 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 243 "dhcp4_parser.yy" // lalr1.cc:859
+#line 245 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 756 "dhcp4_parser.cc" // lalr1.cc:859
+#line 766 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 34:
-#line 254 "dhcp4_parser.yy" // lalr1.cc:859
+  case 32:
+#line 251 "dhcp4_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 772 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 35:
+#line 258 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 765 "dhcp4_parser.cc" // lalr1.cc:859
+#line 781 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 35:
-#line 258 "dhcp4_parser.yy" // lalr1.cc:859
+  case 36:
+#line 262 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 775 "dhcp4_parser.cc" // lalr1.cc:859
+#line 791 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 36:
-#line 265 "dhcp4_parser.yy" // lalr1.cc:859
+  case 37:
+#line 269 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 784 "dhcp4_parser.cc" // lalr1.cc:859
+#line 800 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 37:
-#line 268 "dhcp4_parser.yy" // lalr1.cc:859
+  case 38:
+#line 272 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 792 "dhcp4_parser.cc" // lalr1.cc:859
+#line 808 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 38:
-#line 273 "dhcp4_parser.yy" // lalr1.cc:859
+  case 39:
+#line 277 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 800 "dhcp4_parser.cc" // lalr1.cc:859
+#line 816 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 39:
-#line 275 "dhcp4_parser.yy" // lalr1.cc:859
+  case 40:
+#line 279 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 809 "dhcp4_parser.cc" // lalr1.cc:859
+#line 825 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 42:
-#line 284 "dhcp4_parser.yy" // lalr1.cc:859
+  case 43:
+#line 288 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 818 "dhcp4_parser.cc" // lalr1.cc:859
+#line 834 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 43:
-#line 288 "dhcp4_parser.yy" // lalr1.cc:859
+  case 44:
+#line 292 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 827 "dhcp4_parser.cc" // lalr1.cc:859
+#line 843 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 44:
-#line 299 "dhcp4_parser.yy" // lalr1.cc:859
+  case 45:
+#line 303 "dhcp4_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 838 "dhcp4_parser.cc" // lalr1.cc:859
+#line 854 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 45:
-#line 309 "dhcp4_parser.yy" // lalr1.cc:859
+  case 46:
+#line 313 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 849 "dhcp4_parser.cc" // lalr1.cc:859
+#line 865 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 46:
-#line 314 "dhcp4_parser.yy" // lalr1.cc:859
+  case 47:
+#line 318 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 859 "dhcp4_parser.cc" // lalr1.cc:859
+#line 875 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 54:
-#line 333 "dhcp4_parser.yy" // lalr1.cc:859
+  case 55:
+#line 337 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -868,11 +884,11 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP4);
 }
-#line 872 "dhcp4_parser.cc" // lalr1.cc:859
+#line 888 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 55:
-#line 340 "dhcp4_parser.yy" // lalr1.cc:859
+  case 56:
+#line 344 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -880,578 +896,578 @@ namespace isc { namespace dhcp {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 884 "dhcp4_parser.cc" // lalr1.cc:859
+#line 900 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 56:
-#line 350 "dhcp4_parser.yy" // lalr1.cc:859
+  case 57:
+#line 354 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 894 "dhcp4_parser.cc" // lalr1.cc:859
+#line 910 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 57:
-#line 354 "dhcp4_parser.yy" // lalr1.cc:859
+  case 58:
+#line 358 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 902 "dhcp4_parser.cc" // lalr1.cc:859
+#line 918 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 82:
-#line 388 "dhcp4_parser.yy" // lalr1.cc:859
+  case 83:
+#line 392 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 911 "dhcp4_parser.cc" // lalr1.cc:859
+#line 927 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 83:
-#line 393 "dhcp4_parser.yy" // lalr1.cc:859
+  case 84:
+#line 397 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 920 "dhcp4_parser.cc" // lalr1.cc:859
+#line 936 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 84:
-#line 398 "dhcp4_parser.yy" // lalr1.cc:859
+  case 85:
+#line 402 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 929 "dhcp4_parser.cc" // lalr1.cc:859
+#line 945 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 85:
-#line 403 "dhcp4_parser.yy" // lalr1.cc:859
+  case 86:
+#line 407 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 938 "dhcp4_parser.cc" // lalr1.cc:859
+#line 954 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 86:
-#line 408 "dhcp4_parser.yy" // lalr1.cc:859
+  case 87:
+#line 412 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
 }
-#line 947 "dhcp4_parser.cc" // lalr1.cc:859
+#line 963 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 87:
-#line 413 "dhcp4_parser.yy" // lalr1.cc:859
+  case 88:
+#line 417 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
 }
-#line 956 "dhcp4_parser.cc" // lalr1.cc:859
+#line 972 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 88:
-#line 419 "dhcp4_parser.yy" // lalr1.cc:859
+  case 89:
+#line 423 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 967 "dhcp4_parser.cc" // lalr1.cc:859
+#line 983 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 89:
-#line 424 "dhcp4_parser.yy" // lalr1.cc:859
+  case 90:
+#line 428 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 976 "dhcp4_parser.cc" // lalr1.cc:859
+#line 992 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 94:
-#line 437 "dhcp4_parser.yy" // lalr1.cc:859
+  case 95:
+#line 441 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 986 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1002 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 95:
-#line 441 "dhcp4_parser.yy" // lalr1.cc:859
+  case 96:
+#line 445 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 994 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1010 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 96:
-#line 445 "dhcp4_parser.yy" // lalr1.cc:859
+  case 97:
+#line 449 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1005 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1021 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 97:
-#line 450 "dhcp4_parser.yy" // lalr1.cc:859
+  case 98:
+#line 454 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1014 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1030 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 98:
-#line 455 "dhcp4_parser.yy" // lalr1.cc:859
+  case 99:
+#line 459 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DHCP_SOCKET_TYPE);
 }
-#line 1022 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1038 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 99:
-#line 457 "dhcp4_parser.yy" // lalr1.cc:859
+  case 100:
+#line 461 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1031 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1047 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 100:
-#line 462 "dhcp4_parser.yy" // lalr1.cc:859
+  case 101:
+#line 466 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
-#line 1037 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1053 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 101:
-#line 463 "dhcp4_parser.yy" // lalr1.cc:859
+  case 102:
+#line 467 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
-#line 1043 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1059 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 102:
-#line 466 "dhcp4_parser.yy" // lalr1.cc:859
+  case 103:
+#line 470 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1054 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1070 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 103:
-#line 471 "dhcp4_parser.yy" // lalr1.cc:859
+  case 104:
+#line 475 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1063 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1079 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 104:
-#line 476 "dhcp4_parser.yy" // lalr1.cc:859
+  case 105:
+#line 480 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1074 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1090 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 105:
-#line 481 "dhcp4_parser.yy" // lalr1.cc:859
+  case 106:
+#line 485 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1083 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1099 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 117:
-#line 501 "dhcp4_parser.yy" // lalr1.cc:859
+  case 118:
+#line 505 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1091 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1107 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 503 "dhcp4_parser.yy" // lalr1.cc:859
+  case 119:
+#line 507 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1101 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1117 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 509 "dhcp4_parser.yy" // lalr1.cc:859
+  case 120:
+#line 513 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1109 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1125 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 511 "dhcp4_parser.yy" // lalr1.cc:859
+  case 121:
+#line 515 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1119 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1135 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 121:
-#line 517 "dhcp4_parser.yy" // lalr1.cc:859
+  case 122:
+#line 521 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1127 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1143 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 122:
-#line 519 "dhcp4_parser.yy" // lalr1.cc:859
+  case 123:
+#line 523 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1137 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1153 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 123:
-#line 525 "dhcp4_parser.yy" // lalr1.cc:859
+  case 124:
+#line 529 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1145 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1161 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 527 "dhcp4_parser.yy" // lalr1.cc:859
+  case 125:
+#line 531 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1155 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1171 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 125:
-#line 533 "dhcp4_parser.yy" // lalr1.cc:859
+  case 126:
+#line 537 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1163 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1179 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 126:
-#line 535 "dhcp4_parser.yy" // lalr1.cc:859
+  case 127:
+#line 539 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1173 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1189 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 127:
-#line 541 "dhcp4_parser.yy" // lalr1.cc:859
+  case 128:
+#line 545 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1182 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1198 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 128:
-#line 546 "dhcp4_parser.yy" // lalr1.cc:859
+  case 129:
+#line 550 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1191 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1207 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 551 "dhcp4_parser.yy" // lalr1.cc:859
+  case 130:
+#line 555 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1200 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1216 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 556 "dhcp4_parser.yy" // lalr1.cc:859
+  case 131:
+#line 560 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1209 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1225 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 561 "dhcp4_parser.yy" // lalr1.cc:859
+  case 132:
+#line 565 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1220 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1236 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 566 "dhcp4_parser.yy" // lalr1.cc:859
+  case 133:
+#line 570 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1229 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1245 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 581 "dhcp4_parser.yy" // lalr1.cc:859
+  case 140:
+#line 585 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1238 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1254 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 586 "dhcp4_parser.yy" // lalr1.cc:859
+  case 141:
+#line 590 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 1247 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1263 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 591 "dhcp4_parser.yy" // lalr1.cc:859
+  case 142:
+#line 595 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 1256 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1272 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 142:
-#line 596 "dhcp4_parser.yy" // lalr1.cc:859
+  case 143:
+#line 600 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1267 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1283 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 143:
-#line 601 "dhcp4_parser.yy" // lalr1.cc:859
+  case 144:
+#line 605 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1276 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1292 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 614 "dhcp4_parser.yy" // lalr1.cc:859
+  case 149:
+#line 618 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1286 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1302 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 618 "dhcp4_parser.yy" // lalr1.cc:859
+  case 150:
+#line 622 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1294 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1310 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 150:
-#line 622 "dhcp4_parser.yy" // lalr1.cc:859
+  case 151:
+#line 626 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1304 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1320 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 151:
-#line 626 "dhcp4_parser.yy" // lalr1.cc:859
+  case 152:
+#line 630 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1312 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1328 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 639 "dhcp4_parser.yy" // lalr1.cc:859
+  case 158:
+#line 643 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1320 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1336 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 641 "dhcp4_parser.yy" // lalr1.cc:859
+  case 159:
+#line 645 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1330 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1346 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 647 "dhcp4_parser.yy" // lalr1.cc:859
+  case 160:
+#line 651 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1338 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1354 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 649 "dhcp4_parser.yy" // lalr1.cc:859
+  case 161:
+#line 653 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1347 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1363 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 161:
-#line 655 "dhcp4_parser.yy" // lalr1.cc:859
+  case 162:
+#line 659 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 1358 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1374 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 162:
-#line 660 "dhcp4_parser.yy" // lalr1.cc:859
+  case 163:
+#line 664 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1367 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1383 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 677 "dhcp4_parser.yy" // lalr1.cc:859
+  case 172:
+#line 681 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
 }
-#line 1376 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1392 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 682 "dhcp4_parser.yy" // lalr1.cc:859
+  case 173:
+#line 686 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
 }
-#line 1385 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1401 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 687 "dhcp4_parser.yy" // lalr1.cc:859
+  case 174:
+#line 691 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1394 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1410 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 174:
-#line 692 "dhcp4_parser.yy" // lalr1.cc:859
+  case 175:
+#line 696 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1403 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1419 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 697 "dhcp4_parser.yy" // lalr1.cc:859
+  case 176:
+#line 701 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1412 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1428 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 702 "dhcp4_parser.yy" // lalr1.cc:859
+  case 177:
+#line 706 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1421 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1437 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 177:
-#line 710 "dhcp4_parser.yy" // lalr1.cc:859
+  case 178:
+#line 714 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 1432 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1448 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 178:
-#line 715 "dhcp4_parser.yy" // lalr1.cc:859
+  case 179:
+#line 719 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1441 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1457 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 183:
-#line 735 "dhcp4_parser.yy" // lalr1.cc:859
+  case 184:
+#line 739 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1451 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1467 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 739 "dhcp4_parser.yy" // lalr1.cc:859
+  case 185:
+#line 743 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1470,1133 +1486,1150 @@ namespace isc { namespace dhcp {
     // }
     ctx.stack_.pop_back();
 }
-#line 1474 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1490 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 185:
-#line 758 "dhcp4_parser.yy" // lalr1.cc:859
+  case 186:
+#line 762 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1484 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1500 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 186:
-#line 762 "dhcp4_parser.yy" // lalr1.cc:859
+  case 187:
+#line 766 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1492 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1508 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 794 "dhcp4_parser.yy" // lalr1.cc:859
+  case 210:
+#line 798 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1500 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1516 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 796 "dhcp4_parser.yy" // lalr1.cc:859
+  case 211:
+#line 800 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1510 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1526 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 802 "dhcp4_parser.yy" // lalr1.cc:859
+  case 212:
+#line 806 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1518 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1534 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 804 "dhcp4_parser.yy" // lalr1.cc:859
+  case 213:
+#line 808 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 1528 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1544 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 810 "dhcp4_parser.yy" // lalr1.cc:859
+  case 214:
+#line 814 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1536 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1552 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 812 "dhcp4_parser.yy" // lalr1.cc:859
+  case 215:
+#line 816 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 1546 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1562 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 215:
-#line 818 "dhcp4_parser.yy" // lalr1.cc:859
+  case 216:
+#line 822 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1554 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1570 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 216:
-#line 820 "dhcp4_parser.yy" // lalr1.cc:859
+  case 217:
+#line 824 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 1564 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1580 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 217:
-#line 826 "dhcp4_parser.yy" // lalr1.cc:859
+  case 218:
+#line 830 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1572 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1588 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 218:
-#line 828 "dhcp4_parser.yy" // lalr1.cc:859
+  case 219:
+#line 832 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1582 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1598 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 219:
-#line 834 "dhcp4_parser.yy" // lalr1.cc:859
+  case 220:
+#line 838 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1590 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1606 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 220:
-#line 836 "dhcp4_parser.yy" // lalr1.cc:859
+  case 221:
+#line 840 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1600 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1616 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 221:
-#line 842 "dhcp4_parser.yy" // lalr1.cc:859
+  case 222:
+#line 846 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1608 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1624 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 844 "dhcp4_parser.yy" // lalr1.cc:859
+  case 223:
+#line 848 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1618 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1634 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 223:
-#line 850 "dhcp4_parser.yy" // lalr1.cc:859
+  case 224:
+#line 854 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1626 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1642 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 224:
-#line 852 "dhcp4_parser.yy" // lalr1.cc:859
+  case 225:
+#line 856 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservation-mode", rm);
     ctx.leave();
 }
-#line 1636 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1652 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 225:
-#line 858 "dhcp4_parser.yy" // lalr1.cc:859
+  case 226:
+#line 862 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1645 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1661 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 226:
-#line 863 "dhcp4_parser.yy" // lalr1.cc:859
+  case 227:
+#line 867 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1654 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1670 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 227:
-#line 872 "dhcp4_parser.yy" // lalr1.cc:859
+  case 228:
+#line 876 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1665 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1681 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 228:
-#line 877 "dhcp4_parser.yy" // lalr1.cc:859
+  case 229:
+#line 881 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1674 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1690 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 233:
-#line 894 "dhcp4_parser.yy" // lalr1.cc:859
+  case 234:
+#line 898 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1684 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1700 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 234:
-#line 898 "dhcp4_parser.yy" // lalr1.cc:859
+  case 235:
+#line 902 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1692 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 235:
-#line 905 "dhcp4_parser.yy" // lalr1.cc:859
+  case 236:
+#line 909 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1702 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1718 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 236:
-#line 909 "dhcp4_parser.yy" // lalr1.cc:859
+  case 237:
+#line 913 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1710 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 250:
-#line 935 "dhcp4_parser.yy" // lalr1.cc:859
+  case 251:
+#line 939 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1719 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1735 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 253:
-#line 944 "dhcp4_parser.yy" // lalr1.cc:859
+  case 254:
+#line 948 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1727 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1743 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 946 "dhcp4_parser.yy" // lalr1.cc:859
+  case 255:
+#line 950 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1737 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1753 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 952 "dhcp4_parser.yy" // lalr1.cc:859
+  case 256:
+#line 956 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1745 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1761 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 954 "dhcp4_parser.yy" // lalr1.cc:859
+  case 257:
+#line 958 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1755 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1771 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 258:
-#line 962 "dhcp4_parser.yy" // lalr1.cc:859
+  case 259:
+#line 966 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1763 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1779 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 259:
-#line 964 "dhcp4_parser.yy" // lalr1.cc:859
+  case 260:
+#line 968 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1773 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1789 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 260:
-#line 970 "dhcp4_parser.yy" // lalr1.cc:859
+  case 261:
+#line 974 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1782 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1798 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 261:
-#line 979 "dhcp4_parser.yy" // lalr1.cc:859
+  case 262:
+#line 983 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 1793 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1809 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 262:
-#line 984 "dhcp4_parser.yy" // lalr1.cc:859
+  case 263:
+#line 988 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1802 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1818 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 267:
-#line 1003 "dhcp4_parser.yy" // lalr1.cc:859
+  case 268:
+#line 1007 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1812 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1828 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 268:
-#line 1007 "dhcp4_parser.yy" // lalr1.cc:859
+  case 269:
+#line 1011 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1820 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1836 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 269:
-#line 1014 "dhcp4_parser.yy" // lalr1.cc:859
+  case 270:
+#line 1018 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1830 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1846 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 270:
-#line 1018 "dhcp4_parser.yy" // lalr1.cc:859
+  case 271:
+#line 1022 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1838 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1854 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1047 "dhcp4_parser.yy" // lalr1.cc:859
+  case 283:
+#line 1051 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1846 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1862 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1049 "dhcp4_parser.yy" // lalr1.cc:859
+  case 284:
+#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 1856 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1872 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 286:
-#line 1059 "dhcp4_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1063 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 1865 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1881 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 287:
-#line 1067 "dhcp4_parser.yy" // lalr1.cc:859
+  case 288:
+#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 1876 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1892 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 288:
-#line 1072 "dhcp4_parser.yy" // lalr1.cc:859
+  case 289:
+#line 1076 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1885 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1901 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 293:
-#line 1087 "dhcp4_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1091 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1895 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1911 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 294:
-#line 1091 "dhcp4_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1095 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1903 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1919 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 295:
-#line 1095 "dhcp4_parser.yy" // lalr1.cc:859
+  case 296:
+#line 1099 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1913 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1929 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 296:
-#line 1099 "dhcp4_parser.yy" // lalr1.cc:859
+  case 297:
+#line 1103 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1921 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1937 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 302:
-#line 1112 "dhcp4_parser.yy" // lalr1.cc:859
+  case 304:
+#line 1117 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1929 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1945 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 303:
-#line 1114 "dhcp4_parser.yy" // lalr1.cc:859
+  case 305:
+#line 1119 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 1939 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1955 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 304:
-#line 1123 "dhcp4_parser.yy" // lalr1.cc:859
+  case 306:
+#line 1125 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1963 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 307:
+#line 1127 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
+    ctx.leave();
+}
+#line 1972 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 308:
+#line 1135 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 1950 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1983 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 305:
-#line 1128 "dhcp4_parser.yy" // lalr1.cc:859
+  case 309:
+#line 1140 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1959 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1992 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 310:
-#line 1141 "dhcp4_parser.yy" // lalr1.cc:859
+  case 314:
+#line 1153 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1969 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2002 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 311:
-#line 1145 "dhcp4_parser.yy" // lalr1.cc:859
+  case 315:
+#line 1157 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1977 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2010 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 312:
-#line 1149 "dhcp4_parser.yy" // lalr1.cc:859
+  case 316:
+#line 1161 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1987 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2020 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 313:
-#line 1153 "dhcp4_parser.yy" // lalr1.cc:859
+  case 317:
+#line 1165 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1995 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2028 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 330:
-#line 1180 "dhcp4_parser.yy" // lalr1.cc:859
+  case 334:
+#line 1192 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2003 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2036 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 331:
-#line 1182 "dhcp4_parser.yy" // lalr1.cc:859
+  case 335:
+#line 1194 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 2013 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2046 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1188 "dhcp4_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1200 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2021 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2054 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1190 "dhcp4_parser.yy" // lalr1.cc:859
+  case 337:
+#line 1202 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 2031 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2064 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1196 "dhcp4_parser.yy" // lalr1.cc:859
+  case 338:
+#line 1208 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2039 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2072 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 335:
-#line 1198 "dhcp4_parser.yy" // lalr1.cc:859
+  case 339:
+#line 1210 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 2049 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2082 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 336:
-#line 1204 "dhcp4_parser.yy" // lalr1.cc:859
+  case 340:
+#line 1216 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2057 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2090 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 337:
-#line 1206 "dhcp4_parser.yy" // lalr1.cc:859
+  case 341:
+#line 1218 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 2067 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2100 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 338:
-#line 1212 "dhcp4_parser.yy" // lalr1.cc:859
+  case 342:
+#line 1224 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2075 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2108 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 339:
-#line 1214 "dhcp4_parser.yy" // lalr1.cc:859
+  case 343:
+#line 1226 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2085 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2118 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 340:
-#line 1220 "dhcp4_parser.yy" // lalr1.cc:859
+  case 344:
+#line 1232 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2093 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2126 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 341:
-#line 1222 "dhcp4_parser.yy" // lalr1.cc:859
+  case 345:
+#line 1234 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2103 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2136 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 342:
-#line 1228 "dhcp4_parser.yy" // lalr1.cc:859
+  case 346:
+#line 1240 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2111 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2144 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 343:
-#line 1230 "dhcp4_parser.yy" // lalr1.cc:859
+  case 347:
+#line 1242 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 2121 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2154 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 344:
-#line 1236 "dhcp4_parser.yy" // lalr1.cc:859
+  case 348:
+#line 1248 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2129 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2162 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1238 "dhcp4_parser.yy" // lalr1.cc:859
+  case 349:
+#line 1250 "dhcp4_parser.yy" // lalr1.cc:859
     {
     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 2139 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2172 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 346:
-#line 1245 "dhcp4_parser.yy" // lalr1.cc:859
+  case 350:
+#line 1257 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2147 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2180 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 347:
-#line 1247 "dhcp4_parser.yy" // lalr1.cc:859
+  case 351:
+#line 1259 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2157 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2190 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 348:
-#line 1253 "dhcp4_parser.yy" // lalr1.cc:859
+  case 352:
+#line 1265 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2168 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2201 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 349:
-#line 1258 "dhcp4_parser.yy" // lalr1.cc:859
+  case 353:
+#line 1270 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2177 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2210 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 350:
-#line 1266 "dhcp4_parser.yy" // lalr1.cc:859
+  case 354:
+#line 1278 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2188 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2221 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1271 "dhcp4_parser.yy" // lalr1.cc:859
+  case 355:
+#line 1283 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2197 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2230 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 352:
-#line 1276 "dhcp4_parser.yy" // lalr1.cc:859
+  case 356:
+#line 1288 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2205 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2238 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 353:
-#line 1278 "dhcp4_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1290 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2215 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2248 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1287 "dhcp4_parser.yy" // lalr1.cc:859
+  case 358:
+#line 1299 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2226 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2259 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1292 "dhcp4_parser.yy" // lalr1.cc:859
+  case 359:
+#line 1304 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2235 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2268 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 358:
-#line 1301 "dhcp4_parser.yy" // lalr1.cc:859
+  case 362:
+#line 1313 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2245 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2278 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 359:
-#line 1305 "dhcp4_parser.yy" // lalr1.cc:859
+  case 363:
+#line 1317 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2253 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2286 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 372:
-#line 1328 "dhcp4_parser.yy" // lalr1.cc:859
+  case 376:
+#line 1340 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2261 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2294 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 373:
-#line 1330 "dhcp4_parser.yy" // lalr1.cc:859
+  case 377:
+#line 1342 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2271 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2304 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 374:
-#line 1339 "dhcp4_parser.yy" // lalr1.cc:859
+  case 378:
+#line 1351 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2282 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2315 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 375:
-#line 1344 "dhcp4_parser.yy" // lalr1.cc:859
+  case 379:
+#line 1356 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2291 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2324 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1362 "dhcp4_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1374 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2300 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2333 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1367 "dhcp4_parser.yy" // lalr1.cc:859
+  case 390:
+#line 1379 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2308 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2341 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1369 "dhcp4_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1381 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2318 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2351 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1375 "dhcp4_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1387 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2327 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2360 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 389:
-#line 1380 "dhcp4_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1392 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2336 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2369 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 390:
-#line 1387 "dhcp4_parser.yy" // lalr1.cc:859
+  case 394:
+#line 1399 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2345 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2378 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1394 "dhcp4_parser.yy" // lalr1.cc:859
+  case 395:
+#line 1406 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2356 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2389 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1399 "dhcp4_parser.yy" // lalr1.cc:859
+  case 396:
+#line 1411 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2365 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2398 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 397:
-#line 1412 "dhcp4_parser.yy" // lalr1.cc:859
+  case 401:
+#line 1424 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2373 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2406 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 398:
-#line 1414 "dhcp4_parser.yy" // lalr1.cc:859
+  case 402:
+#line 1426 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2383 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2416 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1420 "dhcp4_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1432 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2391 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2424 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1422 "dhcp4_parser.yy" // lalr1.cc:859
+  case 404:
+#line 1434 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2401 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2434 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 401:
-#line 1430 "dhcp4_parser.yy" // lalr1.cc:859
+  case 405:
+#line 1442 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2412 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2445 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 402:
-#line 1435 "dhcp4_parser.yy" // lalr1.cc:859
+  case 406:
+#line 1447 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2421 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2454 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 403:
-#line 1442 "dhcp4_parser.yy" // lalr1.cc:859
+  case 407:
+#line 1454 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2429 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2462 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 404:
-#line 1444 "dhcp4_parser.yy" // lalr1.cc:859
+  case 408:
+#line 1456 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2438 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2471 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 405:
-#line 1449 "dhcp4_parser.yy" // lalr1.cc:859
+  case 409:
+#line 1461 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2446 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2479 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 406:
-#line 1451 "dhcp4_parser.yy" // lalr1.cc:859
+  case 410:
+#line 1463 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2455 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2488 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 407:
-#line 1461 "dhcp4_parser.yy" // lalr1.cc:859
+  case 411:
+#line 1473 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 2466 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2499 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 408:
-#line 1466 "dhcp4_parser.yy" // lalr1.cc:859
+  case 412:
+#line 1478 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2475 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2508 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1483 "dhcp4_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1495 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 2486 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2519 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1488 "dhcp4_parser.yy" // lalr1.cc:859
+  case 417:
+#line 1500 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2495 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2528 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 416:
-#line 1500 "dhcp4_parser.yy" // lalr1.cc:859
+  case 420:
+#line 1512 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 2505 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2538 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 417:
-#line 1504 "dhcp4_parser.yy" // lalr1.cc:859
+  case 421:
+#line 1516 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2513 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2546 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 425:
-#line 1519 "dhcp4_parser.yy" // lalr1.cc:859
+  case 429:
+#line 1531 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 2522 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2555 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 426:
-#line 1523 "dhcp4_parser.yy" // lalr1.cc:859
+  case 430:
+#line 1535 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2530 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2563 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 427:
-#line 1525 "dhcp4_parser.yy" // lalr1.cc:859
+  case 431:
+#line 1537 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 2540 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2573 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 428:
-#line 1531 "dhcp4_parser.yy" // lalr1.cc:859
+  case 432:
+#line 1543 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 2551 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2584 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 429:
-#line 1536 "dhcp4_parser.yy" // lalr1.cc:859
+  case 433:
+#line 1548 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2560 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2593 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 432:
-#line 1545 "dhcp4_parser.yy" // lalr1.cc:859
+  case 436:
+#line 1557 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2570 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2603 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 433:
-#line 1549 "dhcp4_parser.yy" // lalr1.cc:859
+  case 437:
+#line 1561 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2578 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2611 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 436:
-#line 1557 "dhcp4_parser.yy" // lalr1.cc:859
+  case 440:
+#line 1569 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2586 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2619 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 437:
-#line 1559 "dhcp4_parser.yy" // lalr1.cc:859
+  case 441:
+#line 1571 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 2596 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2629 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 2600 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2633 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -2851,86 +2884,87 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -411;
+  const short int Dhcp4Parser::yypact_ninf_ = -419;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     179,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,    39,    22,    34,    54,    61,    94,   113,   155,   173,
-     209,   218,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,    22,   -29,    18,    65,   106,    19,    -6,    96,
-      17,    67,   -17,  -411,   170,   175,   192,   199,   224,  -411,
-    -411,  -411,  -411,   226,  -411,    72,  -411,  -411,  -411,  -411,
-    -411,  -411,   227,   228,  -411,  -411,  -411,   230,   231,   232,
-     235,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   237,
-    -411,  -411,  -411,   131,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   134,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-     238,   240,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,   142,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,   143,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,   241,   245,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-     248,  -411,  -411,  -411,   249,  -411,  -411,  -411,   257,   266,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,   267,  -411,  -411,  -411,  -411,   264,   270,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,   167,  -411,  -411,
-    -411,  -411,    22,    22,  -411,   180,   281,   283,   284,   285,
-    -411,    18,  -411,   286,   182,   183,   289,   290,   291,   193,
-     194,   195,   196,   292,   293,   294,   295,   300,   301,   302,
-     303,   204,   304,   305,    65,  -411,   306,   308,   106,  -411,
-      26,   309,   310,   311,   312,   313,   314,   315,   213,   215,
-     317,   318,   319,   321,    19,  -411,   322,    -6,  -411,   323,
-     324,   325,   326,   327,   328,   329,   330,   333,  -411,    96,
-     334,   335,   233,   337,   338,   339,   236,  -411,    17,   340,
-     239,  -411,    67,   342,   343,   -22,  -411,  -411,  -411,   345,
-     344,   346,    22,    22,  -411,   347,  -411,  -411,   244,   348,
-     349,  -411,  -411,  -411,  -411,   352,   353,   354,   357,   358,
-     359,   360,   361,  -411,   362,   363,  -411,   366,   112,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,   364,   370,  -411,
-    -411,  -411,   246,   269,   271,   371,   272,   274,   275,  -411,
-    -411,   276,   277,   380,   379,  -411,   282,  -411,   287,   288,
-     366,   296,   297,   298,   299,   316,   320,  -411,   331,   332,
-    -411,   336,   341,   350,  -411,  -411,   351,  -411,  -411,   355,
-      22,  -411,    22,    65,   307,  -411,  -411,   106,  -411,   161,
-     161,   382,   383,   385,   197,    35,   390,    92,    11,    70,
-     -29,  -411,  -411,  -411,  -411,  -411,   394,  -411,    26,  -411,
-    -411,  -411,   392,  -411,  -411,  -411,  -411,  -411,   393,   356,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   169,
-    -411,   171,  -411,  -411,   190,  -411,  -411,  -411,   397,   402,
-     403,  -411,   191,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,   200,  -411,   381,   405,  -411,  -411,   404,   406,
-    -411,  -411,   408,   409,  -411,  -411,  -411,  -411,  -411,  -411,
-      29,  -411,  -411,  -411,  -411,  -411,    99,  -411,   410,   414,
-    -411,   407,   415,   416,   417,   420,   421,   201,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,   423,   424,   425,  -411,
-    -411,  -411,   202,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-     203,  -411,  -411,  -411,   210,    22,   365,  -411,  -411,   412,
-     427,  -411,  -411,   426,   428,  -411,  -411,   431,  -411,   429,
-     307,  -411,  -411,   430,   432,   436,   367,   368,   369,   161,
-    -411,  -411,    19,  -411,   382,    17,  -411,   383,    67,  -411,
-     385,   197,  -411,    35,  -411,   -17,  -411,   390,   372,   373,
-     374,   375,   376,   377,    92,  -411,   437,   378,   384,   386,
-      11,  -411,   439,   440,    70,  -411,  -411,   442,  -411,    -6,
-    -411,   392,    96,  -411,   393,   441,  -411,   444,  -411,   388,
-     389,   391,  -411,  -411,  -411,  -411,   211,  -411,   438,  -411,
-     443,  -411,  -411,  -411,   212,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,   395,  -411,  -411,  -411,  -411,   396,   398,
-    -411,  -411,   214,  -411,   445,  -411,   399,   447,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,   141,  -411,    48,   447,  -411,  -411,   446,  -411,
-    -411,  -411,   220,  -411,  -411,  -411,  -411,  -411,   448,   400,
-     451,    48,  -411,   453,  -411,   411,  -411,   452,  -411,  -411,
-     189,  -411,   401,   452,  -411,  -411,   221,  -411,  -411,   456,
-     401,  -411,   413,  -411,  -411
+     184,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,    27,    23,    35,    60,    67,    78,    86,    95,   106,
+     145,   149,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,    23,    13,    19,    65,    24,    17,    -6,    99,
+     165,    48,    -7,  -419,    49,   155,   166,   152,   178,  -419,
+    -419,  -419,  -419,   216,  -419,    42,  -419,  -419,  -419,  -419,
+    -419,  -419,   218,   237,  -419,  -419,  -419,   239,   240,   241,
+     243,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,   244,
+    -419,  -419,  -419,    43,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,    54,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+     250,   251,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,    58,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,    72,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,   193,   234,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,   257,  -419,  -419,  -419,   258,  -419,  -419,  -419,
+     255,   261,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,   265,  -419,  -419,  -419,  -419,   262,   271,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,   102,
+    -419,  -419,  -419,  -419,    23,    23,  -419,   168,   272,   273,
+     274,   275,  -419,    19,  -419,   287,   182,   183,   290,   291,
+     292,   189,   190,   191,   192,   297,   298,   299,   300,   301,
+     302,   303,   304,   202,   305,   307,    65,  -419,   308,   309,
+      24,  -419,    20,   310,   311,   312,   313,   314,   315,   316,
+     214,   215,   317,   319,   320,   322,    17,  -419,   323,   324,
+      -6,  -419,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,  -419,    99,   334,   335,   232,   339,   340,   341,   236,
+    -419,   165,   343,   238,  -419,    48,   345,   346,    36,  -419,
+    -419,  -419,   347,   348,   349,    23,    23,  -419,   350,  -419,
+    -419,   245,   351,   352,  -419,  -419,  -419,  -419,   355,   356,
+     357,   358,   361,   362,   364,   365,  -419,   366,   367,  -419,
+     363,   114,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+     368,   372,  -419,  -419,  -419,   246,   247,   270,   374,   277,
+     278,   279,  -419,  -419,   280,   282,   375,   383,  -419,   284,
+     385,  -419,   286,   289,   363,   293,   294,   295,   296,   306,
+     318,  -419,   321,   336,  -419,   337,   338,   342,  -419,  -419,
+     344,  -419,  -419,   353,    23,  -419,    23,    65,   360,  -419,
+    -419,    24,  -419,   150,   150,   387,   390,   392,   162,    34,
+     397,   156,   112,    82,    13,  -419,  -419,  -419,  -419,  -419,
+     377,  -419,    20,  -419,  -419,  -419,   398,  -419,  -419,  -419,
+    -419,  -419,   399,   359,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,   113,  -419,   133,  -419,  -419,
+     137,  -419,  -419,  -419,   378,   403,   404,  -419,   139,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,   140,  -419,
+     405,   406,  -419,  -419,   408,   407,  -419,  -419,   409,   413,
+    -419,  -419,  -419,  -419,  -419,  -419,   177,  -419,  -419,  -419,
+    -419,  -419,   197,  -419,   411,   415,  -419,   417,   419,   420,
+     422,   425,   426,   143,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,   427,   428,   429,  -419,  -419,  -419,   151,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,   163,  -419,  -419,  -419,
+     179,    23,   354,  -419,  -419,   430,   416,  -419,  -419,   431,
+     432,  -419,  -419,   433,  -419,   434,   360,  -419,  -419,   435,
+     436,   438,   369,   370,   371,   150,  -419,  -419,    17,  -419,
+     387,   165,  -419,   390,    48,  -419,   392,   162,  -419,    34,
+    -419,    -7,  -419,   397,   376,   379,   380,   381,   382,   384,
+     156,  -419,   442,   386,   388,   389,   112,  -419,   443,   444,
+      82,  -419,  -419,   446,  -419,    -6,  -419,   398,    99,  -419,
+     399,   449,  -419,   450,  -419,   373,   391,   393,  -419,  -419,
+    -419,  -419,   188,  -419,   448,  -419,   451,  -419,  -419,  -419,
+     194,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,   394,
+    -419,  -419,  -419,  -419,   395,   396,  -419,  -419,   201,  -419,
+     454,  -419,   400,   447,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,   211,  -419,
+      18,   447,  -419,  -419,   453,  -419,  -419,  -419,   210,  -419,
+    -419,  -419,  -419,  -419,   459,   401,   460,    18,  -419,   461,
+    -419,   410,  -419,   458,  -419,  -419,   233,  -419,   412,   458,
+    -419,  -419,   213,  -419,  -419,   463,   412,  -419,   414,  -419,
+    -419
   };
 
   const unsigned short int
@@ -2938,410 +2972,415 @@ namespace isc { namespace dhcp {
   {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
       20,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     1,    36,    30,    26,    25,    22,    23,    24,
-      29,     3,    27,    28,    45,     5,    56,     7,    94,     9,
-     185,    11,   295,    13,   312,    15,   235,    17,   269,    19,
-     150,    21,    40,    32,     0,     0,     0,     0,     0,   314,
-     237,   271,     0,    42,     0,    41,     0,     0,    33,    54,
-     407,   403,   405,     0,    53,     0,    47,    49,    51,    52,
-      50,    88,     0,     0,   330,   102,   104,     0,     0,     0,
-       0,   177,   227,   261,   131,   354,   142,   161,   374,     0,
-     391,   401,    81,     0,    58,    60,    61,    62,    63,    78,
-      79,    65,    66,    67,    68,    72,    73,    64,    70,    71,
-      80,    69,    74,    75,    76,    77,    96,    98,     0,    90,
-      92,    93,   358,   211,   213,   215,   287,   209,   217,   219,
-       0,     0,   223,   221,   304,   350,   208,   189,   190,   191,
-     203,     0,   187,   194,   205,   206,   207,   195,   196,   199,
-     201,   197,   198,   192,   193,   200,   204,   202,   302,   301,
-     300,     0,   297,   299,   332,   334,   348,   338,   340,   344,
-     342,   346,   336,   329,   325,     0,   315,   316,   326,   327,
-     328,   322,   318,   323,   320,   321,   324,   319,   117,   125,
-       0,   255,   253,   258,     0,   248,   252,   249,     0,   238,
-     239,   241,   251,   242,   243,   244,   257,   245,   246,   247,
-     282,     0,   280,   281,   284,   285,     0,   272,   273,   275,
-     276,   277,   278,   279,   157,   159,   154,     0,   152,   155,
-     156,    37,     0,     0,    31,     0,     0,     0,     0,     0,
-      44,     0,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     1,    37,    30,    26,    25,    22,    23,    24,
+      29,     3,    27,    28,    46,     5,    57,     7,    95,     9,
+     186,    11,   296,    13,   316,    15,   236,    17,   270,    19,
+     151,    21,    41,    33,     0,     0,     0,     0,     0,   318,
+     238,   272,     0,    43,     0,    42,     0,     0,    34,    55,
+     411,   407,   409,     0,    54,     0,    48,    50,    52,    53,
+      51,    89,     0,     0,   334,   103,   105,     0,     0,     0,
+       0,   178,   228,   262,   132,   358,   143,   162,   378,     0,
+     395,   405,    82,     0,    59,    61,    62,    63,    64,    79,
+      80,    66,    67,    68,    69,    73,    74,    65,    71,    72,
+      81,    70,    75,    76,    77,    78,    97,    99,     0,    91,
+      93,    94,   362,   212,   214,   216,   288,   210,   218,   220,
+       0,     0,   224,   222,   308,   354,   209,   190,   191,   192,
+     204,     0,   188,   195,   206,   207,   208,   196,   197,   200,
+     202,   198,   199,   193,   194,   201,   205,   203,   304,   306,
+     303,   301,     0,   298,   300,   302,   336,   338,   352,   342,
+     344,   348,   346,   350,   340,   333,   329,     0,   319,   320,
+     330,   331,   332,   326,   322,   327,   324,   325,   328,   323,
+     118,   126,     0,   256,   254,   259,     0,   249,   253,   250,
+       0,   239,   240,   242,   252,   243,   244,   245,   258,   246,
+     247,   248,   283,     0,   281,   282,   285,   286,     0,   273,
+     274,   276,   277,   278,   279,   280,   158,   160,   155,     0,
+     153,   156,   157,    38,     0,     0,    31,     0,     0,     0,
+       0,     0,    45,     0,    47,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    57,     0,     0,     0,    95,
-     360,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   186,     0,     0,   296,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   313,     0,
-       0,     0,     0,     0,     0,     0,     0,   236,     0,     0,
-       0,   270,     0,     0,     0,     0,   151,    43,    34,     0,
-       0,     0,     0,     0,    48,     0,    86,    87,     0,     0,
-       0,    82,    83,    84,    85,     0,     0,     0,     0,     0,
-       0,     0,     0,   390,     0,     0,    59,     0,     0,    91,
-     372,   370,   371,   366,   367,   368,   369,     0,   361,   362,
-     364,   365,     0,     0,     0,     0,     0,     0,     0,   225,
-     226,     0,     0,     0,     0,   188,     0,   298,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   317,     0,     0,
-     250,     0,     0,     0,   260,   240,     0,   286,   274,     0,
-       0,   153,     0,     0,     0,   404,   406,     0,   331,     0,
-       0,   179,   229,   263,     0,     0,   144,     0,     0,     0,
-       0,    38,    97,   100,   101,    99,     0,   359,     0,   212,
-     214,   216,   289,   210,   218,   220,   224,   222,   306,     0,
-     303,   333,   335,   349,   339,   341,   345,   343,   347,   337,
-     118,   126,   256,   254,   259,   283,   158,   160,    35,     0,
-     412,     0,   409,   411,     0,   119,   121,   123,     0,     0,
-       0,   116,     0,   106,   108,   109,   110,   111,   112,   113,
-     114,   115,     0,   183,     0,   180,   181,   233,     0,   230,
-     231,   267,     0,   264,   265,   130,   139,   140,   141,   135,
-       0,   133,   136,   137,   138,   356,     0,   148,     0,   145,
-     146,     0,     0,     0,     0,     0,     0,     0,   163,   165,
-     166,   167,   168,   169,   170,   386,     0,     0,     0,   384,
-     378,   383,     0,   376,   381,   379,   380,   382,   397,   399,
-       0,   393,   395,   396,     0,    40,     0,   363,   293,     0,
-     290,   291,   310,     0,   307,   308,   352,     0,    55,     0,
-       0,   408,    89,     0,     0,     0,     0,     0,     0,     0,
-     103,   105,     0,   178,     0,   237,   228,     0,   271,   262,
-       0,     0,   132,     0,   355,     0,   143,     0,     0,     0,
-       0,     0,     0,     0,     0,   162,     0,     0,     0,     0,
-       0,   375,     0,     0,     0,   392,   402,     0,   373,     0,
-     288,     0,   314,   305,     0,     0,   351,     0,   410,     0,
-       0,     0,   127,   128,   129,   107,     0,   182,     0,   232,
-       0,   266,   134,   357,     0,   147,   171,   172,   173,   174,
-     175,   176,   164,     0,   385,   388,   389,   377,     0,     0,
-     394,    39,     0,   292,     0,   309,     0,     0,   120,   122,
-     124,   184,   234,   268,   149,   387,   398,   400,   294,   311,
-     353,   416,     0,   414,     0,     0,   413,   428,     0,   426,
-     424,   420,     0,   418,   422,   423,   421,   415,     0,     0,
-       0,     0,   417,     0,   425,     0,   419,     0,   427,   432,
-       0,   430,     0,     0,   429,   436,     0,   434,   431,     0,
-       0,   433,     0,   435,   437
+       0,     0,     0,     0,     0,     0,     0,    58,     0,     0,
+       0,    96,   364,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   187,     0,     0,
+       0,   297,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   317,     0,     0,     0,     0,     0,     0,     0,     0,
+     237,     0,     0,     0,   271,     0,     0,     0,     0,   152,
+      44,    35,     0,     0,     0,     0,     0,    49,     0,    87,
+      88,     0,     0,     0,    83,    84,    85,    86,     0,     0,
+       0,     0,     0,     0,     0,     0,   394,     0,     0,    60,
+       0,     0,    92,   376,   374,   375,   370,   371,   372,   373,
+       0,   365,   366,   368,   369,     0,     0,     0,     0,     0,
+       0,     0,   226,   227,     0,     0,     0,     0,   189,     0,
+       0,   299,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   321,     0,     0,   251,     0,     0,     0,   261,   241,
+       0,   287,   275,     0,     0,   154,     0,     0,     0,   408,
+     410,     0,   335,     0,     0,   180,   230,   264,     0,     0,
+     145,     0,     0,     0,     0,    39,    98,   101,   102,   100,
+       0,   363,     0,   213,   215,   217,   290,   211,   219,   221,
+     225,   223,   310,     0,   305,    32,   307,   337,   339,   353,
+     343,   345,   349,   347,   351,   341,   119,   127,   257,   255,
+     260,   284,   159,   161,    36,     0,   416,     0,   413,   415,
+       0,   120,   122,   124,     0,     0,     0,   117,     0,   107,
+     109,   110,   111,   112,   113,   114,   115,   116,     0,   184,
+       0,   181,   182,   234,     0,   231,   232,   268,     0,   265,
+     266,   131,   140,   141,   142,   136,     0,   134,   137,   138,
+     139,   360,     0,   149,     0,   146,   147,     0,     0,     0,
+       0,     0,     0,     0,   164,   166,   167,   168,   169,   170,
+     171,   390,     0,     0,     0,   388,   382,   387,     0,   380,
+     385,   383,   384,   386,   401,   403,     0,   397,   399,   400,
+       0,    41,     0,   367,   294,     0,   291,   292,   314,     0,
+     311,   312,   356,     0,    56,     0,     0,   412,    90,     0,
+       0,     0,     0,     0,     0,     0,   104,   106,     0,   179,
+       0,   238,   229,     0,   272,   263,     0,     0,   133,     0,
+     359,     0,   144,     0,     0,     0,     0,     0,     0,     0,
+       0,   163,     0,     0,     0,     0,     0,   379,     0,     0,
+       0,   396,   406,     0,   377,     0,   289,     0,   318,   309,
+       0,     0,   355,     0,   414,     0,     0,     0,   128,   129,
+     130,   108,     0,   183,     0,   233,     0,   267,   135,   361,
+       0,   148,   172,   173,   174,   175,   176,   177,   165,     0,
+     389,   392,   393,   381,     0,     0,   398,    40,     0,   293,
+       0,   313,     0,     0,   121,   123,   125,   185,   235,   269,
+     150,   391,   402,   404,   295,   315,   357,   420,     0,   418,
+       0,     0,   417,   432,     0,   430,   428,   424,     0,   422,
+     426,   427,   425,   419,     0,     0,     0,     0,   421,     0,
+     429,     0,   423,     0,   431,   436,     0,   434,     0,     0,
+     433,   440,     0,   438,   435,     0,     0,   437,     0,   439,
+     441
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,     3,  -411,  -411,  -411,  -411,     5,  -411,  -411,
-      73,  -411,   -93,  -411,   -54,  -411,  -411,  -411,   216,  -411,
-    -411,  -411,  -411,    51,   198,   -56,   -40,   -38,  -411,  -411,
-     -37,  -411,  -411,    49,   187,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,    50,  -111,  -398,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,   -59,  -411,  -410,  -411,
-    -411,  -411,  -411,  -411,  -411,  -122,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -124,  -411,  -411,  -411,  -121,   152,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -118,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,   -97,  -411,  -411,
-    -411,   -94,   205,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -402,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,   -98,  -411,  -411,  -411,   -95,
-    -411,   178,  -411,   -52,  -411,  -411,  -411,  -411,   -48,  -411,
-    -411,  -411,  -411,  -411,   -47,  -411,  -411,  -411,   -92,  -411,
-    -411,  -411,   -88,  -411,   181,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -115,  -411,  -411,  -411,  -110,
-     217,  -411,  -411,  -411,  -411,  -411,  -411,  -116,  -411,  -411,
-    -411,  -112,  -411,   206,   -43,  -411,  -256,  -411,  -255,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,    74,  -411,  -411,  -411,  -411,  -411,
-    -411,   -99,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -101,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,   -49,  -411,  -411,  -411,  -169,
-    -411,  -411,  -183,  -411,  -411,  -411,  -411,  -411,  -411,  -191,
-    -411,  -411,  -197,  -411
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,     6,  -419,    22,  -419,  -419,  -419,     0,  -419,
+    -419,    64,  -419,   -93,  -419,   -54,  -419,  -419,  -419,   217,
+    -419,  -419,  -419,  -419,    52,   195,   -56,   -40,   -37,  -419,
+    -419,   -36,  -419,  -419,    51,   196,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,    50,  -112,  -401,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,   -59,  -419,  -418,
+    -419,  -419,  -419,  -419,  -419,  -419,  -122,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -126,  -419,  -419,  -419,  -119,   157,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -127,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -104,  -419,
+    -419,  -419,   -97,   199,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -410,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -100,  -419,  -419,  -419,
+     -92,  -419,   185,  -419,   -52,  -419,  -419,  -419,  -419,   -45,
+    -419,  -419,  -419,  -419,  -419,   -47,  -419,  -419,  -419,   -91,
+    -419,  -419,  -419,   -86,  -419,   186,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -117,  -419,  -419,  -419,
+    -113,   219,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -116,  -419,  -419,  -419,  -115,  -419,   203,   -44,  -419,  -257,
+    -419,  -256,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,    74,  -419,  -419,
+    -419,  -419,  -419,  -419,   -98,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,   -96,  -419,  -419,  -419,  -419,  -419,
+    -419,  -419,  -419,  -419,  -419,  -419,  -419,  -419,   -53,  -419,
+    -419,  -419,  -171,  -419,  -419,  -185,  -419,  -419,  -419,  -419,
+    -419,  -419,  -194,  -419,  -419,  -199,  -419
   };
 
   const short int
   Dhcp4Parser::yydefgoto_[] =
   {
       -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    63,    31,    32,    53,    67,    68,    33,    52,
-     432,   555,    64,    65,   102,    35,    54,    75,    76,    77,
-     246,    37,    55,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   253,   128,   129,    39,    56,   130,   276,   131,
-     277,   435,   112,   257,   113,   258,   482,   483,   206,   310,
-     485,   573,   486,   574,   487,   575,   207,   311,   489,   490,
-     491,   509,   114,   266,   510,   511,   512,   513,   514,   115,
-     268,   518,   519,   520,   595,    51,    62,   237,   238,   239,
-     323,   240,   324,   116,   269,   527,   528,   529,   530,   531,
-     532,   533,   534,   117,   263,   494,   495,   496,   582,    41,
-      57,   151,   152,   153,   285,   154,   281,   155,   282,   156,
-     283,   157,   286,   158,   287,   159,   291,   160,   290,   161,
-     162,   118,   264,   498,   499,   500,   585,    47,    60,   208,
-     209,   210,   211,   212,   213,   214,   215,   314,   216,   313,
-     217,   218,   315,   219,   119,   265,   502,   503,   504,   588,
-      49,    61,   226,   227,   228,   229,   230,   319,   231,   232,
-     233,   164,   284,   559,   560,   561,   619,    43,    58,   171,
-     172,   173,   296,   165,   292,   563,   564,   565,   622,    45,
-      59,   185,   186,   187,   120,   256,   189,   299,   190,   300,
-     191,   307,   192,   302,   193,   303,   194,   305,   195,   304,
-     196,   306,   197,   301,   167,   293,   567,   625,   121,   267,
-     516,   280,   367,   368,   369,   370,   371,   436,   122,   270,
-     542,   543,   544,   545,   606,   546,   547,   123,   124,   272,
-     550,   551,   552,   612,   553,   613,   125,   273,    78,   248,
-      79,   249,    80,   247,   471,   472,   473,   569,   682,   683,
-     684,   692,   693,   694,   695,   700,   696,   698,   710,   711,
-     712,   716,   717,   719
+      20,    21,    63,    31,    32,    53,   456,    67,    68,    33,
+      52,   436,   561,    64,    65,   102,    35,    54,    75,    76,
+      77,   248,    37,    55,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   255,   128,   129,    39,    56,   130,   278,
+     131,   279,   439,   112,   259,   113,   260,   488,   489,   208,
+     313,   491,   579,   492,   580,   493,   581,   209,   314,   495,
+     496,   497,   515,   114,   268,   516,   517,   518,   519,   520,
+     115,   270,   524,   525,   526,   601,    51,    62,   239,   240,
+     241,   326,   242,   327,   116,   271,   533,   534,   535,   536,
+     537,   538,   539,   540,   117,   265,   500,   501,   502,   588,
+      41,    57,   151,   152,   153,   287,   154,   283,   155,   284,
+     156,   285,   157,   288,   158,   289,   159,   293,   160,   292,
+     161,   162,   118,   266,   504,   505,   506,   591,    47,    60,
+     210,   211,   212,   213,   214,   215,   216,   217,   317,   218,
+     316,   219,   220,   318,   221,   119,   267,   508,   509,   510,
+     594,    49,    61,   228,   229,   230,   231,   232,   322,   233,
+     234,   235,   164,   286,   565,   566,   567,   625,    43,    58,
+     172,   173,   174,   298,   175,   299,   165,   294,   569,   570,
+     571,   628,    45,    59,   187,   188,   189,   120,   258,   191,
+     302,   192,   303,   193,   310,   194,   305,   195,   306,   196,
+     308,   197,   307,   198,   309,   199,   304,   167,   295,   573,
+     631,   121,   269,   522,   282,   370,   371,   372,   373,   374,
+     440,   122,   272,   548,   549,   550,   551,   612,   552,   553,
+     123,   124,   274,   556,   557,   558,   618,   559,   619,   125,
+     275,    78,   250,    79,   251,    80,   249,   477,   478,   479,
+     575,   688,   689,   690,   698,   699,   700,   701,   706,   702,
+     704,   716,   717,   718,   722,   723,   725
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
-      74,   147,   223,   146,   169,   183,   205,   222,   236,   224,
-     163,   170,   184,   225,   166,    30,   188,   148,   541,   149,
-     150,   484,   484,   515,   365,   366,   132,    23,    69,    24,
-     540,    25,   591,    93,   198,   592,    83,    84,   478,    22,
-     198,    34,   132,   168,    84,   174,   175,   234,   235,    87,
-      88,    89,   234,   235,   133,   134,   135,   199,    93,   200,
-     201,    36,   202,   203,   204,    93,   199,   136,    38,   137,
-     138,   139,   140,   141,   142,   251,    81,    66,   143,   144,
-     252,    82,    83,    84,   360,   145,    85,    86,   199,    73,
-     535,   536,   537,   538,   143,    87,    88,    89,    90,    91,
-      73,    40,   593,    92,    93,   594,    70,   199,   220,   200,
-     201,   221,    71,    72,    84,   174,   175,    73,   126,   127,
-      42,    94,    95,    73,    73,    73,   433,   434,    26,    27,
-      28,    29,    73,    96,   274,    93,    97,   278,   687,   275,
-     688,   689,   279,    98,   685,   294,   297,   686,    99,   100,
-     295,   298,   101,   176,    73,   548,   549,   177,   178,   179,
-     180,   181,    44,   182,   521,   522,   523,   524,   525,   526,
-     325,    73,   274,    73,   570,   326,   241,   568,   242,   571,
-      46,   484,   365,   366,   198,   475,   476,   477,   478,   479,
-     480,   643,   713,   278,   579,   714,   243,    74,   572,   580,
-     541,   199,    73,   579,   604,   610,   614,   244,   581,   605,
-     611,   615,   540,   245,   294,   325,    48,   297,   616,   671,
-     674,   362,   678,   701,   720,    50,   361,   245,   702,   721,
-     250,   254,   255,   363,   259,   260,   261,   364,   147,   262,
-     146,   271,   288,   169,   289,   327,   328,   163,   309,   308,
-     170,   166,   312,   316,   148,   183,   149,   150,   505,   506,
-     507,   508,   184,   223,   205,   317,   188,    73,   222,   318,
-     224,   320,   321,   322,   225,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   330,   329,   331,   332,   333,
-     335,   336,   337,   338,   339,   340,   345,   346,   347,   348,
-     341,   342,   343,   344,   349,   350,   351,   352,   354,   355,
-     357,   353,   358,   372,   373,   374,   375,   376,   377,   378,
-     379,   381,   382,   383,   380,   384,   386,   388,   389,   390,
-     391,   392,   393,   394,   395,   415,   416,   396,   398,   399,
-     400,   401,   402,   403,   406,   404,   409,   410,   407,   412,
-     418,   413,   439,   414,   417,   419,   420,   421,   422,   423,
-     488,   488,   424,   425,   426,   481,   481,   427,   428,   429,
-     430,   431,   437,   438,   539,   440,   442,   441,   443,   362,
-     444,   445,   446,   447,   361,   448,   449,   583,   450,   493,
-     497,   363,   501,   451,   452,   364,   470,   517,   556,   558,
-     562,   576,   454,   455,   456,   457,   577,   578,   584,   587,
-     586,   598,   590,   467,   589,   468,   596,   597,   620,   599,
-     600,   601,   458,   566,   602,   603,   459,   607,   608,   609,
-     621,   624,   623,   627,   629,   554,   630,   460,   461,   626,
-     631,   653,   462,   658,   659,   666,   672,   463,   661,   667,
-     699,   673,   703,   679,   681,   705,   464,   465,   707,   709,
-     722,   466,   617,   453,   469,   359,   474,   334,   635,   642,
-     492,   618,   356,   645,   644,   633,   632,   411,   634,   646,
-     647,   648,   649,   650,   651,   654,   652,   637,   636,   639,
-     638,   655,   715,   656,   668,   669,   405,   670,   641,   385,
-     640,   675,   676,   408,   677,   680,   663,   704,   665,   662,
-     664,   657,   557,   660,   387,   397,   697,   708,   706,   724,
-     488,   628,   718,   723,     0,   481,   147,     0,   146,   223,
-       0,   205,     0,     0,   222,   163,   224,     0,     0,   166,
-     225,   236,   148,     0,   149,   150,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   539,     0,     0,     0,
-       0,     0,     0,     0,     0,   169,     0,     0,   183,     0,
-       0,     0,   170,     0,     0,   184,     0,     0,     0,   188,
+      74,   147,   225,   146,   170,   185,   207,   224,   238,   226,
+     163,   171,   186,   166,   547,   190,   227,   148,    30,   521,
+     149,   150,   490,   490,   132,   368,   369,    22,    23,    69,
+      24,   546,    25,    93,    83,    84,   126,   127,    84,   176,
+     177,   132,    34,   168,   169,   253,   276,    87,    88,    89,
+     254,   277,   133,   134,   135,   243,    93,   280,   201,    93,
+     201,   296,   281,   236,   237,   136,   297,    36,   137,   138,
+     139,   140,   141,   142,    38,   300,    81,   143,   144,   363,
+     301,    82,    83,    84,   145,    40,    85,    86,   201,   222,
+     202,   203,   223,    42,   143,    87,    88,    89,    90,    91,
+      73,    73,    44,    92,    93,   328,   236,   237,    70,   693,
+     329,   694,   695,    46,    71,    72,   276,    84,   176,   177,
+      66,   574,    94,    95,    73,    73,    73,    73,   437,   438,
+      26,    27,    28,    29,    96,   200,   576,    97,    93,   484,
+     280,   577,   585,   585,    98,   578,   610,   586,   587,    99,
+     100,   611,    48,   101,   616,    73,    50,   178,   244,   617,
+     246,   179,   180,   181,   182,   183,   620,   184,   554,   555,
+     245,   621,    73,   200,   481,   482,   483,   484,   485,   486,
+     597,   247,   247,   598,   490,   368,   369,   622,   200,   649,
+     201,   296,   541,   542,   543,   544,   677,   328,   547,    74,
+     599,   311,   680,   600,   300,   201,    73,   202,   203,   684,
+     204,   205,   206,   707,   691,   546,   726,   692,   708,    73,
+     252,   727,   256,   365,   511,   512,   513,   514,   364,   527,
+     528,   529,   530,   531,   532,   366,   719,   312,   367,   720,
+     147,   257,   146,   261,   262,   263,   170,   264,   273,   163,
+     330,   331,   166,   171,   290,   291,   148,    73,   185,   149,
+     150,   315,   319,   320,   321,   186,   225,   207,   190,   323,
+     324,   224,    73,   226,   325,   332,   333,   334,   335,   336,
+     227,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,   338,   339,   340,   341,   342,   343,   344,   345,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   357,
+     356,   358,   360,   361,   375,   376,   377,   378,   379,   380,
+     381,   384,   382,   385,   386,   383,   387,   389,   390,   392,
+     393,   394,   395,   396,   397,   398,   399,   400,   402,   403,
+     404,   419,   420,   405,   406,   407,   408,   410,   411,   413,
+     414,   416,   422,   443,   444,   417,   418,   421,   423,   424,
+     425,   426,   427,   428,   494,   494,   429,   430,   435,   487,
+     487,   431,   432,   433,   434,   442,   441,   445,   545,   446,
+     452,   562,   582,   365,   447,   448,   449,   450,   364,   451,
+     453,   454,    24,   457,   499,   366,   458,   503,   367,   507,
+     460,   461,   462,   463,   523,   564,   568,   583,   584,   590,
+     593,   589,   455,   464,   592,   595,   596,   602,   603,   627,
+     473,   604,   474,   605,   606,   465,   607,   572,   466,   608,
+     609,   613,   614,   615,   560,   630,   626,   629,   633,   635,
+     636,   632,   637,   467,   468,   469,   659,   664,   665,   470,
+     476,   471,   667,   672,   687,   673,   678,   705,   459,   679,
+     472,   624,   685,   709,   711,   715,   713,   728,   623,   475,
+     337,   359,   480,   641,   498,   648,   362,   651,   639,   638,
+     674,   640,   650,   658,   652,   415,   643,   653,   654,   655,
+     656,   642,   657,   645,   660,   388,   661,   662,   675,   644,
+     676,   681,   682,   683,   721,   647,   409,   686,   646,   710,
+     669,   412,   668,   670,   671,   401,   563,   714,   663,   391,
+     703,   730,   712,   634,   666,   724,   494,   729,     0,     0,
+       0,   487,   147,     0,   146,   225,     0,   207,     0,     0,
+     224,   163,   226,     0,   166,     0,     0,   238,   148,   227,
+       0,   149,   150,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   545,     0,     0,     0,     0,     0,     0,     0,
+       0,   170,     0,     0,   185,     0,     0,     0,   171,     0,
+       0,   186,     0,     0,   190,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   691,     0,     0,     0,     0,
-     690,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   691,     0,     0,     0,     0,   690
+       0,   697,     0,     0,     0,     0,   696,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   697,     0,
+       0,     0,     0,   696
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
       54,    57,    61,    57,    58,    59,    60,    61,    62,    61,
-      57,    58,    59,    61,    57,    12,    59,    57,   428,    57,
-      57,   419,   420,   425,   280,   280,     7,     5,    10,     7,
-     428,     9,     3,    39,    23,     6,    17,    18,    27,     0,
-      23,     7,     7,    49,    18,    19,    20,    69,    70,    30,
-      31,    32,    69,    70,    35,    36,    37,    40,    39,    42,
-      43,     7,    45,    46,    47,    39,    40,    48,     7,    50,
-      51,    52,    53,    54,    55,     3,    11,   106,    59,    60,
-       8,    16,    17,    18,    58,    66,    21,    22,    40,   106,
-      79,    80,    81,    82,    59,    30,    31,    32,    33,    34,
-     106,     7,     3,    38,    39,     6,    88,    40,    41,    42,
-      43,    44,    94,    95,    18,    19,    20,   106,    12,    13,
-       7,    56,    57,   106,   106,   106,    14,    15,   106,   107,
-     108,   109,   106,    68,     3,    39,    71,     3,    90,     8,
-      92,    93,     8,    78,     3,     3,     3,     6,    83,    84,
-       8,     8,    87,    57,   106,    85,    86,    61,    62,    63,
-      64,    65,     7,    67,    72,    73,    74,    75,    76,    77,
-       3,   106,     3,   106,     3,     8,     6,     8,     3,     8,
-       7,   579,   438,   438,    23,    24,    25,    26,    27,    28,
-      29,   593,     3,     3,     3,     6,     4,   251,     8,     8,
-     610,    40,   106,     3,     3,     3,     3,     8,     8,     8,
-       8,     8,   610,     3,     3,     3,     7,     3,     8,     8,
-       8,   280,     8,     3,     3,     7,   280,     3,     8,     8,
-       4,     4,     4,   280,     4,     4,     4,   280,   294,     4,
-     294,     4,     4,   297,     4,   242,   243,   294,     3,     8,
-     297,   294,     4,     4,   294,   309,   294,   294,    61,    62,
-      63,    64,   309,   322,   318,     8,   309,   106,   322,     3,
-     322,     4,     8,     3,   322,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,     4,   106,     4,     4,     4,
-       4,   109,   109,     4,     4,     4,     4,     4,     4,     4,
-     107,   107,   107,   107,     4,     4,     4,     4,     4,     4,
-       4,   107,     4,     4,     4,     4,     4,     4,     4,     4,
-     107,     4,     4,     4,   109,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   332,   333,     4,     4,     4,
-     107,     4,     4,     4,     4,   109,     4,     4,   109,     4,
-     106,     7,   106,     7,     7,     7,     7,     5,     5,     5,
-     419,   420,     5,     5,     5,   419,   420,     7,     7,     7,
-       7,     5,     8,     3,   428,   106,     5,   106,   106,   438,
-     106,   106,   106,   106,   438,     5,     7,     6,   106,     7,
-       7,   438,     7,   106,   106,   438,    89,     7,     4,     7,
-       7,     4,   106,   106,   106,   106,     4,     4,     3,     3,
-       6,     4,     3,   410,     6,   412,     6,     3,     6,     4,
-       4,     4,   106,    67,     4,     4,   106,     4,     4,     4,
-       3,     3,     6,     4,     4,   430,     4,   106,   106,     8,
-       4,     4,   106,     4,     4,     4,     8,   106,     6,     5,
-       4,     8,     4,     8,     7,     4,   106,   106,     5,     7,
-       4,   106,   555,   390,   413,   278,   417,   251,   579,   591,
-     420,   106,   274,   597,   595,   107,   109,   325,   109,   107,
-     107,   107,   107,   107,   107,   107,   604,   584,   582,   587,
-     585,   107,    91,   107,   106,   106,   318,   106,   590,   294,
-     588,   106,   106,   322,   106,   106,   621,   107,   624,   619,
-     622,   610,   438,   614,   297,   309,   685,   106,   701,   106,
-     579,   570,   713,   720,    -1,   579,   582,    -1,   582,   588,
-      -1,   585,    -1,    -1,   588,   582,   588,    -1,    -1,   582,
-     588,   595,   582,    -1,   582,   582,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   610,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   619,    -1,    -1,   622,    -1,
-      -1,    -1,   619,    -1,    -1,   622,    -1,    -1,    -1,   622,
+      57,    58,    59,    57,   432,    59,    61,    57,    12,   429,
+      57,    57,   423,   424,     7,   282,   282,     0,     5,    10,
+       7,   432,     9,    39,    17,    18,    12,    13,    18,    19,
+      20,     7,     7,    49,    50,     3,     3,    30,    31,    32,
+       8,     8,    35,    36,    37,     6,    39,     3,    40,    39,
+      40,     3,     8,    70,    71,    48,     8,     7,    51,    52,
+      53,    54,    55,    56,     7,     3,    11,    60,    61,    59,
+       8,    16,    17,    18,    67,     7,    21,    22,    40,    41,
+      42,    43,    44,     7,    60,    30,    31,    32,    33,    34,
+     107,   107,     7,    38,    39,     3,    70,    71,    89,    91,
+       8,    93,    94,     7,    95,    96,     3,    18,    19,    20,
+     107,     8,    57,    58,   107,   107,   107,   107,    14,    15,
+     107,   108,   109,   110,    69,    23,     3,    72,    39,    27,
+       3,     8,     3,     3,    79,     8,     3,     8,     8,    84,
+      85,     8,     7,    88,     3,   107,     7,    58,     3,     8,
+       8,    62,    63,    64,    65,    66,     3,    68,    86,    87,
+       4,     8,   107,    23,    24,    25,    26,    27,    28,    29,
+       3,     3,     3,     6,   585,   442,   442,     8,    23,   599,
+      40,     3,    80,    81,    82,    83,     8,     3,   616,   253,
+       3,     8,     8,     6,     3,    40,   107,    42,    43,     8,
+      45,    46,    47,     3,     3,   616,     3,     6,     8,   107,
+       4,     8,     4,   282,    62,    63,    64,    65,   282,    73,
+      74,    75,    76,    77,    78,   282,     3,     3,   282,     6,
+     296,     4,   296,     4,     4,     4,   300,     4,     4,   296,
+     244,   245,   296,   300,     4,     4,   296,   107,   312,   296,
+     296,     4,     4,     8,     3,   312,   325,   321,   312,     4,
+       8,   325,   107,   325,     3,   107,     4,     4,     4,     4,
+     325,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,     4,   110,   110,     4,     4,     4,   108,   108,   108,
+     108,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+     108,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,   108,     4,     4,   110,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
+     108,   335,   336,     4,     4,     4,   110,     4,   110,     4,
+       4,     4,   107,   107,   107,     7,     7,     7,     7,     7,
+       5,     5,     5,     5,   423,   424,     5,     5,     5,   423,
+     424,     7,     7,     7,     7,     3,     8,   107,   432,     5,
+       5,     4,     4,   442,   107,   107,   107,   107,   442,   107,
+       7,   107,     7,   107,     7,   442,   107,     7,   442,     7,
+     107,   107,   107,   107,     7,     7,     7,     4,     4,     3,
+       3,     6,   390,   107,     6,     6,     3,     6,     3,     3,
+     414,     4,   416,     4,     4,   107,     4,    68,   107,     4,
+       4,     4,     4,     4,   434,     3,     6,     6,     4,     4,
+       4,     8,     4,   107,   107,   107,     4,     4,     4,   107,
+      90,   107,     6,     4,     7,     5,     8,     4,   394,     8,
+     107,   107,     8,     4,     4,     7,     5,     4,   561,   417,
+     253,   276,   421,   585,   424,   597,   280,   603,   108,   110,
+     107,   110,   601,   610,   108,   328,   590,   108,   108,   108,
+     108,   588,   108,   593,   108,   296,   108,   108,   107,   591,
+     107,   107,   107,   107,    92,   596,   321,   107,   594,   108,
+     627,   325,   625,   628,   630,   312,   442,   107,   616,   300,
+     691,   107,   707,   576,   620,   719,   585,   726,    -1,    -1,
+      -1,   585,   588,    -1,   588,   594,    -1,   591,    -1,    -1,
+     594,   588,   594,    -1,   588,    -1,    -1,   601,   588,   594,
+      -1,   588,   588,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   616,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   625,    -1,    -1,   628,    -1,    -1,    -1,   625,    -1,
+      -1,   628,    -1,    -1,   628,    -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,    -1,    -1,    -1,    -1,   684,    -1,    -1,    -1,    -1,
-     684,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   701,    -1,    -1,    -1,    -1,   701
+      -1,   690,    -1,    -1,    -1,    -1,   690,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   707,    -1,
+      -1,    -1,    -1,   707
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
-       0,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,     0,     5,     7,     9,   106,   107,   108,   109,
-     122,   123,   124,   128,     7,   135,     7,   141,     7,   155,
-       7,   219,     7,   287,     7,   299,     7,   247,     7,   270,
-       7,   195,   129,   125,   136,   142,   156,   220,   288,   300,
-     248,   271,   196,   122,   132,   133,   106,   126,   127,    10,
-      88,    94,    95,   106,   134,   137,   138,   139,   358,   360,
-     362,    11,    16,    17,    18,    21,    22,    30,    31,    32,
-      33,    34,    38,    39,    56,    57,    68,    71,    78,    83,
-      84,    87,   134,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   162,   164,   182,   189,   203,   213,   241,   264,
-     304,   328,   338,   347,   348,   356,    12,    13,   153,   154,
-     157,   159,     7,    35,    36,    37,    48,    50,    51,    52,
-      53,    54,    55,    59,    60,    66,   134,   145,   146,   147,
-     150,   221,   222,   223,   225,   227,   229,   231,   233,   235,
-     237,   239,   240,   264,   281,   293,   304,   324,    49,   134,
-     264,   289,   290,   291,    19,    20,    57,    61,    62,    63,
-      64,    65,    67,   134,   264,   301,   302,   303,   304,   306,
-     308,   310,   312,   314,   316,   318,   320,   322,    23,    40,
-      42,    43,    45,    46,    47,   134,   168,   176,   249,   250,
-     251,   252,   253,   254,   255,   256,   258,   260,   261,   263,
-      41,    44,   134,   176,   253,   258,   272,   273,   274,   275,
-     276,   278,   279,   280,    69,    70,   134,   197,   198,   199,
-     201,     6,     3,     4,     8,     3,   140,   363,   359,   361,
-       4,     3,     8,   152,     4,     4,   305,   163,   165,     4,
-       4,     4,     4,   214,   242,   265,   183,   329,   190,   204,
-     339,     4,   349,   357,     3,     8,   158,   160,     3,     8,
-     331,   226,   228,   230,   282,   224,   232,   234,     4,     4,
-     238,   236,   294,   325,     3,     8,   292,     3,     8,   307,
-     309,   323,   313,   315,   319,   317,   321,   311,     8,     3,
-     169,   177,     4,   259,   257,   262,     4,     8,     3,   277,
-       4,     8,     3,   200,   202,     3,     8,   122,   122,   106,
-       4,     4,     4,     4,   138,     4,   109,   109,     4,     4,
-       4,   107,   107,   107,   107,     4,     4,     4,     4,     4,
-       4,     4,     4,   107,     4,     4,   144,     4,     4,   154,
-      58,   134,   176,   264,   304,   306,   308,   332,   333,   334,
-     335,   336,     4,     4,     4,     4,     4,     4,     4,   107,
-     109,     4,     4,     4,     4,   222,     4,   290,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,   303,     4,     4,
-     107,     4,     4,     4,   109,   251,     4,   109,   274,     4,
-       4,   198,     4,     7,     7,   122,   122,     7,   106,     7,
-       7,     5,     5,     5,     5,     5,     5,     7,     7,     7,
-       7,     5,   130,    14,    15,   161,   337,     8,     3,   106,
-     106,   106,     5,   106,   106,   106,   106,   106,     5,     7,
-     106,   106,   106,   130,   106,   106,   106,   106,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   122,   122,   143,
-      89,   364,   365,   366,   153,    24,    25,    26,    27,    28,
-      29,   134,   166,   167,   168,   170,   172,   174,   176,   178,
-     179,   180,   166,     7,   215,   216,   217,     7,   243,   244,
-     245,     7,   266,   267,   268,    61,    62,    63,    64,   181,
-     184,   185,   186,   187,   188,   235,   330,     7,   191,   192,
-     193,    72,    73,    74,    75,    76,    77,   205,   206,   207,
-     208,   209,   210,   211,   212,    79,    80,    81,    82,   134,
-     168,   178,   340,   341,   342,   343,   345,   346,    85,    86,
-     350,   351,   352,   354,   127,   131,     4,   334,     7,   283,
-     284,   285,     7,   295,   296,   297,    67,   326,     8,   367,
-       3,     8,     8,   171,   173,   175,     4,     4,     4,     3,
-       8,     8,   218,     6,     3,   246,     6,     3,   269,     6,
-       3,     3,     6,     3,     6,   194,     6,     3,     4,     4,
-       4,     4,     4,     4,     3,     8,   344,     4,     4,     4,
-       3,     8,   353,   355,     3,     8,     8,   132,   106,   286,
-       6,     3,   298,     6,     3,   327,     8,     4,   365,     4,
-       4,     4,   109,   107,   109,   167,   221,   217,   249,   245,
-     272,   268,   185,   235,   197,   193,   107,   107,   107,   107,
-     107,   107,   206,     4,   107,   107,   107,   341,     4,     4,
-     351,     6,   289,   285,   301,   297,     4,     5,   106,   106,
-     106,     8,     8,     8,     8,   106,   106,   106,     8,     8,
-     106,     7,   368,   369,   370,     3,     6,    90,    92,    93,
-     134,   176,   371,   372,   373,   374,   376,   369,   377,     4,
-     375,     3,     8,     4,   107,     4,   372,     5,   106,     7,
-     378,   379,   380,     3,     6,    91,   381,   382,   379,   383,
-       3,     8,     4,   382,   106
+       0,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,     0,     5,     7,     9,   107,   108,   109,   110,
+     123,   124,   125,   130,     7,   137,     7,   143,     7,   157,
+       7,   221,     7,   289,     7,   303,     7,   249,     7,   272,
+       7,   197,   131,   126,   138,   144,   158,   222,   290,   304,
+     250,   273,   198,   123,   134,   135,   107,   128,   129,    10,
+      89,    95,    96,   107,   136,   139,   140,   141,   362,   364,
+     366,    11,    16,    17,    18,    21,    22,    30,    31,    32,
+      33,    34,    38,    39,    57,    58,    69,    72,    79,    84,
+      85,    88,   136,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   164,   166,   184,   191,   205,   215,   243,   266,
+     308,   332,   342,   351,   352,   360,    12,    13,   155,   156,
+     159,   161,     7,    35,    36,    37,    48,    51,    52,    53,
+      54,    55,    56,    60,    61,    67,   136,   147,   148,   149,
+     152,   223,   224,   225,   227,   229,   231,   233,   235,   237,
+     239,   241,   242,   266,   283,   297,   308,   328,    49,    50,
+     136,   266,   291,   292,   293,   295,    19,    20,    58,    62,
+      63,    64,    65,    66,    68,   136,   266,   305,   306,   307,
+     308,   310,   312,   314,   316,   318,   320,   322,   324,   326,
+      23,    40,    42,    43,    45,    46,    47,   136,   170,   178,
+     251,   252,   253,   254,   255,   256,   257,   258,   260,   262,
+     263,   265,    41,    44,   136,   178,   255,   260,   274,   275,
+     276,   277,   278,   280,   281,   282,    70,    71,   136,   199,
+     200,   201,   203,     6,     3,     4,     8,     3,   142,   367,
+     363,   365,     4,     3,     8,   154,     4,     4,   309,   165,
+     167,     4,     4,     4,     4,   216,   244,   267,   185,   333,
+     192,   206,   343,     4,   353,   361,     3,     8,   160,   162,
+       3,     8,   335,   228,   230,   232,   284,   226,   234,   236,
+       4,     4,   240,   238,   298,   329,     3,     8,   294,   296,
+       3,     8,   311,   313,   327,   317,   319,   323,   321,   325,
+     315,     8,     3,   171,   179,     4,   261,   259,   264,     4,
+       8,     3,   279,     4,     8,     3,   202,   204,     3,     8,
+     123,   123,   107,     4,     4,     4,     4,   140,     4,   110,
+     110,     4,     4,     4,   108,   108,   108,   108,     4,     4,
+       4,     4,     4,     4,     4,     4,   108,     4,     4,   146,
+       4,     4,   156,    59,   136,   178,   266,   308,   310,   312,
+     336,   337,   338,   339,   340,     4,     4,     4,     4,     4,
+       4,     4,   108,   110,     4,     4,     4,     4,   224,     4,
+       4,   292,     4,     4,     4,     4,     4,     4,     4,     4,
+       4,   307,     4,     4,   108,     4,     4,     4,   110,   253,
+       4,   110,   276,     4,     4,   200,     4,     7,     7,   123,
+     123,     7,   107,     7,     7,     5,     5,     5,     5,     5,
+       5,     7,     7,     7,     7,     5,   132,    14,    15,   163,
+     341,     8,     3,   107,   107,   107,     5,   107,   107,   107,
+     107,   107,     5,     7,   107,   125,   127,   107,   107,   132,
+     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
+     107,   107,   107,   123,   123,   145,    90,   368,   369,   370,
+     155,    24,    25,    26,    27,    28,    29,   136,   168,   169,
+     170,   172,   174,   176,   178,   180,   181,   182,   168,     7,
+     217,   218,   219,     7,   245,   246,   247,     7,   268,   269,
+     270,    62,    63,    64,    65,   183,   186,   187,   188,   189,
+     190,   237,   334,     7,   193,   194,   195,    73,    74,    75,
+      76,    77,    78,   207,   208,   209,   210,   211,   212,   213,
+     214,    80,    81,    82,    83,   136,   170,   180,   344,   345,
+     346,   347,   349,   350,    86,    87,   354,   355,   356,   358,
+     129,   133,     4,   338,     7,   285,   286,   287,     7,   299,
+     300,   301,    68,   330,     8,   371,     3,     8,     8,   173,
+     175,   177,     4,     4,     4,     3,     8,     8,   220,     6,
+       3,   248,     6,     3,   271,     6,     3,     3,     6,     3,
+       6,   196,     6,     3,     4,     4,     4,     4,     4,     4,
+       3,     8,   348,     4,     4,     4,     3,     8,   357,   359,
+       3,     8,     8,   134,   107,   288,     6,     3,   302,     6,
+       3,   331,     8,     4,   369,     4,     4,     4,   110,   108,
+     110,   169,   223,   219,   251,   247,   274,   270,   187,   237,
+     199,   195,   108,   108,   108,   108,   108,   108,   208,     4,
+     108,   108,   108,   345,     4,     4,   355,     6,   291,   287,
+     305,   301,     4,     5,   107,   107,   107,     8,     8,     8,
+       8,   107,   107,   107,     8,     8,   107,     7,   372,   373,
+     374,     3,     6,    91,    93,    94,   136,   178,   375,   376,
+     377,   378,   380,   373,   381,     4,   379,     3,     8,     4,
+     108,     4,   376,     5,   107,     7,   382,   383,   384,     3,
+       6,    92,   385,   386,   383,   387,     3,     8,     4,   386,
+     107
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,   110,   112,   111,   113,   111,   114,   111,   115,   111,
-     116,   111,   117,   111,   118,   111,   119,   111,   120,   111,
-     121,   111,   122,   122,   122,   122,   122,   122,   122,   123,
-     125,   124,   126,   126,   127,   127,   129,   128,   131,   130,
-     132,   132,   133,   133,   134,   136,   135,   137,   137,   138,
-     138,   138,   138,   138,   140,   139,   142,   141,   143,   143,
-     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
-     144,   144,   144,   144,   144,   144,   144,   144,   144,   144,
-     144,   144,   145,   146,   147,   148,   149,   150,   152,   151,
-     153,   153,   154,   154,   156,   155,   158,   157,   160,   159,
-     161,   161,   163,   162,   165,   164,   166,   166,   167,   167,
-     167,   167,   167,   167,   167,   167,   167,   169,   168,   171,
-     170,   173,   172,   175,   174,   177,   176,   178,   179,   180,
-     181,   183,   182,   184,   184,   185,   185,   185,   185,   186,
-     187,   188,   190,   189,   191,   191,   192,   192,   194,   193,
-     196,   195,   197,   197,   197,   198,   198,   200,   199,   202,
-     201,   204,   203,   205,   205,   206,   206,   206,   206,   206,
-     206,   207,   208,   209,   210,   211,   212,   214,   213,   215,
-     215,   216,   216,   218,   217,   220,   219,   221,   221,   222,
-     222,   222,   222,   222,   222,   222,   222,   222,   222,   222,
-     222,   222,   222,   222,   222,   222,   222,   222,   222,   224,
-     223,   226,   225,   228,   227,   230,   229,   232,   231,   234,
-     233,   236,   235,   238,   237,   239,   240,   242,   241,   243,
-     243,   244,   244,   246,   245,   248,   247,   249,   249,   250,
-     250,   251,   251,   251,   251,   251,   251,   251,   251,   252,
-     253,   254,   255,   257,   256,   259,   258,   260,   262,   261,
-     263,   265,   264,   266,   266,   267,   267,   269,   268,   271,
-     270,   272,   272,   273,   273,   274,   274,   274,   274,   274,
-     274,   275,   277,   276,   278,   279,   280,   282,   281,   283,
-     283,   284,   284,   286,   285,   288,   287,   289,   289,   290,
-     290,   290,   292,   291,   294,   293,   295,   295,   296,   296,
-     298,   297,   300,   299,   301,   301,   302,   302,   303,   303,
-     303,   303,   303,   303,   303,   303,   303,   303,   303,   303,
-     305,   304,   307,   306,   309,   308,   311,   310,   313,   312,
+       0,   111,   113,   112,   114,   112,   115,   112,   116,   112,
+     117,   112,   118,   112,   119,   112,   120,   112,   121,   112,
+     122,   112,   123,   123,   123,   123,   123,   123,   123,   124,
+     126,   125,   127,   128,   128,   129,   129,   131,   130,   133,
+     132,   134,   134,   135,   135,   136,   138,   137,   139,   139,
+     140,   140,   140,   140,   140,   142,   141,   144,   143,   145,
+     145,   146,   146,   146,   146,   146,   146,   146,   146,   146,
+     146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
+     146,   146,   146,   147,   148,   149,   150,   151,   152,   154,
+     153,   155,   155,   156,   156,   158,   157,   160,   159,   162,
+     161,   163,   163,   165,   164,   167,   166,   168,   168,   169,
+     169,   169,   169,   169,   169,   169,   169,   169,   171,   170,
+     173,   172,   175,   174,   177,   176,   179,   178,   180,   181,
+     182,   183,   185,   184,   186,   186,   187,   187,   187,   187,
+     188,   189,   190,   192,   191,   193,   193,   194,   194,   196,
+     195,   198,   197,   199,   199,   199,   200,   200,   202,   201,
+     204,   203,   206,   205,   207,   207,   208,   208,   208,   208,
+     208,   208,   209,   210,   211,   212,   213,   214,   216,   215,
+     217,   217,   218,   218,   220,   219,   222,   221,   223,   223,
+     224,   224,   224,   224,   224,   224,   224,   224,   224,   224,
+     224,   224,   224,   224,   224,   224,   224,   224,   224,   224,
+     226,   225,   228,   227,   230,   229,   232,   231,   234,   233,
+     236,   235,   238,   237,   240,   239,   241,   242,   244,   243,
+     245,   245,   246,   246,   248,   247,   250,   249,   251,   251,
+     252,   252,   253,   253,   253,   253,   253,   253,   253,   253,
+     254,   255,   256,   257,   259,   258,   261,   260,   262,   264,
+     263,   265,   267,   266,   268,   268,   269,   269,   271,   270,
+     273,   272,   274,   274,   275,   275,   276,   276,   276,   276,
+     276,   276,   277,   279,   278,   280,   281,   282,   284,   283,
+     285,   285,   286,   286,   288,   287,   290,   289,   291,   291,
+     292,   292,   292,   292,   294,   293,   296,   295,   298,   297,
+     299,   299,   300,   300,   302,   301,   304,   303,   305,   305,
+     306,   306,   307,   307,   307,   307,   307,   307,   307,   307,
+     307,   307,   307,   307,   309,   308,   311,   310,   313,   312,
      315,   314,   317,   316,   319,   318,   321,   320,   323,   322,
-     325,   324,   327,   326,   329,   328,   330,   330,   331,   235,
-     332,   332,   333,   333,   334,   334,   334,   334,   334,   334,
-     334,   335,   337,   336,   339,   338,   340,   340,   341,   341,
-     341,   341,   341,   341,   341,   342,   344,   343,   345,   346,
-     347,   349,   348,   350,   350,   351,   351,   353,   352,   355,
-     354,   357,   356,   359,   358,   361,   360,   363,   362,   364,
-     364,   365,   367,   366,   368,   368,   370,   369,   371,   371,
-     372,   372,   372,   372,   372,   373,   375,   374,   377,   376,
-     378,   378,   380,   379,   381,   381,   383,   382
+     325,   324,   327,   326,   329,   328,   331,   330,   333,   332,
+     334,   334,   335,   237,   336,   336,   337,   337,   338,   338,
+     338,   338,   338,   338,   338,   339,   341,   340,   343,   342,
+     344,   344,   345,   345,   345,   345,   345,   345,   345,   346,
+     348,   347,   349,   350,   351,   353,   352,   354,   354,   355,
+     355,   357,   356,   359,   358,   361,   360,   363,   362,   365,
+     364,   367,   366,   368,   368,   369,   371,   370,   372,   372,
+     374,   373,   375,   375,   376,   376,   376,   376,   376,   377,
+     379,   378,   381,   380,   382,   382,   384,   383,   385,   385,
+     387,   386
   };
 
   const unsigned char
@@ -3350,47 +3389,48 @@ namespace isc { namespace dhcp {
        0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     0,     1,     3,     5,     0,     4,     0,     4,
-       0,     1,     1,     3,     2,     0,     4,     1,     3,     1,
-       1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     1,     0,     1,     3,     5,     0,     4,     0,
+       4,     0,     1,     1,     3,     2,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     0,     6,     0,     4,     1,
+       3,     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,     0,
+       6,     1,     3,     1,     1,     0,     4,     0,     4,     0,
+       4,     1,     1,     0,     6,     0,     6,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     3,     3,
+       3,     1,     0,     6,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     0,     6,     0,     1,     1,     3,     0,
+       4,     0,     4,     1,     3,     1,     1,     1,     0,     4,
+       0,     4,     0,     6,     1,     3,     1,     1,     1,     1,
        1,     1,     3,     3,     3,     3,     3,     3,     0,     6,
-       1,     3,     1,     1,     0,     4,     0,     4,     0,     4,
-       1,     1,     0,     6,     0,     6,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     3,     3,     3,
-       1,     0,     6,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     0,     6,     0,     1,     1,     3,     0,     4,
-       0,     4,     1,     3,     1,     1,     1,     0,     4,     0,
-       4,     0,     6,     1,     3,     1,     1,     1,     1,     1,
-       1,     3,     3,     3,     3,     3,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
+       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     3,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     0,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     1,     1,     0,     4,     0,     4,     1,     0,     4,
-       3,     0,     6,     0,     1,     1,     3,     0,     4,     0,
-       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     1,     1,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     0,     4,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     0,     1,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     3,     3,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     1,     1,     0,     4,     0,     4,     1,     0,
+       4,     3,     0,     6,     0,     1,     1,     3,     0,     4,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     1,     1,     3,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     6,     0,     4,     0,     6,     1,     3,     0,     4,
-       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     0,     6,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     3,     0,     4,     3,     3,
-       3,     0,     6,     1,     3,     1,     1,     0,     4,     0,
-       4,     0,     6,     0,     4,     0,     4,     0,     6,     1,
-       3,     1,     0,     6,     1,     3,     0,     4,     1,     3,
-       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
-       1,     3,     0,     4,     1,     3,     0,     4
+       0,     4,     0,     4,     0,     6,     0,     4,     0,     6,
+       1,     3,     0,     4,     0,     1,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     0,     6,
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     3,
+       0,     4,     3,     3,     3,     0,     6,     1,     3,     1,
+       1,     0,     4,     0,     4,     0,     6,     0,     4,     0,
+       4,     0,     6,     1,     3,     1,     0,     6,     1,     3,
+       0,     4,     1,     3,     1,     1,     1,     1,     1,     3,
+       0,     4,     0,     6,     1,     3,     0,     4,     1,     3,
+       0,     4
   };
 
 
@@ -3412,32 +3452,33 @@ namespace isc { namespace dhcp {
   "\"4o6-interface\"", "\"4o6-interface-id\"", "\"4o6-subnet\"",
   "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
   "\"space\"", "\"csv-format\"", "\"record-types\"", "\"encapsulate\"",
-  "\"array\"", "\"pools\"", "\"pool\"", "\"subnet\"", "\"interface\"",
-  "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
-  "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"",
-  "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"",
-  "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"relay\"",
-  "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
-  "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"",
-  "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"",
-  "\"max-reclaim-leases\"", "\"max-reclaim-time\"",
-  "\"unwarned-reclaim-cycles\"", "\"server-id\"", "\"identifier\"",
-  "\"htype\"", "\"time\"", "\"enterprise-id\"", "\"dhcp4o6-port\"",
-  "\"control-socket\"", "\"socket-type\"", "\"socket-name\"",
-  "\"dhcp-ddns\"", "\"Logging\"", "\"loggers\"", "\"output_options\"",
-  "\"output\"", "\"debuglevel\"", "\"severity\"", "\"Dhcp6\"",
-  "\"DhcpDdns\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", "SUB_DHCP4",
-  "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION",
-  "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY",
-  "\"constant string\"", "\"integer\"", "\"floating point\"",
-  "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5",
-  "$@6", "$@7", "$@8", "$@9", "$@10", "value", "sub_json", "map2", "$@11",
-  "map_content", "not_empty_map", "list_generic", "$@12", "list2", "$@13",
-  "list_content", "not_empty_list", "unknown_map_entry", "syntax_map",
-  "$@14", "global_objects", "global_object", "dhcp4_object", "$@15",
-  "sub_dhcp4", "$@16", "global_params", "global_param", "valid_lifetime",
-  "renew_timer", "rebind_timer", "decline_probation_period",
-  "echo_client_id", "match_client_id", "interfaces_config", "$@17",
+  "\"array\"", "\"pools\"", "\"pool\"", "\"user-context\"", "\"subnet\"",
+  "\"interface\"", "\"interface-id\"", "\"id\"", "\"rapid-commit\"",
+  "\"reservation-mode\"", "\"host-reservation-identifiers\"",
+  "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"",
+  "\"duid\"", "\"hw-address\"", "\"circuit-id\"", "\"client-id\"",
+  "\"hostname\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"",
+  "\"library\"", "\"parameters\"", "\"expired-leases-processing\"",
+  "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"",
+  "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
+  "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"",
+  "\"identifier\"", "\"htype\"", "\"time\"", "\"enterprise-id\"",
+  "\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"",
+  "\"socket-name\"", "\"dhcp-ddns\"", "\"Logging\"", "\"loggers\"",
+  "\"output_options\"", "\"output\"", "\"debuglevel\"", "\"severity\"",
+  "\"Dhcp6\"", "\"DhcpDdns\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4",
+  "SUB_DHCP4", "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4",
+  "SUB_RESERVATION", "SUB_OPTION_DEF", "SUB_OPTION_DATA",
+  "SUB_HOOKS_LIBRARY", "\"constant string\"", "\"integer\"",
+  "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
+  "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "value",
+  "sub_json", "map2", "$@11", "map_value", "map_content", "not_empty_map",
+  "list_generic", "$@12", "list2", "$@13", "list_content",
+  "not_empty_list", "unknown_map_entry", "syntax_map", "$@14",
+  "global_objects", "global_object", "dhcp4_object", "$@15", "sub_dhcp4",
+  "$@16", "global_params", "global_param", "valid_lifetime", "renew_timer",
+  "rebind_timer", "decline_probation_period", "echo_client_id",
+  "match_client_id", "interfaces_config", "$@17",
   "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
   "$@18", "interfaces_list", "$@19", "dhcp_socket_type", "$@20",
   "socket_type", "lease_database", "$@21", "hosts_database", "$@22",
@@ -3473,78 +3514,79 @@ namespace isc { namespace dhcp {
   "option_data_code", "option_data_space", "option_data_csv_format",
   "pools_list", "$@56", "pools_list_content", "not_empty_pools_list",
   "pool_list_entry", "$@57", "sub_pool4", "$@58", "pool_params",
-  "pool_param", "pool_entry", "$@59", "reservations", "$@60",
-  "reservations_list", "not_empty_reservations_list", "reservation",
-  "$@61", "sub_reservation", "$@62", "reservation_params",
-  "not_empty_reservation_params", "reservation_param", "next_server",
-  "$@63", "server_hostname", "$@64", "boot_file_name", "$@65",
-  "ip_address", "$@66", "duid", "$@67", "hw_address", "$@68",
-  "client_id_value", "$@69", "circuit_id_value", "$@70", "hostname",
-  "$@71", "reservation_client_classes", "$@72", "relay", "$@73",
-  "relay_map", "$@74", "client_classes", "$@75", "client_classes_list",
-  "$@76", "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@77",
-  "server_id", "$@78", "server_id_params", "server_id_param", "htype",
-  "identifier", "$@79", "time", "enterprise_id", "dhcp4o6_port",
-  "control_socket", "$@80", "control_socket_params",
-  "control_socket_param", "control_socket_type", "$@81",
-  "control_socket_name", "$@82", "dhcp_ddns", "$@83", "dhcp6_json_object",
-  "$@84", "dhcpddns_json_object", "$@85", "logging_object", "$@86",
-  "logging_params", "logging_param", "loggers", "$@87", "loggers_entries",
-  "logger_entry", "$@88", "logger_params", "logger_param", "debuglevel",
-  "severity", "$@89", "output_options_list", "$@90",
-  "output_options_list_content", "output_entry", "$@91", "output_params",
-  "output_param", "$@92", YY_NULLPTR
+  "pool_param", "pool_entry", "$@59", "user_context", "$@60",
+  "reservations", "$@61", "reservations_list",
+  "not_empty_reservations_list", "reservation", "$@62", "sub_reservation",
+  "$@63", "reservation_params", "not_empty_reservation_params",
+  "reservation_param", "next_server", "$@64", "server_hostname", "$@65",
+  "boot_file_name", "$@66", "ip_address", "$@67", "duid", "$@68",
+  "hw_address", "$@69", "client_id_value", "$@70", "circuit_id_value",
+  "$@71", "hostname", "$@72", "reservation_client_classes", "$@73",
+  "relay", "$@74", "relay_map", "$@75", "client_classes", "$@76",
+  "client_classes_list", "$@77", "client_class_params",
+  "not_empty_client_class_params", "client_class_param",
+  "client_class_name", "client_class_test", "$@78", "server_id", "$@79",
+  "server_id_params", "server_id_param", "htype", "identifier", "$@80",
+  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@81",
+  "control_socket_params", "control_socket_param", "control_socket_type",
+  "$@82", "control_socket_name", "$@83", "dhcp_ddns", "$@84",
+  "dhcp6_json_object", "$@85", "dhcpddns_json_object", "$@86",
+  "logging_object", "$@87", "logging_params", "logging_param", "loggers",
+  "$@88", "loggers_entries", "logger_entry", "$@89", "logger_params",
+  "logger_param", "debuglevel", "severity", "$@90", "output_options_list",
+  "$@91", "output_options_list_content", "output_entry", "$@92",
+  "output_params", "output_param", "$@93", YY_NULLPTR
   };
 
 #if PARSER4_DEBUG
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   207,   207,   207,   208,   208,   209,   209,   210,   210,
-     211,   211,   212,   212,   213,   213,   214,   214,   215,   215,
-     216,   216,   224,   225,   226,   227,   228,   229,   230,   233,
-     238,   238,   250,   251,   254,   258,   265,   265,   273,   273,
-     280,   281,   284,   288,   299,   309,   309,   321,   322,   326,
-     327,   328,   329,   330,   333,   333,   350,   350,   358,   359,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   388,   393,   398,   403,   408,   413,   419,   419,
-     429,   430,   433,   434,   437,   437,   445,   445,   455,   455,
-     462,   463,   466,   466,   476,   476,   486,   487,   490,   491,
-     492,   493,   494,   495,   496,   497,   498,   501,   501,   509,
-     509,   517,   517,   525,   525,   533,   533,   541,   546,   551,
-     556,   561,   561,   571,   572,   575,   576,   577,   578,   581,
-     586,   591,   596,   596,   606,   607,   610,   611,   614,   614,
-     622,   622,   630,   631,   632,   635,   636,   639,   639,   647,
-     647,   655,   655,   665,   666,   669,   670,   671,   672,   673,
-     674,   677,   682,   687,   692,   697,   702,   710,   710,   723,
-     724,   727,   728,   735,   735,   758,   758,   767,   768,   772,
-     773,   774,   775,   776,   777,   778,   779,   780,   781,   782,
-     783,   784,   785,   786,   787,   788,   789,   790,   791,   794,
-     794,   802,   802,   810,   810,   818,   818,   826,   826,   834,
-     834,   842,   842,   850,   850,   858,   863,   872,   872,   884,
-     885,   888,   889,   894,   894,   905,   905,   915,   916,   919,
-     920,   923,   924,   925,   926,   927,   928,   929,   930,   933,
-     935,   940,   942,   944,   944,   952,   952,   960,   962,   962,
-     970,   979,   979,   991,   992,   997,   998,  1003,  1003,  1014,
-    1014,  1025,  1026,  1031,  1032,  1037,  1038,  1039,  1040,  1041,
-    1042,  1045,  1047,  1047,  1055,  1057,  1059,  1067,  1067,  1079,
-    1080,  1083,  1084,  1087,  1087,  1095,  1095,  1103,  1104,  1107,
-    1108,  1109,  1112,  1112,  1123,  1123,  1133,  1134,  1137,  1138,
-    1141,  1141,  1149,  1149,  1157,  1158,  1161,  1162,  1166,  1167,
-    1168,  1169,  1170,  1171,  1172,  1173,  1174,  1175,  1176,  1177,
-    1180,  1180,  1188,  1188,  1196,  1196,  1204,  1204,  1212,  1212,
-    1220,  1220,  1228,  1228,  1236,  1236,  1245,  1245,  1253,  1253,
-    1266,  1266,  1276,  1276,  1287,  1287,  1297,  1298,  1301,  1301,
-    1309,  1310,  1313,  1314,  1317,  1318,  1319,  1320,  1321,  1322,
-    1323,  1326,  1328,  1328,  1339,  1339,  1349,  1350,  1353,  1354,
-    1355,  1356,  1357,  1358,  1359,  1362,  1367,  1367,  1375,  1380,
-    1387,  1394,  1394,  1404,  1405,  1408,  1409,  1412,  1412,  1420,
-    1420,  1430,  1430,  1442,  1442,  1449,  1449,  1461,  1461,  1474,
-    1475,  1479,  1483,  1483,  1495,  1496,  1500,  1500,  1508,  1509,
-    1512,  1513,  1514,  1515,  1516,  1519,  1523,  1523,  1531,  1531,
-    1541,  1542,  1545,  1545,  1553,  1554,  1557,  1557
+       0,   209,   209,   209,   210,   210,   211,   211,   212,   212,
+     213,   213,   214,   214,   215,   215,   216,   216,   217,   217,
+     218,   218,   226,   227,   228,   229,   230,   231,   232,   235,
+     240,   240,   251,   254,   255,   258,   262,   269,   269,   277,
+     277,   284,   285,   288,   292,   303,   313,   313,   325,   326,
+     330,   331,   332,   333,   334,   337,   337,   354,   354,   362,
+     363,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   392,   397,   402,   407,   412,   417,   423,
+     423,   433,   434,   437,   438,   441,   441,   449,   449,   459,
+     459,   466,   467,   470,   470,   480,   480,   490,   491,   494,
+     495,   496,   497,   498,   499,   500,   501,   502,   505,   505,
+     513,   513,   521,   521,   529,   529,   537,   537,   545,   550,
+     555,   560,   565,   565,   575,   576,   579,   580,   581,   582,
+     585,   590,   595,   600,   600,   610,   611,   614,   615,   618,
+     618,   626,   626,   634,   635,   636,   639,   640,   643,   643,
+     651,   651,   659,   659,   669,   670,   673,   674,   675,   676,
+     677,   678,   681,   686,   691,   696,   701,   706,   714,   714,
+     727,   728,   731,   732,   739,   739,   762,   762,   771,   772,
+     776,   777,   778,   779,   780,   781,   782,   783,   784,   785,
+     786,   787,   788,   789,   790,   791,   792,   793,   794,   795,
+     798,   798,   806,   806,   814,   814,   822,   822,   830,   830,
+     838,   838,   846,   846,   854,   854,   862,   867,   876,   876,
+     888,   889,   892,   893,   898,   898,   909,   909,   919,   920,
+     923,   924,   927,   928,   929,   930,   931,   932,   933,   934,
+     937,   939,   944,   946,   948,   948,   956,   956,   964,   966,
+     966,   974,   983,   983,   995,   996,  1001,  1002,  1007,  1007,
+    1018,  1018,  1029,  1030,  1035,  1036,  1041,  1042,  1043,  1044,
+    1045,  1046,  1049,  1051,  1051,  1059,  1061,  1063,  1071,  1071,
+    1083,  1084,  1087,  1088,  1091,  1091,  1099,  1099,  1107,  1108,
+    1111,  1112,  1113,  1114,  1117,  1117,  1125,  1125,  1135,  1135,
+    1145,  1146,  1149,  1150,  1153,  1153,  1161,  1161,  1169,  1170,
+    1173,  1174,  1178,  1179,  1180,  1181,  1182,  1183,  1184,  1185,
+    1186,  1187,  1188,  1189,  1192,  1192,  1200,  1200,  1208,  1208,
+    1216,  1216,  1224,  1224,  1232,  1232,  1240,  1240,  1248,  1248,
+    1257,  1257,  1265,  1265,  1278,  1278,  1288,  1288,  1299,  1299,
+    1309,  1310,  1313,  1313,  1321,  1322,  1325,  1326,  1329,  1330,
+    1331,  1332,  1333,  1334,  1335,  1338,  1340,  1340,  1351,  1351,
+    1361,  1362,  1365,  1366,  1367,  1368,  1369,  1370,  1371,  1374,
+    1379,  1379,  1387,  1392,  1399,  1406,  1406,  1416,  1417,  1420,
+    1421,  1424,  1424,  1432,  1432,  1442,  1442,  1454,  1454,  1461,
+    1461,  1473,  1473,  1486,  1487,  1491,  1495,  1495,  1507,  1508,
+    1512,  1512,  1520,  1521,  1524,  1525,  1526,  1527,  1528,  1531,
+    1535,  1535,  1543,  1543,  1553,  1554,  1557,  1557,  1565,  1566,
+    1569,  1569
   };
 
   // Print the state stack on the debug stream.
@@ -3579,8 +3621,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 3583 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 1565 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 3625 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 1577 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index fd3299cd9486897875053715ef185b4a077b1661..2489608a55c8624a0d1965e1ee8a4b46bc0141b5 100644 (file)
@@ -305,6 +305,7 @@ namespace isc { namespace dhcp {
     union union_type
     {
       // value
+      // map_value
       // socket_type
       char dummy1[sizeof(ElementPtr)];
 
@@ -389,66 +390,67 @@ namespace isc { namespace dhcp {
         TOKEN_ARRAY = 302,
         TOKEN_POOLS = 303,
         TOKEN_POOL = 304,
-        TOKEN_SUBNET = 305,
-        TOKEN_INTERFACE = 306,
-        TOKEN_INTERFACE_ID = 307,
-        TOKEN_ID = 308,
-        TOKEN_RAPID_COMMIT = 309,
-        TOKEN_RESERVATION_MODE = 310,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 311,
-        TOKEN_CLIENT_CLASSES = 312,
-        TOKEN_TEST = 313,
-        TOKEN_CLIENT_CLASS = 314,
-        TOKEN_RESERVATIONS = 315,
-        TOKEN_DUID = 316,
-        TOKEN_HW_ADDRESS = 317,
-        TOKEN_CIRCUIT_ID = 318,
-        TOKEN_CLIENT_ID = 319,
-        TOKEN_HOSTNAME = 320,
-        TOKEN_RELAY = 321,
-        TOKEN_IP_ADDRESS = 322,
-        TOKEN_HOOKS_LIBRARIES = 323,
-        TOKEN_LIBRARY = 324,
-        TOKEN_PARAMETERS = 325,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 326,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 327,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 328,
-        TOKEN_HOLD_RECLAIMED_TIME = 329,
-        TOKEN_MAX_RECLAIM_LEASES = 330,
-        TOKEN_MAX_RECLAIM_TIME = 331,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 332,
-        TOKEN_SERVER_ID = 333,
-        TOKEN_IDENTIFIER = 334,
-        TOKEN_HTYPE = 335,
-        TOKEN_TIME = 336,
-        TOKEN_ENTERPRISE_ID = 337,
-        TOKEN_DHCP4O6_PORT = 338,
-        TOKEN_CONTROL_SOCKET = 339,
-        TOKEN_SOCKET_TYPE = 340,
-        TOKEN_SOCKET_NAME = 341,
-        TOKEN_DHCP_DDNS = 342,
-        TOKEN_LOGGING = 343,
-        TOKEN_LOGGERS = 344,
-        TOKEN_OUTPUT_OPTIONS = 345,
-        TOKEN_OUTPUT = 346,
-        TOKEN_DEBUGLEVEL = 347,
-        TOKEN_SEVERITY = 348,
-        TOKEN_DHCP6 = 349,
-        TOKEN_DHCPDDNS = 350,
-        TOKEN_TOPLEVEL_JSON = 351,
-        TOKEN_TOPLEVEL_DHCP4 = 352,
-        TOKEN_SUB_DHCP4 = 353,
-        TOKEN_SUB_INTERFACES4 = 354,
-        TOKEN_SUB_SUBNET4 = 355,
-        TOKEN_SUB_POOL4 = 356,
-        TOKEN_SUB_RESERVATION = 357,
-        TOKEN_SUB_OPTION_DEF = 358,
-        TOKEN_SUB_OPTION_DATA = 359,
-        TOKEN_SUB_HOOKS_LIBRARY = 360,
-        TOKEN_STRING = 361,
-        TOKEN_INTEGER = 362,
-        TOKEN_FLOAT = 363,
-        TOKEN_BOOLEAN = 364
+        TOKEN_USER_CONTEXT = 305,
+        TOKEN_SUBNET = 306,
+        TOKEN_INTERFACE = 307,
+        TOKEN_INTERFACE_ID = 308,
+        TOKEN_ID = 309,
+        TOKEN_RAPID_COMMIT = 310,
+        TOKEN_RESERVATION_MODE = 311,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 312,
+        TOKEN_CLIENT_CLASSES = 313,
+        TOKEN_TEST = 314,
+        TOKEN_CLIENT_CLASS = 315,
+        TOKEN_RESERVATIONS = 316,
+        TOKEN_DUID = 317,
+        TOKEN_HW_ADDRESS = 318,
+        TOKEN_CIRCUIT_ID = 319,
+        TOKEN_CLIENT_ID = 320,
+        TOKEN_HOSTNAME = 321,
+        TOKEN_RELAY = 322,
+        TOKEN_IP_ADDRESS = 323,
+        TOKEN_HOOKS_LIBRARIES = 324,
+        TOKEN_LIBRARY = 325,
+        TOKEN_PARAMETERS = 326,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 327,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 328,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 329,
+        TOKEN_HOLD_RECLAIMED_TIME = 330,
+        TOKEN_MAX_RECLAIM_LEASES = 331,
+        TOKEN_MAX_RECLAIM_TIME = 332,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 333,
+        TOKEN_SERVER_ID = 334,
+        TOKEN_IDENTIFIER = 335,
+        TOKEN_HTYPE = 336,
+        TOKEN_TIME = 337,
+        TOKEN_ENTERPRISE_ID = 338,
+        TOKEN_DHCP4O6_PORT = 339,
+        TOKEN_CONTROL_SOCKET = 340,
+        TOKEN_SOCKET_TYPE = 341,
+        TOKEN_SOCKET_NAME = 342,
+        TOKEN_DHCP_DDNS = 343,
+        TOKEN_LOGGING = 344,
+        TOKEN_LOGGERS = 345,
+        TOKEN_OUTPUT_OPTIONS = 346,
+        TOKEN_OUTPUT = 347,
+        TOKEN_DEBUGLEVEL = 348,
+        TOKEN_SEVERITY = 349,
+        TOKEN_DHCP6 = 350,
+        TOKEN_DHCPDDNS = 351,
+        TOKEN_TOPLEVEL_JSON = 352,
+        TOKEN_TOPLEVEL_DHCP4 = 353,
+        TOKEN_SUB_DHCP4 = 354,
+        TOKEN_SUB_INTERFACES4 = 355,
+        TOKEN_SUB_SUBNET4 = 356,
+        TOKEN_SUB_POOL4 = 357,
+        TOKEN_SUB_RESERVATION = 358,
+        TOKEN_SUB_OPTION_DEF = 359,
+        TOKEN_SUB_OPTION_DATA = 360,
+        TOKEN_SUB_HOOKS_LIBRARY = 361,
+        TOKEN_STRING = 362,
+        TOKEN_INTEGER = 363,
+        TOKEN_FLOAT = 364,
+        TOKEN_BOOLEAN = 365
       };
     };
 
@@ -755,6 +757,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_POOL (const location_type& l);
 
+    static inline
+    symbol_type
+    make_USER_CONTEXT (const location_type& l);
+
     static inline
     symbol_type
     make_SUBNET (const location_type& l);
@@ -1200,12 +1206,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 647,     ///< Last index in yytable_.
-      yynnts_ = 274,  ///< Number of nonterminal symbols.
+      yylast_ = 653,     ///< Last index in yytable_.
+      yynnts_ = 277,  ///< Number of nonterminal symbols.
       yyfinal_ = 22, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 110  ///< Number of tokens.
+      yyntokens_ = 111  ///< Number of tokens.
     };
 
 
@@ -1258,9 +1264,9 @@ namespace isc { namespace dhcp {
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109
+     105,   106,   107,   108,   109,   110
     };
-    const unsigned int user_token_number_max_ = 364;
+    const unsigned int user_token_number_max_ = 365;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1293,24 +1299,25 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1331,24 +1338,25 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         value.copy< ElementPtr > (v);
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1428,24 +1436,25 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         value.template destroy< ElementPtr > ();
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1472,24 +1481,25 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 122: // value
-      case 161: // socket_type
+      case 123: // value
+      case 127: // map_value
+      case 163: // socket_type
         value.move< ElementPtr > (s.value);
         break;
 
-      case 109: // "boolean"
+      case 110: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 108: // "floating point"
+      case 109: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 107: // "integer"
+      case 108: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 106: // "constant string"
+      case 107: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1558,7 +1568,8 @@ namespace isc { namespace dhcp {
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1851,6 +1862,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_POOL, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_USER_CONTEXT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_SUBNET (const location_type& l)
   {
@@ -2214,7 +2231,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2218 "dhcp4_parser.h" // lalr1.cc:377
+#line 2235 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 899035dd2b3f085d9702c4eef4fc341b2e13969e..b6625176fe62bb01d24c110e582f8dbc9aff2002 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701102225
+// Generated 201701120056
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 02c178140271d2fdc5c319525560f283fec96122..d2eba31629c37708aa2ee5fc148de0bb95f9dbc2 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701102225
+// Generated 201701120056
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index fec618b6b9b773d54021263a85a7dd00d509fcca..0ee3069412706b1dd983e098766f7e18a75e8f6d 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701102225
+// Generated 201701120056
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 145382d4d0e38f9815b5ccaa0808feecd07e36f9..0b38bf7c4b1363e56e7c2e3bef029c85b3ed8220 100644 (file)
@@ -467,8 +467,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
        (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 117
-#define YY_END_OF_BUFFER 118
+#define YY_NUM_RULES 118
+#define YY_END_OF_BUFFER 119
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -476,105 +476,107 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[889] =
+static yyconst flex_int16_t yy_accept[898] =
     {   0,
-      110,  110,    0,    0,    0,    0,    0,    0,    0,    0,
-      118,  116,   10,   11,  116,    1,  110,  107,  110,  110,
-      116,  109,  108,  116,  116,  116,  116,  116,  103,  104,
-      116,  116,  116,  105,  106,    5,    5,    5,  116,  116,
-      116,   10,   11,    0,    0,   99,    0,    0,    0,    0,
+      111,  111,    0,    0,    0,    0,    0,    0,    0,    0,
+      119,  117,   10,   11,  117,    1,  111,  108,  111,  111,
+      117,  110,  109,  117,  117,  117,  117,  117,  104,  105,
+      117,  117,  117,  106,  107,    5,    5,    5,  117,  117,
+      117,   10,   11,    0,    0,  100,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    1,  110,  110,
-        0,  109,  110,    3,    2,    6,    0,  110,    0,    0,
-        0,    0,    0,    0,    4,    0,    0,    9,    0,  100,
-        0,    0,    0,    0,    0,    0,  102,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    1,  111,  111,
+        0,  110,  111,    3,    2,    6,    0,  111,    0,    0,
+        0,    0,    0,    0,    4,    0,    0,    9,    0,  101,
+        0,    0,    0,    0,    0,    0,  103,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         2,    0,    0,    0,    0,    0,    0,    0,    8,    0,
-        0,   79,   80,    0,    0,    0,  101,    0,    0,    0,
+        0,   80,   81,    0,    0,    0,  102,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   45,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   46,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  115,  113,    0,
-      112,  111,    0,    0,    0,   78,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  116,  114,    0,
+      113,  112,    0,    0,    0,   79,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  114,  111,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   48,    0,    0,
+        0,    0,    0,    0,    0,    0,  115,  112,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   49,    0,    0,
 
-       33,    0,    0,    0,    0,    0,   64,    0,    0,    0,
+       33,    0,    0,    0,    0,    0,   65,    0,    0,    0,
         0,    0,    0,    0,   21,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,   32,
         0,    0,    0,    0,    0,    0,   41,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   60,   83,   18,    0,   19,    0,    0,
-        0,   97,   12,    0,    0,   71,    0,    0,    0,    0,
+        0,    0,    0,   61,   84,   18,    0,   19,    0,    0,
+        0,    0,   98,   12,    0,    0,   72,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   82,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   83,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,   34,    0,    0,    0,    0,    0,    0,    0,   72,
-        0,    0,    0,    0,    0,    0,   67,    0,    0,    0,
-        7,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   34,    0,    0,    0,    0,    0,    0,    0,
+       73,    0,    0,    0,    0,    0,    0,   68,    0,    0,
+        0,    0,    7,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   55,    0,    0,    0,    0,    0,    0,   36,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   42,    0,    0,    0,    0,   52,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   56,    0,    0,    0,    0,    0,
+        0,   36,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   43,    0,    0,    0,    0,
+        0,   53,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,   76,   53,    0,    0,    0,    0,    0,
-        0,    0,   22,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   29,    0,
-        0,   98,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   66,    0,
+        0,    0,    0,    0,    0,    0,   77,   54,    0,    0,
+        0,    0,    0,    0,    0,   22,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   20,   35,    0,    0,   63,    0,   17,    0,
-        0,    0,    0,    0,    0,    0,   57,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   96,    0,    0,
+        0,   29,    0,    0,    0,   99,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   67,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   20,   35,    0,    0,
+       64,    0,   17,    0,    0,    0,    0,    0,    0,    0,
+       58,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   97,    0,    0,    0,    0,    0,    0,    0,
 
-       43,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   77,    0,    0,    0,    0,    0,    0,   68,   56,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   65,   81,    0,   14,    0,   73,    0,    0,
-        0,    0,    0,    0,   30,    0,   75,    0,   37,    0,
+        0,    0,    0,    0,    0,   44,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   70,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   49,
-        0,   31,    0,    0,    0,    0,    0,    0,    0,   26,
-
-        0,    0,   95,   94,    0,    0,   59,    0,    0,    0,
-        0,   92,    0,    0,    0,    0,    0,    0,    0,    0,
-       44,    0,   62,    0,   23,    0,    0,    0,    0,   46,
-       27,    0,   69,    0,    0,   61,    0,    0,    0,    0,
-        0,   40,   84,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   78,    0,    0,    0,
+        0,    0,    0,    0,   69,   57,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   66,   82,
+        0,   14,    0,   74,    0,    0,    0,    0,    0,    0,
+       30,    0,   76,    0,   37,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   58,   93,    0,    0,    0,    0,    0,    0,    0,
-       16,    0,   15,    0,    0,   54,    0,    0,    0,    0,
-        0,   25,    0,   38,    0,    0,    0,    0,   74,    0,
+        0,    0,   71,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   50,    0,   31,    0,
+
+        0,    0,    0,    0,    0,    0,   26,    0,    0,   96,
+       95,    0,    0,    0,   60,    0,    0,    0,    0,   93,
+        0,    0,    0,    0,    0,    0,    0,    0,   45,    0,
+       63,    0,   23,    0,    0,    0,    0,   47,   27,    0,
+       70,    0,    0,   62,    0,   42,    0,    0,    0,    0,
+       40,   85,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       59,   94,    0,    0,    0,    0,    0,    0,    0,   16,
+        0,   15,    0,    0,   55,    0,    0,    0,    0,    0,
+       25,    0,   38,    0,    0,    0,    0,   75,    0,    0,
 
-        0,    0,    0,    0,    0,    0,   90,    0,    0,    0,
-       47,    0,    0,    0,    0,    0,    0,    0,   13,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       89,   24,    0,    0,    0,    0,   39,    0,    0,   88,
+        0,    0,    0,    0,    0,   91,    0,    0,    0,   48,
+        0,    0,    0,    0,    0,    0,    0,   13,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   90,
+       24,    0,    0,    0,    0,   39,    0,    0,   89,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   50,    0,    0,    0,    0,    0,   86,
-       91,   28,    0,    0,    0,   85,    0,    0,    0,    0,
-        0,    0,    0,   51,    0,    0,   87,    0
+        0,    0,   51,    0,    0,    0,    0,    0,   87,   92,
+       28,    0,    0,    0,   86,    0,    0,    0,    0,    0,
+        0,    0,   52,    0,    0,   88,    0
+
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -619,213 +621,215 @@ static yyconst YY_CHAR yy_meta[61] =
         5,    3,    5,    5,    3,    3,    3,    3,    3,    3
     } ;
 
-static yyconst flex_uint16_t yy_base[901] =
+static yyconst flex_uint16_t yy_base[910] =
     {   0,
         0,    0,   59,   62,   65,    0,   63,   67,   64,   66,
-     1192, 1193,   83, 1188,  125,    0,  174, 1193,  179,  185,
-       80,  192, 1193, 1170,   87,   79,   37,   66, 1193, 1193,
-       83,  156,  164, 1193, 1193, 1193,  110, 1176, 1140,    0,
-     1168,  118, 1183,  190,  210, 1193, 1142, 1157,  171,  234,
-     1132,  172,  201,  154, 1136,  173,  229,  229, 1145, 1144,
-      163,  244,  191,  249,  232,  187, 1143,    0,  286,  292,
-      303,  309,  313, 1193,    0, 1193,  320,  324,  240,  248,
-      174,  265,  296,  261, 1193, 1140, 1171, 1193,  314, 1193,
-     1122, 1137, 1168,  275, 1131, 1166,    0,  340, 1120, 1126,
-
-      204, 1114, 1115,  306, 1129, 1122,  192,  259, 1111,  299,
-     1106, 1152,  290, 1109, 1150, 1124, 1121, 1121, 1115,  293,
-     1109, 1102, 1101,  306, 1142, 1101, 1102, 1110, 1099,  336,
-      187, 1110, 1111, 1109, 1093, 1097, 1093, 1086, 1101, 1094,
-        0,  317,  340,  335,  331,  341,  361, 1093, 1193,    0,
-     1088, 1193, 1193, 1131, 1094, 1129, 1193,  388, 1098, 1093,
-     1092, 1078, 1119, 1093, 1074, 1081, 1086, 1075, 1085, 1087,
-     1082, 1075, 1076, 1067, 1079, 1072, 1063, 1065, 1078, 1193,
-     1065, 1072, 1075, 1058, 1098, 1057, 1065, 1095, 1094, 1064,
-     1059, 1052, 1065, 1048, 1049, 1046, 1051, 1055, 1051, 1055,
-
-     1049,  322, 1056, 1051, 1050, 1034, 1048, 1042, 1048, 1037,
-     1031, 1043, 1042, 1045, 1029, 1035,  365, 1193, 1193,  366,
-     1193, 1193, 1024,    0,  376, 1193, 1033,  416, 1018, 1027,
-     1068, 1022, 1031, 1065, 1028, 1025, 1026,  382, 1061, 1016,
-     1014, 1010, 1012, 1019, 1050, 1008,  410, 1019, 1019, 1004,
-     1005, 1016, 1014, 1009, 1016, 1011,  998,  998, 1042,  998,
-      992,  998,  988,  994,  998,  390,  354, 1002,  991,  991,
-     1002,  986,  978,  979,  983,  993,  981,  991,  990,  989,
-     1022, 1021, 1020,  974, 1018,  984, 1193, 1193,  983,    0,
-     1015, 1014,  980,  970,  449, 1011,  963, 1193,  966,  965,
-
-     1193,  967,  964,  975,  971,  960, 1193,  956,  957,  967,
-      965,  993,  952,  991, 1193,  950,  964,  988,  992,  958,
-      952,  954,  955,  982,  944,  940,  939,  940,  948, 1193,
-      939,  933,  945,  935,  934,  930, 1193,  975,  929,  922,
-      967,  929,  937,  931,  935,  110,  962,  917,  920,  926,
-      916,  962,  914, 1193, 1193, 1193,  918, 1193,  954,  924,
-        0, 1193, 1193,  915,  920, 1193,  950,  914,  908,  918,
-      917,  903,  916,  938,  899,  901,  911,  911,  898,  908,
-      901,  906,  898,  905, 1193,  892,  901,  905,  889,  900,
-      885,  879,  884,  881,  896,  922,  335,  879,  880,  884,
-
-      876, 1193,  877,  408,  889,  880,  914,  877,  912, 1193,
-      870,  868,  884,  908,  865,  906, 1193,  401,  876,  869,
-     1193,  862,  907,  874,  900,  863,  854,  897,  867,  858,
-      894,  858,  859,  863,  890,  860,  861,  854,  845,  856,
-      859,  854,  849,  854,  851,  854,  849,  882,  881,  835,
-      839,  845, 1193,  834,  842,  842,  828,  873,  838, 1193,
-      831,  824,  826,  816,  820,  861,  818,  816,  825,  815,
-      823,  808,  347, 1193,  859,  825,  819,  856, 1193,  815,
-      808,  823,  818,  807,  817,  803,  804,  817,  800,  840,
-      804,  811,  802,  810,  806,  839,  791,  791,  802,  801,
-
-      788,  786,  787, 1193, 1193,  799,  800,  382,  785,  783,
-      827,  826, 1193,  792,  790,  823,  781,  821,  782,  772,
-      766,  773,  775,  777,  781,  813,  782,  759, 1193,  805,
-      774, 1193,  778,  764,  759,  765,  759,  798,  802,  758,
-      753,  765,  754,  763,  756,  765,  749,  748, 1193,  762,
-      745,  745,  409,  743,  758,  738,  752,  747,  737,  748,
-      735,  735, 1193, 1193,  775,  737, 1193,  737, 1193,  736,
-      738,  731,  730,  739,  729,  771, 1193,  729,  725,  723,
-      733,  720,  733,  764,  763,  719,  721, 1193,  715,  725,
-      753,  712,  726,  725,  716,  723,  703,  720,  750,  749,
-
-     1193,  710,  438,  427,  716,  716,  699,  703,  713,  742,
-      703,  740,  699,  738,  699,  702,  694,  700,  693,  687,
-      689, 1193,  696,  695,  694,  680,  680,  686, 1193, 1193,
-      693,  689,  675,  721,  682,  685,  672,  679,  675,  670,
-      684,  683, 1193, 1193,  679, 1193,  679, 1193,  664,  679,
-      668,  707,  701,  705, 1193,  661, 1193,  665, 1193,  655,
-      656,  666,  653,  660,  697,  423,  696,  695,  662,  655,
-      429,  644,  640,  609,  649, 1193,  609,   82,  172,  266,
-      368,  379,  383,  391,  439,  397,  441,  398,  445, 1193,
-      413, 1193,  412,  427,  470,  471,  427,  473,  440, 1193,
-
-      434,  476, 1193, 1193,  437,  437, 1193,  439,  439,  440,
-      488, 1193,  489,  452,  445,  458,  460,  460,  457,  462,
-     1193,  455, 1193,  464, 1193,  465,  462,  455,  468, 1193,
-     1193,  498, 1193,  471,  462, 1193,  476,  473,  508,  509,
-      472, 1193, 1193,  460,  507,  480,  509,  469,  473,  517,
-      483,  519,  490,  480,  522,  476,  474,  520,  493,  489,
-      528, 1193, 1193,  486,  530,  487,  527,  486,  534,  494,
-     1193,  499, 1193,  492,  505, 1193,  502,  511,  499,  509,
-      503, 1193,  503, 1193,  506,  502,  501,  511, 1193,  545,
-      515,  518,  553,  513,  517,  512,  557,  553,  554,  526,
-
-      518,  524,  522,  526,  565,  520, 1193,  533,  521,  522,
-     1193,  538,  527,  530,  541,  533,  541,  543, 1193,  577,
-      578,  574,  542,  529,  548,  583,  550,  551,  586,  553,
-     1193, 1193,  541,  546,  558,  546, 1193,  546,  548, 1193,
-      552,  557,  554,  557,  560,  553,  595,  554,  561,  557,
-      570,  562,  568,  557,  570,  575,  610,  565,  579,  571,
-      584,  580,  616, 1193,  617,  618,  583,  582,  583, 1193,
-     1193, 1193,  622,  576,  590, 1193,  620,  581,  580,  582,
-      591,  630,  590, 1193,  598,  633, 1193, 1193,  639,  646,
-      653,  660,  667,  674,  678,  683,  685,  687,  689,  691
-
+     1201, 1202,   83, 1197,  125,    0,  174, 1202,  179,  185,
+       80,  192, 1202, 1179,   87,   79,   37,   66, 1202, 1202,
+       83,  156,  164, 1202, 1202, 1202,  110, 1185, 1149,    0,
+     1177,  118, 1192,  190,  210, 1202, 1151, 1166,  171,  234,
+     1141,  172,  201,  154, 1145,  173,  229,  229, 1154, 1153,
+      163,  244,  191,  249,  232,  187, 1152,    0,  286,  292,
+      303,  309,  313, 1202,    0, 1202,  320,  324,  240,  248,
+      174,  265,  296,  261, 1202, 1149, 1180, 1202,  314, 1202,
+     1131, 1146, 1177,  275, 1140, 1175,    0,  340, 1129, 1135,
+
+      204, 1123, 1124,  306, 1138, 1131,  192,  259, 1120,  299,
+     1115, 1161,  290, 1118, 1159, 1133, 1130, 1130, 1124,  293,
+     1118, 1111, 1110,  306, 1151, 1110, 1111, 1119, 1108,  336,
+      187, 1119, 1120, 1118, 1102, 1106, 1102, 1095, 1110, 1103,
+        0,  317,  340,  335,  331,  341,  361, 1102, 1202,    0,
+     1097, 1202, 1202, 1140, 1103, 1138, 1202,  388, 1107, 1102,
+     1101, 1087, 1128, 1102, 1083, 1090, 1095, 1084, 1094, 1096,
+     1091, 1084, 1085, 1076, 1088, 1081, 1072, 1074, 1087, 1202,
+     1074, 1081, 1084, 1067, 1107, 1066, 1074, 1104, 1103, 1073,
+     1068, 1061, 1074, 1057, 1058, 1055, 1060, 1064, 1060, 1064,
+
+     1058,  322, 1065, 1060, 1059, 1043, 1057, 1051, 1057, 1046,
+     1040, 1052, 1051, 1054, 1038, 1044,  365, 1202, 1202,  366,
+     1202, 1202, 1033,    0,  376, 1202, 1042,  416, 1027, 1036,
+     1077, 1031, 1040, 1074, 1037, 1034, 1035,  382, 1070, 1025,
+     1023, 1019, 1021, 1028, 1059, 1017,  410, 1028, 1028, 1013,
+     1014, 1025, 1023, 1018, 1025, 1020, 1007, 1007, 1051, 1007,
+     1001, 1007,  997, 1003, 1007,  390,  354, 1011, 1000, 1000,
+     1011,  995,  987,  988,  992, 1002,  990, 1000,  999,  998,
+     1031, 1030, 1029,  983,  110,  994, 1202, 1202,  993,    0,
+     1025, 1024,  990,  980,  449, 1021,  973, 1202,  976,  975,
+
+     1202,  977,  974,  985,  981,  970, 1202,  966,  967,  977,
+      975, 1003,  962, 1001, 1202,  960,  974,  998, 1002,  968,
+      962,  964,  965,  992,  954,  950,  949,  950,  958, 1202,
+      949,  943,  955,  945,  944,  940, 1202,  985,  939,  932,
+      977,  939,  947,  941,  945,  389,  972,  927,  930,  936,
+      926,  972,  924, 1202, 1202, 1202,  928, 1202,  937,  963,
+      933,    0, 1202, 1202,  924,  929, 1202,  959,  923,  917,
+      927,  926,  912,  925,  947,  908,  910,  920,  920,  907,
+      917,  910,  915,  907,  914, 1202,  901,  910,  914,  898,
+      909,  894,  888,  893,  890,  905,  931,  335,  888,  889,
+
+      893,  885, 1202,  886,  408,  898,  889,  923,  886,  921,
+     1202,  879,  877,  893,  917,  874,  915, 1202,  401,  885,
+      875,  877, 1202,  870,  915,  882,  908,  871,  862,  905,
+      875,  866,  902,  866,  867,  871,  898,  868,  869,  862,
+      853,  864,  867,  862,  857,  862,  859,  862,  857,  890,
+      889,  843,  847,  853, 1202,  842,  850,  850,  836,  881,
+      846, 1202,  839,  832,  834,  824,  828,  869,  826,  824,
+      833,  823,  831,  816,  367, 1202,  867,  833,  823,  826,
+      863, 1202,  822,  815,  830,  825,  814,  824,  810,  811,
+      824,  807,  847,  811,  818,  809,  817,  813,  846,  798,
+
+      798,  809,  808,  795,  793,  794, 1202, 1202,  806,  807,
+      382,  792,  790,  834,  833, 1202,  799,  797,  830,  788,
+      828,  789,  779,  773,  780,  782,  784,  788,  820,  789,
+      766, 1202,  812,  769,  780, 1202,  784,  770,  765,  771,
+      765,  804,  808,  764,  759,  771,  760,  769,  762,  771,
+      755,  754, 1202,  768,  751,  751,  439,  749,  764,  744,
+      758,  753,  743,  754,  741,  741, 1202, 1202,  781,  743,
+     1202,  743, 1202,  742,  744,  737,  736,  745,  735,  777,
+     1202,  735,  731,  729,  739,  738,  725,  738,  769,  768,
+      724,  726, 1202,  720,  730,  758,  717,  731,  730,  721,
+
+      728,  708,  725,  755,  754, 1202,  715,  438,  427,  721,
+      721,  704,  708,  718,  747,  708,  745,  704,  743,  704,
+      707,  699,  705,  698,  692,  694, 1202,  701,  700,  699,
+      681,  684,  684,  690, 1202, 1202,  697,  693,  679,  725,
+      686,  689,  676,  683,  679,  674,  688,  687, 1202, 1202,
+      683, 1202,  683, 1202,  668,  683,  672,  711,  705,  709,
+     1202,  665, 1202,  669, 1202,  659,  660,  670,  657,  664,
+      687,  423,  679,  660,  626,  604,   79,  429,  172,  277,
+      360,  417, 1202,  397,  402,  406,  400,  411,  415,  407,
+      409,  460,  419,  470,  425,  472, 1202,  446, 1202,  431,
+
+      439,  475,  476,  432,  478,  453, 1202,  447,  489, 1202,
+     1202,  450,  491,  451, 1202,  448,  448,  449,  497, 1202,
+      498,  461,  454,  467,  469,  469,  466,  471, 1202,  464,
+     1202,  473, 1202,  474,  471,  464,  477, 1202, 1202,  507,
+     1202,  480,  471, 1202,  485, 1202,  482,  517,  518,  481,
+     1202, 1202,  469,  516,  489,  518,  478,  482,  526,  492,
+      528,  499,  489,  531,  485,  483,  529,  502,  498,  537,
+     1202, 1202,  495,  539,  496,  536,  495,  543,  503, 1202,
+      508, 1202,  501,  514, 1202,  511,  520,  508,  518,  512,
+     1202,  512, 1202,  515,  511,  510,  520, 1202,  554,  524,
+
+      527,  562,  522,  526,  521,  566,  562,  563,  535,  527,
+      533,  531,  535,  574,  529, 1202,  542,  530,  531, 1202,
+      547,  536,  539,  550,  542,  550,  552, 1202,  586,  587,
+      583,  551,  538,  557,  592,  559,  560,  595,  562, 1202,
+     1202,  550,  555,  567,  555, 1202,  555,  557, 1202,  561,
+      566,  563,  566,  569,  562,  604,  563,  570,  566,  579,
+      571,  577,  566,  579,  584,  619,  574,  588,  580,  593,
+      589,  625, 1202,  626,  627,  592,  591,  592, 1202, 1202,
+     1202,  631,  585,  599, 1202,  629,  590,  589,  591,  600,
+      639,  599, 1202,  607,  642, 1202, 1202,  648,  655,  662,
+
+      669,  676,  683,  687,  692,  694,  696,  698,  700
     } ;
 
-static yyconst flex_int16_t yy_def[901] =
+static yyconst flex_int16_t yy_def[910] =
     {   0,
-      888,    1,  889,  889,    1,    5,    5,    5,    5,    5,
-      888,  888,  888,  888,  888,  890,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  891,
-      888,  888,  888,  892,   15,  888,   45,   45,   45,  893,
+      897,    1,  898,  898,    1,    5,    5,    5,    5,    5,
+      897,  897,  897,  897,  897,  899,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  900,
+      897,  897,  897,  901,   15,  897,   45,   45,   45,  902,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  890,  888,  888,
-      888,  888,  888,  888,  894,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  891,  888,  892,  888,
-      895,   45,   45,   45,   45,  896,   45,  893,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  899,  897,  897,
+      897,  897,  897,  897,  903,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  900,  897,  901,  897,
+      904,   45,   45,   45,   45,  905,   45,  902,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      894,  888,  888,  888,  888,  888,  888,  888,  888,  897,
-       45,  888,  888,   45,   45,  896,  888,  893,   45,   45,
+      903,  897,  897,  897,  897,  897,  897,  897,  897,  906,
+       45,  897,  897,   45,   45,  905,  897,  902,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  888,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  897,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  888,  888,  888,  888,
-      888,  888,  888,  898,   45,  888,   45,  893,   45,   45,
+       45,   45,   45,   45,   45,   45,  897,  897,  897,  897,
+      897,  897,  897,  907,   45,  897,   45,  902,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  888,  888,  888,  899,
-       45,   45,   45,   45,  893,   45,   45,  888,   45,   45,
+       45,   45,   45,   45,   45,   45,  897,  897,  897,  908,
+       45,   45,   45,   45,  902,   45,   45,  897,   45,   45,
 
-      888,   45,   45,   45,   45,   45,  888,   45,   45,   45,
-       45,   45,   45,   45,  888,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  888,
-       45,   45,   45,   45,   45,   45,  888,   45,   45,   45,
+      897,   45,   45,   45,   45,   45,  897,   45,   45,   45,
+       45,   45,   45,   45,  897,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  897,
+       45,   45,   45,   45,   45,   45,  897,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  888,  888,  888,   45,  888,   45,  888,
-      900,  888,  888,   45,   45,  888,   45,   45,   45,   45,
+       45,   45,   45,  897,  897,  897,   45,  897,   45,   45,
+      897,  909,  897,  897,   45,   45,  897,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  888,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  897,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,  888,   45,   45,   45,   45,   45,   45,   45,  888,
-       45,   45,   45,   45,   45,   45,  888,   45,   45,   45,
-      888,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,  897,   45,   45,   45,   45,   45,   45,   45,
+      897,   45,   45,   45,   45,   45,   45,  897,   45,   45,
+       45,   45,  897,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,  888,   45,   45,   45,   45,   45,   45,  888,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  888,   45,   45,   45,   45,  888,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,  897,   45,   45,   45,   45,   45,
+       45,  897,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,  897,   45,   45,   45,   45,
+       45,  897,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,  888,  888,   45,   45,   45,   45,   45,
-       45,   45,  888,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,  888,   45,
-       45,  888,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,  888,   45,
+       45,   45,   45,   45,   45,   45,  897,  897,   45,   45,
+       45,   45,   45,   45,   45,  897,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,  888,  888,   45,   45,  888,   45,  888,   45,
-       45,   45,   45,   45,   45,   45,  888,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  888,   45,   45,
+       45,  897,   45,   45,   45,  897,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,  897,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  897,  897,   45,   45,
+      897,   45,  897,   45,   45,   45,   45,   45,   45,   45,
+      897,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,  897,   45,   45,   45,   45,   45,   45,   45,
 
-      888,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  888,   45,   45,   45,   45,   45,   45,  888,  888,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,  888,  888,   45,  888,   45,  888,   45,   45,
-       45,   45,   45,   45,  888,   45,  888,   45,  888,   45,
+       45,   45,   45,   45,   45,  897,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,  888,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  888,
-       45,  888,   45,   45,   45,   45,   45,   45,   45,  888,
-
-       45,   45,  888,  888,   45,   45,  888,   45,   45,   45,
-       45,  888,   45,   45,   45,   45,   45,   45,   45,   45,
-      888,   45,  888,   45,  888,   45,   45,   45,   45,  888,
-      888,   45,  888,   45,   45,  888,   45,   45,   45,   45,
-       45,  888,  888,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  897,   45,   45,   45,
+       45,   45,   45,   45,  897,  897,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,  897,  897,
+       45,  897,   45,  897,   45,   45,   45,   45,   45,   45,
+      897,   45,  897,   45,  897,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  888,  888,   45,   45,   45,   45,   45,   45,   45,
-      888,   45,  888,   45,   45,  888,   45,   45,   45,   45,
-       45,  888,   45,  888,   45,   45,   45,   45,  888,   45,
+       45,   45,  897,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  897,   45,  897,   45,
+
+       45,   45,   45,   45,   45,   45,  897,   45,   45,  897,
+      897,   45,   45,   45,  897,   45,   45,   45,   45,  897,
+       45,   45,   45,   45,   45,   45,   45,   45,  897,   45,
+      897,   45,  897,   45,   45,   45,   45,  897,  897,   45,
+      897,   45,   45,  897,   45,  897,   45,   45,   45,   45,
+      897,  897,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+      897,  897,   45,   45,   45,   45,   45,   45,   45,  897,
+       45,  897,   45,   45,  897,   45,   45,   45,   45,   45,
+      897,   45,  897,   45,   45,   45,   45,  897,   45,   45,
 
-       45,   45,   45,   45,   45,   45,  888,   45,   45,   45,
-      888,   45,   45,   45,   45,   45,   45,   45,  888,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      888,  888,   45,   45,   45,   45,  888,   45,   45,  888,
+       45,   45,   45,   45,   45,  897,   45,   45,   45,  897,
+       45,   45,   45,   45,   45,   45,   45,  897,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  897,
+      897,   45,   45,   45,   45,  897,   45,   45,  897,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  888,   45,   45,   45,   45,   45,  888,
-      888,  888,   45,   45,   45,  888,   45,   45,   45,   45,
-       45,   45,   45,  888,   45,   45,  888,    0,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888
+       45,   45,  897,   45,   45,   45,   45,   45,  897,  897,
+      897,   45,   45,   45,  897,   45,   45,   45,   45,   45,
+       45,   45,  897,   45,   45,  897,    0,  897,  897,  897,
 
+      897,  897,  897,  897,  897,  897,  897,  897,  897
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1254] =
+static yyconst flex_uint16_t yy_nxt[1263] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
@@ -839,8 +843,8 @@ static yyconst flex_uint16_t yy_nxt[1254] =
        80,   12,   75,   81,   12,   77,   12,   77,   12,   79,
 
        78,   78,   78,   79,   12,   12,   12,   12,   39,   12,
-       12,   42,   12,   42,   79,  410,   81,   12,   82,   42,
-      411,   42,  714,   12,   12,   44,   44,   44,   45,   45,
+       12,   42,   12,   42,   79,  358,   81,   12,   82,   42,
+      359,   42,  714,   12,   12,   44,   44,   44,   45,   45,
        46,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   47,   48,   45,
        49,   45,   45,   45,   45,   45,   45,   50,   45,   45,
@@ -850,7 +854,7 @@ static yyconst flex_uint16_t yy_nxt[1254] =
        69,   81,   72,   72,   72,   90,   94,   71,   73,   73,
 
        73,  107,   71,   69,  144,   72,   72,   72,   71,   83,
-      108,  715,  122,   71,   84,   71,  123,  100,   71,   95,
+      108,  717,  122,   71,   84,   71,  123,  100,   71,   95,
       101,  110,   91,  102,   71,  111,  129,  144,  112,  170,
       130,   71,   45,   45,  138,   45,  103,  206,  139,   97,
       104,  207,  161,  105,  171,   45,   45,   45,   45,   45,
@@ -861,32 +865,32 @@ static yyconst flex_uint16_t yy_nxt[1254] =
       142,  144,  127,  143,  128,  180,  172,  132,  133,   73,
 
        73,   73,  134,   69,  154,   70,   70,   70,  173,   71,
-      145,   77,  716,   77,  147,   71,   78,   78,   78,   90,
+      145,   77,  718,   77,  147,   71,   78,   78,   78,   90,
        69,  143,   72,   72,   72,   71,   73,   73,   73,  181,
       188,   71,   71,   78,   78,   78,   71,   78,   78,   78,
-      453,  146,  165,  166,  175,  217,   91,  176,   71,  189,
+      455,  146,  165,  166,  175,  217,   91,  176,   71,  189,
       177,  167,   71,  158,  158,  158,  193,  194,  219,  217,
-      158,  158,  158,  158,  158,  218,  218,  271,  217,  454,
+      158,  158,  158,  158,  158,  218,  218,  271,  217,  456,
       272,  200,  201,  202,  219,  158,  158,  158,  158,  158,
       158,  203,  220,  204,  219,  218,  221,  205,  287,  287,
-      291,  292,  305,  339,  527,  337,  306,  340,  293,  528,
-
-      222,  228,  228,  228,  287,  288,  474,  717,  228,  228,
-      228,  228,  228,  460,  601,  315,  475,  559,  461,  602,
-      316,  560,  718,  228,  228,  228,  228,  228,  228,  295,
-      295,  295,  648,  701,  707,  719,  295,  295,  295,  295,
-      295,  338,  720,  646,  721,  722,  723,  462,  647,  724,
-      725,  295,  295,  295,  295,  295,  295,  317,  726,  728,
-      603,  318,   45,   45,   45,  727,  649,  729,  708,   45,
-       45,   45,   45,   45,  702,  730,  731,  732,  733,  734,
-      735,  736,  737,  738,   45,   45,   45,   45,   45,   45,
-      739,  740,  741,  742,  743,  744,  745,  746,  747,  748,
+      291,  292,  305,  339,  411,  337,  306,  340,  293,  412,
+
+      222,  228,  228,  228,  287,  288,  476,  719,  228,  228,
+      228,  228,  228,  462,  530,  315,  477,  563,  463,  531,
+      316,  564,  720,  228,  228,  228,  228,  228,  228,  295,
+      295,  295,  654,  708,  715,  721,  295,  295,  295,  295,
+      295,  338,  722,  652,  606,  723,  724,  464,  653,  607,
+      725,  295,  295,  295,  295,  295,  295,  317,  726,  727,
+      728,  318,   45,   45,   45,  729,  655,  730,  716,   45,
+       45,   45,   45,   45,  709,  731,  732,  733,  736,  737,
+      738,  739,  740,  741,   45,   45,   45,   45,   45,   45,
+      608,  734,  742,  743,  744,  745,  746,  747,  735,  748,
 
       749,  750,  751,  752,  753,  754,  755,  756,  757,  758,
       759,  760,  761,  762,  763,  764,  765,  766,  767,  768,
       769,  770,  771,  772,  773,  774,  775,  776,  777,  778,
-      779,  780,  781,  782,  783,  784,  786,  787,  788,  789,
-      785,  790,  791,  792,  793,  794,  795,  796,  797,  798,
+      779,  780,  781,  782,  783,  784,  785,  786,  787,  788,
+      789,  790,  791,  792,  793,  795,  796,  797,  798,  794,
       799,  800,  801,  802,  803,  804,  805,  806,  807,  808,
       809,  810,  811,  812,  813,  814,  815,  816,  817,  818,
       819,  820,  821,  822,  823,  824,  825,  826,  827,  828,
@@ -896,78 +900,79 @@ static yyconst flex_uint16_t yy_nxt[1254] =
       849,  850,  851,  852,  853,  854,  855,  856,  857,  858,
       859,  860,  861,  862,  863,  864,  865,  866,  867,  868,
       869,  870,  871,  872,  873,  874,  875,  876,  877,  878,
-      879,  880,  881,  882,  883,  884,  885,  886,  887,   36,
-       36,   36,   36,   36,   36,   36,   68,  713,   68,   68,
-       68,   68,   68,   87,  712,   87,  711,   87,   87,   87,
-       89,   89,   89,   89,   89,   89,   89,   96,   96,   96,
-       96,   96,   96,   96,  141,  710,  141,  141,  141,  141,
-      141,   89,   89,  709,   89,  156,  156,  156,  156,  156,
-      224,  224,  290,  290,  361,  361,   89,   89,  706,  705,
-
-      704,  703,  700,  699,  698,  697,  696,  695,  694,  693,
-      692,  691,  690,  689,  688,  687,  686,  685,  684,  683,
-      682,  681,  680,  679,  678,  677,  676,  675,  674,  673,
-      672,  671,  670,  669,  668,  667,  666,  665,  664,  663,
-      662,  661,  660,  659,  658,  657,  656,  655,  654,  653,
-      652,  651,  650,  645,  644,  643,  642,  641,  640,  639,
-      638,  637,  636,  635,  634,  633,  632,  631,  630,  629,
-      628,  627,  626,  625,  624,  623,  622,  621,  620,  619,
-      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
-      608,  607,  606,  605,  604,  600,  599,  598,  597,  596,
-
-      595,  594,  593,  592,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  580,  579,  578,  577,  576,
-      575,  574,  573,  572,  571,  570,  569,  568,  567,  566,
-      565,  564,  563,  562,  561,  558,  557,  556,  555,  554,
-      553,  552,  551,  550,  549,  548,  547,  546,  545,  544,
-      543,  542,  541,  540,  539,  538,  537,  536,  535,  534,
-      533,  532,  531,  530,  529,  526,  525,  524,  523,  522,
-      521,  520,  519,  518,  517,  516,  515,  514,  513,  512,
-      511,  510,  509,  508,  507,  506,  505,  504,  503,  502,
-      501,  500,  499,  498,  497,  496,  495,  494,  493,  492,
-
-      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
-      481,  480,  479,  478,  477,  476,  473,  472,  471,  470,
-      469,  468,  467,  466,  465,  464,  463,  459,  458,  457,
-      456,  455,  452,  451,  450,  449,  448,  447,  446,  445,
-      444,  443,  442,  441,  440,  439,  438,  437,  436,  435,
-      434,  433,  432,  431,  430,  429,  428,  427,  426,  425,
-      424,  423,  422,  421,  420,  419,  418,  417,  416,  415,
-      414,  413,  412,  409,  408,  407,  406,  405,  404,  403,
-      402,  401,  400,  399,  398,  397,  396,  395,  394,  393,
-      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
-
-      382,  381,  380,  379,  378,  377,  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,  336,  335,  334,  333,  332,  331,  330,  329,  328,
-      327,  326,  325,  324,  323,  322,  321,  320,  319,  314,
-      313,  312,  311,  310,  309,  308,  307,  304,  303,  302,
-      301,  300,  299,  298,  297,  296,  294,  289,  286,  285,
-      284,  283,  282,  281,  280,  279,  278,  277,  276,  275,
-      274,  273,  270,  269,  268,  267,  266,  265,  264,  263,
-
-      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
-      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
-      242,  241,  240,  239,  238,  237,  236,  235,  234,  233,
-      232,  231,  230,  229,  157,  227,  226,  225,  223,  216,
-      215,  214,  213,  212,  211,  210,  209,  208,  199,  198,
-      197,  196,  195,  192,  191,  190,  187,  186,  185,  184,
-      183,  182,  179,  178,  174,  169,  168,  164,  163,  160,
-      159,  157,  155,  152,  151,  150,  149,  148,  140,  121,
-      120,  109,   99,   93,   92,   43,   88,   86,   85,   76,
-       43,  888,   11,  888,  888,  888,  888,  888,  888,  888,
-
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888
+      879,  880,  881,  882,  883,  884,  885,  886,  887,  888,
+      889,  890,  891,  892,  893,  894,  895,  896,   36,   36,
+       36,   36,   36,   36,   36,   68,  713,   68,   68,   68,
+       68,   68,   87,  712,   87,  711,   87,   87,   87,   89,
+       89,   89,   89,   89,   89,   89,   96,   96,   96,   96,
+       96,   96,   96,  141,  710,  141,  141,  141,  141,  141,
+       89,   89,  707,   89,  156,  156,  156,  156,  156,  224,
+
+      224,  290,  290,  362,  362,   89,   89,  706,  705,  704,
+      703,  702,  701,  700,  699,  698,  697,  696,  695,  694,
+      693,  692,  691,  690,  689,  688,  687,  686,  685,  684,
+      683,  682,  681,  680,  679,  678,  677,  676,  675,  674,
+      673,  672,  671,  670,  669,  668,  667,  666,  665,  664,
+      663,  662,  661,  660,  659,  658,  657,  656,  651,  650,
+      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
+      639,  638,  637,  636,  635,  634,  633,  632,  631,  630,
+      629,  628,  627,  626,  625,  624,  623,  622,  621,  620,
+      619,  618,  617,  616,  615,  614,  613,  612,  611,  610,
+
+      609,  605,  604,  603,  602,  601,  600,  599,  598,  597,
+      596,  595,  594,  593,  592,  591,  590,  589,  588,  587,
+      586,  585,  584,  583,  582,  581,  580,  579,  578,  577,
+      576,  575,  574,  573,  572,  571,  570,  569,  568,  567,
+      566,  565,  562,  561,  560,  559,  558,  557,  556,  555,
+      554,  553,  552,  551,  550,  549,  548,  547,  546,  545,
+      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
+      534,  533,  532,  529,  528,  527,  526,  525,  524,  523,
+      522,  521,  520,  519,  518,  517,  516,  515,  514,  513,
+      512,  511,  510,  509,  508,  507,  506,  505,  504,  503,
+
+      502,  501,  500,  499,  498,  497,  496,  495,  494,  493,
+      492,  491,  490,  489,  488,  487,  486,  485,  484,  483,
+      482,  481,  480,  479,  478,  475,  474,  473,  472,  471,
+      470,  469,  468,  467,  466,  465,  461,  460,  459,  458,
+      457,  454,  453,  452,  451,  450,  449,  448,  447,  446,
+      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
+      435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
+      425,  424,  423,  422,  421,  420,  419,  418,  417,  416,
+      415,  414,  413,  410,  409,  408,  407,  406,  405,  404,
+      403,  402,  401,  400,  399,  398,  397,  396,  395,  394,
+
+      393,  392,  391,  390,  389,  388,  387,  386,  385,  384,
+      383,  382,  381,  380,  379,  378,  377,  376,  375,  374,
+      373,  372,  371,  370,  369,  368,  367,  366,  365,  364,
+      363,  361,  360,  357,  356,  355,  354,  353,  352,  351,
+      350,  349,  348,  347,  346,  345,  344,  343,  342,  341,
+      336,  335,  334,  333,  332,  331,  330,  329,  328,  327,
+      326,  325,  324,  323,  322,  321,  320,  319,  314,  313,
+      312,  311,  310,  309,  308,  307,  304,  303,  302,  301,
+      300,  299,  298,  297,  296,  294,  289,  286,  285,  284,
+      283,  282,  281,  280,  279,  278,  277,  276,  275,  274,
+
+      273,  270,  269,  268,  267,  266,  265,  264,  263,  262,
+      261,  260,  259,  258,  257,  256,  255,  254,  253,  252,
+      251,  250,  249,  248,  247,  246,  245,  244,  243,  242,
+      241,  240,  239,  238,  237,  236,  235,  234,  233,  232,
+      231,  230,  229,  157,  227,  226,  225,  223,  216,  215,
+      214,  213,  212,  211,  210,  209,  208,  199,  198,  197,
+      196,  195,  192,  191,  190,  187,  186,  185,  184,  183,
+      182,  179,  178,  174,  169,  168,  164,  163,  160,  159,
+      157,  155,  152,  151,  150,  149,  148,  140,  121,  120,
+      109,   99,   93,   92,   43,   88,   86,   85,   76,   43,
+
+      897,   11,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897
     } ;
 
-static yyconst flex_int16_t yy_chk[1254] =
+static yyconst flex_int16_t yy_chk[1263] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -981,8 +986,8 @@ static yyconst flex_int16_t yy_chk[1254] =
        27,    5,   21,   28,    5,   25,    5,   25,    5,   26,
 
        25,   25,   25,   31,    5,    5,    7,    9,    5,   10,
-        8,   37,    5,   37,   26,  346,   28,    5,   31,   42,
-      346,   42,  678,    5,    5,   15,   15,   15,   15,   15,
+        8,   37,    5,   37,   26,  285,   28,    5,   31,   42,
+      285,   42,  677,    5,    5,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
@@ -1006,107 +1011,108 @@ static yyconst flex_int16_t yy_chk[1254] =
        82,   71,  680,   71,   84,   70,   71,   71,   71,   89,
        72,   83,   72,   72,   72,   69,   73,   73,   73,  113,
       120,   70,   72,   77,   77,   77,   73,   78,   78,   78,
-      397,   83,  104,  104,  110,  142,   89,  110,   72,  120,
+      398,   83,  104,  104,  110,  142,   89,  110,   72,  120,
       110,  104,   73,   98,   98,   98,  124,  124,  144,  145,
-       98,   98,   98,   98,   98,  143,  146,  202,  142,  397,
+       98,   98,   98,   98,   98,  143,  146,  202,  142,  398,
       202,  130,  130,  130,  144,   98,   98,   98,   98,   98,
        98,  130,  145,  130,  147,  143,  146,  130,  217,  220,
-      225,  225,  238,  267,  473,  266,  238,  267,  225,  473,
-
-      147,  158,  158,  158,  217,  220,  418,  681,  158,  158,
-      158,  158,  158,  404,  553,  247,  418,  508,  404,  553,
-      247,  508,  682,  158,  158,  158,  158,  158,  158,  228,
-      228,  228,  604,  666,  671,  683,  228,  228,  228,  228,
-      228,  266,  684,  603,  685,  686,  687,  404,  603,  688,
-      689,  228,  228,  228,  228,  228,  228,  247,  691,  693,
-      553,  247,  295,  295,  295,  691,  604,  694,  671,  295,
-      295,  295,  295,  295,  666,  695,  696,  697,  698,  699,
-      701,  702,  705,  706,  295,  295,  295,  295,  295,  295,
-      708,  709,  710,  711,  713,  714,  715,  716,  717,  718,
-
-      719,  720,  722,  724,  726,  727,  728,  729,  732,  734,
-      735,  737,  738,  739,  740,  741,  744,  745,  746,  747,
-      748,  749,  750,  751,  752,  753,  754,  755,  756,  757,
-      758,  759,  760,  761,  764,  765,  766,  767,  768,  769,
-      765,  770,  772,  774,  775,  777,  778,  779,  780,  781,
-      783,  785,  786,  787,  788,  790,  791,  792,  793,  794,
-      795,  796,  797,  798,  799,  800,  801,  802,  803,  804,
-      805,  806,  808,  809,  810,  812,  813,  814,  815,  816,
-      817,  818,  820,  821,  822,  823,  824,  825,  826,  827,
-      828,  829,  830,  833,  834,  835,  836,  838,  839,  841,
-
-      842,  843,  844,  845,  846,  847,  848,  849,  850,  851,
+      225,  225,  238,  267,  346,  266,  238,  267,  225,  346,
+
+      147,  158,  158,  158,  217,  220,  419,  681,  158,  158,
+      158,  158,  158,  405,  475,  247,  419,  511,  405,  475,
+      247,  511,  682,  158,  158,  158,  158,  158,  158,  228,
+      228,  228,  609,  672,  678,  684,  228,  228,  228,  228,
+      228,  266,  685,  608,  557,  686,  687,  405,  608,  557,
+      688,  228,  228,  228,  228,  228,  228,  247,  689,  690,
+      691,  247,  295,  295,  295,  692,  609,  693,  678,  295,
+      295,  295,  295,  295,  672,  694,  695,  696,  700,  701,
+      702,  703,  704,  705,  295,  295,  295,  295,  295,  295,
+      557,  698,  706,  708,  709,  712,  713,  714,  698,  716,
+
+      717,  718,  719,  721,  722,  723,  724,  725,  726,  727,
+      728,  730,  732,  734,  735,  736,  737,  740,  742,  743,
+      745,  747,  748,  749,  750,  753,  754,  755,  756,  757,
+      758,  759,  760,  761,  762,  763,  764,  765,  766,  767,
+      768,  769,  770,  773,  774,  775,  776,  777,  778,  774,
+      779,  781,  783,  784,  786,  787,  788,  789,  790,  792,
+      794,  795,  796,  797,  799,  800,  801,  802,  803,  804,
+      805,  806,  807,  808,  809,  810,  811,  812,  813,  814,
+      815,  817,  818,  819,  821,  822,  823,  824,  825,  826,
+      827,  829,  830,  831,  832,  833,  834,  835,  836,  837,
+
+      838,  839,  842,  843,  844,  845,  847,  848,  850,  851,
       852,  853,  854,  855,  856,  857,  858,  859,  860,  861,
-      862,  863,  865,  866,  867,  868,  869,  873,  874,  875,
-      877,  878,  879,  880,  881,  882,  883,  885,  886,  889,
-      889,  889,  889,  889,  889,  889,  890,  677,  890,  890,
-      890,  890,  890,  891,  675,  891,  674,  891,  891,  891,
-      892,  892,  892,  892,  892,  892,  892,  893,  893,  893,
-      893,  893,  893,  893,  894,  673,  894,  894,  894,  894,
-      894,  895,  895,  672,  895,  896,  896,  896,  896,  896,
-      897,  897,  898,  898,  899,  899,  900,  900,  670,  669,
-
-      668,  667,  665,  664,  663,  662,  661,  660,  658,  656,
-      654,  653,  652,  651,  650,  649,  647,  645,  642,  641,
-      640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
-      628,  627,  626,  625,  624,  623,  621,  620,  619,  618,
-      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
-      607,  606,  605,  602,  600,  599,  598,  597,  596,  595,
-      594,  593,  592,  591,  590,  589,  587,  586,  585,  584,
-      583,  582,  581,  580,  579,  578,  576,  575,  574,  573,
-      572,  571,  570,  568,  566,  565,  562,  561,  560,  559,
-      558,  557,  556,  555,  554,  552,  551,  550,  548,  547,
-
+      862,  863,  864,  865,  866,  867,  868,  869,  870,  871,
+      872,  874,  875,  876,  877,  878,  882,  883,  884,  886,
+      887,  888,  889,  890,  891,  892,  894,  895,  898,  898,
+      898,  898,  898,  898,  898,  899,  676,  899,  899,  899,
+      899,  899,  900,  675,  900,  674,  900,  900,  900,  901,
+      901,  901,  901,  901,  901,  901,  902,  902,  902,  902,
+      902,  902,  902,  903,  673,  903,  903,  903,  903,  903,
+      904,  904,  671,  904,  905,  905,  905,  905,  905,  906,
+
+      906,  907,  907,  908,  908,  909,  909,  670,  669,  668,
+      667,  666,  664,  662,  660,  659,  658,  657,  656,  655,
+      653,  651,  648,  647,  646,  645,  644,  643,  642,  641,
+      640,  639,  638,  637,  634,  633,  632,  631,  630,  629,
+      628,  626,  625,  624,  623,  622,  621,  620,  619,  618,
+      617,  616,  615,  614,  613,  612,  611,  610,  607,  605,
+      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
+      594,  592,  591,  590,  589,  588,  587,  586,  585,  584,
+      583,  582,  580,  579,  578,  577,  576,  575,  574,  572,
+      570,  569,  566,  565,  564,  563,  562,  561,  560,  559,
+
+      558,  556,  555,  554,  552,  551,  550,  549,  548,  547,
       546,  545,  544,  543,  542,  541,  540,  539,  538,  537,
-      536,  535,  534,  533,  531,  530,  528,  527,  526,  525,
-      524,  523,  522,  521,  520,  519,  518,  517,  516,  515,
-      514,  512,  511,  510,  509,  507,  506,  503,  502,  501,
+      535,  534,  533,  531,  530,  529,  528,  527,  526,  525,
+      524,  523,  522,  521,  520,  519,  518,  517,  515,  514,
+      513,  512,  510,  509,  506,  505,  504,  503,  502,  501,
       500,  499,  498,  497,  496,  495,  494,  493,  492,  491,
-      490,  489,  488,  487,  486,  485,  484,  483,  482,  481,
-      480,  478,  477,  476,  475,  472,  471,  470,  469,  468,
-      467,  466,  465,  464,  463,  462,  461,  459,  458,  457,
-      456,  455,  454,  452,  451,  450,  449,  448,  447,  446,
-      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
+      490,  489,  488,  487,  486,  485,  484,  483,  481,  480,
+      479,  478,  477,  474,  473,  472,  471,  470,  469,  468,
+      467,  466,  465,  464,  463,  461,  460,  459,  458,  457,
+      456,  454,  453,  452,  451,  450,  449,  448,  447,  446,
 
+      445,  444,  443,  442,  441,  440,  439,  438,  437,  436,
       435,  434,  433,  432,  431,  430,  429,  428,  427,  426,
-      425,  424,  423,  422,  420,  419,  416,  415,  414,  413,
-      412,  411,  409,  408,  407,  406,  405,  403,  401,  400,
-      399,  398,  396,  395,  394,  393,  392,  391,  390,  389,
-      388,  387,  386,  384,  383,  382,  381,  380,  379,  378,
+      425,  424,  422,  421,  420,  417,  416,  415,  414,  413,
+      412,  410,  409,  408,  407,  406,  404,  402,  401,  400,
+      399,  397,  396,  395,  394,  393,  392,  391,  390,  389,
+      388,  387,  385,  384,  383,  382,  381,  380,  379,  378,
       377,  376,  375,  374,  373,  372,  371,  370,  369,  368,
-      367,  365,  364,  360,  359,  357,  353,  352,  351,  350,
+      366,  365,  361,  360,  359,  357,  353,  352,  351,  350,
       349,  348,  347,  345,  344,  343,  342,  341,  340,  339,
       338,  336,  335,  334,  333,  332,  331,  329,  328,  327,
-      326,  325,  324,  323,  322,  321,  320,  319,  318,  317,
 
+      326,  325,  324,  323,  322,  321,  320,  319,  318,  317,
       316,  314,  313,  312,  311,  310,  309,  308,  306,  305,
       304,  303,  302,  300,  299,  297,  296,  294,  293,  292,
-      291,  289,  286,  285,  284,  283,  282,  281,  280,  279,
-      278,  277,  276,  275,  274,  273,  272,  271,  270,  269,
-      268,  265,  264,  263,  262,  261,  260,  259,  258,  257,
-      256,  255,  254,  253,  252,  251,  250,  249,  248,  246,
-      245,  244,  243,  242,  241,  240,  239,  237,  236,  235,
-      234,  233,  232,  231,  230,  229,  227,  223,  216,  215,
-      214,  213,  212,  211,  210,  209,  208,  207,  206,  205,
-      204,  203,  201,  200,  199,  198,  197,  196,  195,  194,
-
-      193,  192,  191,  190,  189,  188,  187,  186,  185,  184,
-      183,  182,  181,  179,  178,  177,  176,  175,  174,  173,
-      172,  171,  170,  169,  168,  167,  166,  165,  164,  163,
-      162,  161,  160,  159,  156,  155,  154,  151,  148,  140,
-      139,  138,  137,  136,  135,  134,  133,  132,  129,  128,
-      127,  126,  125,  123,  122,  121,  119,  118,  117,  116,
-      115,  114,  112,  111,  109,  106,  105,  103,  102,  100,
-       99,   96,   95,   93,   92,   91,   87,   86,   67,   60,
-       59,   55,   51,   48,   47,   43,   41,   39,   38,   24,
-       14,   11,  888,  888,  888,  888,  888,  888,  888,  888,
-
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888,  888,  888,  888,  888,  888,  888,  888,
-      888,  888,  888
+      291,  289,  286,  284,  283,  282,  281,  280,  279,  278,
+      277,  276,  275,  274,  273,  272,  271,  270,  269,  268,
+      265,  264,  263,  262,  261,  260,  259,  258,  257,  256,
+      255,  254,  253,  252,  251,  250,  249,  248,  246,  245,
+      244,  243,  242,  241,  240,  239,  237,  236,  235,  234,
+      233,  232,  231,  230,  229,  227,  223,  216,  215,  214,
+      213,  212,  211,  210,  209,  208,  207,  206,  205,  204,
+
+      203,  201,  200,  199,  198,  197,  196,  195,  194,  193,
+      192,  191,  190,  189,  188,  187,  186,  185,  184,  183,
+      182,  181,  179,  178,  177,  176,  175,  174,  173,  172,
+      171,  170,  169,  168,  167,  166,  165,  164,  163,  162,
+      161,  160,  159,  156,  155,  154,  151,  148,  140,  139,
+      138,  137,  136,  135,  134,  133,  132,  129,  128,  127,
+      126,  125,  123,  122,  121,  119,  118,  117,  116,  115,
+      114,  112,  111,  109,  106,  105,  103,  102,  100,   99,
+       96,   95,   93,   92,   91,   87,   86,   67,   60,   59,
+       55,   51,   48,   47,   43,   41,   39,   38,   24,   14,
+
+       11,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1115,21 +1121,21 @@ static char *yy_last_accepting_cpos;
 extern int parser6__flex_debug;
 int parser6__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[117] =
+static yyconst flex_int16_t yy_rule_linenum[118] =
     {   0,
       130,  132,  134,  139,  140,  145,  146,  147,  159,  162,
       167,  174,  183,  192,  201,  210,  219,  228,  240,  250,
       260,  270,  281,  291,  301,  311,  321,  331,  340,  349,
       358,  373,  388,  397,  406,  415,  424,  433,  442,  451,
-      460,  469,  478,  487,  496,  505,  514,  523,  533,  542,
-      551,  560,  569,  578,  587,  596,  605,  614,  624,  634,
-      644,  653,  662,  671,  682,  692,  701,  711,  720,  729,
-      738,  747,  756,  765,  775,  784,  793,  802,  811,  820,
-      829,  838,  847,  856,  865,  874,  883,  892,  901,  910,
-      919,  928,  937,  946,  955,  964,  973,  982,  991, 1089,
-
-     1094, 1099, 1104, 1105, 1106, 1107, 1108, 1109, 1111, 1129,
-     1142, 1147, 1151, 1153, 1155, 1157
+      460,  469,  479,  488,  497,  506,  515,  524,  533,  543,
+      552,  561,  570,  579,  588,  597,  606,  615,  624,  634,
+      644,  654,  663,  672,  681,  692,  702,  711,  721,  730,
+      739,  748,  757,  766,  775,  785,  794,  803,  812,  821,
+      830,  839,  848,  857,  866,  875,  884,  893,  902,  911,
+      920,  929,  938,  947,  956,  965,  974,  983,  992, 1001,
+
+     1099, 1104, 1109, 1114, 1115, 1116, 1117, 1118, 1119, 1121,
+     1139, 1152, 1157, 1161, 1163, 1165, 1167
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1200,7 +1206,7 @@ unsigned int comment_start_line = 0;
 // by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the
 // currently matched token.
 #define YY_USER_ACTION  driver.loc_.columns(parser6_leng);
-#line 1204 "dhcp6_lexer.cc"
+#line 1210 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1526,7 +1532,7 @@ YY_DECL
     }
 
 
-#line 1530 "dhcp6_lexer.cc"
+#line 1536 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1555,13 +1561,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 >= 889 )
+                               if ( yy_current_state >= 898 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 888 );
+               while ( yy_current_state != 897 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1580,13 +1586,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 < 117 )
+                       else if ( yy_act < 118 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser6_text );
-                       else if ( yy_act == 117 )
+                       else if ( yy_act == 118 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser6_text );
-                       else if ( yy_act == 118 )
+                       else if ( yy_act == 119 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2078,6 +2084,19 @@ YY_RULE_SETUP
 case 42:
 YY_RULE_SETUP
 #line 469 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::POOLS:
+    case isc::dhcp::Parser6Context::PD_POOLS:
+        return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_);
+    }
+}
+       YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 479 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2087,9 +2106,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 44:
 YY_RULE_SETUP
-#line 478 "dhcp6_lexer.ll"
+#line 488 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2099,9 +2118,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 45:
 YY_RULE_SETUP
-#line 487 "dhcp6_lexer.ll"
+#line 497 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2111,9 +2130,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 45:
+case 46:
 YY_RULE_SETUP
-#line 496 "dhcp6_lexer.ll"
+#line 506 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2123,9 +2142,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 46:
+case 47:
 YY_RULE_SETUP
-#line 505 "dhcp6_lexer.ll"
+#line 515 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2135,9 +2154,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 47:
+case 48:
 YY_RULE_SETUP
-#line 514 "dhcp6_lexer.ll"
+#line 524 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2147,9 +2166,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 49:
 YY_RULE_SETUP
-#line 523 "dhcp6_lexer.ll"
+#line 533 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -2160,9 +2179,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 533 "dhcp6_lexer.ll"
+#line 543 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2172,9 +2191,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 542 "dhcp6_lexer.ll"
+#line 552 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2184,9 +2203,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 551 "dhcp6_lexer.ll"
+#line 561 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2196,9 +2215,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 560 "dhcp6_lexer.ll"
+#line 570 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2208,9 +2227,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 54:
 YY_RULE_SETUP
-#line 569 "dhcp6_lexer.ll"
+#line 579 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -2220,9 +2239,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 54:
+case 55:
 YY_RULE_SETUP
-#line 578 "dhcp6_lexer.ll"
+#line 588 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -2232,9 +2251,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 55:
+case 56:
 YY_RULE_SETUP
-#line 587 "dhcp6_lexer.ll"
+#line 597 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -2244,9 +2263,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 56:
+case 57:
 YY_RULE_SETUP
-#line 596 "dhcp6_lexer.ll"
+#line 606 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -2256,9 +2275,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 58:
 YY_RULE_SETUP
-#line 605 "dhcp6_lexer.ll"
+#line 615 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -2268,9 +2287,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 59:
 YY_RULE_SETUP
-#line 614 "dhcp6_lexer.ll"
+#line 624 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2281,9 +2300,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 60:
 YY_RULE_SETUP
-#line 624 "dhcp6_lexer.ll"
+#line 634 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2294,9 +2313,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 61:
 YY_RULE_SETUP
-#line 634 "dhcp6_lexer.ll"
+#line 644 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -2307,9 +2326,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 62:
 YY_RULE_SETUP
-#line 644 "dhcp6_lexer.ll"
+#line 654 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2319,9 +2338,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 63:
 YY_RULE_SETUP
-#line 653 "dhcp6_lexer.ll"
+#line 663 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -2331,9 +2350,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 64:
 YY_RULE_SETUP
-#line 662 "dhcp6_lexer.ll"
+#line 672 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -2343,9 +2362,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 65:
 YY_RULE_SETUP
-#line 671 "dhcp6_lexer.ll"
+#line 681 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -2357,9 +2376,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 66:
 YY_RULE_SETUP
-#line 682 "dhcp6_lexer.ll"
+#line 692 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2370,9 +2389,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 67:
 YY_RULE_SETUP
-#line 692 "dhcp6_lexer.ll"
+#line 702 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -2382,9 +2401,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 68:
 YY_RULE_SETUP
-#line 701 "dhcp6_lexer.ll"
+#line 711 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -2395,9 +2414,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 69:
 YY_RULE_SETUP
-#line 711 "dhcp6_lexer.ll"
+#line 721 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2407,9 +2426,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 70:
 YY_RULE_SETUP
-#line 720 "dhcp6_lexer.ll"
+#line 730 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -2419,9 +2438,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 71:
 YY_RULE_SETUP
-#line 729 "dhcp6_lexer.ll"
+#line 739 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -2431,9 +2450,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 72:
 YY_RULE_SETUP
-#line 738 "dhcp6_lexer.ll"
+#line 748 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -2443,9 +2462,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 73:
 YY_RULE_SETUP
-#line 747 "dhcp6_lexer.ll"
+#line 757 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2455,9 +2474,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 74:
 YY_RULE_SETUP
-#line 756 "dhcp6_lexer.ll"
+#line 766 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -2467,9 +2486,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 75:
 YY_RULE_SETUP
-#line 765 "dhcp6_lexer.ll"
+#line 775 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2479,9 +2498,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 76:
 YY_RULE_SETUP
-#line 775 "dhcp6_lexer.ll"
+#line 785 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -2491,9 +2510,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 77:
 YY_RULE_SETUP
-#line 784 "dhcp6_lexer.ll"
+#line 794 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -2503,9 +2522,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 78:
 YY_RULE_SETUP
-#line 793 "dhcp6_lexer.ll"
+#line 803 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2515,9 +2534,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 79:
 YY_RULE_SETUP
-#line 802 "dhcp6_lexer.ll"
+#line 812 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -2527,9 +2546,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 80:
 YY_RULE_SETUP
-#line 811 "dhcp6_lexer.ll"
+#line 821 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -2539,9 +2558,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 81:
 YY_RULE_SETUP
-#line 820 "dhcp6_lexer.ll"
+#line 830 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -2551,9 +2570,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 82:
 YY_RULE_SETUP
-#line 829 "dhcp6_lexer.ll"
+#line 839 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -2563,9 +2582,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 83:
 YY_RULE_SETUP
-#line 838 "dhcp6_lexer.ll"
+#line 848 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -2575,9 +2594,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 84:
 YY_RULE_SETUP
-#line 847 "dhcp6_lexer.ll"
+#line 857 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -2587,9 +2606,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 85:
 YY_RULE_SETUP
-#line 856 "dhcp6_lexer.ll"
+#line 866 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -2599,9 +2618,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 86:
 YY_RULE_SETUP
-#line 865 "dhcp6_lexer.ll"
+#line 875 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2611,9 +2630,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 87:
 YY_RULE_SETUP
-#line 874 "dhcp6_lexer.ll"
+#line 884 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -2623,9 +2642,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 88:
 YY_RULE_SETUP
-#line 883 "dhcp6_lexer.ll"
+#line 893 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -2635,9 +2654,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 89:
 YY_RULE_SETUP
-#line 892 "dhcp6_lexer.ll"
+#line 902 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -2647,9 +2666,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 90:
 YY_RULE_SETUP
-#line 901 "dhcp6_lexer.ll"
+#line 911 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -2659,9 +2678,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 91:
 YY_RULE_SETUP
-#line 910 "dhcp6_lexer.ll"
+#line 920 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -2671,9 +2690,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 92:
 YY_RULE_SETUP
-#line 919 "dhcp6_lexer.ll"
+#line 929 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING:
@@ -2683,9 +2702,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 93:
 YY_RULE_SETUP
-#line 928 "dhcp6_lexer.ll"
+#line 938 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2695,9 +2714,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 94:
 YY_RULE_SETUP
-#line 937 "dhcp6_lexer.ll"
+#line 947 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2707,9 +2726,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 94:
+case 95:
 YY_RULE_SETUP
-#line 946 "dhcp6_lexer.ll"
+#line 956 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -2719,9 +2738,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 95:
+case 96:
 YY_RULE_SETUP
-#line 955 "dhcp6_lexer.ll"
+#line 965 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -2731,9 +2750,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 96:
+case 97:
 YY_RULE_SETUP
-#line 964 "dhcp6_lexer.ll"
+#line 974 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2743,9 +2762,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 97:
+case 98:
 YY_RULE_SETUP
-#line 973 "dhcp6_lexer.ll"
+#line 983 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2755,9 +2774,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 98:
+case 99:
 YY_RULE_SETUP
-#line 982 "dhcp6_lexer.ll"
+#line 992 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -2767,9 +2786,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 99:
+case 100:
 YY_RULE_SETUP
-#line 991 "dhcp6_lexer.ll"
+#line 1001 "dhcp6_lexer.ll"
 {
     // A string has been matched. It contains the actual string and single quotes.
     // We need to get those quotes out of the way and just use its content, e.g.
@@ -2868,65 +2887,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 100:
-/* rule 100 can match eol */
+case 101:
+/* rule 101 can match eol */
 YY_RULE_SETUP
-#line 1089 "dhcp6_lexer.ll"
+#line 1099 "dhcp6_lexer.ll"
 {
     // Bad string with a forbidden control character inside
     driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text));
 }
        YY_BREAK
-case 101:
-/* rule 101 can match eol */
+case 102:
+/* rule 102 can match eol */
 YY_RULE_SETUP
-#line 1094 "dhcp6_lexer.ll"
+#line 1104 "dhcp6_lexer.ll"
 {
     // Bad string with a bad escape inside
     driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 102:
+case 103:
 YY_RULE_SETUP
-#line 1099 "dhcp6_lexer.ll"
+#line 1109 "dhcp6_lexer.ll"
 {
     // Bad string with an open escape at the end
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 103:
+case 104:
 YY_RULE_SETUP
-#line 1104 "dhcp6_lexer.ll"
+#line 1114 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 104:
+case 105:
 YY_RULE_SETUP
-#line 1105 "dhcp6_lexer.ll"
+#line 1115 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 105:
+case 106:
 YY_RULE_SETUP
-#line 1106 "dhcp6_lexer.ll"
+#line 1116 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 106:
+case 107:
 YY_RULE_SETUP
-#line 1107 "dhcp6_lexer.ll"
+#line 1117 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 107:
+case 108:
 YY_RULE_SETUP
-#line 1108 "dhcp6_lexer.ll"
+#line 1118 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 108:
+case 109:
 YY_RULE_SETUP
-#line 1109 "dhcp6_lexer.ll"
+#line 1119 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 109:
+case 110:
 YY_RULE_SETUP
-#line 1111 "dhcp6_lexer.ll"
+#line 1121 "dhcp6_lexer.ll"
 {
     // An integer was found.
     std::string tmp(parser6_text);
@@ -2945,9 +2964,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 110:
+case 111:
 YY_RULE_SETUP
-#line 1129 "dhcp6_lexer.ll"
+#line 1139 "dhcp6_lexer.ll"
 {
     // A floating point was found.
     std::string tmp(parser6_text);
@@ -2961,43 +2980,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 111:
+case 112:
 YY_RULE_SETUP
-#line 1142 "dhcp6_lexer.ll"
+#line 1152 "dhcp6_lexer.ll"
 {
     string tmp(parser6_text);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 112:
+case 113:
 YY_RULE_SETUP
-#line 1147 "dhcp6_lexer.ll"
+#line 1157 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 113:
+case 114:
 YY_RULE_SETUP
-#line 1151 "dhcp6_lexer.ll"
+#line 1161 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 114:
+case 115:
 YY_RULE_SETUP
-#line 1153 "dhcp6_lexer.ll"
+#line 1163 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 115:
+case 116:
 YY_RULE_SETUP
-#line 1155 "dhcp6_lexer.ll"
+#line 1165 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 116:
+case 117:
 YY_RULE_SETUP
-#line 1157 "dhcp6_lexer.ll"
+#line 1167 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1159 "dhcp6_lexer.ll"
+#line 1169 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -3021,12 +3040,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 117:
+case 118:
 YY_RULE_SETUP
-#line 1182 "dhcp6_lexer.ll"
+#line 1192 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 3030 "dhcp6_lexer.cc"
+#line 3049 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -3343,7 +3362,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 >= 889 )
+                       if ( yy_current_state >= 898 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -3376,11 +3395,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 >= 889 )
+               if ( yy_current_state >= 898 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 888);
+       yy_is_jam = (yy_current_state == 897);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4129,7 +4148,7 @@ void parser6_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1182 "dhcp6_lexer.ll"
+#line 1192 "dhcp6_lexer.ll"
 
 
 
index 15a89469f5635230ae65b0c1938958dd18b03c5a..84e809cba35e8bf71e60afac5fbaf299ca9fc28c 100644 (file)
@@ -253,24 +253,25 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         value.move< ElementPtr > (that.value);
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -289,24 +290,25 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -346,46 +348,53 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 108: // "constant string"
+            case 109: // "constant string"
 
-#line 199 "dhcp6_parser.yy" // lalr1.cc:636
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
-#line 354 "dhcp6_parser.cc" // lalr1.cc:636
+#line 356 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
 
-#line 199 "dhcp6_parser.yy" // lalr1.cc:636
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
-#line 361 "dhcp6_parser.cc" // lalr1.cc:636
+#line 363 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
 
-#line 199 "dhcp6_parser.yy" // lalr1.cc:636
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
-#line 368 "dhcp6_parser.cc" // lalr1.cc:636
+#line 370 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
 
-#line 199 "dhcp6_parser.yy" // lalr1.cc:636
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
-#line 375 "dhcp6_parser.cc" // lalr1.cc:636
+#line 377 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 125: // value
+      case 126: // value
 
-#line 199 "dhcp6_parser.yy" // lalr1.cc:636
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 382 "dhcp6_parser.cc" // lalr1.cc:636
+#line 384 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 350: // duid_type
+      case 130: // map_value
 
-#line 199 "dhcp6_parser.yy" // lalr1.cc:636
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 389 "dhcp6_parser.cc" // lalr1.cc:636
+#line 391 "dhcp6_parser.cc" // lalr1.cc:636
+        break;
+
+      case 354: // duid_type
+
+#line 201 "dhcp6_parser.yy" // lalr1.cc:636
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 398 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
 
@@ -585,24 +594,25 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -624,248 +634,254 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 208 "dhcp6_parser.yy" // lalr1.cc:859
+#line 210 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 630 "dhcp6_parser.cc" // lalr1.cc:859
+#line 640 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 209 "dhcp6_parser.yy" // lalr1.cc:859
+#line 211 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
-#line 636 "dhcp6_parser.cc" // lalr1.cc:859
+#line 646 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 210 "dhcp6_parser.yy" // lalr1.cc:859
+#line 212 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
-#line 642 "dhcp6_parser.cc" // lalr1.cc:859
+#line 652 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 211 "dhcp6_parser.yy" // lalr1.cc:859
+#line 213 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 648 "dhcp6_parser.cc" // lalr1.cc:859
+#line 658 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 212 "dhcp6_parser.yy" // lalr1.cc:859
+#line 214 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
-#line 654 "dhcp6_parser.cc" // lalr1.cc:859
+#line 664 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 213 "dhcp6_parser.yy" // lalr1.cc:859
+#line 215 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
-#line 660 "dhcp6_parser.cc" // lalr1.cc:859
+#line 670 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 214 "dhcp6_parser.yy" // lalr1.cc:859
+#line 216 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
-#line 666 "dhcp6_parser.cc" // lalr1.cc:859
+#line 676 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 215 "dhcp6_parser.yy" // lalr1.cc:859
+#line 217 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 672 "dhcp6_parser.cc" // lalr1.cc:859
+#line 682 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 216 "dhcp6_parser.yy" // lalr1.cc:859
+#line 218 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 678 "dhcp6_parser.cc" // lalr1.cc:859
+#line 688 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 217 "dhcp6_parser.yy" // lalr1.cc:859
+#line 219 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 684 "dhcp6_parser.cc" // lalr1.cc:859
+#line 694 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 218 "dhcp6_parser.yy" // lalr1.cc:859
+#line 220 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 690 "dhcp6_parser.cc" // lalr1.cc:859
+#line 700 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 226 "dhcp6_parser.yy" // lalr1.cc:859
+#line 228 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 696 "dhcp6_parser.cc" // lalr1.cc:859
+#line 706 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 25:
-#line 227 "dhcp6_parser.yy" // lalr1.cc:859
+#line 229 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 702 "dhcp6_parser.cc" // lalr1.cc:859
+#line 712 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 228 "dhcp6_parser.yy" // lalr1.cc:859
+#line 230 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 708 "dhcp6_parser.cc" // lalr1.cc:859
+#line 718 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 27:
-#line 229 "dhcp6_parser.yy" // lalr1.cc:859
+#line 231 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 714 "dhcp6_parser.cc" // lalr1.cc:859
+#line 724 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 230 "dhcp6_parser.yy" // lalr1.cc:859
+#line 232 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 720 "dhcp6_parser.cc" // lalr1.cc:859
+#line 730 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 231 "dhcp6_parser.yy" // lalr1.cc:859
+#line 233 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 726 "dhcp6_parser.cc" // lalr1.cc:859
+#line 736 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 232 "dhcp6_parser.yy" // lalr1.cc:859
+#line 234 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 732 "dhcp6_parser.cc" // lalr1.cc:859
+#line 742 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 235 "dhcp6_parser.yy" // lalr1.cc:859
+#line 237 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 741 "dhcp6_parser.cc" // lalr1.cc:859
+#line 751 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 240 "dhcp6_parser.yy" // lalr1.cc:859
+#line 242 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 752 "dhcp6_parser.cc" // lalr1.cc:859
+#line 762 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 245 "dhcp6_parser.yy" // lalr1.cc:859
+#line 247 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 762 "dhcp6_parser.cc" // lalr1.cc:859
+#line 772 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 36:
-#line 256 "dhcp6_parser.yy" // lalr1.cc:859
+  case 34:
+#line 253 "dhcp6_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
+#line 778 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 37:
+#line 260 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 771 "dhcp6_parser.cc" // lalr1.cc:859
+#line 787 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 37:
-#line 260 "dhcp6_parser.yy" // lalr1.cc:859
+  case 38:
+#line 264 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 781 "dhcp6_parser.cc" // lalr1.cc:859
+#line 797 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 38:
-#line 267 "dhcp6_parser.yy" // lalr1.cc:859
+  case 39:
+#line 271 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 790 "dhcp6_parser.cc" // lalr1.cc:859
+#line 806 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 39:
-#line 270 "dhcp6_parser.yy" // lalr1.cc:859
+  case 40:
+#line 274 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 798 "dhcp6_parser.cc" // lalr1.cc:859
+#line 814 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 40:
-#line 275 "dhcp6_parser.yy" // lalr1.cc:859
+  case 41:
+#line 279 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 806 "dhcp6_parser.cc" // lalr1.cc:859
+#line 822 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 41:
-#line 277 "dhcp6_parser.yy" // lalr1.cc:859
+  case 42:
+#line 281 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 815 "dhcp6_parser.cc" // lalr1.cc:859
+#line 831 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 44:
-#line 286 "dhcp6_parser.yy" // lalr1.cc:859
+  case 45:
+#line 290 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 824 "dhcp6_parser.cc" // lalr1.cc:859
+#line 840 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 45:
-#line 290 "dhcp6_parser.yy" // lalr1.cc:859
+  case 46:
+#line 294 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 833 "dhcp6_parser.cc" // lalr1.cc:859
+#line 849 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 46:
-#line 301 "dhcp6_parser.yy" // lalr1.cc:859
+  case 47:
+#line 305 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 844 "dhcp6_parser.cc" // lalr1.cc:859
+#line 860 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 47:
-#line 311 "dhcp6_parser.yy" // lalr1.cc:859
+  case 48:
+#line 315 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 855 "dhcp6_parser.cc" // lalr1.cc:859
+#line 871 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 48:
-#line 316 "dhcp6_parser.yy" // lalr1.cc:859
+  case 49:
+#line 320 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 865 "dhcp6_parser.cc" // lalr1.cc:859
+#line 881 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 56:
-#line 335 "dhcp6_parser.yy" // lalr1.cc:859
+  case 57:
+#line 339 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -874,11 +890,11 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP6);
 }
-#line 878 "dhcp6_parser.cc" // lalr1.cc:859
+#line 894 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 57:
-#line 342 "dhcp6_parser.yy" // lalr1.cc:859
+  case 58:
+#line 346 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -886,571 +902,571 @@ namespace isc { namespace dhcp {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 890 "dhcp6_parser.cc" // lalr1.cc:859
+#line 906 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 58:
-#line 352 "dhcp6_parser.yy" // lalr1.cc:859
+  case 59:
+#line 356 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 900 "dhcp6_parser.cc" // lalr1.cc:859
+#line 916 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 59:
-#line 356 "dhcp6_parser.yy" // lalr1.cc:859
+  case 60:
+#line 360 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 908 "dhcp6_parser.cc" // lalr1.cc:859
+#line 924 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 84:
-#line 390 "dhcp6_parser.yy" // lalr1.cc:859
+  case 85:
+#line 394 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
 }
-#line 917 "dhcp6_parser.cc" // lalr1.cc:859
+#line 933 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 85:
-#line 395 "dhcp6_parser.yy" // lalr1.cc:859
+  case 86:
+#line 399 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 926 "dhcp6_parser.cc" // lalr1.cc:859
+#line 942 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 86:
-#line 400 "dhcp6_parser.yy" // lalr1.cc:859
+  case 87:
+#line 404 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 935 "dhcp6_parser.cc" // lalr1.cc:859
+#line 951 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 87:
-#line 405 "dhcp6_parser.yy" // lalr1.cc:859
+  case 88:
+#line 409 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 944 "dhcp6_parser.cc" // lalr1.cc:859
+#line 960 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 88:
-#line 410 "dhcp6_parser.yy" // lalr1.cc:859
+  case 89:
+#line 414 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 953 "dhcp6_parser.cc" // lalr1.cc:859
+#line 969 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 89:
-#line 415 "dhcp6_parser.yy" // lalr1.cc:859
+  case 90:
+#line 419 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 964 "dhcp6_parser.cc" // lalr1.cc:859
+#line 980 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 90:
-#line 420 "dhcp6_parser.yy" // lalr1.cc:859
+  case 91:
+#line 424 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 973 "dhcp6_parser.cc" // lalr1.cc:859
+#line 989 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 91:
-#line 425 "dhcp6_parser.yy" // lalr1.cc:859
+  case 92:
+#line 429 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 983 "dhcp6_parser.cc" // lalr1.cc:859
+#line 999 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 92:
-#line 429 "dhcp6_parser.yy" // lalr1.cc:859
+  case 93:
+#line 433 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 991 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1007 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 93:
-#line 433 "dhcp6_parser.yy" // lalr1.cc:859
+  case 94:
+#line 437 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1002 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1018 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 94:
-#line 438 "dhcp6_parser.yy" // lalr1.cc:859
+  case 95:
+#line 442 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1011 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1027 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 95:
-#line 443 "dhcp6_parser.yy" // lalr1.cc:859
+  case 96:
+#line 447 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1022 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1038 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 96:
-#line 448 "dhcp6_parser.yy" // lalr1.cc:859
+  case 97:
+#line 452 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1031 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1047 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 97:
-#line 453 "dhcp6_parser.yy" // lalr1.cc:859
+  case 98:
+#line 457 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1042 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1058 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 98:
-#line 458 "dhcp6_parser.yy" // lalr1.cc:859
+  case 99:
+#line 462 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1051 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1067 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 478 "dhcp6_parser.yy" // lalr1.cc:859
+  case 111:
+#line 482 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1059 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1075 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 111:
-#line 480 "dhcp6_parser.yy" // lalr1.cc:859
+  case 112:
+#line 484 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1069 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1085 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 112:
-#line 486 "dhcp6_parser.yy" // lalr1.cc:859
+  case 113:
+#line 490 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1077 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1093 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 113:
-#line 488 "dhcp6_parser.yy" // lalr1.cc:859
+  case 114:
+#line 492 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1087 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1103 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 114:
-#line 494 "dhcp6_parser.yy" // lalr1.cc:859
+  case 115:
+#line 498 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1095 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1111 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 115:
-#line 496 "dhcp6_parser.yy" // lalr1.cc:859
+  case 116:
+#line 500 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1105 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1121 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 116:
-#line 502 "dhcp6_parser.yy" // lalr1.cc:859
+  case 117:
+#line 506 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1113 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1129 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 117:
-#line 504 "dhcp6_parser.yy" // lalr1.cc:859
+  case 118:
+#line 508 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1123 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1139 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 510 "dhcp6_parser.yy" // lalr1.cc:859
+  case 119:
+#line 514 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1131 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1147 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 512 "dhcp6_parser.yy" // lalr1.cc:859
+  case 120:
+#line 516 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1141 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1157 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 518 "dhcp6_parser.yy" // lalr1.cc:859
+  case 121:
+#line 522 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1150 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1166 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 121:
-#line 523 "dhcp6_parser.yy" // lalr1.cc:859
+  case 122:
+#line 527 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1159 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1175 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 122:
-#line 528 "dhcp6_parser.yy" // lalr1.cc:859
+  case 123:
+#line 532 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1168 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1184 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 123:
-#line 533 "dhcp6_parser.yy" // lalr1.cc:859
+  case 124:
+#line 537 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 1179 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1195 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 538 "dhcp6_parser.yy" // lalr1.cc:859
+  case 125:
+#line 542 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1188 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1204 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 551 "dhcp6_parser.yy" // lalr1.cc:859
+  case 130:
+#line 555 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1197 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1213 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 556 "dhcp6_parser.yy" // lalr1.cc:859
+  case 131:
+#line 560 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1206 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1222 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 561 "dhcp6_parser.yy" // lalr1.cc:859
+  case 132:
+#line 565 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1217 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1233 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 566 "dhcp6_parser.yy" // lalr1.cc:859
+  case 133:
+#line 570 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1226 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1242 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 579 "dhcp6_parser.yy" // lalr1.cc:859
+  case 138:
+#line 583 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1235 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1251 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 584 "dhcp6_parser.yy" // lalr1.cc:859
+  case 139:
+#line 588 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1246 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1262 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 589 "dhcp6_parser.yy" // lalr1.cc:859
+  case 140:
+#line 593 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1255 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1271 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 594 "dhcp6_parser.yy" // lalr1.cc:859
+  case 141:
+#line 598 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1266 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1282 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 599 "dhcp6_parser.yy" // lalr1.cc:859
+  case 142:
+#line 603 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1275 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 612 "dhcp6_parser.yy" // lalr1.cc:859
+  case 147:
+#line 616 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1285 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1301 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 616 "dhcp6_parser.yy" // lalr1.cc:859
+  case 148:
+#line 620 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1293 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1309 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 620 "dhcp6_parser.yy" // lalr1.cc:859
+  case 149:
+#line 624 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1303 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1319 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 624 "dhcp6_parser.yy" // lalr1.cc:859
+  case 150:
+#line 628 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1311 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1327 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 155:
-#line 637 "dhcp6_parser.yy" // lalr1.cc:859
+  case 156:
+#line 641 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1319 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1335 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 156:
-#line 639 "dhcp6_parser.yy" // lalr1.cc:859
+  case 157:
+#line 643 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1329 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1345 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 645 "dhcp6_parser.yy" // lalr1.cc:859
+  case 158:
+#line 649 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1337 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1353 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 647 "dhcp6_parser.yy" // lalr1.cc:859
+  case 159:
+#line 651 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1346 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1362 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 653 "dhcp6_parser.yy" // lalr1.cc:859
+  case 160:
+#line 657 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
 }
-#line 1357 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 658 "dhcp6_parser.yy" // lalr1.cc:859
+  case 161:
+#line 662 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1366 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1382 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 169:
-#line 675 "dhcp6_parser.yy" // lalr1.cc:859
+  case 170:
+#line 679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reclaim-timer-wait-time", value);
 }
-#line 1375 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1391 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 680 "dhcp6_parser.yy" // lalr1.cc:859
+  case 171:
+#line 684 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
 }
-#line 1384 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1400 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 685 "dhcp6_parser.yy" // lalr1.cc:859
+  case 172:
+#line 689 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hold-reclaimed-time", value);
 }
-#line 1393 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1409 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 690 "dhcp6_parser.yy" // lalr1.cc:859
+  case 173:
+#line 694 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-leases", value);
 }
-#line 1402 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1418 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 695 "dhcp6_parser.yy" // lalr1.cc:859
+  case 174:
+#line 699 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-reclaim-time", value);
 }
-#line 1411 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1427 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 174:
-#line 700 "dhcp6_parser.yy" // lalr1.cc:859
+  case 175:
+#line 704 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
 }
-#line 1420 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1436 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 175:
-#line 708 "dhcp6_parser.yy" // lalr1.cc:859
+  case 176:
+#line 712 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 1431 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1447 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 176:
-#line 713 "dhcp6_parser.yy" // lalr1.cc:859
+  case 177:
+#line 717 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1440 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1456 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 181:
-#line 733 "dhcp6_parser.yy" // lalr1.cc:859
+  case 182:
+#line 737 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1450 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1466 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 182:
-#line 737 "dhcp6_parser.yy" // lalr1.cc:859
+  case 183:
+#line 741 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1469,1183 +1485,1200 @@ namespace isc { namespace dhcp {
     // }
     ctx.stack_.pop_back();
 }
-#line 1473 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1489 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 183:
-#line 756 "dhcp6_parser.yy" // lalr1.cc:859
+  case 184:
+#line 760 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1483 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1499 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 184:
-#line 760 "dhcp6_parser.yy" // lalr1.cc:859
+  case 185:
+#line 764 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1491 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1507 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 204:
-#line 789 "dhcp6_parser.yy" // lalr1.cc:859
+  case 205:
+#line 793 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1499 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1515 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 205:
-#line 791 "dhcp6_parser.yy" // lalr1.cc:859
+  case 206:
+#line 795 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1509 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1525 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 206:
-#line 797 "dhcp6_parser.yy" // lalr1.cc:859
+  case 207:
+#line 801 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1517 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1533 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 207:
-#line 799 "dhcp6_parser.yy" // lalr1.cc:859
+  case 208:
+#line 803 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1527 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1543 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 805 "dhcp6_parser.yy" // lalr1.cc:859
+  case 209:
+#line 809 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1535 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1551 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 807 "dhcp6_parser.yy" // lalr1.cc:859
+  case 210:
+#line 811 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1545 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1561 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 813 "dhcp6_parser.yy" // lalr1.cc:859
+  case 211:
+#line 817 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1553 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1569 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 815 "dhcp6_parser.yy" // lalr1.cc:859
+  case 212:
+#line 819 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1563 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1579 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 821 "dhcp6_parser.yy" // lalr1.cc:859
+  case 213:
+#line 825 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1571 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1587 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 823 "dhcp6_parser.yy" // lalr1.cc:859
+  case 214:
+#line 827 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservation-mode", rm);
     ctx.leave();
 }
-#line 1581 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1597 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 829 "dhcp6_parser.yy" // lalr1.cc:859
+  case 215:
+#line 833 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1590 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1606 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 215:
-#line 834 "dhcp6_parser.yy" // lalr1.cc:859
+  case 216:
+#line 838 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1599 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1615 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 216:
-#line 843 "dhcp6_parser.yy" // lalr1.cc:859
+  case 217:
+#line 847 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1610 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1626 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 217:
-#line 848 "dhcp6_parser.yy" // lalr1.cc:859
+  case 218:
+#line 852 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1619 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1635 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 865 "dhcp6_parser.yy" // lalr1.cc:859
+  case 223:
+#line 869 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1629 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1645 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 223:
-#line 869 "dhcp6_parser.yy" // lalr1.cc:859
+  case 224:
+#line 873 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1637 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1653 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 224:
-#line 876 "dhcp6_parser.yy" // lalr1.cc:859
+  case 225:
+#line 880 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1647 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1663 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 225:
-#line 880 "dhcp6_parser.yy" // lalr1.cc:859
+  case 226:
+#line 884 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1655 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1671 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 239:
-#line 906 "dhcp6_parser.yy" // lalr1.cc:859
+  case 240:
+#line 910 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1664 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1680 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 913 "dhcp6_parser.yy" // lalr1.cc:859
+  case 242:
+#line 917 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1672 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1688 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 915 "dhcp6_parser.yy" // lalr1.cc:859
+  case 243:
+#line 919 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1682 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1698 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 921 "dhcp6_parser.yy" // lalr1.cc:859
+  case 244:
+#line 925 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1690 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1706 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 244:
-#line 923 "dhcp6_parser.yy" // lalr1.cc:859
+  case 245:
+#line 927 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1700 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1716 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 929 "dhcp6_parser.yy" // lalr1.cc:859
+  case 246:
+#line 933 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1708 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1724 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 931 "dhcp6_parser.yy" // lalr1.cc:859
+  case 247:
+#line 935 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1718 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1734 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 939 "dhcp6_parser.yy" // lalr1.cc:859
+  case 249:
+#line 943 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1726 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1742 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 941 "dhcp6_parser.yy" // lalr1.cc:859
+  case 250:
+#line 945 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1736 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1752 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 250:
-#line 947 "dhcp6_parser.yy" // lalr1.cc:859
+  case 251:
+#line 951 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1745 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1761 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 251:
-#line 956 "dhcp6_parser.yy" // lalr1.cc:859
+  case 252:
+#line 960 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 1756 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1772 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 252:
-#line 961 "dhcp6_parser.yy" // lalr1.cc:859
+  case 253:
+#line 965 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1765 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1781 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 257:
-#line 980 "dhcp6_parser.yy" // lalr1.cc:859
+  case 258:
+#line 984 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1775 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 258:
-#line 984 "dhcp6_parser.yy" // lalr1.cc:859
+  case 259:
+#line 988 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1783 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1799 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 259:
-#line 991 "dhcp6_parser.yy" // lalr1.cc:859
+  case 260:
+#line 995 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1793 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1809 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 260:
-#line 995 "dhcp6_parser.yy" // lalr1.cc:859
+  case 261:
+#line 999 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1801 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1817 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 272:
-#line 1024 "dhcp6_parser.yy" // lalr1.cc:859
+  case 273:
+#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1809 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1825 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 273:
-#line 1026 "dhcp6_parser.yy" // lalr1.cc:859
+  case 274:
+#line 1030 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 1819 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1835 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 276:
-#line 1036 "dhcp6_parser.yy" // lalr1.cc:859
+  case 277:
+#line 1040 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 1828 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1844 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 277:
-#line 1044 "dhcp6_parser.yy" // lalr1.cc:859
+  case 278:
+#line 1048 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 1839 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1855 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 278:
-#line 1049 "dhcp6_parser.yy" // lalr1.cc:859
+  case 279:
+#line 1053 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1848 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1864 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1064 "dhcp6_parser.yy" // lalr1.cc:859
+  case 284:
+#line 1068 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1858 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1874 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1068 "dhcp6_parser.yy" // lalr1.cc:859
+  case 285:
+#line 1072 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1866 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1882 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 285:
-#line 1072 "dhcp6_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1076 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1876 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1892 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 286:
-#line 1076 "dhcp6_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1080 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1884 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1900 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1089 "dhcp6_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1094 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1892 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1908 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 293:
-#line 1091 "dhcp6_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1096 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 1902 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1918 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 294:
-#line 1100 "dhcp6_parser.yy" // lalr1.cc:859
+  case 296:
+#line 1102 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1926 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 297:
+#line 1104 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
+    ctx.leave();
+}
+#line 1935 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 298:
+#line 1112 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 1913 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1946 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 295:
-#line 1105 "dhcp6_parser.yy" // lalr1.cc:859
+  case 299:
+#line 1117 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1922 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1955 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 300:
-#line 1120 "dhcp6_parser.yy" // lalr1.cc:859
+  case 304:
+#line 1132 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1932 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1965 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 301:
-#line 1124 "dhcp6_parser.yy" // lalr1.cc:859
+  case 305:
+#line 1136 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1940 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1973 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 302:
-#line 1128 "dhcp6_parser.yy" // lalr1.cc:859
+  case 306:
+#line 1140 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1950 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1983 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 303:
-#line 1132 "dhcp6_parser.yy" // lalr1.cc:859
+  case 307:
+#line 1144 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1958 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1991 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 313:
-#line 1149 "dhcp6_parser.yy" // lalr1.cc:859
+  case 318:
+#line 1162 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1966 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1999 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 314:
-#line 1151 "dhcp6_parser.yy" // lalr1.cc:859
+  case 319:
+#line 1164 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 1976 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2009 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 315:
-#line 1157 "dhcp6_parser.yy" // lalr1.cc:859
+  case 320:
+#line 1170 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 1985 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2018 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 316:
-#line 1162 "dhcp6_parser.yy" // lalr1.cc:859
+  case 321:
+#line 1175 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1993 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2026 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1164 "dhcp6_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1177 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
     ctx.leave();
 }
-#line 2003 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2036 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1170 "dhcp6_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1183 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 2012 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2045 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 319:
-#line 1175 "dhcp6_parser.yy" // lalr1.cc:859
+  case 324:
+#line 1188 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 2021 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2054 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 320:
-#line 1183 "dhcp6_parser.yy" // lalr1.cc:859
+  case 325:
+#line 1196 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 2032 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2065 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 321:
-#line 1188 "dhcp6_parser.yy" // lalr1.cc:859
+  case 326:
+#line 1201 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2041 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2074 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 326:
-#line 1201 "dhcp6_parser.yy" // lalr1.cc:859
+  case 331:
+#line 1214 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2051 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2084 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 327:
-#line 1205 "dhcp6_parser.yy" // lalr1.cc:859
+  case 332:
+#line 1218 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2059 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2092 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 328:
-#line 1209 "dhcp6_parser.yy" // lalr1.cc:859
+  case 333:
+#line 1222 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2069 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2102 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 329:
-#line 1213 "dhcp6_parser.yy" // lalr1.cc:859
+  case 334:
+#line 1226 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 2077 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2110 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 342:
-#line 1236 "dhcp6_parser.yy" // lalr1.cc:859
+  case 347:
+#line 1249 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2088 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2121 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 343:
-#line 1241 "dhcp6_parser.yy" // lalr1.cc:859
+  case 348:
+#line 1254 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2097 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2130 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 344:
-#line 1246 "dhcp6_parser.yy" // lalr1.cc:859
+  case 349:
+#line 1259 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2108 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2141 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1251 "dhcp6_parser.yy" // lalr1.cc:859
+  case 350:
+#line 1264 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2117 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2150 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 346:
-#line 1256 "dhcp6_parser.yy" // lalr1.cc:859
+  case 351:
+#line 1269 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2125 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2158 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 347:
-#line 1258 "dhcp6_parser.yy" // lalr1.cc:859
+  case 352:
+#line 1271 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2135 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2168 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 348:
-#line 1264 "dhcp6_parser.yy" // lalr1.cc:859
+  case 353:
+#line 1277 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2143 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2176 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 349:
-#line 1266 "dhcp6_parser.yy" // lalr1.cc:859
+  case 354:
+#line 1279 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2153 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2186 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 350:
-#line 1272 "dhcp6_parser.yy" // lalr1.cc:859
+  case 355:
+#line 1285 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2161 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2194 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1274 "dhcp6_parser.yy" // lalr1.cc:859
+  case 356:
+#line 1287 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2171 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2204 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 352:
-#line 1280 "dhcp6_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1293 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2182 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2215 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 353:
-#line 1285 "dhcp6_parser.yy" // lalr1.cc:859
+  case 358:
+#line 1298 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2191 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2224 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 354:
-#line 1293 "dhcp6_parser.yy" // lalr1.cc:859
+  case 359:
+#line 1306 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2202 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2235 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 355:
-#line 1298 "dhcp6_parser.yy" // lalr1.cc:859
+  case 360:
+#line 1311 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2211 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2244 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 356:
-#line 1303 "dhcp6_parser.yy" // lalr1.cc:859
+  case 361:
+#line 1316 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2219 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2252 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 357:
-#line 1305 "dhcp6_parser.yy" // lalr1.cc:859
+  case 362:
+#line 1318 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2229 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2262 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 358:
-#line 1314 "dhcp6_parser.yy" // lalr1.cc:859
+  case 363:
+#line 1327 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2240 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2273 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 359:
-#line 1319 "dhcp6_parser.yy" // lalr1.cc:859
+  case 364:
+#line 1332 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2249 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2282 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 362:
-#line 1328 "dhcp6_parser.yy" // lalr1.cc:859
+  case 367:
+#line 1341 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2259 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2292 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1332 "dhcp6_parser.yy" // lalr1.cc:859
+  case 368:
+#line 1345 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2267 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2300 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 373:
-#line 1352 "dhcp6_parser.yy" // lalr1.cc:859
+  case 378:
+#line 1365 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2275 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2308 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 374:
-#line 1354 "dhcp6_parser.yy" // lalr1.cc:859
+  case 379:
+#line 1367 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2285 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2318 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 375:
-#line 1363 "dhcp6_parser.yy" // lalr1.cc:859
+  case 380:
+#line 1376 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2296 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2329 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 376:
-#line 1368 "dhcp6_parser.yy" // lalr1.cc:859
+  case 381:
+#line 1381 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2305 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2338 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1386 "dhcp6_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1399 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 2313 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2346 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1388 "dhcp6_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1401 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2322 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2355 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1393 "dhcp6_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1406 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 2328 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2361 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 389:
-#line 1394 "dhcp6_parser.yy" // lalr1.cc:859
+  case 394:
+#line 1407 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 2334 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2367 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 390:
-#line 1395 "dhcp6_parser.yy" // lalr1.cc:859
+  case 395:
+#line 1408 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 2340 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1398 "dhcp6_parser.yy" // lalr1.cc:859
+  case 396:
+#line 1411 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2349 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2382 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1403 "dhcp6_parser.yy" // lalr1.cc:859
+  case 397:
+#line 1416 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2357 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2390 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1405 "dhcp6_parser.yy" // lalr1.cc:859
+  case 398:
+#line 1418 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2367 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2400 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1411 "dhcp6_parser.yy" // lalr1.cc:859
+  case 399:
+#line 1424 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2376 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2409 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1416 "dhcp6_parser.yy" // lalr1.cc:859
+  case 400:
+#line 1429 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2385 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2418 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 396:
-#line 1423 "dhcp6_parser.yy" // lalr1.cc:859
+  case 401:
+#line 1436 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2394 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2427 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 397:
-#line 1430 "dhcp6_parser.yy" // lalr1.cc:859
+  case 402:
+#line 1443 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2405 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2438 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 398:
-#line 1435 "dhcp6_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1448 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2414 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2447 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 403:
-#line 1448 "dhcp6_parser.yy" // lalr1.cc:859
+  case 408:
+#line 1461 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2422 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2455 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 404:
-#line 1450 "dhcp6_parser.yy" // lalr1.cc:859
+  case 409:
+#line 1463 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2432 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2465 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 405:
-#line 1456 "dhcp6_parser.yy" // lalr1.cc:859
+  case 410:
+#line 1469 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2440 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2473 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 406:
-#line 1458 "dhcp6_parser.yy" // lalr1.cc:859
+  case 411:
+#line 1471 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2450 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2483 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 407:
-#line 1466 "dhcp6_parser.yy" // lalr1.cc:859
+  case 412:
+#line 1479 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2461 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2494 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 408:
-#line 1471 "dhcp6_parser.yy" // lalr1.cc:859
+  case 413:
+#line 1484 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2470 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2503 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 409:
-#line 1478 "dhcp6_parser.yy" // lalr1.cc:859
+  case 414:
+#line 1491 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2478 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2511 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 410:
-#line 1480 "dhcp6_parser.yy" // lalr1.cc:859
+  case 415:
+#line 1493 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2487 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2520 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 411:
-#line 1485 "dhcp6_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1498 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2495 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2528 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1487 "dhcp6_parser.yy" // lalr1.cc:859
+  case 417:
+#line 1500 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2504 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2537 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1497 "dhcp6_parser.yy" // lalr1.cc:859
+  case 418:
+#line 1510 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 2515 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2548 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 414:
-#line 1502 "dhcp6_parser.yy" // lalr1.cc:859
+  case 419:
+#line 1515 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2524 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2557 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 418:
-#line 1519 "dhcp6_parser.yy" // lalr1.cc:859
+  case 423:
+#line 1532 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 2535 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2568 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 419:
-#line 1524 "dhcp6_parser.yy" // lalr1.cc:859
+  case 424:
+#line 1537 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2544 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2577 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 422:
-#line 1536 "dhcp6_parser.yy" // lalr1.cc:859
+  case 427:
+#line 1549 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 2554 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2587 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 423:
-#line 1540 "dhcp6_parser.yy" // lalr1.cc:859
+  case 428:
+#line 1553 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2562 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2595 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 431:
-#line 1555 "dhcp6_parser.yy" // lalr1.cc:859
+  case 436:
+#line 1568 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 2571 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2604 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 432:
-#line 1559 "dhcp6_parser.yy" // lalr1.cc:859
+  case 437:
+#line 1572 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2579 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2612 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 433:
-#line 1561 "dhcp6_parser.yy" // lalr1.cc:859
+  case 438:
+#line 1574 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 2589 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2622 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 434:
-#line 1567 "dhcp6_parser.yy" // lalr1.cc:859
+  case 439:
+#line 1580 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 2600 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2633 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 435:
-#line 1572 "dhcp6_parser.yy" // lalr1.cc:859
+  case 440:
+#line 1585 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2609 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2642 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 438:
-#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
+  case 443:
+#line 1594 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2619 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2652 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 439:
-#line 1585 "dhcp6_parser.yy" // lalr1.cc:859
+  case 444:
+#line 1598 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2627 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2660 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 442:
-#line 1593 "dhcp6_parser.yy" // lalr1.cc:859
+  case 447:
+#line 1606 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2635 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2668 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 443:
-#line 1595 "dhcp6_parser.yy" // lalr1.cc:859
+  case 448:
+#line 1608 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 2645 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2678 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 2649 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2682 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -2900,88 +2933,88 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp6Parser::yypact_ninf_ = -427;
+  const short int Dhcp6Parser::yypact_ninf_ = -432;
 
   const signed char Dhcp6Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp6Parser::yypact_[] =
   {
-     107,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,    29,    21,    32,    56,    58,    60,    67,    71,
-      73,    83,   103,   108,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,    21,   -56,    12,    59,
-      42,    11,    -8,    95,    93,    61,    72,    50,  -427,   117,
-     124,   129,   134,   148,  -427,  -427,  -427,  -427,   153,  -427,
-      45,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   196,
-     198,   237,   245,   246,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,   265,  -427,  -427,  -427,    47,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   217,  -427,  -427,  -427,  -427,  -427,  -427,   266,
-     267,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-      63,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,   118,  -427,  -427,
-    -427,   268,  -427,   270,   272,  -427,  -427,   138,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   250,   274,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,   275,  -427,  -427,  -427,   276,  -427,  -427,
-     273,   279,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,   280,  -427,  -427,  -427,  -427,   277,   283,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   156,
-    -427,  -427,  -427,  -427,    21,    21,  -427,   170,   284,   285,
-     286,   287,  -427,    12,  -427,   288,   289,   290,   174,   187,
-     192,   193,   194,   291,   293,   294,   295,   296,   300,   301,
-     302,   303,   304,   200,   306,   307,    59,  -427,   308,  -427,
-       8,   309,   310,   311,   312,   313,   209,   176,   315,   316,
-     317,   318,    11,  -427,   319,    -8,  -427,   320,   216,   322,
-     218,   219,    95,  -427,   325,   326,   327,   328,   329,   330,
-    -427,    93,   331,   332,   231,   335,   337,   338,   234,  -427,
-      61,   339,   235,  -427,    72,   340,   343,    82,  -427,  -427,
-    -427,   344,   342,   346,    21,    21,  -427,   347,   348,   349,
-    -427,  -427,  -427,  -427,  -427,   345,   352,   355,   356,   357,
-     358,   359,   360,   361,   364,  -427,   365,   366,  -427,   357,
-    -427,  -427,  -427,  -427,   367,   363,  -427,  -427,  -427,   362,
-     369,   269,   271,   278,  -427,  -427,   281,   282,   373,   374,
-    -427,   292,  -427,   297,  -427,   298,  -427,  -427,  -427,   357,
-     357,   357,   299,   314,   321,  -427,   323,   324,  -427,   333,
-     334,   336,  -427,  -427,   341,  -427,  -427,   350,    21,  -427,
-      21,    59,   305,  -427,  -427,    42,    26,    26,   375,   376,
-     378,   -29,  -427,  -427,   123,    20,   380,   146,    80,   181,
-     -56,  -427,   384,  -427,     8,   385,   386,  -427,  -427,  -427,
-    -427,  -427,   387,   351,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   163,  -427,   171,  -427,  -427,   372,  -427,  -427,
-    -427,  -427,   392,   393,   394,  -427,   175,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,   178,  -427,   395,   388,
-    -427,  -427,   396,   400,  -427,  -427,   398,   405,  -427,  -427,
-    -427,    86,  -427,  -427,  -427,    21,  -427,  -427,   162,  -427,
-    -427,  -427,   233,  -427,   403,   407,  -427,   408,   410,   411,
-     413,   414,   415,   188,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,   416,   417,   419,  -427,  -427,   189,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,   190,  -427,  -427,
-    -427,   191,   353,  -427,  -427,   418,   422,  -427,  -427,   420,
-     424,  -427,  -427,   427,   425,  -427,  -427,   391,  -427,   426,
-     305,  -427,  -427,   430,   431,   432,   433,   354,   368,   370,
-      26,  -427,  -427,    11,  -427,   375,    61,  -427,   376,    72,
-    -427,   378,   -29,  -427,   434,   123,  -427,    20,  -427,    50,
-    -427,   380,   371,   377,   379,   381,   382,   383,   146,  -427,
-     435,   439,   389,   390,   397,    80,  -427,   441,   442,   181,
-    -427,  -427,  -427,    -8,  -427,   385,    95,  -427,   386,    93,
-    -427,   387,   443,  -427,   445,  -427,   399,   401,   402,   404,
-    -427,  -427,  -427,  -427,   220,  -427,   440,  -427,   444,  -427,
-    -427,  -427,  -427,  -427,   221,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,   186,   406,  -427,  -427,  -427,  -427,   409,
-     412,  -427,   223,  -427,   224,  -427,   446,  -427,   421,   448,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-     240,  -427,    79,   448,  -427,  -427,   447,  -427,  -427,  -427,
-     230,  -427,  -427,  -427,  -427,  -427,   449,   423,   452,    79,
-    -427,   454,  -427,   428,  -427,   450,  -427,  -427,   254,  -427,
-     429,   450,  -427,  -427,   232,  -427,  -427,   456,   429,  -427,
-     436,  -427,  -427
+     101,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,    43,    19,    40,    89,   108,   110,   138,   152,
+     154,   163,   165,   174,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,    19,    80,    17,    65,
+      47,    16,    66,     7,    77,    67,    39,    -8,  -432,   190,
+     210,   216,   220,   229,  -432,  -432,  -432,  -432,   234,  -432,
+      54,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,   238,
+     247,   250,   260,   263,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,   267,  -432,  -432,  -432,   119,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,   264,  -432,  -432,  -432,  -432,  -432,  -432,   269,
+     270,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+     144,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,   150,  -432,
+    -432,  -432,  -432,   271,  -432,   272,   273,  -432,  -432,  -432,
+     170,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,   274,   275,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,   276,  -432,  -432,  -432,
+     279,  -432,  -432,   277,   281,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,   282,  -432,  -432,  -432,
+    -432,   280,   284,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,   176,  -432,  -432,  -432,  -432,    19,    19,  -432,
+     183,   285,   286,   287,   289,  -432,    17,  -432,   290,   291,
+     292,   188,   191,   192,   193,   194,   293,   295,   296,   301,
+     302,   303,   304,   305,   306,   307,   202,   309,   310,    65,
+    -432,   311,  -432,   114,   312,   313,   314,   315,   316,   212,
+     213,   317,   319,   320,   322,    16,  -432,   323,   324,    66,
+    -432,   325,   222,   326,   223,   224,     7,  -432,   327,   331,
+     332,   333,   334,   335,  -432,    77,   336,   337,   232,   341,
+     342,   343,   236,  -432,    67,   345,   239,  -432,    39,   346,
+     348,   178,  -432,  -432,  -432,   349,   347,   351,    19,    19,
+    -432,   352,   353,   354,  -432,  -432,  -432,  -432,  -432,   350,
+     357,   360,   361,   362,   363,   364,   365,   366,   369,  -432,
+     370,   371,  -432,   362,  -432,  -432,  -432,  -432,   372,   368,
+    -432,  -432,  -432,   367,   374,   278,   283,   288,  -432,  -432,
+     294,   297,   377,   376,  -432,   298,   378,  -432,   299,  -432,
+     300,  -432,  -432,  -432,   362,   362,   362,   308,   318,   321,
+    -432,   328,   329,  -432,   330,   338,   339,  -432,  -432,   340,
+    -432,  -432,   344,    19,  -432,    19,    65,   355,  -432,  -432,
+      47,    14,    14,   379,   381,   383,   -25,  -432,  -432,    23,
+      76,   384,    93,    27,   181,    80,  -432,   380,  -432,   114,
+     386,   387,  -432,  -432,  -432,  -432,  -432,   388,   356,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,   177,
+    -432,   179,  -432,  -432,   390,  -432,  -432,  -432,  -432,   392,
+     395,   396,  -432,   180,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,   189,  -432,   398,   399,  -432,  -432,   404,
+     402,  -432,  -432,   405,   409,  -432,  -432,  -432,    52,  -432,
+    -432,  -432,    19,  -432,  -432,    74,  -432,  -432,  -432,   143,
+    -432,   407,   411,  -432,   397,   412,   415,   417,   419,   420,
+     207,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+     421,   422,   424,  -432,  -432,   208,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,   209,  -432,  -432,  -432,   211,   358,
+    -432,  -432,   423,   428,  -432,  -432,   426,   430,  -432,  -432,
+     429,   431,  -432,  -432,   432,  -432,   437,   355,  -432,  -432,
+     438,   439,   440,   441,   359,   373,   375,    14,  -432,  -432,
+      16,  -432,   379,    67,  -432,   381,    39,  -432,   383,   -25,
+    -432,   444,    23,  -432,    76,  -432,    -8,  -432,   384,   382,
+     385,   389,   391,   393,   394,    93,  -432,   447,   448,   400,
+     401,   403,    27,  -432,   450,   451,   181,  -432,  -432,  -432,
+      66,  -432,   386,     7,  -432,   387,    77,  -432,   388,   452,
+    -432,   410,  -432,   406,   408,   414,   416,  -432,  -432,  -432,
+    -432,   218,  -432,   449,  -432,   453,  -432,  -432,  -432,  -432,
+    -432,   219,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+     182,   418,  -432,  -432,  -432,  -432,   425,   427,  -432,   221,
+    -432,   227,  -432,   454,  -432,   433,   456,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,   187,  -432,    68,
+     456,  -432,  -432,   455,  -432,  -432,  -432,   228,  -432,  -432,
+    -432,  -432,  -432,   460,   434,   461,    68,  -432,   463,  -432,
+     442,  -432,   459,  -432,  -432,   237,  -432,   413,   459,  -432,
+    -432,   231,  -432,  -432,   465,   413,  -432,   443,  -432,  -432
   };
 
   const unsigned short int
@@ -2989,421 +3022,421 @@ namespace isc { namespace dhcp {
   {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
       20,    22,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,    38,    32,    28,    27,    24,
-      25,    26,    31,     3,    29,    30,    47,     5,    58,     7,
-      91,     9,   183,    11,   285,    13,   302,    15,   328,    17,
-     224,    19,   259,    21,   148,    23,    42,    34,     0,     0,
-       0,     0,     0,     0,   330,   226,   261,     0,    44,     0,
-      43,     0,     0,    35,    56,   413,   409,   411,     0,    55,
-       0,    49,    51,    53,    54,    52,    89,    95,    97,     0,
-       0,     0,     0,     0,   175,   216,   251,   123,   138,   131,
-     358,   140,   159,   375,     0,   397,   407,    83,     0,    60,
-      62,    63,    64,    65,    66,    68,    69,    70,    71,    73,
-      72,    77,    78,    67,    75,    76,    74,    79,    80,    81,
-      82,    93,     0,   362,   277,   294,   204,   206,   208,     0,
-       0,   212,   210,   320,   354,   203,   187,   188,   189,   190,
-       0,   185,   194,   195,   196,   199,   201,   197,   198,   191,
-     192,   193,   200,   202,   292,   291,   290,     0,   287,   289,
-     313,     0,   316,     0,     0,   312,   309,     0,   304,   306,
-     307,   310,   311,   308,   352,   342,   344,   346,   348,   350,
-     341,   340,     0,   331,   332,   336,   337,   334,   338,   339,
-     335,   241,   118,     0,   245,   243,   248,     0,   237,   238,
-       0,   227,   228,   230,   240,   231,   232,   233,   247,   234,
-     235,   236,   272,     0,   270,   271,   274,   275,     0,   262,
-     263,   265,   266,   267,   268,   269,   155,   157,   152,     0,
-     150,   153,   154,    39,     0,     0,    33,     0,     0,     0,
-       0,     0,    46,     0,    48,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     1,    39,    32,    28,    27,    24,
+      25,    26,    31,     3,    29,    30,    48,     5,    59,     7,
+      92,     9,   184,    11,   286,    13,   306,    15,   333,    17,
+     225,    19,   260,    21,   149,    23,    43,    35,     0,     0,
+       0,     0,     0,     0,   335,   227,   262,     0,    45,     0,
+      44,     0,     0,    36,    57,   418,   414,   416,     0,    56,
+       0,    50,    52,    54,    55,    53,    90,    96,    98,     0,
+       0,     0,     0,     0,   176,   217,   252,   124,   139,   132,
+     363,   141,   160,   380,     0,   402,   412,    84,     0,    61,
+      63,    64,    65,    66,    67,    69,    70,    71,    72,    74,
+      73,    78,    79,    68,    76,    77,    75,    80,    81,    82,
+      83,    94,     0,   367,   278,   298,   205,   207,   209,     0,
+       0,   213,   211,   325,   359,   204,   188,   189,   190,   191,
+       0,   186,   195,   196,   197,   200,   202,   198,   199,   192,
+     193,   194,   201,   203,   294,   296,   293,   291,     0,   288,
+     290,   292,   318,     0,   321,     0,     0,   317,   313,   316,
+       0,   308,   310,   311,   314,   315,   312,   357,   347,   349,
+     351,   353,   355,   346,   345,     0,   336,   337,   341,   342,
+     339,   343,   344,   340,   242,   119,     0,   246,   244,   249,
+       0,   238,   239,     0,   228,   229,   231,   241,   232,   233,
+     234,   248,   235,   236,   237,   273,     0,   271,   272,   275,
+     276,     0,   263,   264,   266,   267,   268,   269,   270,   156,
+     158,   153,     0,   151,   154,   155,    40,     0,     0,    33,
+       0,     0,     0,     0,     0,    47,     0,    49,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    59,     0,    92,
-     364,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   184,     0,     0,   286,     0,     0,     0,
-       0,     0,     0,   303,     0,     0,     0,     0,     0,     0,
-     329,     0,     0,     0,     0,     0,     0,     0,     0,   225,
-       0,     0,     0,   260,     0,     0,     0,     0,   149,    45,
-      36,     0,     0,     0,     0,     0,    50,     0,     0,     0,
-      84,    85,    86,    87,    88,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   396,     0,     0,    61,     0,
-     373,   371,   372,   370,     0,   365,   366,   368,   369,     0,
-       0,     0,     0,     0,   214,   215,     0,     0,     0,     0,
-     186,     0,   288,     0,   315,     0,   318,   319,   305,     0,
-       0,     0,     0,     0,     0,   333,     0,     0,   239,     0,
-       0,     0,   250,   229,     0,   276,   264,     0,     0,   151,
-       0,     0,     0,   410,   412,     0,     0,     0,   177,   218,
-     253,     0,    40,   139,     0,     0,   142,     0,     0,     0,
-       0,    94,     0,   363,     0,   279,   296,   205,   207,   209,
-     213,   211,   322,     0,   293,   314,   317,   353,   343,   345,
-     347,   349,   351,   242,   119,   246,   244,   249,   273,   156,
-     158,    37,     0,   418,     0,   415,   417,     0,   110,   112,
-     114,   116,     0,     0,     0,   109,     0,    99,   101,   102,
-     103,   104,   105,   106,   107,   108,     0,   181,     0,   178,
-     179,   222,     0,   219,   220,   257,     0,   254,   255,   129,
-     130,     0,   125,   127,   128,    42,   137,   135,     0,   133,
-     136,   360,     0,   146,     0,   143,   144,     0,     0,     0,
-       0,     0,     0,     0,   161,   163,   164,   165,   166,   167,
-     168,   386,   392,     0,     0,     0,   385,   384,     0,   377,
-     379,   382,   380,   381,   383,   403,   405,     0,   399,   401,
-     402,     0,     0,   367,   283,     0,   280,   281,   300,     0,
-     297,   298,   326,     0,   323,   324,   356,     0,    57,     0,
-       0,   414,    90,     0,     0,     0,     0,     0,     0,     0,
-       0,    96,    98,     0,   176,     0,   226,   217,     0,   261,
-     252,     0,     0,   124,     0,     0,   132,     0,   359,     0,
-     141,     0,     0,     0,     0,     0,     0,     0,     0,   160,
-       0,     0,     0,     0,     0,     0,   376,     0,     0,     0,
-     398,   408,   374,     0,   278,     0,     0,   295,     0,   330,
-     321,     0,     0,   355,     0,   416,     0,     0,     0,     0,
-     120,   121,   122,   100,     0,   180,     0,   221,     0,   256,
-     126,    41,   134,   361,     0,   145,   169,   170,   171,   172,
-     173,   174,   162,     0,     0,   391,   394,   395,   378,     0,
-       0,   400,     0,   282,     0,   299,     0,   325,     0,     0,
-     111,   113,   115,   117,   182,   223,   258,   147,   388,   389,
-     390,   387,   393,   404,   406,   284,   301,   327,   357,   422,
-       0,   420,     0,     0,   419,   434,     0,   432,   430,   426,
-       0,   424,   428,   429,   427,   421,     0,     0,     0,     0,
-     423,     0,   431,     0,   425,     0,   433,   438,     0,   436,
-       0,     0,   435,   442,     0,   440,   437,     0,     0,   439,
-       0,   441,   443
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      60,     0,    93,   369,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   185,     0,     0,     0,
+     287,     0,     0,     0,     0,     0,     0,   307,     0,     0,
+       0,     0,     0,     0,   334,     0,     0,     0,     0,     0,
+       0,     0,     0,   226,     0,     0,     0,   261,     0,     0,
+       0,     0,   150,    46,    37,     0,     0,     0,     0,     0,
+      51,     0,     0,     0,    85,    86,    87,    88,    89,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   401,
+       0,     0,    62,     0,   378,   376,   377,   375,     0,   370,
+     371,   373,   374,     0,     0,     0,     0,     0,   215,   216,
+       0,     0,     0,     0,   187,     0,     0,   289,     0,   320,
+       0,   323,   324,   309,     0,     0,     0,     0,     0,     0,
+     338,     0,     0,   240,     0,     0,     0,   251,   230,     0,
+     277,   265,     0,     0,   152,     0,     0,     0,   415,   417,
+       0,     0,     0,   178,   219,   254,     0,    41,   140,     0,
+       0,   143,     0,     0,     0,     0,    95,     0,   368,     0,
+     280,   300,   206,   208,   210,   214,   212,   327,     0,   295,
+      34,   297,   319,   322,   358,   348,   350,   352,   354,   356,
+     243,   120,   247,   245,   250,   274,   157,   159,    38,     0,
+     423,     0,   420,   422,     0,   111,   113,   115,   117,     0,
+       0,     0,   110,     0,   100,   102,   103,   104,   105,   106,
+     107,   108,   109,     0,   182,     0,   179,   180,   223,     0,
+     220,   221,   258,     0,   255,   256,   130,   131,     0,   126,
+     128,   129,    43,   138,   136,     0,   134,   137,   365,     0,
+     147,     0,   144,   145,     0,     0,     0,     0,     0,     0,
+       0,   162,   164,   165,   166,   167,   168,   169,   391,   397,
+       0,     0,     0,   390,   389,     0,   382,   384,   387,   385,
+     386,   388,   408,   410,     0,   404,   406,   407,     0,     0,
+     372,   284,     0,   281,   282,   304,     0,   301,   302,   331,
+       0,   328,   329,   361,     0,    58,     0,     0,   419,    91,
+       0,     0,     0,     0,     0,     0,     0,     0,    97,    99,
+       0,   177,     0,   227,   218,     0,   262,   253,     0,     0,
+     125,     0,     0,   133,     0,   364,     0,   142,     0,     0,
+       0,     0,     0,     0,     0,     0,   161,     0,     0,     0,
+       0,     0,     0,   381,     0,     0,     0,   403,   413,   379,
+       0,   279,     0,     0,   299,     0,   335,   326,     0,     0,
+     360,     0,   421,     0,     0,     0,     0,   121,   122,   123,
+     101,     0,   181,     0,   222,     0,   257,   127,    42,   135,
+     366,     0,   146,   170,   171,   172,   173,   174,   175,   163,
+       0,     0,   396,   399,   400,   383,     0,     0,   405,     0,
+     283,     0,   303,     0,   330,     0,     0,   112,   114,   116,
+     118,   183,   224,   259,   148,   393,   394,   395,   392,   398,
+     409,   411,   285,   305,   332,   362,   427,     0,   425,     0,
+       0,   424,   439,     0,   437,   435,   431,     0,   429,   433,
+     434,   432,   426,     0,     0,     0,     0,   428,     0,   436,
+       0,   430,     0,   438,   443,     0,   441,     0,     0,   440,
+     447,     0,   445,   442,     0,     0,   444,     0,   446,   448
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,     3,  -427,  -427,  -427,  -427,    33,  -427,
-    -427,  -214,  -427,   -67,  -427,   -58,  -427,  -427,  -427,   211,
-    -427,  -427,  -427,  -427,    51,   195,   -41,   -38,   -37,   -36,
-    -427,  -427,  -427,  -427,  -427,    52,  -427,  -427,  -427,  -427,
-    -427,    49,  -112,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,   -65,  -427,  -426,  -427,  -427,  -427,  -427,  -427,  -123,
-    -405,  -427,  -427,  -427,  -427,  -125,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -129,  -427,  -427,  -427,  -126,   147,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -133,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -109,  -427,  -427,
-    -427,  -105,   197,  -427,  -427,  -427,  -427,  -427,  -427,  -415,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -106,
-    -427,  -427,  -427,  -107,  -427,   164,  -427,   -51,  -427,  -427,
-    -427,  -427,  -427,   -49,  -427,  -427,  -427,  -427,  -427,   -50,
-    -427,  -427,  -427,  -108,  -427,  -427,  -427,  -104,  -427,   169,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -138,  -427,  -427,  -427,  -128,   199,  -427,  -427,  -427,  -427,
-    -427,  -427,  -132,  -427,  -427,  -427,  -124,   201,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -134,
-    -427,  -427,  -427,  -121,  -427,   202,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,    66,  -427,
-    -427,  -427,  -427,  -427,  -427,  -114,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -115,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   -59,  -427,  -427,  -427,  -198,  -427,  -427,  -203,
-    -427,  -427,  -427,  -427,  -427,  -427,  -213,  -427,  -427,  -219,
-    -427
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,     5,  -432,    50,  -432,  -432,  -432,    25,
+    -432,  -432,  -239,  -432,   -54,  -432,   -58,  -432,  -432,  -432,
+     214,  -432,  -432,  -432,  -432,    56,   195,   -51,   -45,   -40,
+     -36,  -432,  -432,  -432,  -432,  -432,    53,  -432,  -432,  -432,
+    -432,  -432,    55,  -112,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,   -65,  -432,  -431,  -432,  -432,  -432,  -432,  -432,
+    -123,  -407,  -432,  -432,  -432,  -432,  -124,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -129,  -432,  -432,  -432,  -126,   151,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -134,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -108,  -432,
+    -432,  -432,  -105,   196,  -432,  -432,  -432,  -432,  -432,  -432,
+    -410,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -109,  -432,  -432,  -432,  -104,  -432,   164,  -432,   -49,  -432,
+    -432,  -432,  -432,  -432,   -47,  -432,  -432,  -432,  -432,  -432,
+     -50,  -432,  -432,  -432,  -102,  -432,  -432,  -432,  -106,  -432,
+     166,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -139,  -432,  -432,  -432,  -133,   199,  -432,  -432,   -48,
+    -432,  -432,  -432,  -432,  -432,  -135,  -432,  -432,  -432,  -131,
+     201,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -130,  -432,  -432,  -432,  -127,  -432,   197,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,    75,  -432,  -432,  -432,  -432,  -432,  -432,  -117,  -432,
+    -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -110,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
+    -432,  -432,  -432,  -432,  -432,   -59,  -432,  -432,  -432,  -191,
+    -432,  -432,  -206,  -432,  -432,  -432,  -432,  -432,  -432,  -217,
+    -432,  -432,  -221,  -432
   };
 
   const short int
   Dhcp6Parser::yydefgoto_[] =
   {
       -1,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    68,    33,    34,    57,    72,    73,    35,
-      56,   423,   505,    69,    70,   107,    37,    58,    80,    81,
-      82,   248,    39,    59,   108,   109,   110,   111,   112,   113,
-     114,   115,   255,    41,    60,   132,   278,   116,   256,   117,
-     257,   476,   477,   478,   573,   479,   574,   480,   575,   481,
-     576,   209,   313,   483,   484,   485,   118,   266,   501,   502,
-     503,   504,   119,   268,   508,   509,   510,   120,   267,   121,
-     270,   514,   515,   516,   599,    55,    67,   239,   240,   241,
-     325,   242,   326,   122,   271,   523,   524,   525,   526,   527,
-     528,   529,   530,   123,   263,   488,   489,   490,   583,    43,
-      61,   150,   151,   152,   283,   153,   284,   154,   285,   155,
-     289,   156,   288,   157,   158,   124,   264,   492,   493,   494,
-     586,    51,    65,   210,   211,   212,   213,   214,   215,   216,
-     312,   217,   316,   218,   315,   219,   220,   317,   221,   125,
-     265,   496,   497,   498,   589,    53,    66,   228,   229,   230,
-     231,   232,   321,   233,   234,   235,   160,   281,   555,   556,
-     557,   623,    45,    62,   167,   168,   169,   294,   161,   282,
-     559,   560,   561,   626,    47,    63,   177,   178,   179,   297,
-     180,   181,   299,   182,   183,   162,   290,   563,   564,   565,
-     629,    49,    64,   192,   193,   194,   195,   305,   196,   306,
-     197,   307,   198,   308,   199,   309,   200,   304,   163,   291,
-     567,   632,   126,   269,   512,   280,   364,   365,   366,   367,
-     368,   432,   127,   272,   538,   539,   540,   610,   691,   541,
-     542,   611,   543,   544,   128,   129,   274,   547,   548,   549,
-     617,   550,   618,   130,   275,    83,   250,    84,   251,    85,
-     249,   464,   465,   466,   569,   700,   701,   702,   710,   711,
-     712,   713,   718,   714,   716,   728,   729,   730,   734,   735,
-     737
+      21,    22,    23,    68,    33,    34,    57,   451,    72,    73,
+      35,    56,   428,   512,    69,    70,   107,    37,    58,    80,
+      81,    82,   251,    39,    59,   108,   109,   110,   111,   112,
+     113,   114,   115,   258,    41,    60,   132,   281,   116,   259,
+     117,   260,   483,   484,   485,   580,   486,   581,   487,   582,
+     488,   583,   212,   317,   490,   491,   492,   118,   269,   508,
+     509,   510,   511,   119,   271,   515,   516,   517,   120,   270,
+     121,   273,   521,   522,   523,   606,    55,    67,   242,   243,
+     244,   329,   245,   330,   122,   274,   530,   531,   532,   533,
+     534,   535,   536,   537,   123,   266,   495,   496,   497,   590,
+      43,    61,   150,   151,   152,   286,   153,   287,   154,   288,
+     155,   292,   156,   291,   157,   158,   124,   267,   499,   500,
+     501,   593,    51,    65,   213,   214,   215,   216,   217,   218,
+     219,   316,   220,   320,   221,   319,   222,   223,   321,   224,
+     125,   268,   503,   504,   505,   596,    53,    66,   231,   232,
+     233,   234,   235,   325,   236,   237,   238,   160,   284,   562,
+     563,   564,   630,    45,    62,   168,   169,   170,   297,   171,
+     298,   161,   285,   566,   567,   568,   633,    47,    63,   180,
+     181,   182,   301,   183,   184,   303,   185,   186,   162,   293,
+     570,   571,   572,   636,    49,    64,   195,   196,   197,   198,
+     309,   199,   310,   200,   311,   201,   312,   202,   313,   203,
+     308,   163,   294,   574,   639,   126,   272,   519,   283,   368,
+     369,   370,   371,   372,   437,   127,   275,   545,   546,   547,
+     617,   698,   548,   549,   618,   550,   551,   128,   129,   277,
+     554,   555,   556,   624,   557,   625,   130,   278,    83,   253,
+      84,   254,    85,   252,   471,   472,   473,   576,   707,   708,
+     709,   717,   718,   719,   720,   725,   721,   723,   735,   736,
+     737,   741,   742,   744
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-      79,   225,   537,   145,   165,   175,   190,   208,   224,   238,
-     511,   159,   166,   176,   191,   226,    32,   227,   133,   507,
-     146,    96,    74,   147,   148,   149,    25,   133,    26,    24,
-      27,   164,   499,    89,    90,    91,    92,    96,   202,    36,
-      96,   468,   469,   470,   471,   472,   473,   474,   253,   134,
-     276,   135,    71,   254,   131,   277,   202,   136,   137,   138,
-     139,   140,   141,    38,   360,    40,   292,    42,   142,   143,
-      86,   293,    87,    88,    44,   144,   201,   142,    46,   500,
-      48,    89,    90,    91,    92,    93,    94,    95,    96,   592,
-      50,   202,   593,   203,   204,   531,   205,   206,   207,   472,
-      78,    75,   202,   222,   203,   204,   223,    76,    77,   202,
-      52,    97,    98,    99,   100,    54,    78,   236,   237,    78,
-      78,   295,    96,   243,    96,   101,   296,   244,   102,    28,
-      29,    30,    31,   245,    78,   103,   170,   171,   172,   173,
-     174,   302,   246,   104,   105,   431,   303,   106,   184,   236,
-     237,   247,   185,   186,   187,   188,   189,   252,    78,   327,
-     532,   533,   534,   535,   328,   595,   276,    78,   596,    78,
-     705,   568,   706,   707,   570,   447,   448,   449,   580,   571,
-      78,   580,   653,   581,   499,   506,   582,    78,    78,   537,
-     507,   608,   615,   619,   247,    79,   609,   616,   620,   621,
-     258,    78,   259,    78,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   362,   517,   518,   519,   520,
-     521,   522,   361,   292,   327,   279,   295,   302,   684,   687,
-     363,   695,   696,   719,   145,   738,   597,   165,   720,   598,
-     739,   260,   159,   703,   175,   166,   704,   329,   330,   261,
-     262,   146,   176,   190,   147,   148,   149,   731,   310,   225,
-     732,   191,   208,   688,   689,   690,   224,   545,   546,   273,
-     286,   287,   298,   226,   300,   227,   301,   311,   331,   314,
-     318,   319,   320,   340,   322,   323,   324,   375,   332,   333,
-     334,   335,   337,   338,   339,   345,   341,   346,   347,   348,
-     349,   342,   343,   344,   350,   351,   352,   353,   354,   355,
-     356,   357,   359,   369,   370,   371,   372,   373,   374,   376,
-     377,   378,   379,   381,   383,   384,   385,   386,   387,   389,
-     390,   391,   392,   393,   394,   396,   397,   413,   414,   399,
-     398,   400,   401,   404,   407,   402,   405,   408,   410,   411,
-     418,   482,   482,   412,   415,   416,   417,   419,   475,   475,
-     420,   421,   422,   424,   425,   426,   434,   435,   427,   362,
-     536,   428,   429,   430,   436,   433,   361,   437,   442,   438,
-     572,   443,   487,   491,   363,   495,   439,   513,   552,   440,
-     441,   585,   554,   558,   562,   463,   577,   578,   579,   633,
-     444,   584,   587,   588,   590,   445,   446,   450,   591,   600,
-     601,   460,   602,   461,   603,   604,   566,   605,   606,   607,
-     612,   613,   451,   614,   624,   625,   627,   628,   631,   452,
-     634,   453,   454,   630,   636,   637,   638,   639,   594,   663,
-     651,   455,   456,   664,   457,   669,   670,   678,   685,   458,
-     679,   717,   686,   721,   697,   699,   723,   727,   459,   725,
-     740,   622,   462,   551,   336,   640,   486,   467,   643,   650,
-     652,   358,   655,   654,   409,   662,   645,   641,   644,   646,
-     656,   642,   647,   649,   403,   648,   657,   673,   658,   380,
-     659,   660,   661,   406,   382,   672,   675,   677,   665,   666,
-     553,   668,   674,   388,   671,   715,   667,   680,   676,   681,
-     682,   635,   683,   395,   692,   482,   724,   693,   736,   741,
-     694,   733,   475,     0,   225,   145,     0,     0,   208,   698,
-       0,   224,   722,   159,     0,     0,   726,     0,   226,     0,
-     227,   238,   146,     0,   742,   147,   148,   149,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   536,     0,     0,
-       0,     0,     0,     0,     0,   165,     0,     0,   175,     0,
-       0,   190,     0,   166,     0,     0,   176,     0,     0,   191,
+      79,   228,   544,   145,   166,   177,   193,   211,   227,   241,
+     146,   159,   167,   178,   194,   179,   147,   229,    32,   230,
+     518,   148,   514,   133,    25,   149,    26,    74,    27,   475,
+     476,   477,   478,   479,   480,   481,    96,   506,    89,    90,
+      91,    92,   538,    24,   205,    96,   479,    36,   172,   173,
+     174,   175,   176,   165,   134,   599,   135,   256,   600,   131,
+     239,   240,   257,   136,   137,   138,   139,   140,   141,   205,
+     225,   206,   207,   226,   142,   143,    86,   602,    87,    88,
+     603,   144,   204,   133,   507,   506,   513,    89,    90,    91,
+      92,    93,    94,    95,    96,    96,    38,   205,   205,   206,
+     207,    78,   208,   209,   210,   164,    96,    75,   539,   540,
+     541,   542,   165,    76,    77,    40,    78,    42,    97,    98,
+      99,   100,   279,    78,   436,    78,    78,   280,    28,    29,
+      30,    31,   101,   187,   142,   102,    78,   188,   189,   190,
+     191,   192,   103,    96,   205,    44,   604,   295,    78,   605,
+     104,   105,   296,   299,   106,   454,   455,   456,   300,    46,
+     712,    48,   713,   714,   524,   525,   526,   527,   528,   529,
+      50,   364,    52,   306,    78,    78,    78,    78,   307,   331,
+     279,    54,   577,   587,   332,   575,    78,   578,   588,    71,
+     710,   544,   587,   711,   660,   514,   246,   589,    79,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     615,   622,   626,   247,   250,   616,   623,   627,   366,   628,
+     248,   295,   331,    78,   299,   365,   691,   694,   249,   702,
+     306,   726,   250,   367,   745,   703,   727,   145,   255,   746,
+     738,   166,   261,   739,   146,   159,   239,   240,   177,   167,
+     147,   262,   333,   334,   263,   148,   178,   193,   179,   149,
+     695,   696,   697,   228,   264,   194,   211,   265,   552,   553,
+     227,   276,   282,   289,   290,   302,   304,   305,   315,   229,
+     318,   230,   314,   322,   324,   323,   326,   328,   327,   336,
+     337,   338,   335,   339,   341,   342,   343,   349,   344,   350,
+     351,   345,   346,   347,   348,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   363,   373,   374,   375,   376,
+     377,   380,   378,   381,   382,   379,   383,   385,   386,   388,
+     390,   394,   389,   391,   392,   395,   396,   397,   398,   399,
+     401,   402,   403,   418,   419,   404,   405,   406,   407,   409,
+     412,   410,   413,   415,   416,   423,   489,   489,   417,   420,
+     421,   422,   424,   482,   482,   425,   426,   427,   429,   430,
+     431,   439,   440,   432,   366,   543,   433,   434,   435,   441,
+     438,   365,   447,   448,   559,    26,   494,   442,   498,   367,
+     502,   520,   443,   561,   565,   569,   584,   444,   579,   585,
+     586,   609,   592,   445,   591,   595,   446,   449,   452,   453,
+     594,   597,   598,   607,   608,   686,   610,   457,   467,   611,
+     468,   612,   573,   613,   614,   619,   620,   458,   621,   631,
+     459,   632,   634,   635,   638,   637,   450,   460,   461,   462,
+     640,   641,   643,   644,   645,   646,   470,   463,   464,   465,
+     658,   670,   671,   466,   676,   677,   685,   692,   601,   724,
+     558,   693,   704,   706,   728,   730,   734,   629,   732,   747,
+     340,   647,   469,   474,   362,   650,   657,   493,   659,   662,
+     661,   669,   414,   648,   652,   651,   654,   649,   408,   653,
+     655,   384,   663,   680,   411,   664,   656,   679,   387,   665,
+     682,   666,   681,   667,   668,   675,   740,   393,   684,   683,
+     672,   673,   400,   674,   560,   687,   678,   688,   642,   722,
+     731,   743,   489,   689,   748,   690,     0,   699,     0,   482,
+       0,   228,   145,     0,   700,   211,   701,     0,   227,   146,
+     159,     0,   705,     0,   729,   147,     0,   229,   241,   230,
+     148,   733,   749,     0,   149,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   543,     0,     0,     0,     0,     0,
+       0,     0,   166,     0,     0,   177,     0,     0,   193,     0,
+     167,     0,     0,   178,     0,   179,   194,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   709,     0,     0,
-       0,     0,     0,     0,   708,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   709,     0,     0,     0,     0,     0,
-       0,   708
+       0,     0,     0,     0,   716,     0,     0,     0,     0,     0,
+       0,   715,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   716,     0,     0,     0,     0,     0,     0,   715
   };
 
   const short int
   Dhcp6Parser::yycheck_[] =
   {
-      58,    66,   428,    61,    62,    63,    64,    65,    66,    67,
-     425,    61,    62,    63,    64,    66,    13,    66,     7,   424,
-      61,    29,    10,    61,    61,    61,     5,     7,     7,     0,
-       9,    39,    61,    22,    23,    24,    25,    29,    30,     7,
-      29,    15,    16,    17,    18,    19,    20,    21,     3,    38,
-       3,    40,   108,     8,    12,     8,    30,    46,    47,    48,
-      49,    50,    51,     7,    56,     7,     3,     7,    57,    58,
-      11,     8,    13,    14,     7,    64,    15,    57,     7,   108,
-       7,    22,    23,    24,    25,    26,    27,    28,    29,     3,
-       7,    30,     6,    32,    33,    15,    35,    36,    37,    19,
-     108,    89,    30,    31,    32,    33,    34,    95,    96,    30,
-       7,    52,    53,    54,    55,     7,   108,    67,    68,   108,
-     108,     3,    29,     6,    29,    66,     8,     3,    69,   108,
-     109,   110,   111,     4,   108,    76,    41,    42,    43,    44,
-      45,     3,     8,    84,    85,   359,     8,    88,    55,    67,
-      68,     3,    59,    60,    61,    62,    63,     4,   108,     3,
-      80,    81,    82,    83,     8,     3,     3,   108,     6,   108,
-      91,     8,    93,    94,     3,   389,   390,   391,     3,     8,
-     108,     3,   597,     8,    61,    62,     8,   108,   108,   615,
-     595,     3,     3,     3,     3,   253,     8,     8,     8,     8,
-       4,   108,     4,   108,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   280,    70,    71,    72,    73,
-      74,    75,   280,     3,     3,     8,     3,     3,     8,     8,
-     280,     8,     8,     3,   292,     3,     3,   295,     8,     6,
-       8,     4,   292,     3,   302,   295,     6,   244,   245,     4,
-       4,   292,   302,   311,   292,   292,   292,     3,     8,   324,
-       6,   311,   320,    77,    78,    79,   324,    86,    87,     4,
-       4,     4,     4,   324,     4,   324,     4,     3,   108,     4,
-       4,     8,     3,   109,     4,     8,     3,   111,     4,     4,
-       4,     4,     4,     4,     4,     4,   109,     4,     4,     4,
-       4,   109,   109,   109,     4,     4,     4,     4,     4,   109,
-       4,     4,     4,     4,     4,     4,     4,     4,   109,     4,
-       4,     4,     4,     4,     4,   109,     4,   109,   109,     4,
-       4,     4,     4,     4,     4,     4,     4,   334,   335,     4,
-     109,     4,     4,     4,     4,   111,   111,     4,     4,     7,
-       5,   416,   417,     7,     7,     7,     7,     5,   416,   417,
-       5,     5,     5,     5,     5,     5,     3,     5,     7,   434,
-     428,     7,     7,     7,     5,     8,   434,   108,     5,   108,
-       8,     7,     7,     7,   434,     7,   108,     7,     4,   108,
-     108,     3,     7,     7,     7,    90,     4,     4,     4,     8,
-     108,     6,     6,     3,     6,   108,   108,   108,     3,     6,
-       3,   408,     4,   410,     4,     4,    65,     4,     4,     4,
-       4,     4,   108,     4,     6,     3,     6,     3,     3,   108,
-       4,   108,   108,     6,     4,     4,     4,     4,   505,     4,
-       6,   108,   108,     4,   108,     4,     4,     4,     8,   108,
-       5,     4,     8,     4,     8,     7,     4,     7,   108,     5,
-       4,   108,   411,   430,   253,   111,   417,   415,   580,   592,
-     595,   276,   601,   599,   327,   608,   585,   109,   583,   586,
-     109,   111,   588,   591,   320,   589,   109,   625,   109,   292,
-     109,   109,   109,   324,   295,   623,   628,   631,   109,   109,
-     434,   615,   626,   302,   619,   703,   109,   108,   629,   108,
-     108,   570,   108,   311,   108,   580,   719,   108,   731,   738,
-     108,    92,   580,    -1,   589,   583,    -1,    -1,   586,   108,
-      -1,   589,   109,   583,    -1,    -1,   108,    -1,   589,    -1,
-     589,   599,   583,    -1,   108,   583,   583,   583,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   615,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   623,    -1,    -1,   626,    -1,
-      -1,   629,    -1,   623,    -1,    -1,   626,    -1,    -1,   629,
+      58,    66,   433,    61,    62,    63,    64,    65,    66,    67,
+      61,    61,    62,    63,    64,    63,    61,    66,    13,    66,
+     430,    61,   429,     7,     5,    61,     7,    10,     9,    15,
+      16,    17,    18,    19,    20,    21,    29,    62,    22,    23,
+      24,    25,    15,     0,    30,    29,    19,     7,    41,    42,
+      43,    44,    45,    46,    38,     3,    40,     3,     6,    12,
+      68,    69,     8,    47,    48,    49,    50,    51,    52,    30,
+      31,    32,    33,    34,    58,    59,    11,     3,    13,    14,
+       6,    65,    15,     7,   109,    62,    63,    22,    23,    24,
+      25,    26,    27,    28,    29,    29,     7,    30,    30,    32,
+      33,   109,    35,    36,    37,    39,    29,    90,    81,    82,
+      83,    84,    46,    96,    97,     7,   109,     7,    53,    54,
+      55,    56,     3,   109,   363,   109,   109,     8,   109,   110,
+     111,   112,    67,    56,    58,    70,   109,    60,    61,    62,
+      63,    64,    77,    29,    30,     7,     3,     3,   109,     6,
+      85,    86,     8,     3,    89,   394,   395,   396,     8,     7,
+      92,     7,    94,    95,    71,    72,    73,    74,    75,    76,
+       7,    57,     7,     3,   109,   109,   109,   109,     8,     3,
+       3,     7,     3,     3,     8,     8,   109,     8,     8,   109,
+       3,   622,     3,     6,   604,   602,     6,     8,   256,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+       3,     3,     3,     3,     3,     8,     8,     8,   283,     8,
+       4,     3,     3,   109,     3,   283,     8,     8,     8,     8,
+       3,     3,     3,   283,     3,     8,     8,   295,     4,     8,
+       3,   299,     4,     6,   295,   295,    68,    69,   306,   299,
+     295,     4,   247,   248,     4,   295,   306,   315,   306,   295,
+      78,    79,    80,   328,     4,   315,   324,     4,    87,    88,
+     328,     4,     8,     4,     4,     4,     4,     4,     3,   328,
+       4,   328,     8,     4,     3,     8,     4,     3,     8,     4,
+       4,     4,   109,     4,     4,     4,     4,     4,   110,     4,
+       4,   110,   110,   110,   110,     4,     4,     4,     4,     4,
+       4,     4,   110,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,   110,     4,     4,   112,     4,     4,     4,     4,
+       4,     4,   110,   110,   110,     4,     4,     4,     4,     4,
+       4,     4,   110,   338,   339,     4,     4,     4,   112,     4,
+       4,   112,     4,     4,     7,     5,   421,   422,     7,     7,
+       7,     7,     5,   421,   422,     5,     5,     5,     5,     5,
+       5,     3,     5,     7,   439,   433,     7,     7,     7,     5,
+       8,   439,     5,     7,     4,     7,     7,   109,     7,   439,
+       7,     7,   109,     7,     7,     7,     4,   109,     8,     4,
+       4,     4,     3,   109,     6,     3,   109,   109,   109,   109,
+       6,     6,     3,     6,     3,     5,     4,   109,   413,     4,
+     415,     4,    66,     4,     4,     4,     4,   109,     4,     6,
+     109,     3,     6,     3,     3,     6,   386,   109,   109,   109,
+       8,     4,     4,     4,     4,     4,    91,   109,   109,   109,
+       6,     4,     4,   109,     4,     4,     4,     8,   512,     4,
+     435,     8,     8,     7,     4,     4,     7,   109,     5,     4,
+     256,   112,   416,   420,   279,   587,   599,   422,   602,   608,
+     606,   615,   331,   110,   592,   590,   595,   112,   324,   593,
+     596,   295,   110,   632,   328,   110,   598,   630,   299,   110,
+     635,   110,   633,   110,   110,   622,    93,   306,   638,   636,
+     110,   110,   315,   110,   439,   109,   626,   109,   577,   710,
+     726,   738,   587,   109,   745,   109,    -1,   109,    -1,   587,
+      -1,   596,   590,    -1,   109,   593,   109,    -1,   596,   590,
+     590,    -1,   109,    -1,   110,   590,    -1,   596,   606,   596,
+     590,   109,   109,    -1,   590,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   622,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   630,    -1,    -1,   633,    -1,    -1,   636,    -1,
+     630,    -1,    -1,   633,    -1,   633,   636,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   702,    -1,    -1,
-      -1,    -1,    -1,    -1,   702,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   719,    -1,    -1,    -1,    -1,    -1,
-      -1,   719
+      -1,    -1,    -1,    -1,   709,    -1,    -1,    -1,    -1,    -1,
+      -1,   709,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   726,    -1,    -1,    -1,    -1,    -1,    -1,   726
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
-       0,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,     0,     5,     7,     9,   108,   109,
-     110,   111,   125,   126,   127,   131,     7,   138,     7,   144,
-       7,   155,     7,   221,     7,   284,     7,   296,     7,   313,
-       7,   243,     7,   267,     7,   197,   132,   128,   139,   145,
-     156,   222,   285,   297,   314,   244,   268,   198,   125,   135,
-     136,   108,   129,   130,    10,    89,    95,    96,   108,   137,
-     140,   141,   142,   367,   369,   371,    11,    13,    14,    22,
-      23,    24,    25,    26,    27,    28,    29,    52,    53,    54,
-      55,    66,    69,    76,    84,    85,    88,   137,   146,   147,
-     148,   149,   150,   151,   152,   153,   159,   161,   178,   184,
-     189,   191,   205,   215,   237,   261,   334,   344,   356,   357,
-     365,    12,   157,     7,    38,    40,    46,    47,    48,    49,
-      50,    51,    57,    58,    64,   137,   148,   149,   150,   151,
-     223,   224,   225,   227,   229,   231,   233,   235,   236,   261,
-     278,   290,   307,   330,    39,   137,   261,   286,   287,   288,
-      41,    42,    43,    44,    45,   137,   261,   298,   299,   300,
-     302,   303,   305,   306,    55,    59,    60,    61,    62,    63,
-     137,   261,   315,   316,   317,   318,   320,   322,   324,   326,
-     328,    15,    30,    32,    33,    35,    36,    37,   137,   173,
-     245,   246,   247,   248,   249,   250,   251,   253,   255,   257,
-     258,   260,    31,    34,   137,   173,   249,   255,   269,   270,
-     271,   272,   273,   275,   276,   277,    67,    68,   137,   199,
-     200,   201,   203,     6,     3,     4,     8,     3,   143,   372,
-     368,   370,     4,     3,     8,   154,   160,   162,     4,     4,
-       4,     4,     4,   216,   238,   262,   179,   190,   185,   335,
-     192,   206,   345,     4,   358,   366,     3,     8,   158,     8,
-     337,   279,   291,   226,   228,   230,     4,     4,   234,   232,
-     308,   331,     3,     8,   289,     3,     8,   301,     4,   304,
-       4,     4,     3,     8,   329,   319,   321,   323,   325,   327,
-       8,     3,   252,   174,     4,   256,   254,   259,     4,     8,
-       3,   274,     4,     8,     3,   202,   204,     3,     8,   125,
-     125,   108,     4,     4,     4,     4,   141,     4,     4,     4,
-     109,   109,   109,   109,   109,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   109,     4,     4,   147,     4,
-      56,   137,   173,   261,   338,   339,   340,   341,   342,     4,
-       4,     4,     4,     4,   109,   111,     4,     4,     4,     4,
-     224,     4,   287,     4,   109,     4,   109,   109,   299,     4,
-       4,     4,     4,     4,     4,   317,     4,     4,   109,     4,
-       4,     4,   111,   247,     4,   111,   271,     4,     4,   200,
-       4,     7,     7,   125,   125,     7,     7,     7,     5,     5,
-       5,     5,     5,   133,     5,     5,     5,     7,     7,     7,
-       7,   133,   343,     8,     3,     5,     5,   108,   108,   108,
-     108,   108,     5,     7,   108,   108,   108,   133,   133,   133,
-     108,   108,   108,   108,   108,   108,   108,   108,   108,   108,
-     125,   125,   146,    90,   373,   374,   375,   157,    15,    16,
-      17,    18,    19,    20,    21,   137,   163,   164,   165,   167,
-     169,   171,   173,   175,   176,   177,   163,     7,   217,   218,
-     219,     7,   239,   240,   241,     7,   263,   264,   265,    61,
-     108,   180,   181,   182,   183,   134,    62,   182,   186,   187,
-     188,   231,   336,     7,   193,   194,   195,    70,    71,    72,
-      73,    74,    75,   207,   208,   209,   210,   211,   212,   213,
-     214,    15,    80,    81,    82,    83,   137,   175,   346,   347,
-     348,   351,   352,   354,   355,    86,    87,   359,   360,   361,
-     363,   130,     4,   340,     7,   280,   281,   282,     7,   292,
-     293,   294,     7,   309,   310,   311,    65,   332,     8,   376,
-       3,     8,     8,   166,   168,   170,   172,     4,     4,     4,
-       3,     8,     8,   220,     6,     3,   242,     6,     3,   266,
-       6,     3,     3,     6,   135,     3,     6,     3,     6,   196,
-       6,     3,     4,     4,     4,     4,     4,     4,     3,     8,
-     349,   353,     4,     4,     4,     3,     8,   362,   364,     3,
-       8,     8,   108,   283,     6,     3,   295,     6,     3,   312,
-       6,     3,   333,     8,     4,   374,     4,     4,     4,     4,
-     111,   109,   111,   164,   223,   219,   245,   241,   269,   265,
-     181,     6,   187,   231,   199,   195,   109,   109,   109,   109,
-     109,   109,   208,     4,     4,   109,   109,   109,   347,     4,
-       4,   360,   286,   282,   298,   294,   315,   311,     4,     5,
-     108,   108,   108,   108,     8,     8,     8,     8,    77,    78,
-      79,   350,   108,   108,   108,     8,     8,     8,   108,     7,
-     377,   378,   379,     3,     6,    91,    93,    94,   137,   173,
-     380,   381,   382,   383,   385,   378,   386,     4,   384,     3,
-       8,     4,   109,     4,   381,     5,   108,     7,   387,   388,
-     389,     3,     6,    92,   390,   391,   388,   392,     3,     8,
-       4,   391,   108
+       0,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,     0,     5,     7,     9,   109,   110,
+     111,   112,   126,   127,   128,   133,     7,   140,     7,   146,
+       7,   157,     7,   223,     7,   286,     7,   300,     7,   317,
+       7,   245,     7,   269,     7,   199,   134,   129,   141,   147,
+     158,   224,   287,   301,   318,   246,   270,   200,   126,   137,
+     138,   109,   131,   132,    10,    90,    96,    97,   109,   139,
+     142,   143,   144,   371,   373,   375,    11,    13,    14,    22,
+      23,    24,    25,    26,    27,    28,    29,    53,    54,    55,
+      56,    67,    70,    77,    85,    86,    89,   139,   148,   149,
+     150,   151,   152,   153,   154,   155,   161,   163,   180,   186,
+     191,   193,   207,   217,   239,   263,   338,   348,   360,   361,
+     369,    12,   159,     7,    38,    40,    47,    48,    49,    50,
+      51,    52,    58,    59,    65,   139,   150,   151,   152,   153,
+     225,   226,   227,   229,   231,   233,   235,   237,   238,   263,
+     280,   294,   311,   334,    39,    46,   139,   263,   288,   289,
+     290,   292,    41,    42,    43,    44,    45,   139,   263,   292,
+     302,   303,   304,   306,   307,   309,   310,    56,    60,    61,
+      62,    63,    64,   139,   263,   319,   320,   321,   322,   324,
+     326,   328,   330,   332,    15,    30,    32,    33,    35,    36,
+      37,   139,   175,   247,   248,   249,   250,   251,   252,   253,
+     255,   257,   259,   260,   262,    31,    34,   139,   175,   251,
+     257,   271,   272,   273,   274,   275,   277,   278,   279,    68,
+      69,   139,   201,   202,   203,   205,     6,     3,     4,     8,
+       3,   145,   376,   372,   374,     4,     3,     8,   156,   162,
+     164,     4,     4,     4,     4,     4,   218,   240,   264,   181,
+     192,   187,   339,   194,   208,   349,     4,   362,   370,     3,
+       8,   160,     8,   341,   281,   295,   228,   230,   232,     4,
+       4,   236,   234,   312,   335,     3,     8,   291,   293,     3,
+       8,   305,     4,   308,     4,     4,     3,     8,   333,   323,
+     325,   327,   329,   331,     8,     3,   254,   176,     4,   258,
+     256,   261,     4,     8,     3,   276,     4,     8,     3,   204,
+     206,     3,     8,   126,   126,   109,     4,     4,     4,     4,
+     143,     4,     4,     4,   110,   110,   110,   110,   110,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,     4,   110,
+       4,     4,   149,     4,    57,   139,   175,   263,   342,   343,
+     344,   345,   346,     4,     4,     4,     4,     4,   110,   112,
+       4,     4,     4,     4,   226,     4,     4,   289,     4,   110,
+       4,   110,   110,   303,     4,     4,     4,     4,     4,     4,
+     321,     4,     4,   110,     4,     4,     4,   112,   249,     4,
+     112,   273,     4,     4,   202,     4,     7,     7,   126,   126,
+       7,     7,     7,     5,     5,     5,     5,     5,   135,     5,
+       5,     5,     7,     7,     7,     7,   135,   347,     8,     3,
+       5,     5,   109,   109,   109,   109,   109,     5,     7,   109,
+     128,   130,   109,   109,   135,   135,   135,   109,   109,   109,
+     109,   109,   109,   109,   109,   109,   109,   126,   126,   148,
+      91,   377,   378,   379,   159,    15,    16,    17,    18,    19,
+      20,    21,   139,   165,   166,   167,   169,   171,   173,   175,
+     177,   178,   179,   165,     7,   219,   220,   221,     7,   241,
+     242,   243,     7,   265,   266,   267,    62,   109,   182,   183,
+     184,   185,   136,    63,   184,   188,   189,   190,   233,   340,
+       7,   195,   196,   197,    71,    72,    73,    74,    75,    76,
+     209,   210,   211,   212,   213,   214,   215,   216,    15,    81,
+      82,    83,    84,   139,   177,   350,   351,   352,   355,   356,
+     358,   359,    87,    88,   363,   364,   365,   367,   132,     4,
+     344,     7,   282,   283,   284,     7,   296,   297,   298,     7,
+     313,   314,   315,    66,   336,     8,   380,     3,     8,     8,
+     168,   170,   172,   174,     4,     4,     4,     3,     8,     8,
+     222,     6,     3,   244,     6,     3,   268,     6,     3,     3,
+       6,   137,     3,     6,     3,     6,   198,     6,     3,     4,
+       4,     4,     4,     4,     4,     3,     8,   353,   357,     4,
+       4,     4,     3,     8,   366,   368,     3,     8,     8,   109,
+     285,     6,     3,   299,     6,     3,   316,     6,     3,   337,
+       8,     4,   378,     4,     4,     4,     4,   112,   110,   112,
+     166,   225,   221,   247,   243,   271,   267,   183,     6,   189,
+     233,   201,   197,   110,   110,   110,   110,   110,   110,   210,
+       4,     4,   110,   110,   110,   351,     4,     4,   364,   288,
+     284,   302,   298,   319,   315,     4,     5,   109,   109,   109,
+     109,     8,     8,     8,     8,    78,    79,    80,   354,   109,
+     109,   109,     8,     8,     8,   109,     7,   381,   382,   383,
+       3,     6,    92,    94,    95,   139,   175,   384,   385,   386,
+     387,   389,   382,   390,     4,   388,     3,     8,     4,   110,
+       4,   385,     5,   109,     7,   391,   392,   393,     3,     6,
+      93,   394,   395,   392,   396,     3,     8,     4,   395,   109
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   112,   114,   113,   115,   113,   116,   113,   117,   113,
-     118,   113,   119,   113,   120,   113,   121,   113,   122,   113,
-     123,   113,   124,   113,   125,   125,   125,   125,   125,   125,
-     125,   126,   128,   127,   129,   129,   130,   130,   132,   131,
-     134,   133,   135,   135,   136,   136,   137,   139,   138,   140,
-     140,   141,   141,   141,   141,   141,   143,   142,   145,   144,
-     146,   146,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   148,   149,   150,   151,   152,   154,
-     153,   156,   155,   158,   157,   160,   159,   162,   161,   163,
-     163,   164,   164,   164,   164,   164,   164,   164,   164,   164,
-     166,   165,   168,   167,   170,   169,   172,   171,   174,   173,
-     175,   176,   177,   179,   178,   180,   180,   181,   181,   182,
-     183,   185,   184,   186,   186,   187,   187,   188,   190,   189,
-     192,   191,   193,   193,   194,   194,   196,   195,   198,   197,
-     199,   199,   199,   200,   200,   202,   201,   204,   203,   206,
-     205,   207,   207,   208,   208,   208,   208,   208,   208,   209,
-     210,   211,   212,   213,   214,   216,   215,   217,   217,   218,
-     218,   220,   219,   222,   221,   223,   223,   224,   224,   224,
-     224,   224,   224,   224,   224,   224,   224,   224,   224,   224,
-     224,   224,   224,   224,   226,   225,   228,   227,   230,   229,
-     232,   231,   234,   233,   235,   236,   238,   237,   239,   239,
-     240,   240,   242,   241,   244,   243,   245,   245,   246,   246,
-     247,   247,   247,   247,   247,   247,   247,   247,   248,   249,
-     250,   252,   251,   254,   253,   256,   255,   257,   259,   258,
-     260,   262,   261,   263,   263,   264,   264,   266,   265,   268,
-     267,   269,   269,   270,   270,   271,   271,   271,   271,   271,
-     271,   272,   274,   273,   275,   276,   277,   279,   278,   280,
-     280,   281,   281,   283,   282,   285,   284,   286,   286,   287,
-     287,   287,   289,   288,   291,   290,   292,   292,   293,   293,
-     295,   294,   297,   296,   298,   298,   299,   299,   299,   299,
-     299,   299,   299,   301,   300,   302,   304,   303,   305,   306,
-     308,   307,   309,   309,   310,   310,   312,   311,   314,   313,
-     315,   315,   316,   316,   317,   317,   317,   317,   317,   317,
-     317,   317,   319,   318,   321,   320,   323,   322,   325,   324,
-     327,   326,   329,   328,   331,   330,   333,   332,   335,   334,
-     336,   336,   337,   231,   338,   338,   339,   339,   340,   340,
-     340,   340,   341,   343,   342,   345,   344,   346,   346,   347,
-     347,   347,   347,   347,   347,   347,   349,   348,   350,   350,
-     350,   351,   353,   352,   354,   355,   356,   358,   357,   359,
-     359,   360,   360,   362,   361,   364,   363,   366,   365,   368,
-     367,   370,   369,   372,   371,   373,   373,   374,   376,   375,
-     377,   377,   379,   378,   380,   380,   381,   381,   381,   381,
-     381,   382,   384,   383,   386,   385,   387,   387,   389,   388,
-     390,   390,   392,   391
+       0,   113,   115,   114,   116,   114,   117,   114,   118,   114,
+     119,   114,   120,   114,   121,   114,   122,   114,   123,   114,
+     124,   114,   125,   114,   126,   126,   126,   126,   126,   126,
+     126,   127,   129,   128,   130,   131,   131,   132,   132,   134,
+     133,   136,   135,   137,   137,   138,   138,   139,   141,   140,
+     142,   142,   143,   143,   143,   143,   143,   145,   144,   147,
+     146,   148,   148,   149,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   150,   151,   152,   153,   154,
+     156,   155,   158,   157,   160,   159,   162,   161,   164,   163,
+     165,   165,   166,   166,   166,   166,   166,   166,   166,   166,
+     166,   168,   167,   170,   169,   172,   171,   174,   173,   176,
+     175,   177,   178,   179,   181,   180,   182,   182,   183,   183,
+     184,   185,   187,   186,   188,   188,   189,   189,   190,   192,
+     191,   194,   193,   195,   195,   196,   196,   198,   197,   200,
+     199,   201,   201,   201,   202,   202,   204,   203,   206,   205,
+     208,   207,   209,   209,   210,   210,   210,   210,   210,   210,
+     211,   212,   213,   214,   215,   216,   218,   217,   219,   219,
+     220,   220,   222,   221,   224,   223,   225,   225,   226,   226,
+     226,   226,   226,   226,   226,   226,   226,   226,   226,   226,
+     226,   226,   226,   226,   226,   228,   227,   230,   229,   232,
+     231,   234,   233,   236,   235,   237,   238,   240,   239,   241,
+     241,   242,   242,   244,   243,   246,   245,   247,   247,   248,
+     248,   249,   249,   249,   249,   249,   249,   249,   249,   250,
+     251,   252,   254,   253,   256,   255,   258,   257,   259,   261,
+     260,   262,   264,   263,   265,   265,   266,   266,   268,   267,
+     270,   269,   271,   271,   272,   272,   273,   273,   273,   273,
+     273,   273,   274,   276,   275,   277,   278,   279,   281,   280,
+     282,   282,   283,   283,   285,   284,   287,   286,   288,   288,
+     289,   289,   289,   289,   291,   290,   293,   292,   295,   294,
+     296,   296,   297,   297,   299,   298,   301,   300,   302,   302,
+     303,   303,   303,   303,   303,   303,   303,   303,   305,   304,
+     306,   308,   307,   309,   310,   312,   311,   313,   313,   314,
+     314,   316,   315,   318,   317,   319,   319,   320,   320,   321,
+     321,   321,   321,   321,   321,   321,   321,   323,   322,   325,
+     324,   327,   326,   329,   328,   331,   330,   333,   332,   335,
+     334,   337,   336,   339,   338,   340,   340,   341,   233,   342,
+     342,   343,   343,   344,   344,   344,   344,   345,   347,   346,
+     349,   348,   350,   350,   351,   351,   351,   351,   351,   351,
+     351,   353,   352,   354,   354,   354,   355,   357,   356,   358,
+     359,   360,   362,   361,   363,   363,   364,   364,   366,   365,
+     368,   367,   370,   369,   372,   371,   374,   373,   376,   375,
+     377,   377,   378,   380,   379,   381,   381,   383,   382,   384,
+     384,   385,   385,   385,   385,   385,   386,   388,   387,   390,
+     389,   391,   391,   393,   392,   394,   394,   396,   395
   };
 
   const unsigned char
@@ -3412,48 +3445,48 @@ namespace isc { namespace dhcp {
        0,     2,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     0,     3,     0,     3,     0,     3,
        0,     3,     0,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     0,     1,     3,     5,     0,     4,
-       0,     4,     0,     1,     1,     3,     2,     0,     4,     1,
-       3,     1,     1,     1,     1,     1,     0,     6,     0,     4,
+       1,     1,     0,     4,     1,     0,     1,     3,     5,     0,
+       4,     0,     4,     0,     1,     1,     3,     2,     0,     4,
+       1,     3,     1,     1,     1,     1,     1,     0,     6,     0,
+       4,     1,     3,     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,
+       0,     6,     0,     4,     0,     4,     0,     6,     0,     6,
        1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       4,     3,     3,     3,     0,     6,     1,     3,     1,     1,
+       1,     1,     0,     6,     1,     3,     1,     1,     1,     0,
+       4,     0,     6,     0,     1,     1,     3,     0,     4,     0,
+       4,     1,     3,     1,     1,     1,     0,     4,     0,     4,
+       0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     0,     6,     0,     1,
+       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     3,     3,     3,     3,     3,     0,
-       6,     0,     4,     0,     4,     0,     6,     0,     6,     1,
+       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
+       4,     0,     4,     0,     4,     3,     3,     0,     6,     0,
+       1,     1,     3,     0,     4,     0,     4,     0,     1,     1,
        3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       3,     3,     3,     0,     6,     1,     3,     1,     1,     1,
-       1,     0,     6,     1,     3,     1,     1,     1,     0,     4,
-       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
-       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
-       6,     1,     3,     1,     1,     1,     1,     1,     1,     3,
-       3,     3,     3,     3,     3,     0,     6,     0,     1,     1,
-       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     3,     3,     0,     6,     0,     1,
-       1,     3,     0,     4,     0,     4,     0,     1,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
-       1,     0,     4,     0,     4,     0,     4,     1,     0,     4,
-       3,     0,     6,     0,     1,     1,     3,     0,     4,     0,
-       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     1,     1,     3,     0,     6,     0,
-       1,     1,     3,     0,     4,     0,     4,     1,     3,     1,
-       1,     1,     0,     4,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     3,     0,     4,     3,     3,
-       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
-       0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     0,     4,     0,     6,     0,     4,     0,     6,
-       1,     3,     0,     4,     0,     1,     1,     3,     1,     1,
-       1,     1,     1,     0,     4,     0,     6,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
-       1,     3,     0,     4,     3,     3,     3,     0,     6,     1,
-       3,     1,     1,     0,     4,     0,     4,     0,     6,     0,
-       4,     0,     4,     0,     6,     1,     3,     1,     0,     6,
-       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
-       1,     3,     0,     4
+       3,     1,     0,     4,     0,     4,     0,     4,     1,     0,
+       4,     3,     0,     6,     0,     1,     1,     3,     0,     4,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     0,     4,     1,     1,     3,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     0,     4,     0,     4,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       3,     0,     4,     3,     3,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
+       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     4,     0,     6,     1,     3,     0,     4,     0,
+       1,     1,     3,     1,     1,     1,     1,     1,     0,     4,
+       0,     6,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     0,     4,     1,     1,     1,     3,     0,     4,     3,
+       3,     3,     0,     6,     1,     3,     1,     1,     0,     4,
+       0,     4,     0,     6,     0,     4,     0,     4,     0,     6,
+       1,     3,     1,     0,     6,     1,     3,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     3,     0,     4,     0,
+       6,     1,     3,     0,     4,     1,     3,     0,     4
   };
 
 
@@ -3474,13 +3507,14 @@ namespace isc { namespace dhcp {
   "\"space\"", "\"csv-format\"", "\"record-types\"", "\"encapsulate\"",
   "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"", "\"prefix\"",
   "\"prefix-len\"", "\"excluded-prefix\"", "\"excluded-prefix-len\"",
-  "\"delegated-len\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
-  "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"mac-sources\"",
-  "\"relay-supplied-options\"", "\"host-reservation-identifiers\"",
-  "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"",
-  "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", "\"hw-address\"",
-  "\"hostname\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"",
-  "\"library\"", "\"parameters\"", "\"expired-leases-processing\"",
+  "\"delegated-len\"", "\"user-context\"", "\"subnet\"", "\"interface\"",
+  "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
+  "\"mac-sources\"", "\"relay-supplied-options\"",
+  "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"",
+  "\"client-class\"", "\"reservations\"", "\"ip-addresses\"",
+  "\"prefixes\"", "\"duid\"", "\"hw-address\"", "\"hostname\"",
+  "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", "\"library\"",
+  "\"parameters\"", "\"expired-leases-processing\"",
   "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"",
   "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
   "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"",
@@ -3494,7 +3528,7 @@ namespace isc { namespace dhcp {
   "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "\"constant string\"",
   "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
   "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10",
-  "$@11", "value", "sub_json", "map2", "$@12", "map_content",
+  "$@11", "value", "sub_json", "map2", "$@12", "map_value", "map_content",
   "not_empty_map", "list_generic", "$@13", "list2", "$@14", "list_content",
   "not_empty_list", "unknown_map_entry", "syntax_map", "$@15",
   "global_objects", "global_object", "dhcp6_object", "$@16", "sub_dhcp6",
@@ -3535,81 +3569,82 @@ namespace isc { namespace dhcp {
   "option_data_code", "option_data_space", "option_data_csv_format",
   "pools_list", "$@56", "pools_list_content", "not_empty_pools_list",
   "pool_list_entry", "$@57", "sub_pool6", "$@58", "pool_params",
-  "pool_param", "pool_entry", "$@59", "pd_pools_list", "$@60",
-  "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry",
-  "$@61", "sub_pd_pool", "$@62", "pd_pool_params", "pd_pool_param",
-  "pd_prefix", "$@63", "pd_prefix_len", "excluded_prefix", "$@64",
-  "excluded_prefix_len", "pd_delegated_len", "reservations", "$@65",
-  "reservations_list", "not_empty_reservations_list", "reservation",
-  "$@66", "sub_reservation", "$@67", "reservation_params",
-  "not_empty_reservation_params", "reservation_param", "ip_addresses",
-  "$@68", "prefixes", "$@69", "duid", "$@70", "hw_address", "$@71",
-  "hostname", "$@72", "reservation_client_classes", "$@73", "relay",
-  "$@74", "relay_map", "$@75", "client_classes", "$@76",
-  "client_classes_list", "$@77", "client_class_params",
-  "not_empty_client_class_params", "client_class_param",
-  "client_class_name", "client_class_test", "$@78", "server_id", "$@79",
-  "server_id_params", "server_id_param", "server_id_type", "$@80",
-  "duid_type", "htype", "identifier", "$@81", "time", "enterprise_id",
-  "dhcp4o6_port", "control_socket", "$@82", "control_socket_params",
-  "control_socket_param", "socket_type", "$@83", "socket_name", "$@84",
-  "dhcp_ddns", "$@85", "dhcp4_json_object", "$@86", "dhcpddns_json_object",
-  "$@87", "logging_object", "$@88", "logging_params", "logging_param",
-  "loggers", "$@89", "loggers_entries", "logger_entry", "$@90",
-  "logger_params", "logger_param", "debuglevel", "severity", "$@91",
-  "output_options_list", "$@92", "output_options_list_content",
-  "output_entry", "$@93", "output_params", "output_param", "$@94", YY_NULLPTR
+  "pool_param", "pool_entry", "$@59", "user_context", "$@60",
+  "pd_pools_list", "$@61", "pd_pools_list_content",
+  "not_empty_pd_pools_list", "pd_pool_entry", "$@62", "sub_pd_pool",
+  "$@63", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@64",
+  "pd_prefix_len", "excluded_prefix", "$@65", "excluded_prefix_len",
+  "pd_delegated_len", "reservations", "$@66", "reservations_list",
+  "not_empty_reservations_list", "reservation", "$@67", "sub_reservation",
+  "$@68", "reservation_params", "not_empty_reservation_params",
+  "reservation_param", "ip_addresses", "$@69", "prefixes", "$@70", "duid",
+  "$@71", "hw_address", "$@72", "hostname", "$@73",
+  "reservation_client_classes", "$@74", "relay", "$@75", "relay_map",
+  "$@76", "client_classes", "$@77", "client_classes_list", "$@78",
+  "client_class_params", "not_empty_client_class_params",
+  "client_class_param", "client_class_name", "client_class_test", "$@79",
+  "server_id", "$@80", "server_id_params", "server_id_param",
+  "server_id_type", "$@81", "duid_type", "htype", "identifier", "$@82",
+  "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@83",
+  "control_socket_params", "control_socket_param", "socket_type", "$@84",
+  "socket_name", "$@85", "dhcp_ddns", "$@86", "dhcp4_json_object", "$@87",
+  "dhcpddns_json_object", "$@88", "logging_object", "$@89",
+  "logging_params", "logging_param", "loggers", "$@90", "loggers_entries",
+  "logger_entry", "$@91", "logger_params", "logger_param", "debuglevel",
+  "severity", "$@92", "output_options_list", "$@93",
+  "output_options_list_content", "output_entry", "$@94", "output_params",
+  "output_param", "$@95", YY_NULLPTR
   };
 
 #if PARSER6_DEBUG
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   208,   208,   208,   209,   209,   210,   210,   211,   211,
-     212,   212,   213,   213,   214,   214,   215,   215,   216,   216,
-     217,   217,   218,   218,   226,   227,   228,   229,   230,   231,
-     232,   235,   240,   240,   252,   253,   256,   260,   267,   267,
-     275,   275,   282,   283,   286,   290,   301,   311,   311,   323,
-     324,   328,   329,   330,   331,   332,   335,   335,   352,   352,
-     360,   361,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
-     384,   385,   386,   387,   390,   395,   400,   405,   410,   415,
-     415,   425,   425,   433,   433,   443,   443,   453,   453,   463,
-     464,   467,   468,   469,   470,   471,   472,   473,   474,   475,
-     478,   478,   486,   486,   494,   494,   502,   502,   510,   510,
-     518,   523,   528,   533,   533,   543,   544,   547,   548,   551,
-     556,   561,   561,   571,   572,   575,   576,   579,   584,   584,
-     594,   594,   604,   605,   608,   609,   612,   612,   620,   620,
-     628,   629,   630,   633,   634,   637,   637,   645,   645,   653,
-     653,   663,   664,   667,   668,   669,   670,   671,   672,   675,
-     680,   685,   690,   695,   700,   708,   708,   721,   722,   725,
-     726,   733,   733,   756,   756,   765,   766,   770,   771,   772,
-     773,   774,   775,   776,   777,   778,   779,   780,   781,   782,
-     783,   784,   785,   786,   789,   789,   797,   797,   805,   805,
-     813,   813,   821,   821,   829,   834,   843,   843,   855,   856,
-     859,   860,   865,   865,   876,   876,   886,   887,   890,   891,
-     894,   895,   896,   897,   898,   899,   900,   901,   904,   906,
-     911,   913,   913,   921,   921,   929,   929,   937,   939,   939,
-     947,   956,   956,   968,   969,   974,   975,   980,   980,   991,
-     991,  1002,  1003,  1008,  1009,  1014,  1015,  1016,  1017,  1018,
-    1019,  1022,  1024,  1024,  1032,  1034,  1036,  1044,  1044,  1056,
-    1057,  1060,  1061,  1064,  1064,  1072,  1072,  1080,  1081,  1084,
-    1085,  1086,  1089,  1089,  1100,  1100,  1112,  1113,  1116,  1117,
-    1120,  1120,  1128,  1128,  1136,  1137,  1140,  1141,  1142,  1143,
-    1144,  1145,  1146,  1149,  1149,  1157,  1162,  1162,  1170,  1175,
-    1183,  1183,  1193,  1194,  1197,  1198,  1201,  1201,  1209,  1209,
-    1217,  1218,  1221,  1222,  1226,  1227,  1228,  1229,  1230,  1231,
-    1232,  1233,  1236,  1236,  1246,  1246,  1256,  1256,  1264,  1264,
-    1272,  1272,  1280,  1280,  1293,  1293,  1303,  1303,  1314,  1314,
-    1324,  1325,  1328,  1328,  1336,  1337,  1340,  1341,  1344,  1345,
-    1346,  1347,  1350,  1352,  1352,  1363,  1363,  1373,  1374,  1377,
-    1378,  1379,  1380,  1381,  1382,  1383,  1386,  1386,  1393,  1394,
-    1395,  1398,  1403,  1403,  1411,  1416,  1423,  1430,  1430,  1440,
-    1441,  1444,  1445,  1448,  1448,  1456,  1456,  1466,  1466,  1478,
-    1478,  1485,  1485,  1497,  1497,  1510,  1511,  1515,  1519,  1519,
-    1531,  1532,  1536,  1536,  1544,  1545,  1548,  1549,  1550,  1551,
-    1552,  1555,  1559,  1559,  1567,  1567,  1577,  1578,  1581,  1581,
-    1589,  1590,  1593,  1593
+       0,   210,   210,   210,   211,   211,   212,   212,   213,   213,
+     214,   214,   215,   215,   216,   216,   217,   217,   218,   218,
+     219,   219,   220,   220,   228,   229,   230,   231,   232,   233,
+     234,   237,   242,   242,   253,   256,   257,   260,   264,   271,
+     271,   279,   279,   286,   287,   290,   294,   305,   315,   315,
+     327,   328,   332,   333,   334,   335,   336,   339,   339,   356,
+     356,   364,   365,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,   386,
+     387,   388,   389,   390,   391,   394,   399,   404,   409,   414,
+     419,   419,   429,   429,   437,   437,   447,   447,   457,   457,
+     467,   468,   471,   472,   473,   474,   475,   476,   477,   478,
+     479,   482,   482,   490,   490,   498,   498,   506,   506,   514,
+     514,   522,   527,   532,   537,   537,   547,   548,   551,   552,
+     555,   560,   565,   565,   575,   576,   579,   580,   583,   588,
+     588,   598,   598,   608,   609,   612,   613,   616,   616,   624,
+     624,   632,   633,   634,   637,   638,   641,   641,   649,   649,
+     657,   657,   667,   668,   671,   672,   673,   674,   675,   676,
+     679,   684,   689,   694,   699,   704,   712,   712,   725,   726,
+     729,   730,   737,   737,   760,   760,   769,   770,   774,   775,
+     776,   777,   778,   779,   780,   781,   782,   783,   784,   785,
+     786,   787,   788,   789,   790,   793,   793,   801,   801,   809,
+     809,   817,   817,   825,   825,   833,   838,   847,   847,   859,
+     860,   863,   864,   869,   869,   880,   880,   890,   891,   894,
+     895,   898,   899,   900,   901,   902,   903,   904,   905,   908,
+     910,   915,   917,   917,   925,   925,   933,   933,   941,   943,
+     943,   951,   960,   960,   972,   973,   978,   979,   984,   984,
+     995,   995,  1006,  1007,  1012,  1013,  1018,  1019,  1020,  1021,
+    1022,  1023,  1026,  1028,  1028,  1036,  1038,  1040,  1048,  1048,
+    1060,  1061,  1064,  1065,  1068,  1068,  1076,  1076,  1084,  1085,
+    1088,  1089,  1090,  1091,  1094,  1094,  1102,  1102,  1112,  1112,
+    1124,  1125,  1128,  1129,  1132,  1132,  1140,  1140,  1148,  1149,
+    1152,  1153,  1154,  1155,  1156,  1157,  1158,  1159,  1162,  1162,
+    1170,  1175,  1175,  1183,  1188,  1196,  1196,  1206,  1207,  1210,
+    1211,  1214,  1214,  1222,  1222,  1230,  1231,  1234,  1235,  1239,
+    1240,  1241,  1242,  1243,  1244,  1245,  1246,  1249,  1249,  1259,
+    1259,  1269,  1269,  1277,  1277,  1285,  1285,  1293,  1293,  1306,
+    1306,  1316,  1316,  1327,  1327,  1337,  1338,  1341,  1341,  1349,
+    1350,  1353,  1354,  1357,  1358,  1359,  1360,  1363,  1365,  1365,
+    1376,  1376,  1386,  1387,  1390,  1391,  1392,  1393,  1394,  1395,
+    1396,  1399,  1399,  1406,  1407,  1408,  1411,  1416,  1416,  1424,
+    1429,  1436,  1443,  1443,  1453,  1454,  1457,  1458,  1461,  1461,
+    1469,  1469,  1479,  1479,  1491,  1491,  1498,  1498,  1510,  1510,
+    1523,  1524,  1528,  1532,  1532,  1544,  1545,  1549,  1549,  1557,
+    1558,  1561,  1562,  1563,  1564,  1565,  1568,  1572,  1572,  1580,
+    1580,  1590,  1591,  1594,  1594,  1602,  1603,  1606,  1606
   };
 
   // Print the state stack on the debug stream.
@@ -3644,8 +3679,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 3648 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 1601 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 3683 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 1614 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index 302ae838aa5fc1356bbb780e772418ad968dcdd1..08ad20088761696781b776b986326663caa03989 100644 (file)
@@ -305,6 +305,7 @@ namespace isc { namespace dhcp {
     union union_type
     {
       // value
+      // map_value
       // duid_type
       char dummy1[sizeof(ElementPtr)];
 
@@ -385,72 +386,73 @@ namespace isc { namespace dhcp {
         TOKEN_EXCLUDED_PREFIX = 298,
         TOKEN_EXCLUDED_PREFIX_LEN = 299,
         TOKEN_DELEGATED_LEN = 300,
-        TOKEN_SUBNET = 301,
-        TOKEN_INTERFACE = 302,
-        TOKEN_INTERFACE_ID = 303,
-        TOKEN_ID = 304,
-        TOKEN_RAPID_COMMIT = 305,
-        TOKEN_RESERVATION_MODE = 306,
-        TOKEN_MAC_SOURCES = 307,
-        TOKEN_RELAY_SUPPLIED_OPTIONS = 308,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 309,
-        TOKEN_CLIENT_CLASSES = 310,
-        TOKEN_TEST = 311,
-        TOKEN_CLIENT_CLASS = 312,
-        TOKEN_RESERVATIONS = 313,
-        TOKEN_IP_ADDRESSES = 314,
-        TOKEN_PREFIXES = 315,
-        TOKEN_DUID = 316,
-        TOKEN_HW_ADDRESS = 317,
-        TOKEN_HOSTNAME = 318,
-        TOKEN_RELAY = 319,
-        TOKEN_IP_ADDRESS = 320,
-        TOKEN_HOOKS_LIBRARIES = 321,
-        TOKEN_LIBRARY = 322,
-        TOKEN_PARAMETERS = 323,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 324,
-        TOKEN_RECLAIM_TIMER_WAIT_TIME = 325,
-        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 326,
-        TOKEN_HOLD_RECLAIMED_TIME = 327,
-        TOKEN_MAX_RECLAIM_LEASES = 328,
-        TOKEN_MAX_RECLAIM_TIME = 329,
-        TOKEN_UNWARNED_RECLAIM_CYCLES = 330,
-        TOKEN_SERVER_ID = 331,
-        TOKEN_LLT = 332,
-        TOKEN_EN = 333,
-        TOKEN_LL = 334,
-        TOKEN_IDENTIFIER = 335,
-        TOKEN_HTYPE = 336,
-        TOKEN_TIME = 337,
-        TOKEN_ENTERPRISE_ID = 338,
-        TOKEN_DHCP4O6_PORT = 339,
-        TOKEN_CONTROL_SOCKET = 340,
-        TOKEN_SOCKET_TYPE = 341,
-        TOKEN_SOCKET_NAME = 342,
-        TOKEN_DHCP_DDNS = 343,
-        TOKEN_LOGGING = 344,
-        TOKEN_LOGGERS = 345,
-        TOKEN_OUTPUT_OPTIONS = 346,
-        TOKEN_OUTPUT = 347,
-        TOKEN_DEBUGLEVEL = 348,
-        TOKEN_SEVERITY = 349,
-        TOKEN_DHCP4 = 350,
-        TOKEN_DHCPDDNS = 351,
-        TOKEN_TOPLEVEL_JSON = 352,
-        TOKEN_TOPLEVEL_DHCP6 = 353,
-        TOKEN_SUB_DHCP6 = 354,
-        TOKEN_SUB_INTERFACES6 = 355,
-        TOKEN_SUB_SUBNET6 = 356,
-        TOKEN_SUB_POOL6 = 357,
-        TOKEN_SUB_PD_POOL = 358,
-        TOKEN_SUB_RESERVATION = 359,
-        TOKEN_SUB_OPTION_DEF = 360,
-        TOKEN_SUB_OPTION_DATA = 361,
-        TOKEN_SUB_HOOKS_LIBRARY = 362,
-        TOKEN_STRING = 363,
-        TOKEN_INTEGER = 364,
-        TOKEN_FLOAT = 365,
-        TOKEN_BOOLEAN = 366
+        TOKEN_USER_CONTEXT = 301,
+        TOKEN_SUBNET = 302,
+        TOKEN_INTERFACE = 303,
+        TOKEN_INTERFACE_ID = 304,
+        TOKEN_ID = 305,
+        TOKEN_RAPID_COMMIT = 306,
+        TOKEN_RESERVATION_MODE = 307,
+        TOKEN_MAC_SOURCES = 308,
+        TOKEN_RELAY_SUPPLIED_OPTIONS = 309,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 310,
+        TOKEN_CLIENT_CLASSES = 311,
+        TOKEN_TEST = 312,
+        TOKEN_CLIENT_CLASS = 313,
+        TOKEN_RESERVATIONS = 314,
+        TOKEN_IP_ADDRESSES = 315,
+        TOKEN_PREFIXES = 316,
+        TOKEN_DUID = 317,
+        TOKEN_HW_ADDRESS = 318,
+        TOKEN_HOSTNAME = 319,
+        TOKEN_RELAY = 320,
+        TOKEN_IP_ADDRESS = 321,
+        TOKEN_HOOKS_LIBRARIES = 322,
+        TOKEN_LIBRARY = 323,
+        TOKEN_PARAMETERS = 324,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 325,
+        TOKEN_RECLAIM_TIMER_WAIT_TIME = 326,
+        TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 327,
+        TOKEN_HOLD_RECLAIMED_TIME = 328,
+        TOKEN_MAX_RECLAIM_LEASES = 329,
+        TOKEN_MAX_RECLAIM_TIME = 330,
+        TOKEN_UNWARNED_RECLAIM_CYCLES = 331,
+        TOKEN_SERVER_ID = 332,
+        TOKEN_LLT = 333,
+        TOKEN_EN = 334,
+        TOKEN_LL = 335,
+        TOKEN_IDENTIFIER = 336,
+        TOKEN_HTYPE = 337,
+        TOKEN_TIME = 338,
+        TOKEN_ENTERPRISE_ID = 339,
+        TOKEN_DHCP4O6_PORT = 340,
+        TOKEN_CONTROL_SOCKET = 341,
+        TOKEN_SOCKET_TYPE = 342,
+        TOKEN_SOCKET_NAME = 343,
+        TOKEN_DHCP_DDNS = 344,
+        TOKEN_LOGGING = 345,
+        TOKEN_LOGGERS = 346,
+        TOKEN_OUTPUT_OPTIONS = 347,
+        TOKEN_OUTPUT = 348,
+        TOKEN_DEBUGLEVEL = 349,
+        TOKEN_SEVERITY = 350,
+        TOKEN_DHCP4 = 351,
+        TOKEN_DHCPDDNS = 352,
+        TOKEN_TOPLEVEL_JSON = 353,
+        TOKEN_TOPLEVEL_DHCP6 = 354,
+        TOKEN_SUB_DHCP6 = 355,
+        TOKEN_SUB_INTERFACES6 = 356,
+        TOKEN_SUB_SUBNET6 = 357,
+        TOKEN_SUB_POOL6 = 358,
+        TOKEN_SUB_PD_POOL = 359,
+        TOKEN_SUB_RESERVATION = 360,
+        TOKEN_SUB_OPTION_DEF = 361,
+        TOKEN_SUB_OPTION_DATA = 362,
+        TOKEN_SUB_HOOKS_LIBRARY = 363,
+        TOKEN_STRING = 364,
+        TOKEN_INTEGER = 365,
+        TOKEN_FLOAT = 366,
+        TOKEN_BOOLEAN = 367
       };
     };
 
@@ -741,6 +743,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_DELEGATED_LEN (const location_type& l);
 
+    static inline
+    symbol_type
+    make_USER_CONTEXT (const location_type& l);
+
     static inline
     symbol_type
     make_SUBNET (const location_type& l);
@@ -1210,12 +1216,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 661,     ///< Last index in yytable_.
-      yynnts_ = 281,  ///< Number of nonterminal symbols.
+      yylast_ = 668,     ///< Last index in yytable_.
+      yynnts_ = 284,  ///< Number of nonterminal symbols.
       yyfinal_ = 24, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 112  ///< Number of tokens.
+      yyntokens_ = 113  ///< Number of tokens.
     };
 
 
@@ -1268,9 +1274,9 @@ namespace isc { namespace dhcp {
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111
+     105,   106,   107,   108,   109,   110,   111,   112
     };
-    const unsigned int user_token_number_max_ = 366;
+    const unsigned int user_token_number_max_ = 367;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1303,24 +1309,25 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1341,24 +1348,25 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         value.copy< ElementPtr > (v);
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1438,24 +1446,25 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         value.template destroy< ElementPtr > ();
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1482,24 +1491,25 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 125: // value
-      case 350: // duid_type
+      case 126: // value
+      case 130: // map_value
+      case 354: // duid_type
         value.move< ElementPtr > (s.value);
         break;
 
-      case 111: // "boolean"
+      case 112: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 110: // "floating point"
+      case 111: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 109: // "integer"
+      case 110: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 108: // "constant string"
+      case 109: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1569,7 +1579,7 @@ namespace isc { namespace dhcp {
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366
+     365,   366,   367
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1838,6 +1848,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_DELEGATED_LEN, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_USER_CONTEXT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_USER_CONTEXT, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_SUBNET (const location_type& l)
   {
@@ -2237,7 +2253,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2241 "dhcp6_parser.h" // lalr1.cc:377
+#line 2257 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index ca85a553e8be29e3dafc8269d7634b64897a778e..e1acfd6eed6ce67dc3766ab313c7e06843a6f2b1 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701102225
+// Generated 201701120056
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 9a4005eb75c80d92ba155f12744a4d3a6ed7e534..b454cf091721440102a2a9aab1c55bec317650ba 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701102225
+// Generated 201701120056
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index 1b934c75961c63d2b00bc85bc0347c7c73390394..fb4fc62d0c3fd6eee761bb77458a64f47861b010 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701102225
+// Generated 201701120056
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++