Prevent transmission of spurious promo char to other engine
authorH.G. Muller <h.g.muller@hccnet.nl>
Thu, 16 Sep 2010 15:38:35 +0000 (17:38 +0200)
committerArun Persaud <arun@nubati.net>
Fri, 17 Sep 2010 03:46:33 +0000 (20:46 -0700)
The parser now strps off spurious promotion characters.
New move types "White/BlackNonPromotion" had to be introduced for this,
to indicate NormalMoves that could have been a promotion, to make sure
the '=' suffix of Shogi deferred promotions survives.

backend.c
common.h
moves.c
parser.c
parser.l

index 704847e..b124be6 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -4575,6 +4575,10 @@ SendMoveToICS(moveType, fromX, fromY, toX, toY)
       /* POP Fabien */
        sprintf(user_move, "o-o-o\n");
        break;
+      case WhiteNonPromotion:
+      case BlackNonPromotion:
+        sprintf(user_move, "%c%c%c%c=\n", AAA + fromX, ONE + fromY, AAA + toX, ONE + toY);
+        break;
       case WhitePromotionQueen:
       case BlackPromotionQueen:
       case WhitePromotionRook:
@@ -4803,6 +4807,8 @@ ParseOneMove(move, moveNum, moveType, fromX, fromY, toX, toY, promoChar)
       case BlackPromotionKnight:
       case WhitePromotionKing:
       case BlackPromotionKing:
+      case WhiteNonPromotion:
+      case BlackNonPromotion:
       case NormalMove:
       case WhiteCapturesEnPassant:
       case BlackCapturesEnPassant:
@@ -8170,6 +8176,8 @@ ParseGameHistory(game)
          case BlackPromotionKnight:
          case WhitePromotionKing:
          case BlackPromotionKing:
+         case WhiteNonPromotion:
+         case BlackNonPromotion:
          case NormalMove:
          case WhiteCapturesEnPassant:
          case BlackCapturesEnPassant:
@@ -9646,6 +9654,8 @@ LoadGameOneMove(readAhead)
       case BlackPromotionKnight:
       case WhitePromotionKing:
       case BlackPromotionKing:
+      case WhiteNonPromotion:
+      case BlackNonPromotion:
       case NormalMove:
       case WhiteKingSideCastle:
       case WhiteQueenSideCastle:
index fe70ff5..bc9d997 100644 (file)
--- a/common.h
+++ b/common.h
@@ -257,10 +257,10 @@ typedef enum {
     BlackKingSideCastleWild, BlackQueenSideCastleWild,
     BlackHSideCastleFR, BlackASideCastleFR, 
     WhitePromotionKnight, WhitePromotionBishop,
-    WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,
+    WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing, WhiteNonPromotion,
     WhitePromotionChancellor, WhitePromotionArchbishop, WhitePromotionCentaur,
     BlackPromotionKnight, BlackPromotionBishop,
-    BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,
+    BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing, BlackNonPromotion,
     BlackPromotionChancellor, BlackPromotionArchbishop, BlackPromotionCentaur,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
     WhiteDrop, BlackDrop, 
diff --git a/moves.c b/moves.c
index 7267173..545a09c 100644 (file)
--- a/moves.c
+++ b/moves.c
@@ -180,7 +180,7 @@ ChessMove PromoCharToMoveType(whiteOnMove, promoChar)
 {      /* [HGM] made dependent on CharToPiece to alow alternate piece letters */
        ChessSquare piece = CharToPiece(whiteOnMove ? ToUpper(promoChar) : ToLower(promoChar) );
 
-
+       if(promoChar == '=') return whiteOnMove ? WhiteNonPromotion : BlackNonPromotion;
        if(promoChar == NULLCHAR) return NormalMove;
 
        switch(piece) {
@@ -1097,7 +1097,7 @@ ChessMove LegalityTest(board, flags, rf, ff, rt, ft, promoChar)
                          piece == WhiteKnight && rt > BOARD_HEIGHT-3) /* promotion mandatory */
                              cl.kind = promoChar == '=' ? IllegalMove : WhitePromotionKnight;
                     else /* promotion optional, default is promote */
-                             cl.kind = promoChar == '=' ? NormalMove  : WhitePromotionQueen;
+                             cl.kind = promoChar == '=' ? WhiteNonPromotion : WhitePromotionQueen;
                    
                 } else cl.kind = (promoChar == NULLCHAR || promoChar == 'x' || promoChar == '=') ?
                                             NormalMove : IllegalMove;
@@ -1107,7 +1107,7 @@ ChessMove LegalityTest(board, flags, rf, ff, rt, ft, promoChar)
                          piece == BlackKnight && rt < 2 ) /* promotion obligatory */
                              cl.kind = promoChar == '=' ? IllegalMove : BlackPromotionKnight;
                     else /* promotion optional, default is promote */
-                             cl.kind = promoChar == '=' ? NormalMove  : BlackPromotionQueen;
+                             cl.kind = promoChar == '=' ? BlackNonPromotion : BlackPromotionQueen;
 
                 } else cl.kind = (promoChar == NULLCHAR || promoChar == 'x' || promoChar == '=') ?
                                             NormalMove : IllegalMove;
index 70111a4..88897d0 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -375,7 +375,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_acclist[602] =
+static yyconst flex_int16_t yy_acclist[606] =
     {   0,
        43,   41,   42,   41,   42,   41,   42,   40,   41,   42,
        41,   42,   25,   41,   42,   41,   42,   40,   41,   42,
@@ -413,40 +413,40 @@ static yyconst flex_int16_t yy_acclist[602] =
         9,   40,   23,   40,   23,    8,   40, 8218,   22,   40,
        22,   24,   40,   40,   40,    6,   40,   40,   40,   40,
        40,   40,    9,   40,   40,   40,   40,    4,   40,   40,
-        3,    3,   40,    3,   40,   40,    4,    5,   40,    4,
-        4,   40,   40,   40,   40,    9,   40,   40,   34,   39,
-        9,   40,   23,   40,    8,   40,   22,   40,   35,   40,
-       40,   40,    6,   40,   40,   40,   40,   40,   40,    9,
-       40,   40,   40,   40,    4,   40,   40,    3,   40,    3,
-       40,   40,    5,   40,    4,   40,   40,   40,   40,    9,
-       40,   40,   38,   38,   38,   37,   25,   25,    6,   40,
-
-       10,    6,   40,    7,   40,    6,   40,    6,   40,   40,
-       40,   19,   40,   40,   16,   40,   40,   40,   40,   40,
-       36,    3,    3,    2,   40,    5,    4,    5,    5,   40,
-       40,    4,    4,   40,   40,   25,   39,   40,    6,   40,
-        7,   40,   40,   40,   40,   40,   19,   40,   40,   16,
-       40,   40,   40,   40,   40,    2,   40,    5,   40,   40,
-        4,   40,   40,   38,    7,    7,    1,   40,   20,   40,
-       40,   19,   40,   40,   40,   40,   40,   40,   30,   36,
-        2,    2,    2,   40,    5,    5,    5,   40,   39,    1,
-       40,   40,   40,   19,   40,   40,   40,   40,   40,   40,
-
-        2,   40,    5,   40,   27,   38,    1,   23,   23,   22,
-       22,   24,   24,    1,    1,   40,   21,   20,   40,   40,
-       40,   11,   40,   40,   28,   36,   30,    2,    2,   27,
-       34,   39,   39,    1,   40,   40,   40,   40,   11,   40,
-       40,   18,    1,   24,    1,   21,   19,   40,   40,   40,
-       11,   40,   40,   40,   40,   40,   11,   40,   40,   12,
-       40,   40,   40,   40,   12,   40,   40,   14,   40,   40,
-       40,   14,   40,   40,   40,   39,   40,   40,   40,   40,
-       39,   39,   40,   40,   31,   40,   39,   39,   31,   40,
-       13,   31,   32,   32,   35,   39,   39,   31,   39,   34,
-
-       29
+        3,    3,   40,    3,   40,    3,   40,    4,    5,   40,
+        4,    4,   40,   40,   40,   40,    9,   40,   40,   34,
+       39,    9,   40,   23,   40,    8,   40,   22,   40,   35,
+       40,   40,   40,    6,   40,   40,   40,   40,   40,   40,
+        9,   40,   40,   40,   40,    4,   40,   40,    3,   40,
+        3,   40,    3,   40,    5,   40,    4,   40,   40,   40,
+       40,    9,   40,   40,   38,   38,   38,   37,   25,   25,
+
+        6,   40,   10,    6,   40,    7,   40,    6,   40,    6,
+       40,   40,   40,   19,   40,   40,   16,   40,   40,   40,
+       40,   40,   36,    3,   40,    3,    2,   40,    5,    4,
+        5,    5,   40,   40,    4,    4,   40,   40,   25,   39,
+       40,    6,   40,    7,   40,   40,   40,   40,   40,   19,
+       40,   40,   16,   40,   40,   40,   40,   40,   40,    2,
+       40,    5,   40,   40,    4,   40,   40,   38,    7,    7,
+        1,   40,   20,   40,   40,   19,   40,   40,   40,   40,
+       40,   40,   30,   36,    2,    2,    2,   40,    5,    5,
+        5,   40,   39,    1,   40,   40,   40,   19,   40,   40,
+
+       40,   40,   40,   40,    2,   40,    5,   40,   27,   38,
+        1,   23,   23,   22,   22,   24,   24,    1,    1,   40,
+       21,   20,   40,   40,   40,   11,   40,   40,   28,   36,
+       30,    2,    2,   27,   34,   39,   39,    1,   40,   40,
+       40,   40,   11,   40,   40,   18,    1,   24,    1,   21,
+       19,   40,   40,   40,   11,   40,   40,   40,   40,   40,
+       11,   40,   40,   12,   40,   40,   40,   40,   12,   40,
+       40,   14,   40,   40,   40,   14,   40,   40,   40,   39,
+       40,   40,   40,   40,   39,   39,   40,   40,   31,   40,
+       39,   39,   31,   40,   13,   31,   32,   32,   35,   39,
+
+       39,   31,   39,   34,   29
     } ;
 
-static yyconst flex_int16_t yy_accept[689] =
+static yyconst flex_int16_t yy_accept[691] =
     {   0,
         1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
        18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
@@ -474,55 +474,55 @@ static yyconst flex_int16_t yy_accept[689] =
       313,  314,  314,  315,  315,  316,  316,  318,  318,  318,
       318,  318,  318,  318,  319,  320,  321,  322,  323,  325,
       326,  327,  328,  328,  328,  328,  328,  330,  330,  331,
-      331,  332,  334,  336,  337,  338,  338,  340,  341,  343,
-      344,  345,  346,  348,  349,  350,  350,  350,  350,  350,
-      351,  353,  355,  357,  359,  359,  360,  360,  361,  362,
-      362,  363,  365,  366,  367,  368,  369,  370,  372,  373,
-      374,  375,  377,  378,  378,  380,  382,  383,  385,  387,
-      388,  389,  390,  392,  393,  393,  393,  394,  395,  395,
-
-      395,  396,  396,  396,  397,  397,  397,  398,  398,  399,
-      399,  400,  400,  400,  400,  401,  401,  401,  401,  401,
-      401,  401,  401,  402,  404,  404,  406,  407,  408,  408,
-      409,  410,  410,  410,  410,  410,  410,  410,  411,  412,
-      414,  414,  415,  417,  418,  419,  420,  421,  421,  421,
-      421,  421,  422,  423,  423,  424,  426,  427,  428,  428,
-      428,  429,  431,  432,  433,  433,  435,  436,  436,  437,
-      437,  437,  437,  437,  438,  438,  439,  439,  439,  441,
-      443,  444,  444,  445,  446,  447,  449,  450,  452,  453,
-      454,  455,  456,  458,  460,  461,  463,  464,  464,  464,
-
-      464,  464,  465,  465,  465,  465,  465,  466,  466,  466,
-      466,  466,  466,  466,  466,  466,  466,  467,  469,  469,
-      469,  469,  469,  469,  470,  471,  472,  472,  474,  474,
-      475,  476,  477,  478,  479,  479,  479,  481,  481,  481,
-      482,  482,  483,  485,  486,  486,  487,  487,  489,  489,
-      489,  489,  489,  489,  489,  489,  490,  490,  490,  492,
-      493,  494,  496,  497,  498,  499,  500,  501,  503,  505,
-      505,  505,  505,  505,  505,  505,  507,  507,  508,  508,
-      509,  509,  510,  510,  511,  511,  512,  512,  513,  513,
-      514,  514,  514,  514,  515,  517,  517,  517,  518,  518,
-
-      518,  519,  520,  520,  520,  520,  520,  520,  521,  522,
-      524,  525,  527,  527,  528,  529,  530,  530,  530,  532,
-      532,  532,  533,  534,  534,  534,  536,  537,  538,  539,
-      541,  542,  542,  543,  543,  543,  543,  543,  544,  544,
-      545,  546,  546,  546,  547,  547,  547,  548,  548,  548,
-      548,  548,  549,  550,  551,  553,  554,  554,  554,  554,
-      554,  554,  555,  556,  557,  559,  560,  560,  560,  560,
-      560,  560,  560,  561,  561,  561,  561,  561,  562,  563,
-      563,  563,  563,  563,  564,  565,  565,  565,  565,  565,
-      566,  566,  566,  566,  567,  568,  570,  570,  570,  570,
-
-      570,  571,  571,  572,  574,  574,  574,  574,  574,  575,
-      576,  576,  576,  576,  576,  577,  578,  579,  579,  579,
-      579,  579,  579,  580,  581,  581,  581,  581,  581,  582,
-      583,  584,  585,  585,  585,  585,  585,  585,  587,  587,
-      587,  587,  587,  588,  589,  591,  591,  591,  592,  592,
-      593,  593,  594,  594,  594,  596,  596,  597,  598,  598,
-      598,  598,  598,  600,  600,  600,  600,  600,  600,  600,
-      600,  600,  600,  600,  600,  600,  600,  600,  600,  600,
-      600,  600,  600,  600,  600,  601,  602,  602
+      331,  332,  334,  336,  338,  339,  339,  341,  342,  344,
+      345,  346,  347,  349,  350,  351,  351,  351,  351,  351,
+      352,  354,  356,  358,  360,  360,  361,  361,  362,  363,
+      363,  364,  366,  367,  368,  369,  370,  371,  373,  374,
+      375,  376,  378,  379,  379,  381,  383,  385,  387,  389,
+      390,  391,  392,  394,  395,  395,  395,  396,  397,  397,
+
+      397,  398,  398,  398,  399,  399,  399,  400,  400,  401,
+      401,  402,  402,  402,  402,  403,  403,  403,  403,  403,
+      403,  403,  403,  404,  406,  406,  408,  409,  410,  410,
+      411,  412,  412,  412,  412,  412,  412,  412,  413,  414,
+      416,  416,  417,  419,  420,  421,  422,  423,  423,  423,
+      423,  423,  424,  425,  426,  426,  427,  429,  430,  431,
+      431,  431,  432,  434,  435,  436,  436,  438,  439,  439,
+      440,  440,  440,  440,  440,  441,  441,  442,  442,  442,
+      444,  446,  447,  447,  448,  449,  450,  452,  453,  455,
+      456,  457,  458,  459,  460,  462,  464,  465,  467,  468,
+
+      468,  468,  468,  468,  469,  469,  469,  469,  469,  470,
+      470,  470,  470,  470,  470,  470,  470,  470,  470,  471,
+      473,  473,  473,  473,  473,  473,  474,  475,  476,  476,
+      478,  478,  479,  480,  481,  482,  483,  483,  483,  485,
+      485,  485,  486,  486,  487,  489,  490,  490,  491,  491,
+      493,  493,  493,  493,  493,  493,  493,  493,  494,  494,
+      494,  496,  497,  498,  500,  501,  502,  503,  504,  505,
+      507,  509,  509,  509,  509,  509,  509,  509,  511,  511,
+      512,  512,  513,  513,  514,  514,  515,  515,  516,  516,
+      517,  517,  518,  518,  518,  518,  519,  521,  521,  521,
+
+      522,  522,  522,  523,  524,  524,  524,  524,  524,  524,
+      525,  526,  528,  529,  531,  531,  532,  533,  534,  534,
+      534,  536,  536,  536,  537,  538,  538,  538,  540,  541,
+      542,  543,  545,  546,  546,  547,  547,  547,  547,  547,
+      548,  548,  549,  550,  550,  550,  551,  551,  551,  552,
+      552,  552,  552,  552,  553,  554,  555,  557,  558,  558,
+      558,  558,  558,  558,  559,  560,  561,  563,  564,  564,
+      564,  564,  564,  564,  564,  565,  565,  565,  565,  565,
+      566,  567,  567,  567,  567,  567,  568,  569,  569,  569,
+      569,  569,  570,  570,  570,  570,  571,  572,  574,  574,
+
+      574,  574,  574,  575,  575,  576,  578,  578,  578,  578,
+      578,  579,  580,  580,  580,  580,  580,  581,  582,  583,
+      583,  583,  583,  583,  583,  584,  585,  585,  585,  585,
+      585,  586,  587,  588,  589,  589,  589,  589,  589,  589,
+      591,  591,  591,  591,  591,  592,  593,  595,  595,  595,
+      596,  596,  597,  597,  598,  598,  598,  600,  600,  601,
+      602,  602,  602,  602,  602,  604,  604,  604,  604,  604,
+      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,
+      604,  604,  604,  604,  604,  604,  604,  605,  606,  606
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -569,183 +569,183 @@ static yyconst flex_int32_t yy_meta[74] =
        17,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[767] =
+static yyconst flex_int16_t yy_base[769] =
     {   0,
-        0,   73, 3814, 3815,  122,  131,    0,  142, 3809,  140,
-      151,  171,  162, 3809,  231,  159, 3757, 3746,  119, 3762,
-      143, 3757, 3741,  190,  301,  361,  211,  207,  279,  215,
-      224,  284,  243,  286,  301,  303,  305, 3759,  232, 3754,
-     3738,  264,  351, 3799,  149,  379,  430,  351,  255,  493,
-      212, 3748, 3737,  327, 3753,  157, 3748, 3732,  331,  555,
+        0,   73, 3831, 3832,  122,  131,    0,  142, 3826,  140,
+      151,  171,  162, 3826,  231,  159, 3774, 3763,  119, 3779,
+      143, 3774, 3758,  190,  301,  361,  211,  207,  279,  215,
+      224,  284,  243,  286,  301,  303,  305, 3776,  232, 3771,
+     3755,  264,  351, 3816,  149,  379,  430,  351,  255,  493,
+      212, 3765, 3754,  327, 3770,  157, 3765, 3749,  331,  555,
       372,  245,  378,  351,  468,  530,  475,  477,  505,  523,
-      508,  576,  578,  385,  579,  610,  615, 3744,  372,    0,
-     3786,  309,  630,  431, 3815, 3782,  675,  575,  405, 3776,
-     3776, 3774,  450,  639, 3774,  472,  165,  640, 3773,    0,
-
-     3786, 3815,    0,  699,    0,  744,    0,  648,  787,  652,
-      656, 3649, 3636, 3591,  693, 3601, 3594,  697, 3584,  664,
-     3585,  856,  352,  929, 3815,  956, 1006,    0, 1031, 1080,
-      660,  717,  721, 3563, 3567, 3551, 3514, 3523,  435, 3504,
-      757, 3572, 3571,  497, 3496,  517,  607,  550,  681, 1130,
-      160,  518,  554, 1193, 1238, 3477,  686,  762,  787,  764,
-      617,  676,  750, 3424,  803,  816,  864,  835, 1262, 1312,
-     3439, 1337, 1387,  874,  888,  895,  700,  823,  865,  762,
-      866,  885, 3360,  583,  610,  626,  652,  676,  944,  949,
-     3394, 3260, 3815,  882, 1190, 3328, 3286, 3281, 3270, 3279,
-
-     3278,    0, 3815, 3277, 3266, 3263, 3262, 3182,  799,  830,
-      900,  958, 1412,  928,  962,  966, 1457, 3130, 3120, 3119,
-     3130, 3108,  382,  970, 1075, 3071,  759, 2895, 2927, 2884,
-     2880, 1108,  572, 1213,  739, 1527, 1591,    0, 1596,    0,
-     2927, 2844, 2843,  974, 1202, 1246, 1645, 2840, 2838,  238,
-     2799, 2797, 2814, 2743, 3815, 1210, 1084, 2630,  211, 2628,
-     1121, 1132,  606, 1253,  697, 2626,  895, 1217, 1688, 2624,
-     1258, 1733, 1467, 1472,  901, 1536, 1252, 1532, 1535, 1538,
-     1549, 1795, 1800, 2623,  810, 2615, 1556, 1849, 1259, 1573,
-     1473, 1474, 1541, 1543, 1583, 2574, 3815,  778,  832,  913,
-
-      985,  989, 1007, 3815, 1593, 2613, 2612, 2549, 2548, 1281,
-     1646, 2568, 2554, 2550, 2550,  585, 2549,  367, 2487,  636,
-     1680, 1125, 3815, 2480, 1679, 2479, 2463, 1854, 1678, 3815,
-     1287, 2407, 2407, 2403, 2401, 2401, 2402, 2404, 2403,  968,
-      510,  598,    0, 2421, 2405, 2406, 2405, 1007, 1161, 1046,
-     1354, 2450, 2443, 1455, 3815, 1694, 1510, 2442, 1161, 1585,
-     1700, 2441, 1209, 3815, 2389,    0, 2389, 1789, 2445, 1577,
-     1711, 2401, 2386, 2443,  403, 1709, 1281,  374, 1131, 1710,
-     1866, 2441, 1741,  819, 1744, 1921, 1746, 1315, 1686, 1789,
-     1748, 1793, 1754, 1852, 1917, 1571, 1919, 1930, 2392, 1127,
-
-     2431, 1221, 1244, 1392, 1421, 1486, 2418, 1620, 2429, 2366,
-     2427, 2361, 2422, 2359, 2413, 1923, 3815, 1994, 2381, 2377,
-     1452, 2377, 2372, 2361, 2421, 1266, 1919, 2420,  688, 2394,
-     2370, 2359, 2358, 2412, 1684, 1660, 3815, 2406, 1891,  933,
-     1388, 1579, 2399, 2398, 1462, 3815, 2346,    0, 2379, 1928,
-     2371, 1645, 2371, 2328, 2321, 1603, 1495, 1269, 2029, 1941,
-     1925, 1943, 1928, 1939, 1932, 1947, 1950, 1954, 1957, 1971,
-     1350, 1515, 2374, 1568, 1573, 3815, 1976, 1756, 2373, 2372,
-     2309, 2308, 2369, 2368, 2305, 2304, 2365, 2357, 2287, 2285,
-     2341, 2337, 1959, 1966, 2344, 2293, 2302, 1746,  760, 2299,
-
-     3815, 2304, 2334, 2293, 2267, 2308, 2285, 2292, 2262, 1655,
-     2274, 3815, 1995, 3815, 2301, 3815, 2294, 2070, 2297, 2243,
-     2232, 2279, 1791, 1814, 1812, 1991, 2032, 2065, 2071, 2072,
-     2073, 1974, 3815, 2230, 2269, 1647, 2089, 2268, 2274, 2271,
-     3815, 2214, 2215, 3815, 2181, 2228, 2221, 2169, 2225, 2188,
-     2161, 2184, 2156, 2164,    0, 2141, 2093, 2197, 2133, 1836,
-     1662, 2074, 2076, 2082, 2095, 2106, 2002, 2130, 2146, 1724,
-     2016, 1985, 2033, 1997,  958, 2003, 1946, 2172, 1919, 1903,
-     1880, 1767, 1842, 2245, 2108, 2004, 1805, 1815, 1814, 3815,
-     1794, 1920, 1960, 2318, 2077,    0, 1788, 1630, 2046,  598,
-
-     2391, 2114, 2097, 2110, 2125, 1592, 1532, 2109, 1524, 1460,
-     1444, 1439, 1810,  758, 2118, 1443, 1374, 2132, 1261, 1257,
-     2094, 2095, 1253, 1188, 1154, 1199, 2130, 1866, 2139, 2166,
-     1117, 1053, 2147, 2087,  995, 2122, 2155,    0, 1027,  895,
-      924, 2152, 2206, 2212,    0, 2154,  839, 3815,  821, 2158,
-      787, 3815,  567,  501, 3815, 2155, 2209, 2232, 2219,  380,
-      362, 1838, 2233, 2220,  288, 2197, 1969, 2005, 2157, 2270,
-     2274, 2292, 2293, 2294, 2296, 2297, 2299, 2300, 2301, 2302,
-     2332, 2345, 2347, 2199,  190, 3815, 3815, 2461, 2480, 2493,
-     2507, 2526, 2545, 2561, 2580, 2599, 2617, 1883, 1994, 1999,
-
-     2635, 2654, 2030, 2673, 2692, 2711, 2730, 2749, 2768, 2787,
-     2806, 2825, 2837, 2856, 2875, 2894, 2913, 2921, 2148, 2931,
-     2947, 2966, 2985, 3004, 3023, 3042, 3061, 3080, 3099, 3118,
-     3137, 3156, 3168, 3187, 3206, 3225, 3244, 3260, 3275, 3291,
-     3310, 3326, 3345, 3364, 3383, 3402, 3421, 3440, 3459, 3478,
-     3497, 3516, 3535, 3554, 3569, 3588, 3607, 3622, 3636, 3655,
-     3674, 3693, 3712, 3731, 3750, 3769
+      508,  576,  578,  385,  579,  610,  615, 3761,  372,    0,
+     3803,  309,  630,  431, 3832, 3707,  675,  575,  405, 3683,
+     3665, 3645,  450,  639, 3639,  472,  165,  640, 3638,    0,
+
+     3651, 3832,    0,  699,    0,  744,    0,  648,  787,  652,
+      656, 3606, 3611, 3569,  693, 3565, 3564,  697, 3554,  664,
+     3555,  856,  352,  929, 3832,  956, 1006,    0, 1031, 1080,
+      660,  717,  721, 3533, 3463, 3444, 3421, 3412,  435, 3375,
+      757, 3425, 3353,  497, 3352,  517,  607,  550,  681, 1130,
+      160,  518,  554, 1193, 1238, 3310,  686,  762,  787,  764,
+      617,  676,  750, 3271,  803,  816,  864,  835, 1262, 1312,
+     3304, 1337, 1387,  874,  888,  895,  700,  823,  865,  762,
+      866,  885, 3243,  583,  610,  626,  652,  676,  944,  949,
+     3295, 3232, 3832,  882, 1190, 3290, 3287, 3286, 3196, 3205,
+
+     3201,    0, 3832, 3200, 3197, 3179, 3160, 2966,  799,  830,
+      900,  958, 1412,  928,  962,  966, 1457, 2910, 2902, 2901,
+     2914, 2823,  382,  970, 1075, 2804,  759, 2818, 2854, 2812,
+     2807, 1108,  572, 1213,  739, 1527, 1591,    0, 1596,    0,
+     2837, 2817, 2642, 1118, 1202, 1246, 1645, 2640, 2638,  238,
+     2598, 2597, 2631, 2578, 3832, 1210,  979, 2639,  211, 2639,
+     1132, 1253,  606, 1263,  697, 2637,  895, 1217, 1688, 2636,
+     1259, 1733, 1467, 1472,  901, 1536, 1252, 1261, 1121, 1532,
+     1541, 1795, 1800, 2601,  810, 2580, 1556, 1849, 1535, 1573,
+     1473, 1474, 1570, 1543, 1566, 2536, 3832,  778,  832,  913,
+
+      982,  984,  989, 3832, 1585, 2575, 2574, 2450, 2449, 1281,
+     1646, 2503, 2487, 2473, 2473,  585, 2470,  367, 2469,  636,
+     1680, 1136, 3832, 2462, 1679, 2458, 2457, 1854, 1594, 3832,
+     1287, 2414, 2414, 2412, 2410, 2410, 2414, 2416, 2415,  968,
+      510,  598,    0, 2433, 2417, 2418, 2417, 1007, 1161, 1046,
+     1354, 2462, 2455, 1455, 1479, 3832, 1694, 1560, 2454, 1081,
+     1587, 1682, 2453, 1209, 3832, 2400,    0, 2400, 1789, 2456,
+     1711, 1744, 2412, 2397, 2454,  403, 1572, 1430,  374, 1545,
+     1697, 1866, 2449, 1750,  819, 1698, 1753, 1916, 1009, 1757,
+     1789, 1742, 1790, 1921, 1935, 1791, 1942, 1315, 1689, 1584,
+
+     2401, 1091, 2440, 1221, 1244, 1317, 1392, 1509, 2427, 1711,
+     2438, 2375, 2436, 2373, 2434, 2371, 2425, 1757, 3832, 1995,
+     2393, 2388, 1452, 2388, 2383, 2372, 2432, 1266, 1921, 2431,
+      688, 2401, 2378, 2368, 2368, 2420, 1386, 1891, 3832, 2408,
+     1930,  933, 1388, 1711, 2397, 2396, 1417, 3832, 2344,    0,
+     2390, 1944, 2386, 1642, 2386, 2343, 2336, 1841, 1603, 1575,
+     2030, 1957, 1941, 1963, 1959, 1955, 1981, 1986, 1970, 1852,
+     1962, 1979, 1810, 1491, 2389, 1515, 1602, 3832, 2064, 1754,
+     2388, 2387, 2324, 2323, 2384, 2383, 2320, 2316, 2376, 2375,
+     2307, 2306, 2362, 2358, 1791, 1963, 2365, 2314, 2323, 1943,
+
+      760, 2320, 3832, 2324, 2359, 2318, 2296, 2336, 2306, 2316,
+     2290, 1482, 2307, 3832, 2009, 3832, 2340, 3832, 2331, 2073,
+     2336, 2284, 2279, 2328, 1862, 1101, 1720, 1978, 2068, 2076,
+     2077, 2078, 2079, 2091, 3832, 2279, 2317, 1655, 2091, 2316,
+     2320, 2319, 3832, 2260, 2251, 3832, 2241, 2289, 2288, 2236,
+     2293, 2250, 2218, 2227, 2193, 2201,    0, 2181, 2100, 2241,
+     2177, 1793, 1633, 2104, 2086, 1994, 1989, 2103, 2118, 2179,
+     2219, 1681, 2165, 2158, 1878, 2169, 1755, 2146, 2117, 2191,
+     2112, 2052, 2041, 1589, 1812, 2264, 2114, 2127, 2014, 2027,
+     1999, 3832, 1950, 1786, 1961, 2337, 1972,    0, 1910, 1874,
+
+     1993,  598, 2410, 2075, 2089, 2113, 2135, 1850, 1813, 2106,
+     1804, 1713, 1668, 1635, 1721,  758, 2124, 1625, 1600, 2136,
+     1520, 1489, 2109, 2117, 1380, 1283, 1272, 1235, 1895, 1867,
+     2130, 2163, 1194, 1154, 2144, 2103, 1148, 2158, 2121,    0,
+     1047,  970,  924, 1998, 2187, 2202,    0, 2153,  839, 3832,
+      821, 2126,  787, 3832,  567,  501, 3832, 2172, 2225, 2231,
+     2157,  380,  362, 1923, 2228, 2218,  288, 2178,  944, 2175,
+     2177, 2238, 2239, 2243, 2246, 2289, 2290, 2291, 2293, 2299,
+     2311, 2312, 2315, 2318, 2319, 2216,  190, 3832, 3832, 2480,
+     2499, 2512, 2526, 2545, 2564, 2580, 2599, 2618, 2636, 1881,
+
+     1912, 2027, 2654, 2673, 2031, 2692, 2711, 2730, 2749, 2768,
+     2787, 2806, 2825, 2844, 2856, 2875, 2894, 2913, 2932, 2940,
+     2169, 2955, 2971, 2990, 3009, 3028, 3047, 3066, 3085, 3104,
+     3123, 3142, 3161, 3180, 3192, 3211, 3230, 3249, 3268, 3284,
+     3299, 3315, 3334, 3350, 3369, 3388, 3407, 3426, 3445, 3464,
+     3483, 3502, 3521, 3540, 3559, 3578, 3593, 3612, 3631, 3646,
+     3660, 3679, 3698, 3717, 3736, 3755, 3774, 3793
     } ;
 
-static yyconst flex_int16_t yy_def[767] =
+static yyconst flex_int16_t yy_def[769] =
     {   0,
-      687,  687,  687,  687,  687,  687,  688,  689,  687,  690,
-      688,  687,   12,  691,  688,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,  692,  688,   26,   26,   26,   26,
-       26,   26,   26,   26,   26,   26,   26,  688,  688,  688,
-      688,  688,  693,  687,  694,  694,  687,   47,  691,  694,
-       50,   50,   50,   50,   50,   50,   50,   50,   50,  694,
+      689,  689,  689,  689,  689,  689,  690,  691,  689,  692,
+      690,  689,   12,  693,  690,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,  694,  690,   26,   26,   26,   26,
+       26,   26,   26,   26,   26,   26,   26,  690,  690,  690,
+      690,  690,  695,  689,  696,  696,  689,   47,  693,  696,
+       50,   50,   50,   50,   50,   50,   50,   50,   50,  696,
        60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
-       60,  694,  694,  694,  694,  694,  693,  687,  687,  688,
-      695,  696,  695,  687,  687,  687,  687,  687,  688,  687,
-      688,  687,  697,  697,  688,  697,  687,   12,  687,  688,
-
-      691,  687,  698,  688,  699,  688,  700,  106,  687,  106,
-      106,  688,  688,  688,  106,  104,  688,  106,  688,  106,
-      701,  692,  701,  702,  687,  688,  687,  703,  688,  688,
-      688,  688,  688,  688,  688,  688,  688,  688,  693,  704,
-      693,  687,  705,  694,  687,  694,  694,  687,  694,  687,
-      687,  694,  706,  694,  154,  700,  155,  155,  155,  694,
-      694,  694,  155,  154,  694,  155,  694,  155,  154,  687,
-      703,  154,  687,  694,  694,  694,  694,  694,  694,  694,
-      694,  693,  687,  707,  708,  708,  709,  710,  707,  707,
-      711,  712,  687,  713,  713,  687,  687,  687,  688,  688,
-
-      687,  688,  687,  687,  687,  687,  688,  687,  687,  687,
-      688,  687,  688,  713,  688,  687,  688,  687,  687,  687,
-      687,  687,  687,  688,  688,  688,  688,  688,  688,  688,
-      688,  688,  714,  715,  716,  717,  688,  718,  688,  719,
-      718,  688,  239,  688,  720,  720,  688,  246,  688,  688,
-      688,  688,  688,  688,  687,  693,  687,  721,  687,  722,
-      694,  694,  694,  694,  723,  721,  724,  694,  694,  214,
-      694,  269,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  269,  719,  694,  283,  694,  282,  694,  694,
-      694,  694,  694,  694,  693,  687,  687,  725,  726,  727,
-
-      728,  725,  729,  687,  730,  731,  731,  732,  732,  687,
-      733,  687,  687,  687,  688,  687,  687,  687,  687,  687,
-      687,  687,  687,  688,  733,  688,  687,  688,  325,  687,
-      688,  687,  687,  687,  687,  687,  687,  688,  688,  688,
-      687,  688,  688,  688,  688,  688,  688,  734,  734,  735,
-      736,  737,  687,  687,  687,  738,  739,  687,  687,  739,
-      739,  688,  688,  687,  687,  688,  688,  693,  687,  687,
-      687,  687,  687,  740,  687,  694,  741,  741,  694,  694,
-      283,  329,  694,  694,  694,  694,  694,  694,  694,  694,
-      694,  694,  742,  694,  694,  694,  694,  693,  687,  727,
-
-      743,  744,  728,  745,  729,  730,  687,  687,  746,  747,
-      748,  749,  750,  751,  687,  687,  687,  688,  687,  687,
-      687,  687,  687,  687,  688,  688,  687,  688,  687,  688,
-      688,  688,  688,  688,  752,  753,  687,  754,  687,  755,
-      755,  755,  688,  687,  687,  687,  687,  688,  687,  693,
-      687,  687,  687,  687,  687,  756,  741,  741,  694,  694,
-      694,  694,  694,  694,  694,  694,  694,  694,  694,  693,
-      687,  744,  757,  728,  745,  687,  730,  758,  746,  746,
-      747,  747,  748,  748,  749,  749,  750,  750,  751,  751,
-      687,  687,  758,  758,  688,  687,  687,  687,  687,  687,
-
-      687,  688,  759,  687,  687,  687,  687,  688,  688,  688,
-      688,  687,  687,  687,  687,  687,  687,  693,  687,  687,
-      687,  756,  756,  741,  741,  694,  694,  694,  694,  694,
-      694,  693,  687,  687,  757,  744,  730,  687,  687,  687,
-      687,  687,  687,  687,  687,  759,  759,  687,  687,  687,
-      687,  688,  688,  688,  688,  688,  693,  687,  687,  741,
-      741,  694,  694,  694,  694,  694,  693,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  760,  688,  687,
-      687,  741,  741,  761,  694,  693,  687,  687,  687,  687,
-      687,  762,  762,  760,  594,  688,  687,  687,  741,  741,
-
-      761,  762,  601,  694,  693,  687,  687,  762,  594,  594,
-      687,  687,  741,  741,  763,  601,  601,  693,  687,  687,
-      762,  762,  594,  594,  687,  687,  741,  741,  763,  763,
-      601,  601,  693,  687,  687,  762,  762,  594,  764,  687,
-      765,  741,  763,  763,  601,  693,  687,  687,  687,  762,
-      764,  687,  687,  765,  687,  741,  763,  763,  693,  687,
-      687,  741,  763,  693,  687,  741,  693,  766,  766,  766,
-      766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
-      766,  766,  766,  766,  687,  687,    0,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687
+       60,  696,  696,  696,  696,  696,  695,  689,  689,  690,
+      697,  698,  697,  689,  689,  689,  689,  689,  690,  689,
+      690,  689,  699,  699,  690,  699,  689,   12,  689,  690,
+
+      693,  689,  700,  690,  701,  690,  702,  106,  689,  106,
+      106,  690,  690,  690,  106,  104,  690,  106,  690,  106,
+      703,  694,  703,  704,  689,  690,  689,  705,  690,  690,
+      690,  690,  690,  690,  690,  690,  690,  690,  695,  706,
+      695,  689,  707,  696,  689,  696,  696,  689,  696,  689,
+      689,  696,  708,  696,  154,  702,  155,  155,  155,  696,
+      696,  696,  155,  154,  696,  155,  696,  155,  154,  689,
+      705,  154,  689,  696,  696,  696,  696,  696,  696,  696,
+      696,  695,  689,  709,  710,  710,  711,  712,  709,  709,
+      713,  714,  689,  715,  715,  689,  689,  689,  690,  690,
+
+      689,  690,  689,  689,  689,  689,  690,  689,  689,  689,
+      690,  689,  690,  715,  690,  689,  690,  689,  689,  689,
+      689,  689,  689,  690,  690,  690,  690,  690,  690,  690,
+      690,  690,  716,  717,  718,  719,  690,  720,  690,  721,
+      720,  690,  239,  690,  722,  722,  690,  246,  690,  690,
+      690,  690,  690,  690,  689,  695,  689,  723,  689,  724,
+      696,  696,  696,  696,  725,  723,  726,  696,  696,  214,
+      696,  269,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  269,  721,  696,  283,  696,  282,  696,  696,
+      696,  696,  696,  696,  695,  689,  689,  727,  728,  729,
+
+      730,  727,  731,  689,  732,  733,  733,  734,  734,  689,
+      735,  689,  689,  689,  690,  689,  689,  689,  689,  689,
+      689,  689,  689,  690,  735,  690,  689,  690,  325,  689,
+      690,  689,  689,  689,  689,  689,  689,  690,  690,  690,
+      689,  690,  690,  690,  690,  690,  690,  736,  736,  737,
+      738,  739,  689,  690,  689,  689,  740,  741,  689,  689,
+      741,  741,  690,  690,  689,  689,  690,  690,  695,  689,
+      689,  689,  689,  689,  742,  689,  696,  743,  743,  696,
+      696,  283,  329,  696,  696,  696,  696,  696,  696,  696,
+      696,  696,  696,  696,  744,  696,  696,  696,  696,  695,
+
+      689,  729,  745,  746,  730,  747,  731,  732,  689,  689,
+      748,  749,  750,  751,  752,  753,  689,  689,  689,  690,
+      689,  689,  689,  689,  689,  689,  690,  690,  689,  690,
+      689,  690,  690,  690,  690,  690,  754,  755,  689,  756,
+      689,  757,  757,  757,  690,  689,  689,  689,  689,  690,
+      689,  695,  689,  689,  689,  689,  689,  758,  743,  743,
+      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
+      696,  695,  689,  746,  759,  730,  747,  689,  732,  760,
+      748,  748,  749,  749,  750,  750,  751,  751,  752,  752,
+      753,  753,  689,  689,  760,  760,  690,  689,  689,  689,
+
+      689,  689,  689,  690,  761,  689,  689,  689,  689,  690,
+      690,  690,  690,  689,  689,  689,  689,  689,  689,  695,
+      689,  689,  689,  758,  758,  743,  743,  696,  696,  696,
+      696,  696,  696,  695,  689,  689,  759,  746,  732,  689,
+      689,  689,  689,  689,  689,  689,  689,  761,  761,  689,
+      689,  689,  689,  690,  690,  690,  690,  690,  695,  689,
+      689,  743,  743,  696,  696,  696,  696,  696,  695,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  762,
+      690,  689,  689,  743,  743,  763,  696,  695,  689,  689,
+      689,  689,  689,  764,  764,  762,  596,  690,  689,  689,
+
+      743,  743,  763,  764,  603,  696,  695,  689,  689,  764,
+      596,  596,  689,  689,  743,  743,  765,  603,  603,  695,
+      689,  689,  764,  764,  596,  596,  689,  689,  743,  743,
+      765,  765,  603,  603,  695,  689,  689,  764,  764,  596,
+      766,  689,  767,  743,  765,  765,  603,  695,  689,  689,
+      689,  764,  766,  689,  689,  767,  689,  743,  765,  765,
+      695,  689,  689,  743,  765,  695,  689,  743,  695,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  689,  689,    0,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689
     } ;
 
-static yyconst flex_int16_t yy_nxt[3889] =
+static yyconst flex_int16_t yy_nxt[3906] =
     {   0,
         4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
         4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
@@ -765,36 +765,36 @@ static yyconst flex_int16_t yy_nxt[3889] =
        45,   76,   45,   45,   77,    4,   78,   79,   79,   79,
        79,   82,   85,   86,   88,  113,  116,   80,   83,   83,
        83,   83,  109,  260,   89,   93,   90,   91,   78,  145,
-      164,   92,   93,   93,   94,   80,  208,  687,  114,   80,
-      117,  208,  687,  209,   95,   96,   97,   98,   98,   98,
-       98,   99,  686,  109,  165,  100,  100,  100,  100,  100,
+      164,   92,   93,   93,   94,   80,  208,  689,  114,   80,
+      117,  208,  689,  209,   95,   96,   97,   98,   98,   98,
+       98,   99,  688,  109,  165,  100,  100,  100,  100,  100,
 
       100,  100,  100,   80,  100,   80,   80,  100,  100,  100,
        80,   80,  100,   80,  109,  109,  110,  100,  100,  100,
       100,  100,  100,  100,  100,  100,  100,  100,  100,   80,
       100,  100,  100,  100,  100,   80,   80,   80,   80,   80,
        80,   80,  103,  120,  104,  135,  105,  106,  106,  106,
-      106,  107,  365,  131,  103,  130,  130,  102,  153,  130,
-      133,  131,  131,  372,  130,  130,  130,  109,  132,  158,
-      131,  131,  373,  104,  130,  130,  130,  108,  108,  108,
+      106,  107,  366,  131,  103,  130,  130,  102,  153,  130,
+      133,  131,  131,  373,  130,  130,  130,  109,  132,  158,
+      131,  131,  374,  104,  130,  130,  130,  108,  108,  108,
       108,  108,  108,  108,  108,  108,  108,  108,  108,  131,
-      131,  174,  136,  173,  173,  130,  130,  130,  176,  366,
+      131,  174,  136,  173,  173,  130,  130,  130,  176,  367,
 
       104,  121,  122,  122,  122,  121,  121,  121,  121,  121,
       121,  121,  121,  121,  123,  121,  121,  138,  187,  188,
       113,  121,  121,  121,  121,  131,  131,  130,  130,  130,
-      131,  131,  131,  131,  109,  130,  130,  130,  639,  130,
+      131,  131,  131,  131,  109,  130,  130,  130,  641,  130,
       130,  130,  112,  114,  121,  125,  121,  131,  131,  131,
       131,  131,  131,  140,   93,  130,  130,  130,  130,  130,
-      130,  130,  130,  161,  144,  233,  687,  141,  141,  141,
+      130,  130,  130,  161,  144,  233,  689,  141,  141,  141,
       141,  145,  121,  121,  126,  109,  102,  127,  127,  127,
       127,  128,   88,  208,  168,  209,  162,   80,   79,   79,
        79,   79,  146,   80,   90,  147,  125,  174,  174,  148,
 
-      173,  173,  173,  129,  456,  145,  456,  130,  130,  131,
-      131,  131,  131,  131,  131,  131,  131,  131,  131,  665,
+      173,  173,  173,  129,  458,  145,  458,  130,  130,  131,
+      131,  131,  131,  131,  131,  131,  131,  131,  131,  667,
       173,  199,  200,  142,  174,  174,  173,  173,  173,  175,
-      129,   93,   93,   94,  458,  180,  337,  140,   80,  533,
+      129,   93,   93,   94,  460,  180,  337,  140,   80,  535,
       191,  160,  337,  149,   96,   97,  150,  150,  150,  150,
       151,   93,   93,   93,  152,  152,  152,  152,  152,  152,
       152,  152,  144,  152,  144,  144,  152,  152,  152,  144,
@@ -802,381 +802,384 @@ static yyconst flex_int16_t yy_nxt[3889] =
       152,  152,  152,  152,  152,  152,  152,  152,  144,  152,
       152,  152,  152,  152,  144,  144,  144,  144,  144,  144,
 
-      144,   80,  192,  655,  103,   80,  154,  142,  105,  155,
+      144,   80,  192,  657,  103,   80,  154,  142,  105,  155,
       155,  155,  155,  156,  174,  174,  103,  145,  173,  173,
       173,  174,  174,  174,  174,   80,   80,  173,  173,  173,
-      173,  173,  173,  261,  262,  154,  429,  145,  145,  157,
+      173,  173,  173,  261,  262,  154,  431,  145,  145,  157,
       157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  174,  174,  260,  174,  174,  266,  267,  429,  173,
+      157,  174,  174,  260,  174,  174,  266,  267,  431,  173,
       173,  173,  154,   80,  173,  173,  161,  201,  169,  174,
       174,  170,  170,  170,  170,  171,  174,  174,  173,  173,
       173,  173,  173,  173,   80,  349,   80,   80,  196,  162,
-      197,  178,  185,  297,  409,  198,  145,  172,  145,  145,
+      197,  178,  185,  297,  411,  198,  145,  172,  145,  145,
 
       102,  173,  173,  174,  174,  174,  174,  174,  174,  174,
       174,  174,  174,  109,   80,   80,  125,  140,   80,  187,
-      298,  661,  177,  263,  172,   80,  145,  145,  182,  430,
+      298,  663,  177,  263,  172,   80,  145,  145,  182,  432,
       145,  141,  141,  141,  141,  187,  298,  145,  179,  185,
-       93,   93,   93,   93,  167,  411,  189,  189,  189,  189,
-      190,  431,  204,   80,  205,  687,  410,  276,  614,  206,
-      687,  300,  301,  181,  217,  217,  217,  217,  217,  217,
+       93,   93,   93,   93,  167,  413,  189,  189,  189,  189,
+      190,  433,  204,   80,  205,  689,  412,  276,  616,  206,
+      689,  300,  301,  181,  217,  217,  217,  217,  217,  217,
       217,  217,  217,  217,  217,  217,  247,  247,  247,  247,
       217,  217,  217,  217,   80,  303,  304,  142,  107,   80,
       105,  194,  194,  194,  194,  107,  145,  264,  224,  266,
 
-      267,  145,  272,  272,  272,  272,  225,  412,   80,  217,
-      217,  217,  217,  217,  217,  217,  217,  107,  232,  506,
+      267,  145,  272,  272,  272,  272,  225,  414,   80,  217,
+      217,  217,  217,  217,  217,  217,  217,  107,  232,  508,
       145,  195,  195,  195,  195,  195,  195,  195,  195,  195,
       195,  195,  195,  247,  247,  247,  247,  247,  247,  247,
-      247,  507,  276,  351,  107,  211,  211,  211,  211,  211,
+      247,  509,  276,  351,  107,  211,  211,  211,  211,  211,
       211,  211,  211,  211,  211,  211,  211,  213,  228,  140,
       102,  230,  341,  251,  214,  277,  272,  272,  272,  272,
        80,  252,   80,  141,  141,  141,  141,  256,  272,  272,
-      272,  272,  145,  352,  145,  342,  213,  303,  304,  652,
+      272,  272,  145,  352,  145,  342,  213,  303,  304,  654,
       215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
 
-      215,  215,  321,  272,  272,  272,  272,  342,  273,  544,
-      275,   80,  322,  213,  218,  277,  219,  628,   80,  322,
-      355,  220,  221,  145,  501,  222,  279,   80,  223,  142,
+      215,  215,  321,  272,  272,  272,  272,  342,  273,  546,
+      275,   80,  322,  213,  218,  277,  219,  630,   80,  322,
+      356,  220,  221,  145,  503,  222,  279,   80,  223,  142,
       145,   80,  272,  272,  272,  272,  218,  274,  219,  145,
       263,  300,  301,  145,  220,  221,  323,  323,  323,  323,
       222,  272,  272,  272,  272,  223,  121,  122,  122,  122,
       121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
-      121,  121,   80,   80,   80,  460,  121,  121,  121,  121,
-      279,  660,   80,  293,  145,  145,  145,  140,  648,  281,
+      121,  121,   80,   80,   80,  462,  121,  121,  121,  121,
+      279,  662,   80,  293,  145,  145,  145,  140,  650,  281,
       288,  288,  288,  288,  145,  214,   80,  102,  295,  121,
 
       125,  121,  214,   80,  288,  288,  288,  288,  145,   80,
       280,  288,  288,  288,  288,  145,  324,  324,  324,  324,
-      294,  145,  401,  402,  214,  263,  655,  121,  121,  121,
+      294,  145,  403,  404,  214,  263,  657,  121,  121,  121,
       234,  234,  234,  235,  291,  121,  121,  121,  121,  121,
-      121,  687,  441,  121,  121,  292,  653,  377,  687,  121,
-      121,  214,  121,  185,  297,  442,  378,  142,  185,  297,
-      189,  189,  189,  189,  190,  305,  305,  305,  305,  386,
-      687,  427,  121,  125,  325,  325,  325,  325,  326,  326,
+      121,  689,  443,  121,  121,  292,  670,  378,  689,  121,
+      121,  214,  121,  185,  297,  444,  379,  142,  185,  297,
+      189,  189,  189,  189,  190,  305,  305,  305,  305,  387,
+      689,  429,  121,  125,  325,  325,  325,  325,  326,  326,
       326,  326,  327,  327,  327,  327,  326,  326,  326,  326,
-      356,  356,  356,  356,  404,  188,  504,  687,  303,  304,
+      370,  406,  188,  303,  304,  371,  372,  689,  406,  188,
 
       121,  121,  237,  237,  237,  237,  237,  237,  237,  237,
-      237,  237,  237,  237,   80,  238,  404,  188,  338,  239,
-      349,  504,   80,   80,   80,   80,  240,  428,  241,  652,
+      237,  237,  237,  237,   80,  238,  142,   80,  338,  239,
+      349,  655,   80,   80,   80,   80,  240,  430,  241,  145,
       242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
-      242,  242,  242,  242,  242,  242,  242,  242,  243,  649,
+      242,  242,  242,  242,  242,  242,  242,  242,  243,  654,
       351,  125,  244,  244,  244,  244,  244,  244,  244,  244,
-      244,  244,  244,  244,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,  239,   80,  130,  130,  130,
+      244,  244,  244,  244,  242,  242,  242,  242,  242,  242,
+      242,  242,  242,  242,  242,  243,  242,  130,  130,  130,
       130,  130,  130,  130,  130,  130,  130,  130,  130,  246,
-      352,  326,  326,  326,  326,  369,  247,  247,  247,  247,
+      352,  326,  326,  326,  326,  366,  247,  247,  247,  247,
 
-      370,  371,  248,  645,  249,  249,  249,  249,  249,  249,
+      403,  404,  248,  102,  249,  249,  249,  249,  249,  249,
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
-      249,  249,  249,  339,  326,  326,  326,  326,  415,   80,
-      250,   93,   93,   93,  376,  316,  401,  402,   80,   80,
-       80,  145,  416,  144,   96,  645,  150,  150,  150,  150,
-      145,  145,  145,  330,  152,  152,  152,  152,  152,  152,
+      249,  249,  249,  339,  326,  326,  326,  326,  356,   80,
+      250,   93,   93,   93,  357,  357,  357,  357,   80,  417,
+       80,  145,  365,  144,   96,  377,  150,  150,  150,  150,
+      145,  562,  145,  418,  152,  152,  152,  152,  152,  152,
       152,  152,  144,  152,  144,  144,  152,  152,  152,  144,
-      144,  152,  144,  347,  435,  365,  152,  152,  152,  152,
+      144,  152,  144,  347,  437,  391,  152,  152,  152,  152,
       152,  152,  152,  152,  152,  152,  152,  152,  144,  152,
       152,  152,  152,  152,  144,  144,  144,  144,  144,  144,
 
-      144,   80,  640,  214,  639,  125,  311,  311,  311,  311,
-      214,  246,  140,  145,  234,  234,  234,  235,  357,  357,
-      357,  357,  364,  447,  248,   80,  368,  368,  368,  368,
-      473,  474,  214,  379,  379,  379,  379,  145,  638,  268,
+      144,   80,  651,  214,  647,  125,  311,  311,  311,  311,
+      214,  246,  140,  145,  234,  234,  234,  235,  358,  358,
+      358,  358,  647,  449,  248,   80,  369,  369,  369,  369,
+      475,  476,  214,  380,  380,  380,  380,  145,  642,  268,
       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
-      268,  269,  359,  404,  188,  687,  320,  125,  270,  214,
-       80,   80,  687,  687,  687,  687,   80,   80,  687,  364,
-      448,  102,  145,  145,  380,  380,  380,  380,  145,  145,
-      269,  638,  142,  102,  271,  271,  271,  271,  271,  271,
-      271,  271,  271,  271,  271,  271,  687,  407,  407,  407,
+      268,  269,  360,  406,  188,  689,  316,  125,  270,  214,
+       80,   80,  689,  689,  689,  689,  320,   80,  689,   80,
+      450,   80,  145,  145,  390,  381,  381,  381,  381,  145,
+      269,  145,  142,  145,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  689,  409,  409,  409,
 
-      407,  502,  388,  418,  418,  418,  418,  269,  282,  282,
+      409,  504,  389,  420,  420,  420,  420,  269,  282,  282,
       282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
-       80,  238,  635,   80,  502,  283,  634,  457,  144,  144,
-      144,  144,  284,  525,  241,  145,  285,  285,  285,  285,
+       80,  238,  641,   80,  504,  283,  475,  476,  144,  144,
+      144,  144,  284,  640,  241,  145,  285,  285,  285,  285,
       285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
-      285,  285,  285,  285,  286,  436,  436,  436,  287,  287,
+      285,  285,  285,  285,  286,  438,  438,  438,  287,  287,
       287,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
-      144,  283,  144,  173,  173,  173,  173,  173,  173,  173,
-      173,  173,  173,  173,  173,   80,  246,  687,  437,  533,
+      285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
+      285,  286,  285,  173,  173,  173,  173,  173,  173,  173,
+      173,  173,  173,  173,  173,   80,  246,  689,  439,  437,
 
-      144,  473,  474,  288,  288,  288,  288,  145,  534,  248,
-      687,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+      144,  406,  188,  288,  288,  288,  288,  145,  640,  248,
+      689,  289,  289,  289,  289,  289,  289,  289,  289,  289,
       289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-      404,  188,  632,  144,  144,  144,  144,  290,  144,  144,
+      514,  449,  102,  144,  144,  144,  144,  290,  144,  144,
       144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
       144,  144,  144,  144,  144,  144,  144,  144,  215,  215,
       215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
-      328,  440,  440,  440,  440,   80,  447,  329,  631,  330,
-       80,   80,   80,  380,  380,  380,  380,  145,  380,  380,
-      380,  380,  145,  145,  145,  185,  476,  102,  626,  328,
-
-      477,  625,  498,  331,  331,  331,  331,  331,  331,  331,
-      331,  331,  331,  331,  331,  384,  498,  498,  624,  360,
-      385,  384,  385,  446,  473,  474,  328,  121,  234,  234,
-      234,  235,  361,  121,  121,  121,  121,  121,  121,  341,
-       80,  121,  121,   80,   80,  389,   80,  121,  121,   80,
-      121,   80,  145,  524,  397,  145,  145,   80,  145,  623,
-      445,  145,  387,  145,   80,  380,  380,  380,  380,  145,
-      121,  125,  393,  393,  393,  393,  145,  404,  188,   80,
-       88,   80,  473,  474,  387,  140,  620,  365,  441,  390,
-      451,  145,   90,  145,  687,  391,  398,   92,  121,  121,
-
-      246,  687,  185,  297,  523,  375,  523,  687,  392,  406,
-      406,  406,  406,  248,  392,  249,  249,  249,  249,  249,
+      328,  357,  357,  357,  357,   80,  459,  329,  448,  330,
+       80,   80,   80,  381,  381,  381,  381,  145,  381,  381,
+      381,  381,  145,  145,  145,  442,  442,  442,  442,  328,
+
+      475,  476,  500,  331,  331,  331,  331,  331,  331,  331,
+      331,  331,  331,  331,  331,  385,  500,  500,  185,  478,
+      386,  385,  386,  479,  406,  188,  328,  121,  234,  234,
+      234,  235,  556,  121,  121,  121,  121,  121,  121,  341,
+       80,  121,  121,   80,   80,  365,  557,  121,  121,   80,
+      121,   80,  145,   80,  637,  145,  145,  381,  381,  381,
+      381,  145,  388,  145,   80,  145,  356,  330,  140,  361,
+      121,  125,  395,  395,  395,  395,  145,  102,   80,  400,
+       80,   80,  362,  399,  388,  636,  140,  366,  263,  392,
+      145,  102,  145,  145,  185,  297,  689,  472,  121,  121,
+
+      246,  408,  408,  408,  408,  102,  393,  689,  393,  689,
+      447,  475,  476,  248,  689,  249,  249,  249,  249,  249,
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
-      249,  249,  249,  249,  396,  687,  478,  478,  478,  478,
-      619,  250,  244,  244,  244,  244,  244,  244,  244,  244,
-      244,  244,  244,  244,  360,  142,  473,  474,  204,  329,
-      205,  436,  436,  436,  102,  206,  329,  361,  330,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  362,  362,
-      362,  362,  362,  362,  362,  362,  362,  362,  329,  413,
-      612,  687,  329,  322,   80,  363,   80,  435,  687,  329,
-
-      322,  687,   80,  441,  437,  554,  145,   80,  145,  360,
-       80,   80,   80,   80,  452,  329,  442,   80,   80,  555,
-      687,  329,  687,  263,  453,  263,   97,  583,  512,  145,
-      145,   99,  417,  413,  271,  271,  271,  271,  271,  271,
-      271,  271,  271,  271,  271,  271,  381,  687,  329,   80,
-      687,  414,   80,  382,   80,  330,   80,  459,  459,  459,
-      459,  145,   80,  441,  145,  493,  145,  144,  145,  102,
-      144,  144,  144,  144,  145,  381,  442,  463,  494,  383,
-      383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
-      383,  140,  523,  375,  523,  414,  498,   80,  466,  464,
-
-      461,   80,  381,   80,  246,  450,  450,  450,  450,  145,
-      498,  498,  102,  145,  102,  145,  102,  248,  599,  289,
+      249,  249,  249,  249,  398,  102,  689,  689,  142,  527,
+      601,  250,  354,  354,  354,  354,  354,  354,  354,  354,
+      354,  354,  354,  354,  361,  204,  142,  205,  634,  329,
+      633,  526,  206,  689,  475,  476,  329,  362,  330,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  329,  415,
+      415,  361,  329,  322,  628,  364,   80,   80,  585,  329,
+
+      322,  689,   80,  443,  689,   80,   80,   80,  145,  145,
+       80,   80,   80,   80,   88,  329,  444,  145,  145,  419,
+      443,  329,  102,  102,  453,  627,   90,  480,  480,  480,
+      480,   92,  689,  689,  271,  271,  271,  271,  271,  271,
+      271,  271,  271,  271,  271,  271,  382,  454,  329,  263,
+       80,  416,  416,  383,  463,  330,  429,  455,   80,   97,
+      493,   80,  145,  495,   99,   80,  461,  461,  461,  461,
+      145,  626,  494,  145,  563,  382,  496,  145,  629,  384,
+      384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
+      384,  140,  468,  506,  263,  102,  584,   80,   80,   80,
+
+      689,  448,  382,   80,  246,  452,  452,  452,  452,  145,
+      145,  145,  464,  689,  102,  145,  610,  248,  506,  289,
       289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-      289,  289,  289,  289,  289,  289,  289,  289,  102,  582,
-      102,  465,  611,  467,  102,  290,  287,  287,  287,  287,
-      287,  287,  287,  287,  287,  287,  287,  287,  360,  607,
-       80,  142,  446,  590,  560,  606,  561,  627,  102,  642,
-      533,  361,  145,  394,  394,  394,  394,  394,  394,  394,
-      394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
-      394,  394,  513,  513,  513,  666,  600,  210,  210,  395,
+      289,  289,  289,  289,  289,  289,  289,  289,  610,  625,
+      469,  467,  525,  376,  525,  290,  394,  394,  394,  394,
+      394,  394,  394,  394,  394,  394,  394,  394,  361,  535,
+       80,  142,  518,  525,  376,  525,  602,  622,  536,  102,
+      644,  362,  145,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  438,  438,  438,  210,  210,  102,  621,  397,
 
       331,  331,  331,  331,  331,  331,  331,  331,  331,  331,
-      331,  331,  383,  383,  383,  383,  383,  383,  383,  383,
-      383,  383,  383,  383,  427,   80,  491,   80,  503,   80,
-      140,  447,  140,   80,  598,  514,   80,  145,  492,  145,
-       80,  145,  518,  470,  109,  145,  427,   80,  145,   80,
-      608,   80,  145,  109,  597,   80,  528,  504,   80,  145,
-      527,  145,   80,  145,  516,   80,  505,  145,  687,  596,
-      145,  668,  608,  140,  145,  493,  140,  145,  469,  263,
-      462,  687,  504,  527,  532,  185,  297,  567,  687,  529,
-      608,  530,  537,  537,  537,  537,  513,  513,  513,   80,
-
-      519,  541,  142,  493,  140,  531,  140,  670,  212,  212,
-      592,  145,  608,  216,  216,  586,  494,  605,  495,  495,
-      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
-      495,  495,  495,  495,  495,  495,  495,   80,  493,  514,
-       80,  142,  592,  142,  245,  245,  142,  591,  102,  145,
-      573,  494,  145,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  526,  526,  526,
-      526,  526,  140,   80,  142,  588,  142,  255,  177,   80,
-       80,   80,   80,  589,   80,  145,  557,  557,  557,  557,
-       80,  145,  145,  145,  145,  140,  145,  590,  185,  476,
-
-      613,  609,  145,   80,  562,  537,  537,  537,  537,  557,
-      557,  557,  557,  584,   80,  145,   80,  615,   80,  566,
-      375,  616,  564,  610,  608,  608,  145,  140,  145,  636,
-      145,  565,  102,  621,  140,  563,  565,  647,  618,  608,
-      584,  375,  142,  617,  608,  633,  608,  608,  630,  140,
-      650,  648,  608,  637,  102,  622,  140,  102,  604,  670,
-      646,  608,  354,  354,  540,  519,  608,  659,  375,  630,
-      630,  585,  593,  593,  608,  593,  593,  593,  593,  593,
-      641,  593,  593,  593,  593,  608,  593,  593,  608,  587,
-      643,  630,  593,  593,  593,  593,  630,  142,  581,  102,
-
-      580,  670,  595,  656,  142,  650,  579,  608,  375,  662,
-      608,  375,  644,  555,  375,  593,  593,  593,  630,  142,
-      578,  140,  140,  578,  595,  577,  142,  576,  575,  255,
-      574,  547,  664,  667,  375,  375,  630,  663,  547,  630,
-      573,  657,  630,  593,  593,  593,  593,  641,  593,  593,
-      593,  593,  593,  594,  593,  593,  593,  593,  630,  593,
-      593,  630,  630,  630,  630,  602,  593,  593,  593,  572,
-      658,  685,  670,  571,  570,  603,  670,  569,  541,  536,
-      568,  375,  663,  671,  630,  630,  559,  672,  593,  593,
-      593,  142,  142,  558,  670,  670,  670,  603,  670,  670,
-
-      257,  670,  670,  670,  670,  673,  674,  675,  446,  676,
-      677,  516,  678,  679,  680,  681,  593,  593,  593,  593,
-      556,  593,  593,  593,  593,  593,  553,  593,  593,  593,
-      593,  552,  593,  593,  670,  551,  550,  549,  593,  593,
-      593,  593,  255,  548,  547,  682,  255,  670,  595,  670,
-      134,  545,  543,  542,  541,  540,  539,  490,  683,  490,
-      684,  593,  593,  593,  255,  255,  255,  488,  255,  255,
-      595,  255,  255,  255,  255,  488,  486,  486,  484,  484,
-      482,  482,  480,  480,  536,  521,  520,  208,  201,  593,
-      593,  593,  593,  364,  593,  593,  593,  593,  593,  594,
-
-      593,  593,  593,  593,  255,  593,  593,  517,  446,  516,
-      439,  602,  593,  593,  593,  109,  511,  255,  510,  255,
-      509,  603,  508,  427,  109,  501,  500,  499,  497,  496,
-      416,  490,  488,  486,  593,  593,  593,  484,  482,  480,
-      417,  297,  471,  603,  260,  375,  455,  454,   84,  202,
-      449,  446,  364,  355,  439,  434,  433,  432,  202,  426,
-      425,  424,  593,  593,   80,  423,  422,  421,   80,   80,
-      420,  419,   80,   80,   80,   80,   80,   80,   80,   80,
-       81,   81,   81,   81,   81,  330,   81,   81,   81,   81,
-       81,   81,   81,   81,   81,   81,   81,   81,   81,   87,
-
-       87,  417,  330,  208,   87,   87,   87,  101,  101,  101,
+      331,  331,  384,  384,  384,  384,  384,  384,  384,  384,
+      384,  384,  384,  384,   80,  102,  212,  212,  591,   80,
+      505,  515,  515,  515,  614,  439,  145,  395,  395,  395,
+      395,  145,  592,   80,  443,  643,  140,  465,  144,   80,
+       80,  144,  144,  144,  144,  145,  449,  444,  520,  506,
+      109,  145,  145,   80,  613,   80,  429,   80,  507,  466,
+       80,   80,  495,  109,  516,  145,  529,  145,   80,  145,
+      668,  140,  145,  145,  506,  689,   80,  530,  543,   80,
+      145,  610,  534,  500,   80,  102,  611,   80,  145,  529,
+
+      102,  145,   80,  471,  495,  531,  145,  500,  500,  145,
+      515,  515,  515,  610,  145,  609,  521,  496,  612,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,  497,  497,
+      497,  497,  497,  497,  497,  497,  497,  497,   80,  495,
+      532,  216,  216,  567,  533,  245,  245,  615,  592,  658,
+      145,  142,  496,  516,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  528,  528,  528,  528,  528,  528,  528,
+      528,  528,  528,  185,  297,  140,   80,  608,  617,  535,
+      539,  539,  539,  539,   80,   80,   80,   80,  145,  559,
+      559,  559,  559,  140,   80,  600,  145,  145,  145,  145,
+
+      185,  478,  140,  599,  569,  610,  145,  539,  539,  539,
+      539,   80,   80,  618,  177,  564,  559,  559,  559,  559,
+      140,   80,   80,  145,  145,  568,  376,  610,  566,  140,
+      623,  588,  376,  145,  145,  619,  610,  140,  140,  610,
+      607,  565,  567,  586,  638,  142,  140,  610,  620,  635,
+      586,  610,  624,  649,  632,  140,  610,  648,  610,  140,
+      632,  610,  598,  142,  606,  376,  661,  650,  587,  610,
+      666,  652,  521,  610,  102,  639,  632,  672,  610,  672,
+      102,  594,  632,  355,  355,  594,  652,  645,  610,  376,
+      142,  595,  595,  632,  595,  595,  595,  595,  595,  142,
+
+      595,  595,  595,  595,  376,  595,  595,  142,  142,  646,
+      610,  595,  595,  595,  595,  632,  142,  632,  672,  593,
+      140,  597,  659,  575,  590,  142,  664,  376,  643,  142,
+      376,  669,  632,  376,  595,  595,  595,  542,  589,  632,
+      672,  672,  583,  597,  582,  672,  581,  255,  672,  255,
+      557,  673,  674,  665,  632,  632,  675,  580,  632,  676,
+      660,  632,  595,  595,  595,  595,  580,  595,  595,  595,
+      595,  595,  596,  595,  595,  595,  595,  632,  595,  595,
+      632,  665,  579,  632,  604,  595,  595,  595,  687,  578,
+      142,  672,  672,  672,  605,  672,  577,  576,  549,  549,
+
+      575,  672,  677,  678,  679,  574,  680,  595,  595,  595,
+      255,  255,  681,  672,  672,  255,  605,  672,  255,  573,
+      672,  672,  572,  571,  682,  683,  543,  538,  684,  570,
+      376,  685,  686,  561,  560,  595,  595,  595,  595,  257,
+      595,  595,  595,  595,  595,  448,  595,  595,  595,  595,
+      518,  595,  595,  558,  555,  554,  553,  595,  595,  595,
+      595,  255,  255,  255,  552,  255,  551,  597,  550,  549,
+      134,  255,  547,  545,  544,  543,  542,  541,  492,  492,
+      595,  595,  595,  255,  255,  490,  490,  255,  488,  597,
+      255,  255,  488,  486,  486,  484,  484,  482,  482,  538,
+
+      523,  522,  208,  201,  365,  519,  448,  518,  595,  595,
+      595,  595,  441,  595,  595,  595,  595,  595,  596,  595,
+      595,  595,  595,  109,  595,  595,  513,  512,  511,  510,
+      604,  595,  595,  595,  429,  109,  503,  502,  501,  499,
+      605,  498,  418,  492,  490,  488,  486,  484,  482,  419,
+      297,  473,  260,  595,  595,  595,  376,  457,  456,   84,
+      202,  451,  605,  448,  365,  356,  441,  436,  435,  434,
+      202,  428,  427,  426,  425,  424,  423,  422,  421,  330,
+      419,  595,  595,   80,  330,  208,  208,   80,   80,  202,
+      201,   80,   80,   80,   80,   80,   80,   80,   80,   81,
+
+       81,   81,   81,   81,  201,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   81,   81,   81,   87,   87,
+      201,  309,  309,   87,   87,   87,  101,  101,  101,  101,
       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  124,  124,  124,  124,
+      101,  101,  101,  101,  101,  124,  124,  124,  124,  124,
       124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  139,  139,  139,  139,  139,
+      124,  124,  124,  124,  139,  139,  139,  139,  139,  139,
       139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
-      139,  139,  139,  139,  144,  208,  202,  201,  144,  144,
-      144,  201,  144,  144,  144,  144,  144,  144,  144,  144,
-      184,  184,  184,  184,  184,  201,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  186,
+      139,  139,  139,  144,  307,  307,  401,  144,  144,  144,
+      356,  144,  144,  144,  144,  144,  144,  144,  144,  184,
 
+      184,  184,  184,  184,  260,  184,  184,  184,  184,  184,
+      184,  184,  184,  184,  184,  184,  184,  184,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  203,  203,
-      309,  309,  307,  307,  399,  355,  260,  260,  203,  259,
-      375,  203,  203,  259,  203,  121,  121,  121,  121,  121,
+      186,  186,  186,  186,  186,  186,  186,  203,  203,  260,
+      259,  376,  259,  347,  368,  339,  338,  203,  365,  246,
+      203,  203,  356,  203,  121,  121,  121,  121,  121,  121,
       121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
-      121,  121,  121,  121,  236,  236,  236,  236,  236,  236,
+      121,  121,  121,  236,  236,  236,  236,  236,  236,  236,
       236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
-      236,  236,  236,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  140,  258,  258,  258,  258,  258,  258,  258,  258,
+      236,  236,  140,  140,  140,  140,  140,  140,  140,  140,
 
+      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
+      140,  258,  258,  258,  258,  258,  258,  258,  258,  258,
       258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  265,  265,  265,  265,  265,  265,  265,  265,  265,
       265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  184,
       184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  184,  184,  186,
+      184,  184,  184,  184,  184,  184,  184,  184,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  186,  186,  299,  299,
+      186,  186,  186,  186,  186,  186,  186,  299,  299,  299,
       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
-      299,  299,  299,  299,  299,  299,  299,  302,  302,  302,
-      302,  302,  302,  302,  302,  302,  302,  302,  302,  302,
 
-      302,  302,  302,  302,  302,  302,  306,  306,  347,  306,
+      299,  299,  299,  299,  299,  299,  302,  302,  302,  302,
+      302,  302,  302,  302,  302,  302,  302,  302,  302,  302,
+      302,  302,  302,  302,  302,  306,  306,  356,  306,  306,
       306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  308,  308,  367,  308,  308,
+      306,  306,  306,  306,  308,  308,  238,  308,  308,  308,
       308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
-      308,  308,  308,  308,  310,  339,  310,  338,  364,  246,
-      310,  310,  310,  355,  355,  310,  348,  348,  348,  348,
+      308,  308,  308,  310,  346,  310,  345,  344,  343,  310,
+      310,  310,  340,  336,  310,  348,  348,  348,  348,  348,
       348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
-      348,  348,  348,  348,  348,  121,  121,  121,  121,  121,
-      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
-      121,  121,  121,  121,  350,  350,  350,  350,  350,  350,
+      348,  348,  348,  348,  121,  121,  121,  121,  121,  121,
 
+      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
+      121,  121,  121,  350,  350,  350,  350,  350,  350,  350,
       350,  350,  350,  350,  350,  350,  350,  350,  350,  350,
-      350,  350,  350,  236,  236,  236,  236,  236,  236,  236,
+      350,  350,  236,  236,  236,  236,  236,  236,  236,  236,
       236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
-      236,  236,  353,  353,  353,  358,  238,  346,  345,  358,
-      344,  358,  358,  358,  358,  343,  358,  258,  258,  258,
+      236,  353,  353,  353,  353,  353,  353,  353,  353,  359,
+      335,  334,  333,  359,  332,  359,  359,  359,  359,  320,
+      359,  258,  258,  258,  258,  258,  258,  258,  258,  258,
       258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  374,  374,  374,  374,
-      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
-      374,  374,  374,  374,  374,  265,  265,  265,  265,  265,
-      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
 
-      265,  265,  265,  265,  101,  101,  101,  101,  101,  101,
+      375,  375,  375,  375,  375,  375,  375,  375,  375,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
+      265,  265,  265,  265,  265,  265,  265,  265,  101,  101,
       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  302,  302,  302,  302,  302,  302,  302,
+      101,  101,  101,  101,  101,  101,  101,  302,  302,  302,
       302,  302,  302,  302,  302,  302,  302,  302,  302,  302,
-      302,  302,  299,  299,  299,  299,  299,  299,  299,  299,
+      302,  302,  302,  302,  302,  302,  299,  299,  299,  299,
       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
-      299,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      400,  400,  400,  400,  400,  400,  400,  400,  400,  400,
-      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
-      403,  403,  403,  403,  403,  403,  403,  403,  403,  405,
+      299,  299,  299,  299,  299,  402,  402,  402,  402,  402,
+      402,  402,  402,  402,  402,  402,  402,  402,  402,  402,
 
+      402,  402,  402,  402,  405,  405,  405,  405,  405,  405,
       405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
-      405,  405,  405,  405,  405,  405,  405,  405,  184,  184,
+      405,  405,  405,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
+      407,  407,  184,  184,  184,  184,  184,  184,  184,  184,
       184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  184,  306,  306,  340,
+      184,  306,  306,  320,  306,  306,  306,  306,  306,  306,
       306,  306,  306,  306,  306,  306,  306,  306,  306,  306,
-      306,  306,  306,  306,  306,  306,  308,  308,  336,  308,
-      308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
-      308,  308,  308,  308,  308,  408,  335,  408,  408,  334,
-      333,  408,  408,  408,  332,  320,  408,  348,  348,  348,
-      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
+      308,  308,  319,  308,  308,  308,  308,  308,  308,  308,
+      308,  308,  308,  308,  308,  308,  308,  308,  308,  410,
 
-      348,  348,  348,  348,  348,  348,  350,  350,  350,  350,
+      318,  410,  410,  317,  316,  410,  410,  410,  316,  315,
+      410,  348,  348,  348,  348,  348,  348,  348,  348,  348,
+      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
       350,  350,  350,  350,  350,  350,  350,  350,  350,  350,
-      350,  350,  350,  350,  350,  121,  121,  121,  121,  121,
+      350,  350,  350,  350,  350,  350,  350,  350,  350,  121,
       121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
-      121,  121,  121,  121,  438,  438,  438,  438,  438,  438,
-      438,  438,  438,  438,  438,  438,  438,  438,  438,  438,
-      438,  438,  438,  443,  443,  320,  319,  443,  443,  318,
-      443,  443,  443,  443,  443,  443,  443,  443,  443,  444,
-      317,  316,  316,  315,  314,  444,  444,  444,  444,  313,
-      444,  374,  374,  374,  374,  374,  374,  374,  374,  374,
-
-      374,  374,  374,  374,  374,  374,  374,  374,  374,  374,
+      121,  121,  121,  121,  121,  121,  121,  121,  440,  440,
+      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
+      440,  440,  440,  440,  440,  440,  440,  445,  445,  314,
+      313,  445,  445,  312,  445,  445,  445,  445,  445,  445,
+
+      445,  445,  445,  446,  309,  307,  296,  260,  278,  446,
+      446,  446,  446,  260,  446,  375,  375,  375,  375,  375,
+      375,  375,  375,  375,  375,  375,  375,  375,  375,  375,
+      375,  375,  375,  375,  101,  101,  101,  101,  101,  101,
       101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  468,
-      468,  312,  309,  468,  468,  468,  468,  468,  468,  468,
-      468,  468,  468,  468,  468,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
-      401,  401,  401,  401,  472,  472,  472,  472,  472,  472,
-      472,  472,  472,  472,  472,  472,  472,  472,  472,  472,
-      472,  472,  472,  475,  475,  475,  475,  475,  475,  475,
-      475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
-
-      475,  475,  479,  479,  307,  479,  479,  479,  479,  479,
-      479,  479,  479,  479,  479,  479,  479,  479,  479,  479,
-      479,  481,  481,  296,  481,  481,  481,  481,  481,  481,
-      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
-      483,  483,  260,  483,  483,  483,  483,  483,  483,  483,
-      483,  483,  483,  483,  483,  483,  483,  483,  483,  485,
-      485,  278,  485,  485,  485,  485,  485,  485,  485,  485,
-      485,  485,  485,  485,  485,  485,  485,  485,  487,  487,
-      260,  487,  487,  487,  487,  487,  487,  487,  487,  487,
-      487,  487,  487,  487,  487,  487,  487,  489,  489,  260,
+      101,  101,  101,  470,  470,  260,  259,  470,  470,  470,
+      470,  470,  470,  470,  470,  470,  470,  470,  470,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
+      403,  403,  403,  403,  403,  403,  403,  403,  474,  474,
+      474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
 
+      474,  474,  474,  474,  474,  474,  474,  477,  477,  477,
+      477,  477,  477,  477,  477,  477,  477,  477,  477,  477,
+      477,  477,  477,  477,  477,  477,  481,  481,  257,  481,
+      481,  481,  481,  481,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,  481,  481,  483,  483,  255,  483,  483,
+      483,  483,  483,  483,  483,  483,  483,  483,  483,  483,
+      483,  483,  483,  483,  485,  485,  254,  485,  485,  485,
+      485,  485,  485,  485,  485,  485,  485,  485,  485,  485,
+      485,  485,  485,  487,  487,  230,  487,  487,  487,  487,
+      487,  487,  487,  487,  487,  487,  487,  487,  487,  487,
+
+      487,  487,  489,  489,  202,  489,  489,  489,  489,  489,
       489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
-      489,  489,  489,  489,  489,  489,  348,  348,  348,  348,
+      489,  491,  491,  253,  491,  491,  491,  491,  491,  491,
+      491,  491,  491,  491,  491,  491,  491,  491,  491,  491,
       348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
-      348,  348,  348,  348,  348,  121,  121,  121,  121,  121,
+      348,  348,  348,  348,  348,  348,  348,  348,  348,  121,
       121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
-      121,  121,  121,  121,  438,  438,  438,  438,  438,  438,
-      438,  438,  438,  438,  438,  438,  438,  438,  438,  438,
-      438,  438,  438,  515,  259,  257,  255,  254,  230,  515,
-      515,  515,  515,  515,  515,  515,  515,  515,  522,  522,
-      522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
-
-      522,  522,  522,  522,  522,  522,  522,  535,  535,  535,
-      535,  202,  535,  535,  535,  535,  535,  535,  535,  535,
-      535,  535,  535,  535,  535,  535,  538,  253,  228,  125,
-      231,  202,  538,  538,  538,  538,  546,  546,  229,  546,
-      546,  546,  546,  546,  546,  546,  546,  546,  546,  546,
-      546,  546,  546,  546,  546,  594,  594,  227,  594,  594,
-      594,  594,  594,  594,  594,  594,  594,  594,  594,  594,
-      594,  594,  594,  594,  601,  601,  227,  601,  601,  601,
-      601,  601,  601,  601,  601,  601,  601,  601,  601,  601,
-      601,  601,  601,  593,  593,  226,  593,  593,  593,  593,
-
-      593,  593,  593,  593,  593,  593,  593,  593,  593,  593,
-      593,  593,  629,  629,  629,  629,  629,  629,  629,  629,
-      629,  629,  629,  629,  629,  629,  629,  629,  629,  629,
-      629,  651,  651,  651,  651,  651,  651,  651,  651,  651,
-      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  654,
-      654,  654,  654,  654,  654,  654,  654,  654,  654,  669,
-      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
-      669,  669,  669,  669,  669,  669,  669,  669,  102,  208,
-      207,  201,  202,  201,  193,  185,  183,  167,  166,  163,
-
-      160,  159,  143,  119,  137,  134,  119,  118,  115,  112,
-      111,  102,   84,  687,    3,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687
+      121,  121,  121,  121,  121,  121,  121,  121,  440,  440,
+      440,  440,  440,  440,  440,  440,  440,  440,  440,  440,
+      440,  440,  440,  440,  440,  440,  440,  517,  228,  125,
+
+      231,  202,  229,  517,  517,  517,  517,  517,  517,  517,
+      517,  517,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  524,  524,  524,  524,  524,  524,  524,  524,  524,
+      524,  537,  537,  537,  537,  227,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  537,  537,  537,  537,
+      540,  227,  226,  102,  208,  207,  540,  540,  540,  540,
+      548,  548,  201,  548,  548,  548,  548,  548,  548,  548,
+      548,  548,  548,  548,  548,  548,  548,  548,  548,  596,
+      596,  202,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  603,  603,
+
+      201,  603,  603,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  603,  603,  603,  603,  595,  595,  193,
+      595,  595,  595,  595,  595,  595,  595,  595,  595,  595,
+      595,  595,  595,  595,  595,  595,  631,  631,  631,  631,
+      631,  631,  631,  631,  631,  631,  631,  631,  631,  631,
+      631,  631,  631,  631,  631,  653,  653,  653,  653,  653,
+      653,  653,  653,  653,  653,  653,  653,  653,  653,  653,
+      653,  653,  653,  653,  656,  656,  656,  656,  656,  656,
+      656,  656,  656,  656,  656,  656,  656,  656,  656,  656,
+      656,  656,  656,  671,  671,  671,  671,  671,  671,  671,
+
+      671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
+      671,  671,  185,  183,  167,  166,  163,  160,  159,  143,
+      119,  137,  134,  119,  118,  115,  112,  111,  102,   84,
+      689,    3,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+
+      689,  689,  689,  689,  689
     } ;
 
-static yyconst flex_int16_t yy_chk[3889] =
+static yyconst flex_int16_t yy_chk[3906] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1198,7 +1201,7 @@ static yyconst flex_int16_t yy_chk[3889] =
         8,    8,   16,  151,   11,   13,   11,   11,    5,   45,
        56,   11,   12,   12,   12,   13,  151,   13,   19,   12,
        21,   97,   13,   97,   12,   12,   12,   12,   12,   12,
-       12,   12,  685,   24,   56,   12,   12,   12,   12,   12,
+       12,   12,  687,   24,   56,   12,   12,   12,   12,   12,
 
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   27,   51,   16,   12,   12,   12,
@@ -1214,18 +1217,18 @@ static yyconst flex_int16_t yy_chk[3889] =
        15,   25,   25,   25,   25,   25,   25,   25,   25,   25,
        25,   25,   25,   25,   25,   25,   25,   42,   82,   82,
        32,   25,   25,   25,   25,   29,   29,   29,   29,   29,
-       32,   32,   34,   34,   59,   32,   32,   32,  665,   34,
+       32,   32,   34,   34,   59,   32,   32,   32,  667,   34,
        34,   34,   29,   32,   25,   25,   25,   35,   35,   36,
        36,   37,   37,   43,   48,   35,   35,   35,   36,   36,
        36,   37,   37,   54,   48,  123,   48,   43,   43,   43,
-       43,   48,   25,   25,   26,   61,  378,   26,   26,   26,
+       43,   48,   25,   25,   26,   61,  379,   26,   26,   26,
        26,   26,   46,  318,   59,  318,   54,   46,   79,   79,
        79,   79,   46,   74,   46,   46,  123,   64,   64,   46,
 
-       64,   64,   64,   26,  375,   74,  375,   26,   26,   26,
-       26,   26,   26,   26,   26,   26,   26,   26,   26,  661,
+       64,   64,   64,   26,  376,   74,  376,   26,   26,   26,
+       26,   26,   26,   26,   26,   26,   26,   26,   26,  663,
        61,   89,   89,   43,   63,   63,   63,   63,   63,   61,
-       26,   47,   47,   47,  378,   74,  223,  139,   47,  660,
+       26,   47,   47,   47,  379,   74,  223,  139,   47,  662,
        84,   63,  223,   47,   47,   47,   47,   47,   47,   47,
        47,   93,   93,   93,   47,   47,   47,   47,   47,   47,
        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
@@ -1233,7 +1236,7 @@ static yyconst flex_int16_t yy_chk[3889] =
        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
 
-       47,   50,   84,  654,   50,  144,   50,  139,   50,   50,
+       47,   50,   84,  656,   50,  144,   50,  139,   50,   50,
        50,   50,   50,   50,   65,   65,   50,  144,   65,   65,
        65,   67,   67,   68,   68,  146,  152,   67,   67,   67,
        68,   68,   68,  146,  146,   50,  341,  146,  152,   50,
@@ -1244,367 +1247,370 @@ static yyconst flex_int16_t yy_chk[3889] =
        70,   66,   66,   66,   72,  233,   73,   75,   88,   66,
        88,   73,  184,  184,  316,   88,   72,   60,   73,   75,
 
-      600,   60,   60,   60,   60,   60,   60,   60,   60,   60,
+      602,   60,   60,   60,   60,   60,   60,   60,   60,   60,
        60,   60,   60,   76,  263,  147,  233,   77,   76,  185,
-      185,  653,   72,  147,   60,  161,  263,  147,   77,  342,
+      185,  655,   72,  147,   60,  161,  263,  147,   77,  342,
        76,   77,   77,   77,   77,  186,  186,  161,   73,   83,
        94,   94,   94,   98,   75,  320,   83,   83,   83,   83,
-       83,  342,   94,   98,   94,   98,  316,  161,  600,   94,
+       83,  342,   94,   98,   94,   98,  316,  161,  602,   94,
        98,  187,  187,   76,  108,  108,  108,  108,  110,  110,
       110,  110,  111,  111,  111,  111,  131,  131,  131,  131,
       120,  120,  120,  120,  162,  188,  188,   77,   87,  149,
        87,   87,   87,   87,   87,   87,  162,  149,  110,  265,
 
       265,  149,  157,  157,  157,  157,  111,  320,  177,  115,
-      115,  115,  115,  118,  118,  118,  118,   87,  120,  429,
+      115,  115,  115,  118,  118,  118,  118,   87,  120,  431,
       177,   87,   87,   87,   87,   87,   87,   87,   87,   87,
        87,   87,   87,  132,  132,  132,  132,  133,  133,  133,
-      133,  429,  162,  235,   87,  104,  104,  104,  104,  104,
+      133,  431,  162,  235,   87,  104,  104,  104,  104,  104,
       104,  104,  104,  104,  104,  104,  104,  106,  115,  141,
-      614,  118,  227,  132,  106,  177,  163,  163,  163,  163,
+      616,  118,  227,  132,  106,  177,  163,  163,  163,  163,
       180,  133,  160,  141,  141,  141,  141,  141,  158,  158,
-      158,  158,  180,  235,  160,  227,  106,  298,  298,  651,
+      158,  158,  180,  235,  160,  227,  106,  298,  298,  653,
       106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
 
-      106,  106,  209,  159,  159,  159,  159,  227,  158,  499,
-      160,  165,  209,  106,  109,  163,  109,  614,  285,  209,
-      285,  109,  109,  165,  499,  109,  180,  384,  109,  141,
-      285,  178,  166,  166,  166,  166,  109,  159,  109,  384,
+      106,  106,  209,  159,  159,  159,  159,  227,  158,  501,
+      160,  165,  209,  106,  109,  163,  109,  616,  285,  209,
+      285,  109,  109,  165,  501,  109,  180,  385,  109,  141,
+      285,  178,  166,  166,  166,  166,  109,  159,  109,  385,
       165,  299,  299,  178,  109,  109,  210,  210,  210,  210,
       109,  168,  168,  168,  168,  109,  122,  122,  122,  122,
       122,  122,  122,  122,  122,  122,  122,  122,  122,  122,
-      122,  122,  167,  179,  181,  384,  122,  122,  122,  122,
-      166,  649,  174,  178,  167,  179,  181,  182,  647,  168,
+      122,  122,  167,  179,  181,  385,  122,  122,  122,  122,
+      166,  651,  174,  178,  167,  179,  181,  182,  649,  168,
       174,  174,  174,  174,  174,  194,  175,  267,  182,  122,
 
       122,  122,  194,  176,  175,  175,  175,  175,  175,  275,
       167,  176,  176,  176,  176,  176,  211,  211,  211,  211,
-      181,  275,  300,  300,  194,  179,  641,  122,  122,  124,
+      181,  275,  300,  300,  194,  179,  643,  122,  122,  124,
       124,  124,  124,  124,  175,  124,  124,  124,  124,  124,
-      124,  214,  440,  124,  124,  176,  640,  267,  214,  124,
-      124,  194,  124,  189,  189,  440,  267,  182,  190,  190,
+      124,  214,  442,  124,  124,  176,  669,  267,  214,  124,
+      124,  194,  124,  189,  189,  442,  267,  182,  190,  190,
       189,  189,  189,  189,  189,  190,  190,  190,  190,  275,
       214,  340,  124,  124,  212,  212,  212,  212,  215,  215,
       215,  215,  216,  216,  216,  216,  224,  224,  224,  224,
-      244,  244,  244,  244,  301,  301,  575,  214,  302,  302,
+      257,  301,  301,  302,  302,  257,  257,  214,  303,  303,
 
       124,  124,  126,  126,  126,  126,  126,  126,  126,  126,
-      126,  126,  126,  126,  127,  127,  303,  303,  224,  127,
-      348,  575,  127,  127,  127,  127,  127,  340,  127,  639,
+      126,  126,  126,  126,  127,  127,  669,  389,  224,  127,
+      348,  642,  127,  127,  127,  127,  127,  340,  127,  389,
       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
-      127,  127,  127,  127,  127,  127,  127,  127,  127,  635,
+      127,  127,  127,  127,  127,  127,  127,  127,  127,  641,
       350,  348,  127,  127,  127,  127,  127,  127,  127,  127,
       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
       127,  127,  127,  127,  127,  127,  127,  129,  129,  129,
       129,  129,  129,  129,  129,  129,  129,  129,  129,  130,
-      350,  225,  225,  225,  225,  257,  130,  130,  130,  130,
+      350,  225,  225,  225,  225,  360,  130,  130,  130,  130,
 
-      257,  257,  130,  632,  130,  130,  130,  130,  130,  130,
+      402,  402,  130,  526,  130,  130,  130,  130,  130,  130,
       130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
-      130,  130,  130,  225,  232,  232,  232,  232,  322,  261,
-      130,  150,  150,  150,  261,  262,  400,  400,  150,  379,
-      262,  261,  322,  150,  150,  631,  150,  150,  150,  150,
-      150,  379,  262,  379,  150,  150,  150,  150,  150,  150,
+      130,  130,  130,  225,  232,  232,  232,  232,  244,  279,
+      130,  150,  150,  150,  244,  244,  244,  244,  150,  322,
+      261,  279,  360,  150,  150,  261,  150,  150,  150,  150,
+      150,  526,  261,  322,  150,  150,  150,  150,  150,  150,
       150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
-      150,  150,  150,  232,  349,  359,  150,  150,  150,  150,
+      150,  150,  150,  232,  349,  279,  150,  150,  150,  150,
       150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
       150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
 
-      150,  154,  626,  195,  625,  349,  195,  195,  195,  195,
+      150,  154,  637,  195,  634,  349,  195,  195,  195,  195,
       195,  245,  256,  154,  234,  234,  234,  234,  245,  245,
-      245,  245,  359,  363,  245,  268,  256,  256,  256,  256,
-      402,  402,  195,  268,  268,  268,  268,  268,  624,  154,
+      245,  245,  633,  364,  245,  268,  256,  256,  256,  256,
+      404,  404,  195,  268,  268,  268,  268,  268,  628,  154,
       154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
-      154,  155,  245,  403,  403,  246,  264,  234,  155,  195,
-      277,  264,  246,  246,  246,  246,  271,  289,  246,  289,
-      363,  458,  277,  264,  271,  271,  271,  271,  271,  289,
-      155,  623,  256,  377,  155,  155,  155,  155,  155,  155,
+      154,  155,  245,  405,  405,  246,  262,  234,  155,  195,
+      277,  262,  246,  246,  246,  246,  264,  271,  246,  278,
+      364,  264,  277,  262,  278,  271,  271,  271,  271,  271,
+      155,  278,  256,  264,  155,  155,  155,  155,  155,  155,
       155,  155,  155,  155,  155,  155,  246,  310,  310,  310,
 
-      310,  426,  277,  331,  331,  331,  331,  155,  169,  169,
+      310,  428,  277,  331,  331,  331,  331,  155,  169,  169,
       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
-      170,  170,  620,  388,  426,  170,  619,  377,  170,  170,
-      170,  170,  170,  458,  170,  388,  170,  170,  170,  170,
+      170,  170,  627,  398,  428,  170,  406,  406,  170,  170,
+      170,  170,  170,  626,  170,  398,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  351,  351,  351,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
       170,  170,  170,  172,  172,  172,  172,  172,  172,  172,
-      172,  172,  172,  172,  172,  173,  173,  441,  351,  471,
+      172,  172,  172,  172,  172,  173,  173,  443,  351,  437,
 
-      173,  404,  404,  173,  173,  173,  173,  173,  471,  173,
-      441,  173,  173,  173,  173,  173,  173,  173,  173,  173,
+      173,  407,  407,  173,  173,  173,  173,  173,  625,  173,
+      443,  173,  173,  173,  173,  173,  173,  173,  173,  173,
       173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
-      405,  405,  617,  173,  173,  173,  173,  173,  173,  173,
+      437,  447,  378,  173,  173,  173,  173,  173,  173,  173,
       173,  173,  173,  173,  173,  173,  173,  173,  173,  173,
       173,  173,  173,  173,  173,  173,  173,  173,  213,  213,
       213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
-      217,  354,  354,  354,  354,  273,  445,  217,  616,  217,
+      217,  354,  354,  354,  354,  273,  378,  217,  447,  217,
       274,  291,  292,  273,  273,  273,  273,  273,  274,  274,
-      274,  274,  274,  291,  292,  406,  406,  457,  612,  217,
-
-      406,  611,  421,  217,  217,  217,  217,  217,  217,  217,
-      217,  217,  217,  217,  217,  273,  421,  421,  610,  357,
-      274,  291,  292,  445,  472,  472,  217,  236,  236,  236,
-      236,  236,  357,  236,  236,  236,  236,  236,  236,  276,
-      278,  236,  236,  279,  276,  278,  280,  236,  236,  293,
-      236,  294,  278,  457,  293,  279,  276,  281,  280,  609,
-      357,  293,  276,  294,  287,  281,  281,  281,  281,  281,
-      236,  236,  287,  287,  287,  287,  287,  474,  474,  396,
-      370,  290,  475,  475,  276,  295,  607,  290,  442,  279,
-      370,  396,  370,  290,  360,  280,  295,  370,  236,  236,
-
-      237,  442,  305,  305,  456,  456,  456,  360,  294,  305,
-      305,  305,  305,  237,  281,  237,  237,  237,  237,  237,
+      274,  274,  274,  291,  292,  355,  355,  355,  355,  217,
+
+      474,  474,  423,  217,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  273,  423,  423,  408,  408,
+      274,  291,  292,  408,  476,  476,  217,  236,  236,  236,
+      236,  236,  512,  236,  236,  236,  236,  236,  236,  276,
+      280,  236,  236,  289,  276,  289,  512,  236,  236,  281,
+      236,  294,  280,  380,  622,  289,  276,  281,  281,  281,
+      281,  281,  276,  294,  287,  380,  287,  380,  295,  358,
+      236,  236,  287,  287,  287,  287,  287,  460,  293,  295,
+      377,  290,  358,  293,  276,  621,  400,  290,  377,  280,
+      293,  584,  377,  290,  305,  305,  361,  400,  236,  236,
+
+      237,  305,  305,  305,  305,  459,  281,  329,  294,  361,
+      358,  477,  477,  237,  329,  237,  237,  237,  237,  237,
       237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
-      237,  237,  237,  237,  290,  360,  408,  408,  408,  408,
-      606,  237,  239,  239,  239,  239,  239,  239,  239,  239,
-      239,  239,  239,  239,  247,  295,  536,  536,  452,  311,
-      452,  436,  436,  436,  561,  452,  311,  247,  311,  247,
+      237,  237,  237,  237,  290,  563,  329,  361,  295,  460,
+      584,  237,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  247,  454,  400,  454,  619,  311,
+      618,  459,  454,  329,  538,  538,  311,  247,  311,  247,
       247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
       247,  247,  247,  247,  247,  247,  247,  247,  311,  321,
-      598,  329,  325,  321,  389,  247,  269,  435,  329,  325,
-
-      321,  325,  356,  356,  436,  510,  389,  356,  269,  361,
-      356,  356,  356,  356,  371,  311,  356,  376,  380,  510,
-      329,  325,  361,  389,  371,  376,  371,  561,  435,  376,
-      380,  371,  380,  570,  269,  269,  269,  269,  269,  269,
-      269,  269,  269,  269,  269,  269,  272,  329,  325,  383,
-      361,  321,  385,  272,  387,  272,  391,  383,  383,  383,
-      383,  383,  393,  393,  385,  478,  387,  393,  391,  582,
-      393,  393,  393,  393,  393,  272,  393,  387,  478,  272,
+      572,  362,  325,  321,  614,  247,  269,  399,  563,  325,
+
+      321,  325,  357,  357,  362,  381,  386,  357,  269,  399,
+      357,  357,  357,  357,  371,  311,  357,  381,  386,  381,
+      444,  325,  527,  615,  371,  613,  371,  410,  410,  410,
+      410,  371,  362,  444,  269,  269,  269,  269,  269,  269,
+      269,  269,  269,  269,  269,  269,  272,  372,  325,  399,
+      392,  321,  572,  272,  386,  272,  387,  372,  384,  372,
+      418,  387,  392,  480,  372,  390,  384,  384,  384,  384,
+      384,  612,  418,  387,  527,  272,  480,  390,  615,  272,
       272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
-      272,  368,  523,  523,  523,  570,  498,  390,  391,  387,
+      272,  369,  392,  577,  390,  562,  562,  391,  393,  396,
 
-      385,  392,  272,  282,  282,  368,  368,  368,  368,  390,
-      498,  498,  613,  392,  525,  282,  524,  282,  582,  282,
+      495,  396,  272,  282,  282,  369,  369,  369,  369,  391,
+      393,  396,  387,  495,  585,  282,  594,  282,  577,  282,
       282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
-      282,  282,  282,  282,  282,  282,  282,  282,  560,  560,
-      662,  390,  597,  392,  583,  282,  283,  283,  283,  283,
-      283,  283,  283,  283,  283,  283,  283,  283,  288,  591,
-      394,  368,  394,  589,  524,  588,  525,  613,  628,  628,
-      587,  288,  394,  288,  288,  288,  288,  288,  288,  288,
+      282,  282,  282,  282,  282,  282,  282,  282,  594,  611,
+      393,  391,  458,  458,  458,  282,  283,  283,  283,  283,
+      283,  283,  283,  283,  283,  283,  283,  283,  288,  473,
+      470,  369,  470,  525,  525,  525,  585,  609,  473,  630,
+      630,  288,  470,  288,  288,  288,  288,  288,  288,  288,
       288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
-      288,  288,  439,  439,  439,  662,  583,  698,  698,  288,
+      288,  288,  438,  438,  438,  700,  700,  629,  608,  288,
 
       328,  328,  328,  328,  328,  328,  328,  328,  328,  328,
-      328,  328,  381,  381,  381,  381,  381,  381,  381,  381,
-      381,  381,  381,  381,  386,  395,  416,  397,  427,  386,
-      450,  395,  398,  461,  581,  439,  463,  395,  416,  397,
-      465,  386,  450,  398,  460,  461,  462,  464,  463,  460,
-      592,  462,  465,  467,  580,  466,  463,  427,  467,  464,
-      461,  460,  468,  462,  468,  469,  427,  466,  493,  579,
-      467,  667,  592,  470,  468,  494,  532,  469,  395,  397,
-      386,  493,  427,  461,  470,  477,  477,  532,  494,  464,
-      593,  465,  477,  477,  477,  477,  513,  513,  513,  526,
-
-      450,  526,  398,  418,  567,  466,  586,  668,  699,  699,
-      577,  526,  593,  700,  700,  567,  418,  586,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  418,  418,  418,
-      418,  418,  418,  418,  418,  418,  418,  459,  459,  513,
-      527,  667,  576,  470,  703,  703,  532,  574,  599,  459,
-      572,  459,  527,  459,  459,  459,  459,  459,  459,  459,
-      459,  459,  459,  459,  459,  459,  459,  459,  459,  459,
-      459,  459,  518,  528,  567,  571,  586,  668,  527,  529,
-      530,  531,  562,  573,  563,  528,  518,  518,  518,  518,
-      564,  529,  530,  531,  562,  557,  563,  573,  537,  537,
-
-      599,  595,  564,  565,  528,  537,  537,  537,  537,  557,
-      557,  557,  557,  562,  566,  565,  585,  602,  604,  531,
-      615,  603,  530,  595,  621,  622,  566,  605,  585,  621,
-      604,  564,  627,  608,  618,  529,  530,  634,  605,  608,
-      563,  629,  518,  603,  602,  618,  621,  622,  615,  633,
-      636,  634,  636,  622,  642,  608,  646,  656,  585,  669,
-      633,  608,  719,  719,  569,  557,  602,  646,  630,  629,
-      615,  566,  578,  578,  636,  578,  578,  578,  578,  578,
-      627,  578,  578,  578,  578,  637,  578,  578,  650,  568,
-      630,  629,  578,  578,  578,  578,  630,  605,  559,  666,
-
-      558,  684,  578,  642,  618,  637,  556,  637,  643,  656,
-      650,  657,  630,  554,  644,  578,  578,  578,  630,  633,
-      553,  659,  664,  552,  578,  551,  646,  550,  549,  669,
-      548,  547,  659,  664,  658,  663,  643,  657,  546,  657,
-      545,  643,  644,  578,  578,  584,  584,  666,  584,  584,
-      584,  584,  584,  584,  584,  584,  584,  584,  643,  584,
-      584,  657,  658,  663,  644,  584,  584,  584,  584,  543,
-      644,  684,  670,  542,  540,  584,  671,  539,  538,  535,
-      534,  522,  658,  670,  658,  663,  521,  671,  584,  584,
-      584,  659,  664,  520,  672,  673,  674,  584,  675,  676,
-
-      519,  677,  678,  679,  680,  672,  673,  674,  517,  675,
-      676,  515,  677,  678,  679,  680,  584,  584,  594,  594,
-      511,  594,  594,  594,  594,  594,  509,  594,  594,  594,
-      594,  508,  594,  594,  681,  507,  506,  505,  594,  594,
-      594,  594,  670,  504,  503,  681,  671,  682,  594,  683,
-      502,  500,  497,  496,  495,  492,  491,  490,  682,  489,
-      683,  594,  594,  594,  672,  673,  674,  488,  675,  676,
-      594,  677,  678,  679,  680,  487,  486,  485,  484,  483,
-      482,  481,  480,  479,  473,  455,  454,  453,  451,  594,
-      594,  601,  601,  449,  601,  601,  601,  601,  601,  601,
-
-      601,  601,  601,  601,  681,  601,  601,  447,  444,  443,
-      438,  601,  601,  601,  601,  434,  433,  682,  432,  683,
-      431,  601,  430,  428,  425,  424,  423,  422,  420,  419,
-      415,  414,  413,  412,  601,  601,  601,  411,  410,  409,
-      407,  401,  399,  601,  382,  374,  373,  372,  369,  367,
-      365,  362,  358,  353,  352,  347,  346,  345,  344,  339,
-      338,  337,  601,  601,  688,  336,  335,  334,  688,  688,
-      333,  332,  688,  688,  688,  688,  688,  688,  688,  688,
-      689,  689,  689,  689,  689,  327,  689,  689,  689,  689,
-      689,  689,  689,  689,  689,  689,  689,  689,  689,  690,
-
-      690,  326,  324,  319,  690,  690,  690,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  691,  691,  691,  691,
-      691,  691,  691,  691,  691,  691,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  692,  692,  692,  692,  692,
-      692,  692,  692,  692,  692,  693,  693,  693,  693,  693,
+      328,  328,  382,  382,  382,  382,  382,  382,  382,  382,
+      382,  382,  382,  382,  388,  664,  701,  701,  575,  394,
+      429,  441,  441,  441,  600,  438,  388,  394,  394,  394,
+      394,  394,  575,  395,  395,  629,  452,  388,  395,  463,
+      397,  395,  395,  395,  395,  395,  397,  395,  452,  429,
+      462,  463,  397,  466,  599,  462,  464,  465,  429,  388,
+      471,  464,  496,  469,  441,  466,  463,  462,  469,  465,
+      664,  472,  471,  464,  429,  496,  528,  465,  528,  467,
+      469,  595,  472,  500,  468,  601,  597,  567,  528,  463,
+
+      644,  467,  566,  397,  420,  466,  468,  500,  500,  567,
+      515,  515,  515,  595,  566,  593,  452,  420,  597,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  420,  420,
+      420,  420,  420,  420,  420,  420,  420,  420,  461,  461,
+      467,  702,  702,  566,  468,  705,  705,  601,  591,  644,
+      461,  472,  461,  515,  461,  461,  461,  461,  461,  461,
+      461,  461,  461,  461,  461,  461,  461,  461,  461,  461,
+      461,  461,  461,  479,  479,  520,  529,  590,  604,  589,
+      479,  479,  479,  479,  530,  531,  532,  533,  529,  520,
+      520,  520,  520,  534,  565,  583,  530,  531,  532,  533,
+
+      539,  539,  559,  582,  534,  604,  565,  539,  539,  539,
+      539,  568,  564,  605,  529,  530,  559,  559,  559,  559,
+      569,  606,  587,  568,  564,  533,  617,  604,  532,  588,
+      610,  569,  631,  606,  587,  605,  610,  607,  620,  623,
+      588,  531,  532,  564,  623,  520,  635,  624,  607,  620,
+      565,  639,  610,  636,  617,  648,  652,  635,  610,  661,
+      631,  623,  581,  534,  587,  632,  648,  636,  568,  624,
+      661,  639,  559,  639,  658,  624,  617,  670,  652,  671,
+      668,  579,  631,  721,  721,  578,  638,  632,  638,  645,
+      569,  580,  580,  632,  580,  580,  580,  580,  580,  588,
+
+      580,  580,  580,  580,  646,  580,  580,  607,  620,  632,
+      638,  580,  580,  580,  580,  632,  635,  645,  686,  576,
+      666,  580,  645,  574,  573,  648,  658,  659,  668,  661,
+      665,  666,  646,  660,  580,  580,  580,  571,  570,  645,
+      672,  673,  561,  580,  560,  674,  558,  670,  675,  671,
+      556,  672,  673,  659,  646,  659,  674,  555,  665,  675,
+      646,  660,  580,  580,  586,  586,  554,  586,  586,  586,
+      586,  586,  586,  586,  586,  586,  586,  659,  586,  586,
+      665,  660,  553,  660,  586,  586,  586,  586,  686,  552,
+      666,  676,  677,  678,  586,  679,  551,  550,  549,  548,
+
+      547,  680,  676,  677,  678,  545,  679,  586,  586,  586,
+      672,  673,  680,  681,  682,  674,  586,  683,  675,  544,
+      684,  685,  542,  541,  681,  682,  540,  537,  683,  536,
+      524,  684,  685,  523,  522,  586,  586,  596,  596,  521,
+      596,  596,  596,  596,  596,  519,  596,  596,  596,  596,
+      517,  596,  596,  513,  511,  510,  509,  596,  596,  596,
+      596,  676,  677,  678,  508,  679,  507,  596,  506,  505,
+      504,  680,  502,  499,  498,  497,  494,  493,  492,  491,
+      596,  596,  596,  681,  682,  490,  489,  683,  488,  596,
+      684,  685,  487,  486,  485,  484,  483,  482,  481,  475,
+
+      457,  456,  455,  453,  451,  449,  446,  445,  596,  596,
+      603,  603,  440,  603,  603,  603,  603,  603,  603,  603,
+      603,  603,  603,  436,  603,  603,  435,  434,  433,  432,
+      603,  603,  603,  603,  430,  427,  426,  425,  424,  422,
+      603,  421,  417,  416,  415,  414,  413,  412,  411,  409,
+      403,  401,  383,  603,  603,  603,  375,  374,  373,  370,
+      368,  366,  603,  363,  359,  353,  352,  347,  346,  345,
+      344,  339,  338,  337,  336,  335,  334,  333,  332,  327,
+      326,  603,  603,  690,  324,  319,  317,  690,  690,  315,
+      314,  690,  690,  690,  690,  690,  690,  690,  690,  691,
+
+      691,  691,  691,  691,  313,  691,  691,  691,  691,  691,
+      691,  691,  691,  691,  691,  691,  691,  691,  692,  692,
+      312,  309,  308,  692,  692,  692,  693,  693,  693,  693,
       693,  693,  693,  693,  693,  693,  693,  693,  693,  693,
-      693,  693,  693,  693,  694,  317,  315,  314,  694,  694,
-      694,  313,  694,  694,  694,  694,  694,  694,  694,  694,
-      695,  695,  695,  695,  695,  312,  695,  695,  695,  695,
-      695,  695,  695,  695,  695,  695,  695,  695,  695,  696,
-
-      696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
-      696,  696,  696,  696,  696,  696,  696,  696,  697,  697,
-      309,  308,  307,  306,  296,  286,  284,  270,  697,  266,
-      260,  697,  697,  258,  697,  701,  701,  701,  701,  701,
-      701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
-      701,  701,  701,  701,  702,  702,  702,  702,  702,  702,
-      702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
-      702,  702,  702,  704,  704,  704,  704,  704,  704,  704,
+      693,  693,  693,  693,  693,  694,  694,  694,  694,  694,
+      694,  694,  694,  694,  694,  694,  694,  694,  694,  694,
+      694,  694,  694,  694,  695,  695,  695,  695,  695,  695,
+      695,  695,  695,  695,  695,  695,  695,  695,  695,  695,
+      695,  695,  695,  696,  307,  306,  296,  696,  696,  696,
+      286,  696,  696,  696,  696,  696,  696,  696,  696,  697,
+
+      697,  697,  697,  697,  284,  697,  697,  697,  697,  697,
+      697,  697,  697,  697,  697,  697,  697,  697,  698,  698,
+      698,  698,  698,  698,  698,  698,  698,  698,  698,  698,
+      698,  698,  698,  698,  698,  698,  698,  699,  699,  270,
+      266,  260,  258,  254,  253,  252,  251,  699,  249,  248,
+      699,  699,  243,  699,  703,  703,  703,  703,  703,  703,
+      703,  703,  703,  703,  703,  703,  703,  703,  703,  703,
+      703,  703,  703,  704,  704,  704,  704,  704,  704,  704,
       704,  704,  704,  704,  704,  704,  704,  704,  704,  704,
-      704,  704,  705,  705,  705,  705,  705,  705,  705,  705,
+      704,  704,  706,  706,  706,  706,  706,  706,  706,  706,
 
-      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
-      705,  706,  706,  706,  706,  706,  706,  706,  706,  706,
       706,  706,  706,  706,  706,  706,  706,  706,  706,  706,
+      706,  707,  707,  707,  707,  707,  707,  707,  707,  707,
       707,  707,  707,  707,  707,  707,  707,  707,  707,  707,
-      707,  707,  707,  707,  707,  707,  707,  707,  707,  708,
       708,  708,  708,  708,  708,  708,  708,  708,  708,  708,
-      708,  708,  708,  708,  708,  708,  708,  708,  709,  709,
+      708,  708,  708,  708,  708,  708,  708,  708,  708,  709,
       709,  709,  709,  709,  709,  709,  709,  709,  709,  709,
-      709,  709,  709,  709,  709,  709,  709,  710,  710,  710,
+      709,  709,  709,  709,  709,  709,  709,  709,  710,  710,
       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
-
-      710,  710,  710,  710,  710,  710,  711,  711,  254,  711,
+      710,  710,  710,  710,  710,  710,  710,  711,  711,  711,
       711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
-      711,  711,  711,  711,  711,  712,  712,  253,  712,  712,
+
+      711,  711,  711,  711,  711,  711,  712,  712,  712,  712,
       712,  712,  712,  712,  712,  712,  712,  712,  712,  712,
-      712,  712,  712,  712,  713,  252,  713,  251,  249,  248,
-      713,  713,  713,  243,  242,  713,  714,  714,  714,  714,
+      712,  712,  712,  712,  712,  713,  713,  242,  713,  713,
+      713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
+      713,  713,  713,  713,  714,  714,  241,  714,  714,  714,
       714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
-      714,  714,  714,  714,  714,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
-      715,  715,  715,  715,  716,  716,  716,  716,  716,  716,
-
+      714,  714,  714,  715,  231,  715,  230,  229,  228,  715,
+      715,  715,  226,  222,  715,  716,  716,  716,  716,  716,
       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
-      716,  716,  716,  717,  717,  717,  717,  717,  717,  717,
+      716,  716,  716,  716,  717,  717,  717,  717,  717,  717,
+
       717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
-      717,  717,  718,  718,  718,  720,  241,  231,  230,  720,
-      229,  720,  720,  720,  720,  228,  720,  721,  721,  721,
-      721,  721,  721,  721,  721,  721,  721,  721,  721,  721,
-      721,  721,  721,  721,  721,  721,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  722,  722,  722,  722,  722,
-      722,  722,  722,  722,  722,  723,  723,  723,  723,  723,
+      717,  717,  717,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
+      718,  718,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
+      719,  720,  720,  720,  720,  720,  720,  720,  720,  722,
+      221,  220,  219,  722,  218,  722,  722,  722,  722,  208,
+      722,  723,  723,  723,  723,  723,  723,  723,  723,  723,
       723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
-
-      723,  723,  723,  723,  724,  724,  724,  724,  724,  724,
       724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
-      724,  724,  724,  725,  725,  725,  725,  725,  725,  725,
+
+      724,  724,  724,  724,  724,  724,  724,  724,  724,  725,
       725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
-      725,  725,  726,  726,  726,  726,  726,  726,  726,  726,
+      725,  725,  725,  725,  725,  725,  725,  725,  726,  726,
       726,  726,  726,  726,  726,  726,  726,  726,  726,  726,
-      726,  727,  727,  727,  727,  727,  727,  727,  727,  727,
+      726,  726,  726,  726,  726,  726,  726,  727,  727,  727,
       727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
+      727,  727,  727,  727,  727,  727,  728,  728,  728,  728,
       728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
-      728,  728,  728,  728,  728,  728,  728,  728,  728,  729,
-
+      728,  728,  728,  728,  728,  729,  729,  729,  729,  729,
       729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
-      729,  729,  729,  729,  729,  729,  729,  729,  730,  730,
+
+      729,  729,  729,  729,  730,  730,  730,  730,  730,  730,
       730,  730,  730,  730,  730,  730,  730,  730,  730,  730,
-      730,  730,  730,  730,  730,  730,  730,  731,  731,  226,
+      730,  730,  730,  731,  731,  731,  731,  731,  731,  731,
       731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
-      731,  731,  731,  731,  731,  731,  732,  732,  222,  732,
+      731,  731,  732,  732,  732,  732,  732,  732,  732,  732,
       732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
-      732,  732,  732,  732,  732,  733,  221,  733,  733,  220,
-      219,  733,  733,  733,  218,  208,  733,  734,  734,  734,
-      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
+      732,  733,  733,  207,  733,  733,  733,  733,  733,  733,
+      733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
+      734,  734,  206,  734,  734,  734,  734,  734,  734,  734,
+      734,  734,  734,  734,  734,  734,  734,  734,  734,  735,
 
-      734,  734,  734,  734,  734,  734,  735,  735,  735,  735,
-      735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
-      735,  735,  735,  735,  735,  736,  736,  736,  736,  736,
+      205,  735,  735,  204,  201,  735,  735,  735,  200,  199,
+      735,  736,  736,  736,  736,  736,  736,  736,  736,  736,
       736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
-      736,  736,  736,  736,  737,  737,  737,  737,  737,  737,
       737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
-      737,  737,  737,  738,  738,  207,  206,  738,  738,  205,
-      738,  738,  738,  738,  738,  738,  738,  738,  738,  739,
-      204,  201,  200,  199,  198,  739,  739,  739,  739,  197,
-      739,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-
-      740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
-      741,  741,  741,  741,  741,  741,  741,  741,  741,  741,
-      741,  741,  741,  741,  741,  741,  741,  741,  741,  742,
-      742,  196,  192,  742,  742,  742,  742,  742,  742,  742,
-      742,  742,  742,  742,  742,  743,  743,  743,  743,  743,
+      737,  737,  737,  737,  737,  737,  737,  737,  737,  738,
+      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
+      738,  738,  738,  738,  738,  738,  738,  738,  739,  739,
+      739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
+      739,  739,  739,  739,  739,  739,  739,  740,  740,  198,
+      197,  740,  740,  196,  740,  740,  740,  740,  740,  740,
+
+      740,  740,  740,  741,  192,  191,  183,  171,  164,  741,
+      741,  741,  741,  156,  741,  742,  742,  742,  742,  742,
+      742,  742,  742,  742,  742,  742,  742,  742,  742,  742,
+      742,  742,  742,  742,  743,  743,  743,  743,  743,  743,
       743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
-      743,  743,  743,  743,  744,  744,  744,  744,  744,  744,
-      744,  744,  744,  744,  744,  744,  744,  744,  744,  744,
-      744,  744,  744,  745,  745,  745,  745,  745,  745,  745,
+      743,  743,  743,  744,  744,  145,  143,  744,  744,  744,
+      744,  744,  744,  744,  744,  744,  744,  744,  744,  745,
       745,  745,  745,  745,  745,  745,  745,  745,  745,  745,
-
-      745,  745,  746,  746,  191,  746,  746,  746,  746,  746,
+      745,  745,  745,  745,  745,  745,  745,  745,  746,  746,
       746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
-      746,  747,  747,  183,  747,  747,  747,  747,  747,  747,
-      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
-      748,  748,  171,  748,  748,  748,  748,  748,  748,  748,
-      748,  748,  748,  748,  748,  748,  748,  748,  748,  749,
-      749,  164,  749,  749,  749,  749,  749,  749,  749,  749,
-      749,  749,  749,  749,  749,  749,  749,  749,  750,  750,
-      156,  750,  750,  750,  750,  750,  750,  750,  750,  750,
-      750,  750,  750,  750,  750,  750,  750,  751,  751,  145,
 
+      746,  746,  746,  746,  746,  746,  746,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
+      747,  747,  747,  747,  747,  747,  748,  748,  142,  748,
+      748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
+      748,  748,  748,  748,  748,  749,  749,  140,  749,  749,
+      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
+      749,  749,  749,  749,  750,  750,  138,  750,  750,  750,
+      750,  750,  750,  750,  750,  750,  750,  750,  750,  750,
+      750,  750,  750,  751,  751,  137,  751,  751,  751,  751,
       751,  751,  751,  751,  751,  751,  751,  751,  751,  751,
-      751,  751,  751,  751,  751,  751,  752,  752,  752,  752,
+
+      751,  751,  752,  752,  136,  752,  752,  752,  752,  752,
       752,  752,  752,  752,  752,  752,  752,  752,  752,  752,
-      752,  752,  752,  752,  752,  753,  753,  753,  753,  753,
+      752,  753,  753,  135,  753,  753,  753,  753,  753,  753,
       753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
-      753,  753,  753,  753,  754,  754,  754,  754,  754,  754,
       754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
-      754,  754,  754,  755,  143,  142,  140,  138,  137,  755,
+      754,  754,  754,  754,  754,  754,  754,  754,  754,  755,
+      755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
       755,  755,  755,  755,  755,  755,  755,  755,  756,  756,
       756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
+      756,  756,  756,  756,  756,  756,  756,  757,  134,  121,
 
-      756,  756,  756,  756,  756,  756,  756,  757,  757,  757,
-      757,  136,  757,  757,  757,  757,  757,  757,  757,  757,
-      757,  757,  757,  757,  757,  757,  758,  135,  134,  121,
-      119,  117,  758,  758,  758,  758,  759,  759,  116,  759,
+      119,  117,  116,  757,  757,  757,  757,  757,  757,  757,
+      757,  757,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      758,  759,  759,  759,  759,  114,  759,  759,  759,  759,
       759,  759,  759,  759,  759,  759,  759,  759,  759,  759,
-      759,  759,  759,  759,  759,  760,  760,  114,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  761,  761,  113,  761,  761,  761,
-      761,  761,  761,  761,  761,  761,  761,  761,  761,  761,
-      761,  761,  761,  762,  762,  112,  762,  762,  762,  762,
-
-      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
-      762,  762,  763,  763,  763,  763,  763,  763,  763,  763,
-      763,  763,  763,  763,  763,  763,  763,  763,  763,  763,
-      763,  764,  764,  764,  764,  764,  764,  764,  764,  764,
+      760,  113,  112,  101,   99,   95,  760,  760,  760,  760,
+      761,  761,   92,  761,  761,  761,  761,  761,  761,  761,
+      761,  761,  761,  761,  761,  761,  761,  761,  761,  762,
+      762,   91,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  763,  763,
+
+       90,  763,  763,  763,  763,  763,  763,  763,  763,  763,
+      763,  763,  763,  763,  763,  763,  763,  764,  764,   86,
       764,  764,  764,  764,  764,  764,  764,  764,  764,  764,
+      764,  764,  764,  764,  764,  764,  765,  765,  765,  765,
       765,  765,  765,  765,  765,  765,  765,  765,  765,  765,
-      765,  765,  765,  765,  765,  765,  765,  765,  765,  766,
+      765,  765,  765,  765,  765,  766,  766,  766,  766,  766,
       766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
-      766,  766,  766,  766,  766,  766,  766,  766,  101,   99,
-       95,   92,   91,   90,   86,   81,   78,   58,   57,   55,
-
-       53,   52,   44,   41,   40,   38,   23,   22,   20,   18,
-       17,   14,    9,    3,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687,  687,  687,
-      687,  687,  687,  687,  687,  687,  687,  687
+      766,  766,  766,  766,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
+      767,  767,  767,  768,  768,  768,  768,  768,  768,  768,
+
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,   81,   78,   58,   57,   55,   53,   52,   44,
+       41,   40,   38,   23,   22,   20,   18,   17,   14,    9,
+        3,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+      689,  689,  689,  689,  689,  689,  689,  689,  689,  689,
+
+      689,  689,  689,  689,  689
     } ;
 
 extern int yy_flex_debug;
@@ -1805,7 +1811,7 @@ int yyback P((int *, int));
 int yywrap P((void));\r
 extern void CopyBoard P((Board to, Board from));\r
 \r
-#line 1809 "parser.c"
+#line 1815 "parser.c"
 
 #define INITIAL 0
 
@@ -1964,7 +1970,7 @@ YY_DECL
 #line 179 "parser.l"
 
 \r
-#line 1968 "parser.c"
+#line 1974 "parser.c"
 
        if ( !(yy_init) )
                {
@@ -2023,14 +2029,14 @@ 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 >= 688 )
+                               if ( yy_current_state >= 690 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        *(yy_state_ptr)++ = yy_current_state;
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 3815 );
+               while ( yy_base[yy_current_state] != 3832 );
 
 yy_find_action:
                yy_current_state = *--(yy_state_ptr);
@@ -2134,7 +2140,7 @@ YY_RULE_SETUP
        currentMoveString[2] - AAA >= BOARD_RGHT   ||\r
        currentMoveString[0] - AAA <  BOARD_LEFT   ||\r
        currentMoveString[2] - AAA <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     piece = boards[yyboardindex]\r
       [currentMoveString[1] - ONE][currentMoveString[0] - AAA];\r
@@ -2205,7 +2211,7 @@ YY_RULE_SETUP
        currentMoveString[2] - AAA >= BOARD_RGHT   ||\r
        currentMoveString[0] - AAA <  BOARD_LEFT   ||\r
        currentMoveString[2] - AAA <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     result = LegalityTest(boards[yyboardindex],\r
                          PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!\r
@@ -2215,24 +2221,27 @@ YY_RULE_SETUP
                           currentMoveString[2] - AAA,\r
                          currentMoveString[4]);\r
 \r
-    if (currentMoveString[4] == NULLCHAR &&\r
-        (result == WhitePromotionKnight || result == BlackPromotionKnight ||\r
-         result == WhitePromotionQueen  || result == BlackPromotionQueen)) {\r
-        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)\r
-            currentMoveString[4] = PieceToChar(BlackFerz);\r
-        else if(gameInfo.variant == VariantGreat)\r
-            currentMoveString[4] = PieceToChar(BlackMan);\r
-        else\r
-            currentMoveString[4] = PieceToChar(BlackQueen);\r
-       currentMoveString[5] = NULLCHAR;\r
-    }\r
-\r
-    return (int) result;\r
-}\r
+    if (currentMoveString[4] == NULLCHAR) {
+      if(result == WhitePromotionKnight || result == BlackPromotionKnight ||
+         result == WhitePromotionQueen  || result == BlackPromotionQueen) {
+        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
+            currentMoveString[4] = PieceToChar(BlackFerz);
+        else if(gameInfo.variant == VariantGreat)
+            currentMoveString[4] = PieceToChar(BlackMan);
+        else
+            currentMoveString[4] = PieceToChar(BlackQueen);
+       currentMoveString[5] = NULLCHAR;
+      }
+    } else if(appData.testLegality && // strip off unnecessary and false promo characters
+       !(result == WhitePromotionQueen  || result == BlackPromotionQueen ||
+         result == WhiteNonPromotion    || result == BlackNonPromotion)) currentMoveString[4] = NULLCHAR;
+
+    return (int) result;
+}
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 328 "parser.l"
+#line 331 "parser.l"
 {\r
     /*\r
      * Pawn move, possibly with promotion\r
@@ -2251,14 +2260,14 @@ YY_RULE_SETUP
     cl.ffIn = yytext[0] - AAA;\r
     cl.rtIn = yytext[1] - ONE;\r
     cl.ftIn = yytext[0] - AAA;\r
-    c = cl.promoCharIn = yytext[2+skip];\r
+    c = cl.promoCharIn = ToLower(yytext[2+skip]);\r
 \r
     /* [HGM] do not allow values beyond board size */\r
     if(cl.rtIn >= BOARD_HEIGHT ||\r
        cl.rtIn <  0            ||\r
        cl.ffIn >= BOARD_RGHT   ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)\r
       return IllegalMove;\r
@@ -2278,7 +2287,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 372 "parser.l"
+#line 375 "parser.l"
 {\r
     /*\r
      * Pawn capture, possibly with promotion, possibly ambiguous\r
@@ -2315,7 +2324,7 @@ YY_RULE_SETUP
        cl.ffIn <  BOARD_LEFT  ||\r
        cl.ftIn >= BOARD_RGHT  ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)\r
       return IllegalMove;\r
@@ -2334,7 +2343,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 425 "parser.l"
+#line 428 "parser.l"
 {\r
     /*\r
      * unambiguously abbreviated Pawn capture, possibly with promotion\r
@@ -2368,7 +2377,7 @@ YY_RULE_SETUP
        currentMoveString[2] - AAA >= BOARD_RGHT   ||\r
        currentMoveString[0] - AAA <  BOARD_LEFT   ||\r
        currentMoveString[2] - AAA <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */\r
          currentMoveString[0] != currentMoveString[2] ) {\r
@@ -2452,7 +2461,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 540 "parser.l"
+#line 543 "parser.l"
 {\r
     /*\r
      * piece move, possibly ambiguous\r
@@ -2495,7 +2504,7 @@ YY_RULE_SETUP
        cl.rtIn <  0            ||\r
        cl.ftIn >= BOARD_RGHT   ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);\r
 \r
@@ -2511,7 +2520,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 596 "parser.l"
+#line 599 "parser.l"
 {\r
     /*\r
      * piece move with rank or file disambiguator\r
@@ -2558,7 +2567,7 @@ YY_RULE_SETUP
        cl.rtIn <  0            ||\r
        cl.ftIn >= BOARD_RGHT   ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);\r
 \r
@@ -2574,7 +2583,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 656 "parser.l"
+#line 659 "parser.l"
 {\r
     int rf, ff, rt, ft;\r
 \r
@@ -2633,7 +2642,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 712 "parser.l"
+#line 715 "parser.l"
 {\r
     int rf, ff, rt, ft;\r
 \r
@@ -2691,7 +2700,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 767 "parser.l"
+#line 770 "parser.l"
 {\r
     /* Bughouse piece drop.  No legality checking for now. */\r
     currentMoveString[1] = '@';\r
@@ -2705,7 +2714,7 @@ YY_RULE_SETUP
     /* [HGM] do not allow values beyond board size */\r
     if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||\r
        currentMoveString[2] - AAA >= BOARD_WIDTH     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if (WhiteOnMove(yyboardindex)) {\r
        currentMoveString[0] = ToUpper(yytext[0]);\r
@@ -2718,7 +2727,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 791 "parser.l"
+#line 794 "parser.l"
 {\r
     if (WhiteOnMove(yyboardindex))\r
       return (int) BlackWins;\r
@@ -2728,35 +2737,35 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 798 "parser.l"
+#line 801 "parser.l"
 {\r
     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);\r
 }\r
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 802 "parser.l"
+#line 805 "parser.l"
 {\r
     return (int) GameUnfinished;\r
 }\r
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 806 "parser.l"
+#line 809 "parser.l"
 {\r
     return (int) GameIsDrawn;\r
 }\r
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 810 "parser.l"
+#line 813 "parser.l"
 {\r
     return (int) GameIsDrawn;\r
 }\r
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 814 "parser.l"
+#line 817 "parser.l"
 {\r
     if (WhiteOnMove(yyboardindex))\r
       return (int) BlackWins;\r
@@ -2766,7 +2775,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 821 "parser.l"
+#line 824 "parser.l"
 {\r
     if (WhiteOnMove(yyboardindex))\r
       return (int) BlackWins;\r
@@ -2776,56 +2785,56 @@ YY_RULE_SETUP
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 828 "parser.l"
+#line 831 "parser.l"
 {\r
     return (int) GameIsDrawn;\r
 }\r
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 832 "parser.l"
+#line 835 "parser.l"
 {\r
     return (int) GameIsDrawn;\r
 }\r
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 836 "parser.l"
+#line 839 "parser.l"
 { \r
     return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);\r
 }\r
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 840 "parser.l"
+#line 843 "parser.l"
 { \r
     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);\r
 }\r
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 844 "parser.l"
+#line 847 "parser.l"
 { \r
     return (int) WhiteWins;\r
 }\r
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 848 "parser.l"
+#line 851 "parser.l"
 { \r
     return (int) BlackWins;\r
 }\r
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 852 "parser.l"
+#line 855 "parser.l"
 {\r
     return (int) GameIsDrawn;\r
 }\r
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 856 "parser.l"
+#line 859 "parser.l"
 {\r
     return (int) GameUnfinished;\r
 }\r
@@ -2833,7 +2842,7 @@ YY_RULE_SETUP
 case 26:
 /* rule 26 can match eol */
 YY_RULE_SETUP
-#line 860 "parser.l"
+#line 863 "parser.l"
 {\r
     /* move numbers */\r
     if ((yyleng == 1) && (yytext[0] == '1'))\r
@@ -2842,7 +2851,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 866 "parser.l"
+#line 869 "parser.l"
 {\r
     /* elapsed time indication, e.g. (0:12) or {10:21.071} */ \r
     return (int) ElapsedTime;\r
@@ -2851,7 +2860,7 @@ YY_RULE_SETUP
 case 28:
 /* rule 28 can match eol */
 YY_RULE_SETUP
-#line 871 "parser.l"
+#line 874 "parser.l"
 {\r
     /* position diagram enclosed in [-- --] */\r
     return (int) PositionDiagram;\r
@@ -2863,7 +2872,7 @@ case 29:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 876 "parser.l"
+#line 879 "parser.l"
 {\r
     /* position diagram enclosed in {-- --} */\r
     return (int) PositionDiagram;\r
@@ -2872,14 +2881,14 @@ YY_RULE_SETUP
 case 30:
 /* rule 30 can match eol */
 YY_RULE_SETUP
-#line 881 "parser.l"
+#line 884 "parser.l"
 {\r
     return (int) PGNTag;\r
 }    \r
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 885 "parser.l"
+#line 888 "parser.l"
 {\r
     return (int) GNUChessGame;\r
 }\r
@@ -2890,14 +2899,14 @@ case 32:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 889 "parser.l"
+#line 892 "parser.l"
 {\r
     return (int) XBoardGame;\r
 }\r
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 893 "parser.l"
+#line 896 "parser.l"
 {                              /* numeric annotation glyph */\r
     return (int) NAG;\r
 }\r
@@ -2905,7 +2914,7 @@ YY_RULE_SETUP
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
-#line 897 "parser.l"
+#line 900 "parser.l"
 {                              /* anything in {} */\r
     return (int) Comment; \r
 }\r
@@ -2915,7 +2924,7 @@ case 35:
 (yy_c_buf_p) = yy_cp -= 1;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 901 "parser.l"
+#line 904 "parser.l"
 {                                          /* ; to end of line */\r
     return (int) Comment;\r
 }\r
@@ -2923,7 +2932,7 @@ YY_RULE_SETUP
 case 36:
 /* rule 36 can match eol */
 YY_RULE_SETUP
-#line 905 "parser.l"
+#line 908 "parser.l"
 {                              /* anything in [] */\r
     return (int) Comment; \r
 }\r
@@ -2931,7 +2940,7 @@ YY_RULE_SETUP
 case 37:
 /* rule 37 can match eol */
 YY_RULE_SETUP
-#line 909 "parser.l"
+#line 912 "parser.l"
 { /* very nested () */\r
     return (int) Comment; \r
 }\r
@@ -2939,7 +2948,7 @@ YY_RULE_SETUP
 case 38:
 /* rule 38 can match eol */
 YY_RULE_SETUP
-#line 913 "parser.l"
+#line 916 "parser.l"
 {                              /* >=2 chars in () */\r
     return (int) Comment; \r
 }       \r
@@ -2947,14 +2956,14 @@ YY_RULE_SETUP
 case 39:
 /* rule 39 can match eol */
 YY_RULE_SETUP
-#line 917 "parser.l"
+#line 920 "parser.l"
 {\r
         /* Skip mail headers */\r
 }\r
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 921 "parser.l"
+#line 924 "parser.l"
 {\r
         /* Skip random words */\r
 }\r
@@ -2962,17 +2971,17 @@ YY_RULE_SETUP
 case 41:
 /* rule 41 can match eol */
 YY_RULE_SETUP
-#line 925 "parser.l"
+#line 928 "parser.l"
 {\r
         /* Skip everything else */\r
 }\r
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 929 "parser.l"
+#line 932 "parser.l"
 ECHO;
        YY_BREAK
-#line 2976 "parser.c"
+#line 2985 "parser.c"
                        case YY_STATE_EOF(INITIAL):
                                yyterminate();
 
@@ -3234,7 +3243,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 >= 688 )
+                       if ( yy_current_state >= 690 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3257,11 +3266,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 >= 688 )
+               if ( yy_current_state >= 690 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 687);
+       yy_is_jam = (yy_current_state == 689);
        if ( ! yy_is_jam )
                *(yy_state_ptr)++ = yy_current_state;
 
@@ -3947,7 +3956,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 929 "parser.l"
+#line 932 "parser.l"
 
 
 \r
index 53b568f..033be7f 100644 (file)
--- a/parser.l
+++ b/parser.l
@@ -310,21 +310,24 @@ extern void CopyBoard P((Board to, Board from));
                           currentMoveString[2] - AAA,\r
                          currentMoveString[4]);\r
 \r
-    if (currentMoveString[4] == NULLCHAR &&\r
-        (result == WhitePromotionKnight || result == BlackPromotionKnight ||\r
-         result == WhitePromotionQueen  || result == BlackPromotionQueen)) {\r
-        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)\r
-            currentMoveString[4] = PieceToChar(BlackFerz);\r
-        else if(gameInfo.variant == VariantGreat)\r
-            currentMoveString[4] = PieceToChar(BlackMan);\r
-        else\r
-            currentMoveString[4] = PieceToChar(BlackQueen);\r
-       currentMoveString[5] = NULLCHAR;\r
-    }\r
-\r
-    return (int) result;\r
-}\r
-\r
+    if (currentMoveString[4] == NULLCHAR) {
+      if(result == WhitePromotionKnight || result == BlackPromotionKnight ||
+         result == WhitePromotionQueen  || result == BlackPromotionQueen) {
+        if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk)
+            currentMoveString[4] = PieceToChar(BlackFerz);
+        else if(gameInfo.variant == VariantGreat)
+            currentMoveString[4] = PieceToChar(BlackMan);
+        else
+            currentMoveString[4] = PieceToChar(BlackQueen);
+       currentMoveString[5] = NULLCHAR;
+      }
+    } else if(appData.testLegality && // strip off unnecessary and false promo characters
+       !(result == WhitePromotionQueen  || result == BlackPromotionQueen ||
+         result == WhiteNonPromotion    || result == BlackNonPromotion)) currentMoveString[4] = NULLCHAR;
+
+    return (int) result;
+}
+
 [a-l][0-9]((=?\(?[A-Za-z]\)?)|=)?       {\r
     /*\r
      * Pawn move, possibly with promotion\r