[Scummvm-git-logs] scummvm master -> beb8a4f82b4ebbbdf15ec20121037a369d75a81d

djsrv noreply at scummvm.org
Fri Sep 16 19:37:52 UTC 2022


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
d71d4d2b5f DIRECTOR: LINGO: Support keyless exprs in prop lists
beb8a4f82b DIRECTOR: LINGO: Add keyless expr tests


Commit: d71d4d2b5f40a4a61707971f7de3bb5f278d8e91
    https://github.com/scummvm/scummvm/commit/d71d4d2b5f40a4a61707971f7de3bb5f278d8e91
Author: djsrv (dservilla at gmail.com)
Date: 2022-09-16T15:36:46-04:00

Commit Message:
DIRECTOR: LINGO: Support keyless exprs in prop lists

Changed paths:
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index ebeb1a05368..b182a65e724 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -1094,7 +1094,25 @@ bool LingoCompiler::visitListNode(ListNode *node) {
 /* PropListNode */
 
 bool LingoCompiler::visitPropListNode(PropListNode *node) {
-	COMPILE_LIST(node->items);
+	bool refModeStore = _refMode;
+	_refMode = false;
+	bool success = true;
+	for (uint i = 0; i < node->items->size(); i++) {
+		Node *item = (*node->items)[i];
+		if (item->type != kPropPairNode) {
+			// We have a keyless expression, as in ["key": "value", "keyless expression"]
+			// Automatically set its key to its index in the list.
+			code1(LC::c_intpush);
+			codeInt(i + 1);
+		}
+		success = item->accept(this);
+		if (!success)
+			break;
+	}
+	_refMode = refModeStore;
+	if (!success)
+		return false;
+
 	code1(LC::c_proparraypush);
 	codeInt(node->items->size());
 	return true;
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 8177255d9c8..df648eca01a 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -647,16 +647,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  191
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4503
+#define YYLAST   4501
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  102
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  65
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  328
+#define YYNRULES  329
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  618
+#define YYNSTATES  614
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   342
@@ -739,14 +739,14 @@ static const yytype_int16 yyrline[] =
      690,   691,   692,   695,   696,   697,   698,   699,   702,   704,
      705,   706,   707,   708,   709,   710,   711,   712,   713,   717,
      718,   719,   720,   721,   724,   724,   726,   727,   730,   731,
-     732,   733,   734,   737,   738,   739,   742,   746,   751,   752,
-     753,   754,   755,   758,   759,   762,   763,   767,   768,   769,
-     770,   771,   772,   773,   774,   775,   776,   777,   778,   779,
-     780,   781,   782,   783,   784,   785,   792,   793,   794,   795,
-     796,   797,   798,   799,   800,   801,   802,   803,   804,   805,
-     806,   807,   808,   809,   810,   813,   814,   815,   816,   817,
-     818,   819,   820,   821,   822,   823,   824,   825,   826,   827,
-     828,   829,   830,   833,   834,   837,   838,   841,   845
+     732,   733,   734,   737,   738,   739,   745,   749,   752,   757,
+     758,   759,   760,   761,   764,   765,   768,   769,   773,   774,
+     775,   776,   777,   778,   779,   780,   781,   782,   783,   784,
+     785,   786,   787,   788,   789,   790,   791,   798,   799,   800,
+     801,   802,   803,   804,   805,   806,   807,   808,   809,   810,
+     811,   812,   813,   814,   815,   816,   819,   820,   821,   822,
+     823,   824,   825,   826,   827,   828,   829,   830,   831,   832,
+     833,   834,   835,   836,   839,   840,   843,   844,   847,   851
 };
 #endif
 
@@ -796,7 +796,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-536)
+#define YYPACT_NINF (-511)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -810,68 +810,68 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2884,  -536,  3450,  -536,  -536,  -536,  -536,    33,  -536,   -14,
-    -536,  3450,  1832,    33,  1928,  -536,  -536,  3450,  -536,    -8,
-    -536,  -536,  2024,    22,  3529,  -536,   -67,  -536,  -536,  3450,
-    2024,  1832,  3450,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,  -536,  -536,  -536,  1928,  3450,  3450,   -59,
-    3765,  -536,    61,  2884,  -536,  -536,  -536,  -536,  2024,  -536,
-    -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,    54,  -536,  -536,  2120,  2120,  1928,  1928,
-    1928,  1928,    64,   -31,   -26,  -536,  -536,   -20,   -10,  -536,
-    -536,  -536,  -536,  2120,  2120,  2120,  2120,  1928,  1928,  2216,
-    1928,  1928,  1928,  1928,  3608,  1928,  2216,  2216,  1352,   774,
-      28,    43,    45,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,   872,  -536,    67,  1928,  4004,  3450,    81,
-      87,   968,  3450,  1928,  3450,  -536,  -536,    -5,  -536,  -536,
-      89,    95,  1064,    98,   100,   101,  3989,   103,  3450,  -536,
-    -536,  -536,  -536,   104,  1160,  -536,  3450,  1448,  -536,  -536,
-    -536,   577,   599,   668,  3817,   162,  -536,  -536,  -536,  3450,
-    -536,  -536,  1256,  4328,  -536,   -21,   -13,   -12,    10,    31,
-     162,    63,   102,  4315,  -536,  -536,  -536,  4017,    58,   105,
-     106,   115,   120,   -30,    56,  -536,  4328,   122,   107,  1544,
-    -536,  -536,   178,  1928,  1928,  1928,  1928,  2600,  2600,  2792,
-    1928,  2696,  2696,  1928,  1928,  1928,  1928,  1928,  1928,  1928,
-    1928,  -536,  -536,  4100,  -536,  -536,  4087,  2963,  1928,  1928,
-    1928,  1928,  1928,   129,  -536,  -536,  3687,  3687,  3687,     8,
-    4155,   197,  -536,  -536,  1928,     6,  -536,  1928,  -536,  -536,
-    -536,  3765,  3042,  -536,   131,  -536,  -536,  -536,  4074,  2216,
-    1928,  2216,  1928,  2216,  1928,  2216,  1928,  -536,  -536,  -536,
-    -536,     4,  -536,   201,  4343,  -536,  -536,  -536,  -536,  -536,
-    -536,  -536,  -536,  -536,  -536,  2312,  2408,  2216,  2216,  1640,
-    -536,  1928,  1928,  1928,  1928,  -536,  1928,  3371,  -536,  -536,
-    1928,  -536,   133,  1928,    30,    30,    30,    30,   121,   121,
-    -536,    17,    30,    30,    30,    30,    17,     2,     2,  -536,
-    -536,   133,  1928,  1928,  1928,  1928,  1928,  1928,  1928,  1928,
-    1928,  1928,  1928,  1928,  1928,  1928,  1928,  1928,  1928,  1928,
-    -536,  3279,   214,  3042,    64,  -536,   137,  -536,   139,   140,
-    1928,  1928,  3042,  2504,  4168,  3450,  3450,  -536,  -536,  -536,
-       6,  -536,  4181,  -536,  -536,  -536,   150,  3042,  -536,  3042,
-    1736,  -536,  3830,  -536,  3850,  -536,  3903,  -536,  3923,  -536,
-    -536,  2216,  1928,     4,     4,     4,     4,  2216,  2216,     4,
-    2216,  2216,  -536,  -536,  -536,  -536,  -536,  -536,  -536,   133,
-    4328,  4328,  4328,  4328,  4328,    58,   105,   106,   115,   157,
-    -536,  4328,  1928,   161,  4328,  -536,    30,    30,    30,    30,
-     121,   121,  -536,    17,    30,    30,    30,    30,    17,     2,
-       2,  -536,  -536,   133,  -536,  -536,     3,  3279,  -536,  3121,
-    -536,  -536,  -536,  -536,  4235,   492,   175,  1928,  1928,  1928,
-    1928,  -536,  -536,  -536,    73,  3450,  -536,  -536,   166,  -536,
-     260,  -536,   133,  2216,  2216,  2216,  2216,  -536,  4328,  2216,
-    2216,  2216,  2216,  -536,   242,   205,  -536,  -536,   179,  -536,
-    -536,  3200,   176,  -536,  -536,  3279,  -536,  3042,   245,  1928,
-     181,  -536,  4396,  -536,  3936,  4396,  4396,  -536,   185,  -536,
-    3450,   184,  -536,  -536,  -536,  -536,  -536,  -536,  -536,  -536,
-     213,  2216,  -536,  -536,  3279,  -536,  -536,   200,   203,  1928,
-    4248,  -536,  1928,  1928,  1928,  1928,  1928,  1928,  1928,  1928,
-    1928,  1928,  1928,  1928,  1928,  1928,  1928,  1928,   223,  3042,
-      76,  -536,  2216,   200,  -536,   202,  4261,  3042,    53,    53,
-      53,  4409,  4409,  -536,    35,    53,    53,    53,    53,    35,
-     108,   108,  -536,  -536,  1928,  -536,  -536,  -536,  -536,  -536,
-    3042,   210,  4396,   216,   204,   207,  -536,  -536
+    3008,  -511,  3490,  -511,  -511,  -511,  -511,    47,  -511,   -12,
+    -511,  3490,  1860,    47,  1956,  -511,  -511,  3490,  -511,    44,
+    -511,  -511,  2052,    91,  3569,  -511,    -8,  -511,  -511,  3490,
+    2052,  1860,  3490,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  1956,  3490,  3490,    10,
+    3805,  -511,   116,  3008,  -511,  -511,  -511,  -511,  2052,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,    56,  -511,  -511,  2148,  2148,  1956,  1956,
+    1956,  1956,    61,    51,    59,  -511,  -511,    62,    70,  -511,
+    -511,  -511,  -511,  2148,  2148,  2148,  2148,  1956,  1956,  2244,
+    1956,  1956,  1956,  1956,  3648,  1956,  2244,  2244,  1380,   802,
+      71,    87,    90,  -511,  -511,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,   900,  -511,   104,  1956,  4025,  3490,   112,
+     121,   996,  3490,  1956,  3490,  -511,  -511,    -7,  -511,  -511,
+     125,   127,  1092,   128,   129,   130,  3996,   131,  3490,  -511,
+    -511,  -511,  -511,   134,  1188,  -511,  3490,  1476,  -511,  -511,
+    -511,   449,   519,   606,   696,   160,  -511,  -511,  -511,  3490,
+    -511,  -511,  1284,  4354,  -511,   -36,   -16,    35,    65,    81,
+     160,   202,   204,  4326,  -511,  -511,  -511,  4050,   132,   133,
+     135,   157,   159,   -66,   -11,  -511,  4354,   161,   139,  1572,
+    -511,  -511,   234,  1956,  1956,  1956,  1956,  2724,  2724,  2916,
+    1956,  2820,  2820,  1956,  1956,  1956,  1956,  1956,  1956,  1956,
+    1956,  -511,  -511,  4135,  -511,  -511,  4107,  3087,  1956,  1956,
+    1956,  1956,  1956,   174,  -511,  -511,  3727,  3727,  3727,     6,
+    4164,   242,  -511,  -511,  1956,     3,  -511,  1956,  -511,  -511,
+    -511,  3805,  3166,  -511,   180,  -511,  -511,  -511,  4078,  2244,
+    1956,  2244,  1956,  2244,  1956,  2244,  1956,  -511,  -511,  -511,
+    -511,   115,  -511,   250,  4379,  -511,  -511,  -511,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  2340,  2436,  2244,  2244,  1668,
+    -511,  1956,  1956,  1956,  1956,  -511,  1956,  2532,  -511,  -511,
+    1956,  -511,   181,  1956,    32,    32,    32,    32,   120,   120,
+    -511,   -28,    32,    32,    32,    32,   -28,   -26,   -26,  -511,
+    -511,   181,  1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,
+    1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,
+    -511,  3403,   264,  3166,    61,  -511,   187,  -511,   188,   189,
+    1956,  1956,  3166,  2628,  4190,  3490,  3490,  -511,  -511,  -511,
+       3,  -511,  4218,  -511,  -511,  -511,   203,  3166,  -511,  3166,
+    1764,  -511,  3857,  -511,  3870,  -511,  3890,  -511,  3943,  -511,
+    -511,  2244,  1956,   115,   115,   115,   115,  2244,  2244,   115,
+    2244,  2244,  -511,  -511,  -511,  -511,  -511,  -511,  -511,   181,
+    4354,  4354,  4354,  4354,  4354,  -511,  4354,  4354,  1956,   190,
+    4354,  -511,    32,    32,    32,    32,   120,   120,  -511,   -28,
+      32,    32,    32,    32,   -28,   -26,   -26,  -511,  -511,   181,
+    -511,  -511,    -2,  3403,  -511,  3245,  -511,  -511,  -511,  -511,
+    4244,     2,   208,  1956,  1956,  1956,  1956,  -511,  -511,  -511,
+      75,  3490,  -511,  -511,   200,  -511,   288,  -511,   181,  2244,
+    2244,  2244,  2244,  -511,  4354,  2244,  2244,  2244,  2244,  -511,
+     271,   231,  -511,  -511,   206,  -511,  -511,  3324,   210,  -511,
+    -511,  3403,  -511,  3166,   269,  1956,   211,  -511,  4407,  -511,
+    3963,  4407,  4407,  -511,   212,  -511,  3490,   213,  -511,  -511,
+    -511,  -511,  -511,  -511,  -511,  -511,   238,  2244,  -511,  -511,
+    3403,  -511,  -511,   225,   227,  1956,  4272,  -511,  1956,  1956,
+    1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,  1956,
+    1956,  1956,  1956,  1956,   240,  3166,    80,  -511,  2244,   225,
+    -511,   218,  4298,  3166,    96,    96,    96,   396,   396,  -511,
+     101,    96,    96,    96,    96,   101,   -15,   -15,  -511,  -511,
+    1956,  -511,  -511,  -511,  -511,  -511,  3166,   229,  4407,   230,
+     221,   222,  -511,  -511
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -893,19 +893,19 @@ static const yytype_int16 yydefact[] =
       90,    89,    65,     0,    79,    24,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   124,   101,     0,    99,   179,
      180,   182,   181,    33,    40,    64,    74,    41,    56,    58,
-      34,    46,    49,    77,    70,    68,     0,     0,     0,   325,
-     192,     0,     0,   265,   187,   188,   189,   190,   221,   222,
-     191,   266,   267,   136,   268,     0,     0,     0,    98,     0,
+      34,    46,    49,    77,    70,    68,     0,     0,     0,   326,
+     192,     0,     0,   266,   187,   188,   189,   190,   221,   222,
+     191,   267,   268,   136,   269,     0,     0,     0,    98,     0,
        0,   136,     0,     0,    70,   192,   195,     0,   196,   166,
        0,     0,   136,     0,     0,     0,     0,     0,    98,   104,
      127,     1,     4,     0,   136,    10,     0,     0,   198,   214,
      197,     0,     0,     0,     0,     0,   125,   123,   149,   100,
      212,   213,   138,   139,   183,    27,    28,    29,    51,    66,
-      48,    59,   218,     0,   263,   264,   133,     0,   179,   180,
-     182,   181,     0,   192,     0,   256,   327,     0,   326,     0,
+      48,    59,   218,     0,   264,   265,   133,     0,   179,   180,
+     182,   181,     0,   192,     0,   256,   328,     0,   327,     0,
      116,   117,    60,     0,     0,     0,     0,    31,    61,    55,
        0,    36,    69,     0,     0,     0,     0,     0,     0,     0,
-     137,   129,   286,   136,   287,   126,     0,     0,     0,     0,
+     137,   129,   287,   136,   288,   126,     0,     0,     0,     0,
        0,     0,     0,     0,   122,   115,    45,    30,    32,     0,
        0,   246,   147,   148,     0,    14,   120,    75,   118,   119,
      151,     0,   167,   150,     0,   114,    25,   215,     0,     0,
@@ -913,46 +913,46 @@ static const yytype_int16 yydefact[] =
      209,     0,   102,    60,   142,   229,   230,   231,   232,   233,
      234,   235,   236,   237,   238,     0,     0,     0,     0,     0,
      186,     0,     0,     0,     0,   254,     0,     0,   255,   253,
-       0,   184,   136,     0,   278,   279,   276,   277,   280,   281,
-     273,   283,   284,   285,   275,   274,   282,   269,   270,   271,
-     272,   136,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   184,   136,     0,   279,   280,   277,   278,   281,   282,
+     274,   284,   285,   286,   276,   275,   283,   270,   271,   272,
+     273,   136,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   137,
      131,   173,   152,   167,    70,   193,     0,   194,     0,     0,
        0,     0,   167,     0,     0,    23,     0,    18,    19,    12,
       15,    16,     0,   164,   171,   172,     0,   168,   169,   167,
        0,   199,     0,   203,     0,   205,     0,   201,     0,   244,
      245,     0,     0,    35,    47,    50,    78,    52,    53,    54,
-      67,    68,   220,   224,   223,   219,   323,   324,   134,   136,
-     261,   262,   260,   258,   259,     0,     0,     0,     0,     0,
-     257,   328,   137,     0,   141,   130,   297,   298,   295,   296,
-     299,   300,   292,   302,   303,   304,   294,   293,   301,   288,
-     289,   290,   291,   136,   177,   178,   158,   174,   175,     0,
-      11,   143,   144,   145,     0,     0,     0,    52,    53,    67,
-      68,   247,   248,   146,     0,    98,    17,   121,     0,   170,
-      22,   216,   136,     0,     0,     0,     0,   207,   140,     0,
-       0,     0,     0,   228,     0,     0,   226,   227,     0,   185,
-     132,     0,     0,   153,   176,   173,   154,   167,     0,     0,
-       0,   305,   249,   306,     0,   251,   252,    20,     0,   165,
-      23,     0,   200,   204,   206,   202,   239,   241,   242,   240,
-       0,     0,   243,   135,   173,   156,   159,   158,     0,     0,
-       0,   160,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   167,
-       0,   217,     0,   158,   155,     0,     0,   167,   315,   316,
-     314,   317,   318,   311,   320,   321,   322,   313,   312,   319,
-     307,   308,   309,   310,     0,    13,    21,   225,   157,   163,
-     167,     0,   250,     0,     0,     0,   161,   162
+      67,    68,   220,   224,   223,   219,   324,   325,   134,   136,
+     262,   263,   261,   259,   260,   257,   258,   329,   137,     0,
+     141,   130,   298,   299,   296,   297,   300,   301,   293,   303,
+     304,   305,   295,   294,   302,   289,   290,   291,   292,   136,
+     177,   178,   158,   174,   175,     0,    11,   143,   144,   145,
+       0,     0,     0,    52,    53,    67,    68,   247,   248,   146,
+       0,    98,    17,   121,     0,   170,    22,   216,   136,     0,
+       0,     0,     0,   207,   140,     0,     0,     0,     0,   228,
+       0,     0,   226,   227,     0,   185,   132,     0,     0,   153,
+     176,   173,   154,   167,     0,     0,     0,   306,   249,   307,
+       0,   251,   252,    20,     0,   165,    23,     0,   200,   204,
+     206,   202,   239,   241,   242,   240,     0,     0,   243,   135,
+     173,   156,   159,   158,     0,     0,     0,   160,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   167,     0,   217,     0,   158,
+     155,     0,     0,   167,   316,   317,   315,   318,   319,   312,
+     321,   322,   323,   314,   313,   320,   308,   309,   310,   311,
+       0,    13,    21,   225,   157,   163,   167,     0,   250,     0,
+       0,     0,   161,   162
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -536,  -536,  -536,   230,  -536,  -536,  -536,  -536,  -536,   -96,
-    -536,  -385,     0,     9,   -27,  -536,     1,  -374,   -58,  -536,
-      15,  -245,   274,  -536,  -536,  -536,  -536,  -536,  -535,  -536,
-    -536,  -536,  -379,  -536,   -97,  -504,  -536,  -166,  -129,   -22,
-     -99,  -536,    -4,  -536,  -536,   -17,  -536,   -11,  -202,  -536,
-    -536,  -237,  -536,  -536,  -536,  -536,   -23,  -536,   173,    -6,
-     109,  -140,  -114,  -536,  -225
+    -511,  -511,  -511,   245,  -511,  -511,  -511,  -511,  -511,   -81,
+    -511,  -377,     0,     9,   -27,  -511,     1,  -366,   -60,  -511,
+      31,  -241,   292,  -511,  -511,  -511,  -511,  -511,  -510,  -511,
+    -511,  -511,  -379,  -511,   -78,  -479,  -511,  -149,   -83,   -22,
+     -98,  -511,    -4,  -511,  -511,   -17,  -511,     7,  -179,  -511,
+    -511,  -223,  -511,  -511,  -511,  -511,    -1,  -511,   205,    -6,
+     123,  -137,   108,  -511,  -232
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -960,11 +960,11 @@ static const yytype_int16 yydefgoto[] =
 {
        0,    72,    73,    74,    75,    76,   398,   399,   400,   401,
       77,   113,   114,   150,   127,   128,   405,    80,    81,    82,
-     151,   261,   152,    83,   284,    84,    85,    86,   523,    87,
-      88,    89,   406,   407,   408,   476,   477,   478,   153,   154,
+     151,   261,   152,    83,   284,    84,    85,    86,   519,    87,
+      88,    89,   406,   407,   408,   472,   473,   474,   153,   154,
      386,   177,   155,   311,   156,   198,   157,   432,   433,   158,
-     159,   421,   178,   491,   160,   234,   235,   161,   162,   236,
-     263,   532,   164,   237,   238
+     159,   421,   178,   487,   160,   234,   235,   161,   162,   236,
+     263,   528,   164,   237,   238
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -972,97 +972,119 @@ static const yytype_int16 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      78,    79,   176,   123,   480,   185,   163,   475,   167,   165,
-     494,   115,   190,   486,   342,   395,   171,   124,   380,   521,
-     126,   557,   584,   169,   182,   163,   168,   419,   179,   282,
-     500,   390,   420,   175,   262,   361,   189,   170,   180,   283,
-     187,   126,   262,   116,   117,   181,   183,   315,   608,   264,
-     583,   270,   391,   262,   316,   317,   319,   264,   172,   173,
-     186,   191,   318,   320,   206,   262,   270,   239,   264,   207,
-      78,   336,   194,    78,    79,   208,   126,   188,   321,   270,
-     264,   125,   250,   262,   567,   322,   209,   522,   118,   396,
-     119,   325,   120,   193,   121,   258,   259,   453,   264,   323,
-     200,   397,   567,   475,   439,   568,   324,   122,   256,   257,
-     258,   259,   201,   202,   203,   204,   455,   200,   210,   211,
-     255,   256,   257,   258,   259,   239,   574,   575,   576,   577,
-     326,   212,   213,   205,   201,   202,   203,   204,   240,   223,
-     241,   273,   227,   573,   574,   575,   576,   577,   558,   195,
-     196,   475,   337,   222,   473,   580,   338,   567,   233,   331,
-     266,   294,   265,   243,   244,   245,   246,   280,   537,   196,
-     270,   606,   196,   250,   271,   272,   274,   126,   388,   389,
-     475,   279,   275,   281,   285,   502,   509,   510,   511,   512,
-     286,   298,   515,   288,   518,   289,   290,   126,   293,   295,
-     605,   576,   577,   340,   343,   296,   332,   333,   611,   253,
-     254,   255,   256,   257,   258,   259,   334,   307,   312,   308,
-     335,   309,   339,   310,   383,   393,   409,   422,   520,   452,
-     479,   613,   481,   403,   482,   483,   498,   344,   345,   346,
+      78,    79,   176,   123,   476,   185,   163,   342,   167,   165,
+     190,   115,   395,   482,   517,   471,   171,   524,   490,   124,
+     126,   270,   380,   270,   182,   163,   168,   282,   361,   390,
+     496,   239,   315,   175,   563,   336,   525,   283,   180,   316,
+     187,   126,   553,   580,   243,   244,   245,   246,   268,   269,
+     391,   270,   317,   170,   250,   271,   272,   116,   117,   318,
+     186,   181,   183,   256,   257,   258,   259,   258,   259,   604,
+      78,   579,   194,    78,    79,   169,   126,   188,   572,   573,
+     262,   270,   518,   125,   250,   337,   396,   179,   262,   338,
+     253,   254,   255,   256,   257,   258,   259,   439,   397,   262,
+     200,   449,   118,   319,   119,   189,   120,   471,   121,   193,
+     320,   262,   201,   202,   203,   204,   191,   200,   210,   211,
+     451,   122,   255,   256,   257,   258,   259,   172,   173,   262,
+     205,   212,   213,   321,   201,   202,   203,   204,   419,   223,
+     322,   273,   227,   420,   554,   563,   206,   469,   564,   323,
+     563,   195,   196,   222,   207,   471,   324,   208,   233,   576,
+     266,   294,   243,   244,   245,   246,   209,   280,   239,   270,
+     533,   196,   250,   271,   272,   602,   196,   126,   498,   388,
+     389,   279,   240,   281,   471,   241,   569,   570,   571,   572,
+     573,   298,   570,   571,   572,   573,   601,   126,   514,   265,
+     505,   506,   507,   508,   607,   296,   511,   274,   253,   254,
+     255,   256,   257,   258,   259,   307,   275,   308,   312,   309,
+     285,   310,   286,   288,   289,   290,   293,   609,   516,   295,
+     325,   403,   326,   331,   332,   340,   333,   344,   345,   346,
      347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
-     357,   358,   359,   360,   385,   385,   385,   541,   336,   519,
-     530,   539,   348,   349,   350,   352,   353,    78,   382,   540,
-     550,   556,   387,   387,   387,   551,   561,   553,   394,   559,
-     579,   402,   581,   582,   522,   175,   175,   175,   585,   199,
-     199,    78,    78,   604,   412,   614,   414,   609,   416,   616,
-     418,   615,   617,   192,   496,   184,   199,   199,   199,   199,
-     499,   524,   214,   552,   450,   435,     0,     0,     0,   224,
-     225,   314,     0,     0,     0,   440,   441,   442,   443,     0,
-     444,     0,     0,     0,   451,     0,     0,   454,     0,     0,
-       0,     0,     0,     0,     0,     0,   449,     0,   534,   535,
-     536,     0,     0,     0,     0,     0,   456,   457,   458,   459,
-     460,   461,   462,   463,   464,   465,   466,   467,   468,   469,
-     470,   471,   472,   533,   533,   533,   533,     0,     0,     0,
-       0,    78,     0,    78,   484,   485,     0,     0,     0,     0,
+     357,   358,   359,   360,   385,   385,   385,   537,   334,   335,
+     343,   339,   348,   349,   350,   352,   353,    78,   382,   383,
+     393,   264,   387,   387,   387,   409,   422,   448,   394,   264,
+     475,   402,   477,   478,   479,   175,   175,   175,   515,   494,
+     264,    78,    78,   526,   412,   535,   414,   536,   416,   546,
+     418,   547,   264,   555,   549,   552,   557,   575,   578,   518,
+     600,   577,   581,   605,   610,   611,   612,   613,   192,   492,
+     264,   199,   199,   184,   520,   440,   441,   442,   443,   495,
+     444,   446,   548,   435,   447,   314,   445,   450,   199,   199,
+     199,   199,     0,     0,   214,     0,   233,   530,   531,   532,
+       0,   224,   225,     0,     0,     0,   452,   453,   454,   455,
+     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
+     466,   467,   468,     0,     0,     0,     0,     0,     0,     0,
+       0,    78,     0,    78,   480,   481,     0,     0,     0,     0,
        0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   115,   495,     0,    78,     0,    78,
-       0,     0,     0,     0,     0,     0,   508,     0,     0,     0,
-       0,     0,   588,   589,   590,   591,   592,   593,   594,   595,
-     596,   597,   598,   599,   600,   601,   602,   603,     0,     0,
-       0,     0,     0,     0,     0,     0,   451,     0,   533,   533,
-     533,   533,   533,   533,   533,   533,   533,   533,   533,   533,
-     533,   533,   533,   533,   612,     0,     0,     0,   538,     0,
-       0,     0,   411,     0,   413,     0,   415,    78,   417,    78,
-     526,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     533,     0,     0,     0,     0,     0,     0,     0,   434,   434,
-     436,   437,     0,     0,   126,     0,     0,   528,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    78,   555,   560,     0,    78,   529,    78,     0,     0,
-       0,     0,     0,     0,   243,   244,   245,   246,   268,   269,
-       0,   270,     0,     0,   250,   271,   272,     0,     0,   115,
-       0,     0,     0,   586,    78,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   492,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
-     253,   254,   255,   256,   257,   258,   259,    78,     0,     0,
-       0,     0,     0,     0,   507,     0,     0,     0,     0,     0,
-     513,   514,     0,   516,   517,   299,     0,     0,     0,     0,
-      78,   300,     0,     0,     0,     0,     0,     0,     0,   243,
-     244,   245,   246,   268,   269,     0,   270,   301,     0,   250,
-     271,   272,     0,   302,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   115,   491,     0,    78,     0,    78,
+       0,     0,     0,     0,     0,     0,   504,     0,     0,     0,
+       0,   584,   585,   586,   587,   588,   589,   590,   591,   592,
+     593,   594,   595,   596,   597,   598,   599,     0,   558,   559,
+       0,   560,   447,     0,     0,   563,     0,     0,   564,   565,
+     566,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   608,   534,     0,     0,     0,     0,     0,
+       0,     0,     0,    78,     0,    78,   522,   299,     0,     0,
+       0,     0,     0,   300,   567,   568,   569,   570,   571,   572,
+     573,   243,   244,   245,   246,   268,   269,     0,   270,     0,
+     126,   250,   271,   272,   411,     0,   413,     0,   415,     0,
+     417,     0,     0,     0,     0,     0,     0,    78,   551,   556,
+       0,    78,     0,    78,     0,     0,     0,     0,     0,     0,
+     434,   434,   436,   437,     0,     0,     0,   253,   254,   255,
+     256,   257,   258,   259,     0,   115,     0,   301,     0,   582,
+      78,     0,     0,   302,     0,     0,     0,     0,     0,     0,
        0,   243,   244,   245,   246,   268,   269,     0,   270,     0,
-       0,   250,   271,   272,     0,     0,     0,     0,     0,     0,
-     531,   531,   531,   531,     0,   253,   254,   255,   256,   257,
-     258,   259,     0,     0,     0,     0,   542,   543,   544,   545,
-       0,     0,   546,   547,   548,   549,     0,   253,   254,   255,
-     256,   257,   258,   259,     0,     0,   303,     0,     0,     0,
-       0,     0,   304,     0,     0,     0,     0,     0,     0,     0,
-     243,   244,   245,   246,   268,   269,     0,   270,     0,     0,
-     250,   271,   272,     0,   513,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   531,   531,   531,   531,   531,
-     531,   531,   531,   531,   531,   531,   531,   531,   531,   531,
-     531,     0,     0,     0,     0,   607,   253,   254,   255,   256,
-     257,   258,   259,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   531,   228,   229,
-       1,   230,   231,    90,   133,   134,   135,   136,    91,     8,
-      92,    93,    10,    94,    95,    96,    97,    15,    16,    98,
-      18,    99,    20,    21,   100,   101,   102,   103,    25,     0,
-      27,    28,   104,   105,   106,   107,     0,     0,     0,     0,
-      33,    34,   139,    36,    37,    38,     0,    39,    40,   140,
-      42,   141,    44,   142,    46,   143,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,   144,    61,
-      62,   145,    64,    65,   108,   109,   110,   111,     0,     0,
-       0,   112,     0,     0,     0,   146,   147,     0,     0,     0,
-       0,   166,     0,   149,     0,   232,   129,   130,     1,   131,
+       0,   250,   271,   272,     0,    78,     0,     0,     0,     0,
+       0,     0,     0,    78,     0,     0,     0,     0,     0,     0,
+       0,   529,   529,   529,   529,     0,     0,     0,   488,     0,
+       0,     0,     0,     0,     0,     0,    78,   253,   254,   255,
+     256,   257,   258,   259,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   503,     0,     0,     0,
+       0,     0,   509,   510,   303,   512,   513,     0,     0,     0,
+     304,     0,     0,     0,     0,     0,     0,     0,   243,   244,
+     245,   246,   268,   269,     0,   270,     0,     0,   250,   271,
+     272,     0,     0,     0,     0,     0,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,     0,     0,     0,     0,     0,     0,   527,   527,
+     527,   527,     0,     0,   253,   254,   255,   256,   257,   258,
+     259,     0,     0,     0,   538,   539,   540,   541,   529,     0,
+     542,   543,   544,   545,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   305,     0,     0,     0,     0,     0,
+     306,     0,     0,     0,     0,     0,     0,     0,   243,   244,
+     245,   246,   268,   269,     0,   270,     0,     0,   250,   271,
+     272,     0,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   527,   527,   527,   527,   527,   527,   527,
+     527,   527,   527,   527,   527,   527,   527,   527,   527,     0,
+       0,     0,     0,   603,   253,   254,   255,   256,   257,   258,
+     259,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   527,   228,   229,     1,   230,
+     231,    90,   133,   134,   135,   136,    91,     8,    92,    93,
+      10,    94,    95,    96,    97,    15,    16,    98,    18,    99,
+      20,    21,   100,   101,   102,   103,    25,     0,    27,    28,
+     104,   105,   106,   107,     0,     0,     0,     0,    33,    34,
+     139,    36,    37,    38,     0,    39,    40,   140,    42,   141,
+      44,   142,    46,   143,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,   144,    61,    62,   145,
+      64,    65,   108,   109,   110,   111,     0,     0,     0,   112,
+       0,     0,     0,   146,   147,     0,     0,     0,     0,   166,
+       0,   149,     0,   232,   129,   130,     1,   131,   132,    90,
+     133,   134,   135,   136,    91,     8,    92,    93,    10,    94,
+      95,    96,    97,    15,    16,    98,    18,    99,   242,    21,
+     100,   101,   102,   103,    25,     0,    27,    28,   104,   105,
+     106,   107,   243,   244,   245,   246,   247,   248,   139,   249,
+      37,    38,   250,   251,   252,   140,    42,   141,    44,   142,
+      46,   143,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,   144,    61,    62,   145,    64,    65,
+     108,   109,   110,   111,     0,     0,     0,   112,   253,   254,
+     255,   256,   257,   258,   259,     0,   260,   166,     0,   149,
+     129,   130,     1,   131,   132,    90,   133,   134,   135,   136,
+      91,     8,    92,    93,    10,    94,    95,    96,    97,    15,
+     276,    98,    18,    99,    20,    21,   100,   101,   102,   103,
+      25,     0,    27,    28,   104,   105,   106,   107,   243,   244,
+     245,   246,   247,   248,   139,   249,   277,   278,   250,   251,
+     252,   140,    42,   141,    44,   142,    46,   143,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+     144,    61,    62,   145,    64,    65,   108,   109,   110,   111,
+       0,     0,     0,   112,   253,   254,   255,   256,   257,   258,
+     259,     0,   260,   166,     0,   149,   129,   130,     1,   131,
      132,    90,   133,   134,   135,   136,    91,     8,    92,    93,
       10,    94,    95,    96,    97,    15,    16,    98,    18,    99,
-     242,    21,   100,   101,   102,   103,    25,     0,    27,    28,
+      20,    21,   100,   101,   102,   103,    25,     0,   287,    28,
      104,   105,   106,   107,   243,   244,   245,   246,   247,   248,
      139,   249,    37,    38,   250,   251,   252,   140,    42,   141,
       44,   142,    46,   143,    48,    49,    50,    51,    52,    53,
@@ -1071,9 +1093,9 @@ static const yytype_int16 yytable[] =
      253,   254,   255,   256,   257,   258,   259,     0,   260,   166,
        0,   149,   129,   130,     1,   131,   132,    90,   133,   134,
      135,   136,    91,     8,    92,    93,    10,    94,    95,    96,
-      97,    15,   276,    98,    18,    99,    20,    21,   100,   101,
+      97,    15,    16,    98,    18,    99,    20,    21,   100,   101,
      102,   103,    25,     0,    27,    28,   104,   105,   106,   107,
-     243,   244,   245,   246,   247,   248,   139,   249,   277,   278,
+     243,   244,   245,   246,   247,   248,   139,   249,    37,    38,
      250,   251,   252,   140,    42,   141,    44,   142,    46,   143,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,   144,    61,    62,   145,    64,    65,   108,   109,
@@ -1081,33 +1103,33 @@ static const yytype_int16 yytable[] =
      257,   258,   259,     0,   260,   166,     0,   149,   129,   130,
        1,   131,   132,    90,   133,   134,   135,   136,    91,     8,
       92,    93,    10,    94,    95,    96,    97,    15,    16,    98,
-      18,    99,    20,    21,   100,   101,   102,   103,    25,     0,
-     287,    28,   104,   105,   106,   107,   243,   244,   245,   246,
+      18,    99,   313,    21,   100,   101,   102,   103,    25,     0,
+      27,    28,   104,   105,   106,   107,   243,   244,   245,   246,
      247,   248,   139,   249,    37,    38,   250,   251,   252,   140,
       42,   141,    44,   142,    46,   143,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,   144,    61,
       62,   145,    64,    65,   108,   109,   110,   111,     0,     0,
        0,   112,   253,   254,   255,   256,   257,   258,   259,     0,
-     260,   166,     0,   149,   129,   130,     1,   131,   132,    90,
+       0,   166,     0,   149,   129,   130,     1,   131,   132,    90,
      133,   134,   135,   136,    91,     8,    92,    93,    10,    94,
       95,    96,    97,    15,    16,    98,    18,    99,    20,    21,
      100,   101,   102,   103,    25,     0,    27,    28,   104,   105,
-     106,   107,   243,   244,   245,   246,   247,   248,   139,   249,
-      37,    38,   250,   251,   252,   140,    42,   141,    44,   142,
+     106,   107,     0,     0,     0,     0,    33,    34,   139,    36,
+      37,    38,     0,    39,    40,   140,    42,   141,    44,   142,
       46,   143,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,   144,    61,    62,   145,    64,    65,
-     108,   109,   110,   111,     0,     0,     0,   112,   253,   254,
-     255,   256,   257,   258,   259,     0,   260,   166,     0,   149,
+     108,   109,   110,   111,     0,     0,     0,   112,     0,     0,
+       0,   146,   147,     0,     0,     0,     0,   166,   226,   149,
      129,   130,     1,   131,   132,    90,   133,   134,   135,   136,
       91,     8,    92,    93,    10,    94,    95,    96,    97,    15,
-      16,    98,    18,    99,   313,    21,   100,   101,   102,   103,
-      25,     0,    27,    28,   104,   105,   106,   107,   243,   244,
-     245,   246,   247,   248,   139,   249,    37,    38,   250,   251,
-     252,   140,    42,   141,    44,   142,    46,   143,    48,    49,
+      16,    98,    18,    99,    20,    21,   100,   101,   102,   103,
+      25,     0,    27,    28,   104,   105,   106,   107,     0,     0,
+       0,     0,    33,    34,   139,    36,    37,    38,     0,    39,
+      40,   140,    42,   141,    44,   142,    46,   143,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
      144,    61,    62,   145,    64,    65,   108,   109,   110,   111,
-       0,     0,     0,   112,   253,   254,   255,   256,   257,   258,
-     259,     0,     0,   166,     0,   149,   129,   130,     1,   131,
+       0,     0,     0,   112,     0,     0,     0,   146,   147,     0,
+       0,     0,     0,   166,   297,   149,   129,   130,     1,   131,
      132,    90,   133,   134,   135,   136,    91,     8,    92,    93,
       10,    94,    95,    96,    97,    15,    16,    98,    18,    99,
       20,    21,   100,   101,   102,   103,    25,     0,    27,    28,
@@ -1117,7 +1139,7 @@ static const yytype_int16 yytable[] =
       54,    55,    56,    57,    58,    59,   144,    61,    62,   145,
       64,    65,   108,   109,   110,   111,     0,     0,     0,   112,
        0,     0,     0,   146,   147,     0,     0,     0,     0,   166,
-     226,   149,   129,   130,     1,   131,   132,    90,   133,   134,
+     341,   149,   129,   130,     1,   131,   132,    90,   133,   134,
      135,   136,    91,     8,    92,    93,    10,    94,    95,    96,
       97,    15,    16,    98,    18,    99,    20,    21,   100,   101,
      102,   103,    25,     0,    27,    28,   104,   105,   106,   107,
@@ -1126,7 +1148,7 @@ static const yytype_int16 yytable[] =
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
       58,    59,   144,    61,    62,   145,    64,    65,   108,   109,
      110,   111,     0,     0,     0,   112,     0,     0,     0,   146,
-     147,     0,     0,     0,     0,   166,   297,   149,   129,   130,
+     147,     0,     0,     0,     0,   166,   438,   149,   129,   130,
        1,   131,   132,    90,   133,   134,   135,   136,    91,     8,
       92,    93,    10,    94,    95,    96,    97,    15,    16,    98,
       18,    99,    20,    21,   100,   101,   102,   103,    25,     0,
@@ -1136,16 +1158,16 @@ static const yytype_int16 yytable[] =
       52,    53,    54,    55,    56,    57,    58,    59,   144,    61,
       62,   145,    64,    65,   108,   109,   110,   111,     0,     0,
        0,   112,     0,     0,     0,   146,   147,     0,     0,     0,
-       0,   166,   341,   149,   129,   130,     1,   131,   132,    90,
-     133,   134,   135,   136,    91,     8,    92,    93,    10,    94,
-      95,    96,    97,    15,    16,    98,    18,    99,    20,    21,
+       0,   166,   497,   149,   129,   130,     1,   131,   132,    90,
+     133,   134,   135,   136,    91,     8,    92,    93,   137,    94,
+      95,    96,    97,    15,    16,    98,   138,    99,    20,    21,
      100,   101,   102,   103,    25,     0,    27,    28,   104,   105,
      106,   107,     0,     0,     0,     0,    33,    34,   139,    36,
       37,    38,     0,    39,    40,   140,    42,   141,    44,   142,
       46,   143,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,   144,    61,    62,   145,    64,    65,
      108,   109,   110,   111,     0,     0,     0,   112,     0,     0,
-       0,   146,   147,     0,     0,     0,     0,   166,   438,   149,
+       0,   146,   147,     0,     0,     0,     0,   148,     0,   149,
      129,   130,     1,   131,   132,    90,   133,   134,   135,   136,
       91,     8,    92,    93,    10,    94,    95,    96,    97,    15,
       16,    98,    18,    99,    20,    21,   100,   101,   102,   103,
@@ -1155,9 +1177,9 @@ static const yytype_int16 yytable[] =
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
      144,    61,    62,   145,    64,    65,   108,   109,   110,   111,
        0,     0,     0,   112,     0,     0,     0,   146,   147,     0,
-       0,     0,     0,   166,   501,   149,   129,   130,     1,   131,
+       0,     0,     0,   166,     0,   149,   129,   130,     1,   131,
      132,    90,   133,   134,   135,   136,    91,     8,    92,    93,
-     137,    94,    95,    96,    97,    15,    16,    98,   138,    99,
+      10,    94,    95,    96,    97,    15,    16,    98,    18,    99,
       20,    21,   100,   101,   102,   103,    25,     0,    27,    28,
      104,   105,   106,   107,     0,     0,     0,     0,    33,    34,
      139,    36,    37,    38,     0,    39,    40,   140,    42,   141,
@@ -1172,9 +1194,9 @@ static const yytype_int16 yytable[] =
        0,     0,     0,     0,    33,    34,   139,    36,    37,    38,
        0,    39,    40,   140,    42,   141,    44,   142,    46,   143,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,   144,    61,    62,   145,    64,    65,   108,   109,
+      58,    59,   144,    61,    62,    63,    64,    65,   108,   109,
      110,   111,     0,     0,     0,   112,     0,     0,     0,   146,
-     147,     0,     0,     0,     0,   166,     0,   149,   129,   130,
+     147,     0,     0,     0,     0,   197,     0,   149,   129,   130,
        1,   131,   132,    90,   133,   134,   135,   136,    91,     8,
       92,    93,    10,    94,    95,    96,    97,    15,    16,    98,
       18,    99,    20,    21,   100,   101,   102,   103,    25,     0,
@@ -1182,35 +1204,35 @@ static const yytype_int16 yytable[] =
       33,    34,   139,    36,    37,    38,     0,    39,    40,   140,
       42,   141,    44,   142,    46,   143,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,   144,    61,
-      62,   145,    64,    65,   108,   109,   110,   111,     0,     0,
+      62,    63,    64,    65,   108,   109,   110,   111,     0,     0,
        0,   112,     0,     0,     0,   146,   147,     0,     0,     0,
-       0,   148,     0,   149,   129,   130,     1,   131,   132,    90,
+       0,   166,     0,   149,   129,   130,     1,   131,   132,    90,
      133,   134,   135,   136,    91,     8,    92,    93,    10,    94,
       95,    96,    97,    15,    16,    98,    18,    99,    20,    21,
      100,   101,   102,   103,    25,     0,    27,    28,   104,   105,
      106,   107,     0,     0,     0,     0,    33,    34,   139,    36,
-      37,    38,     0,    39,    40,   140,    42,   141,    44,   142,
-      46,   143,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,   144,    61,    62,    63,    64,    65,
+      37,    38,     0,    39,    40,   140,   423,   141,   424,   142,
+     425,   143,   426,    49,    50,    51,    52,    53,    54,    55,
+     427,   428,   429,    59,   144,    61,   430,   431,    64,    65,
      108,   109,   110,   111,     0,     0,     0,   112,     0,     0,
-       0,   146,   147,     0,     0,     0,     0,   197,     0,   149,
+       0,   146,   147,     0,     0,     0,     0,   166,     0,   149,
      129,   130,     1,   131,   132,    90,   133,   134,   135,   136,
       91,     8,    92,    93,    10,    94,    95,    96,    97,    15,
       16,    98,    18,    99,    20,    21,   100,   101,   102,   103,
       25,     0,    27,    28,   104,   105,   106,   107,     0,     0,
        0,     0,    33,    34,   139,    36,    37,    38,     0,    39,
       40,   140,    42,   141,    44,   142,    46,   143,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-     144,    61,    62,    63,    64,    65,   108,   109,   110,   111,
+      50,    51,    52,    53,    54,    55,   427,   428,    58,    59,
+     144,    61,   430,   431,    64,    65,   108,   109,   110,   111,
        0,     0,     0,   112,     0,     0,     0,   146,   147,     0,
-       0,     0,     0,   166,     0,   149,   129,   130,     1,   131,
-     132,    90,   133,   134,   135,   136,    91,     8,    92,    93,
+       0,     0,     0,   166,     0,   149,   228,   229,     1,   230,
+     231,    90,   133,   134,   135,   136,    91,     8,    92,    93,
       10,    94,    95,    96,    97,    15,    16,    98,    18,    99,
       20,    21,   100,   101,   102,   103,    25,     0,    27,    28,
      104,   105,   106,   107,     0,     0,     0,     0,    33,    34,
-     139,    36,    37,    38,     0,    39,    40,   140,   423,   141,
-     424,   142,   425,   143,   426,    49,    50,    51,    52,    53,
-      54,    55,   427,   428,   429,    59,   144,    61,   430,   431,
+     139,    36,    37,    38,     0,    39,    40,   140,    42,   141,
+      44,   142,    46,   143,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,   144,    61,    62,   145,
       64,    65,   108,   109,   110,   111,     0,     0,     0,   112,
        0,     0,     0,   146,   147,     0,     0,     0,     0,   166,
        0,   149,   129,   130,     1,   131,   132,    90,   133,   134,
@@ -1219,25 +1241,25 @@ static const yytype_int16 yytable[] =
      102,   103,    25,     0,    27,    28,   104,   105,   106,   107,
        0,     0,     0,     0,    33,    34,   139,    36,    37,    38,
        0,    39,    40,   140,    42,   141,    44,   142,    46,   143,
-      48,    49,    50,    51,    52,    53,    54,    55,   427,   428,
-      58,    59,   144,    61,   430,   431,    64,    65,   108,   109,
+      48,    49,    50,    51,    52,    53,    54,    55,   483,   484,
+      58,    59,   144,    61,   485,   486,    64,    65,   108,   109,
      110,   111,     0,     0,     0,   112,     0,     0,     0,   146,
      147,     0,     0,     0,     0,   166,     0,   149,   129,   130,
        1,   131,   132,    90,   133,   134,   135,   136,    91,     8,
       92,    93,    10,    94,    95,    96,    97,    15,    16,    98,
       18,    99,    20,    21,   100,   101,   102,   103,    25,     0,
       27,    28,   104,   105,   106,   107,     0,     0,     0,     0,
-      33,    34,   139,    36,    37,    38,     0,    39,    40,   140,
+       0,     0,   139,    36,    37,    38,     0,    39,    40,   140,
       42,   141,    44,   142,    46,   143,    48,    49,    50,    51,
-      52,    53,    54,    55,   487,   488,    58,    59,   144,    61,
-     489,   490,    64,    65,   108,   109,   110,   111,     0,     0,
+      52,    53,    54,    55,    56,    57,    58,    59,   144,    61,
+      62,   145,    64,    65,   108,   109,   110,   111,     0,     0,
        0,   112,     0,     0,     0,   146,   147,     0,     0,     0,
        0,   166,     0,   149,   129,   130,     1,   131,   132,    90,
      133,   134,   135,   136,    91,     8,    92,    93,    10,    94,
       95,    96,    97,    15,    16,    98,    18,    99,    20,    21,
      100,   101,   102,   103,    25,     0,    27,    28,   104,   105,
      106,   107,     0,     0,     0,     0,     0,     0,   139,    36,
-      37,    38,     0,    39,    40,   140,    42,   141,    44,   142,
+      37,    38,     0,     0,     0,   140,    42,   141,    44,   142,
       46,   143,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,   144,    61,    62,   145,    64,    65,
      108,   109,   110,   111,     0,     0,     0,   112,     0,     0,
@@ -1246,78 +1268,60 @@ static const yytype_int16 yytable[] =
       91,     8,    92,    93,    10,    94,    95,    96,    97,    15,
       16,    98,    18,    99,    20,    21,   100,   101,   102,   103,
       25,     0,    27,    28,   104,   105,   106,   107,     0,     0,
-       0,     0,     0,     0,   139,    36,    37,    38,     0,     0,
+       0,     0,     0,     0,   139,     0,    37,    38,     0,     0,
        0,   140,    42,   141,    44,   142,    46,   143,    48,    49,
       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
      144,    61,    62,   145,    64,    65,   108,   109,   110,   111,
-       0,     0,     0,   112,     0,     0,     0,   146,   147,     0,
-       0,     0,     0,   166,     0,   149,   129,   130,     1,   131,
-     132,    90,   133,   134,   135,   136,    91,     8,    92,    93,
-      10,    94,    95,    96,    97,    15,    16,    98,    18,    99,
-      20,    21,   100,   101,   102,   103,    25,     0,    27,    28,
-     104,   105,   106,   107,     0,     0,     0,     0,     0,     0,
-     139,     0,    37,    38,     0,     0,     0,   140,    42,   141,
-      44,   142,    46,   143,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,   144,    61,    62,   145,
-      64,    65,   108,   109,   110,   111,     0,     0,     0,   112,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   166,
-       1,   149,     0,     2,     3,     4,     5,     6,     7,     8,
-       0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+       0,     0,     0,   112,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   166,     1,   149,     0,     2,     3,     4,
+       5,     6,     7,     8,     0,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,     0,    25,    26,    27,    28,    29,    30,    31,    32,
+       0,     0,     0,     0,    33,    34,    35,    36,    37,    38,
+       0,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,     0,    69,     1,     0,    70,     0,     3,     4,     5,
+       6,     7,     8,    71,     9,    10,    11,    12,    13,    14,
+      15,    16,     0,    18,    19,    20,    21,    22,    23,    24,
+       0,    25,    26,    27,    28,     0,    30,    31,    32,     0,
+       0,     0,     0,    33,    34,    35,    36,    37,    38,     0,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,     0,
+       0,    69,     1,     0,    70,     0,     3,     4,     5,     6,
+       7,     8,   381,     9,    10,    11,    12,    13,    14,    15,
+      16,     0,    18,    19,    20,    21,    22,    23,    24,     0,
+      25,    26,    27,    28,     0,    30,    31,    32,     0,     0,
+       0,     0,    33,    34,    35,    36,    37,    38,     0,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,     0,     0,
+      69,     1,     0,    70,     0,     3,     4,     5,     6,     7,
+       8,   404,     9,    10,    11,    12,    13,    14,    15,    16,
+       0,    18,    19,    20,    21,    22,    23,    24,     0,    25,
+      26,    27,    28,     0,    30,    31,    32,     0,     0,     0,
+       0,    33,    34,    35,    36,    37,    38,     0,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,     0,     0,    69,
+       1,     0,    70,     0,     3,     4,     5,     6,     7,     8,
+     521,     9,    10,    11,    12,    13,    14,    15,    16,     0,
       18,    19,    20,    21,    22,    23,    24,     0,    25,    26,
-      27,    28,    29,    30,    31,    32,     0,     0,     0,     0,
+      27,    28,     0,    30,    31,    32,     0,     0,     0,     0,
       33,    34,    35,    36,    37,    38,     0,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,     0,    69,     1,
-       0,    70,     0,     3,     4,     5,     6,     7,     8,    71,
+      62,    63,    64,    65,    66,    67,     0,     0,    69,     1,
+       0,    70,     0,     3,     4,     5,     6,     7,     8,   550,
        9,    10,    11,    12,    13,    14,    15,    16,     0,    18,
       19,    20,    21,    22,    23,    24,     0,    25,    26,    27,
       28,     0,    30,    31,    32,     0,     0,     0,     0,    33,
       34,    35,    36,    37,    38,     0,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,     0,     0,    69,     1,     0,
-      70,     0,     3,     4,     5,     6,     7,     8,   381,     9,
-      10,    11,    12,    13,    14,    15,    16,     0,    18,    19,
-      20,    21,    22,    23,    24,     0,    25,    26,    27,    28,
-       0,    30,    31,    32,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,    38,     0,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,     0,     0,    69,     1,     0,    70,
-       0,     3,     4,     5,     6,     7,     8,   404,     9,    10,
-      11,    12,    13,    14,    15,    16,     0,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,    26,    27,    28,     0,
-      30,    31,    32,     0,     0,     0,     0,    33,    34,    35,
-      36,    37,    38,     0,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,     0,     0,    69,     1,     0,    70,     0,
-       3,     4,     5,     6,     7,     8,   525,     9,    10,    11,
-      12,    13,    14,    15,    16,     0,    18,    19,    20,    21,
-      22,    23,    24,     0,    25,    26,    27,    28,     0,    30,
-      31,    32,     0,     0,     0,     0,    33,    34,    35,    36,
-      37,    38,     0,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,     0,     0,    69,     1,     0,    70,     0,     3,
-       4,     5,     6,     7,     8,   554,     9,    10,    11,    12,
-      13,    14,    15,    16,     0,    18,    19,    20,    21,    22,
-      23,    24,     0,    25,    26,    27,    28,     0,    30,    31,
-      32,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-      38,     0,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,     0,     0,     0,     0,     0,    70,     0,     0,     0,
-       0,     0,     0,     0,   474,   445,   446,     1,   447,   448,
-      90,     3,     4,     5,     6,    91,     8,    92,    93,    10,
-      94,    95,    96,    97,    15,    16,    98,    18,    99,    20,
-      21,   100,   101,   102,   103,    25,     0,    27,    28,   104,
-     105,   106,   107,     0,     0,     0,     0,    33,    34,    35,
-      36,    37,    38,     0,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,   108,   109,   110,   111,     0,     1,     0,   112,    90,
+      63,    64,    65,    66,    67,     0,     0,     0,     0,     0,
+      70,     0,     0,     0,     0,     0,     1,     0,   470,    90,
        3,     4,     5,     6,    91,     8,    92,    93,    10,    94,
       95,    96,    97,    15,    16,    98,    18,    99,    20,    21,
      100,   101,   102,   103,    25,     0,    27,    28,   104,   105,
@@ -1356,165 +1360,183 @@ static const yytype_int16 yytable[] =
        0,    33,    34,    35,    36,    37,    38,     0,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,   305,    67,     0,     0,     0,
-       0,   306,    70,     0,     0,     0,     0,     0,   503,   243,
+      61,    62,    63,    64,    65,   499,    67,     0,     0,     0,
+       0,     0,    70,     0,     0,     0,     0,     0,   500,   243,
      244,   245,   246,   268,   269,     0,   270,     0,     0,   250,
-     271,   272,   243,   244,   245,   246,   268,   269,   504,   270,
+     271,   272,   243,   244,   245,   246,   268,   269,   501,   270,
        0,     0,   250,   271,   272,     0,     0,     0,     0,     0,
        0,     0,   243,   244,   245,   246,   268,   269,     0,   270,
        0,     0,   250,   271,   272,   253,   254,   255,   256,   257,
      258,   259,     0,     0,     0,     0,     0,     0,   253,   254,
      255,   256,   257,   258,   259,     0,     0,     0,     0,     0,
-       0,   505,     0,     0,     0,     0,     0,     0,   253,   254,
+       0,   502,     0,     0,     0,     0,     0,     0,   253,   254,
      255,   256,   257,   258,   259,   243,   244,   245,   246,   268,
-     269,   506,   270,     0,     0,   250,   271,   272,     0,     0,
-       0,     0,     0,     0,   578,   243,   244,   245,   246,   268,
-     269,     0,   270,     0,     0,   250,   271,   272,   562,   563,
-       0,   564,   565,   566,     0,   567,     0,     0,   568,   569,
-     570,   253,   254,   255,   256,   257,   258,   259,     0,     0,
+     269,   574,   270,     0,     0,   250,   271,   272,     0,     0,
+       0,     0,     0,     0,     0,   558,   559,     0,   560,   561,
+     562,     0,   563,     0,     0,   564,   565,   566,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   253,   254,   255,   256,   257,   258,   259,     0,     0,
-       0,     0,     0,   291,   571,   572,   573,   574,   575,   576,
-     577,   243,   244,   245,   246,   268,   269,   267,   270,     0,
-       0,   250,   271,   272,     0,     0,   243,   244,   245,   246,
-     268,   269,     0,   270,     0,     0,   250,   271,   272,   243,
-     244,   245,   246,   268,   269,     0,   270,     0,     0,   250,
-     271,   272,     0,     0,     0,     0,     0,   253,   254,   255,
-     256,   257,   258,   259,   292,     0,     0,     0,     0,     0,
-       0,     0,   253,   254,   255,   256,   257,   258,   259,     0,
-       0,     0,     0,     0,     0,   253,   254,   255,   256,   257,
-     258,   259,     0,   329,     0,   330,   243,   244,   245,   246,
-     268,   269,     0,   270,     0,     0,   250,   271,   272,   243,
-     244,   245,   246,   268,   269,     0,   270,     0,     0,   250,
-     271,   272,   362,   363,   364,   365,   366,   367,     0,   368,
-       0,     0,   369,   370,   371,     0,     0,     0,     0,     0,
-       0,     0,   253,   254,   255,   256,   257,   258,   259,     0,
-     410,     0,   330,     0,     0,   253,   254,   255,   256,   257,
-     258,   259,     0,     0,     0,   330,     0,     0,   372,   373,
-     374,   375,   376,   377,   378,     0,   379,   243,   244,   245,
+     291,   253,   254,   255,   256,   257,   258,   259,   243,   244,
+     245,   246,   268,   269,     0,   270,     0,     0,   250,   271,
+     272,   567,   568,   569,   570,   571,   572,   573,   267,     0,
+       0,     0,     0,     0,     0,     0,     0,   243,   244,   245,
      246,   268,   269,     0,   270,     0,     0,   250,   271,   272,
-     243,   244,   245,   246,   268,   269,     0,   270,     0,     0,
-     250,   271,   272,   243,   244,   245,   246,   268,   269,     0,
-     270,     0,     0,   250,   271,   272,     0,     0,     0,     0,
+       0,     0,     0,     0,   253,   254,   255,   256,   257,   258,
+     259,   292,   243,   244,   245,   246,   268,   269,     0,   270,
+       0,     0,   250,   271,   272,     0,     0,     0,     0,     0,
        0,     0,     0,   253,   254,   255,   256,   257,   258,   259,
-     392,     0,     0,     0,     0,     0,   253,   254,   255,   256,
-     257,   258,   259,   493,     0,     0,     0,     0,     0,   253,
-     254,   255,   256,   257,   258,   259,   497,   243,   244,   245,
-     246,   268,   269,     0,   270,     0,     0,   250,   271,   272,
      243,   244,   245,   246,   268,   269,     0,   270,     0,     0,
-     250,   271,   272,   243,   244,   245,   246,   268,   269,     0,
-     270,     0,     0,   250,   271,   272,     0,     0,     0,     0,
-       0,     0,     0,   253,   254,   255,   256,   257,   258,   259,
-     527,     0,     0,     0,     0,     0,   253,   254,   255,   256,
-     257,   258,   259,   587,     0,     0,     0,     0,     0,   253,
-     254,   255,   256,   257,   258,   259,   610,   243,   244,   245,
-     246,   268,   269,     0,   270,     0,     0,   250,   271,   272,
+     250,   271,   272,     0,     0,     0,     0,     0,   253,   254,
+     255,   256,   257,   258,   259,     0,   329,     0,   330,   243,
+     244,   245,   246,   268,   269,     0,   270,     0,     0,   250,
+     271,   272,     0,     0,     0,     0,   253,   254,   255,   256,
+     257,   258,   259,     0,   410,     0,   330,   362,   363,   364,
+     365,   366,   367,     0,   368,     0,     0,   369,   370,   371,
+       0,     0,     0,     0,     0,   253,   254,   255,   256,   257,
+     258,   259,     0,     0,     0,   330,   243,   244,   245,   246,
+     268,   269,     0,   270,     0,     0,   250,   271,   272,     0,
+       0,     0,     0,   372,   373,   374,   375,   376,   377,   378,
+       0,   379,   243,   244,   245,   246,   268,   269,     0,   270,
+       0,     0,   250,   271,   272,     0,     0,     0,     0,     0,
+       0,     0,   253,   254,   255,   256,   257,   258,   259,   392,
      243,   244,   245,   246,   268,   269,     0,   270,     0,     0,
-     250,   271,   272,     0,     0,   362,   363,   364,   365,   366,
-     367,     0,   368,   327,   328,   369,   370,   371,     0,     0,
-       0,     0,     0,   253,   254,   255,   256,   257,   258,   259,
+     250,   271,   272,     0,     0,     0,     0,     0,   253,   254,
+     255,   256,   257,   258,   259,   489,   243,   244,   245,   246,
+     268,   269,     0,   270,     0,     0,   250,   271,   272,     0,
        0,     0,     0,     0,     0,     0,   253,   254,   255,   256,
-     257,   258,   259,     0,     0,     0,     0,     0,     0,     0,
-       0,   372,   373,   374,   375,   376,   377,   378,   562,   563,
-       0,   564,   565,   566,     0,   567,     0,     0,   568,   569,
-     570,   562,   563,     0,   564,     0,     0,     0,   567,     0,
-       0,   568,   569,   570,     0,     0,     0,     0,     0,     0,
+     257,   258,   259,   493,   243,   244,   245,   246,   268,   269,
+       0,   270,     0,     0,   250,   271,   272,     0,     0,     0,
+       0,     0,   253,   254,   255,   256,   257,   258,   259,   523,
+     243,   244,   245,   246,   268,   269,     0,   270,     0,     0,
+     250,   271,   272,     0,     0,     0,     0,     0,     0,     0,
+     253,   254,   255,   256,   257,   258,   259,   583,   243,   244,
+     245,   246,   268,   269,     0,   270,     0,     0,   250,   271,
+     272,     0,     0,     0,     0,     0,   253,   254,   255,   256,
+     257,   258,   259,   606,     0,     0,   243,   244,   245,   246,
+     268,   269,     0,   270,   327,   328,   250,   271,   272,     0,
+       0,     0,     0,     0,   253,   254,   255,   256,   257,   258,
+     259,   362,   363,   364,   365,   366,   367,     0,   368,     0,
+       0,   369,   370,   371,     0,     0,     0,     0,     0,     0,
+       0,     0,   253,   254,   255,   256,   257,   258,   259,   558,
+     559,     0,   560,   561,   562,     0,   563,     0,     0,   564,
+     565,   566,     0,     0,     0,     0,     0,   372,   373,   374,
+     375,   376,   377,   378,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   571,   572,   573,   574,   575,   576,
-     577,     0,     0,     0,     0,     0,     0,   571,   572,   573,
-     574,   575,   576,   577
+       0,     0,     0,     0,     0,   567,   568,   569,   570,   571,
+     572,   573
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     0,    24,     7,   383,    32,    12,   381,    14,    13,
-     395,     2,    70,   392,   239,     9,    22,    31,   263,    16,
-      11,   525,   557,    31,    30,    31,    17,    23,    95,    34,
-     409,    23,    28,    24,   163,   260,    95,    22,    29,    44,
-      67,    32,   171,    10,    11,    30,    31,    68,   583,   163,
-     554,    49,    44,   182,    75,    68,    68,   171,    36,    37,
-      66,     0,    75,    75,    95,   194,    49,    97,   182,    95,
-      70,   101,    78,    73,    73,    95,    67,    68,    68,    49,
-     194,    95,    52,   212,    49,    75,    96,    84,    55,    83,
-      57,    28,    59,    78,    61,    93,    94,   342,   212,    68,
-     117,    95,    49,   477,   329,    52,    75,    74,    91,    92,
-      93,    94,   118,   119,   120,   121,   361,   134,   135,   136,
-      90,    91,    92,    93,    94,    97,    91,    92,    93,    94,
-      28,   137,   138,    69,   140,   141,   142,   143,    95,   145,
-      95,   168,   148,    90,    91,    92,    93,    94,   527,    95,
-      96,   525,    96,   144,   379,   540,   100,    49,   149,   101,
-     166,   188,    95,    42,    43,    44,    45,   173,    95,    96,
-      49,    95,    96,    52,    53,    54,    95,   168,   277,   278,
-     554,   172,    95,   174,    95,   410,   423,   424,   425,   426,
-      95,   197,   429,    95,   439,    95,    95,   188,    95,    95,
-     579,    93,    94,    96,    26,   196,   101,   101,   587,    88,
-      89,    90,    91,    92,    93,    94,   101,    55,   209,    57,
-     100,    59,   100,    61,    95,    28,    95,    26,   473,    96,
-      16,   610,    95,   291,    95,    95,    86,   243,   244,   245,
+       0,     0,    24,     7,   383,    32,    12,   239,    14,    13,
+      70,     2,     9,   392,    16,   381,    22,    15,   395,    31,
+      11,    49,   263,    49,    30,    31,    17,    34,   260,    23,
+     409,    97,    68,    24,    49,   101,    34,    44,    29,    75,
+      67,    32,   521,   553,    42,    43,    44,    45,    46,    47,
+      44,    49,    68,    22,    52,    53,    54,    10,    11,    75,
+      66,    30,    31,    91,    92,    93,    94,    93,    94,   579,
+      70,   550,    78,    73,    73,    31,    67,    68,    93,    94,
+     163,    49,    84,    95,    52,    96,    83,    95,   171,   100,
+      88,    89,    90,    91,    92,    93,    94,   329,    95,   182,
+     117,   342,    55,    68,    57,    95,    59,   473,    61,    78,
+      75,   194,   118,   119,   120,   121,     0,   134,   135,   136,
+     361,    74,    90,    91,    92,    93,    94,    36,    37,   212,
+      69,   137,   138,    68,   140,   141,   142,   143,    23,   145,
+      75,   168,   148,    28,   523,    49,    95,   379,    52,    68,
+      49,    95,    96,   144,    95,   521,    75,    95,   149,   536,
+     166,   188,    42,    43,    44,    45,    96,   173,    97,    49,
+      95,    96,    52,    53,    54,    95,    96,   168,   410,   277,
+     278,   172,    95,   174,   550,    95,    90,    91,    92,    93,
+      94,   197,    91,    92,    93,    94,   575,   188,   439,    95,
+     423,   424,   425,   426,   583,   196,   429,    95,    88,    89,
+      90,    91,    92,    93,    94,    55,    95,    57,   209,    59,
+      95,    61,    95,    95,    95,    95,    95,   606,   469,    95,
+      28,   291,    28,   101,   101,    96,   101,   243,   244,   245,
      246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   276,   277,   278,   502,   101,    98,
-      85,    95,   268,   269,   270,   271,   272,   267,   267,     9,
-      28,    95,   276,   277,   278,    70,    95,    98,   284,    34,
-      95,   287,    98,    70,    84,   276,   277,   278,    85,   116,
-     117,   291,   292,    70,   300,    85,   302,    95,   304,    95,
-     306,    85,    95,    73,   400,    31,   133,   134,   135,   136,
-     407,   477,   139,   515,   337,   326,    -1,    -1,    -1,   146,
-     147,   212,    -1,    -1,    -1,   331,   332,   333,   334,    -1,
-     336,    -1,    -1,    -1,   340,    -1,    -1,   343,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   337,    -1,   488,   489,
-     490,    -1,    -1,    -1,    -1,    -1,   362,   363,   364,   365,
+     256,   257,   258,   259,   276,   277,   278,   498,   101,   100,
+      26,   100,   268,   269,   270,   271,   272,   267,   267,    95,
+      28,   163,   276,   277,   278,    95,    26,    96,   284,   171,
+      16,   287,    95,    95,    95,   276,   277,   278,    98,    86,
+     182,   291,   292,    85,   300,    95,   302,     9,   304,    28,
+     306,    70,   194,    34,    98,    95,    95,    95,    70,    84,
+      70,    98,    85,    95,    85,    85,    95,    95,    73,   400,
+     212,   116,   117,    31,   473,   331,   332,   333,   334,   407,
+     336,   337,   511,   326,   340,   212,   337,   343,   133,   134,
+     135,   136,    -1,    -1,   139,    -1,   337,   484,   485,   486,
+      -1,   146,   147,    -1,    -1,    -1,   362,   363,   364,   365,
      366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,   378,   487,   488,   489,   490,    -1,    -1,    -1,
+     376,   377,   378,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   381,    -1,   383,   390,   391,    -1,    -1,    -1,    -1,
       -1,    -1,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   395,   396,    -1,   407,    -1,   409,
       -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,    -1,    -1,
-      -1,    -1,   562,   563,   564,   565,   566,   567,   568,   569,
-     570,   571,   572,   573,   574,   575,   576,   577,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   452,    -1,   562,   563,
-     564,   565,   566,   567,   568,   569,   570,   571,   572,   573,
-     574,   575,   576,   577,   604,    -1,    -1,    -1,   495,    -1,
-      -1,    -1,   299,    -1,   301,    -1,   303,   477,   305,   479,
-     479,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     604,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   325,   326,
-     327,   328,    -1,    -1,   495,    -1,    -1,    15,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   521,   521,   529,    -1,   525,    34,   527,    -1,    -1,
-      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,   540,
-      -1,    -1,    -1,   559,   554,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   393,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   579,
-      88,    89,    90,    91,    92,    93,    94,   587,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,    -1,    -1,    -1,    -1,    -1,
-     427,   428,    -1,   430,   431,    28,    -1,    -1,    -1,    -1,
-     610,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-      43,    44,    45,    46,    47,    -1,    49,    28,    -1,    52,
-      53,    54,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+     567,   568,   569,   570,   571,   572,   573,    -1,    42,    43,
+      -1,    45,   448,    -1,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   600,   491,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   473,    -1,   475,   475,    28,    -1,    -1,
+      -1,    -1,    -1,    34,    88,    89,    90,    91,    92,    93,
+      94,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+     491,    52,    53,    54,   299,    -1,   301,    -1,   303,    -1,
+     305,    -1,    -1,    -1,    -1,    -1,    -1,   517,   517,   525,
+      -1,   521,    -1,   523,    -1,    -1,    -1,    -1,    -1,    -1,
+     325,   326,   327,   328,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    -1,   536,    -1,    28,    -1,   555,
+     550,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-     487,   488,   489,   490,    -1,    88,    89,    90,    91,    92,
-      93,    94,    -1,    -1,    -1,    -1,   503,   504,   505,   506,
-      -1,    -1,   509,   510,   511,   512,    -1,    88,    89,    90,
-      91,    92,    93,    94,    -1,    -1,    28,    -1,    -1,    -1,
-      -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,   551,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   562,   563,   564,   565,   566,
-     567,   568,   569,   570,   571,   572,   573,   574,   575,   576,
-     577,    -1,    -1,    -1,    -1,   582,    88,    89,    90,    91,
-      92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   604,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
-      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    -1,    -1,
-      -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,
-      -1,    97,    -1,    99,    -1,   101,     4,     5,     6,     7,
+      -1,    52,    53,    54,    -1,   575,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   583,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   483,   484,   485,   486,    -1,    -1,    -1,   393,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   606,    88,    89,    90,
+      91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   421,    -1,    -1,    -1,
+      -1,    -1,   427,   428,    28,   430,   431,    -1,    -1,    -1,
+      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,   558,   559,   560,   561,
+     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,    -1,    -1,    -1,    -1,    -1,    -1,   483,   484,
+     485,   486,    -1,    -1,    88,    89,    90,    91,    92,    93,
+      94,    -1,    -1,    -1,   499,   500,   501,   502,   600,    -1,
+     505,   506,   507,   508,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,
+      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,   547,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   558,   559,   560,   561,   562,   563,   564,
+     565,   566,   567,   568,   569,   570,   571,   572,   573,    -1,
+      -1,    -1,    -1,   578,    88,    89,    90,    91,    92,    93,
+      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   600,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
+      38,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    -1,    -1,    -1,    87,
+      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,
+      -1,    99,    -1,   101,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    93,    94,    -1,    96,    97,    -1,    99,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    93,
+      94,    -1,    96,    97,    -1,    99,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
@@ -1543,26 +1565,26 @@ static const yytype_int16 yycheck[] =
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    -1,    -1,
       -1,    87,    88,    89,    90,    91,    92,    93,    94,    -1,
-      96,    97,    -1,    99,     4,     5,     6,     7,     8,     9,
+      -1,    97,    -1,    99,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    93,    94,    -1,    96,    97,    -1,    99,
+      80,    81,    82,    83,    -1,    -1,    -1,    87,    -1,    -1,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    97,    98,    99,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    -1,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      34,    -1,    36,    37,    38,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    93,
-      94,    -1,    -1,    97,    -1,    99,     4,     5,     6,     7,
+      -1,    -1,    -1,    87,    -1,    -1,    -1,    91,    92,    -1,
+      -1,    -1,    -1,    97,    98,    99,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
@@ -1600,7 +1622,7 @@ static const yytype_int16 yycheck[] =
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    -1,    -1,    -1,    87,    -1,    -1,
-      -1,    91,    92,    -1,    -1,    -1,    -1,    97,    98,    99,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,    99,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
@@ -1610,7 +1632,7 @@ static const yytype_int16 yycheck[] =
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       -1,    -1,    -1,    87,    -1,    -1,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    97,    98,    99,     4,     5,     6,     7,
+      -1,    -1,    -1,    97,    -1,    99,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
@@ -1682,7 +1704,7 @@ static const yytype_int16 yycheck[] =
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    -1,
       36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-      46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
+      -1,    -1,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
       76,    77,    78,    79,    80,    81,    82,    83,    -1,    -1,
@@ -1692,7 +1714,7 @@ static const yytype_int16 yycheck[] =
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
       40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
+      50,    51,    -1,    -1,    -1,    55,    56,    57,    58,    59,
       60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    -1,    -1,    -1,    87,    -1,    -1,
@@ -1701,29 +1723,51 @@ static const yytype_int16 yycheck[] =
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    -1,    36,    37,    38,    39,    40,    41,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,
+      -1,    -1,    -1,    -1,    48,    -1,    50,    51,    -1,    -1,
       -1,    55,    56,    57,    58,    59,    60,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
       74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      -1,    -1,    -1,    87,    -1,    -1,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    97,    -1,    99,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    -1,    36,    37,
-      38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,    -1,
-      48,    -1,    50,    51,    -1,    -1,    -1,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    -1,    -1,    -1,    87,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    97,
-       6,    99,    -1,     9,    10,    11,    12,    13,    14,    15,
-      -1,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      -1,    -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    97,     6,    99,    -1,     9,    10,    11,
+      12,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      -1,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    -1,    84,     6,    -1,    87,    -1,    10,    11,    12,
+      13,    14,    15,    95,    17,    18,    19,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      -1,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    51,    -1,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    -1,
+      -1,    84,     6,    -1,    87,    -1,    10,    11,    12,    13,
+      14,    15,    95,    17,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    -1,
+      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    -1,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
+      84,     6,    -1,    87,    -1,    10,    11,    12,    13,    14,
+      15,    95,    17,    18,    19,    20,    21,    22,    23,    24,
+      -1,    26,    27,    28,    29,    30,    31,    32,    -1,    34,
+      35,    36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    46,    47,    48,    49,    50,    51,    -1,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    -1,    -1,    84,
+       6,    -1,    87,    -1,    10,    11,    12,    13,    14,    15,
+      95,    17,    18,    19,    20,    21,    22,    23,    24,    -1,
       26,    27,    28,    29,    30,    31,    32,    -1,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
+      36,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
       46,    47,    48,    49,    50,    51,    -1,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    84,     6,
+      76,    77,    78,    79,    80,    81,    -1,    -1,    84,     6,
       -1,    87,    -1,    10,    11,    12,    13,    14,    15,    95,
       17,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
       27,    28,    29,    30,    31,    32,    -1,    34,    35,    36,
@@ -1731,48 +1775,8 @@ static const yytype_int16 yycheck[] =
       47,    48,    49,    50,    51,    -1,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    -1,    -1,    84,     6,    -1,
-      87,    -1,    10,    11,    12,    13,    14,    15,    95,    17,
-      18,    19,    20,    21,    22,    23,    24,    -1,    26,    27,
-      28,    29,    30,    31,    32,    -1,    34,    35,    36,    37,
-      -1,    39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,
-      48,    49,    50,    51,    -1,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    -1,    -1,    84,     6,    -1,    87,
-      -1,    10,    11,    12,    13,    14,    15,    95,    17,    18,
-      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    -1,    34,    35,    36,    37,    -1,
-      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    -1,    -1,    84,     6,    -1,    87,    -1,
-      10,    11,    12,    13,    14,    15,    95,    17,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    -1,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
-      50,    51,    -1,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    84,     6,    -1,    87,    -1,    10,
-      11,    12,    13,    14,    15,    95,    17,    18,    19,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    -1,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
-      51,    -1,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    -1,    -1,    87,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    95,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    -1,    36,    37,    38,
-      39,    40,    41,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    51,    -1,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    -1,     6,    -1,    87,     9,
+      77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,    -1,
+      87,    -1,    -1,    -1,    -1,    -1,     6,    -1,    95,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
@@ -1812,7 +1816,7 @@ static const yytype_int16 yycheck[] =
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    28,    81,    -1,    -1,    -1,
-      -1,    34,    87,    -1,    -1,    -1,    -1,    -1,    28,    42,
+      -1,    -1,    87,    -1,    -1,    -1,    -1,    -1,    28,    42,
       43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
       53,    54,    42,    43,    44,    45,    46,    47,    28,    49,
       -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
@@ -1823,61 +1827,57 @@ static const yytype_int16 yycheck[] =
       -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
       90,    91,    92,    93,    94,    42,    43,    44,    45,    46,
       47,    28,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      -1,    -1,    -1,    -1,    28,    42,    43,    44,    45,    46,
-      47,    -1,    49,    -1,    -1,    52,    53,    54,    42,    43,
-      -1,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    88,    89,    90,    91,    92,    93,    94,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    43,    -1,    45,    46,
+      47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    88,    89,    90,    91,    92,    93,    94,    -1,    -1,
-      -1,    -1,    -1,    34,    88,    89,    90,    91,    92,    93,
-      94,    42,    43,    44,    45,    46,    47,    33,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    -1,    96,    -1,    98,    42,    43,    44,    45,
-      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    42,
-      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
-      53,    54,    42,    43,    44,    45,    46,    47,    -1,    49,
-      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    -1,
-      96,    -1,    98,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    -1,    -1,    -1,    98,    -1,    -1,    88,    89,
-      90,    91,    92,    93,    94,    -1,    96,    42,    43,    44,
+      34,    88,    89,    90,    91,    92,    93,    94,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    88,    89,    90,    91,    92,    93,    94,    33,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
+      94,    95,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    95,    42,    43,    44,
-      45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
       42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    42,    43,    44,    45,    46,    47,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
-      95,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    93,    94,    95,    42,    43,    44,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    88,    89,
+      90,    91,    92,    93,    94,    -1,    96,    -1,    98,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
+      92,    93,    94,    -1,    96,    -1,    98,    42,    43,    44,
       45,    46,    47,    -1,    49,    -1,    -1,    52,    53,    54,
-      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
-      52,    53,    54,    -1,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    49,    78,    79,    52,    53,    54,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    -1,    -1,    -1,    98,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
       -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      -1,    96,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    88,    89,
+      90,    91,    92,    93,    94,    95,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    52,    53,    54,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    88,    89,    90,    91,    92,    93,    94,    42,    43,
-      -1,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
-      54,    42,    43,    -1,    45,    -1,    -1,    -1,    49,    -1,
+      92,    93,    94,    95,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    95,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    89,    90,    91,    92,    93,    94,    95,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    52,    53,
+      54,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    42,    43,    44,    45,
+      46,    47,    -1,    49,    78,    79,    52,    53,    54,    -1,
+      -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
+      94,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
       -1,    52,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    42,
+      43,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    52,
+      53,    54,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
-      94,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    93,    94
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@@ -1928,24 +1928,24 @@ static const yytype_uint8 yystos[] =
       96,   160,   161,   160,   161,   160,   161,   160,   161,    23,
       28,   153,    26,    56,    58,    60,    62,    70,    71,    72,
       76,    77,   149,   150,   160,   149,   160,   160,    98,   166,
-     161,   161,   161,   161,   161,     4,     5,     7,     8,   115,
-     158,   161,    96,   123,   161,   123,   161,   161,   161,   161,
-     161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   161,   161,   166,    95,   119,   137,   138,   139,    16,
-     134,    95,    95,    95,   161,   161,   134,    70,    71,    76,
-      77,   155,   160,    95,   113,   115,   111,    95,    86,   136,
-     134,    98,   166,    28,    28,    28,    28,   160,   161,   153,
-     153,   153,   153,   160,   160,   153,   160,   160,   123,    98,
-     123,    16,    84,   130,   139,    95,   118,    95,    15,    34,
-      85,   160,   163,   164,   163,   163,   163,    95,   116,    95,
-       9,   123,   160,   160,   160,   160,   160,   160,   160,   160,
-      28,    70,   150,    98,    95,   118,    95,   137,   134,    34,
-     161,    95,    42,    43,    45,    46,    47,    49,    52,    53,
-      54,    88,    89,    90,    91,    92,    93,    94,    28,    95,
-     113,    98,    70,   137,   130,    85,   161,    95,   163,   163,
+     161,   161,   161,   161,   161,   158,   161,   161,    96,   123,
+     161,   123,   161,   161,   161,   161,   161,   161,   161,   161,
+     161,   161,   161,   161,   161,   161,   161,   161,   161,   166,
+      95,   119,   137,   138,   139,    16,   134,    95,    95,    95,
+     161,   161,   134,    70,    71,    76,    77,   155,   160,    95,
+     113,   115,   111,    95,    86,   136,   134,    98,   166,    28,
+      28,    28,    28,   160,   161,   153,   153,   153,   153,   160,
+     160,   153,   160,   160,   123,    98,   123,    16,    84,   130,
+     139,    95,   118,    95,    15,    34,    85,   160,   163,   164,
+     163,   163,   163,    95,   116,    95,     9,   123,   160,   160,
+     160,   160,   160,   160,   160,   160,    28,    70,   150,    98,
+      95,   118,    95,   137,   134,    34,   161,    95,    42,    43,
+      45,    46,    47,    49,    52,    53,    54,    88,    89,    90,
+      91,    92,    93,    94,    28,    95,   113,    98,    70,   137,
+     130,    85,   161,    95,   163,   163,   163,   163,   163,   163,
      163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   163,   163,   163,    70,   134,    95,   160,   130,    95,
-      95,   134,   163,   134,    85,    85,    95,    95
+      70,   134,    95,   160,   130,    95,    95,   134,   163,   134,
+      85,    85,    95,    95
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
@@ -1976,14 +1976,14 @@ static const yytype_uint8 yyr1[] =
      148,   148,   148,   149,   149,   149,   149,   149,   150,   151,
      151,   151,   151,   151,   151,   151,   151,   151,   151,   152,
      152,   152,   152,   152,   153,   153,   154,   154,   155,   155,
-     155,   155,   155,   156,   156,   156,   157,   157,   158,   158,
-     158,   158,   158,   159,   159,   160,   160,   161,   161,   161,
+     155,   155,   155,   156,   156,   156,   157,   157,   157,   158,
+     158,   158,   158,   158,   159,   159,   160,   160,   161,   161,
      161,   161,   161,   161,   161,   161,   161,   161,   161,   161,
-     161,   161,   161,   161,   161,   161,   162,   162,   162,   162,
+     161,   161,   161,   161,   161,   161,   161,   162,   162,   162,
      162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   163,   163,   163,   163,   163,
+     162,   162,   162,   162,   162,   162,   163,   163,   163,   163,
      163,   163,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   163,   163,   164,   164,   165,   165,   166,   166
+     163,   163,   163,   163,   164,   164,   165,   165,   166,   166
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -2015,13 +2015,13 @@ static const yytype_int8 yyr2[] =
        3,     3,     3,     3,     3,     3,     3,     3,     3,     6,
        6,     6,     6,     6,     1,     1,     2,     4,     1,     2,
        5,     2,     2,     3,     3,     3,     1,     3,     3,     3,
-       3,     3,     3,     2,     2,     1,     1,     1,     1,     3,
+       3,     3,     3,     3,     2,     2,     1,     1,     1,     1,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     1,     1,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     1,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     1,     1,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     1,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     4,     4,     0,     1,     1,     3
+       3,     3,     3,     3,     4,     4,     0,     1,     1,     3
 };
 
 
@@ -3980,7 +3980,7 @@ yyreduce:
     break;
 
   case 256: /* proplist: proppair  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+#line 745 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
@@ -3989,392 +3989,400 @@ yyreduce:
     break;
 
   case 257: /* proplist: proplist ',' proppair  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+#line 749 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
 #line 3997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 258: /* proppair: tSYMBOL ':' expr  */
-#line 751 "engines/director/lingo/lingo-gr.y"
+  case 258: /* proplist: proplist ',' expr  */
+#line 752 "engines/director/lingo/lingo-gr.y"
+                                        {
+		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
+		(yyval.nodelist) = (yyvsp[-2].nodelist); }
+#line 4005 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 259: /* proppair: tSYMBOL ':' expr  */
+#line 757 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 4003 "engines/director/lingo/lingo-gr.cpp"
+#line 4011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 259: /* proppair: ID ':' expr  */
-#line 752 "engines/director/lingo/lingo-gr.y"
+  case 260: /* proppair: ID ':' expr  */
+#line 758 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 4009 "engines/director/lingo/lingo-gr.cpp"
+#line 4017 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 260: /* proppair: tSTRING ':' expr  */
-#line 753 "engines/director/lingo/lingo-gr.y"
+  case 261: /* proppair: tSTRING ':' expr  */
+#line 759 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
-#line 4015 "engines/director/lingo/lingo-gr.cpp"
+#line 4023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 261: /* proppair: tINT ':' expr  */
-#line 754 "engines/director/lingo/lingo-gr.y"
+  case 262: /* proppair: tINT ':' expr  */
+#line 760 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.node) = new PropPairNode(new IntNode((yyvsp[-2].i)), (yyvsp[0].node)); }
-#line 4021 "engines/director/lingo/lingo-gr.cpp"
+#line 4029 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 262: /* proppair: tFLOAT ':' expr  */
-#line 755 "engines/director/lingo/lingo-gr.y"
+  case 263: /* proppair: tFLOAT ':' expr  */
+#line 761 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.node) = new PropPairNode(new FloatNode((yyvsp[-2].f)), (yyvsp[0].node)); }
-#line 4027 "engines/director/lingo/lingo-gr.cpp"
+#line 4035 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 263: /* unarymath: '+' simpleexpr  */
-#line 758 "engines/director/lingo/lingo-gr.y"
+  case 264: /* unarymath: '+' simpleexpr  */
+#line 764 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
-#line 4033 "engines/director/lingo/lingo-gr.cpp"
+#line 4041 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 264: /* unarymath: '-' simpleexpr  */
-#line 759 "engines/director/lingo/lingo-gr.y"
+  case 265: /* unarymath: '-' simpleexpr  */
+#line 765 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
-#line 4039 "engines/director/lingo/lingo-gr.cpp"
+#line 4047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 269: /* expr: expr '+' expr  */
-#line 769 "engines/director/lingo/lingo-gr.y"
+  case 270: /* expr: expr '+' expr  */
+#line 775 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4045 "engines/director/lingo/lingo-gr.cpp"
+#line 4053 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 270: /* expr: expr '-' expr  */
-#line 770 "engines/director/lingo/lingo-gr.y"
+  case 271: /* expr: expr '-' expr  */
+#line 776 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4051 "engines/director/lingo/lingo-gr.cpp"
+#line 4059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 271: /* expr: expr '*' expr  */
-#line 771 "engines/director/lingo/lingo-gr.y"
+  case 272: /* expr: expr '*' expr  */
+#line 777 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4057 "engines/director/lingo/lingo-gr.cpp"
+#line 4065 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 272: /* expr: expr '/' expr  */
-#line 772 "engines/director/lingo/lingo-gr.y"
+  case 273: /* expr: expr '/' expr  */
+#line 778 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4063 "engines/director/lingo/lingo-gr.cpp"
+#line 4071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 273: /* expr: expr tMOD expr  */
-#line 773 "engines/director/lingo/lingo-gr.y"
+  case 274: /* expr: expr tMOD expr  */
+#line 779 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4069 "engines/director/lingo/lingo-gr.cpp"
+#line 4077 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 274: /* expr: expr '>' expr  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+  case 275: /* expr: expr '>' expr  */
+#line 780 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4075 "engines/director/lingo/lingo-gr.cpp"
+#line 4083 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 275: /* expr: expr '<' expr  */
-#line 775 "engines/director/lingo/lingo-gr.y"
+  case 276: /* expr: expr '<' expr  */
+#line 781 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4081 "engines/director/lingo/lingo-gr.cpp"
+#line 4089 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 276: /* expr: expr tEQ expr  */
-#line 776 "engines/director/lingo/lingo-gr.y"
+  case 277: /* expr: expr tEQ expr  */
+#line 782 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4087 "engines/director/lingo/lingo-gr.cpp"
+#line 4095 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 277: /* expr: expr tNEQ expr  */
-#line 777 "engines/director/lingo/lingo-gr.y"
+  case 278: /* expr: expr tNEQ expr  */
+#line 783 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4093 "engines/director/lingo/lingo-gr.cpp"
+#line 4101 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 278: /* expr: expr tGE expr  */
-#line 778 "engines/director/lingo/lingo-gr.y"
+  case 279: /* expr: expr tGE expr  */
+#line 784 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4099 "engines/director/lingo/lingo-gr.cpp"
+#line 4107 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 279: /* expr: expr tLE expr  */
-#line 779 "engines/director/lingo/lingo-gr.y"
+  case 280: /* expr: expr tLE expr  */
+#line 785 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4105 "engines/director/lingo/lingo-gr.cpp"
+#line 4113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 280: /* expr: expr tAND expr  */
-#line 780 "engines/director/lingo/lingo-gr.y"
+  case 281: /* expr: expr tAND expr  */
+#line 786 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4111 "engines/director/lingo/lingo-gr.cpp"
+#line 4119 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 281: /* expr: expr tOR expr  */
-#line 781 "engines/director/lingo/lingo-gr.y"
+  case 282: /* expr: expr tOR expr  */
+#line 787 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4117 "engines/director/lingo/lingo-gr.cpp"
+#line 4125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 282: /* expr: expr '&' expr  */
-#line 782 "engines/director/lingo/lingo-gr.y"
+  case 283: /* expr: expr '&' expr  */
+#line 788 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4123 "engines/director/lingo/lingo-gr.cpp"
+#line 4131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 283: /* expr: expr tCONCAT expr  */
-#line 783 "engines/director/lingo/lingo-gr.y"
+  case 284: /* expr: expr tCONCAT expr  */
+#line 789 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4129 "engines/director/lingo/lingo-gr.cpp"
+#line 4137 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 284: /* expr: expr tCONTAINS expr  */
-#line 784 "engines/director/lingo/lingo-gr.y"
+  case 285: /* expr: expr tCONTAINS expr  */
+#line 790 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4135 "engines/director/lingo/lingo-gr.cpp"
+#line 4143 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 285: /* expr: expr tSTARTS expr  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+  case 286: /* expr: expr tSTARTS expr  */
+#line 791 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4141 "engines/director/lingo/lingo-gr.cpp"
+#line 4149 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 288: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 794 "engines/director/lingo/lingo-gr.y"
+  case 289: /* expr_nounarymath: expr_nounarymath '+' expr  */
+#line 800 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4147 "engines/director/lingo/lingo-gr.cpp"
+#line 4155 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 289: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 795 "engines/director/lingo/lingo-gr.y"
+  case 290: /* expr_nounarymath: expr_nounarymath '-' expr  */
+#line 801 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4153 "engines/director/lingo/lingo-gr.cpp"
+#line 4161 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 290: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 796 "engines/director/lingo/lingo-gr.y"
+  case 291: /* expr_nounarymath: expr_nounarymath '*' expr  */
+#line 802 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4159 "engines/director/lingo/lingo-gr.cpp"
+#line 4167 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 291: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 797 "engines/director/lingo/lingo-gr.y"
+  case 292: /* expr_nounarymath: expr_nounarymath '/' expr  */
+#line 803 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4165 "engines/director/lingo/lingo-gr.cpp"
+#line 4173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 292: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 798 "engines/director/lingo/lingo-gr.y"
+  case 293: /* expr_nounarymath: expr_nounarymath tMOD expr  */
+#line 804 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4171 "engines/director/lingo/lingo-gr.cpp"
+#line 4179 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 293: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 799 "engines/director/lingo/lingo-gr.y"
+  case 294: /* expr_nounarymath: expr_nounarymath '>' expr  */
+#line 805 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4177 "engines/director/lingo/lingo-gr.cpp"
+#line 4185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 294: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 800 "engines/director/lingo/lingo-gr.y"
+  case 295: /* expr_nounarymath: expr_nounarymath '<' expr  */
+#line 806 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4183 "engines/director/lingo/lingo-gr.cpp"
+#line 4191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 295: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 801 "engines/director/lingo/lingo-gr.y"
+  case 296: /* expr_nounarymath: expr_nounarymath tEQ expr  */
+#line 807 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4189 "engines/director/lingo/lingo-gr.cpp"
+#line 4197 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 296: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 802 "engines/director/lingo/lingo-gr.y"
+  case 297: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
+#line 808 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4195 "engines/director/lingo/lingo-gr.cpp"
+#line 4203 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 297: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 803 "engines/director/lingo/lingo-gr.y"
+  case 298: /* expr_nounarymath: expr_nounarymath tGE expr  */
+#line 809 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4201 "engines/director/lingo/lingo-gr.cpp"
+#line 4209 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 298: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 804 "engines/director/lingo/lingo-gr.y"
+  case 299: /* expr_nounarymath: expr_nounarymath tLE expr  */
+#line 810 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4207 "engines/director/lingo/lingo-gr.cpp"
+#line 4215 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 299: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 805 "engines/director/lingo/lingo-gr.y"
+  case 300: /* expr_nounarymath: expr_nounarymath tAND expr  */
+#line 811 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4213 "engines/director/lingo/lingo-gr.cpp"
+#line 4221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 300: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 806 "engines/director/lingo/lingo-gr.y"
+  case 301: /* expr_nounarymath: expr_nounarymath tOR expr  */
+#line 812 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4219 "engines/director/lingo/lingo-gr.cpp"
+#line 4227 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 301: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 807 "engines/director/lingo/lingo-gr.y"
+  case 302: /* expr_nounarymath: expr_nounarymath '&' expr  */
+#line 813 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4225 "engines/director/lingo/lingo-gr.cpp"
+#line 4233 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 302: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 808 "engines/director/lingo/lingo-gr.y"
+  case 303: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
+#line 814 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4231 "engines/director/lingo/lingo-gr.cpp"
+#line 4239 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 303: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 809 "engines/director/lingo/lingo-gr.y"
+  case 304: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
+#line 815 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4237 "engines/director/lingo/lingo-gr.cpp"
+#line 4245 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 304: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 810 "engines/director/lingo/lingo-gr.y"
+  case 305: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
+#line 816 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4243 "engines/director/lingo/lingo-gr.cpp"
+#line 4251 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 307: /* expr_noeq: expr_noeq '+' expr_noeq  */
-#line 815 "engines/director/lingo/lingo-gr.y"
+  case 308: /* expr_noeq: expr_noeq '+' expr_noeq  */
+#line 821 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4249 "engines/director/lingo/lingo-gr.cpp"
+#line 4257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 308: /* expr_noeq: expr_noeq '-' expr_noeq  */
-#line 816 "engines/director/lingo/lingo-gr.y"
+  case 309: /* expr_noeq: expr_noeq '-' expr_noeq  */
+#line 822 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4255 "engines/director/lingo/lingo-gr.cpp"
+#line 4263 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 309: /* expr_noeq: expr_noeq '*' expr_noeq  */
-#line 817 "engines/director/lingo/lingo-gr.y"
+  case 310: /* expr_noeq: expr_noeq '*' expr_noeq  */
+#line 823 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4261 "engines/director/lingo/lingo-gr.cpp"
+#line 4269 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 310: /* expr_noeq: expr_noeq '/' expr_noeq  */
-#line 818 "engines/director/lingo/lingo-gr.y"
+  case 311: /* expr_noeq: expr_noeq '/' expr_noeq  */
+#line 824 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4267 "engines/director/lingo/lingo-gr.cpp"
+#line 4275 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 311: /* expr_noeq: expr_noeq tMOD expr_noeq  */
-#line 819 "engines/director/lingo/lingo-gr.y"
+  case 312: /* expr_noeq: expr_noeq tMOD expr_noeq  */
+#line 825 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4273 "engines/director/lingo/lingo-gr.cpp"
+#line 4281 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 312: /* expr_noeq: expr_noeq '>' expr_noeq  */
-#line 820 "engines/director/lingo/lingo-gr.y"
+  case 313: /* expr_noeq: expr_noeq '>' expr_noeq  */
+#line 826 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4279 "engines/director/lingo/lingo-gr.cpp"
+#line 4287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 313: /* expr_noeq: expr_noeq '<' expr_noeq  */
-#line 821 "engines/director/lingo/lingo-gr.y"
+  case 314: /* expr_noeq: expr_noeq '<' expr_noeq  */
+#line 827 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4285 "engines/director/lingo/lingo-gr.cpp"
+#line 4293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 314: /* expr_noeq: expr_noeq tNEQ expr_noeq  */
-#line 822 "engines/director/lingo/lingo-gr.y"
+  case 315: /* expr_noeq: expr_noeq tNEQ expr_noeq  */
+#line 828 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4291 "engines/director/lingo/lingo-gr.cpp"
+#line 4299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 315: /* expr_noeq: expr_noeq tGE expr_noeq  */
-#line 823 "engines/director/lingo/lingo-gr.y"
+  case 316: /* expr_noeq: expr_noeq tGE expr_noeq  */
+#line 829 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4297 "engines/director/lingo/lingo-gr.cpp"
+#line 4305 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 316: /* expr_noeq: expr_noeq tLE expr_noeq  */
-#line 824 "engines/director/lingo/lingo-gr.y"
+  case 317: /* expr_noeq: expr_noeq tLE expr_noeq  */
+#line 830 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4303 "engines/director/lingo/lingo-gr.cpp"
+#line 4311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 317: /* expr_noeq: expr_noeq tAND expr_noeq  */
-#line 825 "engines/director/lingo/lingo-gr.y"
+  case 318: /* expr_noeq: expr_noeq tAND expr_noeq  */
+#line 831 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4309 "engines/director/lingo/lingo-gr.cpp"
+#line 4317 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 318: /* expr_noeq: expr_noeq tOR expr_noeq  */
-#line 826 "engines/director/lingo/lingo-gr.y"
+  case 319: /* expr_noeq: expr_noeq tOR expr_noeq  */
+#line 832 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4315 "engines/director/lingo/lingo-gr.cpp"
+#line 4323 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 319: /* expr_noeq: expr_noeq '&' expr_noeq  */
-#line 827 "engines/director/lingo/lingo-gr.y"
+  case 320: /* expr_noeq: expr_noeq '&' expr_noeq  */
+#line 833 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4321 "engines/director/lingo/lingo-gr.cpp"
+#line 4329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 320: /* expr_noeq: expr_noeq tCONCAT expr_noeq  */
-#line 828 "engines/director/lingo/lingo-gr.y"
+  case 321: /* expr_noeq: expr_noeq tCONCAT expr_noeq  */
+#line 834 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4327 "engines/director/lingo/lingo-gr.cpp"
+#line 4335 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 321: /* expr_noeq: expr_noeq tCONTAINS expr_noeq  */
-#line 829 "engines/director/lingo/lingo-gr.y"
+  case 322: /* expr_noeq: expr_noeq tCONTAINS expr_noeq  */
+#line 835 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4333 "engines/director/lingo/lingo-gr.cpp"
+#line 4341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 322: /* expr_noeq: expr_noeq tSTARTS expr_noeq  */
-#line 830 "engines/director/lingo/lingo-gr.y"
+  case 323: /* expr_noeq: expr_noeq tSTARTS expr_noeq  */
+#line 836 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4339 "engines/director/lingo/lingo-gr.cpp"
+#line 4347 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 323: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 833 "engines/director/lingo/lingo-gr.y"
+  case 324: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
+#line 839 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4345 "engines/director/lingo/lingo-gr.cpp"
+#line 4353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 324: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 834 "engines/director/lingo/lingo-gr.y"
+  case 325: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
+#line 840 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
-#line 4351 "engines/director/lingo/lingo-gr.cpp"
+#line 4359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 325: /* exprlist: %empty  */
-#line 837 "engines/director/lingo/lingo-gr.y"
+  case 326: /* exprlist: %empty  */
+#line 843 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
-#line 4357 "engines/director/lingo/lingo-gr.cpp"
+#line 4365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 327: /* nonemptyexprlist: expr  */
-#line 841 "engines/director/lingo/lingo-gr.y"
+  case 328: /* nonemptyexprlist: expr  */
+#line 847 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList; 
 		list->push_back((yyvsp[0].node));
 		(yyval.nodelist) = list; }
-#line 4366 "engines/director/lingo/lingo-gr.cpp"
+#line 4374 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 328: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 845 "engines/director/lingo/lingo-gr.y"
+  case 329: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
+#line 851 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
-#line 4374 "engines/director/lingo/lingo-gr.cpp"
+#line 4382 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 4378 "engines/director/lingo/lingo-gr.cpp"
+#line 4386 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -4572,7 +4580,7 @@ yyreturnlab:
   return yyresult;
 }
 
-#line 850 "engines/director/lingo/lingo-gr.y"
+#line 856 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e41251e6e64..0306bd0ea63 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -739,6 +739,9 @@ list: '[' exprlist ']'			{ $$ = new ListNode($exprlist); }
 	| '[' proplist ']'			{ $$ = new PropListNode($proplist); }
 	;
 
+// A property list must start with a proppair, but it may be followed by
+// keyless expressions, which will be compiled as equivalent to the
+// proppair <index>: <expr>.
 proplist: proppair[item]				{
 		NodeList *list = new NodeList; 
 		list->push_back($item);
@@ -746,6 +749,9 @@ proplist: proppair[item]				{
 	| proplist[prev] ',' proppair[item]	{
 		$prev->push_back($item);
 		$$ = $prev; }
+	| proplist[prev] ',' expr[item]	{
+		$prev->push_back($item);
+		$$ = $prev; }
 	;
 
 proppair: tSYMBOL ':' expr		{ $$ = new PropPairNode(new SymbolNode($tSYMBOL), $expr); }


Commit: beb8a4f82b4ebbbdf15ec20121037a369d75a81d
    https://github.com/scummvm/scummvm/commit/beb8a4f82b4ebbbdf15ec20121037a369d75a81d
Author: djsrv (dservilla at gmail.com)
Date: 2022-09-16T15:36:58-04:00

Commit Message:
DIRECTOR: LINGO: Add keyless expr tests

Changed paths:
    engines/director/lingo/tests/lists.lingo


diff --git a/engines/director/lingo/tests/lists.lingo b/engines/director/lingo/tests/lists.lingo
index ffbfa83ffa5..18356a2de0a 100644
--- a/engines/director/lingo/tests/lists.lingo
+++ b/engines/director/lingo/tests/lists.lingo
@@ -134,3 +134,8 @@ put a + 5 -- point(15, 15)
 put 5 + a -- point(15, 15)
 put b + 5 -- rect(25, 25, 25, 25)
 put 5 + b -- rect(25, 25, 25, 25)
+
+-- proplist with missing keys
+set proplist_without_keys = ["key": "value", "keyless expr 1", "keyless expr 2"]
+set proplist_with_keys = ["key": "value", 2: "keyless expr 1", 3: "keyless expr 2"]
+scummvmAssert(proplist_without_keys = proplist_with_keys)




More information about the Scummvm-git-logs mailing list