]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#42,!103] Addressed majority of review comments
authorThomas Markwalder <tmark@isc.org>
Wed, 7 Nov 2018 23:07:34 +0000 (18:07 -0500)
committerThomas Markwalder <tmark@isc.org>
Wed, 7 Nov 2018 23:07:34 +0000 (18:07 -0500)
    Most notable change is "queue-control" is now "dhcp-queue-control"

37 files changed:
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/parser_context.cc
src/bin/dhcp4/parser_context.h
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.h
src/bin/dhcp6/tests/config_parser_unittest.cc
src/lib/dhcp/Makefile.am
src/lib/dhcp/iface_mgr.cc
src/lib/dhcp/iface_mgr.h
src/lib/dhcp/packet_queue.h
src/lib/dhcp/packet_queue_mgr.h
src/lib/dhcp/packet_queue_mgr4.cc
src/lib/dhcp/packet_queue_mgr6.cc
src/lib/dhcp/socket_info.h
src/lib/dhcp/tests/packet_queue4_unittest.cc
src/lib/dhcp/tests/packet_queue6_unittest.cc
src/lib/dhcp/tests/packet_queue_mgr4_unittest.cc
src/lib/dhcp/tests/packet_queue_mgr6_unittest.cc
src/lib/dhcpsrv/Makefile.am
src/lib/dhcpsrv/parsers/dhcp_queue_control_parser.cc [moved from src/lib/dhcpsrv/parsers/queue_control_parser.cc with 71% similarity]
src/lib/dhcpsrv/parsers/dhcp_queue_control_parser.h [moved from src/lib/dhcpsrv/parsers/queue_control_parser.h with 70% similarity]
src/lib/dhcpsrv/srv_config.cc
src/lib/dhcpsrv/srv_config.h

index a6b911528a368f75685888a02dac254c83c2fccb..20b78029b718088b551a6e394b8bbbdf6324bbc1 100644 (file)
@@ -637,7 +637,7 @@ ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
     // Configure packet queue
     try {
         data::ConstElementPtr qc;
-        qc  = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+        qc  = CfgMgr::instance().getStagingCfg()->getDHCPQueueControl();
         if (!qc) {
             // @todo For now we're manually constructing default queue config
             // This probably needs to be built into the PQM?
index 95082ef4fdfc41c5fd654c7ee6e20ef5b131c93b..afa86bf449d165fcda760b0d8071a5271e0a9a13 100644 (file)
@@ -700,7 +700,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1466] =
+static const flex_int16_t yy_accept[1468] =
     {   0,
       168,  168,    0,    0,    0,    0,    0,    0,    0,    0,
       176,  174,   10,   11,  174,    1,  168,  165,  168,  168,
@@ -732,137 +732,137 @@ static const flex_int16_t yy_accept[1466] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  173,  171,    0,  170,
-      169,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  173,  171,    0,  170,  169,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  138,    0,  137,    0,    0,   73,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   34,    0,    0,
+      138,    0,  137,    0,    0,   73,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   34,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    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,   17,    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,    0,   17,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   18,
+        0,    0,    0,    0,  172,  169,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  139,    0,    0,  141,
+        0,    0,    0,    0,    0,    0,    0,   74,    0,    0,
+        0,    0,    0,    0,   59,    0,    0,    0,    0,    0,
+       91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   37,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       58,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   62,    0,   38,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   18,    0,    0,    0,    0,  172,  169,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,  139,    0,
-        0,  141,    0,    0,    0,    0,    0,    0,    0,   74,
-        0,    0,    0,    0,    0,    0,   59,    0,    0,    0,
-        0,    0,   91,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   37,    0,    0,    0,    0,    0,    0,
+        0,   88,   30,    0,    0,   35,    0,    0,    0,    0,
+        0,    0,    0,    0,   12,  146,    0,  143,    0,  142,
+        0,    0,    0,  101,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   58,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   62,    0,   38,    0,    0,
+        0,    0,    0,    0,    0,   81,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   32,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   61,    0,    0,    0,    0,    0,    0,    0,    0,
+      102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,   88,   30,    0,    0,   35,    0,
-        0,    0,    0,    0,    0,    0,    0,   12,  146,    0,
-      143,    0,  142,    0,    0,    0,  101,    0,    0,    0,
+        0,    0,    0,   97,    0,    0,    0,    0,    0,    0,
+        0,    7,    0,    0,  144,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   81,    0,    0,
+        0,    0,    0,    0,   72,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   83,    0,    0,    0,    0,    0,    0,
+        0,    0,   79,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       32,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   61,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  102,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   65,    0,
 
-        0,    0,    0,    0,    0,    0,   97,    0,    0,    0,
-        0,    0,    0,    0,    7,    0,    0,  144,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       76,    0,    0,    0,    0,    0,    0,    0,    0,   64,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   72,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   95,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   83,    0,    0,    0,    0,
-        0,    0,    0,    0,   79,    0,    0,    0,    0,    0,
+        0,    0,  107,   77,    0,    0,    0,    0,   82,   31,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   39,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   54,    0,    0,
 
-        0,   65,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   76,    0,    0,    0,    0,    0,    0,
-        0,    0,   64,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   95,
+        0,    0,    0,    0,    0,    0,    0,  147,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  107,   77,    0,    0,    0,    0,
-       82,   31,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   39,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   69,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   96,    0,
+        0,    0,    0,    0,   42,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   36,    0,    0,    0,   29,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   84,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-       54,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      147,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   93,    0,    0,    0,    0,
+        0,    0,    0,    0,  120,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       69,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       96,    0,    0,    0,    0,    0,   42,    0,    0,    0,
+       66,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   36,    0,    0,    0,    0,
-       29,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   84,    0,
+        0,    0,    0,    0,   23,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  125,    0,    0,  123,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  151,    0,    0,    0,    0,    0,    0,   94,
+        0,    0,    0,    0,    0,    0,   98,   80,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,   93,    0,
-        0,    0,    0,    0,    0,    0,    0,  120,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   23,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  125,
-        0,    0,  123,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  151,    0,    0,    0,    0,
-        0,    0,   94,    0,    0,    0,    0,    0,    0,   98,
-
-       80,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   92,   22,    0,  103,    0,
-        0,    0,    0,    0,    0,    0,    0,  129,    0,    0,
-        0,    0,   56,    0,    0,    0,    0,    0,  106,   33,
+        0,    0,    0,   92,   22,    0,  103,    0,    0,    0,
+        0,    0,    0,    0,    0,  129,    0,    0,    0,    0,
+       56,    0,    0,    0,    0,    0,  106,   33,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   53,    0,    0,    0,
+        0,    0,    0,   53,    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,   60,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  100,    0,    0,    0,    0,    0,
+        0,    0,  100,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,  154,    0,   57,   71,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   50,    0,    0,
-        0,    0,    0,    0,    0,  126,    0,  124,    0,  118,
-      117,    0,   46,    0,   21,    0,    0,    0,    0,    0,
-      140,    0,    0,   87,    0,    0,    0,    0,    0,    0,
-        0,    0,  115,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  104,   15,    0,   40,    0,    0,
-        0,    0,    0,  128,    0,    0,    0,    0,    0,    0,
-        0,   51,    0,    0,   99,    0,    0,    0,    0,   90,
-        0,    0,    0,    0,    0,    0,   63,    0,  149,    0,
-
-      148,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  154,    0,   57,   71,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   50,    0,    0,    0,    0,    0,
+        0,    0,  126,    0,  124,    0,  118,  117,    0,   46,
+        0,   21,    0,    0,    0,    0,    0,  140,    0,    0,
+       87,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      115,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  104,   15,    0,   40,    0,    0,    0,    0,
+        0,  128,    0,    0,    0,    0,    0,    0,   51,    0,
+        0,   99,    0,    0,    0,    0,   90,    0,    0,    0,
+        0,    0,    0,   63,    0,  149,    0,  148,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  119,    0,    0,    0,    0,
-        0,    0,    0,   14,    0,    0,   45,    0,    0,    0,
-        0,    0,  156,   85,   27,    0,    0,   47,  116,    0,
-        0,  152,  121,    0,    0,    0,    0,    0,    0,    0,
-        0,   25,    0,    0,   24,    0,  127,    0,    0,    0,
-        0,    0,   78,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   49,    0,    0,    0,
-
-        0,   41,    0,    0,    0,    0,    0,    0,  105,    0,
-        0,    0,   26,    0,  153,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   44,    0,    0,   20,
-      155,   55,    0,  150,  145,    0,   28,    0,   16,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       14,    0,    0,   45,    0,    0,    0,    0,    0,  156,
+       85,   27,    0,    0,   47,  116,    0,    0,    0,  152,
+      121,    0,    0,    0,    0,    0,    0,    0,    0,   25,
+        0,    0,   24,    0,  127,    0,    0,    0,    0,    0,
+       78,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   49,    0,    0,    0,    0,   41,
+
+        0,    0,    0,    0,    0,    0,    0,  105,    0,    0,
+        0,   26,    0,  153,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   44,    0,    0,   20,  155,
+       55,    0,  150,  145,    0,   28,    0,    0,   16,    0,
         0,  134,    0,    0,    0,    0,    0,    0,  113,    0,
        89,    0,    0,    0,    0,    0,    0,    0,    0,   68,
-        0,    0,    0,    0,    0,    0,    0,    0,  135,   13,
-        0,    0,    0,    0,    0,  122,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
-       19,    0,  131,    0,    0,    0,    0,    0,  130,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  135,
+       13,    0,    0,    0,    0,    0,  122,    0,    0,    0,
+        0,    0,    0,    0,  119,    0,    0,    0,    0,    0,
+      112,    0,   19,    0,  131,    0,    0,    0,    0,    0,
 
-        0,    0,  111,    0,    0,   48,    0,    0,   43,  133,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      130,    0,    0,    0,  111,    0,    0,   48,    0,    0,
+       43,  133,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  132,    0,   86,    0,    0,
-        0,    0,    0,    0,  109,  114,   52,    0,    0,    0,
-        0,  108,    0,    0,  136,    0,    0,    0,    0,    0,
-       75,    0,    0,  110,    0
+        0,    0,    0,    0,    0,    0,    0,  132,    0,   86,
+        0,    0,    0,    0,    0,    0,  109,  114,   52,    0,
+        0,    0,    0,  108,    0,    0,  136,    0,    0,    0,
+        0,    0,   75,    0,    0,  110,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -909,347 +909,347 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1478] =
+static const flex_int16_t yy_base[1480] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1828, 1829,   32, 1824,  141,    0,  201, 1829,  206,   88,
-       11,  213, 1829, 1806,  114,   25,    2,    6, 1829, 1829,
-       73,   11,   17, 1829, 1829, 1829,  104, 1812, 1767,    0,
-     1804,  107, 1819,  217,  247, 1829, 1763,  185, 1762, 1768,
-       93,   58, 1760,   91,  211,  195,   14,  273,  195, 1759,
-      181,  275,  202,  209,   76,   68,  188, 1768,  232,  219,
-      296,  284,  207, 1751,  230,  287,  324,  305, 1770,    0,
-      339,  359,  367,  374,  379, 1829,    0, 1829,  301,  344,
-      295,  336,  196,  348,  350,  292, 1829, 1767, 1806, 1829,
-
-      355, 1829,  395, 1795,  331, 1753, 1763,  351,  367, 1758,
-      363,  370,  373,  379,  241, 1801,    0,  446,  375, 1745,
-     1747, 1743, 1751,  363, 1747, 1736, 1737,   76, 1753, 1736,
-     1745, 1745,  322, 1736,  367, 1737, 1735,  359, 1781, 1785,
-     1727, 1778, 1720, 1743, 1740, 1740, 1734,  349, 1727, 1720,
-     1725, 1719,  381, 1730, 1723, 1714, 1713, 1727,  362, 1713,
-      381,  401, 1707,  442,  376,  390, 1728, 1725, 1726, 1724,
-      418, 1706, 1708,  422, 1700, 1717, 1709,    0,  401,  428,
-      441,  441,  445,  448, 1708, 1829,    0, 1751,  461, 1698,
-     1701,  444,  450, 1709,  460, 1752,  473, 1751,  454, 1750,
-
-     1829,  508, 1749,  491, 1710, 1690, 1706, 1703, 1702, 1693,
-      479, 1742, 1736, 1702, 1681, 1689, 1684, 1698, 1694, 1682,
-     1694, 1694, 1685, 1669, 1673, 1686, 1688, 1685, 1677, 1667,
-     1685, 1829, 1680, 1683, 1664, 1663, 1713, 1662, 1672, 1675,
-      453, 1671, 1659, 1670, 1706, 1653, 1709, 1646, 1661,  468,
-     1651, 1667, 1648, 1647, 1653, 1644, 1643, 1650, 1640, 1697,
-     1655, 1654, 1648,   77, 1655, 1650, 1642, 1632, 1647, 1646,
-     1641, 1645, 1626, 1642, 1628, 1634, 1641, 1629,  314, 1622,
-     1636, 1677, 1638,  415, 1629,  489, 1829, 1829,  491, 1829,
-     1829, 1616,    0,  457,  478, 1618,  525,  495, 1672, 1625,
-
-      477, 1829, 1670, 1829, 1664,  544, 1829,  505, 1606, 1662,
-     1608, 1614, 1664, 1621, 1616, 1619,  501, 1829, 1617, 1659,
-     1614, 1611,  536, 1617, 1655, 1649, 1604, 1599, 1596, 1645,
-     1604, 1593, 1609, 1641, 1589,  565, 1603, 1588, 1601, 1588,
-     1598, 1593, 1600, 1595, 1591,  465, 1589, 1592, 1587, 1583,
-     1631,  515, 1625, 1829, 1624, 1576, 1575, 1574, 1567, 1569,
-     1573, 1562, 1575,  542, 1620, 1575, 1572, 1575, 1829, 1574,
-     1563, 1563, 1575,  518, 1550, 1551, 1572,  529, 1554, 1603,
-     1550, 1564, 1563, 1549, 1561, 1560, 1559, 1558,  526, 1599,
-     1598, 1829, 1542, 1541,  576, 1554, 1829, 1829, 1553,    0,
-
-     1542, 1534,  516, 1539, 1590, 1589, 1547, 1587, 1829, 1535,
-     1585, 1829,  554,  614,  538, 1584, 1540, 1536, 1524, 1829,
-     1529, 1535, 1538, 1537, 1524, 1523, 1829, 1525, 1522,  190,
-     1520, 1522, 1829, 1530, 1527, 1512, 1525, 1520,  588, 1527,
-     1515, 1508, 1557, 1829, 1506, 1522, 1554, 1517, 1514, 1515,
-     1517, 1549, 1502, 1497, 1496, 1545, 1491, 1506, 1484, 1491,
-     1496, 1544, 1829, 1491, 1487, 1485, 1494, 1488, 1495, 1479,
-     1479, 1489, 1492, 1481, 1476, 1829, 1531, 1829, 1475, 1486,
-     1523, 1470, 1475, 1484, 1478, 1472, 1481, 1521, 1515, 1479,
-     1462, 1462, 1457, 1477, 1452, 1458, 1457, 1465, 1469, 1452,
-
-     1508, 1450, 1464, 1453, 1829, 1829, 1453, 1451, 1829, 1462,
-     1496, 1458,    0, 1442, 1459, 1497, 1447, 1829, 1829, 1444,
-     1829, 1450, 1829,  554,  562,  590, 1829, 1447, 1435, 1486,
-     1433, 1484, 1431, 1430, 1437, 1430, 1442, 1441, 1441, 1429,
-     1470, 1437, 1429, 1472, 1418, 1434, 1433, 1829, 1418, 1415,
-     1471, 1428, 1420, 1426, 1417, 1425, 1410, 1426, 1408, 1422,
-      551, 1404, 1398, 1403, 1418, 1415, 1416, 1413, 1454, 1411,
-     1829, 1397, 1399, 1408, 1406, 1443, 1442, 1395,  599, 1404,
-     1387, 1388, 1385, 1829, 1399, 1378, 1399, 1396, 1388, 1431,
-     1385, 1392, 1428, 1829, 1375, 1389, 1373, 1387, 1390, 1371,
-
-     1421, 1420, 1419, 1366, 1417, 1416, 1829,   14, 1378, 1378,
-     1376, 1359, 1364, 1366, 1829, 1372, 1362, 1829, 1407, 1355,
-     1410,  568,  577,  554, 1360, 1403,  562, 1407,  563, 1401,
-     1400, 1399, 1353, 1343, 1396, 1349, 1359, 1393, 1356, 1350,
-     1337, 1345, 1388, 1392, 1349, 1348, 1829, 1349, 1342, 1331,
-     1344, 1347, 1342, 1343, 1340, 1339, 1335, 1341, 1336, 1377,
-     1376, 1326, 1316,  560, 1373, 1829, 1372, 1321, 1313, 1314,
-     1363, 1326, 1313, 1324, 1829, 1312, 1321, 1320, 1320, 1360,
-     1303, 1312, 1305, 1316, 1293, 1297, 1348, 1312, 1294, 1304,
-     1344, 1343, 1342, 1289, 1340, 1304,  565,  582, 1281, 1291,
-
-      563, 1829, 1341, 1287, 1297, 1297, 1280, 1285, 1289, 1279,
-     1291, 1294, 1331, 1829, 1325,  585, 1278, 1286, 1285, 1280,
-     1276, 1283, 1829,    1,   24,   75,  187,  226,  288,  315,
-      375,  403,  507,  504,  601,  573,  573,  599,  589, 1829,
-      600,  601,  594,  605,  603,  646,  590,  592,  607,  594,
-      658,  617,  603,  606, 1829, 1829,  616,  621,  626,  614,
-     1829, 1829,  628,  615,  609,  614,  632,  619,  667,  620,
-      670,  621,  677, 1829,  624,  628,  629,  624,  682,  637,
-      627,  628,  624,  637,  648,  632,  650,  645,  646,  648,
-      641,  643,  644,  644,  646,  661,  700,  659,  664,  641,
-
-     1829,  666,  656,  701,  661,  651,  666,  667,  654,  668,
-     1829,  687,  695,  675,  665,  712,  677,  681,  720,  670,
-      665,  677,  672,  673,  669,  678,  673,  729,  688,  679,
-     1829,  681,  692,  677,  693,  687,  733,  701,  686,  687,
-     1829,  703,  706,  689,  746,  691, 1829,  708,  711,  691,
-      709,  747,  707,  703,  698,  716,  715,  716,  702,  717,
-      709,  716,  706,  724,  709, 1829,  717,  723,  711,  769,
-     1829,  720,  725,  767,  720,  732,  727,  731,  729,  727,
-      729,  739,  782,  728,  728,  785,  731,  743, 1829,  731,
-      739,  737,  742,  754,  738,  743,  753,  754,  759,  798,
-
-      757,  773,  779,  752,  763,  754,  806,  751, 1829,  751,
-      771,  760,  765,  772,  813,  814,  763, 1829,  759,  762,
-      761,  781,  778,  783,  784,  770,  778,  787,  767,  782,
-      790,  831, 1829,  832,  833,  786,  796,  798,  787,  783,
-      790,  799,  842,  791,  789,  791,  808,  847,  799,  798,
-      804,  802,  800,  853,  854,  850,  801, 1829,  815,  808,
-      799,  818,  806,  816,  813,  818,  814,  827,  827, 1829,
-      811,  812, 1829,  813,  871,  812,  831,  832,  830,  815,
-      836,  835,  819,  824,  842, 1829,  832,  865,  856,  828,
-      887,  850, 1829,  833,  835,  852,  850,  842,  846, 1829,
-
-     1829,  856,  891,  840,  893,  842,  900,  845,  856,  848,
-      854,  850,  868,  870,  871, 1829, 1829,  870, 1829,  855,
-      856,  876,  866,  859,  871,  913,  879, 1829,  871,  921,
-      864,  923, 1829,  924,  868,  874,  881,  923, 1829, 1829,
-      873,  878,  876,  890,  895,  878,  935,  894,  895,  896,
-      934,  888,  893,  942,  892,  944, 1829,  893,  946,  947,
-      889,  949,  910,  951,  895,  907,  912,  898,  928,  957,
-      917, 1829,  909,  960,  909,  924,  911,  907,  923,  928,
-      910,  968,  923,  928, 1829,  929,  922,  931,  932,  929,
-      919,  922,  922,  927,  980,  981,  926,  983,  980,  923,
-
-      938,  931,  989, 1829,  945, 1829, 1829,  950,  942,  952,
-      938,  939,  949,  999,  945,  955, 1003, 1829,  953,  953,
-      955,  957, 1008,  951,  954, 1829,  973, 1829,  957, 1829,
-     1829,  971, 1829,  965, 1829, 1015,  966, 1017, 1018, 1000,
-     1829,  978,  979, 1829,  967,  975,  969,  968,  971,  971,
-      972,  968, 1829,  990,  976,  977,  992,  992,  995,  995,
-      992, 1034,  998,  990, 1829, 1829, 1001, 1829,  998, 1003,
-     1004, 1001, 1043, 1829,  994,  995,  995, 1001, 1000, 1011,
-     1055, 1829, 1051, 1000, 1829, 1001, 1001, 1003, 1009, 1829,
-     1011, 1063, 1014, 1017, 1066, 1029, 1829, 1026, 1829, 1023,
-
-     1829, 1046, 1066, 1072, 1073, 1074, 1033, 1019, 1077, 1078,
-     1033, 1027, 1081, 1082, 1078, 1043, 1039, 1081, 1031, 1036,
-     1034, 1091, 1049, 1093, 1053, 1095, 1058, 1048, 1042, 1058,
-     1058, 1102, 1046, 1063, 1062, 1829, 1046, 1102, 1103, 1052,
-     1105, 1070, 1071, 1829, 1071, 1058, 1829, 1069, 1116, 1076,
-     1089, 1076, 1829, 1829, 1829, 1064, 1121, 1829, 1829, 1070,
-     1081, 1829, 1829, 1071, 1120, 1065, 1070, 1128, 1078, 1088,
-     1089, 1829, 1132, 1087, 1829, 1134, 1829, 1079, 1094, 1082,
-     1097, 1101, 1829, 1135, 1103, 1096, 1105, 1087, 1094, 1148,
-     1109, 1108, 1151, 1152, 1153, 1104, 1829, 1155, 1156, 1103,
-
-     1158, 1829, 1108, 1160, 1106, 1105, 1163, 1118, 1829, 1160,
-     1113, 1110, 1829, 1124, 1829, 1127, 1170, 1125, 1172, 1133,
-     1116, 1118, 1115, 1131, 1132, 1141, 1829, 1131, 1181, 1829,
-     1829, 1829, 1177, 1829, 1829, 1142, 1829, 1179, 1829, 1133,
-     1140, 1829, 1137, 1142, 1140, 1190, 1191, 1136, 1829, 1151,
-     1829, 1152, 1142, 1154, 1197, 1141, 1149, 1150, 1163, 1829,
-     1162, 1152, 1151, 1165, 1156, 1165, 1167, 1171, 1829, 1829,
-     1210, 1155, 1212, 1172, 1214, 1829, 1210, 1174, 1175, 1162,
-     1157, 1220, 1179, 1180, 1181, 1224, 1183, 1186, 1829, 1227,
-     1829, 1190, 1829, 1172, 1230, 1231, 1176, 1193, 1829, 1179,
-
-     1179, 1181, 1829, 1186, 1196, 1829, 1182, 1194, 1829, 1829,
-     1199, 1193, 1197, 1188, 1240, 1189, 1197, 1206, 1199, 1194,
-     1209, 1200, 1207, 1194, 1209, 1214, 1257, 1216, 1259, 1204,
-     1220, 1211, 1225, 1221, 1214, 1829, 1266, 1829, 1267, 1268,
-     1225, 1224, 1225, 1215, 1829, 1829, 1829, 1273, 1217, 1233,
-     1276, 1829, 1272, 1223, 1829, 1222, 1224, 1235, 1282, 1233,
-     1829, 1242, 1285, 1829, 1829, 1291, 1296, 1301, 1306, 1311,
-     1316, 1321, 1324, 1298, 1303, 1305, 1318
+     1831, 1832,   32, 1827,  141,    0,  201, 1832,  206,   88,
+       11,  213, 1832, 1809,  114,   25,    2,    6, 1832, 1832,
+       73,   11,   17, 1832, 1832, 1832,  104, 1815, 1770,    0,
+     1807,  107, 1822,  217,  247, 1832, 1766,  185, 1765, 1771,
+       93,   58, 1763,   91,  211,  195,   14,  273,  195, 1762,
+      181,  275,  202,  209,   76,   68,  188, 1771,  232,  219,
+      296,  284,  207, 1754,  230,  287,  324,  305, 1773,    0,
+      339,  359,  367,  374,  379, 1832,    0, 1832,  301,  344,
+      295,  336,  196,  348,  350,  292, 1832, 1770, 1809, 1832,
+
+      355, 1832,  395, 1798,  331, 1756, 1766,  351,  367, 1761,
+      363,  370,  373,  379,  241, 1804,    0,  446,  375, 1748,
+     1750, 1746, 1754,  363, 1750, 1739, 1740,   76, 1756, 1739,
+     1748, 1748,  322, 1739,  367, 1740, 1738,  359, 1784, 1788,
+     1730, 1781, 1723, 1746, 1743, 1743, 1737,  349, 1730, 1723,
+     1728, 1722,  381, 1733, 1726, 1717, 1716, 1730,  362, 1716,
+      381, 1732, 1709,  442,  376,  390, 1730, 1727, 1728, 1726,
+      417, 1708, 1710,  418, 1702, 1719, 1711,    0,  392,  428,
+      441,  401,  445,  448, 1710, 1832,    0, 1753,  454, 1700,
+     1703,  444,  450, 1711,  457, 1754,  460, 1753,  454, 1752,
+
+     1832,  498, 1751,  482, 1712, 1692, 1708, 1705, 1704, 1695,
+      468, 1744, 1738, 1704, 1683, 1691, 1686, 1700, 1696, 1684,
+     1696, 1696, 1687, 1671, 1675, 1688, 1690, 1687, 1679, 1669,
+     1687, 1832, 1682, 1685, 1666, 1665, 1715, 1664, 1674, 1677,
+      453, 1673, 1661, 1672, 1708, 1655, 1711, 1648, 1663,  505,
+     1653, 1669, 1650, 1649, 1655, 1646, 1645, 1652, 1700, 1658,
+     1657, 1651,   77, 1658, 1653, 1645, 1635, 1650, 1649, 1644,
+     1648, 1629, 1645, 1631, 1637, 1644, 1632,  314, 1625, 1639,
+     1680, 1641,  468, 1632,  484, 1832, 1832,  485, 1832, 1832,
+     1619,    0,  475,  489, 1621,  524,  505, 1675, 1628,  501,
+
+     1832, 1673, 1832, 1667,  551, 1832,  502, 1609, 1665, 1611,
+     1617, 1667, 1624, 1619, 1622,  491, 1832, 1620, 1662, 1617,
+     1614,  540, 1620, 1658, 1652, 1607, 1602, 1599, 1648, 1607,
+     1596, 1612, 1644, 1592,  548, 1606, 1591, 1604, 1591, 1601,
+     1596, 1603, 1598, 1594,  500, 1592, 1595, 1590, 1586, 1634,
+      509, 1628, 1832, 1627, 1579, 1578, 1577, 1570, 1572, 1576,
+     1565, 1578,  530, 1623, 1578, 1575, 1832, 1578, 1567, 1567,
+     1579,  521, 1554, 1555, 1576,  531, 1558, 1607, 1554, 1568,
+     1567, 1553, 1565, 1564, 1563, 1562,  527, 1603, 1602, 1832,
+     1546, 1545,  574, 1558, 1832, 1832, 1557,    0, 1546, 1538,
+
+      529, 1543, 1594, 1593, 1551, 1591, 1832, 1539, 1589, 1832,
+      556,  602,  559, 1588, 1544, 1540, 1528, 1832, 1533, 1539,
+     1542, 1541, 1528, 1527, 1832, 1529, 1526,  509, 1524, 1526,
+     1832, 1534, 1531, 1516, 1529, 1524,  583, 1531, 1519, 1512,
+     1561, 1832, 1510, 1526, 1558, 1521, 1518, 1519, 1521, 1553,
+     1506, 1501, 1500, 1549, 1495, 1510, 1488, 1495, 1500, 1548,
+     1832, 1495, 1491, 1489, 1498, 1492, 1499, 1483, 1483, 1493,
+     1496, 1485, 1480, 1832, 1535, 1832, 1479, 1490, 1475, 1480,
+     1489, 1483, 1477, 1486, 1526, 1520, 1484, 1467, 1467, 1462,
+     1482, 1457, 1463, 1462, 1470, 1474, 1457, 1513, 1455, 1469,
+
+     1458, 1832, 1832, 1458, 1456, 1832, 1467, 1501, 1463,    0,
+     1447, 1464, 1502, 1452, 1832, 1832, 1449, 1832, 1455, 1832,
+      556,  568,  596, 1832, 1452, 1440, 1491, 1438, 1489, 1436,
+     1435, 1442, 1435, 1447, 1446, 1446, 1428, 1433, 1474, 1441,
+     1433, 1476, 1422, 1438, 1437, 1832, 1422, 1419, 1475, 1432,
+     1424, 1430, 1421, 1429, 1414, 1430, 1412, 1426,  557, 1408,
+     1402, 1407, 1422, 1419, 1420, 1417, 1458, 1415, 1832, 1401,
+     1403, 1412, 1410, 1447, 1446, 1399,  600, 1408, 1391, 1392,
+     1389, 1832, 1403, 1382, 1401, 1393, 1436, 1390, 1397, 1433,
+     1832, 1380, 1394, 1378, 1392, 1395, 1376, 1426, 1425, 1424,
+
+     1371, 1422, 1421, 1832,   14, 1383, 1383, 1381, 1364, 1369,
+     1371, 1832, 1377, 1367, 1832, 1412, 1360, 1415,  573,  584,
+      560, 1365, 1408,  200, 1412,  573, 1406, 1405, 1404, 1358,
+     1348, 1401, 1354, 1362, 1363, 1397, 1360, 1354, 1341, 1349,
+     1392, 1396, 1353, 1352, 1832, 1353, 1346, 1335, 1348, 1351,
+     1346, 1347, 1344, 1343, 1339, 1345, 1340, 1381, 1380, 1330,
+     1320,  575, 1377, 1832, 1376, 1325, 1317, 1318, 1367, 1330,
+     1317, 1328, 1832, 1316, 1325, 1324, 1324, 1364, 1307, 1316,
+     1321, 1298, 1302, 1353, 1317, 1299, 1309, 1349, 1348, 1347,
+     1294, 1345, 1309,  579,  593, 1286, 1296,  577, 1832, 1346,
+
+     1292, 1302, 1302, 1285, 1290, 1294, 1284, 1296, 1299, 1336,
+     1832, 1330,  577, 1283, 1291, 1290, 1285, 1281, 1288, 1832,
+     1276, 1289,    5,   79,  175,  244,  284,  304,  372,  381,
+      411,  422,  532,  501,  531,  591,  582, 1832,  595,  595,
+      598,  609,  607,  651,  595,  597,  612,  599,  657,  616,
+      602,  605, 1832, 1832,  615,  620,  625,  613, 1832, 1832,
+      627,  614,  608,  613,  631,  618,  666,  619,  669,  620,
+      676, 1832,  623,  627,  622,  680,  635,  625,  626,  622,
+      635,  646,  630,  648,  643,  644,  646,  639,  641,  642,
+      642,  644,  659,  698,  657,  662,  639, 1832,  664,  654,
+
+      699,  659,  649,  664,  665,  652,  666, 1832,  685,  693,
+      673,  663,  710,  675,  679,  718,  668,  663,  675,  670,
+      671,  667,  676,  671,  727,  686,  687,  678, 1832,  680,
+      691,  676,  692,  687,  732,  701,  685,  686, 1832,  702,
+      705,  688,  745,  690, 1832,  707,  710,  690,  708,  746,
+      706,  702,  697,  715,  714,  715,  701,  716,  708,  715,
+      705,  723,  708, 1832,  716,  722,  767, 1832,  718,  723,
+      765,  718,  730,  724,  729,  727,  725,  727,  737,  780,
+      726,  726,  783,  729,  741, 1832,  729,  737,  735,  740,
+      752,  736,  741,  751,  752,  757,  796,  755,  771,  776,
+
+      750,  761,  752,  804,  749, 1832,  749,  769,  758,  763,
+      770,  811,  812,  761, 1832,  809,  758,  761,  760,  780,
+      777,  782,  783,  769,  777,  786,  766,  783,  790,  830,
+     1832,  831,  832,  785,  795,  797,  786,  782,  789,  798,
+      841,  790,  788,  790,  807,  846,  798,  797,  803,  801,
+      799,  852,  853,  849, 1832,  813,  806,  797,  816,  804,
+      814,  811,  816,  812,  825,  825, 1832,  809,  810, 1832,
+      811,  869,  810,  829,  830,  827,  813,  834,  833,  817,
+      822,  840, 1832,  830,  863,  854,  826,  885,  848, 1832,
+      831,  833,  850,  848,  840,  844, 1832, 1832,  854,  854,
+
+      890,  839,  892,  841,  899,  844,  855,  847,  853,  849,
+      868,  869,  870, 1832, 1832,  869, 1832,  854,  856,  875,
+      865,  858,  870,  912,  878, 1832,  870,  920,  863,  922,
+     1832,  923,  867,  873,  880,  922, 1832, 1832,  872,  874,
+      888,  893,  876,  933,  892,  893,  894,  932,  886,  891,
+      940,  890,  942, 1832,  891,  944,  945,  887,  947,  908,
+      949,  893,  905,  910,  896,  926,  955,  915, 1832,  907,
+      958,  907,  922,  909,  905,  921,  926,  913,  909,  967,
+      922,  927, 1832,  928,  921,  930,  931,  928,  918,  921,
+      921,  926,  979,  980,  925,  983,  979,  922,  937,  930,
+
+      989, 1832,  944, 1832, 1832,  949,  941,  951,  937,  938,
+      997,  943,  953, 1001, 1832,  951,  951,  953,  955, 1006,
+      949,  952, 1832,  971, 1832,  955, 1832, 1832,  969, 1832,
+      963, 1832, 1013,  964, 1015, 1016,  998, 1832,  976,  977,
+     1832,  965,  973,  967,  966,  969,  969,  970,  977,  967,
+     1832,  989,  975,  976,  991,  991,  994,  994,  991, 1033,
+      997,  990, 1832, 1832, 1000, 1832,  997, 1002, 1003, 1000,
+     1042, 1832,  993,  994,  994, 1000,  999, 1010, 1832, 1049,
+      998, 1832,  999,  999, 1001, 1007, 1832, 1009, 1061, 1012,
+     1015, 1064, 1027, 1832, 1024, 1832, 1021, 1832, 1044, 1064,
+
+     1070, 1071, 1072, 1031, 1017, 1075, 1076, 1031, 1021, 1026,
+     1080, 1081, 1077, 1042, 1038, 1080, 1030, 1035, 1033, 1090,
+     1048, 1092, 1052, 1094, 1058, 1047, 1041, 1057, 1057, 1101,
+     1045, 1062, 1061, 1045, 1101, 1102, 1051, 1104, 1069, 1070,
+     1832, 1070, 1057, 1832, 1068, 1115, 1075, 1088, 1075, 1832,
+     1832, 1832, 1063, 1120, 1832, 1832, 1069, 1067, 1081, 1832,
+     1832, 1071, 1120, 1065, 1070, 1128, 1078, 1088, 1089, 1832,
+     1132, 1087, 1832, 1134, 1832, 1079, 1094, 1082, 1097, 1101,
+     1832, 1135, 1103, 1096, 1105, 1087, 1096, 1148, 1109, 1108,
+     1151, 1152, 1153, 1104, 1832, 1155, 1156, 1103, 1158, 1832,
+
+     1108, 1108, 1161, 1107, 1106, 1164, 1119, 1832, 1161, 1114,
+     1111, 1832, 1125, 1832, 1128, 1171, 1126, 1173, 1134, 1117,
+     1119, 1116, 1132, 1133, 1142, 1832, 1132, 1182, 1832, 1832,
+     1832, 1178, 1832, 1832, 1143, 1832, 1180, 1137, 1832, 1135,
+     1142, 1832, 1139, 1144, 1142, 1192, 1193, 1138, 1832, 1153,
+     1832, 1154, 1144, 1156, 1199, 1143, 1151, 1152, 1165, 1832,
+     1164, 1154, 1153, 1207, 1168, 1159, 1168, 1170, 1174, 1832,
+     1832, 1213, 1158, 1215, 1175, 1217, 1832, 1213, 1177, 1178,
+     1165, 1160, 1223, 1182, 1832, 1183, 1184, 1227, 1186, 1189,
+     1832, 1230, 1832, 1193, 1832, 1175, 1233, 1234, 1179, 1196,
+
+     1832, 1182, 1182, 1184, 1832, 1189, 1199, 1832, 1185, 1197,
+     1832, 1832, 1202, 1196, 1200, 1191, 1243, 1192, 1200, 1209,
+     1202, 1197, 1212, 1203, 1210, 1197, 1212, 1217, 1260, 1219,
+     1262, 1207, 1223, 1214, 1228, 1224, 1217, 1832, 1269, 1832,
+     1270, 1271, 1228, 1227, 1228, 1218, 1832, 1832, 1832, 1276,
+     1220, 1236, 1279, 1832, 1275, 1226, 1832, 1225, 1227, 1238,
+     1285, 1236, 1832, 1245, 1288, 1832, 1832, 1294, 1299, 1304,
+     1309, 1314, 1319, 1324, 1327, 1301, 1306, 1308, 1321
     } ;
 
-static const flex_int16_t yy_def[1478] =
+static const flex_int16_t yy_def[1480] =
     {   0,
-     1466, 1466, 1467, 1467, 1466, 1466, 1466, 1466, 1466, 1466,
-     1465, 1465, 1465, 1465, 1465, 1468, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1469,
-     1465, 1465, 1465, 1470,   15, 1465,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1471,   45,   45,
+     1468, 1468, 1469, 1469, 1468, 1468, 1468, 1468, 1468, 1468,
+     1467, 1467, 1467, 1467, 1467, 1470, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1471,
+     1467, 1467, 1467, 1472,   15, 1467,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1473,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1468,
-     1465, 1465, 1465, 1465, 1465, 1465, 1472, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1469, 1465,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1470,
+     1467, 1467, 1467, 1467, 1467, 1467, 1474, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1471, 1467,
 
-     1470, 1465, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1473,   45, 1471,   45,   45,
+     1472, 1467, 1467,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1475,   45, 1473,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1472, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1474,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1473,
+       45,   45,   45,   45,   45,   45,   45, 1474, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1476,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1475,
 
-     1465, 1471,   45,   45,   45,   45,   45,   45,   45,   45,
+     1467, 1473,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1465,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1467,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1475,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1477,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45, 1465,   45, 1465,   45, 1471, 1465,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
+     1467,   45, 1467,   45, 1473, 1467,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1467,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1465,   45,
+       45,   45, 1467,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1467,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1467,
+       45,   45,   45,   45, 1467, 1467, 1467, 1478,   45,   45,
+
+       45,   45,   45,   45,   45,   45, 1467,   45,   45, 1467,
+       45, 1473,   45,   45,   45,   45,   45, 1467,   45,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1467,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1467,   45, 1467,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1465,   45,   45,   45,   45, 1465, 1465, 1465, 1476,
 
-       45,   45,   45,   45,   45,   45,   45,   45, 1465,   45,
-       45, 1465,   45, 1471,   45,   45,   45,   45,   45, 1465,
-       45,   45,   45,   45,   45,   45, 1465,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
+       45, 1467, 1467,   45,   45, 1467,   45,   45, 1467, 1479,
+       45,   45,   45,   45, 1467, 1467,   45, 1467,   45, 1467,
+       45,   45,   45, 1467,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45, 1465,   45,   45,
+       45,   45,   45,   45,   45, 1467,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1467,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1467,   45,   45,   45,   45,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45, 1465, 1465,   45,   45, 1465,   45,
-       45, 1465, 1477,   45,   45,   45,   45, 1465, 1465,   45,
-     1465,   45, 1465,   45,   45,   45, 1465,   45,   45,   45,
+       45,   45,   45, 1467,   45,   45,   45,   45,   45,   45,
+       45, 1467,   45,   45, 1467,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1467,   45,   45,   45,   45,   45,   45,
+       45,   45, 1467,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1467,   45,
 
-       45,   45,   45,   45,   45,   45, 1465,   45,   45,   45,
-       45,   45,   45,   45, 1465,   45,   45, 1465,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45, 1467,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1465,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1467,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45,   45,   45,   45,
-       45,   45,   45,   45, 1465,   45,   45,   45,   45,   45,
+       45,   45, 1467, 1467,   45,   45,   45,   45, 1467, 1467,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1467,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1467,   45,   45,
 
-       45, 1465,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1465,
+       45,   45,   45,   45,   45,   45,   45, 1467,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1465, 1465,   45,   45,   45,   45,
-     1465, 1465,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1467,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1467,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1467,   45,   45,   45, 1467,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1467,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1467,   45,   45,   45,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1465,   45,   45,   45,   45,   45, 1465,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45,   45,   45,   45,
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1465,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1467,   45,   45, 1467,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1467,   45,   45,   45,   45,   45,   45, 1467,
+       45,   45,   45,   45,   45,   45, 1467, 1467,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45, 1465,   45,
-       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1465,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45, 1465,
-
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465, 1465,   45, 1465,   45,
-       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45, 1465, 1465,
+       45,   45,   45, 1467, 1467,   45, 1467,   45,   45,   45,
+       45,   45,   45,   45,   45, 1467,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45, 1467, 1467,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1465,   45,   45,   45,
+       45,   45,   45, 1467,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1467,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1465,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1465,   45,   45,   45,   45,   45,
+       45,   45, 1467,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45, 1465,   45, 1465, 1465,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45, 1465,   45, 1465,
-     1465,   45, 1465,   45, 1465,   45,   45,   45,   45,   45,
-     1465,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1465, 1465,   45, 1465,   45,   45,
-       45,   45,   45, 1465,   45,   45,   45,   45,   45,   45,
-       45, 1465,   45,   45, 1465,   45,   45,   45,   45, 1465,
-       45,   45,   45,   45,   45,   45, 1465,   45, 1465,   45,
-
-     1465,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1467,   45, 1467, 1467,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
+       45,   45, 1467,   45, 1467,   45, 1467, 1467,   45, 1467,
+       45, 1467,   45,   45,   45,   45,   45, 1467,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1467, 1467,   45, 1467,   45,   45,   45,   45,
+       45, 1467,   45,   45,   45,   45,   45,   45, 1467,   45,
+       45, 1467,   45,   45,   45,   45, 1467,   45,   45,   45,
+       45,   45,   45, 1467,   45, 1467,   45, 1467,   45,   45,
+
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45,   45,   45,   45,
-       45,   45,   45, 1465,   45,   45, 1465,   45,   45,   45,
-       45,   45, 1465, 1465, 1465,   45,   45, 1465, 1465,   45,
-       45, 1465, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45, 1465,   45,   45, 1465,   45, 1465,   45,   45,   45,
-       45,   45, 1465,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1465,   45,   45,   45,
-
-       45, 1465,   45,   45,   45,   45,   45,   45, 1465,   45,
-       45,   45, 1465,   45, 1465,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1465,   45,   45, 1465,
-     1465, 1465,   45, 1465, 1465,   45, 1465,   45, 1465,   45,
-       45, 1465,   45,   45,   45,   45,   45,   45, 1465,   45,
-     1465,   45,   45,   45,   45,   45,   45,   45,   45, 1465,
-       45,   45,   45,   45,   45,   45,   45,   45, 1465, 1465,
-       45,   45,   45,   45,   45, 1465,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1465,   45,
-     1465,   45, 1465,   45,   45,   45,   45,   45, 1465,   45,
-
-       45,   45, 1465,   45,   45, 1465,   45,   45, 1465, 1465,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1467,   45,   45, 1467,   45,   45,   45,   45,   45, 1467,
+     1467, 1467,   45,   45, 1467, 1467,   45,   45,   45, 1467,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45, 1467,
+       45,   45, 1467,   45, 1467,   45,   45,   45,   45,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45, 1467,
+
+       45,   45,   45,   45,   45,   45,   45, 1467,   45,   45,
+       45, 1467,   45, 1467,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1467,   45,   45, 1467, 1467,
+     1467,   45, 1467, 1467,   45, 1467,   45,   45, 1467,   45,
+       45, 1467,   45,   45,   45,   45,   45,   45, 1467,   45,
+     1467,   45,   45,   45,   45,   45,   45,   45,   45, 1467,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1467,
+     1467,   45,   45,   45,   45,   45, 1467,   45,   45,   45,
+       45,   45,   45,   45, 1467,   45,   45,   45,   45,   45,
+     1467,   45, 1467,   45, 1467,   45,   45,   45,   45,   45,
+
+     1467,   45,   45,   45, 1467,   45,   45, 1467,   45,   45,
+     1467, 1467,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45, 1465,   45,   45,
-       45,   45,   45,   45, 1465, 1465, 1465,   45,   45,   45,
-       45, 1465,   45,   45, 1465,   45,   45,   45,   45,   45,
-     1465,   45,   45, 1465,    0, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465
+       45,   45,   45,   45,   45,   45,   45, 1467,   45, 1467,
+       45,   45,   45,   45,   45,   45, 1467, 1467, 1467,   45,
+       45,   45,   45, 1467,   45,   45, 1467,   45,   45,   45,
+       45,   45, 1467,   45,   45, 1467,    0, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467
     } ;
 
-static const flex_int16_t yy_nxt[1901] =
+static const flex_int16_t yy_nxt[1904] =
     {   0,
-     1465,   13,   14,   13, 1465,   15,   16, 1465,   17,   18,
-       19,   20,   21,   22,   22,   22,   23,   24,   86,  702,
-       37,   14,   37,   87,   25,   26,   38, 1465,  703,   27,
+     1467,   13,   14,   13, 1467,   15,   16, 1467,   17,   18,
+       19,   20,   21,   22,   22,   22,   23,   24,   86,  699,
+       37,   14,   37,   87,   25,   26,   38, 1467,  700,   27,
        37,   14,   37,   42,   28,   42,   38,   92,   93,   29,
       115,   30,   13,   14,   13,   91,   92,   25,   31,   93,
-       13,   14,   13,   13,   14,   13,   32,   40,  820,   13,
-       14,   13,   33,   40,  115,   92,   93,  821,   91,   34,
+       13,   14,   13,   13,   14,   13,   32,   40, 1467,   13,
+       14,   13,   33,   40,  115,   92,   93,  819,   91,   34,
        35,   13,   14,   13,   95,   15,   16,   96,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
        13,  109,   39,   91,   25,   26,   13,   14,   13,   27,
@@ -1257,7 +1257,7 @@ static const flex_int16_t yy_nxt[1901] =
        39,   85,   85,   85,   28,   42,   41,   42,   42,   29,
        42,   30,   83,  108,   41,  111,   94,   25,   31,  109,
       215,  216,   89,  136,   89,  138,   32,   90,   90,   90,
-      137,  373,   33,  139,  374,   83,  108,  822,  111,   34,
+      137,  371,   33,  139,  372,   83,  108,  820,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   47,   45,   45,   45,   45,
        45,   48,   45,   49,   50,   45,   51,   45,   52,   53,
@@ -1268,201 +1268,202 @@ static const flex_int16_t yy_nxt[1901] =
        74,   75,   76,   77,   78,   79,   57,   45,   45,   45,
        45,   45,   81,  105,   82,   82,   82,   81,  114,   84,
        84,   84,  102,  105,   81,   83,   84,   84,   84,  108,
-       83,  181,  122,  112,  140,  123,  539,   83,  124,  105,
-      125,  114,  126,  113,  141,  823,  142,  132,   83,  119,
-      159,  540,  108,   83,  160,  120,  112,  103,  133,  181,
+       83,  181,  122,  112,  140,  123,  821,   83,  124,  105,
+      125,  114,  126,  113,  141,  718,  142,  132,   83,  119,
+      159,  719,  108,   83,  160,  120,  112,  103,  133,  181,
        83,   45,  148,  135,  161,  199,  149,   45,  134,   45,
        45,  113,   45,  163,   45,   45,   45,  164,  117,  144,
-      145,   45,   45,  146,   45,   45,  150,  824,  199,  147,
+      145,   45,   45,  146,   45,   45,  150,  822,  199,  147,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   90,   90,   90,   45,  127,  302,
-      111,   45,  128,  179,  389,  129,  130,  181,  114,   45,
-      165,  825,  154,   45,  166,   45,  118,  167,  131,  151,
+       45,   45,   45,   45,   90,   90,   90,   45,  127,  301,
+      111,   45,  128,  179,  387,  129,  130,  181,  114,   45,
+      165,  823,  154,   45,  166,   45,  118,  167,  131,  151,
       155,  152,  156,  153,  168,  169,  112,  157,  158,  179,
       170,  174,   85,   85,   85,  184,  113,   90,   90,   90,
-      102,  175,  826,   83,  180,  221,  176,  222,  189,  171,
+      102,  175,  824,   83,  180,  221,  176,  222,  189,  171,
        81,  172,   82,   82,   82,   89,  179,   89,  180,  192,
        90,   90,   90,   83,  113,   81,   83,   84,   84,   84,
       180,  173,   85,   85,   85,  103,  189,  193,   83,  195,
 
       101,  196,  182,   83,  183,  192,   83,  101,  197,  209,
       198,  240,  189,  228,  224,  241,  229,  195,  210,  211,
-      230,   83,  252,  253,  193,  394,   83,  195,  196,  203,
-      225,  270,  271,  827,  286,  101,  197,  198,  255,  101,
-      204,  256,  257,  101,  258,  195,  272,  246,  259,  196,
-      273,  101,  261,  198,  274,  101,  287,  101,  187,  202,
-      202,  202,  286,  346,  828,  288,  202,  202,  202,  202,
-      202,  202,  288,  287,  286,  395,  279,  298,  357,  299,
-      282,  295,  287,  305,  301,  262,  263,  264,  288,  202,
-      202,  202,  202,  202,  202,  291,  265,  303,  266,  290,
-
-      267,  268,  289,  269,  295,  298,  299,  301,  401,  411,
-      305,  295,  358,  397,  347,  397,  403,  348,  402,  408,
-      303,  306,  306,  306,  457,  458,  359,  315,  306,  306,
-      306,  306,  306,  306,  308,  316,  397,  411,  398,  405,
-      406,  317,  408,  403,  424,  403,  430,  476,  407,  516,
-      431,  306,  306,  306,  306,  306,  306,  414,  414,  414,
-      829,  425,  830,  464,  414,  414,  414,  414,  414,  414,
-      444,  516,  415,  465,  486,  445,  491,  516,  487,  503,
-      492,  509,  504,  524,  622,  525,  510,  414,  414,  414,
-      414,  414,  414,  548,  623,  618,  657,  658,  549,  526,
-
-      624,  716,  715,  477,  675,  717,  831,  721,  724,  725,
-      524,  622,  525,  722,  759,  718,  791,  760,  813,  799,
-      832,  446,  623,  792,  716,  800,  447,   45,   45,   45,
-      715,  833,  793,  794,   45,   45,   45,   45,   45,   45,
-      795,  676,  834,  835,  796,  836,  813,  837,  838,  839,
-      840,  841,  843,  844,  845,  846,  842,   45,   45,   45,
-       45,   45,   45,  847,  848,  849,  850,  851,  852,  853,
-      854,  855,  856,  857,  858,  859,  861,  862,  863,  860,
-      864,  865,  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,  891,  892,  893,
-      894,  895,  896,  897,  898,  899,  900,  901,  902,  903,
-      904,  905,  906,  907,  908,  909,  910,  911,  912,  913,
-      914,  915,  916,  917,  918,  919,  920,  921,  922,  923,
-      924,  925,  903,  926,  927,  902,  928,  929,  930,  931,
-      932,  933,  935,  936,  937,  938,  939,  940,  941,  942,
-      943,  944,  945,  946,  947,  948,  949,  950,  951,  952,
-      954,  955,  956,  957,  958,  959,  960,  961,  962,  963,
-      953,  964,  965,  966,  967,  968,  969,  970,  971,  972,
-      973,  974,  975,  976,  977,  978,  979,  980,  981,  982,
-
-      983,  984,  985,  986,  987,  988,  990,  934,  989,  991,
-      992,  993,  994,  995,  996,  997,  998,  999, 1000, 1001,
-     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
-     1012, 1013, 1014,  988, 1015,  989, 1016, 1017, 1019, 1021,
-     1022, 1023, 1018, 1024, 1025, 1026, 1027, 1028, 1029, 1030,
-     1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040,
-     1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050,
-     1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060,
-     1020, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
-     1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079,
-
-     1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089,
-     1090, 1091, 1069, 1092, 1093, 1094, 1095, 1096, 1070, 1097,
-     1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
-     1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117,
-     1118, 1119, 1120, 1121, 1122, 1124, 1125, 1126, 1127, 1128,
-     1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138,
-     1139, 1140, 1141, 1142, 1143, 1144, 1146, 1147, 1148, 1149,
-     1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159,
-     1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1140,
-     1169, 1170, 1171, 1173, 1174, 1123, 1175, 1176, 1177, 1178,
-
-     1172, 1179, 1180, 1181, 1182, 1183, 1184, 1145, 1185, 1186,
-     1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196,
-     1197, 1198, 1199, 1201, 1202, 1203, 1204, 1200, 1205, 1206,
-     1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216,
-     1217, 1218, 1219, 1220, 1221, 1222, 1223, 1202, 1224, 1225,
-     1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235,
-     1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,
-     1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255,
-     1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
-     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1274, 1275, 1276,
-
-     1277, 1278, 1251, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
-     1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295,
-     1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305,
-     1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315,
-     1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325,
-     1326, 1299, 1273, 1327, 1328, 1329, 1330, 1331, 1332, 1333,
-     1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343,
-     1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353,
-     1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363,
-     1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
-
-     1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383,
-     1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393,
-     1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403,
-     1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413,
-     1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423,
-     1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433,
-     1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443,
-     1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453,
-     1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463,
-     1464,   12,   12,   12,   12,   12,   36,   36,   36,   36,
-
-       36,   80,  293,   80,   80,   80,   99,  400,   99,  513,
-       99,  101,  101,  101,  101,  101,  116,  116,  116,  116,
-      116,  178,  101,  178,  178,  178,  200,  200,  200,  819,
-      818,  817,  816,  815,  814,  812,  811,  810,  809,  808,
-      807,  806,  805,  804,  803,  802,  801,  798,  797,  790,
-      789,  788,  787,  786,  785,  784,  783,  782,  781,  780,
-      779,  778,  777,  776,  775,  774,  773,  772,  771,  770,
-      769,  768,  767,  766,  765,  764,  763,  762,  761,  758,
-      757,  756,  755,  754,  753,  752,  751,  750,  749,  748,
-      747,  746,  745,  744,  743,  742,  741,  740,  739,  738,
-
-      737,  736,  735,  734,  733,  732,  731,  730,  729,  728,
-      727,  726,  723,  720,  719,  714,  713,  712,  711,  710,
-      709,  708,  707,  706,  705,  704,  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,  674,  673,  672,  671,  670,  669,  668,  667,  666,
-      665,  664,  663,  662,  661,  660,  659,  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,  621,
-
-      620,  619,  618,  617,  616,  615,  614,  613,  612,  611,
-      610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
-      600,  599,  598,  597,  596,  595,  594,  593,  592,  591,
-      590,  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,
-      560,  559,  558,  557,  556,  555,  554,  553,  552,  551,
-      550,  547,  546,  545,  544,  543,  542,  541,  538,  537,
-      536,  535,  534,  533,  532,  531,  530,  529,  528,  527,
-      523,  522,  521,  520,  519,  518,  517,  515,  514,  512,
-
-      511,  508,  507,  506,  505,  502,  501,  500,  499,  498,
-      497,  496,  495,  494,  493,  490,  489,  488,  485,  484,
-      483,  482,  481,  480,  479,  478,  475,  474,  473,  472,
-      471,  470,  469,  468,  467,  466,  463,  462,  461,  460,
-      459,  456,  455,  454,  453,  452,  451,  450,  449,  448,
-      443,  442,  441,  440,  439,  438,  437,  436,  435,  434,
-      433,  432,  429,  428,  427,  426,  423,  422,  421,  420,
-      419,  418,  417,  416,  413,  412,  410,  409,  404,  399,
-      396,  393,  392,  391,  390,  388,  387,  386,  385,  384,
-      383,  382,  381,  380,  379,  378,  377,  376,  375,  372,
-
-      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
-      361,  360,  356,  355,  354,  353,  352,  351,  350,  349,
-      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
-      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
-      325,  324,  323,  322,  321,  320,  319,  318,  314,  313,
-      312,  311,  310,  309,  307,  201,  304,  302,  300,  297,
-      296,  294,  292,  285,  284,  283,  281,  280,  278,  277,
-      276,  275,  260,  254,  251,  250,  249,  248,  247,  245,
-      244,  243,  242,  239,  238,  237,  236,  235,  234,  233,
-      232,  231,  227,  226,  223,  220,  219,  218,  217,  214,
-
-      213,  212,  208,  207,  206,  205,  201,  194,  191,  190,
-      188,  186,  185,  177,  162,  143,  121,  110,  107,  106,
-      104,   43,  100,   98,   97,   88,   43, 1465,   11, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465
-
+      230,   83,  252,  253,  193,  285,   83,  195,  196,  203,
+      225,  269,  270,  825,  285,  101,  197,  198,  255,  101,
+      204,  256,  257,  101,  826,  195,  271,  246,  196,  198,
+      272,  101,  260,  285,  273,  101,  286,  101,  187,  202,
+      202,  202,  288,  345,  827,  287,  202,  202,  202,  202,
+      202,  202,  287,  286,  294,  278,  281,  297,  392,  298,
+      828,  300,  286,  304,  302,  261,  262,  263,  287,  202,
+      202,  202,  202,  202,  202,  290,  264,  294,  265,  289,
+
+      266,  267,  294,  268,  300,  297,  298,  302,  395,  395,
+      304,  305,  305,  305,  346,  356,  314,  347,  305,  305,
+      305,  305,  305,  305,  315,  307,  399,  401,  393,  406,
+      316,  395,  396,  409,  422,  474,  400,  829,  403,  404,
+      401,  305,  305,  305,  305,  305,  305,  405,  830,  357,
+      428,  423,  406,  442,  429,  536,  401,  462,  443,  455,
+      456,  409,  513,  358,  412,  412,  412,  463,  537,  413,
+      538,  412,  412,  412,  412,  412,  412,  483,  488,  506,
+      500,  484,  489,  501,  507,  521,  619,  522,  546,  831,
+      513,  475,  513,  547,  412,  412,  412,  412,  412,  412,
+
+      620,  615,  655,  656,  444,  673,  621,  712,  713,  445,
+      810,  714,  521,  619,  522,   45,   45,   45,  721,  722,
+      523,  715,   45,   45,   45,   45,   45,   45,  620,  757,
+      788,  713,  758,  796,  832,  712,  833,  789,  810,  797,
+      834,  835,  674,  790,  791,   45,   45,   45,   45,   45,
+       45,  792,  836,  837,  838,  793,  839,  841,  842,  843,
+      844,  840,  845,  846,  847,  848,  849,  850,  851,  852,
+      853,  854,  855,  856,  857,  859,  860,  861,  858,  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,  888,  889,  890,  891,  892,
+      893,  894,  895,  896,  897,  898,  899,  900,  901,  902,
+      903,  904,  905,  906,  907,  908,  909,  910,  911,  912,
+      913,  914,  915,  916,  917,  918,  919,  920,  921,  922,
+      900,  923,  924,  899,  925,  926,  927,  928,  929,  930,
+      931,  933,  934,  935,  936,  937,  938,  939,  940,  941,
+      942,  943,  944,  945,  946,  947,  948,  949,  950,  952,
+      953,  954,  955,  956,  957,  958,  959,  960,  961,  951,
+      962,  963,  964,  965,  966,  967,  968,  969,  970,  971,
+      972,  973,  974,  975,  976,  977,  978,  979,  980,  981,
+
+      982,  983,  984,  985,  987,  986,  932,  988,  989,  990,
+      991,  992,  993,  994,  995,  996,  997,  998,  999, 1000,
+     1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+     1011,  985,  986, 1012, 1013, 1014, 1015, 1017, 1019, 1020,
+     1021, 1016, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029,
+     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+     1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,
+     1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1018,
+     1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068,
+     1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
+
+     1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
+     1066, 1089, 1090, 1091, 1092, 1093, 1067, 1094, 1095, 1096,
+     1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
+     1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116,
+     1117, 1118, 1119, 1121, 1122, 1123, 1124, 1125, 1126, 1127,
+     1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137,
+     1138, 1139, 1140, 1141, 1143, 1144, 1145, 1146, 1147, 1148,
+     1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158,
+     1159, 1160, 1161, 1162, 1163, 1164, 1165, 1137, 1166, 1167,
+     1168, 1169, 1171, 1120, 1172, 1173, 1174, 1175, 1176, 1170,
+
+     1177, 1178, 1179, 1180, 1181, 1142, 1182, 1183, 1184, 1185,
+     1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195,
+     1196, 1198, 1199, 1200, 1201, 1197, 1202, 1203, 1204, 1205,
+     1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215,
+     1216, 1217, 1218, 1219, 1220, 1199, 1221, 1222, 1223, 1224,
+     1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234,
+     1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
+     1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
+     1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,
+     1265, 1266, 1267, 1268, 1269, 1270, 1272, 1273, 1274, 1275,
+
+     1248, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284,
+     1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294,
+     1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304,
+     1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314,
+     1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324,
+     1297, 1271, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332,
+     1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342,
+     1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352,
+     1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362,
+     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
+
+     1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382,
+     1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392,
+     1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402,
+     1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412,
+     1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422,
+     1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432,
+     1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442,
+     1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452,
+     1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462,
+     1463, 1464, 1465, 1466,   12,   12,   12,   12,   12,   36,
+
+       36,   36,   36,   36,   80,  292,   80,   80,   80,   99,
+      398,   99,  510,   99,  101,  101,  101,  101,  101,  116,
+      116,  116,  116,  116,  178,  101,  178,  178,  178,  200,
+      200,  200,  818,  817,  816,  815,  814,  813,  812,  811,
+      809,  808,  807,  806,  805,  804,  803,  802,  801,  800,
+      799,  798,  795,  794,  787,  786,  785,  784,  783,  782,
+      781,  780,  779,  778,  777,  776,  775,  774,  773,  772,
+      771,  770,  769,  768,  767,  766,  765,  764,  763,  762,
+      761,  760,  759,  756,  755,  754,  753,  752,  751,  750,
+      749,  748,  747,  746,  745,  744,  743,  742,  741,  740,
+
+      739,  738,  737,  736,  735,  734,  733,  732,  731,  730,
+      729,  728,  727,  726,  725,  724,  723,  720,  717,  716,
+      711,  710,  709,  708,  707,  706,  705,  704,  703,  702,
+      701,  698,  697,  696,  695,  694,  693,  692,  691,  690,
+      689,  688,  687,  686,  685,  684,  683,  682,  681,  680,
+      679,  678,  677,  676,  675,  672,  671,  670,  669,  668,
+      667,  666,  665,  664,  663,  662,  661,  660,  659,  658,
+      657,  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,  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,  578,  577,  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,  545,  544,  543,  542,  541,
+      540,  539,  535,  534,  533,  532,  531,  530,  529,  528,
+      527,  526,  525,  524,  520,  519,  518,  517,  516,  515,
+
+      514,  512,  511,  509,  508,  505,  504,  503,  502,  499,
+      498,  497,  496,  495,  494,  493,  492,  491,  490,  487,
+      486,  485,  482,  481,  480,  479,  478,  477,  476,  473,
+      472,  471,  470,  469,  468,  467,  466,  465,  464,  461,
+      460,  459,  458,  457,  454,  453,  452,  451,  450,  449,
+      448,  447,  446,  441,  440,  439,  438,  437,  436,  435,
+      434,  433,  432,  431,  430,  427,  426,  425,  424,  421,
+      420,  419,  418,  417,  416,  415,  414,  411,  410,  408,
+      407,  402,  397,  394,  391,  390,  389,  388,  386,  385,
+      384,  383,  382,  381,  380,  379,  378,  377,  376,  375,
+
+      374,  373,  370,  369,  368,  367,  366,  365,  364,  363,
+      362,  361,  360,  359,  355,  354,  353,  352,  351,  350,
+      349,  348,  344,  343,  342,  341,  340,  339,  338,  337,
+      336,  335,  334,  333,  332,  331,  330,  329,  328,  327,
+      326,  325,  324,  323,  322,  321,  320,  319,  318,  317,
+      313,  312,  311,  310,  309,  308,  306,  201,  303,  301,
+      299,  296,  295,  293,  291,  284,  283,  282,  280,  279,
+      277,  276,  275,  274,  259,  258,  254,  251,  250,  249,
+      248,  247,  245,  244,  243,  242,  239,  238,  237,  236,
+      235,  234,  233,  232,  231,  227,  226,  223,  220,  219,
+
+      218,  217,  214,  213,  212,  208,  207,  206,  205,  201,
+      194,  191,  190,  188,  186,  185,  177,  162,  143,  121,
+      110,  107,  106,  104,   43,  100,   98,   97,   88,   43,
+     1467,   11, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+
+     1467, 1467, 1467
     } ;
 
-static const flex_int16_t yy_chk[1901] =
+static const flex_int16_t yy_chk[1904] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,   21,  608,
-        3,    3,    3,   21,    1,    1,    3,    0,  608,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   21,  605,
+        3,    3,    3,   21,    1,    1,    3,    0,  605,    1,
         4,    4,    4,   13,    1,   13,    4,   27,   28,    1,
        57,    1,    5,    5,    5,   26,   32,    1,    1,   33,
-        6,    6,    6,    7,    7,    7,    1,    7,  724,    8,
-        8,    8,    1,    8,   57,   27,   28,  725,   26,    1,
+        6,    6,    6,    7,    7,    7,    1,    7,    0,    8,
+        8,    8,    1,    8,   57,   27,   28,  723,   26,    1,
         1,    2,    2,    2,   32,    2,    2,   33,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    9,    9,
         9,   52,    5,   31,    2,    2,   10,   10,   10,    2,
@@ -1470,7 +1471,7 @@ static const flex_int16_t yy_chk[1901] =
         6,   20,   20,   20,    2,   37,    9,   37,   42,    2,
        42,    2,   20,   51,   10,   54,   31,    2,    2,   52,
       128,  128,   25,   65,   25,   66,    2,   25,   25,   25,
-       65,  264,    2,   66,  264,   20,   51,  726,   54,    2,
+       65,  263,    2,   66,  263,   20,   51,  724,   54,    2,
         2,   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,
@@ -1481,190 +1482,191 @@ static const flex_int16_t yy_chk[1901] =
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   17,   48,   17,   17,   17,   19,   56,   19,
        19,   19,   44,   59,   22,   17,   22,   22,   22,   64,
-       19,   93,   61,   55,   67,   61,  430,   22,   61,   48,
-       61,   56,   61,   55,   67,  727,   67,   63,   17,   59,
-       73,  430,   64,   19,   73,   59,   55,   44,   63,   93,
+       19,   93,   61,   55,   67,   61,  725,   22,   61,   48,
+       61,   56,   61,   55,   67,  624,   67,   63,   17,   59,
+       73,  624,   64,   19,   73,   59,   55,   44,   63,   93,
        22,   45,   70,   64,   73,  115,   70,   45,   63,   45,
        45,   55,   45,   75,   45,   45,   45,   75,   58,   69,
-       69,   45,   45,   69,   45,   58,   70,  728,  115,   69,
+       69,   45,   45,   69,   45,   58,   70,  726,  115,   69,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   58,   89,   89,   89,   58,   62,  279,
-       71,   58,   62,   91,  279,   62,   62,   96,   78,   58,
-       76,  729,   72,   58,   76,   58,   58,   76,   62,   71,
+       45,   45,   45,   58,   89,   89,   89,   58,   62,  278,
+       71,   58,   62,   91,  278,   62,   62,   96,   78,   58,
+       76,  727,   72,   58,   76,   58,   58,   76,   62,   71,
        72,   71,   72,   71,   76,   76,   77,   72,   72,   91,
        76,   78,   81,   81,   81,   96,   77,   90,   90,   90,
-      101,   78,  730,   81,   92,  133,   78,  133,  105,   77,
+      101,   78,  728,   81,   92,  133,   78,  133,  105,   77,
        82,   77,   82,   82,   82,   83,   94,   83,   95,  108,
        83,   83,   83,   82,   77,   84,   81,   84,   84,   84,
        92,   77,   85,   85,   85,  101,  105,  109,   84,  111,
 
       103,  112,   94,   85,   95,  108,   82,  103,  113,  124,
       114,  148,  119,  138,  135,  148,  138,  153,  124,  124,
-      138,   84,  159,  159,  109,  284,   85,  111,  112,  119,
-      135,  165,  165,  731,  179,  103,  113,  114,  161,  103,
-      119,  161,  161,  103,  162,  153,  166,  153,  162,  171,
-      166,  103,  164,  174,  166,  103,  180,  103,  103,  118,
-      118,  118,  179,  241,  732,  181,  118,  118,  118,  118,
-      118,  118,  184,  183,  182,  284,  171,  192,  250,  193,
-      174,  189,  180,  199,  195,  164,  164,  164,  181,  118,
-      118,  118,  118,  118,  118,  184,  164,  197,  164,  183,
-
-      164,  164,  182,  164,  189,  192,  193,  195,  294,  301,
-      199,  204,  250,  286,  241,  289,  295,  241,  294,  298,
-      197,  202,  202,  202,  346,  346,  250,  211,  202,  202,
-      202,  202,  202,  202,  204,  211,  286,  301,  289,  297,
-      297,  211,  298,  308,  317,  295,  323,  364,  297,  403,
-      323,  202,  202,  202,  202,  202,  202,  306,  306,  306,
-      733,  317,  734,  352,  306,  306,  306,  306,  306,  306,
-      336,  415,  308,  352,  374,  336,  378,  403,  374,  389,
-      378,  395,  389,  413,  524,  413,  395,  306,  306,  306,
-      306,  306,  306,  439,  525,  526,  561,  561,  439,  415,
-
-      526,  623,  622,  364,  579,  624,  735,  627,  629,  629,
-      413,  524,  413,  627,  664,  624,  697,  664,  716,  701,
-      736,  336,  525,  697,  623,  701,  336,  414,  414,  414,
-      622,  737,  698,  698,  414,  414,  414,  414,  414,  414,
-      698,  579,  738,  739,  698,  741,  716,  742,  743,  744,
-      745,  746,  747,  748,  749,  750,  746,  414,  414,  414,
-      414,  414,  414,  751,  752,  753,  754,  757,  758,  759,
-      760,  763,  764,  765,  766,  767,  768,  769,  770,  767,
-      771,  772,  773,  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,  802,
-      803,  804,  805,  806,  807,  808,  809,  810,  812,  813,
-      814,  815,  816,  817,  818,  819,  820,  821,  822,  823,
-      824,  825,  826,  827,  828,  829,  830,  832,  833,  834,
-      835,  836,  813,  837,  838,  812,  839,  840,  842,  843,
-      844,  845,  846,  848,  849,  850,  851,  852,  853,  854,
-      855,  856,  857,  858,  859,  860,  861,  862,  863,  864,
-      865,  867,  868,  869,  870,  872,  873,  874,  875,  876,
-      864,  877,  878,  879,  880,  881,  882,  883,  884,  885,
-      886,  887,  888,  890,  891,  892,  893,  894,  895,  896,
-
-      897,  898,  899,  900,  901,  902,  904,  845,  903,  905,
-      906,  907,  908,  910,  911,  912,  913,  914,  915,  916,
-      917,  919,  920,  921,  922,  923,  924,  925,  926,  927,
-      928,  929,  930,  902,  931,  903,  932,  934,  935,  936,
-      937,  938,  934,  939,  940,  941,  942,  943,  944,  945,
-      946,  947,  948,  949,  950,  951,  952,  953,  954,  955,
-      956,  957,  959,  960,  961,  962,  963,  964,  965,  966,
-      967,  968,  969,  971,  972,  974,  975,  976,  977,  978,
-      935,  979,  980,  981,  982,  983,  984,  985,  987,  988,
-      989,  990,  991,  992,  994,  995,  996,  997,  998,  999,
-
-     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011,
-     1012, 1013,  988, 1014, 1015, 1018, 1020, 1021,  989, 1022,
-     1023, 1024, 1025, 1026, 1027, 1029, 1030, 1031, 1032, 1034,
-     1035, 1036, 1037, 1038, 1041, 1042, 1043, 1044, 1045, 1046,
-     1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
-     1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
-     1068, 1069, 1070, 1071, 1073, 1074, 1075, 1076, 1077, 1078,
-     1079, 1080, 1081, 1082, 1083, 1084, 1086, 1087, 1088, 1089,
-     1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1069,
-     1099, 1100, 1101, 1102, 1103, 1051, 1105, 1108, 1109, 1110,
-
-     1101, 1111, 1112, 1113, 1114, 1115, 1116, 1074, 1117, 1119,
-     1120, 1121, 1122, 1123, 1124, 1125, 1127, 1129, 1132, 1134,
-     1136, 1137, 1138, 1139, 1140, 1142, 1143, 1138, 1145, 1146,
-     1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157,
-     1158, 1159, 1160, 1161, 1162, 1163, 1164, 1140, 1167, 1169,
-     1170, 1171, 1172, 1173, 1175, 1176, 1177, 1178, 1179, 1180,
-     1181, 1183, 1184, 1186, 1187, 1188, 1189, 1191, 1192, 1193,
-     1194, 1195, 1196, 1198, 1200, 1202, 1203, 1204, 1205, 1206,
-     1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216,
-     1217, 1218, 1219, 1220, 1221, 1221, 1222, 1223, 1224, 1225,
-
-     1226, 1227, 1202, 1228, 1229, 1230, 1231, 1232, 1233, 1234,
-     1235, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1245, 1246,
-     1248, 1249, 1250, 1251, 1252, 1256, 1257, 1260, 1261, 1264,
-     1265, 1266, 1267, 1268, 1269, 1270, 1271, 1273, 1274, 1276,
-     1278, 1279, 1280, 1281, 1282, 1284, 1285, 1286, 1287, 1288,
-     1289, 1251, 1222, 1290, 1291, 1292, 1293, 1294, 1295, 1296,
-     1298, 1299, 1300, 1301, 1303, 1304, 1305, 1306, 1307, 1308,
-     1310, 1311, 1312, 1314, 1316, 1317, 1318, 1319, 1320, 1321,
-     1322, 1323, 1324, 1325, 1326, 1328, 1329, 1333, 1336, 1338,
-     1340, 1341, 1343, 1344, 1345, 1346, 1347, 1348, 1350, 1352,
-
-     1353, 1354, 1355, 1356, 1357, 1358, 1359, 1361, 1362, 1363,
-     1364, 1365, 1366, 1367, 1368, 1371, 1372, 1373, 1374, 1375,
-     1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386,
-     1387, 1388, 1390, 1392, 1394, 1395, 1396, 1397, 1398, 1400,
-     1401, 1402, 1404, 1405, 1407, 1408, 1411, 1412, 1413, 1414,
-     1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424,
-     1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434,
-     1435, 1437, 1439, 1440, 1441, 1442, 1443, 1444, 1448, 1449,
-     1450, 1451, 1453, 1454, 1456, 1457, 1458, 1459, 1460, 1462,
-     1463, 1466, 1466, 1466, 1466, 1466, 1467, 1467, 1467, 1467,
-
-     1467, 1468, 1474, 1468, 1468, 1468, 1469, 1475, 1469, 1476,
-     1469, 1470, 1470, 1470, 1470, 1470, 1471, 1471, 1471, 1471,
-     1471, 1472, 1477, 1472, 1472, 1472, 1473, 1473, 1473,  722,
-      721,  720,  719,  718,  717,  715,  713,  712,  711,  710,
-      709,  708,  707,  706,  705,  704,  703,  700,  699,  696,
-      695,  694,  693,  692,  691,  690,  689,  688,  687,  686,
-      685,  684,  683,  682,  681,  680,  679,  678,  677,  676,
-      674,  673,  672,  671,  670,  669,  668,  667,  665,  663,
-      662,  661,  660,  659,  658,  657,  656,  655,  654,  653,
-      652,  651,  650,  649,  648,  646,  645,  644,  643,  642,
-
-      641,  640,  639,  638,  637,  636,  635,  634,  633,  632,
-      631,  630,  628,  626,  625,  621,  620,  619,  617,  616,
-      614,  613,  612,  611,  610,  609,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  596,  595,  593,  592,
-      591,  590,  589,  588,  587,  586,  585,  583,  582,  581,
-      580,  578,  577,  576,  575,  574,  573,  572,  570,  569,
-      568,  567,  566,  565,  564,  563,  562,  560,  559,  558,
-      557,  556,  555,  554,  553,  552,  551,  550,  549,  547,
-      546,  545,  544,  543,  542,  541,  540,  539,  538,  537,
-      536,  535,  534,  533,  532,  531,  530,  529,  528,  522,
-
-      520,  517,  516,  515,  514,  512,  511,  510,  508,  507,
-      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,  477,  475,  474,  473,
-      472,  471,  470,  469,  468,  467,  466,  465,  464,  462,
-      461,  460,  459,  458,  457,  456,  455,  454,  453,  452,
-      451,  450,  449,  448,  447,  446,  445,  443,  442,  441,
-      440,  438,  437,  436,  435,  434,  432,  431,  429,  428,
-      426,  425,  424,  423,  422,  421,  419,  418,  417,  416,
-      411,  410,  408,  407,  406,  405,  404,  402,  401,  399,
-
-      396,  394,  393,  391,  390,  388,  387,  386,  385,  384,
-      383,  382,  381,  380,  379,  377,  376,  375,  373,  372,
-      371,  370,  368,  367,  366,  365,  363,  362,  361,  360,
-      359,  358,  357,  356,  355,  353,  351,  350,  349,  348,
-      347,  345,  344,  343,  342,  341,  340,  339,  338,  337,
-      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
-      325,  324,  322,  321,  320,  319,  316,  315,  314,  313,
-      312,  311,  310,  309,  305,  303,  300,  299,  296,  292,
-      285,  283,  282,  281,  280,  278,  277,  276,  275,  274,
-      273,  272,  271,  270,  269,  268,  267,  266,  265,  263,
-
-      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
-      252,  251,  249,  248,  247,  246,  245,  244,  243,  242,
-      240,  239,  238,  237,  236,  235,  234,  233,  231,  230,
-      229,  228,  227,  226,  225,  224,  223,  222,  221,  220,
-      219,  218,  217,  216,  215,  214,  213,  212,  210,  209,
-      208,  207,  206,  205,  203,  200,  198,  196,  194,  191,
-      190,  188,  185,  177,  176,  175,  173,  172,  170,  169,
-      168,  167,  163,  160,  158,  157,  156,  155,  154,  152,
-      151,  150,  149,  147,  146,  145,  144,  143,  142,  141,
-      140,  139,  137,  136,  134,  132,  131,  130,  129,  127,
-
-      126,  125,  123,  122,  121,  120,  116,  110,  107,  106,
-      104,   99,   98,   79,   74,   68,   60,   53,   50,   49,
-       47,   43,   41,   39,   38,   24,   14,   11, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465,
-     1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465
+      138,   84,  159,  159,  109,  179,   85,  111,  112,  119,
+      135,  165,  165,  729,  182,  103,  113,  114,  161,  103,
+      119,  161,  161,  103,  730,  153,  166,  153,  171,  174,
+      166,  103,  164,  179,  166,  103,  180,  103,  103,  118,
+      118,  118,  182,  241,  731,  181,  118,  118,  118,  118,
+      118,  118,  184,  183,  189,  171,  174,  192,  283,  193,
+      732,  195,  180,  199,  197,  164,  164,  164,  181,  118,
+      118,  118,  118,  118,  118,  184,  164,  189,  164,  183,
+
+      164,  164,  204,  164,  195,  192,  193,  197,  285,  288,
+      199,  202,  202,  202,  241,  250,  211,  241,  202,  202,
+      202,  202,  202,  202,  211,  204,  293,  294,  283,  297,
+      211,  285,  288,  300,  316,  363,  293,  733,  296,  296,
+      307,  202,  202,  202,  202,  202,  202,  296,  734,  250,
+      322,  316,  297,  335,  322,  428,  294,  351,  335,  345,
+      345,  300,  401,  250,  305,  305,  305,  351,  428,  307,
+      428,  305,  305,  305,  305,  305,  305,  372,  376,  393,
+      387,  372,  376,  387,  393,  411,  521,  411,  437,  735,
+      401,  363,  413,  437,  305,  305,  305,  305,  305,  305,
+
+      522,  523,  559,  559,  335,  577,  523,  619,  620,  335,
+      713,  621,  411,  521,  411,  412,  412,  412,  626,  626,
+      413,  621,  412,  412,  412,  412,  412,  412,  522,  662,
+      694,  620,  662,  698,  736,  619,  737,  694,  713,  698,
+      739,  740,  577,  695,  695,  412,  412,  412,  412,  412,
+      412,  695,  741,  742,  743,  695,  744,  745,  746,  747,
+      748,  744,  749,  750,  751,  752,  755,  756,  757,  758,
+      761,  762,  763,  764,  765,  766,  767,  768,  765,  769,
+      770,  771,  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,  799,  800,  801,
+      802,  803,  804,  805,  806,  807,  809,  810,  811,  812,
+      813,  814,  815,  816,  817,  818,  819,  820,  821,  822,
+      823,  824,  825,  826,  827,  828,  830,  831,  832,  833,
+      810,  834,  835,  809,  836,  837,  838,  840,  841,  842,
+      843,  844,  846,  847,  848,  849,  850,  851,  852,  853,
+      854,  855,  856,  857,  858,  859,  860,  861,  862,  863,
+      865,  866,  867,  869,  870,  871,  872,  873,  874,  862,
+      875,  876,  877,  878,  879,  880,  881,  882,  883,  884,
+      885,  887,  888,  889,  890,  891,  892,  893,  894,  895,
+
+      896,  897,  898,  899,  901,  900,  843,  902,  903,  904,
+      905,  907,  908,  909,  910,  911,  912,  913,  914,  916,
+      917,  918,  919,  920,  921,  922,  923,  924,  925,  926,
+      927,  899,  900,  928,  929,  930,  932,  933,  934,  935,
+      936,  932,  937,  938,  939,  940,  941,  942,  943,  944,
+      945,  946,  947,  948,  949,  950,  951,  952,  953,  954,
+      956,  957,  958,  959,  960,  961,  962,  963,  964,  965,
+      966,  968,  969,  971,  972,  973,  974,  975,  976,  933,
+      977,  978,  979,  980,  981,  982,  984,  985,  986,  987,
+      988,  989,  991,  992,  993,  994,  995,  996,  999, 1000,
+
+     1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+      985, 1011, 1012, 1013, 1016, 1018,  986, 1019, 1020, 1021,
+     1022, 1023, 1024, 1025, 1027, 1028, 1029, 1030, 1032, 1033,
+     1034, 1035, 1036, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
+     1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1055, 1056,
+     1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066,
+     1067, 1068, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
+     1078, 1079, 1080, 1081, 1082, 1084, 1085, 1086, 1087, 1088,
+     1089, 1090, 1091, 1092, 1093, 1094, 1095, 1066, 1096, 1097,
+     1098, 1099, 1100, 1048, 1101, 1103, 1106, 1107, 1108, 1099,
+
+     1109, 1110, 1111, 1112, 1113, 1071, 1114, 1116, 1117, 1118,
+     1119, 1120, 1121, 1122, 1124, 1126, 1129, 1131, 1133, 1134,
+     1135, 1136, 1137, 1139, 1140, 1135, 1142, 1143, 1144, 1145,
+     1146, 1147, 1148, 1149, 1150, 1152, 1153, 1154, 1155, 1156,
+     1157, 1158, 1159, 1160, 1161, 1137, 1162, 1165, 1167, 1168,
+     1169, 1170, 1171, 1173, 1174, 1175, 1176, 1177, 1178, 1180,
+     1181, 1183, 1184, 1185, 1186, 1188, 1189, 1190, 1191, 1192,
+     1193, 1195, 1197, 1199, 1200, 1201, 1202, 1203, 1204, 1205,
+     1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215,
+     1216, 1217, 1218, 1219, 1219, 1220, 1221, 1222, 1223, 1224,
+
+     1199, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233,
+     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1242, 1243, 1245,
+     1246, 1247, 1248, 1249, 1253, 1254, 1257, 1258, 1259, 1262,
+     1263, 1264, 1265, 1266, 1267, 1268, 1269, 1271, 1272, 1274,
+     1276, 1277, 1278, 1279, 1280, 1282, 1283, 1284, 1285, 1286,
+     1248, 1220, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294,
+     1296, 1297, 1298, 1299, 1301, 1302, 1303, 1304, 1305, 1306,
+     1307, 1309, 1310, 1311, 1313, 1315, 1316, 1317, 1318, 1319,
+     1320, 1321, 1322, 1323, 1324, 1325, 1327, 1328, 1332, 1335,
+     1337, 1338, 1340, 1341, 1343, 1344, 1345, 1346, 1347, 1348,
+
+     1350, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1361,
+     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1372, 1373,
+     1374, 1375, 1376, 1378, 1379, 1380, 1381, 1382, 1383, 1384,
+     1386, 1387, 1388, 1389, 1390, 1392, 1394, 1396, 1397, 1398,
+     1399, 1400, 1402, 1403, 1404, 1406, 1407, 1409, 1410, 1413,
+     1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423,
+     1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433,
+     1434, 1435, 1436, 1437, 1439, 1441, 1442, 1443, 1444, 1445,
+     1446, 1450, 1451, 1452, 1453, 1455, 1456, 1458, 1459, 1460,
+     1461, 1462, 1464, 1465, 1468, 1468, 1468, 1468, 1468, 1469,
+
+     1469, 1469, 1469, 1469, 1470, 1476, 1470, 1470, 1470, 1471,
+     1477, 1471, 1478, 1471, 1472, 1472, 1472, 1472, 1472, 1473,
+     1473, 1473, 1473, 1473, 1474, 1479, 1474, 1474, 1474, 1475,
+     1475, 1475,  722,  721,  719,  718,  717,  716,  715,  714,
+      712,  710,  709,  708,  707,  706,  705,  704,  703,  702,
+      701,  700,  697,  696,  693,  692,  691,  690,  689,  688,
+      687,  686,  685,  684,  683,  682,  681,  680,  679,  678,
+      677,  676,  675,  674,  672,  671,  670,  669,  668,  667,
+      666,  665,  663,  661,  660,  659,  658,  657,  656,  655,
+      654,  653,  652,  651,  650,  649,  648,  647,  646,  644,
 
+      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
+      633,  632,  631,  630,  629,  628,  627,  625,  623,  622,
+      618,  617,  616,  614,  613,  611,  610,  609,  608,  607,
+      606,  603,  602,  601,  600,  599,  598,  597,  596,  595,
+      594,  593,  592,  590,  589,  588,  587,  586,  585,  584,
+      583,  581,  580,  579,  578,  576,  575,  574,  573,  572,
+      571,  570,  568,  567,  566,  565,  564,  563,  562,  561,
+      560,  558,  557,  556,  555,  554,  553,  552,  551,  550,
+      549,  548,  547,  545,  544,  543,  542,  541,  540,  539,
+      538,  537,  536,  535,  534,  533,  532,  531,  530,  529,
+
+      528,  527,  526,  525,  519,  517,  514,  513,  512,  511,
+      509,  508,  507,  505,  504,  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,
+      475,  473,  472,  471,  470,  469,  468,  467,  466,  465,
+      464,  463,  462,  460,  459,  458,  457,  456,  455,  454,
+      453,  452,  451,  450,  449,  448,  447,  446,  445,  444,
+      443,  441,  440,  439,  438,  436,  435,  434,  433,  432,
+      430,  429,  427,  426,  424,  423,  422,  421,  420,  419,
+      417,  416,  415,  414,  409,  408,  406,  405,  404,  403,
+
+      402,  400,  399,  397,  394,  392,  391,  389,  388,  386,
+      385,  384,  383,  382,  381,  380,  379,  378,  377,  375,
+      374,  373,  371,  370,  369,  368,  366,  365,  364,  362,
+      361,  360,  359,  358,  357,  356,  355,  354,  352,  350,
+      349,  348,  347,  346,  344,  343,  342,  341,  340,  339,
+      338,  337,  336,  334,  333,  332,  331,  330,  329,  328,
+      327,  326,  325,  324,  323,  321,  320,  319,  318,  315,
+      314,  313,  312,  311,  310,  309,  308,  304,  302,  299,
+      298,  295,  291,  284,  282,  281,  280,  279,  277,  276,
+      275,  274,  273,  272,  271,  270,  269,  268,  267,  266,
+
+      265,  264,  262,  261,  260,  259,  258,  257,  256,  255,
+      254,  253,  252,  251,  249,  248,  247,  246,  245,  244,
+      243,  242,  240,  239,  238,  237,  236,  235,  234,  233,
+      231,  230,  229,  228,  227,  226,  225,  224,  223,  222,
+      221,  220,  219,  218,  217,  216,  215,  214,  213,  212,
+      210,  209,  208,  207,  206,  205,  203,  200,  198,  196,
+      194,  191,  190,  188,  185,  177,  176,  175,  173,  172,
+      170,  169,  168,  167,  163,  162,  160,  158,  157,  156,
+      155,  154,  152,  151,  150,  149,  147,  146,  145,  144,
+      143,  142,  141,  140,  139,  137,  136,  134,  132,  131,
+
+      130,  129,  127,  126,  125,  123,  122,  121,  120,  116,
+      110,  107,  106,  104,   99,   98,   79,   74,   68,   60,
+       53,   50,   49,   47,   43,   41,   39,   38,   24,   14,
+       11, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+     1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467,
+
+     1467, 1467, 1467
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1746,7 +1748,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg)
-#line 1750 "dhcp4_lexer.cc"
+#line 1752 "dhcp4_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
    using yywrap requires linking with -lfl, which provides the default yywrap
@@ -1772,8 +1774,8 @@ using namespace isc::dhcp;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1776 "dhcp4_lexer.cc"
-#line 1777 "dhcp4_lexer.cc"
+#line 1778 "dhcp4_lexer.cc"
+#line 1779 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2101,7 +2103,7 @@ YY_DECL
     }
 
 
-#line 2105 "dhcp4_lexer.cc"
+#line 2107 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2130,13 +2132,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 >= 1466 )
+                               if ( yy_current_state >= 1468 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1465 );
+               while ( yy_current_state != 1467 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2942,7 +2944,7 @@ YY_RULE_SETUP
     case isc::dhcp::Parser4Context::RESERVATIONS:
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
-    case isc::dhcp::Parser4Context::QUEUE_CONTROL:
+    case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
     case isc::dhcp::Parser4Context::LOGGERS:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
         return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_);
@@ -2966,7 +2968,7 @@ YY_RULE_SETUP
     case isc::dhcp::Parser4Context::RESERVATIONS:
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
-    case isc::dhcp::Parser4Context::QUEUE_CONTROL:
+    case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
     case isc::dhcp::Parser4Context::LOGGERS:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
         return isc::dhcp::Dhcp4Parser::make_COMMENT(driver.loc_);
@@ -3647,9 +3649,9 @@ YY_RULE_SETUP
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
-        return isc::dhcp::Dhcp4Parser::make_QUEUE_CONTROL(driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_DHCP_QUEUE_CONTROL(driver.loc_);
     default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("queue-control", driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_STRING("dhcp-queue-control", driver.loc_);
     }
 }
        YY_BREAK
@@ -4380,7 +4382,7 @@ YY_RULE_SETUP
 #line 1804 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4384 "dhcp4_lexer.cc"
+#line 4386 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4699,7 +4701,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 >= 1466 )
+                       if ( yy_current_state >= 1468 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -4732,11 +4734,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 >= 1466 )
+               if ( yy_current_state >= 1468 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1465);
+       yy_is_jam = (yy_current_state == 1467);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
index 7c4816aa1c61a96aca03617198bcbeb643239281..bbecaecfc84e153b14a35a92e96668c2f5693ce9 100644 (file)
@@ -706,7 +706,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     case isc::dhcp::Parser4Context::RESERVATIONS:
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
-    case isc::dhcp::Parser4Context::QUEUE_CONTROL:
+    case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
     case isc::dhcp::Parser4Context::LOGGERS:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
         return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_);
@@ -727,7 +727,7 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     case isc::dhcp::Parser4Context::RESERVATIONS:
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
-    case isc::dhcp::Parser4Context::QUEUE_CONTROL:
+    case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL:
     case isc::dhcp::Parser4Context::LOGGERS:
     case isc::dhcp::Parser4Context::DHCP_DDNS:
         return isc::dhcp::Dhcp4Parser::make_COMMENT(driver.loc_);
@@ -1241,12 +1241,12 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
-\"queue-control\" {
+\"dhcp-queue-control\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
-        return isc::dhcp::Dhcp4Parser::make_QUEUE_CONTROL(driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_DHCP_QUEUE_CONTROL(driver.loc_);
     default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("queue-control", driver.loc_);
+        return isc::dhcp::Dhcp4Parser::make_STRING("dhcp-queue-control", driver.loc_);
     }
 }
 
index d4227757012ce46f265168db691c56c43484e46f..9d5bd33de55a846874f693e8f2c183cb50cf2af4 100644 (file)
@@ -2958,7 +2958,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 528:
-#line 1834 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1832 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -2966,10 +2966,10 @@ namespace isc { namespace dhcp {
     break;
 
   case 529:
-#line 1836 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1834 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr qc = yystack_[0].value.as< ElementPtr > ();
-    ctx.stack_.back()->set("queue-control", qc);
+    ctx.stack_.back()->set("dhcp-queue-control", qc);
 
     if (!qc->contains("queue-type")) {
         std::stringstream msg;
@@ -2984,7 +2984,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 530:
-#line 1852 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1850 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
@@ -2995,7 +2995,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 531:
-#line 1857 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1855 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
@@ -3006,7 +3006,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 532:
-#line 1864 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1862 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the dhcp-ddns map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3016,7 +3016,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 533:
-#line 1868 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1866 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // The enable updates DHCP DDNS parameter is required.
     ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
@@ -3026,7 +3026,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 555:
-#line 1899 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1897 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enable-updates", b);
@@ -3035,7 +3035,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 556:
-#line 1904 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1902 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3043,7 +3043,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 557:
-#line 1906 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1904 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("qualifying-suffix", s);
@@ -3053,7 +3053,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 558:
-#line 1912 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1910 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3061,7 +3061,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 559:
-#line 1914 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1912 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-ip", s);
@@ -3071,7 +3071,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 560:
-#line 1920 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1918 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-port", i);
@@ -3080,7 +3080,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 561:
-#line 1925 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1923 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3088,7 +3088,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 562:
-#line 1927 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1925 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-ip", s);
@@ -3098,7 +3098,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 563:
-#line 1933 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1931 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("sender-port", i);
@@ -3107,7 +3107,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 564:
-#line 1938 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1936 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("max-queue-size", i);
@@ -3116,7 +3116,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 565:
-#line 1943 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1941 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_PROTOCOL);
 }
@@ -3124,7 +3124,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 566:
-#line 1945 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1943 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3133,19 +3133,19 @@ namespace isc { namespace dhcp {
     break;
 
   case 567:
-#line 1951 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1949 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
 #line 3139 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 568:
-#line 1952 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1950 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
 #line 3145 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 569:
-#line 1955 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1953 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NCR_FORMAT);
 }
@@ -3153,7 +3153,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 570:
-#line 1957 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1955 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ncr-format", json);
@@ -3163,7 +3163,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 571:
-#line 1963 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1961 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("always-include-fqdn", b);
@@ -3172,7 +3172,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 572:
-#line 1968 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1966 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-no-update", b);
@@ -3181,7 +3181,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 573:
-#line 1973 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1971 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("override-client-update", b);
@@ -3190,7 +3190,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 574:
-#line 1978 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1976 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.REPLACE_CLIENT_NAME);
 }
@@ -3198,7 +3198,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 575:
-#line 1980 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1978 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3207,7 +3207,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 576:
-#line 1986 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1984 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); 
       }
@@ -3215,7 +3215,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 577:
-#line 1989 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1987 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
       }
@@ -3223,7 +3223,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 578:
-#line 1992 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1990 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
       }
@@ -3231,7 +3231,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 579:
-#line 1995 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1993 "dhcp4_parser.yy" // lalr1.cc:859
     {
       yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
       }
@@ -3239,7 +3239,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 580:
-#line 1998 "dhcp4_parser.yy" // lalr1.cc:859
+#line 1996 "dhcp4_parser.yy" // lalr1.cc:859
     {
       error(yystack_[0].location, "boolean values for the replace-client-name are "
                 "no longer supported");
@@ -3248,7 +3248,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 581:
-#line 2004 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2002 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3256,7 +3256,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 582:
-#line 2006 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2004 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("generated-prefix", s);
@@ -3266,7 +3266,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 583:
-#line 2012 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2010 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3274,7 +3274,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 584:
-#line 2014 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2012 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-set", s);
@@ -3284,7 +3284,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 585:
-#line 2020 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2018 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3292,7 +3292,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 586:
-#line 2022 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2020 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname-char-replacement", s);
@@ -3302,7 +3302,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 587:
-#line 2031 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2029 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3310,7 +3310,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 588:
-#line 2033 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2031 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3319,7 +3319,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 589:
-#line 2038 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2036 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3327,7 +3327,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 590:
-#line 2040 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2038 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3336,7 +3336,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 591:
-#line 2045 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2043 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3344,7 +3344,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 592:
-#line 2047 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2045 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
@@ -3353,7 +3353,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 593:
-#line 2052 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2050 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -3363,7 +3363,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 594:
-#line 2056 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2054 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
@@ -3371,7 +3371,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 595:
-#line 2061 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2059 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-control", i);
@@ -3382,7 +3382,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 596:
-#line 2066 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2064 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No config control params are required
     ctx.stack_.pop_back();
@@ -3392,7 +3392,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 597:
-#line 2072 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2070 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the config-control map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3402,7 +3402,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 598:
-#line 2076 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2074 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // No config_control params are required
     // parsing completed
@@ -3411,7 +3411,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 603:
-#line 2091 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2089 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("config-databases", l);
@@ -3422,7 +3422,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 604:
-#line 2096 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2094 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -3431,7 +3431,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 605:
-#line 2106 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2104 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
@@ -3442,7 +3442,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 606:
-#line 2111 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2109 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -3451,7 +3451,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 607:
-#line 2116 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2114 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Logging map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
@@ -3461,7 +3461,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 608:
-#line 2120 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2118 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
@@ -3469,7 +3469,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 612:
-#line 2136 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2134 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
@@ -3480,7 +3480,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 613:
-#line 2141 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2139 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -3489,7 +3489,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 616:
-#line 2153 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2151 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
@@ -3499,7 +3499,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 617:
-#line 2157 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2155 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
@@ -3507,7 +3507,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 627:
-#line 2174 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2172 "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);
@@ -3516,7 +3516,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 628:
-#line 2179 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2177 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3524,7 +3524,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 629:
-#line 2181 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2179 "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);
@@ -3534,7 +3534,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 630:
-#line 2187 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2185 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
@@ -3545,7 +3545,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 631:
-#line 2192 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2190 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
@@ -3554,7 +3554,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 634:
-#line 2201 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2199 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
@@ -3564,7 +3564,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 635:
-#line 2205 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2203 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
@@ -3572,7 +3572,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 642:
-#line 2219 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2217 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
@@ -3580,7 +3580,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 643:
-#line 2221 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2219 "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);
@@ -3590,7 +3590,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 644:
-#line 2227 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2225 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("flush", flush);
@@ -3599,7 +3599,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 645:
-#line 2232 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2230 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxsize", maxsize);
@@ -3608,7 +3608,7 @@ namespace isc { namespace dhcp {
     break;
 
   case 646:
-#line 2237 "dhcp4_parser.yy" // lalr1.cc:859
+#line 2235 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("maxver", maxver);
@@ -4680,7 +4680,7 @@ namespace isc { namespace dhcp {
   "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
   "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"",
   "\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"",
-  "\"socket-name\"", "\"queue-control\"", "\"dhcp-ddns\"",
+  "\"socket-name\"", "\"dhcp-queue-control\"", "\"dhcp-ddns\"",
   "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
   "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
   "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
@@ -4765,7 +4765,7 @@ namespace isc { namespace dhcp {
   "client_class_param", "client_class_name", "client_class_test", "$@96",
   "only_if_required", "dhcp4o6_port", "control_socket", "$@97",
   "control_socket_params", "control_socket_param", "control_socket_type",
-  "$@98", "control_socket_name", "$@99", "queue_control", "$@100",
+  "$@98", "control_socket_name", "$@99", "dhcp_queue_control", "$@100",
   "dhcp_ddns", "$@101", "sub_dhcp_ddns", "$@102", "dhcp_ddns_params",
   "dhcp_ddns_param", "enable_updates", "qualifying_suffix", "$@103",
   "server_ip", "$@104", "server_port", "sender_ip", "$@105", "sender_port",
@@ -4842,19 +4842,19 @@ namespace isc { namespace dhcp {
     1721,  1731,  1732,  1735,  1735,  1745,  1746,  1749,  1750,  1753,
     1754,  1755,  1756,  1757,  1758,  1759,  1760,  1761,  1762,  1763,
     1766,  1768,  1768,  1776,  1785,  1792,  1792,  1802,  1803,  1806,
-    1807,  1808,  1809,  1810,  1813,  1813,  1821,  1821,  1834,  1834,
-    1852,  1852,  1864,  1864,  1874,  1875,  1878,  1879,  1880,  1881,
-    1882,  1883,  1884,  1885,  1886,  1887,  1888,  1889,  1890,  1891,
-    1892,  1893,  1894,  1895,  1896,  1899,  1904,  1904,  1912,  1912,
-    1920,  1925,  1925,  1933,  1938,  1943,  1943,  1951,  1952,  1955,
-    1955,  1963,  1968,  1973,  1978,  1978,  1986,  1989,  1992,  1995,
-    1998,  2004,  2004,  2012,  2012,  2020,  2020,  2031,  2031,  2038,
-    2038,  2045,  2045,  2052,  2052,  2061,  2061,  2072,  2072,  2082,
-    2083,  2087,  2088,  2091,  2091,  2106,  2106,  2116,  2116,  2127,
-    2128,  2132,  2136,  2136,  2148,  2149,  2153,  2153,  2161,  2162,
-    2165,  2166,  2167,  2168,  2169,  2170,  2171,  2174,  2179,  2179,
-    2187,  2187,  2197,  2198,  2201,  2201,  2209,  2210,  2213,  2214,
-    2215,  2216,  2219,  2219,  2227,  2232,  2237
+    1807,  1808,  1809,  1810,  1813,  1813,  1821,  1821,  1832,  1832,
+    1850,  1850,  1862,  1862,  1872,  1873,  1876,  1877,  1878,  1879,
+    1880,  1881,  1882,  1883,  1884,  1885,  1886,  1887,  1888,  1889,
+    1890,  1891,  1892,  1893,  1894,  1897,  1902,  1902,  1910,  1910,
+    1918,  1923,  1923,  1931,  1936,  1941,  1941,  1949,  1950,  1953,
+    1953,  1961,  1966,  1971,  1976,  1976,  1984,  1987,  1990,  1993,
+    1996,  2002,  2002,  2010,  2010,  2018,  2018,  2029,  2029,  2036,
+    2036,  2043,  2043,  2050,  2050,  2059,  2059,  2070,  2070,  2080,
+    2081,  2085,  2086,  2089,  2089,  2104,  2104,  2114,  2114,  2125,
+    2126,  2130,  2134,  2134,  2146,  2147,  2151,  2151,  2159,  2160,
+    2163,  2164,  2165,  2166,  2167,  2168,  2169,  2172,  2177,  2177,
+    2185,  2185,  2195,  2196,  2199,  2199,  2207,  2208,  2211,  2212,
+    2213,  2214,  2217,  2217,  2225,  2230,  2235
   };
 
   // Print the state stack on the debug stream.
@@ -4890,7 +4890,7 @@ namespace isc { namespace dhcp {
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
 #line 4893 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 2242 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 2240 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index 8f8806811cdb263763607dc566426fc24467308c..0a3b9305ddf6924f979b083df0d7e57fa3665305 100644 (file)
@@ -460,7 +460,7 @@ namespace isc { namespace dhcp {
         TOKEN_CONTROL_SOCKET = 367,
         TOKEN_SOCKET_TYPE = 368,
         TOKEN_SOCKET_NAME = 369,
-        TOKEN_QUEUE_CONTROL = 370,
+        TOKEN_DHCP_QUEUE_CONTROL = 370,
         TOKEN_DHCP_DDNS = 371,
         TOKEN_ENABLE_UPDATES = 372,
         TOKEN_QUALIFYING_SUFFIX = 373,
@@ -1082,7 +1082,7 @@ namespace isc { namespace dhcp {
 
     static inline
     symbol_type
-    make_QUEUE_CONTROL (const location_type& l);
+    make_DHCP_QUEUE_CONTROL (const location_type& l);
 
     static inline
     symbol_type
@@ -2579,9 +2579,9 @@ namespace isc { namespace dhcp {
   }
 
   Dhcp4Parser::symbol_type
-  Dhcp4Parser::make_QUEUE_CONTROL (const location_type& l)
+  Dhcp4Parser::make_DHCP_QUEUE_CONTROL (const location_type& l)
   {
-    return symbol_type (token::TOKEN_QUEUE_CONTROL, l);
+    return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, l);
   }
 
   Dhcp4Parser::symbol_type
index 84136571583eb9dc86f31d3d65d5018986ce7c2c..40c2529742bcbd6bd13abbdcf3fc2855fd1758cb 100644 (file)
@@ -170,7 +170,7 @@ using namespace std;
   SOCKET_TYPE "socket-type"
   SOCKET_NAME "socket-name"
 
-  QUEUE_CONTROL "queue-control"
+  DHCP_QUEUE_CONTROL "dhcp-queue-control"
 
   DHCP_DDNS "dhcp-ddns"
   ENABLE_UPDATES "enable-updates"
@@ -450,7 +450,7 @@ global_param: valid_lifetime
             | expired_leases_processing
             | dhcp4o6_port
             | control_socket
-            | queue_control
+            | dhcp_queue_control
             | dhcp_ddns
             | echo_client_id
             | match_client_id
@@ -1827,15 +1827,13 @@ control_socket_name: SOCKET_NAME {
 };
 
 
-// --- queue control ---------------------------------------------
+// --- dhcp-queue-control ---------------------------------------------
 
-// --- queue-control ---------------------------------------------
-
-queue_control: QUEUE_CONTROL {
+dhcp_queue_control: DHCP_QUEUE_CONTROL {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON map_value {
     ElementPtr qc = $4;
-    ctx.stack_.back()->set("queue-control", qc);
+    ctx.stack_.back()->set("dhcp-queue-control", qc);
 
     if (!qc->contains("queue-type")) {
         std::stringstream msg;
index e3379ac5d838733a0c92e2b2d66bcac2c7014c63..9ea3a697f773fac38a2aea02d0429c687af231fb 100644 (file)
@@ -24,7 +24,7 @@
 #include <dhcpsrv/parsers/host_reservations_list_parser.h>
 #include <dhcpsrv/parsers/ifaces_config_parser.h>
 #include <dhcpsrv/parsers/option_data_parser.h>
-#include <dhcpsrv/parsers/queue_control_parser.h>
+#include <dhcpsrv/parsers/dhcp_queue_control_parser.h>
 #include <dhcpsrv/parsers/simple_parser4.h>
 #include <dhcpsrv/parsers/shared_networks_list_parser.h>
 #include <dhcpsrv/parsers/sanity_checks_parser.h>
@@ -381,9 +381,9 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
                 continue;
             }
 
-            if (config_pair.first == "queue-control") {
-                QueueControlParser parser(AF_INET);
-                srv_cfg->setQueueControlInfo(parser.parse(config_pair.second));
+            if (config_pair.first == "dhcp-queue-control") {
+                DHCPQueueControlParser parser(AF_INET);
+                srv_cfg->setDHCPQueueControl(parser.parse(config_pair.second));
                 continue;
             }
 
index a48bec015af915ccccf1b5ccd7352ca1279dc372..75cc71e0f144e3485228264cb3445c21589e1920 100644 (file)
@@ -174,8 +174,8 @@ Parser4Context::contextName()
         return ("server-id");
     case CONTROL_SOCKET:
         return ("control-socket");
-    case QUEUE_CONTROL:
-        return ("queue-control");
+    case DHCP_QUEUE_CONTROL:
+        return ("dhcp-queue-control");
     case POOLS:
         return ("pools");
     case RESERVATIONS:
index cc99b86f854ec36811cafbbe7ed89e11a3671ede..85f262e0126044c64210f9cc8470b8b0d3fa6f13 100644 (file)
@@ -267,8 +267,8 @@ public:
         /// Used while parsing Dhcp4/control-socket structures.
         CONTROL_SOCKET,
 
-        /// Used while parsing Dhcp4/queue-control structures.
-        QUEUE_CONTROL,
+        /// Used while parsing Dhcp4/dhcp-queue-control structures.
+        DHCP_QUEUE_CONTROL,
 
         /// Used while parsing Dhcp4/subnet4/pools structures.
         POOLS,
index 431b2ce016d98784e5ad34dde0e4c480e55dc94e..2ef77376a8c393451d25813a39e34c84078b0251 100644 (file)
@@ -299,7 +299,11 @@ public:
     void configure(std::string config, int expected_code,
                    std::string exp_error = "") {
         ConstElementPtr json;
-        ASSERT_NO_THROW(json = parseDHCP4(config, true));
+        try {
+            json = parseDHCP4(config, true);
+        } catch(const std::exception& ex) {
+            ADD_FAILURE() << "parseDHCP4 failed: " << ex.what();
+        }
 
         ConstElementPtr status;
         EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json));
@@ -6337,61 +6341,86 @@ TEST_F(Dhcp4ParserTest, serverTag) {
     ASSERT_THROW(parseDHCP4(bad_tag), std::exception);
 }
 
-// Check whether it is possible to configure server-tag
-TEST_F(Dhcp4ParserTest, queueControl) {
-    // Config without server-tag
-    string config_no_queue = "{ " + genIfaceConfig() + "," +
-        "\"subnet4\": [  ] "
-        "}";
-
-    string config_with_queue =
-        "{ " + genIfaceConfig() + ", \n" +
-        "   \"subnet4\": [  ],  \n"
-        "   \"queue-control\": { \n"
-        "       \"queue-type\": \"some-type\", \n"
-        "       \"capacity\": 75 \n"
-        "   } \n"
-        "} \n";
+// Check whether it is possible to configure packet queue
+TEST_F(Dhcp4ParserTest, dhcpQueueControl) {
+    struct Scenario {
+        std::string description_;
+        std::string json_;
+    };
 
-    string config_with_context =
-        "{ " + genIfaceConfig() + ", \n" +
-        "   \"subnet4\": [  ],  \n"
-        "   \"queue-control\": { \n"
+    std::vector<Scenario> scenarios = {
+        {
+        "no entry",
+        ""
+        },
+        {
+        "valid entry",
+        "{ \n"
+        "   \"queue-type\": \"some-type\", \n"
+        "   \"capacity\": 75 \n"
+        "} \n"
+        },
+        {
+        "valid arbitrary content",
+        "{ \n"
         "       \"queue-type\": \"some-type\", \n"
         "       \"capacity\": 90, \n"
-        "       \"user-context\": { \"comment\": \"some text\" } \n"
-        "   } \n"
-        "} \n";
+        "       \"user-context\": { \"comment\": \"some text\" },\n"
+        "       \"random-bool\" : false, \n"
+        "       \"random-int\" : 1234 \n"
+        "} \n"
+        }
+    };
 
     // Let's check the default. It should be empty.
     data::ConstElementPtr control;
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+    control = CfgMgr::instance().getStagingCfg()->getDHCPQueueControl();
     ASSERT_FALSE(control);
 
-    // Configuration with no queue should default to an emtpy control.
-    configure(config_no_queue, CONTROL_RESULT_SUCCESS, "");
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
-    ASSERT_FALSE(control);
+    // Iterate over the incorrect scenarios and verify they
+    // fail as expected. Note, we use parseDHCP4() directly
+    // as all of the errors above are enforced by the grammar.
+    data::ConstElementPtr exp_elems;
+    for (auto scenario : scenarios) {
+        SCOPED_TRACE(scenario.description_);
+        {
+            // Clear the config
+            CfgMgr::instance().clear();
 
-    // Clear the config
-    CfgMgr::instance().clear();
+            // Construct the config JSON
+            std::stringstream os;
+            os << "{ " + genIfaceConfig();
+            if (!scenario.json_.empty()) {
 
-    // Configuration with queue should be valid.
-    configure(config_with_queue, CONTROL_RESULT_SUCCESS, "");
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
-    ASSERT_TRUE(control);
+               os << ",\n \"dhcp-queue-control\": "  <<  scenario.json_;
+            }
 
-    // Clear the config
-    CfgMgr::instance().clear();
+            os << "} \n";
+
+            // Configure the server. This should succeed.
+            configure(os.str(), CONTROL_RESULT_SUCCESS, "");
+
+            // Fetch the queue control info.
+            control = CfgMgr::instance().getStagingCfg()->getDHCPQueueControl();
 
-    // Configuration with queue with context should be valid.
-    configure(config_with_context, CONTROL_RESULT_SUCCESS, "");
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
-    ASSERT_TRUE(control);
+            // If JSON does not contain queue control,
+            // the pointer stored in staging should be empty.
+            if (scenario.json_.empty()) {
+                ASSERT_FALSE(control);
+                continue;
+            }
+
+            // Make sure the staged config is correct.
+            ASSERT_TRUE(control);
+            ASSERT_NO_THROW(exp_elems = Element::fromJSON(scenario.json_))
+                            << " cannot convert expected JSON, test is broken";
+            EXPECT_TRUE(control->equals(*exp_elems));
+        }
+    }
 }
 
-// Check whether it is possible to configure server-tag
-TEST_F(Dhcp4ParserTest, queueControlInvalid) {
+// Check that we catch invalid dhcp-queue-control content
+TEST_F(Dhcp4ParserTest, dhcpQueueControlInvalid) {
     struct Scenario {
         std::string description_;
         std::string json_;
@@ -6402,14 +6431,14 @@ TEST_F(Dhcp4ParserTest, queueControlInvalid) {
             "not a map",
             "{ " + genIfaceConfig() + ", \n" +
             "   \"subnet4\": [  ],  \n"
-            "   \"queue-control\": 75 \n"
+            "   \"dhcp-queue-control\": 75 \n"
             "} \n"
         },
         {
             "queue type missing",
             "{ " + genIfaceConfig() + ", \n" +
             "   \"subnet4\": [  ],  \n"
-            "   \"queue-control\": { \n"
+            "   \"dhcp-queue-control\": { \n"
             "       \"capacity\": 100 \n"
             "   } \n"
             "} \n"
@@ -6420,9 +6449,9 @@ TEST_F(Dhcp4ParserTest, queueControlInvalid) {
     // fail as expected. Note, we use parseDHCP4() directly
     // as all of the errors above are enforced by the grammar.
     for (auto scenario : scenarios) {
-        SCOPED_TRACE((scenario).description_);
+        SCOPED_TRACE(scenario.description_);
         {
-            EXPECT_THROW(parseDHCP4((scenario).json_), Dhcp4ParseError);
+            EXPECT_THROW(parseDHCP4(scenario.json_), Dhcp4ParseError);
         }
     }
 }
index 599b7be4865fa3fa0441e7c9ba6de4b7f6803c84..a7241c117075926aeaaee9d514437738aa92271e 100644 (file)
@@ -653,10 +653,10 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
         return (isc::config::createAnswer(1, err.str()));
     }
 
-    // Configure packet queue
+    // Configure DHCP packet queue
     try {
         data::ConstElementPtr qc;
-        qc  = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+        qc  = CfgMgr::instance().getStagingCfg()->getDHCPQueueControl();
         if (!qc) {
             // @todo For now we're manually constructing default queue config
             // This probably needs to be built into the PQM?
@@ -673,7 +673,7 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
 
     } catch (const std::exception& ex) {
         std::ostringstream err;
-        err << "Error setting packet queue controls after server reconfiguration: "
+        err << "Error setting DHCP packet queue controls after server reconfiguration: "
             << ex.what();
         return (isc::config::createAnswer(1, err.str()));
     }
index 797da7d36cfa0a161110ac8407abb87977dbb38a..48ce1d5fef6deb825ca6929c5c37da7dbc8fadf6 100644 (file)
@@ -700,7 +700,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static const flex_int16_t yy_accept[1458] =
+static const flex_int16_t yy_accept[1460] =
     {   0,
       172,  172,    0,    0,    0,    0,    0,    0,    0,    0,
       180,  178,   10,   11,  178,    1,  172,  169,  172,  172,
@@ -732,136 +732,136 @@ static const flex_int16_t yy_accept[1458] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  177,
-      175,    0,  174,  173,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  177,  175,
+        0,  174,  173,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  138,    0,    0,   29,    0,   28,    0,    0,  101,
-        0,    0,    0,    0,    0,    0,    0,    0,   54,    0,
+      138,    0,    0,   29,    0,   28,    0,    0,  101,    0,
+        0,    0,    0,    0,    0,    0,    0,   54,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   99,    0,    0,
+        0,    0,    0,    0,    0,    0,   99,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
+        0,    0,    0,    0,    0,    0,    0,  176,  173,    0,
 
-      173,    0,    0,    0,    0,    0,    0,    0,    0,   30,
-        0,    0,   32,    0,    0,    0,    0,    0,  102,    0,
-        0,    0,    0,    0,    0,   80,    0,    0,    0,    0,
-        0,    0,  123,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   57,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   30,    0,    0,
+       32,    0,    0,    0,    0,    0,  102,    0,    0,    0,
+        0,    0,    0,   80,    0,    0,    0,    0,    0,    0,
+      123,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   57,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   79,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   89,    0,   58,
+        0,    0,   79,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   89,    0,   58,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,    0,    0,  118,  143,
-       50,    0,   55,    0,    0,    0,    0,    0,    0,  158,
-       38,    0,   35,    0,   34,    0,    0,    0,  131,    0,
+        0,    0,    0,    0,    0,  118,  143,   50,    0,   55,
+        0,    0,    0,    0,    0,    0,  158,   38,    0,   35,
+        0,   34,    0,    0,    0,  131,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  110,    0,
-        0,    0,    0,    0,    0,    0,  142,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  110,    0,    0,    0,
+        0,    0,    0,    0,  142,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   52,    0,    0,   33,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   82,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  132,    0,
+       52,    0,    0,   33,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   82,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  132,    0,    0,    0,    0,
 
+        0,    0,    0,    0,    0,    0,    0,    0,  127,    0,
+        0,    0,    0,    0,    0,    7,   36,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  127,    0,    0,    0,    0,    0,    0,    7,   36,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  112,    0,    0,    0,
-        0,    0,    0,  109,    0,    0,    0,    0,    0,    0,
-        0,    0,   84,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  112,    0,    0,    0,    0,    0,
+        0,  109,    0,    0,    0,    0,    0,    0,    0,    0,
+       84,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,    0,    0,    0,   92,    0,    0,    0,
-        0,    0,    0,    0,    0,  106,    0,    0,    0,    0,
-        0,   91,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  126,
+        0,    0,    0,   92,    0,    0,    0,    0,    0,    0,
+        0,    0,  106,    0,    0,    0,    0,    0,   91,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  126,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  136,  107,    0,    0,    0,
-        0,  111,   51,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   59,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  136,  107,    0,    0,    0,    0,  111,
+       51,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   59,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,    0,    0,   75,    0,    0,    0,    0,    0,    0,
-      159,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   98,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  125,    0,
-        0,    0,    0,    0,    0,   62,    0,    0,    0,    0,
+       75,    0,    0,    0,    0,    0,    0,  159,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   98,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
+        0,    0,    0,   62,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   56,   83,    0,    0,    0,  122,    0,    0,
-        0,    0,   49,    0,    0,    0,    0,    0,    0,    0,
+       56,   83,    0,    0,    0,  122,    0,    0,    0,   49,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  114,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      114,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  157,    0,    0,    0,    0,    0,
+        0,  157,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   93,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       93,    0,    0,    0,    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,    0,    0,   16,
-        0,  137,   14,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   41,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   16,    0,  137,   14,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  128,  113,    0,    0,    0,    0,
-
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  124,  141,    0,   40,    0,  133,    0,    0,    0,
-        0,    0,    0,    0,    0,   20,    0,    0,    0,   77,
-        0,    0,    0,    0,  135,   53,    0,   85,    0,    0,
+        0,  128,  113,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  124,
+      141,    0,   40,    0,  133,    0,    0,    0,    0,    0,
+        0,    0,    0,   20,    0,    0,    0,   77,    0,    0,
+        0,    0,  135,   53,    0,   85,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   74,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   81,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  130,    0,
+        0,   74,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   81,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  130,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  103,    0,    0,    0,    0,
-
-        0,   78,  100,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   71,    0,    0,    0,    0,
-        0,    0,   17,   15,    0,  155,  154,    0,   66,    0,
-        0,    0,    0,    0,   31,    0,  117,    0,    0,    0,
-        0,    0,    0,    0,    0,  152,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   94,    0,  121,
-       43,    0,   60,    0,    0,    0,    0,   19,    0,    0,
-        0,    0,    0,    0,    0,   96,   72,    0,    0,  129,
-        0,    0,    0,    0,    0,  120,    0,    0,    0,    0,
-       90,    0,  160,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,   88,    0,  144,    0,    0,    0,    0,    0,
+        0,    0,    0,  103,    0,    0,    0,    0,    0,   78,
+
+      100,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   71,    0,    0,    0,    0,    0,    0,   17,
+       15,    0,  155,  154,    0,   66,    0,    0,    0,    0,
+        0,   31,    0,  117,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  152,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,   94,    0,  121,   43,    0,
+       60,    0,    0,    0,    0,   19,    0,    0,    0,    0,
+        0,    0,   96,   72,    0,    0,  129,    0,    0,    0,
+        0,    0,  120,    0,    0,    0,    0,   90,    0,  160,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   88,
+
+        0,    0,  144,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  156,    0,    0,    0,
-        0,    0,    0,    0,   42,    0,   65,    0,    0,    0,
-        0,  115,   47,    0,    0,   67,  153,    0,   12,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   45,    0,
-        0,   44,   18,    0,    0,    0,    0,  108,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   70,    0,    0,    0,   61,    0,   86,    0,    0,
-        0,    0,    0,  134,    0,    0,    0,   46,    0,    0,
+        0,   42,    0,   65,    0,    0,    0,    0,  115,   47,
+        0,    0,   67,  153,    0,    0,   12,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   45,    0,    0,   44,
+       18,    0,    0,    0,    0,  108,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   70,
+        0,    0,    0,   61,    0,    0,   86,    0,    0,    0,
+        0,    0,  134,    0,    0,    0,   46,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   64,    0,    0,   76,    0,   37,    0,   48,    0,
+       64,    0,    0,   76,    0,   37,    0,   48,    0,    0,
         0,    0,    0,   25,    0,    0,    0,    0,    0,    0,
       150,    0,  119,    0,    0,    0,    0,    0,    0,    0,
         0,    0,   97,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   26,   39,    0,    0,    0,    0,    0,   13,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  149,    0,    0,   22,   69,    0,
-        0,    0,    0,    0,    0,   21,    0,   87,    0,    0,
-      148,    0,    0,   68,    0,    0,   63,    0,   24,    0,
+        0,    0,    0,   26,   39,    0,    0,    0,    0,    0,
+       13,    0,    0,    0,    0,    0,    0,    0,    0,  156,
+        0,    0,    0,    0,    0,    0,  149,    0,    0,   22,
+       69,    0,    0,    0,    0,    0,    0,   21,    0,   87,
+        0,    0,  148,    0,    0,   68,    0,    0,   63,    0,
 
+       24,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   23,    0,  104,  116,
-        0,    0,    0,    0,    0,    0,  146,  151,   73,    0,
-        0,    0,    0,  145,    0,    0,   27,    0,    0,    0,
-        0,    0,  105,    0,    0,  147,    0
+        0,    0,    0,    0,    0,    0,    0,    0,   23,    0,
+      104,  116,    0,    0,    0,    0,    0,    0,  146,  151,
+       73,    0,    0,    0,    0,  145,    0,    0,   27,    0,
+        0,    0,    0,    0,  105,    0,    0,  147,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -908,353 +908,355 @@ static const YY_CHAR yy_meta[72] =
         3
     } ;
 
-static const flex_int16_t yy_base[1470] =
+static const flex_int16_t yy_base[1472] =
     {   0,
         0,   70,   19,   29,   41,   49,   52,   58,   87,   95,
-     1822, 1823,   32, 1818,  141,    0,  201, 1823,  206,   88,
-       11,  213, 1823, 1800,  114,   25,    2,    6, 1823, 1823,
-       73,   11,   17, 1823, 1823, 1823,  104, 1806, 1761,    0,
-     1798,  107, 1813,  217,  241, 1823,  185, 1757, 1763, 1783,
+     1825, 1826,   32, 1821,  141,    0,  201, 1826,  206,   88,
+       11,  213, 1826, 1803,  114,   25,    2,    6, 1826, 1826,
+       73,   11,   17, 1826, 1826, 1826,  104, 1809, 1764,    0,
+     1801,  107, 1816,  217,  241, 1826,  185, 1760, 1766, 1786,
        93,   58,  190,   91,  211,  200,   14,  267,  213,  175,
-      269,   64,  231, 1764,  187,   75, 1763,  274,  188,  290,
-      278,  297, 1746,  195,  302,  316,  316, 1765,    0,  355,
-      360,  372,  377,  380, 1823,    0, 1823,  267,  295,  296,
-      327,  283,  361,  368,  293, 1823, 1762, 1801, 1823,  359,
-
-     1823,  393,  341, 1749, 1759, 1798,  369,  220,  249, 1753,
-      364,  372,  373,  380,  385, 1796,    0,  444,  375, 1740,
-     1748,  364, 1744, 1733, 1734,  372, 1750, 1733, 1742,  399,
-      200,  371, 1736,  389, 1724, 1780,  416, 1727, 1778, 1720,
-     1743, 1740, 1740, 1734,  369, 1727, 1720, 1725, 1719,  409,
-     1730, 1723, 1714, 1713, 1727,  387, 1763, 1712,  414, 1724,
-      270, 1712,  441, 1713,  416, 1725, 1722, 1723, 1721,  394,
-     1703, 1708, 1704, 1696, 1713, 1705,    0,  421,  385,  436,
-      437,  449,  454, 1704, 1823,    0,  461, 1695, 1698, 1823,
-      446,  464, 1823, 1750, 1705,  470, 1748,  472, 1747,  476,
-
-     1746, 1823,  520, 1745,  486, 1706, 1701, 1700, 1691,  460,
-     1740, 1734, 1700, 1679, 1687, 1693, 1681, 1695, 1691, 1692,
-     1692, 1687, 1679, 1681, 1665, 1669, 1682, 1682, 1674, 1664,
-     1667, 1681, 1823, 1667, 1675, 1678, 1659, 1658, 1708, 1657,
-     1667, 1705,  508, 1666, 1654, 1665, 1701,  489, 1705, 1642,
-     1657,    9, 1647, 1663, 1644, 1646, 1642, 1648, 1639, 1638,
-     1651, 1644, 1634, 1645, 1649, 1648, 1642,   80, 1649, 1644,
-     1636, 1626, 1641, 1636, 1640, 1621, 1637, 1623, 1629, 1636,
-     1624,  348, 1617, 1631, 1630, 1633, 1615, 1623,  490, 1823,
-     1823,  491, 1823, 1823, 1610,    0,  472, 1612,  532,  501,
-
-     1666, 1823, 1619,  489, 1823, 1664, 1823, 1658,  560, 1823,
-      485, 1600, 1610, 1660, 1617, 1612, 1615,  466, 1823, 1613,
-     1655, 1610, 1607, 1608,  337, 1612, 1650, 1600, 1595, 1592,
-     1588, 1590, 1639, 1598, 1587, 1636, 1584,  566, 1597, 1597,
-     1580, 1581, 1594, 1581, 1591, 1586, 1593, 1588, 1573,  452,
-     1582, 1585, 1580, 1576, 1624,  502,  496, 1823, 1618, 1570,
-     1569, 1562, 1564, 1568, 1557, 1564, 1569,  525, 1614, 1569,
-      480, 1566, 1569, 1569, 1567, 1556, 1556, 1568,  497, 1543,
-     1544, 1565,  507, 1547, 1544, 1558, 1557, 1543, 1555, 1554,
-     1553, 1552,  206, 1593, 1592, 1591, 1535,  582, 1548, 1823,
-
-     1823, 1547,    0,  518, 1535, 1586, 1585, 1543, 1583, 1823,
-     1531, 1581, 1823,  559,  615,  528, 1580, 1522, 1823, 1527,
-     1533, 1536, 1535, 1522, 1521, 1823, 1523, 1520, 1532, 1528,
-     1516, 1518, 1823, 1524, 1509, 1511, 1522, 1520, 1515,  586,
-     1522, 1504, 1553, 1823, 1502, 1518, 1550, 1554, 1512, 1506,
-     1508, 1509, 1511, 1543, 1496, 1491, 1490, 1492, 1485, 1500,
-     1478, 1485, 1490, 1538, 1823, 1485, 1481, 1535, 1488, 1482,
-     1489, 1474, 1484, 1487, 1476, 1475, 1470, 1823, 1525, 1823,
-     1469, 1468, 1461, 1478, 1515, 1514, 1461, 1466, 1475, 1469,
-     1463, 1472,  588, 1507, 1471, 1454, 1454, 1449, 1445, 1451,
-
-     1450, 1458, 1462, 1445, 1501, 1443, 1457, 1446, 1823, 1823,
-     1823, 1446, 1823, 1456, 1490, 1452,    0, 1493, 1443, 1823,
-     1823, 1440, 1823, 1446, 1823,  540,  563,  589, 1823, 1484,
-     1431, 1482, 1429, 1428, 1435, 1428, 1440, 1439, 1423, 1438,
-     1468, 1435, 1471, 1417, 1419, 1431, 1431, 1430, 1823, 1415,
-     1412, 1426, 1418, 1424, 1415, 1423, 1823, 1408, 1419, 1423,
-     1405, 1419,  532, 1401, 1395, 1400, 1397, 1412, 1413, 1410,
-     1451, 1408, 1823, 1394, 1396, 1823, 1404, 1441, 1440,  604,
-     1403, 1386, 1387, 1392, 1383, 1823, 1397, 1383,  606, 1375,
-     1396, 1395, 1392, 1384, 1427, 1381, 1388, 1424, 1823, 1372,
-
-     1370, 1384, 1368, 1382, 1385, 1417, 1416, 1415, 1362, 1413,
-     1412, 1823,  595, 1374, 1374, 1372, 1361, 1363, 1823, 1823,
-     1406, 1354, 1409,  579,  577,  551, 1368, 1407,  573, 1401,
-     1400, 1399, 1353, 1343, 1396, 1358, 1348, 1393, 1356, 1338,
-     1346, 1348, 1352, 1387, 1391, 1348, 1347, 1348, 1341, 1330,
-     1343, 1346, 1341, 1336, 1341, 1338, 1337, 1333, 1339, 1334,
-     1375, 1374, 1318, 1314,  505, 1371, 1823, 1370, 1319, 1311,
-     1362, 1325, 1312, 1823, 1312, 1321, 1320, 1320, 1304, 1359,
-     1302, 1315, 1823, 1307, 1299, 1308, 1301, 1300, 1311, 1288,
-     1292, 1343, 1307, 1289, 1287, 1298, 1338, 1337, 1336, 1283,
-
-     1299,  563,  592, 1276, 1286,  564, 1823, 1336, 1282, 1292,
-     1292, 1281, 1285, 1292, 1329, 1823, 1323,  609, 1276, 1284,
-     1276, 1823, 1272, 1285, 1265, 1268, 1264, 1281, 1276,    0,
-       77,   64,  182,  361,  373,  419,  463,  615,  577, 1823,
-      587,  587,  580,  600,  598,  642,  586,  588,  604,  608,
-      595,  652,  617,  603,  606, 1823, 1823,  622,  621,  626,
-      615, 1823, 1823,  629,  616,  614,  632,  619,  619,  668,
-      620,  676,  677, 1823,  624,  638,  638,  681,  631,  632,
-      634,  628,  686,  641,  631,  632,  628,  638,  642,  653,
-      637,  655,  650,  652,  645,  647,  659,  649,  664,  703,
-
-      662,  667,  644, 1823,  669,  659,  704,  653,  668,  669,
-     1823,  688,  696,  676,  666,  680,  668,  663,  675,  670,
-      671,  667,  676,  671,  722,  728,  677, 1823,  689,  674,
-      690,  680,  692,  686,  731,  699,  684,  685, 1823,  702,
-      705,  688,  690,  746,  691, 1823,  708,  711,  691,  710,
-      748,  708,  704,  699,  717,  716,  702,  717,  709,  705,
-      723,  708, 1823, 1823,  716,  761,  716, 1823,  724,  712,
-      720,  771, 1823,  722,  727,  770,  723,  724,  736,  730,
-      734,  732,  730,  741,  784,  730,  786,  787,  733,  745,
-     1823,  733,  741,  739,  744,  756,  740,  754,  755,  756,
-
-      772,  777,  751,  762,  748,  748,  768,  757,  762,  769,
-      810,  811,  760,  764, 1823,  759,  777,  774,  812,  763,
-      781,  782,  768,  776,  785,  765,  780,  787,  829,  830,
-     1823,  785,  832,  833,  786,  796,  798,  782,  783,  790,
-      799,  842,  791,  790,  807,  846,  798,  802,  800,  798,
-      851,  852,  804,  854,  850,  801,  811, 1823,  816,  809,
-      800,  819,  813,  808,  818,  815,  820,  816,  828, 1823,
-      812, 1823, 1823,  813,  871,  812,  831,  832,  830,  815,
-      836,  818,  823,  830,  863,  854,  826,  885,  830,  832,
-      849,  847,  839,  843, 1823, 1823,  853,  851,  837,  838,
-
-      896,  851,  856,  843,  854,  846,  852,  848,  866,  868,
-      869, 1823, 1823,  867, 1823,  869, 1823,  854,  856,  875,
-      865,  915,  870,  912,  878, 1823,  870,  862,  921, 1823,
-      922,  871,  878,  920, 1823, 1823,  880, 1823,  871,  876,
-      872,  875,  889,  894,  877,  888,  935,  894,  895,  896,
-      934,  892,  941,  942, 1823,  891,  944,  945,  887,  947,
-      908,  892,  904,  894,  924,  953,  913, 1823,  955,  904,
-      919,  906,  902,  918,  923,  911,  963,  922, 1823,  924,
-      923,  925,  918,  927,  928,  925,  915,  918,  918,  975,
-      924,  977,  978,  923,  981, 1823,  919,  934,  927,  985,
-
-      940, 1823, 1823,  936,  946,  931,  949,  935,  945,  995,
-      996,  943,  953, 1000,  959, 1823,  951,  951,  953,  955,
-     1006,  951, 1823, 1823,  953, 1823, 1823,  967, 1823,  961,
-     1011,  962, 1013,  995, 1823,  973, 1823,  960,  968,  962,
-      961,  964,  964,  965, 1023, 1823,  968, 1025,  980,  971,
-      986,  986,  989,  989,  986, 1028,  992, 1823,  984, 1823,
-     1823,  994, 1823,  996,  997,  994, 1036, 1823,  987,  987,
-      993,  992, 1004, 1004, 1048, 1823, 1823, 1044,  993, 1823,
-     1010,  995,  995,  997, 1003, 1823, 1056, 1009, 1058, 1021,
-     1823, 1018, 1823, 1037, 1057, 1063, 1064, 1023, 1009, 1067,
-
-     1068, 1023, 1823, 1070, 1823, 1010, 1067, 1032, 1028, 1070,
-     1020, 1025, 1023, 1080, 1038, 1082, 1083, 1046, 1035, 1029,
-     1045, 1089, 1033, 1050, 1035, 1050, 1823, 1034, 1090, 1091,
-     1092, 1041, 1094, 1059, 1823, 1045, 1823, 1056, 1103, 1075,
-     1062, 1823, 1823, 1050, 1107, 1823, 1823, 1056, 1823, 1109,
-     1057, 1106, 1051, 1056, 1115, 1065, 1075, 1076, 1823, 1119,
-     1074, 1823, 1823, 1065, 1080, 1068, 1083, 1823, 1120, 1088,
-     1081, 1082, 1091, 1073, 1079, 1082, 1134, 1095, 1095, 1138,
-     1089, 1823, 1140, 1087, 1142, 1823, 1092, 1823, 1095, 1090,
-     1089, 1147, 1102, 1823, 1144, 1097, 1094, 1823, 1108, 1111,
-
-     1154, 1109, 1156, 1099, 1101, 1109, 1099, 1115, 1116, 1110,
-     1126, 1823, 1116, 1166, 1823, 1162, 1823, 1127, 1823, 1164,
-     1128, 1119, 1126, 1823, 1123, 1128, 1126, 1176, 1177, 1122,
-     1823, 1137, 1823, 1127, 1139, 1140, 1183, 1127, 1135, 1129,
-     1137, 1150, 1823, 1149, 1139, 1138, 1141, 1153, 1144, 1153,
-     1155, 1159, 1823, 1823, 1198, 1143, 1159, 1201, 1202, 1823,
-     1198, 1162, 1159, 1164, 1151, 1146, 1209, 1168, 1211, 1170,
-     1171, 1214, 1173, 1176, 1823, 1217, 1180, 1823, 1823, 1162,
-     1220, 1169, 1222, 1167, 1184, 1823, 1170, 1823, 1170, 1172,
-     1823, 1177, 1187, 1823, 1173, 1185, 1823, 1181, 1823, 1191,
-
-     1185, 1189, 1180, 1232, 1181, 1189, 1198, 1191, 1186, 1187,
-     1202, 1193, 1200, 1187, 1202, 1207, 1250, 1209, 1252, 1253,
-     1198, 1214, 1205, 1219, 1215, 1208, 1823, 1260, 1823, 1823,
-     1261, 1262, 1219, 1218, 1219, 1209, 1823, 1823, 1823, 1267,
-     1211, 1227, 1270, 1823, 1266, 1217, 1823, 1216, 1218, 1229,
-     1276, 1227, 1823, 1236, 1279, 1823, 1823, 1285, 1290, 1295,
-     1300, 1305, 1310, 1315, 1318, 1292, 1297, 1299, 1312
+      269,   64,  231, 1767,  187,   75, 1766,  274,  188,  290,
+      278,  297, 1749,  195,  302,  316,  316, 1768,    0,  355,
+      360,  372,  377,  380, 1826,    0, 1826,  267,  295,  296,
+      327,  283,  361,  368,  293, 1826, 1765, 1804, 1826,  359,
+
+     1826,  393,  341, 1752, 1762, 1801,  369,  220,  249, 1756,
+      364,  372,  373,  380,  385, 1799,    0,  444,  375, 1743,
+     1751,  364, 1747, 1736, 1737,  372, 1753, 1736, 1745,  399,
+      200,  371, 1739,  389, 1727, 1783,  416, 1730, 1781, 1723,
+     1746, 1743, 1743, 1737,  369, 1730, 1723, 1728, 1722,  409,
+     1733, 1726, 1717, 1716, 1730,  387, 1766, 1715,  414, 1727,
+     1730, 1714,  441, 1715,  416, 1727, 1724, 1725, 1723,  394,
+     1705, 1710, 1706, 1698, 1715, 1707,    0,  421,  385,  436,
+      437,  449,  454, 1706, 1826,    0,  461, 1697, 1700, 1826,
+      446,  464, 1826, 1752, 1707,  470, 1750,  472, 1749,  476,
+
+     1748, 1826,  520, 1747,  486, 1708, 1703, 1702, 1693,  460,
+     1742, 1736, 1702, 1681, 1689, 1695, 1683, 1697, 1693, 1694,
+     1694, 1689, 1681, 1683, 1667, 1671, 1684, 1684, 1676, 1666,
+     1669, 1683, 1826, 1669, 1677, 1680, 1661, 1660, 1710, 1659,
+     1669, 1707,  508, 1668, 1656, 1667, 1703,  489, 1707, 1644,
+     1659,    9, 1649, 1665, 1646, 1648, 1644, 1650, 1641, 1640,
+     1653, 1646, 1648, 1652, 1651, 1645,   80, 1652, 1647, 1639,
+     1629, 1644, 1639, 1643, 1624, 1640, 1626, 1632, 1639, 1627,
+      348, 1620, 1634, 1633, 1636, 1618, 1626,  490, 1826, 1826,
+      491, 1826, 1826, 1613,    0,  472, 1615,  532,  501, 1669,
+
+     1826, 1622,  489, 1826, 1667, 1826, 1661,  560, 1826,  485,
+     1603, 1613, 1663, 1620, 1615, 1618,  466, 1826, 1616, 1658,
+     1613, 1610, 1611,  303, 1615, 1653, 1603, 1598, 1595, 1591,
+     1593, 1642, 1601, 1590, 1639, 1587,  566, 1600, 1600, 1583,
+     1584, 1597, 1584, 1594, 1589, 1596, 1591, 1576,  452, 1585,
+     1588, 1583, 1579, 1627,  502,  496, 1826, 1621, 1573, 1572,
+     1565, 1567, 1571, 1560, 1567, 1572,  525, 1617, 1572,  300,
+     1569, 1573, 1571, 1560, 1560, 1572,  471, 1547, 1548, 1569,
+      506, 1551, 1548, 1562, 1561, 1547, 1559, 1558, 1557, 1556,
+      206, 1597, 1596, 1595, 1539,  549, 1552, 1826, 1826, 1551,
+
+        0,  518, 1539, 1590, 1589, 1547, 1587, 1826, 1535, 1585,
+     1826,  558,  615,  529, 1584, 1526, 1826, 1531, 1537, 1540,
+     1539, 1526, 1525, 1826, 1527, 1524, 1536,  532, 1521, 1523,
+     1826, 1529, 1514, 1516, 1527, 1525, 1520,  583, 1527, 1509,
+     1558, 1826, 1507, 1523, 1555, 1559, 1517, 1511, 1513, 1514,
+     1516, 1548, 1501, 1496, 1495, 1497, 1490, 1505, 1483, 1490,
+     1495, 1543, 1826, 1490, 1486, 1540, 1493, 1487, 1494, 1479,
+     1489, 1492, 1481, 1480, 1475, 1826, 1530, 1826, 1474, 1473,
+     1466, 1483, 1520, 1467, 1472, 1481, 1475, 1469, 1478,  587,
+     1513, 1477, 1460, 1460, 1455, 1451, 1457, 1456, 1464, 1468,
+
+     1451, 1507, 1449, 1463, 1452, 1826, 1826, 1826, 1452, 1826,
+     1462, 1496, 1458,    0, 1499, 1449, 1826, 1826, 1446, 1826,
+     1452, 1826,  564,  538,  590, 1826, 1490, 1437, 1488, 1435,
+     1434, 1441, 1434, 1446, 1445, 1429, 1444, 1426, 1473, 1440,
+     1476, 1422, 1424, 1436, 1436, 1435, 1826, 1420, 1417, 1431,
+     1423, 1429, 1420, 1428, 1826, 1413, 1424, 1428, 1410, 1424,
+      556, 1406, 1400, 1405, 1402, 1417, 1418, 1415, 1456, 1413,
+     1826, 1399, 1401, 1826, 1409, 1446, 1445,  519, 1408, 1391,
+     1392, 1397, 1388, 1826, 1402, 1388,  605, 1380, 1401, 1398,
+     1390, 1433, 1387, 1394, 1430, 1826, 1378, 1376, 1390, 1374,
+
+     1388, 1391, 1423, 1422, 1421, 1368, 1419, 1418, 1826,  594,
+     1380, 1380, 1378, 1367, 1369, 1826, 1826, 1412, 1360, 1415,
+      562,  587,  562, 1374, 1413,  572, 1407, 1406, 1405, 1359,
+     1349, 1402, 1364, 1354, 1362, 1398, 1361, 1343, 1351, 1353,
+     1357, 1392, 1396, 1353, 1352, 1353, 1346, 1335, 1348, 1351,
+     1346, 1341, 1346, 1343, 1342, 1338, 1344, 1339, 1380, 1379,
+     1323, 1319,  587, 1376, 1826, 1375, 1324, 1316, 1367, 1330,
+     1317, 1826, 1317, 1326, 1325, 1325, 1309, 1364, 1307, 1320,
+     1826, 1312, 1304, 1313, 1306, 1317, 1294, 1298, 1349, 1313,
+     1295, 1293, 1304, 1344, 1343, 1342, 1289, 1305,  561,  591,
+
+     1282, 1292,  564, 1826, 1342, 1288, 1298, 1298, 1287, 1291,
+     1298, 1335, 1826, 1329,  610, 1282, 1290, 1282, 1826, 1278,
+     1291, 1271, 1274, 1270, 1287, 1282, 1270, 1281, 1265,   60,
+       67,  235,  308,  388,  401,  548,  523, 1826,  580,  585,
+      578,  589,  598,  641,  585,  587,  603,  607,  594,  651,
+      610,  602,  605, 1826, 1826,  621,  620,  625,  613, 1826,
+     1826,  627,  615,  613,  631,  618,  618,  667,  619,  675,
+      676, 1826,  623,  637,  637,  680,  630,  632,  626,  684,
+      639,  629,  630,  626,  636,  640,  651,  635,  653,  648,
+      650,  643,  645,  657,  647,  662,  701,  660,  665,  642,
+
+     1826,  667,  657,  702,  651,  666,  667, 1826,  686,  694,
+      674,  664,  678,  666,  661,  673,  668,  669,  665,  674,
+      669,  720,  726,  685,  676, 1826,  688,  673,  689,  679,
+      691,  685,  730,  699,  683,  685, 1826,  701,  704,  687,
+      689,  745,  690, 1826,  707,  710,  690,  709,  747,  707,
+      703,  698,  716,  715,  701,  716,  708,  704,  722,  707,
+     1826, 1826,  715,  760,  715, 1826,  723,  718,  769, 1826,
+      720,  725,  767,  721,  722,  734,  728,  732,  730,  728,
+      739,  782,  728,  784,  785,  731,  743, 1826,  731,  739,
+      737,  742,  754,  738,  752,  753,  754,  770,  775,  749,
+
+      759,  746,  746,  766,  755,  760,  767,  808,  809,  758,
+      762, 1826,  807,  758,  776,  773,  811,  762,  780,  781,
+      767,  775,  784,  764,  779,  788,  828,  829, 1826,  784,
+      831,  832,  785,  795,  797,  781,  782,  789,  798,  841,
+      790,  789,  806,  845,  797,  801,  799,  797,  850,  851,
+      803,  853,  849,  809, 1826,  814,  807,  798,  817,  811,
+      806,  816,  813,  818,  814,  826, 1826,  810, 1826, 1826,
+      811,  869,  810,  829,  830,  827,  813,  834,  816,  821,
+      828,  861,  852,  824,  883,  828,  830,  847,  845,  837,
+      841, 1826, 1826,  851,  849,  852,  836,  837,  895,  850,
+
+      855,  842,  853,  845,  851,  847,  866,  867,  868, 1826,
+     1826,  866, 1826,  868, 1826,  854,  855,  874,  864,  914,
+      869,  911,  877, 1826,  869,  861,  920, 1826,  921,  870,
+      877,  919, 1826, 1826,  879, 1826,  870,  870,  873,  887,
+      892,  875,  886,  933,  892,  893,  894,  932,  890,  939,
+      940, 1826,  889,  942,  943,  885,  945,  906,  890,  902,
+      892,  922,  951,  911, 1826,  953,  902,  917,  904,  900,
+      916,  921,  909,  909,  962,  921, 1826,  923,  922,  924,
+      917,  926,  927,  924,  914,  917,  917,  974,  923,  976,
+      977,  923,  980, 1826,  918,  933,  926,  984,  939, 1826,
+
+     1826,  935,  945,  931,  948,  934,  993,  994,  941,  951,
+      998,  957, 1826,  949,  949,  951,  953, 1004,  949, 1826,
+     1826,  951, 1826, 1826,  965, 1826,  959, 1009,  960, 1011,
+      993, 1826,  971, 1826,  958,  966,  960,  959,  962,  962,
+      963, 1021,  971, 1826,  967, 1024,  979,  970,  985,  985,
+      988,  988,  985, 1027,  991, 1826,  983, 1826, 1826,  994,
+     1826,  995,  996,  993, 1035, 1826,  986,  986,  992,  991,
+     1003, 1003, 1826, 1826, 1042,  991, 1826, 1008,  993,  993,
+      995, 1001, 1826, 1054, 1007, 1056, 1019, 1826, 1016, 1826,
+     1035, 1055, 1061, 1062, 1021, 1007, 1065, 1066, 1021, 1826,
+
+     1011, 1069, 1826, 1009, 1066, 1031, 1027, 1069, 1019, 1024,
+     1022, 1079, 1037, 1081, 1082, 1045, 1034, 1028, 1045, 1088,
+     1032, 1049, 1034, 1049, 1033, 1089, 1090, 1091, 1040, 1093,
+     1058, 1826, 1044, 1826, 1055, 1102, 1074, 1061, 1826, 1826,
+     1049, 1106, 1826, 1826, 1055, 1053, 1826, 1109, 1057, 1106,
+     1051, 1056, 1115, 1065, 1075, 1076, 1826, 1119, 1074, 1826,
+     1826, 1065, 1080, 1068, 1083, 1826, 1120, 1088, 1081, 1082,
+     1091, 1073, 1080, 1082, 1134, 1096, 1095, 1138, 1089, 1826,
+     1140, 1087, 1142, 1826, 1092, 1092, 1826, 1096, 1091, 1090,
+     1148, 1103, 1826, 1145, 1098, 1095, 1826, 1109, 1112, 1155,
+
+     1110, 1157, 1100, 1102, 1110, 1100, 1116, 1117, 1111, 1127,
+     1826, 1117, 1167, 1826, 1163, 1826, 1128, 1826, 1165, 1122,
+     1130, 1121, 1128, 1826, 1125, 1130, 1128, 1178, 1179, 1124,
+     1826, 1139, 1826, 1129, 1141, 1142, 1185, 1129, 1137, 1131,
+     1139, 1152, 1826, 1151, 1141, 1140, 1194, 1144, 1156, 1147,
+     1156, 1158, 1162, 1826, 1826, 1201, 1146, 1162, 1204, 1205,
+     1826, 1201, 1165, 1162, 1167, 1154, 1149, 1212, 1171, 1826,
+     1214, 1173, 1174, 1217, 1176, 1179, 1826, 1220, 1183, 1826,
+     1826, 1165, 1223, 1172, 1225, 1170, 1187, 1826, 1173, 1826,
+     1173, 1175, 1826, 1180, 1190, 1826, 1176, 1188, 1826, 1184,
+
+     1826, 1194, 1188, 1192, 1183, 1235, 1184, 1192, 1201, 1194,
+     1189, 1190, 1205, 1196, 1203, 1190, 1205, 1210, 1253, 1212,
+     1255, 1256, 1201, 1217, 1208, 1222, 1218, 1211, 1826, 1263,
+     1826, 1826, 1264, 1265, 1222, 1221, 1222, 1212, 1826, 1826,
+     1826, 1270, 1214, 1230, 1273, 1826, 1269, 1220, 1826, 1219,
+     1221, 1232, 1279, 1230, 1826, 1239, 1282, 1826, 1826, 1288,
+     1293, 1298, 1303, 1308, 1313, 1318, 1321, 1295, 1300, 1302,
+     1315
     } ;
 
-static const flex_int16_t yy_def[1470] =
+static const flex_int16_t yy_def[1472] =
     {   0,
-     1458, 1458, 1459, 1459, 1458, 1458, 1458, 1458, 1458, 1458,
-     1457, 1457, 1457, 1457, 1457, 1460, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1461,
-     1457, 1457, 1457, 1462,   15, 1457,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1463,   45,   45,
+     1460, 1460, 1461, 1461, 1460, 1460, 1460, 1460, 1460, 1460,
+     1459, 1459, 1459, 1459, 1459, 1462, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1463,
+     1459, 1459, 1459, 1464,   15, 1459,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1465,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1460, 1457,
-     1457, 1457, 1457, 1457, 1457, 1464, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1461, 1457, 1462,
+       45,   45,   45,   45,   45,   45,   45,   45, 1462, 1459,
+     1459, 1459, 1459, 1459, 1459, 1466, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1463, 1459, 1464,
 
-     1457, 1457,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1465,   45, 1463,   45,   45,
+     1459, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1467,   45, 1465,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1464, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1466,   45,   45,   45, 1457,
-       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1466, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1468,   45,   45,   45, 1459,
+       45,   45, 1459,   45,   45,   45,   45,   45,   45,   45,
 
-     1465, 1457, 1463,   45,   45,   45,   45,   45,   45,   45,
+     1467, 1459, 1465,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1459,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1467,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1469,   45,   45,   45,   45,   45,
 
-       45, 1457,   45,   45, 1457,   45, 1457,   45, 1463, 1457,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
+     1459,   45,   45, 1459,   45, 1459,   45, 1465, 1459,   45,
+       45,   45,   45,   45,   45,   45,   45, 1459,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
+       45,   45,   45,   45,   45,   45, 1459,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
+       45,   45,   45,   45,   45,   45,   45, 1459, 1459, 1459,
 
-     1457, 1457, 1468,   45,   45,   45,   45,   45,   45, 1457,
-       45,   45, 1457,   45, 1463,   45,   45,   45, 1457,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
+     1470,   45,   45,   45,   45,   45,   45, 1459,   45,   45,
+     1459,   45, 1465,   45,   45,   45, 1459,   45,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
+     1459,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1457,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1457,   45, 1457,
+       45,   45, 1459,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1459,   45, 1459,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45, 1457, 1457,
-     1457,   45, 1457,   45,   45, 1457, 1469,   45,   45, 1457,
-     1457,   45, 1457,   45, 1457,   45,   45,   45, 1457,   45,
+       45,   45,   45,   45,   45, 1459, 1459, 1459,   45, 1459,
+       45,   45, 1459, 1471,   45,   45, 1459, 1459,   45, 1459,
+       45, 1459,   45,   45,   45, 1459,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
-       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1459,   45,   45,   45,
+       45,   45,   45,   45, 1459,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1457,   45,   45, 1457,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
+     1459,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1459,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1457,   45,   45,   45,   45,   45,   45, 1457, 1457,
+       45,   45,   45,   45,   45,   45,   45,   45, 1459,   45,
+       45,   45,   45,   45,   45, 1459, 1459,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
-       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
-       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1459,   45,   45,   45,   45,   45,
+       45, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
+     1459,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-       45, 1457,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
+       45,   45, 1459,   45,   45,   45,   45,   45, 1459,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457, 1457,   45,   45,   45,
-       45, 1457, 1457,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1459,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1459, 1459,   45,   45,   45,   45, 1459,
+     1459,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
-     1457,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1457, 1457,   45,   45,   45, 1457,   45,   45,
-       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1457,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
+     1459,   45,   45,   45,   45,   45,   45, 1459,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1457,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1459,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1459,   45,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-     1457,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1459, 1459,   45,   45,   45, 1459,   45,   45,   45, 1459,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45, 1457,
-       45, 1457, 1457,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45, 1459,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1457, 1457,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1457, 1457,   45, 1457,   45, 1457,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45, 1457,
-       45,   45,   45,   45, 1457, 1457,   45, 1457,   45,   45,
+       45, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45, 1459,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1457,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1457,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-
-       45, 1457, 1457,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-       45,   45, 1457, 1457,   45, 1457, 1457,   45, 1457,   45,
-       45,   45,   45,   45, 1457,   45, 1457,   45,   45,   45,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45, 1457,   45, 1457,
-     1457,   45, 1457,   45,   45,   45,   45, 1457,   45,   45,
-       45,   45,   45,   45,   45, 1457, 1457,   45,   45, 1457,
-       45,   45,   45,   45,   45, 1457,   45,   45,   45,   45,
-     1457,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
-
-       45,   45, 1457,   45, 1457,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1459,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1459,   45, 1459, 1459,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1457,   45,   45,   45,
-       45,   45,   45,   45, 1457,   45, 1457,   45,   45,   45,
-       45, 1457, 1457,   45,   45, 1457, 1457,   45, 1457,   45,
-       45,   45,   45,   45,   45,   45,   45,   45, 1457,   45,
-       45, 1457, 1457,   45,   45,   45,   45, 1457,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1457,   45,   45,   45, 1457,   45, 1457,   45,   45,
-       45,   45,   45, 1457,   45,   45,   45, 1457,   45,   45,
+       45, 1459, 1459,   45,   45,   45,   45,   45,   45,   45,
 
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1459,
+     1459,   45, 1459,   45, 1459,   45,   45,   45,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45, 1459,   45,   45,
+       45,   45, 1459, 1459,   45, 1459,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45, 1459,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45, 1459,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1459,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45, 1459,
+
+     1459,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1459,   45,   45,   45,   45,   45,   45, 1459,
+     1459,   45, 1459, 1459,   45, 1459,   45,   45,   45,   45,
+       45, 1459,   45, 1459,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45, 1459,   45, 1459, 1459,   45,
+     1459,   45,   45,   45,   45, 1459,   45,   45,   45,   45,
+       45,   45, 1459, 1459,   45,   45, 1459,   45,   45,   45,
+       45,   45, 1459,   45,   45,   45,   45, 1459,   45, 1459,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1459,
+
+       45,   45, 1459,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45, 1457,   45,   45, 1457,   45, 1457,   45, 1457,   45,
-       45,   45,   45, 1457,   45,   45,   45,   45,   45,   45,
-     1457,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1457,   45,   45,   45,   45,   45,   45,   45,
-       45,   45, 1457, 1457,   45,   45,   45,   45,   45, 1457,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45, 1457,   45,   45, 1457, 1457,   45,
-       45,   45,   45,   45,   45, 1457,   45, 1457,   45,   45,
-     1457,   45,   45, 1457,   45,   45, 1457,   45, 1457,   45,
+       45, 1459,   45, 1459,   45,   45,   45,   45, 1459, 1459,
+       45,   45, 1459, 1459,   45,   45, 1459,   45,   45,   45,
+       45,   45,   45,   45,   45,   45, 1459,   45,   45, 1459,
+     1459,   45,   45,   45,   45, 1459,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45, 1459,
+       45,   45,   45, 1459,   45,   45, 1459,   45,   45,   45,
+       45,   45, 1459,   45,   45,   45, 1459,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+     1459,   45,   45, 1459,   45, 1459,   45, 1459,   45,   45,
+       45,   45,   45, 1459,   45,   45,   45,   45,   45,   45,
+     1459,   45, 1459,   45,   45,   45,   45,   45,   45,   45,
+       45,   45, 1459,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45, 1459, 1459,   45,   45,   45,   45,   45,
+     1459,   45,   45,   45,   45,   45,   45,   45,   45, 1459,
+       45,   45,   45,   45,   45,   45, 1459,   45,   45, 1459,
+     1459,   45,   45,   45,   45,   45,   45, 1459,   45, 1459,
+       45,   45, 1459,   45,   45, 1459,   45,   45, 1459,   45,
+
+     1459,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45, 1457,   45, 1457, 1457,
-       45,   45,   45,   45,   45,   45, 1457, 1457, 1457,   45,
-       45,   45,   45, 1457,   45,   45, 1457,   45,   45,   45,
-       45,   45, 1457,   45,   45, 1457,    0, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457
+       45,   45,   45,   45,   45,   45,   45,   45, 1459,   45,
+     1459, 1459,   45,   45,   45,   45,   45,   45, 1459, 1459,
+     1459,   45,   45,   45,   45, 1459,   45,   45, 1459,   45,
+       45,   45,   45,   45, 1459,   45,   45, 1459,    0, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459
     } ;
 
-static const flex_int16_t yy_nxt[1895] =
+static const flex_int16_t yy_nxt[1898] =
     {   0,
-     1457,   13,   14,   13, 1457,   15,   16, 1457,   17,   18,
-       19,   20,   21,   22,   22,   22,   23,   24,   85,  361,
-       37,   14,   37,   86,   25,   26,   38, 1457, 1457,   27,
+     1459,   13,   14,   13, 1459,   15,   16, 1459,   17,   18,
+       19,   20,   21,   22,   22,   22,   23,   24,   85,  360,
+       37,   14,   37,   86,   25,   26,   38, 1459, 1459,   27,
        37,   14,   37,   42,   28,   42,   38,   91,   92,   29,
       115,   30,   13,   14,   13,   90,   91,   25,   31,   92,
-       13,   14,   13,   13,   14,   13,   32,   40,  824,   13,
-       14,   13,   33,   40,  115,   91,   92,  362,   90,   34,
+       13,   14,   13,   13,   14,   13,   32,   40, 1459,   13,
+       14,   13,   33,   40,  115,   91,   92,  361,   90,   34,
        35,   13,   14,   13,   94,   15,   16,   95,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   13,   14,
        13,  108,   39,   90,   25,   26,   13,   14,   13,   27,
 
        39,   84,   84,   84,   28,   42,   41,   42,   42,   29,
        42,   30,   82,  107,   41,  111,   93,   25,   31,  108,
-      130,  137,   88,  825,   88,  826,   32,   89,   89,   89,
-      131,  138,   33,  139,  378,   82,  107,  379,  111,   34,
+      130,  137,   88,  824,   88,  825,   32,   89,   89,   89,
+      131,  138,   33,  139,  376,   82,  107,  377,  111,   34,
        35,   44,   44,   44,   45,   45,   46,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   47,   45,   48,   49,   50,   51,   45,   52,   53,
@@ -1266,199 +1268,199 @@ static const flex_int16_t yy_nxt[1895] =
        45,   45,   80,  103,   81,   81,   81,   80,  109,   83,
        83,   83,  101,  114,   80,   82,   83,   83,   83,  121,
        82,  145,  122,  112,  123,  146,  124,   82,  162,  103,
-      827,  103,  163,  113,  134,  223,  114,  110,   82,  135,
-      192,  107,  136,   82,  193,  147,  112,  102,  224,  507,
-       82,   45,  508,   45,   45,   45,   45,  119,   45,   45,
+      826,  103,  163,  113,  134,  223,  114,  110,   82,  135,
+      192,  107,  136,   82,  193,  147,  112,  102,  224,  504,
+       82,   45,  505,   45,   45,   45,   45,  119,   45,   45,
        45,  113,  117,  120,  107,   45,   45,  192,   45,   45,
        89,   89,   89,  194,   45,  132,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   89,   89,
-       89,   45,  125,  262,  111,   45,  126,  263,  180,  127,
+       89,   45,  125,  428,  111,   45,  126,  429,  180,  127,
       128,  141,  142,   45,  178,  143,  151,   45,  180,   45,
       118,  144,  129,  148,  152,  149,  153,  150,  112,  114,
-      156,  154,  155,  157,  158,  164,  180,  430,  113,  165,
-      178,  431,  166,  305,  159,  179,  183,  160,  393,  167,
-      168,  170,  114,  171,  101,  169,  828,  172,   84,   84,
+      156,  154,  155,  157,  158,  164,  180,  480,  113,  165,
+      178,  481,  166,  304,  159,  179,  183,  160,  391,  167,
+      168,  170,  114,  171,  101,  169,  827,  172,   84,   84,
        84,   80,  174,   81,   81,   81,  113,  175,  187,   82,
        88,  179,   88,  173,   82,   89,   89,   89,   80,  178,
        83,   83,   83,   84,   84,   84,  179,  191,  100,  102,
 
       196,   82,   82,  197,   82,  100,  187,   82,  198,  200,
-      208,  199,  187,  290,  242,  181,  214,  215,  225,  209,
+      208,  199,  187,  289,  242,  181,  214,  215,  225,  209,
       210,  233,  182,  191,   82,  197,  216,   82,  196,  204,
-      197,  829,  200,  100,  226,  243,  198,  100,  199,  290,
+      197,  828,  200,  100,  226,  243,  198,  100,  199,  289,
       205,  100,  220,  228,  221,  196,  229,  254,  255,  100,
-      230,  265,  282,  100,  289,  100,  186,  203,  203,  203,
-      291,  222,  830,  234,  203,  203,  203,  203,  203,  203,
-      289,  258,  275,  248,  259,  260,  276,  290,  291,  300,
-      277,  297,  289,  291,  266,  267,  268,  203,  203,  203,
-      203,  203,  203,  301,  304,  269,  306,  270,  292,  271,
-
-      272,  294,  273,  293,  297,  308,  297,  300,  316,  423,
-      404,  459,  460,  304,  400,  400,  317,  304,  350,  306,
-      301,  412,  318,  404,  831,  409,  424,  482,  412,  311,
-      478,  483,  308,  309,  309,  309,  357,  400,  401,  404,
-      309,  309,  309,  309,  309,  309,  406,  407,  409,  412,
-      466,  518,  416,  491,  496,  408,  468,  492,  497,  760,
-      467,  518,  761,  309,  309,  309,  309,  309,  309,  351,
-      624,  444,  352,  415,  415,  415,  445,  658,  659,  518,
-      415,  415,  415,  415,  415,  415,  479,  513,  526,  528,
-      527,  549,  514,  599,  620,  625,  550,  624,  600,  626,
-
-      707,  718,  719,  415,  415,  415,  415,  415,  415,  674,
-      708,  683,  720,  717,  795,  526,  684,  527,  723,  724,
-      802,  796,  446,  625,  718,  832,  803,  447,   45,   45,
-       45,  833,  834,  835,  836,   45,   45,   45,   45,   45,
-       45,  717,  813,  797,  837,  838,  675,  839,  841,  842,
-      798,  843,  840,  685,  799,  844,  845,  846,   45,   45,
-       45,   45,   45,   45,  847,  848,  849,  850,  851,  852,
-      813,  853,  854,  855,  856,  857,  859,  860,  861,  858,
-      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,  889,  890,  891,  892,
-      893,  894,  895,  896,  897,  898,  899,  888,  900,  901,
-      902,  903,  904,  905,  906,  907,  908,  909,  910,  911,
-      912,  913,  914,  915,  916,  917,  918,  919,  920,  921,
-      922,  923,  924,  902,  925,  926,  901,  927,  928,  929,
-      930,  931,  934,  935,  936,  937,  932,  938,  939,  940,
-      941,  942,  943,  944,  945,  946,  947,  948,  949,  951,
-      952,  953,  954,  955,  956,  957,  958,  959,  960,  950,
-      961,  962,  963,  964,  965,  966,  967,  968,  969,  970,
-      971,  972,  973,  974,  975,  976,  977,  978,  979,  980,
-
-      981,  982,  983,  984,  985,  987,  986,  933,  988,  989,
-      990,  991,  992,  993,  994,  995,  996,  997,  998,  999,
-     1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
-     1010, 1011,  985,  986, 1012, 1013, 1014, 1015, 1017, 1019,
-     1020, 1021, 1016, 1022, 1023, 1024, 1025, 1026, 1027, 1028,
-     1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
-     1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048,
-     1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058,
-     1018, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
-     1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,
-
-     1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087,
-     1065, 1088, 1089, 1090, 1091, 1092, 1066, 1093, 1094, 1095,
-     1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105,
-     1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115,
-     1116, 1117, 1118, 1119, 1120, 1122, 1123, 1124, 1125, 1126,
-     1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,
-     1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
-     1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
-     1158, 1159, 1160, 1161, 1162, 1134, 1163, 1164, 1165, 1167,
-     1168, 1169, 1170, 1171, 1172, 1121, 1166, 1173, 1174, 1175,
-
-     1176, 1177, 1138, 1178, 1179, 1180, 1181, 1182, 1183, 1184,
-     1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194,
-     1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204,
-     1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
-     1215, 1216, 1194, 1217, 1218, 1219, 1220, 1221, 1222, 1223,
-     1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233,
-     1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243,
-     1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253,
-     1254, 1255, 1256, 1257, 1258, 1259, 1261, 1262, 1263, 1264,
-     1265, 1266, 1267, 1240, 1268, 1269, 1270, 1271, 1272, 1273,
-
-     1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
-     1284, 1285, 1286, 1287, 1288, 1290, 1291, 1292, 1293, 1289,
-     1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303,
-     1304, 1305, 1306, 1307, 1308, 1309, 1310, 1283, 1311, 1312,
-     1313, 1260, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321,
-     1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
-     1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
-     1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351,
-     1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361,
-     1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371,
-
-     1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381,
-     1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391,
-     1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401,
-     1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411,
-     1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421,
-     1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431,
-     1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441,
-     1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451,
-     1452, 1453, 1454, 1455, 1456,   12,   12,   12,   12,   12,
-       36,   36,   36,   36,   36,   79,  296,   79,   79,   79,
-
-       98,  403,   98,  517,   98,  100,  100,  100,  100,  100,
-      116,  116,  116,  116,  116,  177,  100,  177,  177,  177,
-      201,  201,  201,  823,  822,  821,  820,  819,  818,  817,
-      816,  815,  814,  812,  811,  810,  809,  808,  807,  806,
-      805,  804,  801,  800,  794,  793,  792,  791,  790,  789,
-      788,  787,  786,  785,  784,  783,  782,  781,  780,  779,
-      778,  777,  776,  775,  774,  773,  772,  771,  770,  769,
-      768,  767,  766,  765,  764,  763,  762,  759,  758,  757,
-      756,  755,  754,  753,  752,  751,  750,  749,  748,  747,
-      746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
-
-      736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
-      726,  725,  722,  721,  716,  715,  714,  713,  712,  711,
-      710,  709,  706,  705,  704,  703,  702,  701,  700,  699,
-      698,  697,  696,  695,  694,  693,  692,  691,  690,  689,
-      688,  687,  686,  682,  681,  680,  679,  678,  677,  676,
-      673,  672,  671,  670,  669,  668,  667,  666,  665,  664,
-      663,  662,  661,  660,  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,  623,  622,  621,  620,  619,
-
-      618,  617,  616,  615,  614,  613,  612,  611,  610,  609,
-      608,  607,  606,  605,  604,  603,  602,  601,  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,  560,  559,  558,  557,
-      556,  555,  554,  553,  552,  551,  548,  547,  546,  545,
-      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
-      534,  533,  532,  531,  530,  529,  525,  524,  523,  522,
-      521,  520,  519,  516,  515,  512,  511,  510,  509,  506,
-
-      505,  504,  503,  502,  501,  500,  499,  498,  495,  494,
-      493,  490,  489,  488,  487,  486,  485,  484,  481,  480,
-      477,  476,  475,  474,  473,  472,  471,  470,  469,  465,
-      464,  463,  462,  461,  458,  457,  456,  455,  454,  453,
-      452,  451,  450,  449,  448,  443,  442,  441,  440,  439,
-      438,  437,  436,  435,  434,  433,  432,  429,  428,  427,
-      426,  425,  422,  421,  420,  419,  418,  417,  414,  413,
-      411,  410,  405,  402,  399,  398,  397,  396,  395,  394,
-      392,  391,  390,  389,  388,  387,  386,  385,  384,  383,
-      382,  381,  380,  377,  376,  375,  374,  373,  372,  371,
-
-      370,  369,  368,  367,  366,  365,  364,  363,  360,  359,
-      358,  356,  355,  354,  353,  349,  348,  347,  346,  345,
-      344,  343,  342,  341,  340,  339,  338,  337,  336,  335,
-      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
-      324,  323,  322,  321,  320,  319,  315,  314,  313,  312,
-      310,  202,  307,  305,  303,  302,  299,  298,  295,  288,
-      287,  286,  285,  284,  283,  281,  280,  279,  278,  274,
-      264,  261,  257,  256,  253,  252,  251,  250,  249,  247,
-      246,  245,  244,  241,  240,  239,  238,  237,  236,  235,
-      232,  231,  227,  219,  218,  217,  213,  212,  211,  207,
-
-      206,  202,  195,  190,  189,  188,  185,  184,  176,  161,
-      140,  133,  106,  105,  104,   43,   99,   97,   96,   87,
-       43, 1457,   11, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457
+      230,  264,  281,  100,  288,  100,  186,  203,  203,  203,
+      290,  222,  829,  234,  203,  203,  203,  203,  203,  203,
+      288,  258,  274,  248,  259,  260,  275,  289,  290,  299,
+      276,  296,  288,  290,  265,  266,  267,  203,  203,  203,
+      203,  203,  203,  300,  303,  268,  305,  269,  291,  270,
+
+      271,  293,  272,  292,  296,  307,  296,  299,  315,  421,
+      402,  457,  458,  303,  398,  398,  316,  303,  349,  305,
+      300,  410,  317,  402,  672,  407,  422,  488,  410,  310,
+      476,  489,  307,  308,  308,  308,  356,  398,  399,  402,
+      308,  308,  308,  308,  308,  308,  404,  405,  407,  410,
+      464,  515,  414,  493,  510,  406,  466,  494,  830,  511,
+      465,  673,  515,  308,  308,  308,  308,  308,  308,  350,
+      622,  442,  351,  413,  413,  413,  443,  831,  537,  515,
+      413,  413,  413,  413,  413,  413,  477,  523,  547,  524,
+      525,  538,  596,  548,  621,  617,  714,  597,  622,  704,
+
+      623,  656,  657,  413,  413,  413,  413,  413,  413,  705,
+      681,  715,  792,  716,  523,  682,  524,  720,  721,  793,
+      799,  621,  444,  717,  714,  832,  800,  445,   45,   45,
+       45,  833,  834,  835,  715,   45,   45,   45,   45,   45,
+       45,  758,  794,  810,  759,  836,  837,  839,  840,  795,
+      841,  838,  683,  796,  842,  843,  844,  845,   45,   45,
+       45,   45,   45,   45,  846,  847,  848,  849,  850,  851,
+      852,  810,  853,  854,  855,  857,  858,  859,  856,  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,  886,  887,  888,  889,  890,  891,
+      892,  893,  894,  895,  896,  885,  897,  898,  899,  900,
+      901,  902,  903,  904,  905,  906,  907,  908,  909,  910,
+      911,  912,  913,  914,  915,  916,  917,  918,  919,  920,
+      921,  899,  922,  923,  898,  924,  925,  926,  927,  928,
+      929,  932,  933,  934,  935,  930,  936,  937,  938,  939,
+      940,  941,  942,  943,  944,  945,  946,  947,  949,  950,
+      951,  952,  953,  954,  955,  956,  957,  958,  948,  959,
+      960,  961,  962,  963,  964,  965,  966,  967,  968,  969,
+      970,  971,  972,  973,  974,  975,  976,  977,  978,  979,
+
+      980,  981,  982,  984,  983,  985,  931,  986,  987,  988,
+      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
+      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
+      982,  983, 1009, 1010, 1011, 1012, 1013, 1015, 1017, 1018,
+     1019, 1014, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
+     1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037,
+     1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047,
+     1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1016,
+     1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066,
+     1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076,
+
+     1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1062, 1085,
+     1086, 1087, 1088, 1089, 1063, 1090, 1091, 1092, 1093, 1094,
+     1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104,
+     1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114,
+     1115, 1116, 1117, 1119, 1120, 1121, 1122, 1123, 1124, 1125,
+     1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1136,
+     1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146,
+     1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156,
+     1157, 1158, 1159, 1131, 1160, 1161, 1162, 1163, 1165, 1166,
+     1167, 1168, 1169, 1118, 1170, 1164, 1171, 1172, 1173, 1174,
+
+     1135, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183,
+     1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
+     1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203,
+     1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213,
+     1191, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222,
+     1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232,
+     1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242,
+     1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252,
+     1253, 1254, 1255, 1256, 1257, 1259, 1260, 1261, 1262, 1263,
+     1264, 1237, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272,
+
+     1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282,
+     1283, 1284, 1285, 1286, 1287, 1289, 1290, 1291, 1292, 1288,
+     1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302,
+     1303, 1304, 1305, 1306, 1307, 1308, 1281, 1309, 1310, 1311,
+     1258, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320,
+     1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330,
+     1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340,
+     1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,
+     1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360,
+     1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370,
+
+     1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380,
+     1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390,
+     1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400,
+     1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410,
+     1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420,
+     1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430,
+     1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440,
+     1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450,
+     1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458,   12,   12,
+       12,   12,   12,   36,   36,   36,   36,   36,   79,  295,
+
+       79,   79,   79,   98,  401,   98,  514,   98,  100,  100,
+      100,  100,  100,  116,  116,  116,  116,  116,  177,  100,
+      177,  177,  177,  201,  201,  201,  823,  822,  821,  820,
+      819,  818,  817,  816,  815,  814,  813,  812,  811,  809,
+      808,  807,  806,  805,  804,  803,  802,  801,  798,  797,
+      791,  790,  789,  788,  787,  786,  785,  784,  783,  782,
+      781,  780,  779,  778,  777,  776,  775,  774,  773,  772,
+      771,  770,  769,  768,  767,  766,  765,  764,  763,  762,
+      761,  760,  757,  756,  755,  754,  753,  752,  751,  750,
+      749,  748,  747,  746,  745,  744,  743,  742,  741,  740,
+
+      739,  738,  737,  736,  735,  734,  733,  732,  731,  730,
+      729,  728,  727,  726,  725,  724,  723,  722,  719,  718,
+      713,  712,  711,  710,  709,  708,  707,  706,  703,  702,
+      701,  700,  699,  698,  697,  696,  695,  694,  693,  692,
+      691,  690,  689,  688,  687,  686,  685,  684,  680,  679,
+      678,  677,  676,  675,  674,  671,  670,  669,  668,  667,
+      666,  665,  664,  663,  662,  661,  660,  659,  658,  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,  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,  560,
+      559,  558,  557,  556,  555,  554,  553,  552,  551,  550,
+      549,  546,  545,  544,  543,  542,  541,  540,  539,  536,
+      535,  534,  533,  532,  531,  530,  529,  528,  527,  526,
+      522,  521,  520,  519,  518,  517,  516,  513,  512,  509,
+
+      508,  507,  506,  503,  502,  501,  500,  499,  498,  497,
+      496,  495,  492,  491,  490,  487,  486,  485,  484,  483,
+      482,  479,  478,  475,  474,  473,  472,  471,  470,  469,
+      468,  467,  463,  462,  461,  460,  459,  456,  455,  454,
+      453,  452,  451,  450,  449,  448,  447,  446,  441,  440,
+      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
+      427,  426,  425,  424,  423,  420,  419,  418,  417,  416,
+      415,  412,  411,  409,  408,  403,  400,  397,  396,  395,
+      394,  393,  392,  390,  389,  388,  387,  386,  385,  384,
+      383,  382,  381,  380,  379,  378,  375,  374,  373,  372,
+
+      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
+      359,  358,  357,  355,  354,  353,  352,  348,  347,  346,
+      345,  344,  343,  342,  341,  340,  339,  338,  337,  336,
+      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,
+      325,  324,  323,  322,  321,  320,  319,  318,  314,  313,
+      312,  311,  309,  202,  306,  304,  302,  301,  298,  297,
+      294,  287,  286,  285,  284,  283,  282,  280,  279,  278,
+      277,  273,  263,  262,  261,  257,  256,  253,  252,  251,
+      250,  249,  247,  246,  245,  244,  241,  240,  239,  238,
+      237,  236,  235,  232,  231,  227,  219,  218,  217,  213,
+
+      212,  211,  207,  206,  202,  195,  190,  189,  188,  185,
+      184,  176,  161,  140,  133,  106,  105,  104,   43,   99,
+       97,   96,   87,   43, 1459,   11, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459
 
     } ;
 
-static const flex_int16_t yy_chk[1895] =
+static const flex_int16_t yy_chk[1898] =
     {   0,
         0,    1,    1,    1,    0,    1,    1,    0,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   21,  252,
         3,    3,    3,   21,    1,    1,    3,    0,    0,    1,
         4,    4,    4,   13,    1,   13,    4,   27,   28,    1,
        57,    1,    5,    5,    5,   26,   32,    1,    1,   33,
-        6,    6,    6,    7,    7,    7,    1,    7,  730,    8,
+        6,    6,    6,    7,    7,    7,    1,    7,    0,    8,
         8,    8,    1,    8,   57,   27,   28,  252,   26,    1,
         1,    2,    2,    2,   32,    2,    2,   33,    2,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    9,    9,
@@ -1466,8 +1468,8 @@ static const flex_int16_t yy_chk[1895] =
 
         6,   20,   20,   20,    2,   37,    9,   37,   42,    2,
        42,    2,   20,   51,   10,   54,   31,    2,    2,   52,
-       62,   66,   25,  731,   25,  732,    2,   25,   25,   25,
-       62,   66,    2,   66,  268,   20,   51,  268,   54,    2,
+       62,   66,   25,  730,   25,  731,    2,   25,   25,   25,
+       62,   66,    2,   66,  267,   20,   51,  267,   54,    2,
         2,   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,
@@ -1479,20 +1481,20 @@ static const flex_int16_t yy_chk[1895] =
        15,   15,   17,   47,   17,   17,   17,   19,   53,   19,
        19,   19,   44,   56,   22,   17,   22,   22,   22,   60,
        19,   69,   60,   55,   60,   69,   60,   22,   74,   47,
-      733,   59,   74,   55,   65,  131,   56,   53,   17,   65,
-      108,   63,   65,   19,  109,   69,   55,   44,  131,  393,
-       22,   45,  393,   45,   45,   45,   45,   59,   45,   45,
+      732,   59,   74,   55,   65,  131,   56,   53,   17,   65,
+      108,   63,   65,   19,  109,   69,   55,   44,  131,  391,
+       22,   45,  391,   45,   45,   45,   45,   59,   45,   45,
        45,   55,   58,   59,   63,   45,   45,  108,   45,   58,
        88,   88,   88,  109,   45,   63,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   58,   89,   89,
-       89,   58,   61,  161,   70,   58,   61,  161,   92,   61,
+       89,   58,   61,  324,   70,   58,   61,  324,   92,   61,
        61,   68,   68,   58,   90,   68,   71,   58,   95,   58,
        58,   68,   61,   70,   71,   70,   71,   70,   76,   77,
-       72,   71,   71,   72,   72,   75,   92,  325,   76,   75,
-       90,  325,   75,  282,   72,   91,   95,   72,  282,   75,
-       75,   76,   77,   76,  100,   75,  734,   76,   80,   80,
+       72,   71,   71,   72,   72,   75,   92,  370,   76,   75,
+       90,  370,   75,  281,   72,   91,   95,   72,  281,   75,
+       75,   76,   77,   76,  100,   75,  733,   76,   80,   80,
        80,   81,   77,   81,   81,   81,   76,   77,  103,   80,
        82,   91,   82,   76,   81,   82,   82,   82,   83,   93,
        83,   83,   83,   84,   84,   84,   94,  107,  102,  100,
@@ -1500,167 +1502,167 @@ static const flex_int16_t yy_chk[1895] =
       111,   83,   80,  112,   84,  102,  103,   81,  113,  115,
       122,  114,  119,  179,  145,   93,  126,  126,  132,  122,
       122,  137,   94,  107,   83,  170,  126,   84,  111,  119,
-      112,  735,  115,  102,  132,  145,  113,  102,  114,  179,
+      112,  734,  115,  102,  132,  145,  113,  102,  114,  179,
       119,  102,  130,  134,  130,  150,  134,  156,  156,  102,
       134,  163,  170,  102,  178,  102,  102,  118,  118,  118,
-      180,  130,  736,  137,  118,  118,  118,  118,  118,  118,
+      180,  130,  735,  137,  118,  118,  118,  118,  118,  118,
       181,  159,  165,  150,  159,  159,  165,  182,  183,  191,
       165,  187,  178,  180,  163,  163,  163,  118,  118,  118,
       118,  118,  118,  192,  196,  163,  198,  163,  181,  163,
 
-      163,  183,  163,  182,  187,  200,  205,  191,  210,  318,
-      297,  350,  350,  248,  289,  292,  210,  196,  243,  198,
-      192,  304,  210,  311,  737,  300,  318,  371,  357,  205,
-      368,  371,  200,  203,  203,  203,  248,  289,  292,  297,
-      203,  203,  203,  203,  203,  203,  299,  299,  300,  304,
-      356,  404,  311,  379,  383,  299,  357,  379,  383,  665,
-      356,  416,  665,  203,  203,  203,  203,  203,  203,  243,
-      526,  338,  243,  309,  309,  309,  338,  563,  563,  404,
-      309,  309,  309,  309,  309,  309,  368,  398,  414,  416,
-      414,  440,  398,  493,  528,  527,  440,  526,  493,  528,
-
-      613,  625,  626,  309,  309,  309,  309,  309,  309,  580,
-      613,  589,  626,  624,  702,  414,  589,  414,  629,  629,
-      706,  702,  338,  527,  625,  738,  706,  338,  415,  415,
-      415,  739,  741,  742,  743,  415,  415,  415,  415,  415,
-      415,  624,  718,  703,  744,  745,  580,  746,  747,  748,
-      703,  749,  746,  589,  703,  750,  751,  752,  415,  415,
-      415,  415,  415,  415,  753,  754,  755,  758,  759,  760,
-      718,  761,  764,  765,  766,  767,  768,  769,  770,  767,
-      771,  772,  773,  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,  805,  806,  807,  808,  809,  797,  810,  812,
-      813,  814,  815,  816,  817,  818,  819,  820,  821,  822,
-      823,  824,  825,  826,  827,  829,  830,  831,  832,  833,
-      834,  835,  836,  813,  837,  838,  812,  840,  841,  842,
-      843,  844,  845,  847,  848,  849,  844,  850,  851,  852,
-      853,  854,  855,  856,  857,  858,  859,  860,  861,  862,
-      865,  866,  867,  869,  870,  871,  872,  874,  875,  861,
-      876,  877,  878,  879,  880,  881,  882,  883,  884,  885,
-      886,  887,  888,  889,  890,  892,  893,  894,  895,  896,
-
-      897,  898,  899,  900,  901,  903,  902,  844,  904,  905,
-      906,  907,  908,  909,  910,  911,  912,  913,  914,  916,
-      917,  918,  919,  920,  921,  922,  923,  924,  925,  926,
-      927,  928,  901,  902,  929,  930,  932,  933,  934,  935,
-      936,  937,  933,  938,  939,  940,  941,  942,  943,  944,
-      945,  946,  947,  948,  949,  950,  951,  952,  953,  954,
-      955,  956,  957,  959,  960,  961,  962,  963,  964,  965,
-      966,  967,  968,  969,  971,  974,  975,  976,  977,  978,
-      934,  979,  980,  981,  982,  983,  984,  985,  986,  987,
-      988,  989,  990,  991,  992,  993,  994,  997,  998,  999,
-
-     1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
-      985, 1010, 1011, 1014, 1016, 1018,  986, 1019, 1020, 1021,
-     1022, 1023, 1024, 1025, 1027, 1028, 1029, 1031, 1032, 1033,
-     1034, 1037, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046,
-     1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1056, 1057,
-     1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
-     1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078,
-     1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089,
-     1090, 1091, 1092, 1093, 1094, 1065, 1095, 1097, 1098, 1099,
-     1100, 1101, 1104, 1105, 1106, 1051, 1098, 1107, 1108, 1109,
-
-     1110, 1111, 1069, 1112, 1113, 1114, 1115, 1117, 1118, 1119,
-     1120, 1121, 1122, 1125, 1128, 1130, 1131, 1132, 1133, 1134,
-     1136, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1147,
-     1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
-     1159, 1162, 1134, 1164, 1165, 1166, 1167, 1169, 1170, 1171,
-     1172, 1173, 1174, 1175, 1178, 1179, 1181, 1182, 1183, 1184,
-     1185, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197,
-     1198, 1199, 1200, 1201, 1202, 1204, 1206, 1207, 1208, 1209,
-     1210, 1211, 1212, 1213, 1213, 1214, 1215, 1216, 1217, 1218,
-     1219, 1220, 1221, 1194, 1222, 1223, 1224, 1225, 1226, 1228,
-
-     1229, 1230, 1231, 1232, 1233, 1234, 1236, 1238, 1239, 1240,
-     1241, 1244, 1245, 1248, 1250, 1251, 1252, 1253, 1254, 1250,
-     1255, 1256, 1257, 1258, 1260, 1261, 1264, 1265, 1266, 1267,
-     1269, 1270, 1271, 1272, 1273, 1274, 1275, 1240, 1276, 1277,
-     1278, 1214, 1279, 1280, 1281, 1283, 1284, 1285, 1287, 1289,
-     1290, 1291, 1292, 1293, 1295, 1296, 1297, 1299, 1300, 1301,
-     1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311,
-     1313, 1314, 1316, 1318, 1320, 1321, 1322, 1323, 1325, 1326,
-     1327, 1328, 1329, 1330, 1332, 1334, 1335, 1336, 1337, 1338,
-     1339, 1340, 1341, 1342, 1344, 1345, 1346, 1347, 1348, 1349,
-
-     1350, 1351, 1352, 1355, 1356, 1357, 1358, 1359, 1361, 1362,
-     1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372,
-     1373, 1374, 1376, 1377, 1380, 1381, 1382, 1383, 1384, 1385,
-     1387, 1389, 1390, 1392, 1393, 1395, 1396, 1398, 1400, 1401,
-     1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411,
-     1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421,
-     1422, 1423, 1424, 1425, 1426, 1428, 1431, 1432, 1433, 1434,
-     1435, 1436, 1440, 1441, 1442, 1443, 1445, 1446, 1448, 1449,
-     1450, 1451, 1452, 1454, 1455, 1458, 1458, 1458, 1458, 1458,
-     1459, 1459, 1459, 1459, 1459, 1460, 1466, 1460, 1460, 1460,
-
-     1461, 1467, 1461, 1468, 1461, 1462, 1462, 1462, 1462, 1462,
-     1463, 1463, 1463, 1463, 1463, 1464, 1469, 1464, 1464, 1464,
-     1465, 1465, 1465,  729,  728,  727,  726,  725,  724,  723,
-      721,  720,  719,  717,  715,  714,  713,  712,  711,  710,
-      709,  708,  705,  704,  701,  700,  699,  698,  697,  696,
-      695,  694,  693,  692,  691,  690,  689,  688,  687,  686,
-      685,  684,  682,  681,  680,  679,  678,  677,  676,  675,
-      673,  672,  671,  670,  669,  668,  666,  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,  628,  627,  623,  622,  621,  618,  617,  616,
-      615,  614,  611,  610,  609,  608,  607,  606,  605,  604,
-      603,  602,  601,  600,  598,  597,  596,  595,  594,  593,
-      592,  591,  590,  588,  587,  585,  584,  583,  582,  581,
-      579,  578,  577,  575,  574,  572,  571,  570,  569,  568,
-      567,  566,  565,  564,  562,  561,  560,  559,  558,  556,
-      555,  554,  553,  552,  551,  550,  548,  547,  546,  545,
-      544,  543,  542,  541,  540,  539,  538,  537,  536,  535,
-      534,  533,  532,  531,  530,  524,  522,  519,  518,  516,
-
-      515,  514,  512,  508,  507,  506,  505,  504,  503,  502,
-      501,  500,  499,  498,  497,  496,  495,  494,  492,  491,
-      490,  489,  488,  487,  486,  485,  484,  483,  482,  481,
-      479,  477,  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,  445,  443,  442,  441,  439,  438,  437,  436,
-      435,  434,  432,  431,  430,  429,  428,  427,  425,  424,
-      423,  422,  421,  420,  418,  417,  412,  411,  409,  408,
-      407,  406,  405,  402,  399,  397,  396,  395,  394,  392,
-
-      391,  390,  389,  388,  387,  386,  385,  384,  382,  381,
-      380,  378,  377,  376,  375,  374,  373,  372,  370,  369,
-      367,  366,  365,  364,  363,  362,  361,  360,  359,  355,
-      354,  353,  352,  351,  349,  348,  347,  346,  345,  344,
-      343,  342,  341,  340,  339,  337,  336,  335,  334,  333,
-      332,  331,  330,  329,  328,  327,  326,  324,  323,  322,
-      321,  320,  317,  316,  315,  314,  313,  312,  308,  306,
-      303,  301,  298,  295,  288,  287,  286,  285,  284,  283,
-      281,  280,  279,  278,  277,  276,  275,  274,  273,  272,
-      271,  270,  269,  267,  266,  265,  264,  263,  262,  261,
-
-      260,  259,  258,  257,  256,  255,  254,  253,  251,  250,
-      249,  247,  246,  245,  244,  242,  241,  240,  239,  238,
-      237,  236,  235,  234,  232,  231,  230,  229,  228,  227,
-      226,  225,  224,  223,  222,  221,  220,  219,  218,  217,
-      216,  215,  214,  213,  212,  211,  209,  208,  207,  206,
-      204,  201,  199,  197,  195,  194,  189,  188,  184,  176,
-      175,  174,  173,  172,  171,  169,  168,  167,  166,  164,
-      162,  160,  158,  157,  155,  154,  153,  152,  151,  149,
-      148,  147,  146,  144,  143,  142,  141,  140,  139,  138,
-      136,  135,  133,  129,  128,  127,  125,  124,  123,  121,
-
-      120,  116,  110,  106,  105,  104,   98,   97,   78,   73,
-       67,   64,   50,   49,   48,   43,   41,   39,   38,   24,
-       14,   11, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457,
-     1457, 1457, 1457, 1457
+      163,  183,  163,  182,  187,  200,  205,  191,  210,  317,
+      296,  349,  349,  248,  288,  291,  210,  196,  243,  198,
+      192,  303,  210,  310,  578,  299,  317,  377,  356,  205,
+      367,  377,  200,  203,  203,  203,  248,  288,  291,  296,
+      203,  203,  203,  203,  203,  203,  298,  298,  299,  303,
+      355,  402,  310,  381,  396,  298,  356,  381,  736,  396,
+      355,  578,  414,  203,  203,  203,  203,  203,  203,  243,
+      524,  337,  243,  308,  308,  308,  337,  737,  428,  402,
+      308,  308,  308,  308,  308,  308,  367,  412,  438,  412,
+      414,  428,  490,  438,  523,  525,  621,  490,  524,  610,
+
+      525,  561,  561,  308,  308,  308,  308,  308,  308,  610,
+      587,  622,  699,  623,  412,  587,  412,  626,  626,  699,
+      703,  523,  337,  623,  621,  739,  703,  337,  413,  413,
+      413,  740,  741,  742,  622,  413,  413,  413,  413,  413,
+      413,  663,  700,  715,  663,  743,  744,  745,  746,  700,
+      747,  744,  587,  700,  748,  749,  750,  751,  413,  413,
+      413,  413,  413,  413,  752,  753,  756,  757,  758,  759,
+      762,  715,  763,  764,  765,  766,  767,  768,  765,  769,
+      770,  771,  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,
+      802,  803,  804,  805,  806,  794,  807,  809,  810,  811,
+      812,  813,  814,  815,  816,  817,  818,  819,  820,  821,
+      822,  823,  824,  825,  827,  828,  829,  830,  831,  832,
+      833,  810,  834,  835,  809,  836,  838,  839,  840,  841,
+      842,  843,  845,  846,  847,  842,  848,  849,  850,  851,
+      852,  853,  854,  855,  856,  857,  858,  859,  860,  863,
+      864,  865,  867,  868,  869,  871,  872,  873,  859,  874,
+      875,  876,  877,  878,  879,  880,  881,  882,  883,  884,
+      885,  886,  887,  889,  890,  891,  892,  893,  894,  895,
+
+      896,  897,  898,  900,  899,  901,  842,  902,  903,  904,
+      905,  906,  907,  908,  909,  910,  911,  913,  914,  915,
+      916,  917,  918,  919,  920,  921,  922,  923,  924,  925,
+      898,  899,  926,  927,  928,  930,  931,  932,  933,  934,
+      935,  931,  936,  937,  938,  939,  940,  941,  942,  943,
+      944,  945,  946,  947,  948,  949,  950,  951,  952,  953,
+      954,  956,  957,  958,  959,  960,  961,  962,  963,  964,
+      965,  966,  968,  971,  972,  973,  974,  975,  976,  932,
+      977,  978,  979,  980,  981,  982,  983,  984,  985,  986,
+      987,  988,  989,  990,  991,  994,  995,  996,  997,  998,
+
+      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006,  982, 1007,
+     1008, 1009, 1012, 1014,  983, 1016, 1017, 1018, 1019, 1020,
+     1021, 1022, 1023, 1025, 1026, 1027, 1029, 1030, 1031, 1032,
+     1035, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
+     1046, 1047, 1048, 1049, 1050, 1051, 1053, 1054, 1055, 1056,
+     1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1066, 1067,
+     1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1078,
+     1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
+     1089, 1090, 1091, 1062, 1092, 1093, 1095, 1096, 1097, 1098,
+     1099, 1102, 1103, 1048, 1104, 1096, 1105, 1106, 1107, 1108,
+
+     1066, 1109, 1110, 1111, 1112, 1114, 1115, 1116, 1117, 1118,
+     1119, 1122, 1125, 1127, 1128, 1129, 1130, 1131, 1133, 1135,
+     1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1145, 1146,
+     1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1157,
+     1131, 1160, 1162, 1163, 1164, 1165, 1167, 1168, 1169, 1170,
+     1171, 1172, 1175, 1176, 1178, 1179, 1180, 1181, 1182, 1184,
+     1185, 1186, 1187, 1189, 1191, 1192, 1193, 1194, 1195, 1196,
+     1197, 1198, 1199, 1201, 1202, 1204, 1205, 1206, 1207, 1208,
+     1209, 1210, 1211, 1211, 1212, 1213, 1214, 1215, 1216, 1217,
+     1218, 1191, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
+
+     1227, 1228, 1229, 1230, 1231, 1233, 1235, 1236, 1237, 1238,
+     1241, 1242, 1245, 1246, 1248, 1249, 1250, 1251, 1252, 1248,
+     1253, 1254, 1255, 1256, 1258, 1259, 1262, 1263, 1264, 1265,
+     1267, 1268, 1269, 1270, 1271, 1272, 1237, 1273, 1274, 1275,
+     1212, 1276, 1277, 1278, 1279, 1281, 1282, 1283, 1285, 1286,
+     1288, 1289, 1290, 1291, 1292, 1294, 1295, 1296, 1298, 1299,
+     1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
+     1310, 1312, 1313, 1315, 1317, 1319, 1320, 1321, 1322, 1323,
+     1325, 1326, 1327, 1328, 1329, 1330, 1332, 1334, 1335, 1336,
+     1337, 1338, 1339, 1340, 1341, 1342, 1344, 1345, 1346, 1347,
+
+     1348, 1349, 1350, 1351, 1352, 1353, 1356, 1357, 1358, 1359,
+     1360, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1371,
+     1372, 1373, 1374, 1375, 1376, 1378, 1379, 1382, 1383, 1384,
+     1385, 1386, 1387, 1389, 1391, 1392, 1394, 1395, 1397, 1398,
+     1400, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410,
+     1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420,
+     1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1430, 1433,
+     1434, 1435, 1436, 1437, 1438, 1442, 1443, 1444, 1445, 1447,
+     1448, 1450, 1451, 1452, 1453, 1454, 1456, 1457, 1460, 1460,
+     1460, 1460, 1460, 1461, 1461, 1461, 1461, 1461, 1462, 1468,
+
+     1462, 1462, 1462, 1463, 1469, 1463, 1470, 1463, 1464, 1464,
+     1464, 1464, 1464, 1465, 1465, 1465, 1465, 1465, 1466, 1471,
+     1466, 1466, 1466, 1467, 1467, 1467,  729,  728,  727,  726,
+      725,  724,  723,  722,  721,  720,  718,  717,  716,  714,
+      712,  711,  710,  709,  708,  707,  706,  705,  702,  701,
+      698,  697,  696,  695,  694,  693,  692,  691,  690,  689,
+      688,  687,  686,  685,  684,  683,  682,  680,  679,  678,
+      677,  676,  675,  674,  673,  671,  670,  669,  668,  667,
+      666,  664,  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,  625,  624,
+      620,  619,  618,  615,  614,  613,  612,  611,  608,  607,
+      606,  605,  604,  603,  602,  601,  600,  599,  598,  597,
+      595,  594,  593,  592,  591,  590,  589,  588,  586,  585,
+      583,  582,  581,  580,  579,  577,  576,  575,  573,  572,
+      570,  569,  568,  567,  566,  565,  564,  563,  562,  560,
+      559,  558,  557,  556,  554,  553,  552,  551,  550,  549,
+      548,  546,  545,  544,  543,  542,  541,  540,  539,  538,
+      537,  536,  535,  534,  533,  532,  531,  530,  529,  528,
+
+      527,  521,  519,  516,  515,  513,  512,  511,  509,  505,
+      504,  503,  502,  501,  500,  499,  498,  497,  496,  495,
+      494,  493,  492,  491,  489,  488,  487,  486,  485,  484,
+      483,  482,  481,  480,  479,  477,  475,  474,  473,  472,
+      471,  470,  469,  468,  467,  466,  465,  464,  462,  461,
+      460,  459,  458,  457,  456,  455,  454,  453,  452,  451,
+      450,  449,  448,  447,  446,  445,  444,  443,  441,  440,
+      439,  437,  436,  435,  434,  433,  432,  430,  429,  427,
+      426,  425,  423,  422,  421,  420,  419,  418,  416,  415,
+      410,  409,  407,  406,  405,  404,  403,  400,  397,  395,
+
+      394,  393,  392,  390,  389,  388,  387,  386,  385,  384,
+      383,  382,  380,  379,  378,  376,  375,  374,  373,  372,
+      371,  369,  368,  366,  365,  364,  363,  362,  361,  360,
+      359,  358,  354,  353,  352,  351,  350,  348,  347,  346,
+      345,  344,  343,  342,  341,  340,  339,  338,  336,  335,
+      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
+      323,  322,  321,  320,  319,  316,  315,  314,  313,  312,
+      311,  307,  305,  302,  300,  297,  294,  287,  286,  285,
+      284,  283,  282,  280,  279,  278,  277,  276,  275,  274,
+      273,  272,  271,  270,  269,  268,  266,  265,  264,  263,
+
+      262,  261,  260,  259,  258,  257,  256,  255,  254,  253,
+      251,  250,  249,  247,  246,  245,  244,  242,  241,  240,
+      239,  238,  237,  236,  235,  234,  232,  231,  230,  229,
+      228,  227,  226,  225,  224,  223,  222,  221,  220,  219,
+      218,  217,  216,  215,  214,  213,  212,  211,  209,  208,
+      207,  206,  204,  201,  199,  197,  195,  194,  189,  188,
+      184,  176,  175,  174,  173,  172,  171,  169,  168,  167,
+      166,  164,  162,  161,  160,  158,  157,  155,  154,  153,
+      152,  151,  149,  148,  147,  146,  144,  143,  142,  141,
+      140,  139,  138,  136,  135,  133,  129,  128,  127,  125,
+
+      124,  123,  121,  120,  116,  110,  106,  105,  104,   98,
+       97,   78,   73,   67,   64,   50,   49,   48,   43,   41,
+       39,   38,   24,   14,   11, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459, 1459,
+     1459, 1459, 1459, 1459, 1459, 1459, 1459
 
     } ;
 
@@ -1743,7 +1745,7 @@ using namespace isc::dhcp;
 
 /* To avoid the call to exit... oops! */
 #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg)
-#line 1747 "dhcp6_lexer.cc"
+#line 1749 "dhcp6_lexer.cc"
 /* noyywrap disables automatic rewinding for the next file to parse. Since we
    always parse only a single string, there's no need to do any wraps. And
    using yywrap requires linking with -lfl, which provides the default yywrap
@@ -1769,8 +1771,8 @@ using namespace isc::dhcp;
    by moving it ahead by yyleng bytes. yyleng specifies the length of the
    currently matched token. */
 #define YY_USER_ACTION  driver.loc_.columns(yyleng);
-#line 1773 "dhcp6_lexer.cc"
-#line 1774 "dhcp6_lexer.cc"
+#line 1775 "dhcp6_lexer.cc"
+#line 1776 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2100,7 +2102,7 @@ YY_DECL
     }
 
 
-#line 2104 "dhcp6_lexer.cc"
+#line 2106 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2129,13 +2131,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 >= 1458 )
+                               if ( yy_current_state >= 1460 )
                                        yy_c = yy_meta[yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 1457 );
+               while ( yy_current_state != 1459 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -4109,9 +4111,9 @@ YY_RULE_SETUP
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
-        return isc::dhcp::Dhcp6Parser::make_QUEUE_CONTROL(driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_DHCP_QUEUE_CONTROL(driver.loc_);
     default:
-        return isc::dhcp::Dhcp6Parser::make_STRING("queue-control", driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_STRING("dhcp-queue-control", driver.loc_);
     }
 }
        YY_BREAK
@@ -4423,7 +4425,7 @@ YY_RULE_SETUP
 #line 1839 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 4427 "dhcp6_lexer.cc"
+#line 4429 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4742,7 +4744,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 >= 1458 )
+                       if ( yy_current_state >= 1460 )
                                yy_c = yy_meta[yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -4775,11 +4777,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 >= 1458 )
+               if ( yy_current_state >= 1460 )
                        yy_c = yy_meta[yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-       yy_is_jam = (yy_current_state == 1457);
+       yy_is_jam = (yy_current_state == 1459);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
index 48a19b4c49333a607450370112f5162955b7b1f3..ddf88939db4b71dfb68c0663eb43ef74cf7e2c1b 100644 (file)
@@ -1597,12 +1597,12 @@ ControlCharacterFill            [^"\\]|\\{JSONEscapeSequence}
     }
 }
 
-\"queue-control\" {
+\"dhcp-queue-control\" {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
-        return isc::dhcp::Dhcp6Parser::make_QUEUE_CONTROL(driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_DHCP_QUEUE_CONTROL(driver.loc_);
     default:
-        return isc::dhcp::Dhcp6Parser::make_STRING("queue-control", driver.loc_);
+        return isc::dhcp::Dhcp6Parser::make_STRING("dhcp-queue-control", driver.loc_);
     }
 }
 
index 8740789766f687e1460a80dd67512fc2b63a816d..4a0fde67e2cb34f91e62cfbbd483473dcdd129ea 100644 (file)
@@ -3050,7 +3050,7 @@ namespace isc { namespace dhcp {
 #line 1930 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr qc = yystack_[0].value.as< ElementPtr > ();
-    ctx.stack_.back()->set("queue-control", qc);
+    ctx.stack_.back()->set("dhcp-queue-control", qc);
 
     if (!qc->contains("queue-type")) {
         std::stringstream msg;
@@ -4793,7 +4793,7 @@ namespace isc { namespace dhcp {
   "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"",
   "\"LLT\"", "\"EN\"", "\"LL\"", "\"identifier\"", "\"htype\"", "\"time\"",
   "\"enterprise-id\"", "\"dhcp4o6-port\"", "\"control-socket\"",
-  "\"socket-type\"", "\"socket-name\"", "\"queue-control\"",
+  "\"socket-type\"", "\"socket-name\"", "\"dhcp-queue-control\"",
   "\"dhcp-ddns\"", "\"enable-updates\"", "\"qualifying-suffix\"",
   "\"server-ip\"", "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
   "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
@@ -4883,8 +4883,8 @@ namespace isc { namespace dhcp {
   "server_id_type", "$@98", "duid_type", "htype", "identifier", "$@99",
   "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@100",
   "control_socket_params", "control_socket_param", "socket_type", "$@101",
-  "socket_name", "$@102", "queue_control", "$@103", "dhcp_ddns", "$@104",
-  "sub_dhcp_ddns", "$@105", "dhcp_ddns_params", "dhcp_ddns_param",
+  "socket_name", "$@102", "dhcp_queue_control", "$@103", "dhcp_ddns",
+  "$@104", "sub_dhcp_ddns", "$@105", "dhcp_ddns_params", "dhcp_ddns_param",
   "enable_updates", "qualifying_suffix", "$@106", "server_ip", "$@107",
   "server_port", "sender_ip", "$@108", "sender_port", "max_queue_size",
   "ncr_protocol", "$@109", "ncr_protocol_value", "ncr_format", "$@110",
index f249b7f94125e5f012465f6288135401bd8d25ad..2d00d89b354e3afbc6479078a584d1d1870ec1a9 100644 (file)
@@ -462,7 +462,7 @@ namespace isc { namespace dhcp {
         TOKEN_CONTROL_SOCKET = 370,
         TOKEN_SOCKET_TYPE = 371,
         TOKEN_SOCKET_NAME = 372,
-        TOKEN_QUEUE_CONTROL = 373,
+        TOKEN_DHCP_QUEUE_CONTROL = 373,
         TOKEN_DHCP_DDNS = 374,
         TOKEN_ENABLE_UPDATES = 375,
         TOKEN_QUALIFYING_SUFFIX = 376,
@@ -1098,7 +1098,7 @@ namespace isc { namespace dhcp {
 
     static inline
     symbol_type
-    make_QUEUE_CONTROL (const location_type& l);
+    make_DHCP_QUEUE_CONTROL (const location_type& l);
 
     static inline
     symbol_type
@@ -2618,9 +2618,9 @@ namespace isc { namespace dhcp {
   }
 
   Dhcp6Parser::symbol_type
-  Dhcp6Parser::make_QUEUE_CONTROL (const location_type& l)
+  Dhcp6Parser::make_DHCP_QUEUE_CONTROL (const location_type& l)
   {
-    return symbol_type (token::TOKEN_QUEUE_CONTROL, l);
+    return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, l);
   }
 
   Dhcp6Parser::symbol_type
index c43a6306b8f27a1fb1211e501440164e350ee1e1..a16dc9568b5dd506e3c669770920374a4f44676f 100644 (file)
@@ -172,7 +172,7 @@ using namespace std;
   SOCKET_TYPE "socket-type"
   SOCKET_NAME "socket-name"
 
-  QUEUE_CONTROL "queue-control"
+  DHCP_QUEUE_CONTROL "dhcp-queue-control"
 
   DHCP_DDNS "dhcp-ddns"
   ENABLE_UPDATES "enable-updates"
@@ -457,7 +457,7 @@ global_param: preferred_lifetime
             | server_id
             | dhcp4o6_port
             | control_socket
-            | queue_control
+            | dhcp_queue_control
             | dhcp_ddns
             | user_context
             | comment
@@ -1923,13 +1923,13 @@ socket_name: SOCKET_NAME {
     ctx.leave();
 };
 
-// --- queue-control ---------------------------------------------
+// --- dhcp-queue-control ---------------------------------------------
 
-queue_control: QUEUE_CONTROL {
+dhcp_queue_control: DHCP_QUEUE_CONTROL {
     ctx.enter(ctx.NO_KEYWORD);
 } COLON map_value {
     ElementPtr qc = $4;
-    ctx.stack_.back()->set("queue-control", qc);
+    ctx.stack_.back()->set("dhcp-queue-control", qc);
 
     if (!qc->contains("queue-type")) {
         std::stringstream msg;
index 3a62f8e0ab4137f5ab24b1aa94edf3bff6cd45e0..3ff82c89bb82a3957f30a8fdb00936e8c46e951b 100644 (file)
@@ -31,7 +31,7 @@
 #include <dhcpsrv/parsers/host_reservations_list_parser.h>
 #include <dhcpsrv/parsers/ifaces_config_parser.h>
 #include <dhcpsrv/parsers/option_data_parser.h>
-#include <dhcpsrv/parsers/queue_control_parser.h>
+#include <dhcpsrv/parsers/dhcp_queue_control_parser.h>
 #include <dhcpsrv/parsers/simple_parser6.h>
 #include <dhcpsrv/parsers/shared_networks_list_parser.h>
 #include <dhcpsrv/parsers/sanity_checks_parser.h>
@@ -483,9 +483,9 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
                 continue;
             }
 
-            if (config_pair.first == "queue-control") {
-                QueueControlParser parser(AF_INET);
-                srv_config->setQueueControlInfo(parser.parse(config_pair.second));
+            if (config_pair.first == "dhcp-queue-control") {
+                DHCPQueueControlParser parser(AF_INET);
+                srv_config->setDHCPQueueControl(parser.parse(config_pair.second));
                 continue;
             }
 
index 2d35ef9d81e099e0b8d4f2fca51927308378cf9a..6323a261b6c4a190de62c85e4a64c88f06db9bc9 100644 (file)
@@ -174,8 +174,8 @@ Parser6Context::contextName()
         return ("duid-type");
     case CONTROL_SOCKET:
         return ("control-socket");
-    case QUEUE_CONTROL:
-        return ("queue-control");
+    case DHCP_QUEUE_CONTROL:
+        return ("dhcp-queue-control");
     case POOLS:
         return ("pools");
     case PD_POOLS:
index c0247177c8b42923d9415688d98896f1e94f480f..27953b9f37241d2d65ce8a015c23dc1f5a30d289 100644 (file)
@@ -271,8 +271,8 @@ public:
         /// Used while parsing Dhcp6/control-socket structures.
         CONTROL_SOCKET,
 
-        /// Used while parsing Dhcp4/queue-control structures.
-        QUEUE_CONTROL,
+        /// Used while parsing Dhcp4/dhcp-queue-control structures.
+        DHCP_QUEUE_CONTROL,
 
         /// Used while parsing Dhcp6/subnet6/pools structures.
         POOLS,
index 3e2e3e80c9c97201d2e708472dd04586708e7112..234f062b4e012a7bb180ad204c3b13a7d8a97581 100644 (file)
@@ -6915,61 +6915,86 @@ TEST_F(Dhcp6ParserTest, serverTag) {
     ASSERT_THROW(parseDHCP6(bad_tag), std::exception);
 }
 
-// Check whether it is possible to configure queue-control 
-TEST_F(Dhcp6ParserTest, queueControl) {
-    // Config without server-tag
-    string config_no_queue = "{ " + genIfaceConfig() + "," +
-        "\"subnet6\": [  ] "
-        "}";
-
-    string config_with_queue =
-        "{ " + genIfaceConfig() + ", \n" +
-        "   \"subnet6\": [  ],  \n"
-        "   \"queue-control\": { \n"
-        "       \"queue-type\": \"some-type\", \n"
-        "       \"capacity\": 75 \n"
-        "   } \n"
-        "} \n";
+// Check whether it is possible to configure packet queue
+TEST_F(Dhcp6ParserTest, dhcpQueueControl) {
+    struct Scenario {
+        std::string description_;
+        std::string json_;
+    };
 
-    string config_with_context =
-        "{ " + genIfaceConfig() + ", \n" +
-        "   \"subnet6\": [  ],  \n"
-        "   \"queue-control\": { \n"
+    std::vector<Scenario> scenarios = {
+        {
+        "no entry",
+        ""
+        },
+        {
+        "valid entry",
+        "{ \n"
+        "   \"queue-type\": \"some-type\", \n"
+        "   \"capacity\": 75 \n"
+        "} \n"
+        },
+        {
+        "valid arbitrary content",
+        "{ \n"
         "       \"queue-type\": \"some-type\", \n"
         "       \"capacity\": 90, \n"
-        "       \"user-context\": { \"comment\": \"some text\" } \n"
-        "   } \n"
-        "} \n";
+        "       \"user-context\": { \"comment\": \"some text\" },\n"
+        "       \"random-bool\" : false, \n"
+        "       \"random-int\" : 1236 \n"
+        "} \n"
+        }
+    };
 
     // Let's check the default. It should be empty.
     data::ConstElementPtr control;
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
+    control = CfgMgr::instance().getStagingCfg()->getDHCPQueueControl();
     ASSERT_FALSE(control);
 
-    // Configuration with no queue should default to an emtpy control.
-    configure(config_no_queue, CONTROL_RESULT_SUCCESS, "");
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
-    ASSERT_FALSE(control);
+    // Iterate over the incorrect scenarios and verify they
+    // fail as expected. Note, we use parseDHCP6() directly
+    // as all of the errors above are enforced by the grammar.
+    data::ConstElementPtr exp_elems;
+    for (auto scenario : scenarios) {
+        SCOPED_TRACE(scenario.description_);
+        {
+            // Clear the config
+            CfgMgr::instance().clear();
 
-    // Clear the config
-    CfgMgr::instance().clear();
+            // Construct the config JSON
+            std::stringstream os;
+            os << "{ " + genIfaceConfig();
+            if (!scenario.json_.empty()) {
 
-    // Configuration with queue should be valid.
-    configure(config_with_queue, CONTROL_RESULT_SUCCESS, "");
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
-    ASSERT_TRUE(control);
+               os << ",\n \"dhcp-queue-control\": "  <<  scenario.json_;
+            }
 
-    // Clear the config
-    CfgMgr::instance().clear();
+            os << "} \n";
+
+            // Configure the server. This should succeed.
+            configure(os.str(), CONTROL_RESULT_SUCCESS, "");
 
-    // Configuration with queue with context should be valid.
-    configure(config_with_context, CONTROL_RESULT_SUCCESS, "");
-    control = CfgMgr::instance().getStagingCfg()->getQueueControlInfo();
-    ASSERT_TRUE(control);
+            // Fetch the queue control info.
+            control = CfgMgr::instance().getStagingCfg()->getDHCPQueueControl();
+
+            // If JSON does not contain queue control,
+            // the pointer stored in staging should be empty.
+            if (scenario.json_.empty()) {
+                ASSERT_FALSE(control);
+                continue;
+            }
+
+            // Make sure the staged config is correct.
+            ASSERT_TRUE(control);
+            ASSERT_NO_THROW(exp_elems = Element::fromJSON(scenario.json_))
+                            << " cannot convert expected JSON, test is broken";
+            EXPECT_TRUE(control->equals(*exp_elems));
+        }
+    }
 }
 
-// Check whether it is possible to configure server-tag
-TEST_F(Dhcp6ParserTest, queueControlInvalid) {
+// Check that we catch invalid dhcp-queue-control content
+TEST_F(Dhcp6ParserTest, dhcpQueueControlInvalid) {
     struct Scenario {
         std::string description_;
         std::string json_;
@@ -6980,14 +7005,14 @@ TEST_F(Dhcp6ParserTest, queueControlInvalid) {
             "not a map",
             "{ " + genIfaceConfig() + ", \n" +
             "   \"subnet6\": [  ],  \n"
-            "   \"queue-control\": 75 \n"
+            "   \"dhcp-queue-control\": 75 \n"
             "} \n"
         },
         {
             "queue type missing",
             "{ " + genIfaceConfig() + ", \n" +
             "   \"subnet6\": [  ],  \n"
-            "   \"queue-control\": { \n"
+            "   \"dhcp-queue-control\": { \n"
             "       \"capacity\": 100 \n"
             "   } \n"
             "} \n"
@@ -6998,9 +7023,9 @@ TEST_F(Dhcp6ParserTest, queueControlInvalid) {
     // fail as expected. Note, we use parseDHCP6() directly
     // as all of the errors above are enforced by the grammar.
     for (auto scenario : scenarios) {
-        SCOPED_TRACE((scenario).description_);
+        SCOPED_TRACE(scenario.description_);
         {
-            EXPECT_THROW(parseDHCP6((scenario).json_), Dhcp6ParseError);
+            EXPECT_THROW(parseDHCP6(scenario.json_), Dhcp6ParseError);
         }
     }
 }
index 281bcda48355bae5cb6b8c7f0c923b2192937f2e..1b12d07fc8e2c8caf1ad4a29c2b6cf35f62f1835 100644 (file)
@@ -125,10 +125,10 @@ libkea_dhcp___include_HEADERS = \
        option_string.h \
        option_vendor.h \
        option_vendor_class.h \
-    packet_queue.h \
-    packet_queue_mgr.h \
-    packet_queue_mgr4.h \
-    packet_queue_mgr6.h \
+       packet_queue.h \
+       packet_queue_mgr.h \
+       packet_queue_mgr4.h \
+       packet_queue_mgr6.h \
        pkt.h \
        pkt4.h \
        pkt4o6.h \
index 896a034e7b1e7a1fa42bbe43b78288b3e4c7837f..a349e1d01b8052ce6258bdce97986c994c08f5d8 100644 (file)
@@ -674,7 +674,7 @@ IfaceMgr::openSockets6(const uint16_t port,
 void
 IfaceMgr::startDHCPReceiver(const uint16_t family) {
     if (receiver_thread_) {
-        isc_throw(Unexpected, "a receiver thread already exits");
+        isc_throw(InvalidOperation, "a receiver thread already exists");
     }
 
     switch (family) {
@@ -970,7 +970,7 @@ Pkt4Ptr IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
         }
     }
 
-    // add watch sockets.
+    // Add receiver thread watch and error sockets.
     FD_SET(receive_watch_.getSelectFd(), &sockets);
     if (maxfd < receive_watch_.getSelectFd()) {
         maxfd = receive_watch_.getSelectFd();
@@ -980,6 +980,12 @@ Pkt4Ptr IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
         maxfd = error_watch_.getSelectFd();
     }
 
+    // Set timeout for our next select() call.  If there are
+    // no DHCP packets to read, then we'll wait for a finite
+    // amount of time for an IO event.  Otherwise, we'll
+    // poll (timeout = 0 secs).  We need to poll, even if
+    // DHCP packets are waiting so we don't starve external
+    // sockets under heavy DHCP load.
     struct timeval select_timeout;
     if (getPacketQueue4()->empty()) {
         select_timeout.tv_sec = timeout_sec;
@@ -996,8 +1002,7 @@ Pkt4Ptr IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
 
     if ((result == 0) && getPacketQueue4()->empty()) {
         // nothing received and timeout has been reached
-        return (Pkt4Ptr()); // NULL
-
+        return (Pkt4Ptr());
     } else if (result < 0) {
         // In most cases we would like to know whether select() returned
         // an error because of a signal being received  or for some other
@@ -1013,41 +1018,43 @@ Pkt4Ptr IfaceMgr::receive4(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
         }
     }
 
-    // Check errors.
-    if (FD_ISSET(error_watch_.getSelectFd(), &sockets)) {
-        string msg = receiver_error_;
-        error_watch_.clearReady();
-        isc_throw(SocketReadError, msg);
-    }
-
-    // Let's find out which socket has the data
-    BOOST_FOREACH(SocketCallbackInfo s, callbacks_) {
-        if (!FD_ISSET(s.socket_, &sockets)) {
-            continue;
+    // We only check external sockets if select detected an event.
+    if (result > 0) {
+        // Check for receiver thread read errors.
+        if (FD_ISSET(error_watch_.getSelectFd(), &sockets)) {
+            string msg = receiver_error_;
+            error_watch_.clearReady();
+            isc_throw(SocketReadError, msg);
         }
 
-        // something received over external socket
+        // Let's find out which external socket has the data
+        BOOST_FOREACH(SocketCallbackInfo s, callbacks_) {
+            if (!FD_ISSET(s.socket_, &sockets)) {
+                continue;
+            }
 
-        // Calling the external socket's callback provides its service
-        // layer access without integrating any specific features
-        // in IfaceMgr
-        if (s.callback_) {
-            s.callback_();
-        }
+            // something received over external socket
 
-        return (Pkt4Ptr());
-    }
+            // Calling the external socket's callback provides its service
+            // layer access without integrating any specific features
+            // in IfaceMgr
+            if (s.callback_) {
+                s.callback_();
+            }
 
-    // Protected packet queue access.
-    {
-        Mutex::Locker lock(receiver_lock_);
-        Pkt4Ptr pkt = getPacketQueue4()->dequeuePacket();
-        if (!pkt) {
-            receive_watch_.clearReady();
+            return (Pkt4Ptr());
         }
+    }
 
-        return (pkt);
+    // If we're here it should only be because there are DHCP packets waiting.
+    // Protected packet queue access.
+    Mutex::Locker lock(receiver_lock_);
+    Pkt4Ptr pkt = getPacketQueue4()->dequeuePacket();
+    if (!pkt) {
+        receive_watch_.clearReady();
     }
+
+    return (pkt);
 }
 
 Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */ ) {
@@ -1073,7 +1080,7 @@ Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
         }
     }
 
-    // add watch sockets.
+    // Add receiver thread watch and error sockets.
     FD_SET(receive_watch_.getSelectFd(), &sockets);
     if (maxfd < receive_watch_.getSelectFd()) {
         maxfd = receive_watch_.getSelectFd();
@@ -1083,6 +1090,12 @@ Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
         maxfd = error_watch_.getSelectFd();
     }
 
+    // Set timeout for our next select() call.  If there are
+    // no DHCP packets to read, then we'll wait for a finite
+    // amount of time for an IO event.  Otherwise, we'll
+    // poll (timeout = 0 secs).  We need to poll, even if
+    // DHCP packets are waiting so we don't starve external
+    // sockets under heavy DHCP load.
     struct timeval select_timeout;
     if (getPacketQueue6()->empty()) {
         select_timeout.tv_sec = timeout_sec;
@@ -1099,8 +1112,7 @@ Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
 
     if ((result == 0) && getPacketQueue6()->empty()) {
         // nothing received and timeout has been reached
-        return (Pkt6Ptr()); // NULL
-
+        return (Pkt6Ptr());
     } else if (result < 0) {
         // In most cases we would like to know whether select() returned
         // an error because of a signal being received  or for some other
@@ -1116,41 +1128,43 @@ Pkt6Ptr IfaceMgr::receive6(uint32_t timeout_sec, uint32_t timeout_usec /* = 0 */
         }
     }
 
-    // Check errors.
-    if (FD_ISSET(error_watch_.getSelectFd(), &sockets)) {
-        string msg = receiver_error_;
-        error_watch_.clearReady();
-        isc_throw(SocketReadError, msg);
-    }
-
-    // Let's find out which socket has the data
-    BOOST_FOREACH(SocketCallbackInfo s, callbacks_) {
-        if (!FD_ISSET(s.socket_, &sockets)) {
-            continue;
+    // We only check external sockets if select detected an event.
+    if (result > 0) {
+        // Check for receiver thread read errors.
+        if (FD_ISSET(error_watch_.getSelectFd(), &sockets)) {
+            string msg = receiver_error_;
+            error_watch_.clearReady();
+            isc_throw(SocketReadError, msg);
         }
 
-        // something received over external socket
+        // Let's find out which external socket has the data
+        BOOST_FOREACH(SocketCallbackInfo s, callbacks_) {
+            if (!FD_ISSET(s.socket_, &sockets)) {
+                continue;
+            }
 
-        // Calling the external socket's callback provides its service
-        // layer access without integrating any specific features
-        // in IfaceMgr
-        if (s.callback_) {
-            s.callback_();
-        }
+            // something received over external socket
 
-        return (Pkt6Ptr());
-    }
+            // Calling the external socket's callback provides its service
+            // layer access without integrating any specific features
+            // in IfaceMgr
+            if (s.callback_) {
+                s.callback_();
+            }
 
-    // Protected DHCP packet queue access.
-    {
-        Mutex::Locker lock(receiver_lock_);
-        Pkt6Ptr pkt = getPacketQueue6()->dequeuePacket();
-        if (!pkt) {
-            receive_watch_.clearReady();
+            return (Pkt6Ptr());
         }
+    }
 
-        return (pkt);
+    // If we're here it should only be because there are DHCP packets waiting.
+    // Protected packet queue access.
+    Mutex::Locker lock(receiver_lock_);
+    Pkt6Ptr pkt = getPacketQueue6()->dequeuePacket();
+    if (!pkt) {
+        receive_watch_.clearReady();
     }
+
+    return (pkt);
 }
 
 void IfaceMgr::receiveDHCP4Packets() {
@@ -1194,7 +1208,7 @@ void IfaceMgr::receiveDHCP4Packets() {
         // zero out the errno to be safe.
         errno = 0;
 
-        // Note we wait until something happen.
+        // Select with null timeouts to wait indefinetly an event
         int result = select(maxfd + 1, &rd_set, 0, 0, 0);
 
         // Re-check the watch socket.
index c5648589a9dc00f6b37ef586fd10d96c4f597dbe..9a3ffdd568df0c57246c88f2fbbd4c25d857cc88 100644 (file)
@@ -1060,9 +1060,10 @@ public:
     ///
     /// @throw Unexpected if the thread already exists.
     void startDHCPReceiver(const uint16_t family);
-/// @brief Stops the DHCP packet receiver.
+
+    /// @brief Stops the DHCP packet receiver.
     ///
-    /// Stops the receiver and delete the dedicated thread.
+    /// Stops the receiver and deletes the dedicated thread.
     void stopDHCPReceiver();
 
     // don't use private, we need derived classes in tests
@@ -1222,7 +1223,6 @@ private:
     /// marks the "receive" watch socket ready. If an error occurs during
     /// the read, the "error" watch socket is marked ready.
     ///
-    /// @param iface interface
     /// @param socket_info structure holding socket information
     void receiveDHCP6Packet(const SocketInfo& socket_info);
 
index 997efeefe244a09f9e95b8f486b502959b0b7ca1..aa427aa0c13789f1f6ef6b40e53b170b78724c08 100644 (file)
@@ -51,7 +51,7 @@ public:
     /// Typically this is assigned by the factory that creates the
     /// queue.  It is the logical name used to register queue
     /// implementations.
-    PacketQueue(const std::string& queue_type)
+    explicit PacketQueue(const std::string& queue_type)
         :  queue_type_(queue_type) {}
 
     /// Virtual destructor
@@ -59,18 +59,18 @@ public:
 
     /// @brief Adds a packet to the queue
     ///
-    /// Calls @c dropPacket to determine if the packet should be queued
+    /// Calls @c shouldDropPacket to determine if the packet should be queued
     /// or dropped.  If it should be queued it is added to the end of the
-    /// specified by the "to" parameter.
+    /// queue specified by the "to" parameter.
     ///
     /// @param packet packet to enqueue
-    /// @param source socket the packet came from - this can be
+    /// @param source socket the packet came from
     /// @param to end of the queue from which to remove packet(s).
     /// Defaults to BACK.
     ///
     void enqueuePacket(PacketTypePtr packet, const SocketInfo& source,
                        const QueueEnd& to=QueueEnd::BACK) {
-        if (!dropPacket(packet, source)) {
+        if (!shouldDropPacket(packet, source)) {
             pushPacket(packet, to);
         }
     }
@@ -94,7 +94,7 @@ public:
 
     /// @brief Determines if a packet should be discarded.
     ///
-    /// This function is called at the beginning of @enqueuePacket and
+    /// This function is called at the beginning of @enqueuePacket and
     /// provides an opportunity to examine the packet and its source
     /// and decide whether it should be dropped or added to the queue.
     /// Derivations are expected to provide implementations based on
@@ -107,23 +107,26 @@ public:
     ///
     /// @return true if the packet should be dropped, false if it should be
     /// kept.
-    virtual bool dropPacket(PacketTypePtr /* packet */,
+    virtual bool shouldDropPacket(PacketTypePtr /* packet */,
                             const SocketInfo& /* source */) {
         return (false);
     }
 
-    /// Discards packets from one end of the queue.
+    /// @brief Discards packets from one end of the queue.
     ///
-    /// This function is called at the beginning of @c dequeuPacket and
+    /// This function is called at the beginning of @c dequeuePacket and
     /// provides an opportunity to examine and discard packets from
     /// the queue prior to dequeuing the next packet to be
     /// processed.  Derivations are expected to provide implementations
     /// based on their own requirements.  The default implemenation is to
-    /// to simply returns without skipping any packets.
+    /// to simply return without skipping any packets.
     ///
     /// @param from end of the queue from which packets should discarded
     /// This is passed in from @c dequeuePackets.
     ///
+    /// @param from specifies the end of the queue from which packets
+    /// should be discarded.
+    ///
     /// @return The number of packets discarded.
     virtual int eatPackets(const QueueEnd& /* from */) {
         return (0);
@@ -132,12 +135,19 @@ public:
     /// @brief Pushes a packet onto the queue
     ///
     ///  Adds a packet onto the end of queue specified.
+    ///
+    /// @param packet packet to add to the queue
+    /// @param to specifies the end of the queue to which the packet
+    /// should be added.
     virtual void pushPacket(PacketTypePtr& packet, const QueueEnd& to=QueueEnd::BACK) = 0;
 
     /// @brief Pops a packet from the queue
     ///
     /// Removes a packet from the end of the queue specified and returns it.
     ///
+    /// @param from specifies the end of the queue from which the packet
+    /// should be taken.
+    ///
     /// @return A pointer to dequeued packet, or an empty pointer
     /// if the queue is empty.
     virtual PacketTypePtr popPacket(const QueueEnd& from=QueueEnd::FRONT) = 0;
@@ -147,6 +157,8 @@ public:
     /// Returns a pointer the packet at the specified end of the
     /// queue without dequeuing it.
     ///
+    /// @param from specifies which end of the queue to examine.
+    ///
     /// @return A pointer to packet, or an empty pointer if the
     /// queue is empty.
     virtual const PacketTypePtr peek(const QueueEnd& from=QueueEnd::FRONT) const = 0;
@@ -161,7 +173,8 @@ public:
     /// @brief Discards all packets currently in the buffer.
     virtual void clear() = 0;
 
-    /// @brief Fetches operational information about the current state of the queue
+    /// @brief Fetches operational information about the current state of
+    /// the queue
     ///
     /// Creates and returns an ElementPtr containing a single entry,
     /// "queue-type".  Derivations are expected to call this method first
@@ -170,7 +183,7 @@ public:
     /// for broad latitude.
     ///
     /// @return an ElementPtr containing elements for values of interest
-    virtual data::ElementPtr getInfo() {
+    virtual data::ElementPtr getInfo() const {
        data::ElementPtr info = data::Element::createMap();
        info->set("queue-type", data::Element::create(queue_type_));
        return(info);
@@ -181,7 +194,7 @@ public:
     /// This method calls @c getInfo() and then converts that into JSON text.
     ///
     /// @return string of JSON text
-    virtual std::string getInfoStr() {
+    virtual std::string getInfoStr() const {
        data::ElementPtr info = getInfo();
        std::ostringstream os;
        info->toJSON(os);
@@ -194,7 +207,7 @@ public:
     };
 
 private:
-    /// @brief Logcial name of the this queue's implementation type.
+    /// @brief Logical name of the this queue's implementation type.
     std::string queue_type_;
 
 };
@@ -214,10 +227,13 @@ typedef boost::shared_ptr<PacketQueue<Pkt6Ptr>> PacketQueue6Ptr;
 template<typename PacketTypePtr>
 class PacketQueueRing : public PacketQueue<PacketTypePtr> {
 public:
+    /// @brief Minimum queue capacity permitted. Below five is pretty much
+    /// nonsensical.
     static const size_t MIN_RING_CAPACITY = 5;
 
     /// @brief Constructor
     ///
+    /// @param queue_type logical name of the queue type
     /// @param queue_capacity maximum number of packets the queue can hold
     PacketQueueRing(const std::string& queue_type, size_t capacity)
         : PacketQueue<PacketTypePtr>(queue_type) {
@@ -230,6 +246,10 @@ public:
     /// @brief Pushes a packet onto the queue
     ///
     ///  Adds a packet onto the end of queue specified.
+    ///
+    /// @param packet packet to add to the queue
+    /// @param to specifies the end of the queue to which the packet
+    /// should be added.
     virtual void pushPacket(PacketTypePtr& packet, const QueueEnd& to=QueueEnd::BACK) {
         if (to == QueueEnd::BACK) {
             queue_.push_back(packet);
@@ -242,6 +262,9 @@ public:
     ///
     /// Removes a packet from the end of the queue specified and returns it.
     ///
+    /// @param from specifies the end of the queue from which the packet
+    /// should be taken.
+    ///
     /// @return A pointer to dequeued packet, or an empty pointer
     /// if the queue is empty.
     virtual PacketTypePtr popPacket(const QueueEnd& from = QueueEnd::FRONT) {
@@ -267,6 +290,8 @@ public:
     /// Returns a pointer the packet at the specified end of the
     /// queue without dequeuing it.
     ///
+    /// @param from specifies which end of the queue to examine.
+    ///
     /// @return A pointer to packet, or an empty pointer if the
     /// queue is empty.
     virtual const PacketTypePtr peek(const QueueEnd& from=QueueEnd::FRONT) const {
@@ -316,7 +341,7 @@ public:
     }
 
     /// @brief Fetches pertinent information
-    virtual data::ElementPtr getInfo() {
+    virtual data::ElementPtr getInfo() const {
        data::ElementPtr info = PacketQueue<PacketTypePtr>::getInfo();
        info->set("capacity", data::Element::create(static_cast<int64_t>(getCapacity())));
        info->set("size", data::Element::create(static_cast<int64_t>(getSize())));
index 02d7d917a9daddda5c82b176046fec03ea944360..e34bf261e51a24ec328c7d505ed8bae59e433e27 100644 (file)
@@ -68,7 +68,7 @@ public:
     /// @return true if the queue type has been successfully registered, false
     /// if the type already exists.
     bool registerPacketQueueFactory(const std::string& queue_type,
-                                const Factory& factory) {
+                                    const Factory& factory) {
         // Check if this backend has been already registered.
         if (factories_.count(queue_type)) {
             return (false);
index b8d91fc865751621a173edc444591aed174a3fb6..a982195b8ed0c8b886d548937194ae25e32d11f4 100644 (file)
@@ -28,7 +28,7 @@ PacketQueueMgr4::PacketQueueMgr4() {
             return (queue);
         });
 
-    // @todo default comes from ?
+    /// @todo default comes from ? 
     data::ElementPtr parameters = data::Element::createMap();
     parameters->set("queue-type", data::Element::create("kea-ring4"));
     parameters->set("capacity", data::Element::create(static_cast<long int>(500)));
@@ -48,7 +48,7 @@ PacketQueueMgr4::create() {
 
 void
 PacketQueueMgr4::destroy() {
-    getPacketQueueMgr4Ptr().reset(new PacketQueueMgr4());
+    getPacketQueueMgr4Ptr().reset();
 }
 
 PacketQueueMgr4&
index ccbffa42cf6cfad7a5d297e6df6b092aae866c8c..77767ff162c5ad67eaf78b673a0dc6f33e18a8f6 100644 (file)
@@ -48,7 +48,7 @@ PacketQueueMgr6::create() {
 
 void
 PacketQueueMgr6::destroy() {
-    getPacketQueueMgr6Ptr().reset(new PacketQueueMgr6());
+    getPacketQueueMgr6Ptr().reset();
 }
 
 PacketQueueMgr6&
index 7914a4e3170413e3ea59acbd6c5cb039215078cc..a2ca0563fc9f148a2f24f65f2baba854ff9d8184 100644 (file)
@@ -8,6 +8,8 @@
 #define DHCP_SOCKET_INFO_H
 
 #include <asiolink/io_address.h>
+#include <cstdint>
+
 
 namespace isc {
 
index e0888e2450dc8233a3f7bf18cf3448dfbe29f677..1d72b4cbd84b20f8f15313cbc53ee047c1c6ee89 100644 (file)
@@ -19,6 +19,13 @@ using namespace isc::dhcp::test;
 
 namespace {
 
+/// @brief DHCPv4 queue with implements drop and eat logic
+///
+/// This class derives from the default DHCPv4 ring queue
+/// and provies implementations for shouldDropPacket() and
+/// eatPackets().  This permits a full exercising of the
+/// PacketQueue interface as well as the basic v4 ring queue
+/// mechanics.
 class TestQueue4 : public PacketQueueRing4 {
 public:
     /// @brief Constructor
@@ -40,7 +47,7 @@ public:
     /// @param source the socket the packet came from
     ///
     /// @return True if the packet should be dropped.
-    virtual bool dropPacket(Pkt4Ptr packet,
+    virtual bool shouldDropPacket(Pkt4Ptr packet,
                             const SocketInfo& source) {
         if (drop_enabled_) {
             return ((packet->getTransid() % 2 == 0) ||
@@ -70,10 +77,6 @@ public:
         return (eaten);
     }
 
-    virtual void useDefaults() {
-        setCapacity(411);
-    }
-
     bool drop_enabled_;
     int eat_count_;
 };
@@ -215,7 +218,7 @@ TEST(TestQueue4, enqueueDequeueTest) {
 // Verifies enqueuing operations when drop logic is enabled.
 // This accesses it's queue instance as a TestQueue4, rather than
 // a PacketQueue4Ptr, to provide access to TestQueue4 specifics.
-TEST(TestQueue4, dropPacketTest) {
+TEST(TestQueue4, shouldDropPacketTest) {
     TestQueue4 q4(100);
     EXPECT_TRUE(q4.empty());
     ASSERT_FALSE(q4.drop_enabled_);
@@ -225,12 +228,12 @@ TEST(TestQueue4, dropPacketTest) {
     SocketInfo sockOdd(isc::asiolink::IOAddress("127.0.0.1"), 777, 11);
 
     // Drop is not enabled.
-    // We should be able to enqueu a packet with even numbered values.
+    // We should be able to enqueue a packet with even numbered values.
     Pkt4Ptr pkt(new Pkt4(DHCPDISCOVER, 1002));
     ASSERT_NO_THROW(q4.enqueuePacket(pkt, sockEven));
     EXPECT_EQ(1, q4.getSize());
 
-    // We should be able to enqueu a packet with odd numbered values.
+    // We should be able to enqueue a packet with odd numbered values.
     pkt.reset(new Pkt4(DHCPDISCOVER, 1003));
     ASSERT_NO_THROW(q4.enqueuePacket(pkt, sockOdd));
     EXPECT_EQ(2, q4.getSize());
index d57c1ace551d5a2dcea57dad5f0fb69d2bf5a74b..47ae38cc7c3c9fa3f191aa6779066eaa8e16ff19 100644 (file)
@@ -20,6 +20,13 @@ using namespace isc::dhcp::test;
 
 namespace {
 
+/// @brief DHCPv6 queue with implements drop and eat logic
+///
+/// This class derives from the default DHCPv6 ring queue
+/// and provies implementations for shouldDropPacket() and
+/// eatPackets().  This permits a full exercising of the
+/// PacketQueue interface as well as the basic v6 ring queue
+/// mechanics.
 class TestQueue6 : public PacketQueueRing6 {
 public:
     /// @brief Constructor
@@ -41,7 +48,7 @@ public:
     /// @param source the socket the packet came from
     ///
     /// @return True if the packet should be dropped.
-    virtual bool dropPacket(Pkt6Ptr packet,
+    virtual bool shouldDropPacket(Pkt6Ptr packet,
                             const SocketInfo& source) {
         if (drop_enabled_) {
             return ((packet->getTransid() % 2 == 0) ||
@@ -71,10 +78,6 @@ public:
         return (eaten);
     }
 
-    virtual void useDefaults() {
-        setCapacity(411);
-    }
-
     bool drop_enabled_;
     int eat_count_;
 };
@@ -216,7 +219,7 @@ TEST(TestQueue6, enqueueDequeueTest) {
 // Verifies enqueuing operations when drop logic is enabled.
 // This accesses it's queue instance as a TestQueue6, rather than
 // a PacketQueue6Ptr, to provide access to TestQueue6 specifics.
-TEST(TestQueue6, dropPacketTest) {
+TEST(TestQueue6, shouldDropPacketTest) {
     TestQueue6 q6(100);
     EXPECT_TRUE(q6.empty());
     ASSERT_FALSE(q6.drop_enabled_);
@@ -226,12 +229,12 @@ TEST(TestQueue6, dropPacketTest) {
     SocketInfo sockOdd(isc::asiolink::IOAddress("127.0.0.1"), 777, 11);
 
     // Drop is not enabled.
-    // We should be able to enqueu a packet with even numbered values.
+    // We should be able to enqueue a packet with even numbered values.
     Pkt6Ptr pkt(new Pkt6(DHCPV6_SOLICIT, 1002));
     ASSERT_NO_THROW(q6.enqueuePacket(pkt, sockEven));
     EXPECT_EQ(1, q6.getSize());
 
-    // We should be able to enqueu a packet with odd numbered values.
+    // We should be able to enqueue a packet with odd numbered values.
     pkt.reset(new Pkt6(DHCPV6_SOLICIT, 1003));
     ASSERT_NO_THROW(q6.enqueuePacket(pkt, sockOdd));
     EXPECT_EQ(2, q6.getSize());
index da26986ffaea4b521bac66a6ff2a8454fad6c0eb..8e3bbeaec34110ded852aab9b7fcce8b74a4b948 100644 (file)
@@ -17,7 +17,11 @@ using namespace isc;
 using namespace isc::dhcp;
 using namespace isc::dhcp::test;
 
-data::ElementPtr 
+/// @brief Convenience function for construction a dhcp-queue-control element map
+///
+/// @param queue_type logical name of the queue implemenation type
+/// @param capacity maximum queue capacity
+data::ElementPtr
 isc::dhcp::test::makeQueueConfig(const std::string& queue_type, size_t capacity) {
     data::ElementPtr config = data::Element::createMap();
     config->set("queue-type", data::Element::create(queue_type));
@@ -27,27 +31,38 @@ isc::dhcp::test::makeQueueConfig(const std::string& queue_type, size_t capacity)
 
 namespace {
 
+/// @brief Test fixture for exercising the DHCPv4 Packet Queue Manager (PQM)
 class PacketQueueMgr4Test : public ::testing::Test {
 public:
+    /// @brief Constructor
+    ///
+    /// Note that it instantiates the PQM singleton.
     PacketQueueMgr4Test(){
         PacketQueueMgr4::create();
     }
 
-    ~PacketQueueMgr4Test(){
+    /// @brief Destructor
+    ///
+    /// It destroys the PQM singleton.
+    virtual ~PacketQueueMgr4Test(){
         PacketQueueMgr4::destroy();
     }
 
-    /// @brief Registers a queue type factory 
+    /// @brief Registers a queue type factory
+    ///
+    /// @param queue_type logical name of the queue implementation
+    ///
+    /// @return true if the registration succeeded, false otherwise
     bool addCustomQueueType(const std::string& queue_type) {
         bool did_it =
-            mgr().registerPacketQueueFactory(queue_type, 
+            mgr().registerPacketQueueFactory(queue_type,
                                             [](data::ConstElementPtr parameters)
                                             -> PacketQueue4Ptr {
                 std::string queue_type ;
                 try {
                     queue_type = data::SimpleParser::getString(parameters, "queue-type");
                 } catch (std::exception& ex) {
-                    isc_throw(InvalidQueueParameter, 
+                    isc_throw(InvalidQueueParameter,
                               "queue-type missing or invalid: " << ex.what());
                 }
 
@@ -55,26 +70,33 @@ public:
                 try {
                     capacity = data::SimpleParser::getInteger(parameters, "capacity");
                 } catch (const std::exception& ex) {
-                    isc_throw(InvalidQueueParameter, 
+                    isc_throw(InvalidQueueParameter,
                               "'capacity' missing or invalid: " << ex.what());
                 }
 
                 return (PacketQueue4Ptr(new PacketQueueRing4(queue_type, capacity)));
             });
 
-        return did_it; 
+        return did_it;
     }
 
+    /// @brief Fetches a pointer to the PQM singleton
     PacketQueueMgr4& mgr() {
         return (PacketQueueMgr4::instance());
     };
 
+    /// @brief Tests the current packet queue info against expected content
+    ///
+    /// @param exp_json JSON text describing the expected packet queue info
+    /// contents
     void checkMyInfo(const std::string& exp_json) {
         checkInfo((mgr().getPacketQueue()), exp_json);
     }
 
 };
 
+// Verifies that DHCPv4 PQM provides a default queue factory
+// and packet queue.
 TEST_F(PacketQueueMgr4Test, defaultQueue) {
 
     // Verify that we have a default queue and its info is correct.
@@ -87,12 +109,13 @@ TEST_F(PacketQueueMgr4Test, defaultQueue) {
     checkMyInfo("{ \"capacity\": 2000, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
 
     // We should be able to recreate the manager.
-    ASSERT_NO_THROW(PacketQueueMgr4::create());  
+    ASSERT_NO_THROW(PacketQueueMgr4::create());
 
     // And be back to having the default queue.
     checkMyInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring4\", \"size\": 0 }");
 }
 
+// Verifies that PQM registry and creation of custome queue implementations.
 TEST_F(PacketQueueMgr4Test, customQueueType) {
 
     // Verify that we cannot create a queue for a non-existant type
index 9bb02f8209390440c11bfcd18c066f952583325f..ad3ca73db5bf1cd976dd194376b19e615eed1c4f 100644 (file)
@@ -19,27 +19,38 @@ using namespace isc::dhcp::test;
 
 namespace {
 
+/// @brief Test fixture for exercising the DHCPv6 Packet Queue Manager (PQM)
 class PacketQueueMgr6Test : public ::testing::Test {
 public:
+    /// @brief Constructor
+    ///
+    /// Note that it instantiates the PQM singleton.
     PacketQueueMgr6Test(){
         PacketQueueMgr6::create();
     }
 
-    ~PacketQueueMgr6Test(){
+    /// @brief Destructor
+    ///
+    /// It destroys the PQM singleton.
+    virtual ~PacketQueueMgr6Test(){
         PacketQueueMgr6::destroy();
     }
 
-    /// @brief Registers a queue type factory 
+    /// @brief Registers a queue type factory
+    ///
+    /// @param queue_type logical name of the queue implementation
+    ///
+    /// @return true if the registration succeeded, false otherwise
     bool addCustomQueueType(const std::string& queue_type) {
         bool did_it =
-            mgr().registerPacketQueueFactory(queue_type, 
+            mgr().registerPacketQueueFactory(queue_type,
                                             [](data::ConstElementPtr parameters)
                                             -> PacketQueue6Ptr {
                 std::string queue_type ;
                 try {
                     queue_type = data::SimpleParser::getString(parameters, "queue-type");
                 } catch (std::exception& ex) {
-                    isc_throw(InvalidQueueParameter, 
+                    isc_throw(InvalidQueueParameter,
                               "queue-type missing or invalid: " << ex.what());
                 }
 
@@ -47,26 +58,33 @@ public:
                 try {
                     capacity = data::SimpleParser::getInteger(parameters, "capacity");
                 } catch (const std::exception& ex) {
-                    isc_throw(InvalidQueueParameter, 
+                    isc_throw(InvalidQueueParameter,
                               "'capacity' missing or invalid: " << ex.what());
                 }
 
                 return (PacketQueue6Ptr(new PacketQueueRing6(queue_type, capacity)));
             });
 
-        return did_it; 
+        return did_it;
     }
 
+    /// @brief Fetches a pointer to the PQM singleton
     PacketQueueMgr6& mgr() {
         return (PacketQueueMgr6::instance());
     };
 
+    /// @brief Tests the current packet queue info against expected content
+    ///
+    /// @param exp_json JSON text describing the expected packet queue info
+    /// contents
     void checkMyInfo(const std::string& exp_json) {
         checkInfo((mgr().getPacketQueue()), exp_json);
     }
 
 };
 
+// Verifies that DHCPv6 PQM provides a default queue factory
+// and packet queue.
 TEST_F(PacketQueueMgr6Test, defaultQueue) {
 
     // Verify that we have a default queue and its info is correct.
@@ -79,12 +97,13 @@ TEST_F(PacketQueueMgr6Test, defaultQueue) {
     checkMyInfo("{ \"capacity\": 2000, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
 
     // We should be able to recreate the manager.
-    ASSERT_NO_THROW(PacketQueueMgr6::create());  
+    ASSERT_NO_THROW(PacketQueueMgr6::create());
 
     // And be back to having the default queue.
     checkMyInfo("{ \"capacity\": 500, \"queue-type\": \"kea-ring6\", \"size\": 0 }");
 }
 
+// Verifies that PQM registry and creation of custome queue implementations.
 TEST_F(PacketQueueMgr6Test, customQueueType) {
 
     // Verify that we cannot create a queue for a non-existant type
index fc44707d847ffef7627c5db91ad3835912f3fd08..92807d5632ab40396a60c06c0fed609d985d5a8c 100644 (file)
@@ -47,8 +47,8 @@ EXTRA_DIST += parsers/simple_parser4.cc
 EXTRA_DIST += parsers/simple_parser4.h
 EXTRA_DIST += parsers/simple_parser6.cc
 EXTRA_DIST += parsers/simple_parser6.h
-EXTRA_DIST += parsers/queue_control_parser.cc
-EXTRA_DIST += parsers/queue_control_parser.h
+EXTRA_DIST += parsers/dhcp_queue_control_parser.cc
+EXTRA_DIST += parsers/dhcp_queue_control_parser.h
 
 # Devel guide diagrams
 EXTRA_DIST += images/pgsql_host_data_source.svg
@@ -56,7 +56,6 @@ EXTRA_DIST += images/pgsql_host_data_source.svg
 # Define rule to build logging source files from message file
 alloc_engine_messages.h alloc_engine_messages.cc dhcpsrv_messages.h \
 dhcpsrv_messages.cc hosts_messages.h hosts_messages.cc: s-messages
-
 s-messages: alloc_engine_messages.mes dhcpsrv_messages.mes hosts_messages.mes
        $(top_builddir)/src/lib/log/compiler/kea-msg-compiler $(top_srcdir)/src/lib/dhcpsrv/alloc_engine_messages.mes
        touch $@
@@ -182,8 +181,8 @@ libkea_dhcpsrv_la_SOURCES += parsers/ifaces_config_parser.cc
 libkea_dhcpsrv_la_SOURCES += parsers/ifaces_config_parser.h
 libkea_dhcpsrv_la_SOURCES += parsers/option_data_parser.cc
 libkea_dhcpsrv_la_SOURCES += parsers/option_data_parser.h
-libkea_dhcpsrv_la_SOURCES += parsers/queue_control_parser.cc
-libkea_dhcpsrv_la_SOURCES += parsers/queue_control_parser.h
+libkea_dhcpsrv_la_SOURCES += parsers/dhcp_queue_control_parser.cc
+libkea_dhcpsrv_la_SOURCES += parsers/dhcp_queue_control_parser.h
 libkea_dhcpsrv_la_SOURCES += parsers/sanity_checks_parser.cc
 libkea_dhcpsrv_la_SOURCES += parsers/sanity_checks_parser.h
 libkea_dhcpsrv_la_SOURCES += parsers/shared_network_parser.cc
@@ -342,7 +341,7 @@ libkea_dhcpsrv_parsers_include_HEADERS = \
        parsers/host_reservations_list_parser.h \
        parsers/ifaces_config_parser.h \
        parsers/option_data_parser.h \
-       parsers/queue_control_parser.h \
+       parsers/dhcp_queue_control_parser.h \
        parsers/shared_network_parser.h \
        parsers/shared_networks_list_parser.h \
        parsers/simple_parser4.h \
similarity index 71%
rename from src/lib/dhcpsrv/parsers/queue_control_parser.cc
rename to src/lib/dhcpsrv/parsers/dhcp_queue_control_parser.cc
index eb212256a96aac5667900ad1933fe07cdf3f0ebc..b852683ddfe96b107e895dccec73a9ab8b705b44 100644 (file)
@@ -8,7 +8,7 @@
 #include <cc/data.h>
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/dhcpsrv_log.h>
-#include <dhcpsrv/parsers/queue_control_parser.h>
+#include <dhcpsrv/parsers/dhcp_queue_control_parser.h>
 #include <boost/foreach.hpp>
 #include <string>
 #include <sys/types.h>
@@ -18,25 +18,25 @@ using namespace isc::data;
 namespace isc {
 namespace dhcp {
 
-QueueControlParser::QueueControlParser(const uint16_t family)
+DHCPQueueControlParser::DHCPQueueControlParser(const uint16_t family)
     : family_(family) {
     // @todo Not sure we need family but just in case.
     if (family_ != AF_INET && family_ != AF_INET6) {
-        isc_throw(BadValue, "QueueControlParser - invalid family: "
+        isc_throw(BadValue, "DHCPQueueControlParser - invalid family: "
                  << family_ << ", must be AF_INET or AF_INET6");
     }
 }
 
 data::ElementPtr 
-QueueControlParser::parse(const isc::data::ConstElementPtr& queue_elem) {
+DHCPQueueControlParser::parse(const isc::data::ConstElementPtr& control_elem) {
     // All we really do here is verify that it is a map that
     // contains at least queue-type.  All other content depends 
     // on the packet queue implementation of that type.
-    if (queue_elem->getType() != Element::map) {
-        isc_throw(DhcpConfigError, "queue-control must be a map");
+    if (control_elem->getType() != Element::map) {
+        isc_throw(DhcpConfigError, "dhcp-queue-control must be a map");
     }
 
-    ConstElementPtr elem  = queue_elem->get("queue-type");
+    ConstElementPtr elem  = control_elem->get("queue-type");
     if (!elem) {
         isc_throw(DhcpConfigError, "queue-type is required");
     } else {
@@ -46,7 +46,7 @@ QueueControlParser::parse(const isc::data::ConstElementPtr& queue_elem) {
     }
 
     // Return a copy of it.
-    return (data::copy(queue_elem));
+    return (data::copy(control_elem));
 }
 
 } // end of namespace isc::dhcp
similarity index 70%
rename from src/lib/dhcpsrv/parsers/queue_control_parser.h
rename to src/lib/dhcpsrv/parsers/dhcp_queue_control_parser.h
index 0150b96eef5b7a9a2bd662870e5aca0bc80af5ea..5d1fbe8ca0f0c709ca2cba7bf4f052041baf9a05 100644 (file)
@@ -4,8 +4,8 @@
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-#ifndef QUEUE_CONTROL_PARSER_H
-#define QUEUE_CONTROL_PARSER_H
+#ifndef DHCP_QUEUE_CONTROL_PARSER_H
+#define DHCP_QUEUE_CONTROL_PARSER_H
 
 #include <cc/data.h>
 #include <cc/simple_parser.h>
@@ -16,27 +16,27 @@ namespace dhcp {
 
 /// @brief Parser for the configuration of DHCP packet queue controls
 ///
-/// This parser parses the "queue-control" parameter which holds the
+/// This parser parses the "dhcp-queue-control" parameter which holds the
 /// the configurable parameters that tailor DHCP packet queue behavior.
-/// Currently "queue-control" is treated as a map of arbitrary values,
+/// Currently "dhcp-queue-control" is treated as a map of arbitrary values,
 /// with only one required value, "queue-type". This was done to
 /// provide latitude for differing queue implementations.
 ///
 /// This parser is used in both DHCPv4 and DHCPv6. Derived parsers
 /// are not needed.
-class QueueControlParser : public isc::data::SimpleParser {
+class DHCPQueueControlParser : public isc::data::SimpleParser {
 public:
 
     /// @brief Constructor
     ///
     /// @param family AF_INET for DHCPv4 and AF_INET6 for DHCPv6.
-    explicit QueueControlParser(const uint16_t family);
+    explicit DHCPQueueControlParser(const uint16_t family);
 
-    /// @brief Parses content of the "queue-control".
+    /// @brief Parses content of the "dhcp-queue-control".
     ///
     /// @param values pointer to the content of parsed values
     ///
-    /// @return A pointer to a newly constructed QueueControl populated
+    /// @return A pointer to a newly constructed DHCPQueueControl populated
     /// with the parsed values
     ///
     /// @throw DhcpConfigError if any of the values are invalid.
@@ -50,4 +50,4 @@ private:
 }
 } // end of namespace isc
 
-#endif // QUEUE_CONTROL_PARSER_H
+#endif // DHCP_QUEUE_CONTROL_PARSER_H
index f629d55663b10fd4f347cc6467f9223ef06eb837..12a22db90258bc71c7df9279d4c9f3dd80f10266 100644 (file)
@@ -392,10 +392,10 @@ SrvConfig::toElement() const {
         dhcp->set("config-control", info_elem);
     }
 
-    // Set queue-control (if it exists)
-    data::ConstElementPtr queue_control = getQueueControlInfo();
-    if (queue_control) {
-        dhcp->set("queue-control", queue_control);
+    // Set dhcp-packet-control (if it exists)
+    data::ConstElementPtr dhcp_queue_control = getDHCPQueueControl();
+    if (dhcp_queue_control) {
+        dhcp->set("dhcp-queue-control", dhcp_queue_control);
     }
 
     return (result);
index 123834ff7b263ff8f41c9bb2ad7f0a4ad4999750..5f3ce4ab62b08683e5a681f954fa3316019db30c 100644 (file)
@@ -360,16 +360,16 @@ public:
         control_socket_ = control_socket;
     }
 
-    /// @brief Returns queue control information
-    /// @return pointer to the queue control information
-    const isc::data::ConstElementPtr getQueueControlInfo() const {
-        return (queue_control_);
+    /// @brief Returns DHCP queue control information
+    /// @return pointer to the DHCP queue control information
+    const isc::data::ConstElementPtr getDHCPQueueControl() const {
+        return (dhcp_queue_control_);
     }
 
-    /// @brief Sets information about the queue control
-    /// @param new queue control information
-    void setQueueControlInfo(const isc::data::ConstElementPtr queue_control) {
-        queue_control_ = queue_control;
+    /// @brief Sets information about the dhcp queue control
+    /// @param new dhcp queue control information
+    void setDHCPQueueControl(const isc::data::ConstElementPtr dhcp_queue_control) {
+        dhcp_queue_control_ = dhcp_queue_control;
     }
 
     /// @brief Returns pointer to the dictionary of global client
@@ -663,8 +663,8 @@ private:
     /// @brief Pointer to the control-socket information
     isc::data::ConstElementPtr control_socket_;
 
-    /// @brief Pointer to the queue-control information
-    isc::data::ConstElementPtr queue_control_;
+    /// @brief Pointer to the dhcp-queue-control information
+    isc::data::ConstElementPtr dhcp_queue_control_;
 
     /// @brief Pointer to the dictionary of global client class definitions
     ClientClassDictionaryPtr class_dictionary_;