]> andersk Git - splint.git/commitdiff
Changed checking of complete descruction so +strictdestroy is no
authorevans1629 <evans1629>
Thu, 3 Jan 2002 19:45:44 +0000 (19:45 +0000)
committerevans1629 <evans1629>
Thu, 3 Jan 2002 19:45:44 +0000 (19:45 +0000)
necessary for struct fields.

29 files changed:
src/Headers/exprNode.h
src/Headers/sRef.h
src/Headers/transferChecks.h
src/Headers/varKinds.h
src/cgrammar.c.der
src/cgrammar.y
src/context.c
src/exprChecks.c
src/exprNode.c
src/flags.def
src/llerror.c
src/llmain.c
src/sRef.c
src/stateClause.c
src/transferChecks.c
src/usymtab.c
test/Makefile.am
test/Makefile.in
test/controldepth.expect
test/czechnames.expect
test/czechoslovaknames.expect
test/db1.expect
test/help.expect
test/impabstract.expect
test/noeffect.expect
test/preds.expect
test/rc.expect
test/slovaknames.expect
test/tests2.5.expect

index 6d93a915bd0cf95165eb95705c1c9844c9f558ec..327fadaad525f1c1064235d904891e8b1e122a4e 100644 (file)
@@ -302,6 +302,9 @@ extern exprNode exprNode_concat (/*@only@*/ exprNode p_e1, /*@only@*/ exprNode p
 extern exprNode exprNode_createTok (/*@only@*/ lltok p_t) /*@*/ ;
 extern exprNode exprNode_statement (/*@only@*/ exprNode p_e, /*@only@*/ lltok p_t);
 extern exprNode exprNode_makeBlock (/*@only@*/ exprNode p_e);
+
+extern void exprNode_checkIfPred (exprNode p_pred) /*@modifies g_msgstream@*/ ;
+
 extern exprNode exprNode_if (/*@only@*/ exprNode p_pred, /*@only@*/ exprNode p_tclause);
 extern exprNode 
   exprNode_ifelse (/*@only@*/ exprNode p_pred, /*@only@*/ exprNode p_tclause, 
index 13bb3f1b8d51769e33f6bac427451adf04dcd2cb..c251c395f5ee53ed136d528e0b97354e79ce0a91 100644 (file)
@@ -288,8 +288,12 @@ extern /*@only@*/ cstring sRef_unparseDebug (sRef p_s) /*@*/ ;
 extern void sRef_killComplete (sRef p_s, fileloc p_loc) /*@modifies p_s@*/ ;
 extern int sRef_getIndex (sRef p_arr) /*@*/ ;
 extern /*@dependent@*/ sRef sRef_fixOuterRef (/*@returned@*/ sRef p_s);
-extern void sRef_setDefinedComplete (sRef p_s, fileloc p_loc);
-extern void sRef_setDefinedNCComplete (sRef p_s, fileloc p_loc);
+
+/* Use this one to clear after error */
+extern void sRef_setDefinedCompleteDirect (sRef p_s, fileloc p_loc) ;
+
+extern void sRef_setDefinedComplete (sRef p_s, fileloc p_loc) ;
+extern void sRef_setDefinedNCComplete (sRef p_s, fileloc p_loc) ;
 extern int sRef_getParam (sRef p_s) /*@*/ ;
 extern int sRef_lexLevel (sRef p_s) /*@*/ ;
 extern void sRef_setOrigAliasKind (sRef p_s, alkind p_kind);
index 7e4113391fc21cfd84dbdc4148996a8915736f91..e79781917b346ff71e27224504ee08695ec965e7 100644 (file)
@@ -2,34 +2,23 @@
 ** transferChecks.h
 */
 
-extern alkind alkind_resolve (alkind p_a1, alkind p_a2) /*@*/ ;
-extern bool checkGlobalDestroyed (sRef p_fref, fileloc p_loc) 
+extern bool transferChecks_globalDestroyed (sRef p_fref, fileloc p_loc) 
    /*@modifies g_msgstream@*/ ;
-extern void checkLocalDestroyed (sRef p_fref, fileloc p_loc) 
+extern void transferChecks_localDestroyed (sRef p_fref, fileloc p_loc) 
    /*@modifies g_msgstream@*/ ;
+extern void transferChecks_structDestroyed (sRef p_fref, fileloc p_loc)
+   /*@modifies g_msgstream@*/ ;
+
+extern void transferChecks_assign (exprNode p_lhs, exprNode p_rhs);
+extern void transferChecks_initialization (exprNode p_lhs, exprNode p_rhs);
 
-extern void checkAssignTransfer (exprNode p_lhs, exprNode p_rhs);
-extern void checkPassTransfer (exprNode p_fexp, uentry p_arg, bool p_isSpec,
-                              /*@dependent@*/ exprNode p_fcn, int p_argno, int p_totargs);
-extern void checkReturnTransfer (exprNode p_fexp, uentry p_rval);
-extern void checkGlobReturn (uentry p_glob);
-extern void checkParamReturn (uentry p_actual);
-extern void checkLoseRef (uentry p_actual);
-extern bool canLoseReference (/*@dependent@*/ sRef p_sr, fileloc p_loc);
-extern void checkInitTransfer (exprNode p_lhs, exprNode p_rhs);
-extern void checkStructDestroyed (sRef p_fref, fileloc p_loc);
+extern void transferChecks_passParam 
+              (exprNode p_fexp, uentry p_arg, bool p_isSpec,
+              /*@dependent@*/ exprNode p_fcn, int p_argno, int p_totargs);
 
-/* transfer types: */
+extern void transferChecks_return (exprNode p_fexp, uentry p_rval);
+extern void transferChecks_globalReturn (uentry p_glob);
+extern void transferChecks_paramReturn (uentry p_actual);
 
-typedef enum
-{
-  TT_FCNRETURN,
-  TT_DOASSIGN,
-  TT_FIELDASSIGN,
-  TT_FCNPASS,
-  TT_GLOBPASS,
-  TT_GLOBRETURN,
-  TT_PARAMRETURN,
-  TT_LEAVETRANS,
-  TT_GLOBINIT
-} transferKind;
+extern void transferChecks_loseReference (uentry p_actual);
+extern bool transferChecks_canLoseReference (/*@dependent@*/ sRef p_sr, fileloc p_loc);
index 8b804d0620467557378b78914bb5dcc4f54cb29f..dbff679843f72e03fb7d4248e4ee7efb76e0a151 100644 (file)
@@ -151,6 +151,8 @@ extern /*@unused@*/ bool alkind_isRefs (alkind p_a) /*@*/ ;
 extern bool alkind_isNewRef (alkind p_a) /*@*/ ;     
 extern bool alkind_isKillRef (alkind p_a) /*@*/ ;    
 
+extern alkind alkind_resolve (alkind p_a1, alkind p_a2) /*@*/ ;
+
 # define alkind_isOwned(a)      ((a) == AK_OWNED)
 # define alkind_isStack(a)      ((a) == AK_STACK)
 # define alkind_isStatic(a)     ((a) == AK_STATIC)
index 776659c4ec28ac04abd0e0782c16fb39aa4f80a1..75c886f53388e95d6ebf196cebb872ee81332164 100644 (file)
@@ -41,6 +41,9 @@
 /*@-dependenttrans@*/
 /*@-unqualifiedtrans@*/
 /*@-nullassign@*/
+/*@-nullpass@*/
+/*@-nullptrarith*/
+/*@-usereleased@*/
 /*@-declundef@*/
 
 /*drl added 11/27/2001*/
@@ -363,11 +366,11 @@ typedef union
 
 
 
-#define        YYFINAL         1192
+#define        YYFINAL         1193
 #define        YYFLAG          -32768
 #define        YYNTBASE        192
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 445 ? yytranslate[x] : 447)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 445 ? yytranslate[x] : 448)
 
 static const short yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -468,43 +471,43 @@ static const short yyprhs[] = {     0,
   1419,  1424,  1430,  1432,  1434,  1436,  1438,  1440,  1442,  1444,
   1446,  1448,  1450,  1452,  1454,  1457,  1460,  1468,  1475,  1478,
   1479,  1480,  1491,  1492,  1499,  1501,  1503,  1505,  1507,  1510,
-  1512,  1514,  1516,  1518,  1520,  1522,  1524,  1528,  1530,  1533,
-  1536,  1539,  1541,  1543,  1545,  1547,  1549,  1551,  1553,  1555,
-  1557,  1559,  1563,  1565,  1567,  1570,  1573,  1574,  1577,  1578,
-  1583,  1584,  1591,  1592,  1596,  1597,  1603,  1607,  1610,  1614,
-  1615,  1616,  1617,  1618,  1619,  1621,  1624,  1627,  1631,  1634,
-  1638,  1642,  1647,  1650,  1653,  1657,  1661,  1666,  1668,  1671,
-  1673,  1676,  1678,  1681,  1683,  1686,  1688,  1691,  1693,  1698,
-  1701,  1702,  1708,  1709,  1716,  1721,  1726,  1727,  1728,  1739,
-  1741,  1742,  1747,  1749,  1751,  1753,  1755,  1757,  1760,  1762,
-  1766,  1768,  1773,  1777,  1782,  1789,  1795,  1801,  1804,  1807,
-  1809,  1812,  1815,  1818,  1821,  1824,  1827,  1830,  1833,  1835,
-  1837,  1842,  1844,  1848,  1852,  1856,  1858,  1862,  1866,  1868,
-  1872,  1876,  1878,  1882,  1886,  1890,  1894,  1896,  1900,  1904,
-  1906,  1910,  1912,  1916,  1918,  1922,  1924,  1928,  1930,  1934,
-  1936,  1937,  1938,  1946,  1948,  1952,  1956,  1960,  1964,  1968,
-  1972,  1976,  1980,  1984,  1988,  1992,  1994,  1995,  1997,  2000,
-  2008,  2011,  2014,  2022,  2029,  2032,  2036,  2039,  2043,  2046,
-  2050,  2054,  2058,  2062,  2065,  2069,  2070,  2072,  2074,  2076,
-  2078,  2080,  2082,  2084,  2086
+  1512,  1514,  1516,  1518,  1520,  1522,  1524,  1528,  1530,  1531,
+  1535,  1538,  1541,  1543,  1545,  1547,  1549,  1551,  1553,  1555,
+  1557,  1559,  1561,  1565,  1567,  1569,  1572,  1575,  1576,  1579,
+  1580,  1585,  1586,  1593,  1594,  1598,  1599,  1605,  1609,  1612,
+  1616,  1617,  1618,  1619,  1620,  1621,  1623,  1626,  1629,  1633,
+  1636,  1640,  1644,  1649,  1652,  1655,  1659,  1663,  1668,  1670,
+  1673,  1675,  1678,  1680,  1683,  1685,  1688,  1690,  1693,  1695,
+  1700,  1703,  1704,  1710,  1711,  1718,  1723,  1728,  1729,  1730,
+  1741,  1743,  1744,  1749,  1751,  1753,  1755,  1757,  1759,  1762,
+  1764,  1768,  1770,  1775,  1779,  1784,  1791,  1797,  1803,  1806,
+  1809,  1811,  1814,  1817,  1820,  1823,  1826,  1829,  1832,  1835,
+  1837,  1839,  1844,  1846,  1850,  1854,  1858,  1860,  1864,  1868,
+  1870,  1874,  1878,  1880,  1884,  1888,  1892,  1896,  1898,  1902,
+  1906,  1908,  1912,  1914,  1918,  1920,  1924,  1926,  1930,  1932,
+  1936,  1938,  1939,  1940,  1948,  1950,  1954,  1958,  1962,  1966,
+  1970,  1974,  1978,  1982,  1986,  1990,  1994,  1996,  1997,  1999,
+  2002,  2010,  2013,  2016,  2024,  2031,  2034,  2038,  2041,  2045,
+  2048,  2052,  2056,  2060,  2064,  2067,  2071,  2072,  2074,  2076,
+  2078,  2080,  2082,  2084,  2086,  2088
 };
 
 static const short yyrhs[] = {    -1,
-   193,     0,   194,     0,   193,   194,     0,   254,   443,     0,
+   193,     0,   194,     0,   193,   194,     0,   254,   444,     0,
    195,     0,   196,     0,   206,     0,   209,     0,   291,     0,
-     1,     0,    76,   329,   342,   352,   342,   443,   299,    89,
+     1,     0,    76,   329,   342,   352,   342,   444,   299,    89,
      0,    76,   329,   342,   352,   342,    23,   299,   304,   303,
-   443,    89,     0,     0,    77,   197,   198,   443,    89,     0,
+   444,    89,     0,     0,    77,   197,   198,   444,    89,     0,
    199,     0,   329,   342,   199,     0,   203,     0,   356,   203,
-     0,   445,     0,   299,    24,   342,   352,   299,    25,     0,
+     0,   446,     0,   299,    24,   342,   352,   299,    25,     0,
    200,    26,    27,     0,   200,    26,   299,   290,    27,   342,
      0,     0,   200,   300,    24,    25,   201,   226,     0,     0,
-   200,   300,    24,   353,    25,   202,   226,     0,   445,     0,
+   200,   300,    24,   353,    25,   202,   226,     0,   446,     0,
    299,    24,   342,   199,   299,    25,     0,   203,    26,    27,
      0,   203,    26,   299,   290,    27,   342,     0,     0,   203,
    300,    24,    25,   204,   227,     0,     0,   203,   300,    24,
-   353,    25,   205,   227,     0,     0,     0,    78,   445,    24,
-   353,    25,   207,   227,   208,   443,    89,     0,    90,   382,
+   353,    25,   205,   227,     0,     0,     0,    78,   446,    24,
+   353,    25,   207,   227,   208,   444,    89,     0,    90,   383,
     93,     0,    91,   369,    93,     0,    92,   370,    93,     0,
     90,    93,     0,   249,     0,   212,    23,   215,     0,     0,
    223,   213,    22,   216,     0,     0,     5,   214,    22,   216,
@@ -512,42 +515,42 @@ static const short yyrhs[] = {    -1,
    182,   217,     0,   218,     0,   221,   220,   221,     0,   179,
      0,   180,     0,    52,     0,    51,     0,    53,     0,   222,
      0,   224,    24,   221,    25,     0,    24,   221,   225,   221,
-    25,     0,   223,     0,   187,     0,   444,     0,   184,     0,
+    25,     0,   223,     0,   187,     0,   445,     0,   184,     0,
    223,    26,    27,     0,   223,    26,   187,    27,     0,    34,
-   223,     0,    24,   223,    25,     0,   223,    28,   445,     0,
-   223,    44,   445,     0,   219,     0,    33,     0,    32,     0,
+   223,     0,    24,   223,    25,     0,   223,    28,   446,     0,
+   223,    44,   446,     0,   219,     0,    33,     0,    32,     0,
      0,   228,   226,     0,     0,   229,   227,     0,   230,     0,
    234,     0,   233,     0,   307,     0,   310,     0,   240,     0,
    231,     0,   235,     0,   233,     0,   308,     0,   312,     0,
-   241,     0,   231,    89,     0,     0,    73,   232,   242,   443,
+   241,     0,   231,    89,     0,     0,    73,   232,   242,   444,
      0,    75,     0,   235,    89,     0,     0,    74,   236,   255,
      0,   238,     0,   238,    40,   237,     0,   184,     0,   240,
-     0,     0,   241,    89,     0,    72,   237,   419,     0,    72,
+     0,     0,   241,    89,     0,    72,   237,   420,     0,    72,
    237,     0,   243,     0,   242,    21,   243,     0,   244,   245,
-     0,     0,   246,   244,     0,   444,     0,   184,     0,   291,
+     0,     0,   246,   244,     0,   445,     0,   184,     0,   291,
      0,    87,     0,    88,     0,   117,     0,   118,     0,   131,
      0,    79,     0,    80,     0,    81,     0,    82,     0,    83,
      0,    84,     0,    85,     0,   352,     0,   329,   342,   352,
-     0,     0,    19,   251,   399,     0,     0,     0,   252,   403,
-   253,   392,     0,   210,   250,     0,   258,   443,     0,   443,
-     0,   444,     0,   184,     0,   256,    26,    27,     0,   256,
+     0,     0,    19,   251,   400,     0,     0,     0,   252,   404,
+   253,   393,     0,   210,   250,     0,   258,   444,     0,   444,
+     0,   445,     0,   184,     0,   256,    26,    27,     0,   256,
     26,   257,    27,     0,    34,   256,     0,    24,   256,    25,
-     0,   256,    28,   445,     0,   256,    44,   445,     0,   256,
-     0,   419,     0,   256,     0,   258,    21,   256,     0,   444,
+     0,   256,    28,   446,     0,   256,    44,   446,     0,   256,
+     0,   420,     0,   256,     0,   258,    21,   256,     0,   445,
      0,   184,     0,   259,    26,    27,     0,   259,    26,   257,
     27,     0,    34,   259,     0,    24,   259,    25,     0,   259,
-    28,   445,     0,   259,    44,   445,     0,     0,   261,     0,
-   259,     0,   261,    21,   259,     0,   444,     0,   184,     0,
-   419,     0,    24,   288,    25,     0,   185,     0,   112,     0,
+    28,   446,     0,   259,    44,   446,     0,     0,   261,     0,
+   259,     0,   261,    21,   259,     0,   445,     0,   184,     0,
+   420,     0,    24,   288,    25,     0,   185,     0,   112,     0,
    262,     0,   263,    26,   288,    27,     0,   263,    24,    25,
      0,   263,    24,   264,    25,     0,    70,    24,   287,    21,
-   364,    25,     0,   263,   342,    28,   445,   299,     0,   263,
-   342,    44,   445,   299,     0,   263,    47,     0,   263,    48,
+   364,    25,     0,   263,   342,    28,   446,   299,     0,   263,
+   342,    44,   446,   299,     0,   263,    47,     0,   263,    48,
      0,   287,     0,   264,    21,   287,     0,   263,     0,    47,
    265,     0,    48,   265,     0,    29,   271,     0,    34,   271,
      0,    33,   271,     0,    32,   271,     0,    31,   271,     0,
-    30,   271,     0,   268,     0,   267,     0,   266,    28,   445,
-     0,   445,     0,    46,   299,    24,   364,   342,    21,   266,
+    30,   271,     0,   268,     0,   267,     0,   266,    28,   446,
+     0,   446,     0,    46,   299,    24,   364,   342,    21,   266,
     25,   299,     0,     0,   299,   269,   270,     0,    42,    24,
    364,    25,     0,    42,   265,     0,    43,    24,   364,    25,
      0,    43,   265,     0,   265,     0,    24,   364,    25,   271,
@@ -579,9 +582,9 @@ static const short yyrhs[] = {    -1,
      0,    19,   305,    20,     0,    19,   305,    21,    20,     0,
    304,     0,   305,    21,   304,     0,   113,     0,   111,     0,
    114,     0,   115,     0,   116,     0,   176,   299,     0,   308,
-    89,     0,     0,   247,   342,   309,   261,   443,   299,     0,
+    89,     0,     0,   247,   342,   309,   261,   444,   299,     0,
    312,    89,     0,   248,   342,     0,     0,   311,   318,   313,
-   260,   443,   299,     0,     0,   311,   314,   315,   443,   299,
+   260,   444,   299,     0,     0,   311,   314,   315,   444,   299,
      0,   217,     0,   211,     0,   140,     0,   141,     0,   143,
      0,   144,     0,   142,     0,   125,     0,   128,     0,   126,
      0,   127,     0,   133,     0,   134,     0,   119,     0,   121,
@@ -598,107 +601,107 @@ static const short yyrhs[] = {    -1,
    299,     0,   322,   299,     0,   323,   299,     0,   166,   342,
      0,   168,   342,     0,   167,   342,     0,   169,   342,     0,
    170,   342,     0,   171,   342,     0,   172,   342,     0,   173,
-   342,     0,   174,   342,     0,   175,   342,     0,   446,   342,
+   342,     0,   174,   342,     0,   175,   342,     0,   447,   342,
      0,   333,   342,     0,   347,   342,     0,   324,   342,     0,
    299,   329,   299,     0,   331,     0,   331,    86,   330,    89,
      0,   364,     0,   364,    21,   330,     0,   306,   332,     0,
    326,   332,     0,   327,   332,     0,     0,   329,     0,     0,
-     0,   342,    67,   445,   299,    19,   334,   396,   343,   397,
-   335,    20,     0,     0,     0,   342,    68,   445,   299,    19,
-   336,   396,   343,   397,   337,    20,     0,   342,    67,   445,
-   299,    19,    20,     0,   342,    68,   445,   299,    19,    20,
-     0,     0,     0,   342,    67,   299,    19,   338,   396,   343,
-   397,   339,    20,     0,     0,     0,   342,    68,   299,    19,
-   340,   396,   343,   397,   341,    20,     0,   342,    67,   299,
+     0,   342,    67,   446,   299,    19,   334,   397,   343,   398,
+   335,    20,     0,     0,     0,   342,    68,   446,   299,    19,
+   336,   397,   343,   398,   337,    20,     0,   342,    67,   446,
+   299,    19,    20,     0,   342,    68,   446,   299,    19,    20,
+     0,     0,     0,   342,    67,   299,    19,   338,   397,   343,
+   398,   339,    20,     0,     0,     0,   342,    68,   299,    19,
+   340,   397,   343,   398,   341,    20,     0,   342,    67,   299,
     19,    20,     0,   342,    68,   299,    19,    20,     0,   342,
-    67,   445,   342,     0,   342,    68,   445,   342,     0,     0,
+    67,   446,   342,     0,   342,    68,   446,   342,     0,     0,
    344,     0,   209,     0,   343,   344,     0,   329,   342,   345,
    299,    18,     0,   329,   299,    18,     0,   346,   342,     0,
    345,    21,   346,   342,     0,   352,     0,    22,   299,   290,
      0,   352,    22,   299,   290,     0,   342,    69,    19,   349,
-    20,   299,     0,     0,   342,    69,   445,    19,   348,   349,
-    20,   299,     0,   342,    69,   445,   299,     0,   350,     0,
-   349,    21,   350,     0,   349,    21,     0,   445,     0,   445,
+    20,   299,     0,     0,   342,    69,   446,    19,   348,   349,
+    20,   299,     0,   342,    69,   446,   299,     0,   350,     0,
+   349,    21,   350,     0,   349,    21,     0,   446,     0,   446,
     23,   299,   290,     0,   200,     0,   366,     0,   356,   190,
      0,   356,   351,     0,   200,     0,   356,   200,     0,   359,
      0,   342,   357,     0,   109,     0,   110,     0,   354,     0,
    355,   354,     0,    34,     0,    34,   355,     0,    34,   356,
      0,    34,   355,   356,     0,   358,     0,   358,    21,     5,
-     0,   445,     0,   358,    21,   445,     0,     5,     0,   360,
+     0,   446,     0,   358,    21,   446,     0,     5,     0,   360,
      0,   360,    21,     5,     0,     0,   361,   363,     0,     0,
    360,    21,   362,   363,     0,   299,   329,   351,   299,     0,
-   445,     0,   328,     0,   328,   365,     0,   356,     0,   367,
+   446,     0,   328,     0,   328,   365,     0,   356,     0,   367,
      0,   356,   367,     0,     0,   367,     0,   299,    24,   342,
    365,    25,     0,    26,    27,     0,    26,   290,    27,     0,
    367,    26,    27,     0,   367,    26,   290,    27,     0,   299,
     24,    25,     0,   299,    24,   359,    25,     0,   367,   299,
-    24,    25,     0,   367,   299,    24,   359,    25,     0,   384,
-     0,   386,     0,   389,     0,   392,     0,   405,     0,   408,
-     0,   440,     0,   413,     0,   442,     0,   371,     0,   369,
-     0,   378,     0,   371,   378,     0,   412,   371,     0,   439,
-   383,    11,    24,   288,    25,    18,     0,   439,   383,    11,
+    24,    25,     0,   367,   299,    24,   359,    25,     0,   385,
+     0,   387,     0,   390,     0,   393,     0,   406,     0,   409,
+     0,   441,     0,   414,     0,   443,     0,   371,     0,   369,
+     0,   378,     0,   371,   378,     0,   413,   371,     0,   440,
+   384,    11,    24,   288,    25,    18,     0,   440,   384,    11,
     24,   288,    25,     0,   373,   378,     0,     0,     0,    13,
     24,   289,    18,   289,    18,   374,   289,   375,    25,     0,
-     0,   188,   394,    24,   377,   416,    25,     0,   189,     0,
-   384,     0,   386,     0,   389,     0,   380,   403,     0,   380,
-     0,   381,     0,   405,     0,   379,     0,   372,     0,   376,
-     0,   442,     0,    24,   378,    25,     0,     1,     0,   407,
-   378,     0,   394,    19,     0,   398,    20,     0,   383,     0,
-   402,     0,   384,     0,   386,     0,   389,     0,   393,     0,
-   406,     0,   408,     0,   413,     0,   441,     0,    24,   383,
-    25,     0,   442,     0,     1,     0,   445,    22,     0,   108,
-   368,     0,     0,    99,   385,     0,     0,     6,   290,   387,
-    22,     0,     0,    99,   385,     6,   290,   388,    22,     0,
-     0,     7,   390,    22,     0,     0,    99,   385,     7,   391,
-    22,     0,    24,   392,    25,     0,   394,   400,     0,   394,
-   401,   395,     0,     0,     0,     0,     0,     0,    20,     0,
-   108,    20,     0,   404,    20,     0,   404,   108,    20,     0,
-   403,    20,     0,   403,   108,    20,     0,   403,   404,    20,
-     0,   403,   404,   108,    20,     0,    19,   399,     0,    19,
-    20,     0,    19,   402,    20,     0,    19,   403,    20,     0,
-    19,   403,   404,    20,     0,   383,     0,   402,   383,     0,
-   291,     0,   403,   291,     0,   368,     0,   404,   368,     0,
-    18,     0,   288,    18,     0,    18,     0,   288,    18,     0,
-   288,     0,     8,    24,   288,    25,     0,   407,   368,     0,
-     0,   407,   368,     9,   409,   368,     0,     0,    10,    24,
-   288,   410,    25,   368,     0,    11,    24,   288,    25,     0,
-    11,    24,   288,    25,     0,     0,     0,   188,   414,   394,
-    24,   415,   416,    25,   392,   438,   395,     0,   418,     0,
-     0,   416,   417,    21,   418,     0,   437,     0,   444,     0,
-   185,     0,   184,     0,   187,     0,   419,   187,     0,   419,
-     0,    24,   288,    25,     0,   420,     0,   263,    26,   288,
-    27,     0,   263,    24,    25,     0,   263,    24,   264,    25,
-     0,    70,    24,   287,    21,   364,    25,     0,   263,   342,
-    28,   445,   299,     0,   263,   342,    44,   445,   299,     0,
-   263,    47,     0,   263,    48,     0,   421,     0,    47,   265,
-     0,    48,   265,     0,    29,   271,     0,    34,   271,     0,
-    33,   271,     0,    32,   271,     0,    31,   271,     0,    30,
-   271,     0,   268,     0,   422,     0,    24,   364,    25,   271,
-     0,   423,     0,   272,    34,   271,     0,   272,    35,   271,
-     0,   272,    36,   271,     0,   424,     0,   273,    33,   272,
-     0,   273,    32,   272,     0,   425,     0,   274,    49,   273,
-     0,   274,    50,   273,     0,   426,     0,   275,    37,   274,
-     0,   275,    38,   274,     0,   275,    51,   274,     0,   275,
-    52,   274,     0,   427,     0,   276,    53,   275,     0,   276,
-    54,   275,     0,   428,     0,   277,    29,   276,     0,   429,
-     0,   278,    39,   277,     0,   430,     0,   279,    40,   278,
-     0,   431,     0,   280,    55,   279,     0,   432,     0,   282,
-    56,   280,     0,   433,     0,     0,     0,   282,    41,   435,
-   288,    22,   436,   284,     0,   434,     0,   265,    23,   287,
-     0,   265,    57,   287,     0,   265,    58,   287,     0,   265,
-    59,   287,     0,   265,    60,   287,     0,   265,    61,   287,
-     0,   265,    62,   287,     0,   265,    63,   287,     0,   265,
-    64,   287,     0,   265,    65,   287,     0,   265,    66,   287,
-     0,   189,     0,     0,    12,     0,   411,   368,     0,   439,
-   368,    11,    24,   288,    25,    18,     0,   373,   368,     0,
-   411,   383,     0,   439,   383,    11,    24,   288,    25,    18,
-     0,   439,   383,    11,    24,   288,    25,     0,   373,   383,
-     0,    14,   445,    18,     0,    15,    18,     0,    98,    15,
-    18,     0,    16,    18,     0,    94,    16,    18,     0,    95,
-    16,    18,     0,    96,    16,    18,     0,    97,    16,    18,
-     0,    17,    18,     0,    17,   288,    18,     0,     0,    18,
-     0,   183,     0,   184,     0,   188,     0,   189,     0,   444,
-     0,   185,     0,   190,     0,   185,     0
+     0,   188,   395,    24,   377,   417,    25,     0,   189,     0,
+   385,     0,   387,     0,   390,     0,   381,   404,     0,   381,
+     0,   382,     0,   406,     0,   379,     0,   372,     0,   376,
+     0,   443,     0,    24,   378,    25,     0,     1,     0,     0,
+   408,   380,   378,     0,   395,    19,     0,   399,    20,     0,
+   384,     0,   403,     0,   385,     0,   387,     0,   390,     0,
+   394,     0,   407,     0,   409,     0,   414,     0,   442,     0,
+    24,   384,    25,     0,   443,     0,     1,     0,   446,    22,
+     0,   108,   368,     0,     0,    99,   386,     0,     0,     6,
+   290,   388,    22,     0,     0,    99,   386,     6,   290,   389,
+    22,     0,     0,     7,   391,    22,     0,     0,    99,   386,
+     7,   392,    22,     0,    24,   393,    25,     0,   395,   401,
+     0,   395,   402,   396,     0,     0,     0,     0,     0,     0,
+    20,     0,   108,    20,     0,   405,    20,     0,   405,   108,
+    20,     0,   404,    20,     0,   404,   108,    20,     0,   404,
+   405,    20,     0,   404,   405,   108,    20,     0,    19,   400,
+     0,    19,    20,     0,    19,   403,    20,     0,    19,   404,
+    20,     0,    19,   404,   405,    20,     0,   384,     0,   403,
+   384,     0,   291,     0,   404,   291,     0,   368,     0,   405,
+   368,     0,    18,     0,   288,    18,     0,    18,     0,   288,
+    18,     0,   288,     0,     8,    24,   288,    25,     0,   408,
+   368,     0,     0,   408,   368,     9,   410,   368,     0,     0,
+    10,    24,   288,   411,    25,   368,     0,    11,    24,   288,
+    25,     0,    11,    24,   288,    25,     0,     0,     0,   188,
+   415,   395,    24,   416,   417,    25,   393,   439,   396,     0,
+   419,     0,     0,   417,   418,    21,   419,     0,   438,     0,
+   445,     0,   185,     0,   184,     0,   187,     0,   420,   187,
+     0,   420,     0,    24,   288,    25,     0,   421,     0,   263,
+    26,   288,    27,     0,   263,    24,    25,     0,   263,    24,
+   264,    25,     0,    70,    24,   287,    21,   364,    25,     0,
+   263,   342,    28,   446,   299,     0,   263,   342,    44,   446,
+   299,     0,   263,    47,     0,   263,    48,     0,   422,     0,
+    47,   265,     0,    48,   265,     0,    29,   271,     0,    34,
+   271,     0,    33,   271,     0,    32,   271,     0,    31,   271,
+     0,    30,   271,     0,   268,     0,   423,     0,    24,   364,
+    25,   271,     0,   424,     0,   272,    34,   271,     0,   272,
+    35,   271,     0,   272,    36,   271,     0,   425,     0,   273,
+    33,   272,     0,   273,    32,   272,     0,   426,     0,   274,
+    49,   273,     0,   274,    50,   273,     0,   427,     0,   275,
+    37,   274,     0,   275,    38,   274,     0,   275,    51,   274,
+     0,   275,    52,   274,     0,   428,     0,   276,    53,   275,
+     0,   276,    54,   275,     0,   429,     0,   277,    29,   276,
+     0,   430,     0,   278,    39,   277,     0,   431,     0,   279,
+    40,   278,     0,   432,     0,   280,    55,   279,     0,   433,
+     0,   282,    56,   280,     0,   434,     0,     0,     0,   282,
+    41,   436,   288,    22,   437,   284,     0,   435,     0,   265,
+    23,   287,     0,   265,    57,   287,     0,   265,    58,   287,
+     0,   265,    59,   287,     0,   265,    60,   287,     0,   265,
+    61,   287,     0,   265,    62,   287,     0,   265,    63,   287,
+     0,   265,    64,   287,     0,   265,    65,   287,     0,   265,
+    66,   287,     0,   189,     0,     0,    12,     0,   412,   368,
+     0,   440,   368,    11,    24,   288,    25,    18,     0,   373,
+   368,     0,   412,   384,     0,   440,   384,    11,    24,   288,
+    25,    18,     0,   440,   384,    11,    24,   288,    25,     0,
+   373,   384,     0,    14,   446,    18,     0,    15,    18,     0,
+    98,    15,    18,     0,    16,    18,     0,    94,    16,    18,
+     0,    95,    16,    18,     0,    96,    16,    18,     0,    97,
+    16,    18,     0,    17,    18,     0,    17,   288,    18,     0,
+     0,    18,     0,   183,     0,   184,     0,   188,     0,   189,
+     0,   445,     0,   185,     0,   190,     0,   185,     0
 };
 
 #endif
@@ -754,25 +757,25 @@ static const short yyrline[] = { 0,
   1424,  1426,  1432,  1433,  1434,  1435,  1436,  1437,  1438,  1439,
   1440,  1455,  1458,  1461,  1462,  1466,  1468,  1470,  1472,  1476,
   1477,  1479,  1483,  1485,  1487,  1490,  1491,  1492,  1493,  1494,
-  1495,  1496,  1497,  1498,  1499,  1500,  1501,  1502,  1505,  1511,
-  1514,  1517,  1518,  1521,  1522,  1523,  1524,  1525,  1526,  1527,
-  1528,  1529,  1530,  1531,  1534,  1535,  1542,  1543,  1549,  1550,
-  1551,  1552,  1555,  1556,  1557,  1558,  1561,  1562,  1566,  1569,
-  1572,  1575,  1578,  1581,  1584,  1585,  1586,  1587,  1589,  1590,
-  1592,  1594,  1600,  1604,  1606,  1608,  1610,  1614,  1615,  1618,
-  1619,  1622,  1623,  1626,  1627,  1630,  1631,  1632,  1635,  1643,
-  1648,  1649,  1653,  1654,  1657,  1662,  1665,  1666,  1667,  1675,
-  1676,  1676,  1680,  1681,  1682,  1693,  1700,  1701,  1704,  1705,
-  1708,  1709,  1710,  1711,  1712,  1714,  1715,  1716,  1717,  1720,
-  1721,  1722,  1723,  1724,  1725,  1726,  1727,  1728,  1729,  1732,
-  1733,  1736,  1737,  1738,  1739,  1742,  1743,  1744,  1747,  1748,
-  1749,  1752,  1753,  1754,  1755,  1756,  1759,  1760,  1761,  1764,
-  1765,  1768,  1769,  1773,  1774,  1777,  1778,  1781,  1782,  1785,
-  1786,  1787,  1788,  1791,  1792,  1793,  1794,  1795,  1796,  1797,
-  1798,  1799,  1800,  1801,  1802,  1805,  1806,  1809,  1812,  1814,
-  1816,  1820,  1821,  1823,  1825,  1828,  1829,  1830,  1832,  1833,
-  1834,  1835,  1836,  1837,  1838,  1841,  1842,  1845,  1848,  1849,
-  1850,  1851,  1852,  1855,  1856
+  1495,  1496,  1497,  1498,  1499,  1500,  1501,  1502,  1505,  1506,
+  1511,  1514,  1517,  1518,  1521,  1522,  1523,  1524,  1525,  1526,
+  1527,  1528,  1529,  1530,  1531,  1534,  1535,  1542,  1543,  1549,
+  1550,  1551,  1552,  1555,  1556,  1557,  1558,  1561,  1562,  1566,
+  1569,  1572,  1575,  1578,  1581,  1584,  1585,  1586,  1587,  1589,
+  1590,  1592,  1594,  1600,  1604,  1606,  1608,  1610,  1614,  1615,
+  1618,  1619,  1622,  1623,  1626,  1627,  1630,  1631,  1632,  1635,
+  1648,  1653,  1654,  1658,  1659,  1662,  1667,  1670,  1671,  1672,
+  1680,  1681,  1681,  1685,  1686,  1687,  1698,  1705,  1706,  1709,
+  1710,  1713,  1714,  1715,  1716,  1717,  1719,  1720,  1721,  1722,
+  1725,  1726,  1727,  1728,  1729,  1730,  1731,  1732,  1733,  1734,
+  1737,  1738,  1741,  1742,  1743,  1744,  1747,  1748,  1749,  1752,
+  1753,  1754,  1757,  1758,  1759,  1760,  1761,  1764,  1765,  1766,
+  1769,  1770,  1773,  1774,  1778,  1779,  1782,  1783,  1786,  1787,
+  1790,  1791,  1792,  1793,  1796,  1797,  1798,  1799,  1800,  1801,
+  1802,  1803,  1804,  1805,  1806,  1807,  1810,  1811,  1814,  1817,
+  1819,  1821,  1825,  1826,  1828,  1830,  1833,  1834,  1835,  1837,
+  1838,  1839,  1840,  1841,  1842,  1843,  1846,  1847,  1850,  1853,
+  1854,  1855,  1856,  1857,  1860,  1861
 };
 #endif
 
@@ -836,16 +839,16 @@ static const char * const yytname[] = {   "$","error","$undefined.","BADTOK",
 "paramList","@36","@37","paramDecl","typeExpression","abstractDecl","optAbstractDeclBase",
 "abstractDeclBase","stmt","iterBody","endBody","iterDefStmtList","iterDefIterationStmt",
 "forPred","@38","@39","partialIterStmt","@40","iterDefStmt","iterSelectionStmt",
-"openScope","closeScope","macroBody","stmtErr","labeledStmt","optExtraFallThroughs",
-"caseStmt","@41","@42","defaultStmt","@43","@44","compoundStmt","compoundStmtErr",
+"@41","openScope","closeScope","macroBody","stmtErr","labeledStmt","optExtraFallThroughs",
+"caseStmt","@42","@43","defaultStmt","@44","@45","compoundStmt","compoundStmtErr",
 "CreateInnerScope","DeleteInnerScope","CreateStructInnerScope","DeleteStructInnerScope",
 "DeleteInnerScopeSafe","compoundStmtRest","compoundStmtAux","compoundStmtAuxErr",
 "stmtListErr","initializerList","stmtList","expressionStmt","expressionStmtErr",
-"ifPred","selectionStmt","@45","@46","whilePred","iterWhilePred","iterStmt",
-"@47","@48","iterArgList","@49","iterArgExpr","cconstantExpr","primaryIterExpr",
+"ifPred","selectionStmt","@46","@47","whilePred","iterWhilePred","iterStmt",
+"@48","@49","iterArgList","@50","iterArgExpr","cconstantExpr","primaryIterExpr",
 "postfixIterExpr","unaryIterExpr","castIterExpr","timesIterExpr","plusIterExpr",
 "shiftIterExpr","relationalIterExpr","equalityIterExpr","bitandIterExpr","xorIterExpr",
-"bitorIterExpr","andIterExpr","orIterExpr","conditionalIterExpr","@50","@51",
+"bitorIterExpr","andIterExpr","orIterExpr","conditionalIterExpr","@51","@52",
 "assignIterExpr","endIter","doHeader","iterationStmt","iterationStmtErr","jumpStmt",
 "optSemi","id","newId","typeName", NULL
 };
@@ -901,25 +904,25 @@ static const short yyr1[] = {     0,
    367,   367,   368,   368,   368,   368,   368,   368,   368,   368,
    368,   369,   370,   371,   371,   372,   372,   372,   372,   374,
    375,   373,   377,   376,   376,   378,   378,   378,   378,   378,
-   378,   378,   378,   378,   378,   378,   378,   378,   379,   380,
-   381,   382,   382,   383,   383,   383,   383,   383,   383,   383,
-   383,   383,   383,   383,   384,   384,   385,   385,   387,   386,
-   388,   386,   390,   389,   391,   389,   392,   392,   393,   394,
-   395,   396,   397,   398,   399,   399,   399,   399,   399,   399,
-   399,   399,   400,   401,   401,   401,   401,   402,   402,   403,
-   403,   404,   404,   405,   405,   406,   406,   406,   407,   408,
-   409,   408,   410,   408,   411,   412,   414,   415,   413,   416,
-   417,   416,   418,   418,   418,   418,   419,   419,   420,   420,
-   421,   421,   421,   421,   421,   421,   421,   421,   421,   422,
-   422,   422,   422,   422,   422,   422,   422,   422,   422,   423,
-   423,   424,   424,   424,   424,   425,   425,   425,   426,   426,
-   426,   427,   427,   427,   427,   427,   428,   428,   428,   429,
-   429,   430,   430,   431,   431,   432,   432,   433,   433,   434,
-   435,   436,   434,   437,   437,   437,   437,   437,   437,   437,
-   437,   437,   437,   437,   437,   438,   438,   439,   440,   440,
-   440,   441,   441,   441,   441,   442,   442,   442,   442,   442,
-   442,   442,   442,   442,   442,   443,   443,   444,   445,   445,
-   445,   445,   445,   446,   446
+   378,   378,   378,   378,   378,   378,   378,   378,   380,   379,
+   381,   382,   383,   383,   384,   384,   384,   384,   384,   384,
+   384,   384,   384,   384,   384,   385,   385,   386,   386,   388,
+   387,   389,   387,   391,   390,   392,   390,   393,   393,   394,
+   395,   396,   397,   398,   399,   400,   400,   400,   400,   400,
+   400,   400,   400,   401,   402,   402,   402,   402,   403,   403,
+   404,   404,   405,   405,   406,   406,   407,   407,   407,   408,
+   409,   410,   409,   411,   409,   412,   413,   415,   416,   414,
+   417,   418,   417,   419,   419,   419,   419,   420,   420,   421,
+   421,   422,   422,   422,   422,   422,   422,   422,   422,   422,
+   423,   423,   423,   423,   423,   423,   423,   423,   423,   423,
+   424,   424,   425,   425,   425,   425,   426,   426,   426,   427,
+   427,   427,   428,   428,   428,   428,   428,   429,   429,   429,
+   430,   430,   431,   431,   432,   432,   433,   433,   434,   434,
+   435,   436,   437,   435,   438,   438,   438,   438,   438,   438,
+   438,   438,   438,   438,   438,   438,   439,   439,   440,   441,
+   441,   441,   442,   442,   442,   442,   443,   443,   443,   443,
+   443,   443,   443,   443,   443,   443,   444,   444,   445,   446,
+   446,   446,   446,   446,   447,   447
 };
 
 static const short yyr2[] = {     0,
@@ -972,25 +975,25 @@ static const short yyr2[] = {     0,
      4,     5,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     1,     1,     2,     2,     7,     6,     2,     0,
      0,    10,     0,     6,     1,     1,     1,     1,     2,     1,
-     1,     1,     1,     1,     1,     1,     3,     1,     2,     2,
-     2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     3,     1,     1,     2,     2,     0,     2,     0,     4,
-     0,     6,     0,     3,     0,     5,     3,     2,     3,     0,
-     0,     0,     0,     0,     1,     2,     2,     3,     2,     3,
-     3,     4,     2,     2,     3,     3,     4,     1,     2,     1,
-     2,     1,     2,     1,     2,     1,     2,     1,     4,     2,
-     0,     5,     0,     6,     4,     4,     0,     0,    10,     1,
-     0,     4,     1,     1,     1,     1,     1,     2,     1,     3,
-     1,     4,     3,     4,     6,     5,     5,     2,     2,     1,
-     2,     2,     2,     2,     2,     2,     2,     2,     1,     1,
-     4,     1,     3,     3,     3,     1,     3,     3,     1,     3,
-     3,     1,     3,     3,     3,     3,     1,     3,     3,     1,
-     3,     1,     3,     1,     3,     1,     3,     1,     3,     1,
-     0,     0,     7,     1,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     3,     3,     1,     0,     1,     2,     7,
-     2,     2,     7,     6,     2,     3,     2,     3,     2,     3,
-     3,     3,     3,     2,     3,     0,     1,     1,     1,     1,
-     1,     1,     1,     1,     1
+     1,     1,     1,     1,     1,     1,     3,     1,     0,     3,
+     2,     2,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     3,     1,     1,     2,     2,     0,     2,     0,
+     4,     0,     6,     0,     3,     0,     5,     3,     2,     3,
+     0,     0,     0,     0,     0,     1,     2,     2,     3,     2,
+     3,     3,     4,     2,     2,     3,     3,     4,     1,     2,
+     1,     2,     1,     2,     1,     2,     1,     2,     1,     4,
+     2,     0,     5,     0,     6,     4,     4,     0,     0,    10,
+     1,     0,     4,     1,     1,     1,     1,     1,     2,     1,
+     3,     1,     4,     3,     4,     6,     5,     5,     2,     2,
+     1,     2,     2,     2,     2,     2,     2,     2,     2,     1,
+     1,     4,     1,     3,     3,     3,     1,     3,     3,     1,
+     3,     3,     1,     3,     3,     3,     3,     1,     3,     3,
+     1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
+     1,     0,     0,     7,     1,     3,     3,     3,     3,     3,
+     3,     3,     3,     3,     3,     3,     1,     0,     1,     2,
+     7,     2,     2,     7,     6,     2,     3,     2,     3,     2,
+     3,     3,     3,     3,     2,     3,     0,     1,     1,     1,
+     1,     1,     1,     1,     1,     1
 };
 
 static const short yydefact[] = {     0,
@@ -1001,530 +1004,555 @@ static const short yydefact[] = {     0,
    296,   299,   297,   298,   338,   339,   340,   337,   323,   322,
    316,   315,   327,   328,   329,   330,   325,   326,   324,   331,
    332,   335,   336,   333,   334,   398,   398,   398,   398,   398,
-   398,   398,   398,   398,   398,   319,   668,   669,   673,   320,
-   670,   671,   674,     0,     3,     6,     7,   422,     8,     9,
-   131,    43,   666,    10,   251,   253,     0,   378,   266,   266,
+   398,   398,   398,   398,   398,   319,   669,   670,   674,   320,
+   671,   672,   675,     0,     3,     6,     7,   422,     8,     9,
+   131,    43,   667,    10,   251,   253,     0,   378,   266,   266,
    266,   266,   266,   266,   266,   266,   398,   266,   378,   378,
-   398,   371,   398,     0,   398,   127,   266,   672,    20,   398,
+   398,   371,   398,     0,   398,   127,   266,   673,    20,   398,
    426,   427,   428,   431,   432,   269,   266,   266,   262,   398,
-   675,   398,   398,   673,     0,   514,   266,   523,     0,     0,
-     0,   648,     0,     0,     0,     0,   266,   556,     0,   266,
+   676,   398,   398,   674,     0,   515,   266,   524,     0,     0,
+     0,   649,     0,     0,     0,     0,   266,   557,     0,   266,
    266,   266,   266,   266,   266,   266,   266,   266,     0,    42,
-     0,     0,     0,     0,     0,   517,   266,   166,   162,   165,
-   577,   567,   167,   178,   198,   188,   187,   200,   204,   207,
+     0,     0,     0,     0,     0,   518,   266,   166,   162,   165,
+   578,   568,   167,   178,   198,   188,   187,   200,   204,   207,
    210,   215,   218,   220,   222,   224,   227,   230,   234,   246,
-   558,   192,     0,     0,   548,   504,   505,   506,   507,     0,
-     0,   508,   266,   509,     0,   510,   163,     0,   511,   513,
-   161,     0,   498,     0,   554,     0,   530,   485,     0,     0,
+   559,   192,     0,     0,   549,   505,   506,   507,   508,     0,
+     0,   509,   266,   510,     0,   511,   163,     0,   512,   514,
+   161,     0,   498,     0,   555,     0,   531,   485,     0,     0,
      0,   494,     0,   495,   474,   493,   490,   491,   486,   487,
-   488,     0,     0,   492,     0,     0,     0,   496,   473,     0,
+   488,     0,     0,   492,   499,     0,     0,   496,   473,     0,
    345,   346,   356,   358,   357,   359,   360,   361,   362,   363,
-   364,   365,     4,   266,     0,   129,   134,   398,   667,     5,
+   364,   365,     4,   266,     0,   129,   134,   398,   668,     5,
    398,   379,   375,   349,   351,   348,   350,   353,   352,   354,
    355,   369,   347,   376,   377,     0,   266,   266,   367,   266,
    266,     0,   368,   423,   366,   429,   433,   398,     0,   268,
-   398,     0,   259,   266,   666,    16,    18,     0,   398,   266,
-    28,   441,   266,   162,   165,   198,   250,   519,   161,     0,
-   266,   266,   266,   266,     0,   657,   659,   664,     0,     0,
+   398,     0,   259,   266,   667,    16,    18,     0,   398,   266,
+    28,   441,   266,   162,   165,   198,   250,   520,   161,     0,
+   266,   266,   266,   266,     0,   658,   660,   665,     0,     0,
    398,   447,     0,     0,   181,   186,   185,   184,   183,   182,
      0,   266,   179,   180,   266,     0,     0,     0,     0,     0,
-   517,     0,   266,   516,   266,   463,   464,   465,   466,     0,
-   467,   468,   266,   470,   266,   469,   471,   530,   266,   266,
+   518,     0,   266,   517,   266,   463,   464,   465,   466,     0,
+   467,   468,   266,   470,   266,   469,   471,   531,   266,   266,
    174,   175,     0,   266,   266,   266,   266,   266,   266,   266,
    266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
    266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   225,   231,   228,   557,   266,     0,   655,    39,     0,   531,
-   549,   560,   652,   578,     0,   515,   266,     0,     0,     0,
-   555,    40,   475,   479,   550,   398,   489,   500,   501,   499,
+   225,   231,   228,   558,   266,     0,   656,    39,     0,   532,
+   550,   561,   653,   579,     0,   516,   266,     0,     0,     0,
+   556,    40,   475,   479,   551,   398,   489,   501,   502,     0,
      0,     0,    41,    22,   266,   441,   398,   398,   266,   254,
    128,   398,     0,   373,     0,   398,     0,   398,     0,   266,
    266,   265,   266,   264,   260,   398,     0,   266,     0,   398,
    266,    19,   438,     0,     0,   424,   439,   266,     0,     0,
-   524,     0,   563,     0,   249,     0,   656,   665,   164,   266,
-   266,     0,   449,   448,   450,   266,   512,   266,     0,   660,
-   661,   662,   663,   658,   518,   266,   525,     0,   651,   398,
-   528,   649,     0,     0,   169,     0,   176,     0,     0,     0,
+   525,     0,   564,     0,   249,     0,   657,   666,   164,   266,
+   266,     0,   449,   448,   450,   266,   513,   266,     0,   661,
+   662,   663,   664,   659,   519,   266,   526,     0,   652,   398,
+   529,   650,     0,     0,   169,     0,   176,     0,     0,     0,
    235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
    245,   201,   202,   203,   206,   205,   208,   209,   211,   212,
    213,   214,   216,   217,   219,   221,   223,   266,   266,   266,
-   247,   266,   266,   193,   544,   165,   548,     0,   398,   529,
-   561,     0,     0,   497,   483,   266,   551,     0,     0,    24,
-     0,   535,   266,   552,   130,   398,   266,   530,   266,   255,
-   372,   266,   388,     0,   396,   391,     0,   397,     0,   413,
-   416,   410,   412,   270,   266,   266,   666,    15,    30,   266,
-   441,   266,    17,   425,   434,   436,    36,   443,   398,   442,
-   446,   520,   559,     0,   565,   266,   370,   455,     0,   441,
-   451,   266,     0,   199,   398,   266,   521,     0,   527,   543,
-     0,   568,   266,   170,   168,   266,   266,   226,     0,   229,
-   266,   195,   266,   197,   545,   546,   266,   266,   266,   566,
-   266,   398,   266,   398,    76,    26,   536,   539,   266,   266,
-   537,   266,   553,   530,   133,     0,   257,   266,   374,   394,
-   532,   380,   395,   532,   383,   266,   415,   266,     0,   103,
-   266,   266,   266,     0,    32,     0,   266,     0,    78,   440,
-   266,   452,   266,     0,   456,   459,   266,     0,   457,     0,
-   441,     0,     0,     0,   526,   266,   266,   177,   172,   173,
-   232,     0,     0,   547,   562,     0,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,     0,   162,   165,   178,   198,
-   187,   204,   207,   210,   215,   218,   220,   222,   224,   227,
-     0,   571,   570,   163,   581,   590,   600,   602,   606,   609,
-   612,   617,   620,   622,   624,   626,   628,   630,   634,   573,
-   161,     0,    23,     0,    93,    97,    95,   120,   121,   122,
-   123,   124,   125,   126,    25,    76,    80,     0,    82,    81,
-     0,    85,     0,   398,   398,    83,     0,    84,   291,     0,
-    76,   540,   541,   266,   538,    21,   266,   271,   398,   386,
-   532,   398,   387,   532,   409,   414,   266,     0,     0,   102,
-   266,   273,   261,   266,     0,   398,    78,    34,     0,   435,
-   437,    37,    78,    86,    88,    87,    91,    89,    90,   444,
-   418,     0,   266,   452,   419,   453,   564,   480,     0,   460,
-   458,   461,     0,     0,   171,   522,     0,   571,   266,   194,
-   196,   654,     0,     0,   181,   186,   185,   184,   183,   182,
-   179,   180,   266,   266,   266,   174,   175,     0,   266,   266,
+   247,   266,   266,   193,   545,   165,   549,     0,   398,   530,
+   562,     0,     0,   497,   483,   266,   552,   500,     0,     0,
+    24,     0,   536,   266,   553,   130,   398,   266,   531,   266,
+   255,   372,   266,   388,     0,   396,   391,     0,   397,     0,
+   413,   416,   410,   412,   270,   266,   266,   667,    15,    30,
+   266,   441,   266,    17,   425,   434,   436,    36,   443,   398,
+   442,   446,   521,   560,     0,   566,   266,   370,   455,     0,
+   441,   451,   266,     0,   199,   398,   266,   522,     0,   528,
+   544,     0,   569,   266,   170,   168,   266,   266,   226,     0,
+   229,   266,   195,   266,   197,   546,   547,   266,   266,   266,
+   567,   266,   398,   266,   398,    76,    26,   537,   540,   266,
+   266,   538,   266,   554,   531,   133,     0,   257,   266,   374,
+   394,   533,   380,   395,   533,   383,   266,   415,   266,     0,
+   103,   266,   266,   266,     0,    32,     0,   266,     0,    78,
+   440,   266,   452,   266,     0,   456,   459,   266,     0,   457,
+     0,   441,     0,     0,     0,   527,   266,   266,   177,   172,
+   173,   232,     0,     0,   548,   563,     0,   266,   266,   266,
+   266,   266,   266,   266,   266,   266,     0,   162,   165,   178,
+   198,   187,   204,   207,   210,   215,   218,   220,   222,   224,
+   227,     0,   572,   571,   163,   582,   591,   601,   603,   607,
+   610,   613,   618,   621,   623,   625,   627,   629,   631,   635,
+   574,   161,     0,    23,     0,    93,    97,    95,   120,   121,
+   122,   123,   124,   125,   126,    25,    76,    80,     0,    82,
+    81,     0,    85,     0,   398,   398,    83,     0,    84,   291,
+     0,    76,   541,   542,   266,   539,    21,   266,   271,   398,
+   386,   533,   398,   387,   533,   409,   414,   266,     0,     0,
+   102,   266,   273,   261,   266,     0,   398,    78,    34,     0,
+   435,   437,    37,    78,    86,    88,    87,    91,    89,    90,
+   444,   418,     0,   266,   452,   419,   453,   565,   480,     0,
+   460,   458,   461,     0,     0,   171,   523,     0,   572,   266,
+   194,   196,   655,     0,     0,   181,   186,   185,   184,   183,
+   182,   179,   180,   266,   266,   266,   174,   175,     0,   266,
    266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
    266,   266,   266,   266,   266,   266,   266,   266,   266,   266,
-   266,   266,   266,   266,   266,   225,   631,   228,   484,     0,
-   478,   101,   106,    99,   110,   666,    77,    92,    96,   104,
-   285,   288,   284,     0,   289,   287,    27,   542,   266,     0,
-   400,   398,   398,   399,   398,   398,   398,   417,   266,   263,
-   276,     0,   271,    12,    31,    33,    78,    29,   666,    79,
-   441,   445,   420,   421,   266,   454,   462,     0,   190,     0,
-   530,   233,   653,   164,   266,     0,   169,     0,     0,     0,
-     0,   635,   636,   637,   638,   639,   640,   641,   642,   643,
-   644,   645,   201,   202,   203,   206,   205,   208,   209,   211,
-   212,   213,   214,   216,   217,   219,   221,   223,   627,   266,
-   629,   266,   477,   105,     0,   115,   116,   117,   118,   119,
-   666,   107,   398,   110,     0,     0,   138,    98,   147,   666,
-   136,   137,     0,    47,     0,     0,    55,    56,    66,    64,
-   294,     0,   293,    53,    73,     0,    60,    63,     0,   666,
-    65,   157,   271,   266,   398,     0,   266,   401,   389,   398,
-   392,   398,   411,   274,   266,   666,    35,     0,   266,   481,
-   266,     0,   650,   647,   199,   266,   170,   168,   266,   266,
-     0,   572,   100,   110,    94,   113,   109,   114,   112,   111,
-     0,   141,     0,     0,     0,     0,   135,     0,     0,   150,
-   159,   666,   149,     0,     0,    63,     0,    69,     0,     0,
-    58,    57,    59,     0,     0,     0,     0,     0,     0,   266,
-   666,   158,     0,   256,   266,   403,   266,   266,   398,   406,
-     0,   381,     0,   384,   275,   277,     0,    38,   266,     0,
-   191,   189,   646,   531,     0,   172,   173,   632,   108,   142,
-   139,   145,     0,   146,   143,   144,   148,     0,   153,     0,
-     0,     0,     0,   266,     0,    75,    74,     0,    70,     0,
-    49,    44,    45,    52,    63,    54,    67,     0,    71,    72,
-     0,     0,   292,   266,   266,   272,   266,   266,     0,   404,
-   266,   390,     0,   393,     0,    13,   482,   569,   171,   266,
-   140,   154,   151,     0,   155,   156,   160,   286,    51,    48,
-     0,     0,    68,    46,    61,   290,   258,   407,   398,   402,
-   266,   382,   385,   633,   152,    62,    50,   405,   408,     0,
-     0,     0
+   266,   266,   266,   266,   266,   266,   225,   632,   228,   484,
+     0,   478,   101,   106,    99,   110,   667,    77,    92,    96,
+   104,   285,   288,   284,     0,   289,   287,    27,   543,   266,
+     0,   400,   398,   398,   399,   398,   398,   398,   417,   266,
+   263,   276,     0,   271,    12,    31,    33,    78,    29,   667,
+    79,   441,   445,   420,   421,   266,   454,   462,     0,   190,
+     0,   531,   233,   654,   164,   266,     0,   169,     0,     0,
+     0,     0,   636,   637,   638,   639,   640,   641,   642,   643,
+   644,   645,   646,   201,   202,   203,   206,   205,   208,   209,
+   211,   212,   213,   214,   216,   217,   219,   221,   223,   628,
+   266,   630,   266,   477,   105,     0,   115,   116,   117,   118,
+   119,   667,   107,   398,   110,     0,     0,   138,    98,   147,
+   667,   136,   137,     0,    47,     0,     0,    55,    56,    66,
+    64,   294,     0,   293,    53,    73,     0,    60,    63,     0,
+   667,    65,   157,   271,   266,   398,     0,   266,   401,   389,
+   398,   392,   398,   411,   274,   266,   667,    35,     0,   266,
+   481,   266,     0,   651,   648,   199,   266,   170,   168,   266,
+   266,     0,   573,   100,   110,    94,   113,   109,   114,   112,
+   111,     0,   141,     0,     0,     0,     0,   135,     0,     0,
+   150,   159,   667,   149,     0,     0,    63,     0,    69,     0,
+     0,    58,    57,    59,     0,     0,     0,     0,     0,     0,
+   266,   667,   158,     0,   256,   266,   403,   266,   266,   398,
+   406,     0,   381,     0,   384,   275,   277,     0,    38,   266,
+     0,   191,   189,   647,   532,     0,   172,   173,   633,   108,
+   142,   139,   145,     0,   146,   143,   144,   148,     0,   153,
+     0,     0,     0,     0,   266,     0,    75,    74,     0,    70,
+     0,    49,    44,    45,    52,    63,    54,    67,     0,    71,
+    72,     0,     0,   292,   266,   266,   272,   266,   266,     0,
+   404,   266,   390,     0,   393,     0,    13,   482,   570,   171,
+   266,   140,   154,   151,     0,   155,   156,   160,   286,    51,
+    48,     0,     0,    68,    46,    61,   290,   258,   407,   398,
+   402,   266,   382,   385,   634,   152,    62,    50,   405,   408,
+     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1190,
-    84,    85,    86,    87,   133,   295,   296,    88,   635,   771,
-   297,   797,   917,    89,   669,   919,   901,    91,  1001,  1131,
-  1078,  1064,  1132,  1170,  1003,  1004,  1005,  1074,  1006,  1007,
-  1135,  1009,  1128,   755,   802,   756,   803,   757,   804,   885,
-   805,   760,   806,   886,   883,   884,   789,   762,   763,   981,
-   982,   983,  1047,   984,   764,   765,    92,   257,   427,   258,
-   558,    93,   988,  1112,  1113,   990,  1061,  1081,  1062,   173,
-   174,   496,   175,   928,   176,   177,   396,   534,   178,   179,
+static const short yydefgoto[] = {  1191,
+    84,    85,    86,    87,   133,   295,   296,    88,   636,   772,
+   297,   798,   918,    89,   670,   920,   902,    91,  1002,  1132,
+  1079,  1065,  1133,  1171,  1004,  1005,  1006,  1075,  1007,  1008,
+  1136,  1010,  1129,   756,   803,   757,   804,   758,   805,   886,
+   806,   761,   807,   887,   884,   885,   790,   763,   764,   982,
+   983,   984,  1048,   985,   765,   766,    92,   257,   427,   258,
+   559,    93,   989,  1113,  1114,   991,  1062,  1082,  1063,   173,
+   174,   496,   175,   929,   176,   177,   396,   534,   178,   179,
    180,   181,   182,   183,   184,   185,   186,   187,   528,   188,
-   530,   189,   529,   829,   190,   219,   466,   308,   415,    95,
-   648,   777,   126,   576,    96,   291,   192,   255,   127,   128,
-   900,   793,   912,    98,   766,   808,   993,   768,   769,   809,
-  1012,   894,  1010,    99,   100,   101,   102,   103,   104,   105,
+   530,   189,   529,   830,   190,   219,   466,   308,   415,    95,
+   649,   778,   126,   577,    96,   291,   192,   255,   127,   128,
+   901,   794,   913,    98,   767,   809,   994,   769,   770,   810,
+  1013,   895,  1011,    99,   100,   101,   102,   103,   104,   105,
    106,   107,   108,   109,   110,   322,   416,   433,   112,   263,
-   113,   781,  1153,   784,  1155,   651,  1091,   654,  1093,   114,
-   903,   904,  1088,  1089,   115,   659,   569,   570,   813,   130,
-   455,   123,   124,   117,   584,   585,   456,   457,   458,   671,
-   590,   323,   819,   815,   475,   344,   220,   240,   221,   222,
-   345,   925,  1100,   224,   631,   225,   226,   227,   228,   194,
-   401,   346,   342,   347,   460,   684,   348,   310,   608,   349,
-   199,   350,   540,   779,  1019,   233,   555,   491,   400,   201,
-   556,   557,   351,   202,   203,   352,   628,   594,   353,   236,
-   354,   358,   687,   722,   880,   723,   207,   725,   726,   727,
+   113,   782,  1154,   785,  1156,   652,  1092,   655,  1094,   114,
+   904,   905,  1089,  1090,   115,   660,   570,   571,   814,   130,
+   455,   123,   124,   117,   585,   586,   456,   457,   458,   672,
+   591,   323,   820,   816,   475,   344,   220,   240,   221,   222,
+   345,   926,  1101,   224,   632,   225,   226,   420,   227,   228,
+   194,   401,   346,   342,   347,   460,   685,   348,   310,   609,
+   349,   199,   350,   540,   780,  1020,   233,   556,   491,   400,
+   201,   557,   558,   351,   202,   203,   352,   629,   595,   353,
+   236,   354,   358,   688,   723,   881,   724,   207,   726,   727,
    728,   729,   730,   731,   732,   733,   734,   735,   736,   737,
-   738,   739,   970,  1160,   740,  1104,   355,   356,   209,   357,
-   260,   309,   212,   120
+   738,   739,   740,   971,  1161,   741,  1105,   355,   356,   209,
+   357,   260,   309,   212,   120
 };
 
-static const short yypact[] = {  1940,
--32768,    44,  5141,-32768,  6239,-32768,   777,  2916,  3298,  3298,
+static const short yypact[] = {  1990,
+-32768,    42,  5205,-32768,  6333,-32768,   714,  2980,  3362,  3362,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   618,-32768,
--32768,-32768,-32768,  2117,-32768,-32768,-32768,   517,-32768,-32768,
-    83,-32768,   119,-32768,-32768,-32768,   142,  6074,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  6074,  6074,
-   133,    22,-32768,   931,-32768,-32768,   777,-32768,-32768,-32768,
--32768,-32768,-32768,    44,-32768,-32768,   155,-32768,   133,-32768,
--32768,-32768,  5141,-32768,   163,-32768,  5370,-32768,   200,   241,
-   262,-32768,   279,   777,   293,   331,  1396,-32768,  2493,  5370,
-  5370,  5370,  5370,  5370,  5370,-32768,  5399,  5399,   340,-32768,
-   374,   388,   410,   417,   433,   351,  4585,-32768,   440,   446,
--32768,   459,-32768,   810,  1052,-32768,-32768,-32768,  1005,   127,
-    65,   514,   461,   428,   448,   456,   519,    84,-32768,-32768,
-   302,-32768,  3446,   490,   495,-32768,-32768,-32768,-32768,   484,
-  3064,-32768,  4585,-32768,  3446,-32768,   429,  3446,-32768,-32768,
-   582,   589,-32768,   599,-32768,  2683,   459,   634,   336,   542,
-  3107,-32768,  3298,-32768,-32768,-32768,  5700,-32768,-32768,-32768,
--32768,   642,   647,-32768,  3298,  3298,  3446,-32768,-32768,   607,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   663,-32768,
+-32768,-32768,-32768,  2181,-32768,-32768,-32768,   516,-32768,-32768,
+    82,-32768,    39,-32768,-32768,-32768,    87,  6168,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  6168,  6168,
+   113,   106,-32768,   510,-32768,-32768,   714,-32768,-32768,-32768,
+-32768,-32768,-32768,    42,-32768,-32768,   144,-32768,   113,-32768,
+-32768,-32768,  5205,-32768,   176,-32768,  5463,-32768,   223,   241,
+   248,-32768,   275,   714,   292,   325,   929,-32768,  2557,  5463,
+  5463,  5463,  5463,  5463,  5463,-32768,  5483,  5483,   378,-32768,
+   395,   431,   443,   487,   519,   469,  4649,-32768,   570,   591,
+-32768,   601,-32768,   739,  1269,-32768,-32768,-32768,   693,    36,
+   375,   353,   426,   589,   521,   631,   581,    69,-32768,-32768,
+   362,-32768,  3510,   600,   629,-32768,-32768,-32768,-32768,   717,
+  3128,-32768,  4649,-32768,  3510,-32768,   495,  3510,-32768,-32768,
+   695,   722,-32768,   730,-32768,  2747,   601,   740,   368,   705,
+  3171,-32768,  3362,-32768,-32768,-32768,  5794,-32768,-32768,-32768,
+-32768,   792,   809,-32768,-32768,  3362,  3510,-32768,-32768,   741,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   714,   689,-32768,-32768,  5964,-32768,-32768,
+-32768,-32768,-32768,   838,   849,-32768,-32768,  6058,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   725,   667,-32768,-32768,   777,
-   777,    11,-32768,   517,-32768,-32768,-32768,-32768,   747,-32768,
--32768,   766,   767,   667,   119,-32768,   571,   763,-32768,   777,
--32768,   287,  5370,-32768,-32768,-32768,-32768,-32768,-32768,   795,
-  5370,  5370,  5370,  1711,   804,-32768,-32768,-32768,   391,   164,
-  5568,   363,   800,   802,-32768,-32768,-32768,-32768,-32768,-32768,
-   806,  5370,-32768,-32768,  5370,   814,   817,   835,   886,   893,
-   351,   728,  3402,-32768,  4585,-32768,-32768,-32768,-32768,   898,
--32768,-32768,  4585,-32768,  4585,-32768,-32768,-32768,  1859,  5370,
--32768,-32768,    46,  5370,  5370,  5370,  5370,  5370,  5370,  5370,
-  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,
-  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,
--32768,-32768,-32768,-32768,  5370,   635,-32768,-32768,  2303,-32768,
--32768,   861,-32768,-32768,   945,-32768,  5370,   367,   938,   839,
--32768,-32768,-32768,-32768,-32768,   133,  5700,-32768,-32768,-32768,
-  2873,   997,-32768,-32768,  5370,   125,  3549,  4666,   667,-32768,
-   319,  6239,   879,   992,  1001,  1006,  1014,  1006,   777,  1030,
-   667,-32768,   667,-32768,-32768,-32768,   962,  1036,  1033,-32768,
-   667,   571,-32768,   777,  1039,-32768,  1045,   777,   226,  1046,
--32768,   266,  1057,   394,  1057,  1064,-32768,-32768,-32768,-32768,
-  5152,  1060,   617,-32768,   695,  5370,-32768,-32768,  1065,-32768,
--32768,-32768,-32768,-32768,-32768,  5370,-32768,  1067,-32768,  3549,
--32768,-32768,  1078,  1066,-32768,   403,-32768,    58,   777,   777,
+-32768,-32768,-32768,-32768,-32768,   863,   679,-32768,-32768,   714,
+   714,    41,-32768,   516,-32768,-32768,-32768,-32768,   894,-32768,
+-32768,   907,   920,   679,    39,-32768,   560,   925,-32768,   714,
+-32768,   229,  5463,-32768,-32768,-32768,-32768,-32768,-32768,   932,
+  5463,  5463,  5463,  1160,   946,-32768,-32768,-32768,   643,   319,
+  5662,   509,   949,   965,-32768,-32768,-32768,-32768,-32768,-32768,
+   955,  5463,-32768,-32768,  5463,   998,   999,  1001,  1007,  1008,
+   469,   522,  1728,-32768,  4649,-32768,-32768,-32768,-32768,  1009,
+-32768,-32768,  4649,-32768,  4649,-32768,-32768,-32768,  5216,  5463,
+-32768,-32768,   194,  5463,  5463,  5463,  5463,  5463,  5463,  5463,
+  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,
+  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,
+-32768,-32768,-32768,-32768,  5463,   508,-32768,-32768,  2367,-32768,
+-32768,  1018,-32768,-32768,  1025,-32768,  5463,   442,  1017,  1005,
+-32768,-32768,-32768,-32768,-32768,   113,  5794,-32768,-32768,  3362,
+  2937,  1033,-32768,-32768,  5463,   410,  3613,  4730,   679,-32768,
+   551,  6333,   957,  1013,  1028,  1029,  1030,  1029,   714,  1031,
+   679,-32768,   679,-32768,-32768,-32768,   964,  1034,  1038,-32768,
+   679,   560,-32768,   714,  1039,-32768,  1037,   714,    97,  1041,
+-32768,   139,  1044,   193,  1044,  1048,-32768,-32768,-32768,-32768,
+  5378,  1043,   622,-32768,   922,  5463,-32768,-32768,  1052,-32768,
+-32768,-32768,-32768,-32768,-32768,  5463,-32768,  1051,-32768,  3613,
+-32768,-32768,  1058,  1055,-32768,   409,-32768,   115,   714,   714,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1005,  1005,   127,   127,    65,    65,
-    65,    65,   514,   514,   461,   428,   448,  5370,  5370,  5370,
--32768,  5419,  5430,-32768,-32768,  4899,-32768,  3255,  3734,-32768,
--32768,  1073,   424,-32768,-32768,   667,-32768,  1076,  1074,-32768,
-  1077,-32768,  4104,-32768,-32768,  3919,  4147,  1079,-32768,  1081,
--32768,-32768,  1085,  1087,-32768,  1088,  1100,-32768,   752,-32768,
-  1101,-32768,-32768,-32768,   155,-32768,   225,-32768,-32768,  5370,
-   481,   667,-32768,-32768,  1104,-32768,-32768,  1122,  6239,-32768,
--32768,-32768,-32768,  1107,-32768,  1711,-32768,-32768,  1099,    67,
-   695,  5314,  1109,-32768,-32768,-32768,-32768,  1112,-32768,-32768,
-  1111,-32768,  5370,-32768,-32768,-32768,-32768,   456,   778,   519,
-  5370,-32768,  5370,-32768,-32768,-32768,  4250,  4585,  5370,-32768,
-  5489,-32768,  5370,-32768,  1083,-32768,-32768,-32768,  4293,  4396,
--32768,  4439,-32768,  1079,-32768,  1113,-32768,-32768,-32768,-32768,
--32768,  1116,-32768,-32768,  1119,-32768,   777,-32768,   777,  1068,
-  5062,-32768,-32768,  1114,-32768,  1117,-32768,   496,  1083,-32768,
-   777,   396,  4585,  1125,-32768,-32768,   204,  1129,-32768,  1120,
-    82,  1123,  1134,  1124,-32768,  5370,  5489,-32768,-32768,-32768,
--32768,  1145,  1146,-32768,-32768,   457,  5370,  5370,  5370,  5370,
-  5370,  5370,  5370,  5399,  5399,  1126,   512,   537,   888,  1310,
-   551,  1037,   779,   811,   840,   845,  1148,  1135,  1138,  1127,
-   105,  1154,-32768,    10,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   693,   693,    36,    36,   375,   375,
+   375,   375,   353,   353,   426,   589,   521,  5463,  5463,  5463,
+-32768,  5494,  5557,-32768,-32768,  4963,-32768,  3319,  3798,-32768,
+-32768,  1063,   550,-32768,-32768,   679,-32768,-32768,  1064,  1072,
+-32768,  1076,-32768,  4168,-32768,-32768,  3983,  4211,  1078,-32768,
+  1080,-32768,-32768,  1084,  1086,-32768,  1087,  1089,-32768,   585,
+-32768,  1083,-32768,-32768,-32768,   144,-32768,   374,-32768,-32768,
+  5463,   596,   679,-32768,-32768,  1090,-32768,-32768,  1110,  6333,
+-32768,-32768,-32768,-32768,  1092,-32768,  1160,-32768,-32768,  1091,
+   461,   922,  5389,  1095,-32768,-32768,-32768,-32768,  1098,-32768,
+-32768,  1101,-32768,  5463,-32768,-32768,-32768,-32768,   631,   609,
+   581,  5463,-32768,  5463,-32768,-32768,-32768,  4314,  4649,  5463,
+-32768,  5583,-32768,  5463,-32768,  1383,-32768,-32768,-32768,  4357,
+  4460,-32768,  4503,-32768,  1078,-32768,  1102,-32768,-32768,-32768,
+-32768,-32768,  1106,-32768,-32768,  1108,-32768,   714,-32768,   714,
+  1059,  5126,-32768,-32768,  1112,-32768,  1107,-32768,   293,  1383,
+-32768,   714,   468,  4649,  1115,-32768,-32768,    79,  1116,-32768,
+  1113,    67,  1114,  1119,  1123,-32768,  5463,  5583,-32768,-32768,
+-32768,-32768,  1121,  1122,-32768,-32768,   587,  5463,  5463,  5463,
+  5463,  5463,  5463,  5463,  5483,  5483,  1124,   595,   624,   954,
+  1323,   634,   754,   822,   649,   418,   853,  1125,  1111,  1097,
+  1096,   250,  1127,-32768,    46,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   552,   584,-32768,   996,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,  1083,-32768,  1094,-32768,-32768,
-  1096,-32768,  1102,-32768,-32768,-32768,  1103,-32768,  1824,  1105,
-  1083,-32768,-32768,  4542,-32768,-32768,-32768,-32768,  6161,-32768,
--32768,  6161,-32768,-32768,-32768,-32768,  5370,   906,  1172,-32768,
-  5062,-32768,-32768,  5062,  1106,-32768,  1083,-32768,  1168,-32768,
--32768,-32768,  1083,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   517,  1174,-32768,   838,-32768,   695,-32768,-32768,  1171,-32768,
--32768,-32768,  1175,   777,-32768,-32768,   673,  1177,  5370,-32768,
--32768,  1185,   674,  1180,   723,   729,   730,   750,   764,   798,
-   854,   855,  5370,  5325,  5370,   860,   872,    78,  5370,  5370,
-  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,
-  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,  5370,
-  5370,  5370,  5370,  5370,  5370,  5370,-32768,  5370,-32768,  1186,
-  1188,-32768,  1021,  1169,    -7,    23,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   544,-32768,-32768,-32768,-32768,  5062,   585,
--32768,   133,  4744,-32768,  6161,  4744,  6161,-32768,-32768,-32768,
--32768,   922,-32768,-32768,-32768,-32768,  1083,-32768,   119,-32768,
-   620,-32768,-32768,-32768,  5345,-32768,-32768,   593,-32768,  1193,
-  1079,-32768,-32768,   897,  5370,  1191,   903,   928,    61,   777,
-   777,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   933,   948,   950,   812,   912,   300,   875,    79,
-   382,   505,   613,   701,   743,   102,   114,   147,   456,  5370,
-   519,  5489,-32768,   429,   996,-32768,-32768,-32768,-32768,-32768,
-   632,-32768,  5832,    -7,    62,    62,-32768,-32768,   412,   637,
--32768,-32768,    85,-32768,   797,    92,-32768,-32768,-32768,-32768,
--32768,  1190,-32768,  1032,-32768,  1043,-32768,    77,  1202,   119,
--32768,    85,-32768,-32768,-32768,  1225,   309,-32768,-32768,  4744,
--32768,  4744,-32768,-32768,  1732,   671,-32768,  1155,   656,-32768,
--32768,   777,-32768,  1056,   967,-32768,   976,   993,-32768,-32768,
-   957,-32768,-32768,    -7,-32768,-32768,-32768,-32768,-32768,-32768,
-   435,   412,   682,   777,   777,    62,-32768,    85,    85,-32768,
-   492,   711,-32768,  1226,   958,   506,    92,   543,    49,   797,
--32768,-32768,-32768,   797,    15,   777,   777,  1227,   797,-32768,
-   119,  1229,   745,-32768,   667,-32768,-32768,  1230,-32768,  1237,
-  1240,-32768,  1241,-32768,-32768,-32768,  1176,-32768,   594,  1242,
--32768,-32768,-32768,-32768,  1243,  1010,  1025,-32768,-32768,-32768,
--32768,   412,  1239,   429,-32768,-32768,   412,   686,   492,   722,
-   777,   777,    85,-32768,  1082,-32768,-32768,   797,-32768,   506,
-  1232,-32768,   543,-32768,   543,-32768,-32768,  1247,-32768,-32768,
-  1082,  1253,-32768,-32768,-32768,-32768,  5370,   309,  1251,-32768,
--32768,-32768,  1259,-32768,  1260,-32768,-32768,-32768,  1027,  5370,
--32768,-32768,-32768,  1255,-32768,-32768,   492,-32768,-32768,-32768,
-  1258,    49,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  5370,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1285,
-  1286,-32768
+-32768,   645,   718,-32768,   972,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,  1383,-32768,  1068,-32768,
+-32768,  1069,-32768,  1070,-32768,-32768,-32768,  1071,-32768,  1694,
+  1074,  1383,-32768,-32768,  4606,-32768,-32768,-32768,-32768,  6255,
+-32768,-32768,  6255,-32768,-32768,-32768,-32768,  5463,   936,  1146,
+-32768,  5126,-32768,-32768,  5126,  1077,-32768,  1383,-32768,  1140,
+-32768,-32768,-32768,  1383,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   516,  1144,-32768,   744,-32768,   922,-32768,-32768,  1147,
+-32768,-32768,-32768,  1149,   714,-32768,-32768,   734,  1151,  5463,
+-32768,-32768,  1153,   748,  1155,   751,   770,   780,   789,   795,
+   810,   845,   857,  5463,  5409,  5463,   865,   875,   357,  5463,
+  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,
+  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,  5463,
+  5463,  5463,  5463,  5463,  5463,  5463,  5463,-32768,  5463,-32768,
+  1161,  1163,-32768,   996,  1145,   401,    57,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   620,-32768,-32768,-32768,-32768,  5126,
+   688,-32768,   113,  4808,-32768,  6255,  4808,  6255,-32768,-32768,
+-32768,-32768,   951,-32768,-32768,-32768,-32768,  1383,-32768,    39,
+-32768,   104,-32768,-32768,-32768,  5436,-32768,-32768,   394,-32768,
+  1169,  1078,-32768,-32768,   883,  5463,  1167,   892,   898,   142,
+   714,   714,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   930,   945,   960,   476,   666,   141,   828,
+   338,   415,   531,   698,   771,   781,    62,    53,    65,   631,
+  5463,   581,  5583,-32768,   495,   972,-32768,-32768,-32768,-32768,
+-32768,   756,-32768,  5926,   401,    72,    72,-32768,-32768,   128,
+   803,-32768,-32768,   119,-32768,   692,   226,-32768,-32768,-32768,
+-32768,-32768,  1172,-32768,  1014,-32768,   885,-32768,   306,  1175,
+    39,-32768,   119,-32768,-32768,-32768,  1182,   450,-32768,-32768,
+  4808,-32768,  4808,-32768,-32768,  3466,   818,-32768,  1126,   726,
+-32768,-32768,   714,-32768,  1015,   967,-32768,   970,   982,-32768,
+-32768,   990,-32768,-32768,   401,-32768,-32768,-32768,-32768,-32768,
+-32768,   538,   128,    61,   714,   714,    72,-32768,   119,   119,
+-32768,   133,   824,-32768,  1180,   991,   637,   226,   310,   165,
+   692,-32768,-32768,-32768,   692,    26,   714,   714,  1181,   692,
+-32768,    39,  1191,   862,-32768,   679,-32768,-32768,  1193,-32768,
+  1194,  1198,-32768,  1199,-32768,-32768,-32768,  1132,-32768,   501,
+  1197,-32768,-32768,-32768,-32768,  1200,   983,   984,-32768,-32768,
+-32768,-32768,   128,  1202,   495,-32768,-32768,   128,   651,   133,
+   404,   714,   714,   119,-32768,  1035,-32768,-32768,   692,-32768,
+   637,  1187,-32768,   310,-32768,   310,-32768,-32768,  1204,-32768,
+-32768,  1035,  1209,-32768,-32768,-32768,-32768,  5463,   450,  1218,
+-32768,-32768,-32768,  1217,-32768,  1219,-32768,-32768,-32768,   985,
+  5463,-32768,-32768,-32768,  1211,-32768,-32768,   133,-32768,-32768,
+-32768,  1215,   165,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  5463,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+  1241,  1244,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,  1204,-32768,-32768,-32768,-32768,  -405,  -112,-32768,-32768,
-   989,-32768,-32768,-32768,-32768,-32768,    68,-32768,-32768,   397,
--32768,-32768,   118,   151,   223,-32768,-32768,-32768,  -661,-32768,
-  -825,-32768,-32768,  -608,  -744,-32768,-32768,-32768,  -573,-32768,
-  -373,-32768,  -287,-32768,   320,-32768,-32768,   639,  -613,-32768,
-   250,   313,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  -828,   180,-32768,  -982,-32768,   289,-32768,
-  -616,   458,   852,-32768,-32768,  -593,-32768,-32768,    59,  -359,
-  -358,  -357,  -343,  -382,  -365,  -335,  -499,  -513,-32768,  -592,
--32768,  -136,-32768,-32768,   851,   944,  -584,  -411,    36,-32768,
--32768,-32768,  -437,-32768,-32768,-32768,   267,  -230,   862,-32768,
-  -848,  -754,-32768,-32768,-32768,  -276,-32768,-32768,-32768,  -254,
--32768,-32768,-32768,-32768,-32768,   539,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   131,   748,-32768,   951,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   186,
-  -590,  -495,-32768,   161,-32768,-32768,   652,   655,   499,    13,
-  -356,  1192,-32768,    14,-32768,-32768,  -539,-32768,-32768,-32768,
-   644,  -260,   995,-32768,  -452,   844,  1308,-32768,  1084,-32768,
-   666,-32768,-32768,-32768,-32768,  -171,-32768,-32768,-32768,-32768,
-    90,  1121,   978,  1254,-32768,-32768,  1389,-32768,-32768,  -332,
--32768,  1244,   217,  -603,  -858,-32768,   834,-32768,-32768,   926,
-  -195,  -490,   103,-32768,   170,    26,-32768,-32768,   209,-32768,
-   393,-32768,-32768,   640,-32768,   359,  -598,-32768,-32768,-32768,
+-32768,  1166,-32768,-32768,-32768,-32768,  -381,  -111,-32768,-32768,
+   947,-32768,-32768,-32768,-32768,-32768,    43,-32768,-32768,   356,
+-32768,-32768,    80,   122,   181,-32768,-32768,-32768,  -677,-32768,
+  -851,-32768,-32768,  -658,  -740,-32768,-32768,-32768,  -577,-32768,
+  -563,-32768,  -515,-32768,   285,-32768,-32768,   604,  -607,-32768,
+   221,   282,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  -847,   148,-32768,  -966,-32768,   257,-32768,
+  -611,   428,  1105,-32768,-32768,  -608,-32768,-32768,    31,  -349,
+  -358,  -346,  -336,  -383,  -371,  -370,  -500,  -498,-32768,  -599,
+-32768,  -110,-32768,-32768,  1004,   545,  -566,  -424,    16,-32768,
+-32768,-32768,  -439,-32768,-32768,-32768,   267,  -256,   831,-32768,
+  -859,  -750,-32768,-32768,-32768,  -499,-32768,-32768,-32768,  -488,
+-32768,-32768,-32768,-32768,-32768,   505,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,    14,   708,-32768,   905,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1023,
+  -585,  -525,-32768,   127,-32768,-32768,   617,   621,   463,    13,
+  -378,  1156,-32768,     2,-32768,-32768,  -575,-32768,-32768,-32768,
+   611,  -266,   959,-32768,  -458,   411,  1276,-32768,  1053,-32768,
+  1012,-32768,-32768,-32768,-32768,  -167,-32768,-32768,-32768,-32768,
+-32768,   312,  1328,   952,  1352,-32768,-32768,  1418,-32768,-32768,
+  -332,-32768,  1201,   182,  -514,  -696,-32768,   798,-32768,-32768,
+   895,  -193,  -478,    93,-32768,   110,    27,-32768,-32768,    38,
+-32768,    58,-32768,-32768,   607,-32768,   323,  -580,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  1398,-32768,-32768,  1642,
-  -293,     0,   516,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1466,-32768,-32768,
+  1499,  -270,     0,   168,-32768
 };
 
 
-#define        YYLAST          6429
+#define        YYLAST          6523
 
 
 static const short yytable[] = {   118,
-   307,   447,   118,   574,   284,   525,   118,   211,   211,   211,
-   488,   674,   116,   549,   709,   125,   620,   434,   515,   516,
-   601,   517,   518,   526,   519,   520,   521,   522,   618,   439,
-  -579,   417,   724,   204,  -579,    94,   911,   711,   721,   913,
-   259,  1137,   523,   524,   409,   583,   985,  1021,   627,   413,
-   782,   414,   916,   994,   527,   807,   986,   989,   920,   599,
-   678,   758,   428,   420,  1026,   640,   449,    90,  1008,   551,
-   709,   453,  1067,   499,   607,  1118,  1119,     2,   395,   976,
-   977,   395,   996,   118,   615,   985,   453,  1038,   724,   500,
-  -398,   676,  -398,   711,   721,   986,   116,   195,   -45,  -613,
-  -398,   256,  1075,  -613,  1076,   940,   822,   278,  1058,   978,
-   979,   234,   234,   380,   381,  1067,   118,   720,  1059,    94,
-  1077,   941,  -621,   980,   392,   996,  -621,   380,   381,   453,
-   111,   719,   118,   129,  -623,   132,   259,   287,  -623,   393,
-  1167,   823,   388,   118,  1013,   877,   300,   887,   211,   550,
-  -266,    90,   121,   122,   386,   387,  1051,  1052,   378,   379,
-   878,  1092,   897,  1094,  1083,   261,   211,  -625,   664,  1066,
-  1068,  -625,  1027,   720,   204,   288,   667,   905,   235,   235,
-   907,   394,   758,   807,   395,   389,   302,   719,   469,   807,
-   680,   906,   211,    77,    78,   134,   404,   758,    81,    82,
-   211,  1138,   211,   539,   211,    77,   987,   211,   325,   326,
-   327,   328,   329,   330,   111,   211,   205,   605,   204,   816,
-   211,   449,   211,   311,   666,   645,   204,  1117,   262,   471,
-   204,    77,   999,   204,   211,   211,   211,     2,   324,   262,
-   262,  1130,   259,  1133,    77,   987,   395,   662,   716,   413,
-   469,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-   252,   759,   204,   299,   312,   717,    97,    77,  1060,    97,
-  1096,   712,   713,   714,    77,   999,   118,   241,   242,   118,
-   118,   118,   397,   663,   974,   313,   395,   715,   307,   431,
-   593,   453,   272,   118,   403,   718,   277,   405,   279,   118,
-   283,   434,   314,   807,   716,   285,   446,  -398,  -398,  -398,
-   316,   488,  -398,  -398,  1020,   293,  1022,   294,   234,   394,
-  -610,   717,   395,   234,  -610,   234,   422,   712,   713,   714,
-  1087,   378,   379,  1065,   307,   473,  -398,   234,   234,  -398,
-  1030,  -398,     2,   715,   211,   683,  1133,   761,   317,   307,
-    97,   718,   211,   411,   211,   709,   395,   205,   767,   363,
-   692,   816,   693,   335,   971,   264,   265,   266,   267,   268,
-   269,   270,   271,   724,   273,   908,   969,   276,   711,   721,
-   770,   678,   759,    97,   411,   235,  -266,   395,   471,   336,
-   235,   469,   235,   289,   290,   292,     2,   759,   211,   298,
-   206,   205,  -614,   337,   235,   235,  -614,  1018,   468,   205,
-  1018,   395,  1136,   205,   395,   321,   205,  1142,   595,  -266,
-   211,   471,   331,   613,   204,   338,   211,   614,   118,     2,
-   380,   381,   339,   512,   513,   514,   834,  1053,   118,  1054,
-   118,   559,   118,   307,   395,   205,   429,   340,   630,   341,
-   118,   470,   547,   118,  1114,  1055,   388,   118,   720,  1110,
-  1053,  -669,  1054,   547,   300,   307,  1171,  -673,   761,  -398,
-  -398,  -398,   719,   441,  -398,  -398,   443,   395,  1055,   767,
-  -670,   832,   321,   761,   451,   453,   389,   454,   537,   211,
-   966,    77,    78,   134,   767,   390,    81,    82,   118,   118,
-   800,   770,   399,   956,   957,   665,   958,   959,   967,   960,
-   961,   962,   963,   386,   387,   119,   770,  1120,   119,  1121,
-   425,  1114,   135,   234,  1018,  -615,  1018,   964,   965,  -615,
-  1129,  1075,  -576,  1076,   604,  1122,  -576,   211,   211,   968,
-  -267,   206,   254,    97,   432,   118,   435,   437,   994,  1077,
-   382,   383,   211,   380,   381,   211,   211,  -575,   632,   811,
-    97,  -575,   470,   204,   384,   385,   298,   995,  1075,   321,
-  1076,  -599,  -574,   391,   547,  -599,  -574,   996,    77,    78,
-   134,   118,   398,    81,    82,   206,  1077,  -502,   472,   716,
-   235,   547,   991,   206,  -267,   300,   448,   206,  1034,   119,
-   206,   546,  1014,  -672,   395,  1015,   717,   205,   881,   321,
-   406,   454,   712,   713,   714,   404,   560,  1031,  -449,   471,
-  1032,   565,   407,   568,   453,  1028,   211,   211,   715,   206,
-   741,   577,   119,  -616,   412,   582,   718,  -616,   211,   211,
-  -266,   211,   471,  -398,   676,  -398,   601,  1146,   301,   259,
-   307,  -675,  1044,  -398,   259,  -671,   118,  1056,   118,   315,
-   418,   380,   381,  -398,  -398,  -398,   419,   118,  -398,  -398,
-   118,   118,   211,   193,   223,   223,   532,   533,    77,    78,
-   134,   471,   276,    81,    82,   814,   741,  1045,   259,     2,
-   473,  1015,   932,   395,   395,    97,  1057,   930,   934,   423,
-     2,   811,   564,  -675,   567,   985,   573,    97,  1111,    97,
-  1162,  1120,   426,  1121,   580,   986,  1080,   298,  -266,   672,
-   602,  -618,   997,   998,   589,  -618,    77,   999,   259,  1122,
-  1000,  1123,  1097,   486,   487,  1178,   597,   382,   383,   472,
-   424,   603,   430,  -593,   432,   985,   205,  -593,  1163,  -598,
-  -597,   384,   385,  -598,  -597,   986,   835,   836,   837,   838,
-   839,   840,  1145,  -619,   442,  1015,   454,  -619,  1124,  1189,
-  -596,   656,   657,   211,  -596,  1105,    77,    78,   134,   382,
-   383,    81,    82,   444,  -595,   677,   450,  1144,  -595,   445,
-   682,   206,   119,   384,   385,   436,   438,   440,   395,   691,
-  -675,  -675,  -398,  -398,  -398,  -675,  -675,  -398,  -398,   119,
-   863,   864,    97,   118,   193,   301,   461,   560,  -594,   743,
-   995,   467,  -594,   118,   476,   646,   477,   814,   432,   478,
-   996,   480,  -608,   359,   481,   360,  -608,  -398,    77,    78,
-   134,   660,   661,    81,    82,   375,   376,   377,   298,    77,
-    78,   134,   482,  -398,    81,    82,   361,   362,   193,   865,
-   866,  -266,   545,   471,    77,   987,   193,   603,   171,   541,
-   193,     2,   432,   193,  -591,  -592,   867,   868,  -591,  -592,
-  -588,   223,   689,   690,  -588,   992,   223,   321,   223,   321,
-   869,   870,  -589,  1011,   848,  -611,  -589,   871,   872,  -611,
-   223,   223,   193,   483,    77,   987,   378,   379,   171,   902,
-   484,   844,   902,   845,   778,  -398,   490,  -580,   953,   954,
-   955,  -580,   785,  -583,   787,   909,   657,  -583,   794,   795,
-   206,  -398,  -607,   799,   846,   847,  -607,   589,   812,   118,
-   118,  1024,  1025,   472,   119,   375,   376,   377,   613,   891,
-   892,   191,  1037,  -603,   571,   542,   119,  -603,   119,    77,
-    78,   134,   544,   321,    81,    82,   301,   561,  -604,   586,
-  -605,   741,  -604,   591,  -605,   997,   998,   395,  1108,    77,
-   999,   915,  1049,  1000,   992,   992,   284,  -601,   306,  1126,
-  1127,  -601,  1063,  1035,  1011,  1011,  -584,   280,   281,   282,
-  -584,   306,   306,   306,   306,   306,   306,   548,   333,   334,
-   307,  1063,   562,  -582,   616,   617,   118,  -582,  1048,   563,
-    77,    78,   134,  1184,  -266,    81,    82,   923,   118,  1090,
-  -586,   118,   566,   902,  -586,   902,   902,   902,   375,   376,
-   377,   559,  1099,   899,   307,  -587,   402,  -585,   572,  -587,
-   578,  -585,   992,   118,   118,   992,   581,  1063,  1063,   274,
-   275,   119,   579,   587,   193,   588,  1011,   592,  1011,  1011,
-   860,   861,   862,  1011,   364,   118,   118,   395,  1011,   922,
-   812,   596,   603,   600,   118,   606,   223,  1017,   611,   612,
-   319,   609,   320,  1071,  1072,  1073,   629,   301,   118,   633,
-   634,   636,   644,   647,   650,   652,  1029,   653,   365,   366,
-   367,   368,   369,   370,   371,   372,   373,   374,   655,   992,
-   118,   118,  1063,   658,   668,   675,   670,  1011,   196,   229,
-   229,   673,   681,   685,   686,   780,   191,   776,   783,   744,
-   796,   798,   818,   824,   191,   826,   821,   118,   191,   843,
-   902,   191,   902,   820,   744,   745,   746,   747,   825,   408,
-  1090,   748,   749,   750,   751,   752,   753,   754,  1016,   830,
-   831,  1011,   571,   874,   571,  1023,   873,   875,   879,   882,
-   191,   876,   888,   801,   889,   479,   591,   119,   489,   910,
-   890,   893,   918,   896,   914,   926,   492,   921,   493,   927,
-  1085,   931,   933,   193,   935,   973,   972,   171,   975,   497,
-  1033,  1036,  1069,  1070,   501,   502,   503,   504,   505,   506,
-   507,   508,   509,   510,   511,  1079,   306,   306,   306,   306,
+   550,   575,   118,   125,   525,   284,   118,   211,   211,   211,
+   488,   434,   116,   111,   602,    94,   129,   526,   132,   527,
+   710,   517,   518,   712,   447,   679,   307,   619,   515,   516,
+   675,   621,   722,   417,   204,   519,   520,   521,   522,   990,
+   449,   912,    90,  1009,   914,   205,   600,   552,   409,   523,
+   524,   725,  1138,   413,  1027,   414,   259,   917,   759,   439,
+   628,   608,   808,   921,   428,   206,  -580,   378,   379,   584,
+  -580,   453,   760,  -624,   259,     2,   710,  -624,   641,   712,
+   986,   388,  -622,   118,   986,  -626,  -622,  1112,   722,  -626,
+   987,   823,  1119,  1120,   987,   986,   116,   111,   888,    94,
+   256,   234,   234,   389,   471,   987,   824,   725,   453,   392,
+   261,   262,     2,   898,   386,   387,   118,   395,   235,   235,
+   762,   469,   262,   262,   393,   287,    90,  -398,   677,  -398,
+  -266,   720,   118,   721,   300,   395,   768,  -398,  1052,  1053,
+   783,   616,  1059,   118,  1067,  1069,   299,   771,   211,  1014,
+   121,   122,  1060,  1054,  1084,  1055,   665,  1168,  1121,   395,
+  1122,  -611,   395,   594,   288,  -611,   211,   119,  1039,   995,
+   119,  1056,   378,   379,   135,   204,  1123,  1028,   681,   759,
+   325,   326,   327,   328,   329,   330,   205,   720,  1068,   721,
+   808,   278,   211,   760,   759,   449,   808,   907,   997,   302,
+   211,   668,   211,   667,   211,   539,   206,   211,   760,  1118,
+  1022,   606,  1139,   395,   817,   211,  1131,   596,  1134,   204,
+   211,   499,   211,    77,    78,   134,   646,   204,    81,    82,
+   205,   204,   404,   453,   204,   211,   211,   500,   205,    77,
+   988,   762,   205,    77,   988,   205,   311,   171,   717,  1068,
+   206,   119,   548,   413,    77,   988,   762,   768,   206,   997,
+   718,   719,   206,   204,   312,   206,    97,   906,   771,    97,
+   908,   313,   768,   714,   205,  1097,   118,   241,   242,   118,
+   118,   118,   713,   771,   119,   715,  -398,  -398,  -398,   431,
+   878,  -398,  -398,   118,   206,   716,   434,   801,   314,   118,
+   301,    77,  1061,   975,   717,   879,   446,   664,   234,   316,
+   808,   315,   488,   234,   307,   234,   718,   719,  1066,   195,
+  1021,  1134,  1023,   473,  1093,   235,  1095,   -45,   234,   714,
+   235,  1076,   235,  1077,   470,  1076,   394,  1077,   713,   395,
+   684,   715,   317,   469,   211,   235,   679,    77,  1000,  1078,
+    97,   716,   211,  1078,   211,   693,   817,   694,  -614,  1031,
+   307,   710,  -614,   909,   712,   264,   265,   266,   267,   268,
+   269,   270,   271,   722,   273,   307,   970,   276,  1019,   394,
+   972,  1019,   395,    97,   941,   411,   380,   381,   395,   382,
+   383,   259,   725,   289,   290,   292,   663,  1137,   211,   298,
+   942,   335,  1143,   384,   385,   512,   513,   514,    77,  1000,
+   336,  -398,  -398,  -398,   453,   321,  -398,  -398,  1032,   211,
+   211,  1033,   331,   380,   381,   204,   211,   986,   118,   614,
+  1164,   835,   547,   615,   551,  -615,   205,   987,   118,  -615,
+   118,   560,   118,   547,   119,   470,   337,   436,   438,   440,
+   118,  1172,   300,   118,   868,   869,   206,   118,   338,   411,
+   324,   119,   395,   380,   381,   453,   469,   301,   870,   871,
+   307,  1088,   720,  1115,   721,    77,    78,   134,   386,   387,
+    81,    82,   321,     2,  -398,   677,  -398,   977,   978,   211,
+   967,  -266,   307,   471,  -398,  1019,  -609,  1019,   118,   118,
+  -609,     2,   339,   968,   397,   969,   605,   959,   960,   375,
+   376,   377,   234,   234,   957,   958,   403,   979,   980,   405,
+   425,   961,   962,   963,   964,  -449,   471,   486,   487,   235,
+   235,   981,  -266,   340,   471,   965,   966,   211,   211,  -267,
+  1115,   254,     2,    97,   432,   118,   435,   437,   422,   532,
+   533,  -616,   191,   211,   547,  -616,   211,   211,   633,   389,
+    97,   812,  1111,  1054,   204,  1055,   298,   341,  -398,   321,
+   395,  -398,   547,  -398,   631,   205,   280,   281,   282,   380,
+   381,  1056,   118,  -267,   300,   448,    77,   988,   472,   717,
+   171,  -670,  -398,  -398,  -398,   206,   119,  -398,  -398,  1035,
+   453,   718,   719,   673,   657,   658,   572,   395,   119,   321,
+   119,   833,  -674,   402,   714,  -577,   992,   388,   301,  -577,
+   666,   587,  -671,   713,   995,   592,   715,   211,   211,   395,
+   692,   742,    77,    78,   134,   391,   716,    81,    82,   211,
+   211,   602,   211,   996,  -576,  -266,  1147,   471,  -576,  1029,
+    77,    78,   134,   997,  -600,    81,    82,   118,  -600,   118,
+   468,  1130,  1076,   395,  1077,  -575,   617,   618,   118,  -575,
+   390,   118,   118,   211,   815,  1163,  1121,   307,  1122,   473,
+  1078,   404,   276,    77,    78,   134,  -608,   742,    81,    82,
+  -608,   319,   398,   320,  1123,    97,  -676,   866,   867,   375,
+   376,   377,   565,   812,   568,  1015,   574,    97,  1016,    97,
+   537,  1046,     2,   119,   581,   996,  -673,   298,  -617,   933,
+  1058,  -503,  -617,  1179,   590,   997,   375,   376,   377,   836,
+   837,   838,   839,   840,   841,   399,   598,   191,   395,   472,
+  1081,   604,   882,   406,   432,   191,   380,   381,  -676,   191,
+   301,   471,   191,   407,   395,   489,  1098,  1190,   931,     2,
+   408,  -672,   359,   492,   360,   493,  -398,  -266,   395,   471,
+  1106,  -594,   935,   259,   211,  -594,  1045,     2,  -398,  -398,
+  -398,   191,  -398,  -398,  -398,   361,   362,   861,   862,   863,
+  -599,  -619,  1125,   903,  -599,  -619,   903,   412,   998,   999,
+  -598,  -620,    77,  1000,  -598,  -620,  1001,   382,   383,  -597,
+   418,  1145,    97,  -597,   118,  -596,   815,   382,   383,  -596,
+   259,   384,   385,  1057,   118,   572,   647,   572,   419,   432,
+  -595,   384,   385,   423,  -595,   259,   802,   555,  1016,   592,
+   119,   259,   661,   662,  1124,  -676,  -676,   459,  -612,   298,
+  -676,  -676,  -612,   864,   865,   462,   463,   464,   465,   378,
+   379,    77,    78,   134,   424,  -592,    81,    82,   604,  -592,
+   998,   999,   426,   432,    77,  1000,   459,  -593,  1001,  1146,
+   430,  -593,  1016,   690,   691,  -589,   993,   459,   321,  -589,
+   321,   954,   955,   956,  1012,  -590,    77,    78,   134,  -590,
+   555,    81,    82,  -581,   498,   872,   873,  -581,    77,    78,
+   134,   442,  -584,    81,    82,   779,  -584,   903,   614,   903,
+   903,   903,  1038,   786,   444,   788,    77,    78,   134,   795,
+   796,    81,    82,   924,   800,  1072,  1073,  1074,   590,   813,
+   118,   118,   445,   191,   472,  -266,   318,   603,   450,   555,
+  -604,   543,   303,   461,  -604,   910,   658,   150,   151,   152,
+   153,   154,   155,   467,   321,  -605,  1036,   555,   644,  -605,
+  1025,  1026,   742,   476,   156,   157,   158,   845,   478,   846,
+  -606,  -398,   119,  1050,  -606,   993,   993,  -602,   284,   477,
+  -585,  -602,   930,  1064,  -585,  1012,  1012,  -398,   159,  1049,
+   847,   848,  -583,  -587,  -588,  -586,  -583,  -587,  -588,  -586,
+   395,  1109,  1064,   274,   275,   480,   481,   118,   482,   193,
+   223,   223,  1127,  1128,   483,   484,   541,   490,   545,   118,
+  1091,  1100,   118,   563,   903,   542,   903,   307,   644,   696,
+   168,   544,   560,   549,   900,   562,   564,  -266,   567,   573,
+  1185,   644,   579,   993,   118,   118,   993,   589,  1064,  1064,
+   580,   582,   593,   588,   395,   597,   601,  1012,   612,  1012,
+  1012,   307,   607,   620,  1012,   610,   118,   118,   613,  1012,
+   923,   813,   191,   604,   818,   118,   630,   634,   243,   244,
+   245,   246,   247,   248,   249,   250,   251,   252,   635,   118,
+   637,   645,   648,   651,   653,   659,   654,   656,  1040,  1041,
+   669,    77,   304,   305,   671,   171,   674,   676,   682,   686,
+   993,   118,   118,  1064,   687,   781,   777,   784,  1012,   272,
+   745,   799,   819,   277,   825,   279,   876,   283,   797,   822,
+   821,   465,   285,   826,   827,   831,   832,   844,   118,   875,
+   877,   880,   293,   874,   294,   883,   889,   890,   891,   894,
+   193,  1091,   897,   911,   919,   915,   459,   922,   459,  1017,
+   934,   927,  1012,   928,   697,   932,  1024,  -248,   743,   936,
+   974,   973,   171,   303,   976,   119,  1034,  1037,   150,   151,
+   152,   153,   154,   155,  1070,  1071,   363,   119,  1080,  1087,
+  1103,  1126,  1142,  1104,   193,   156,   157,   158,   200,   232,
+   232,  1124,   193,  1149,  1099,  1152,   193,  1153,  1155,   193,
+  1157,  1158,  1116,  1117,  1160,  1170,  1173,   223,  1162,   159,
+  1174,   828,   223,  1176,   223,  1181,  1183,  1186,  1184,  1187,
+  1192,   306,   834,  1193,  1140,  1141,   452,   223,   193,   253,
+  1003,  1135,  1188,   119,   306,   306,   306,   306,   306,   306,
+  1044,   333,   334,  1175,   791,  1110,  1051,   119,  1165,  1083,
+   650,   168,   939,   576,   896,  1180,   789,   925,   787,   286,
+   474,  1085,   811,   429,    97,   239,  1159,   611,   421,  1166,
+  1167,   364,   485,   538,   829,  1043,   813,     0,  1102,     0,
+     0,     0,     0,   432,     0,     0,  1107,  1108,     0,     0,
+   441,     0,     0,   443,     0,     0,   119,     0,     0,     0,
+     0,   451,     0,     0,   454,   365,   366,   367,   368,   369,
+   370,   371,   372,   373,   374,   196,   229,   229,   479,     0,
+     0,     0,    77,   304,   305,   850,   171,  1144,     0,   200,
+     0,     0,    97,     0,  1148,  1150,     0,     0,     0,   197,
+   230,   230,   497,     0,     0,     0,   813,   501,   502,   503,
+   504,   505,   506,   507,   508,   509,   510,   511,     0,   851,
+   852,   853,   854,   855,   856,   857,   858,   859,   860,     0,
+   940,  1169,     0,   200,     0,     0,     0,     0,   531,     0,
+     0,   200,     0,     0,     0,   200,     0,     0,   200,     0,
+   193,  1177,  1178,     0,     0,    97,   232,   410,  1182,     0,
+     0,   232,     0,   232,     0,   198,   231,   231,     0,     0,
+     0,   223,   223,     0,     0,     0,   232,   200,   546,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   454,     0,
+     0,     0,     0,   561,   745,   746,   747,   748,   566,     0,
+   569,   749,   750,   751,   752,   753,   754,   755,   578,     0,
+   465,     0,   583,   208,   237,   237,   196,     0,     0,   306,
    306,   306,   306,   306,   306,   306,   306,   306,   306,   306,
-   306,   306,  1086,  1098,  1103,   531,   459,  1125,  1141,  1123,
-  1148,   200,   232,   232,   462,   463,   464,   465,  1151,  1152,
-  1154,   197,   230,   230,  1156,  1161,  1157,  1159,  1180,   196,
-   554,  1172,  1169,  1173,  1150,   459,   306,  1175,  1182,  1183,
-  1084,  1185,  1186,    97,  1191,  1192,   459,   253,   452,  1187,
-  1002,  1174,  1134,  1109,  1043,   812,  1050,  1101,   790,  1164,
-  1082,   938,   432,   498,   575,  1106,  1107,   895,  1179,   649,
-   788,   786,   924,   196,   810,   286,   474,   239,   485,   421,
-  1158,   196,   306,   610,   538,   196,   828,   306,   196,   119,
-  1042,     0,   849,   554,     0,     0,   229,   306,     0,   929,
-     0,   229,   191,   229,     0,     0,  1143,     0,     0,     0,
-   543,    97,     0,  1147,  1149,   229,   229,   196,     0,     0,
-     0,     0,     0,     0,  1188,   812,   850,   851,   852,   853,
-   854,   855,   856,   857,   858,   859,     0,     0,     0,   306,
-     0,   306,   554,   622,   624,     0,     0,     0,     0,     0,
-  1168,     0,   200,     0,     0,     0,   198,   231,   231,   554,
-   643,     0,   197,     0,     0,   208,   237,   237,     0,     0,
-  1176,  1177,     0,   318,    97,     0,     0,  1181,     0,   303,
-     0,     0,     0,     0,   150,   151,   152,   153,   154,   155,
-     0,   306,     0,     0,     0,     0,   200,     0,     0,     0,
-     0,   156,   157,   158,   200,     0,   197,     0,   200,     0,
-     0,   200,     0,   306,   197,  1039,  1040,     0,   197,   232,
-   410,   197,     0,   688,   232,   159,   232,     0,     0,   230,
-   643,   695,   619,     0,   230,     0,   230,     0,   232,   232,
-   200,   191,   710,   643,     0,     0,     0,     0,   230,   230,
-   197,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   168,     0,     0,
-     0,   792,     0,     0,     0,     0,   817,     0,     0,   196,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   119,     0,     0,     0,     0,   198,   710,   465,
-     0,   229,     0,     0,   119,     0,   208,  1102,     0,   306,
-   306,   306,   306,   306,   306,   841,   842,     0,     0,     0,
-     0,     0,     0,     0,   459,     0,   459,     0,     0,  1115,
-  1116,     0,   696,     0,     0,     0,   742,     0,    77,   304,
-   305,   198,   171,     0,     0,     0,     0,     0,     0,   198,
-   208,  1139,  1140,   198,     0,     0,   198,     0,   208,     0,
-   119,   494,   208,     0,   231,   208,     0,     0,     0,   231,
-     0,   231,     0,   237,   119,     0,     0,     0,   237,     0,
-   237,     0,     0,   231,   231,   198,     0,     0,     0,   827,
-     0,     0,   237,   237,   208,     0,  1165,  1166,   306,     0,
-   833,   792,   200,     0,   792,     0,     0,     0,     0,   210,
-   238,   238,   197,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,     0,   119,   232,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   230,     0,     0,     0,     0,     0,
-   306,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   936,   497,     0,     0,     0,     0,   942,
-   943,   944,   945,   946,   947,   948,   949,   950,   951,   952,
-     0,   306,   306,   306,   306,   306,   306,   306,   306,   306,
-   306,   306,   306,   306,   306,   306,   306,   306,  -248,   306,
-     0,     0,     0,     0,   303,     0,     0,     0,     0,   150,
-   151,   152,   153,   154,   155,     0,     0,     0,     0,   792,
-   791,  1095,     0,     0,     0,   303,   156,   157,   158,     0,
-   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   156,   157,   158,
-   159,   200,     0,     0,     0,     0,   306,   198,   939,     0,
-   210,   197,     0,     0,     0,     0,   208,     0,     0,     0,
-     0,   159,     0,     0,     0,     0,     0,     0,     0,   231,
-     0,     0,     0,     0,     0,     0,     0,     0,   237,     0,
-     0,     0,   168,   710,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   210,     0,     0,     0,     0,     0,
-     0,     0,   210,   168,     0,     0,   210,     0,     0,   210,
-     0,     0,     0,     0,     0,     0,     0,   238,     0,     0,
-     0,     0,   238,     0,   238,     0,     0,     0,   465,     0,
-     0,     0,     0,     0,     0,   792,   238,   238,   210,     0,
-     0,     0,   303,   495,     0,     0,     0,   150,   151,   152,
-   153,   154,   155,    77,   304,   305,     0,   171,     0,     0,
-     0,     0,     0,     0,   156,   157,   158,     0,     0,     0,
-     0,     0,     0,  1041,    77,   304,   305,     0,   171,     0,
-     0,     0,     0,     0,     0,     0,   198,     0,   159,     0,
-     0,     0,     0,     0,     0,   208,     0,     0,     0,    -1,
-     1,     0,    20,    21,    22,    23,     0,    24,     0,     0,
+   306,   306,   306,   306,   306,     0,     0,     0,     0,     0,
+   197,     0,     0,     0,     0,     0,   210,   238,   238,     0,
+     0,     0,     0,     0,     0,  1042,     0,     0,     0,     0,
+   196,     0,     0,     0,     0,     0,     0,     0,   196,   306,
+     0,     0,   196,     0,     0,   196,     0,     0,     0,     0,
+     0,     0,     0,   229,   197,     0,     0,     0,   229,   193,
+   229,     0,   197,     0,     0,     0,   197,     0,   494,   197,
+     0,     0,     0,   229,   196,     0,   198,   230,     0,     0,
+     0,     0,   230,     0,   230,   306,     0,     0,     0,     0,
+   306,     0,     0,     0,     0,     0,     0,   230,   197,     0,
+   306,     0,     0,     0,     0,     0,     0,     0,     0,   200,
+     0,     0,     0,     0,   454,     0,     0,     0,     0,     0,
+   198,     0,     0,     0,   208,     0,     0,   689,   198,     0,
+   232,   232,   198,   678,     0,   198,     0,     0,   683,     0,
+     0,     0,   306,   231,   306,     0,   623,   625,   231,     0,
+   231,     0,     0,     0,     0,     0,     0,   210,     0,     0,
+     0,     0,     0,   231,   198,   561,     0,   744,   208,     0,
+     0,     0,     0,     0,     0,   793,   208,     0,     0,     0,
+   208,     0,     0,   208,     0,     0,     0,     0,     0,     0,
+     0,   237,     0,     0,     0,   306,   237,     0,   237,     0,
+     0,   210,     0,     0,     0,     0,     0,     0,     0,   210,
+     0,   237,   208,   210,     0,     0,   210,   306,     0,     0,
+     0,     0,     0,     0,   238,     0,     0,     0,     0,   238,
+     0,   238,     0,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   849,     0,   238,   210,   711,     0,   200,     0,
+     0,     0,     0,     0,     0,     0,  -531,   229,   229,     0,
+   197,   343,     0,     0,     0,     0,   150,   151,   152,   153,
+   154,   155,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   230,   230,   156,   157,   158,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   892,   893,     0,
+     0,     0,   711,     0,     0,   793,     0,   159,   793,     0,
+     0,     0,     0,   306,   306,   306,   306,   306,   306,   842,
+   843,     0,    20,    21,    22,    23,   198,    24,     0,   916,
      0,     0,    29,    30,     0,     0,    33,    34,     0,    36,
-    37,    38,    39,  -266,     0,     0,     0,     0,     0,     0,
-   168,     0,     0,     2,    51,    52,     0,     0,     0,     0,
-     0,     0,     0,     0,     3,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   306,    76,
-     0,     0,     0,     0,     0,     0,  -398,  -398,  -398,    80,
-     4,   306,     0,     0,     0,     5,     6,     7,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     8,
-     9,    10,   306,     0,     0,     0,     0,     0,     0,     0,
-   210,    77,   304,   305,     0,   171,     0,     0,    11,    12,
+    37,    38,    39,     0,     0,     0,     0,   231,   231,   168,
+     0,     0,     0,     0,    51,    52,     0,   937,   497,     0,
+     0,     0,     0,   943,   944,   945,   946,   947,   948,   949,
+   950,   951,   952,   953,   208,   196,     0,     0,     0,    76,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    80,
+     0,     0,     0,     0,     0,   237,   237,     0,     0,   197,
+     0,     0,   306,     0,     0,     0,     0,   210,     0,     0,
+     0,     0,     0,   793,     0,     0,     0,     0,     0,     0,
+    77,   304,   305,     0,   171,     0,     0,     0,   238,   238,
+     0,     0,     0,     0,     0,  1018,     0,     0,     0,     0,
+     0,     0,     0,     0,   306,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,  1030,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   306,   306,   306,   306,   306,
+   306,   306,   306,   306,   306,   306,   306,   306,   306,   306,
+   306,   306,     0,   306,     0,     0,     0,     0,     0,    -1,
+     1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   208,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  -266,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     2,     0,     0,     0,     0,     0,   793,
+     0,     0,     0,     0,     3,     0,   210,     0,  1086,     0,
+   306,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,  -398,  -398,  -398,     0,
+     4,     0,     0,     0,     0,     5,     6,     7,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   711,     0,     8,
+     9,    10,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
     13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
-    22,    23,   238,    24,    25,    26,    27,    28,    29,    30,
+    22,    23,  1151,    24,    25,    26,    27,    28,    29,    30,
     31,    32,    33,    34,    35,    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,    -2,     1,     0,     0,
+    71,    72,    73,    74,    75,    76,     0,     0,     0,     0,
      0,     0,    77,    78,    79,    80,     0,    81,    82,    83,
+    -2,     1,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-  -266,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     2,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     3,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   210,
-     0,     0,     0,  -398,  -398,  -398,     0,     4,     0,     0,
-     0,     0,     5,     6,     7,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     8,     9,    10,     0,
+     0,     0,  1189,     0,  -266,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     2,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     3,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    11,    12,    13,     0,    14,
+     0,     0,     0,     0,     0,     0,     0,  -398,  -398,  -398,
+     0,     4,   306,     0,     0,     0,     5,     6,     7,     0,
+     0,     0,     0,     0,     0,   306,     0,     0,     0,     0,
+     8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   306,     0,     0,    11,
+    12,    13,     0,    14,    15,    16,    17,    18,    19,    20,
+    21,    22,    23,     0,    24,    25,    26,    27,    28,    29,
+    30,    31,    32,    33,    34,    35,    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,     0,     0,     0,
+     0,     0,     0,    77,    78,    79,    80,   136,    81,    82,
+    83,     0,   137,   138,   139,     0,   140,   141,   142,   143,
+   144,   145,   146,   147,   148,  -531,   535,     0,     0,     0,
+   149,     0,     0,     0,     0,   150,   151,   152,   153,   154,
+   155,     0,     0,     0,     0,     0,     0,     0,  -266,  -266,
+     0,     3,   156,   157,   158,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  -398,  -398,  -398,   159,     4,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   161,   162,   163,   164,   165,   166,     0,     0,     0,     0,
+     0,     0,     0,     0,   167,    11,    12,    13,   168,    14,
     15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
     24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
     34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
@@ -1532,370 +1560,328 @@ static const short yytable[] = {   118,
     54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
     64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
     74,    75,    76,     0,     0,     0,     0,     0,     0,    77,
-    78,    79,    80,   136,    81,    82,    83,     0,   137,   138,
-   139,     0,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,  -530,   535,     0,     0,     0,   149,     0,     0,     0,
-     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-     0,     0,     0,     0,  -266,  -266,     0,     3,   156,   157,
-   158,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  -398,
-  -398,  -398,   159,     4,     0,     0,     0,     0,     0,     0,
+   169,   536,    80,   171,   172,    82,    83,   136,     0,     0,
+     0,     0,   137,   138,   139,     0,   140,   141,   142,   143,
+   144,   145,   146,   147,   148,  -531,     0,     0,     0,     0,
+   149,     0,     0,     0,     0,   150,   151,   152,   153,   154,
+   155,     0,     0,     0,     0,     0,     0,     0,  -266,  -266,
+     0,     0,   156,   157,   158,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   161,   162,   163,   164,
-   165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
-   167,    11,    12,    13,   168,    14,    15,    16,    17,    18,
-    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
-    28,    29,    30,    31,    32,    33,    34,    35,    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,     0,
-     0,     0,     0,     0,     0,    77,   169,   536,    80,   171,
-   172,    82,    83,   136,     0,     0,     0,     0,   137,   138,
-   139,     0,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,  -530,     0,     0,     0,     0,   149,     0,     0,     0,
-     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-     0,     0,     0,     0,  -266,  -266,     0,     0,   156,   157,
-   158,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  -266,
-  -266,  -266,   159,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,  -266,  -266,  -266,   159,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   161,   162,   163,   164,
-   165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
-   167,  -266,  -266,  -266,   168,  -266,  -266,  -266,  -266,  -266,
-  -266,  -266,  -266,  -266,  -266,     0,  -266,  -266,  -266,  -266,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   161,   162,   163,   164,   165,   166,     0,     0,     0,     0,
+     0,     0,     0,     0,   167,  -266,  -266,  -266,   168,  -266,
+  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,     0,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,     0,
-     0,     0,     0,     0,     0,    77,   169,   170,  -266,   171,
-   172,    82,  -266,   213,     0,     0,     0,     0,   137,   138,
-   139,     0,     0,   214,   142,   143,   144,   145,   146,   147,
-   215,  -530,  -534,     0,     0,     0,   216,     0,     0,     0,
-     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-     0,     0,     0,     0,  -266,  -266,     0,     0,   156,   157,
-   158,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  -266,
-  -266,  -266,   159,     0,     0,     0,     0,     0,     0,     0,
+  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
+  -266,  -266,  -266,     0,     0,     0,     0,     0,     0,    77,
+   169,   170,  -266,   171,   172,    82,  -266,   213,     0,     0,
+     0,     0,   137,   138,   139,     0,     0,   214,   142,   143,
+   144,   145,   146,   147,   215,  -531,  -535,     0,     0,     0,
+   216,     0,     0,     0,     0,   150,   151,   152,   153,   154,
+   155,     0,     0,     0,     0,     0,     0,     0,  -266,  -266,
+     0,     0,   156,   157,   158,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   161,   162,   163,   164,
-   165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
-   167,  -266,  -266,  -266,   168,  -266,  -266,  -266,  -266,  -266,
-  -266,  -266,  -266,  -266,  -266,     0,  -266,  -266,  -266,  -266,
+     0,     0,     0,  -266,  -266,  -266,   159,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   161,   162,   163,   164,   165,   166,     0,     0,     0,     0,
+     0,     0,     0,     0,   167,  -266,  -266,  -266,   168,  -266,
+  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,     0,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
   -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
-  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,     0,
-     0,     0,     0,     0,     0,    77,   169,   170,  -266,   171,
-   217,   218,  -266,   213,     0,     0,     0,     0,   137,   138,
-   139,     0,     0,   214,   142,   143,   144,   145,   146,   147,
-   215,  -476,  -476,     0,     0,     0,   216,  -476,     0,     0,
-     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-     0,     0,     0,     0,  -266,  -266,   136,     0,   156,   157,
-   158,   137,   138,   139,     0,   140,   141,   142,   143,   144,
-   145,   146,   147,   148,  -530,     0,     0,     0,     0,   149,
-     0,     0,   159,     0,   150,   151,   152,   153,   154,   155,
-     0,     0,     0,     0,     0,     0,     0,  -266,  -266,     0,
-     0,   156,   157,   158,     0,  -476,   161,   162,   163,   164,
-   165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
-   167,     0,     0,     0,   168,   159,     0,     0,     0,     0,
+  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,  -266,
+  -266,  -266,  -266,     0,     0,     0,     0,     0,     0,    77,
+   169,   170,  -266,   171,   217,   218,  -266,   213,     0,     0,
+     0,     0,   137,   138,   139,     0,     0,   214,   142,   143,
+   144,   145,   146,   147,   215,  -476,  -476,     0,     0,     0,
+   216,  -476,     0,     0,     0,   150,   151,   152,   153,   154,
+   155,     0,     0,     0,     0,     0,     0,     0,  -266,  -266,
+   136,     0,   156,   157,   158,   137,   138,   139,     0,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,  -531,     0,
+     0,     0,     0,   149,     0,     0,   159,     0,   150,   151,
+   152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
+     0,  -266,  -266,     0,     0,   156,   157,   158,     0,  -476,
+   161,   162,   163,   164,   165,   166,     0,     0,     0,     0,
+     0,     0,     0,     0,   167,     0,     0,     0,   168,   159,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   160,   161,
-   162,   163,   164,   165,   166,     0,     0,     0,     0,     0,
-     0,     0,     0,   167,     0,     0,     0,   168,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   160,   161,   162,   163,   164,   165,   166,     0,
+     0,     0,     0,     0,     0,     0,     0,   167,     0,     0,
+     0,   168,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    77,   169,   170,     0,   171,
-   217,   218,     0,     0,   136,     0,     0,     0,     0,   137,
-   138,   139,     0,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,  -530,     0,     0,     0,     0,   149,     0,     0,
-     0,     0,   150,   151,   152,   153,   154,   155,    77,   169,
-   170,     0,   171,   172,    82,  -266,  -266,   213,     0,   156,
-   157,   158,   137,   138,   139,     0,     0,   214,   142,   143,
-   144,   145,   146,   147,   215,  -530,  -534,     0,     0,     0,
-   216,     0,     0,   159,     0,   150,   151,   152,   153,   154,
-   155,     0,     0,     0,     0,     0,     0,     0,  -266,  -266,
-     0,     0,   156,   157,   158,     0,  -503,   161,   162,   163,
-   164,   165,   166,     0,     0,     0,     0,     0,     0,     0,
-     0,   167,     0,     0,     0,   168,   159,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
+   169,   170,     0,   171,   217,   218,     0,     0,   136,     0,
+     0,     0,     0,   137,   138,   139,     0,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,  -531,     0,     0,     0,
+     0,   149,     0,     0,     0,     0,   150,   151,   152,   153,
+   154,   155,    77,   169,   170,     0,   171,   172,    82,  -266,
+  -266,   213,     0,   156,   157,   158,   137,   138,   139,     0,
+     0,   214,   142,   143,   144,   145,   146,   147,   215,  -531,
+  -535,     0,     0,     0,   216,     0,     0,   159,     0,   150,
+   151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
+     0,     0,  -266,  -266,     0,     0,   156,   157,   158,     0,
+  -504,   161,   162,   163,   164,   165,   166,     0,     0,     0,
+     0,     0,     0,     0,     0,   167,     0,     0,     0,   168,
+   159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  -472,
-   161,   162,   163,   164,   165,   166,     0,     0,     0,     0,
-     0,     0,     0,     0,   167,     0,     0,     0,   168,     0,
+     0,     0,     0,  -472,   161,   162,   163,   164,   165,   166,
+     0,     0,     0,     0,     0,     0,     0,     0,   167,     0,
+     0,     0,   168,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    77,   169,   170,     0,
-   171,   172,    82,     0,     0,   136,     0,     0,     0,     0,
-   137,   138,   139,     0,   140,   141,   142,   143,   144,   145,
-   146,   147,   148,  -530,   625,     0,     0,     0,   149,     0,
-     0,     0,     0,   150,   151,   152,   153,   154,   155,    77,
-   169,   170,     0,   171,   217,   218,  -266,  -266,   213,     0,
-   156,   157,   158,   137,   138,   139,     0,     0,   214,   142,
-   143,   144,   145,   146,   147,   215,  -530,  -534,     0,     0,
-     0,   216,     0,     0,   159,     0,   150,   151,   152,   153,
-   154,   155,     0,     0,     0,     0,     0,     0,     0,  -266,
-  -266,     0,     0,   156,   157,   158,     0,     0,   161,   162,
-   163,   164,   165,   166,     0,     0,     0,     0,     0,     0,
-     0,     0,   167,     0,     0,     0,   168,   159,     0,     0,
+    77,   169,   170,     0,   171,   172,    82,     0,     0,   136,
+     0,     0,     0,     0,   137,   138,   139,     0,   140,   141,
+   142,   143,   144,   145,   146,   147,   148,  -531,   626,     0,
+     0,     0,   149,     0,     0,     0,     0,   150,   151,   152,
+   153,   154,   155,    77,   169,   170,     0,   171,   217,   218,
+  -266,  -266,   213,     0,   156,   157,   158,   137,   138,   139,
+     0,     0,   214,   142,   143,   144,   145,   146,   147,   215,
+  -531,  -535,     0,     0,     0,   216,     0,     0,   159,     0,
+   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
+     0,     0,     0,  -266,  -266,     0,     0,   156,   157,   158,
+     0,     0,   161,   162,   163,   164,   165,   166,     0,     0,
+     0,     0,     0,     0,     0,     0,   167,     0,     0,     0,
+   168,   159,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   161,   162,   163,   164,   165,
+   166,     0,     0,     0,     0,     0,     0,     0,     0,   167,
+     0,     0,     0,   168,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   792,  1096,     0,     0,     0,   303,
+     0,     0,     0,     0,   150,   151,   152,   153,   154,   155,
+     0,    77,   169,   170,     0,   171,   172,    82,     0,     0,
+   136,   156,   157,   158,     0,   137,   138,   139,     0,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,  -531,     0,
+     0,     0,     0,   149,     0,   159,     0,     0,   150,   151,
+   152,   153,   154,   155,    77,   169,   170,     0,   171,   217,
+   218,  -266,  -266,     0,     0,   156,   157,   158,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   161,   162,   163,   164,   165,   166,     0,     0,     0,
-     0,     0,     0,     0,     0,   167,     0,     0,     0,   168,
+     0,     0,     0,     0,     0,     0,     0,   168,     0,   159,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-  -530,     0,     0,     0,     0,   343,     0,     0,     0,     0,
-   150,   151,   152,   153,   154,   155,     0,    77,   169,   170,
-     0,   171,   172,    82,     0,     0,   136,   156,   157,   158,
-     0,   137,   138,   139,     0,   140,   141,   142,   143,   144,
-   145,   146,   147,   148,  -530,     0,     0,     0,     0,   149,
-     0,   159,     0,     0,   150,   151,   152,   153,   154,   155,
-    77,   169,   170,     0,   171,   217,   218,  -266,  -266,     0,
-     0,   156,   157,   158,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   168,     0,   159,     0,     0,     0,     0,
+     0,     0,     0,   161,   162,   163,   164,   165,   166,     0,
+     0,     0,     0,     0,     0,     0,     0,   167,   137,   138,
+   139,   168,   140,   141,   142,   143,   144,   145,   146,   147,
+   215,  -531,   553,     0,     0,     0,   343,     0,     0,     0,
+     0,   150,   151,   152,   153,   154,   155,     0,    77,   304,
+   305,     0,   171,     0,  -266,  -266,     0,     3,   156,   157,
+   158,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   161,
-   162,   163,   164,   165,   166,     0,     0,     0,     0,     0,
-     0,     0,     0,   167,   137,   138,   139,   168,   140,   141,
-   142,   143,   144,   145,   146,   147,   215,  -530,   552,     0,
-     0,     0,   343,     0,     0,     0,     0,   150,   151,   152,
-   153,   154,   155,     0,    77,   304,   305,     0,   171,     0,
-  -266,  -266,     0,     3,   156,   157,   158,     0,     0,     0,
+     0,     0,   159,     4,     0,     0,     0,     0,     0,     0,
+     0,     0,    77,   169,   170,     0,   171,   172,    82,     0,
+     0,     0,     0,     0,     0,     0,   161,   162,   163,   164,
+   165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
+   554,    11,    12,    13,   168,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    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,     0,
+     0,     0,     0,     0,     0,    77,   169,   536,    80,   171,
+   172,    82,    83,   137,   138,   139,     0,   140,   141,   142,
+   143,   144,   145,   146,   147,   215,  -531,   627,     0,     0,
+     0,   343,     0,     0,     0,     0,   150,   151,   152,   153,
+   154,   155,     0,     0,     0,     0,     0,     0,     0,  -266,
+  -266,     0,     3,   156,   157,   158,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   159,     4,
-     0,     0,     0,     0,     0,     0,     0,     0,    77,   169,
-   170,     0,   171,   172,    82,     0,     0,     0,     0,     0,
-     0,     0,   161,   162,   163,   164,   165,   166,     0,     0,
-     0,     0,     0,     0,     0,     0,   553,    11,    12,    13,
-   168,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,     0,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    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,     0,     0,     0,     0,     0,
-     0,    77,   169,   536,    80,   171,   172,    82,    83,   137,
-   138,   139,     0,   140,   141,   142,   143,   144,   145,   146,
-   147,   215,  -530,   626,     0,     0,     0,   343,     0,     0,
-     0,     0,   150,   151,   152,   153,   154,   155,     0,     0,
-     0,     0,     0,     0,     0,  -266,  -266,     0,     3,   156,
-   157,   158,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   159,     4,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   159,     4,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   161,   162,   163,
-   164,   165,   166,     0,     0,     0,     0,     0,     0,     0,
-     0,   167,    11,    12,    13,   168,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,     0,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    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,
-     0,     0,     0,     0,     0,     0,    77,   169,   536,    80,
-   171,   172,    82,    83,   137,   138,   139,     0,   140,   141,
-   142,   143,   144,   145,   146,   147,   215,  -530,   638,     0,
-     0,     0,   343,     0,     0,     0,     0,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,     0,     0,     0,     0,
-  -266,  -266,     0,     3,   156,   157,   158,     0,     0,     0,
+     0,   161,   162,   163,   164,   165,   166,     0,     0,     0,
+     0,     0,     0,     0,     0,   167,    11,    12,    13,   168,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+    33,    34,    35,    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,     0,     0,     0,     0,     0,     0,
+    77,   169,   536,    80,   171,   172,    82,    83,   137,   138,
+   139,     0,   140,   141,   142,   143,   144,   145,   146,   147,
+   215,  -531,   639,     0,     0,     0,   343,     0,     0,     0,
+     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
+     0,     0,     0,     0,  -266,  -266,     0,     3,   156,   157,
+   158,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   159,     4,
+     0,     0,   159,     4,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   161,   162,   163,   164,
+   165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
+   640,    11,    12,    13,   168,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    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,     0,
+     0,     0,     0,     0,     0,    77,   169,   536,    80,   171,
+   172,    82,    83,   137,   138,   139,     0,   140,   141,   142,
+   143,   144,   145,   146,   147,   215,  -531,   638,     0,     0,
+     0,   343,     0,     0,     0,     0,   150,   151,   152,   153,
+   154,   155,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   156,   157,   158,   137,   138,   139,     0,
+   140,   141,   142,   143,   144,   145,   146,   147,   215,  -531,
+   642,     0,     0,     0,   343,     0,     0,   159,     0,   150,
+   151,   152,   153,   154,   155,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   156,   157,   158,     0,
+     0,   161,   162,   163,   164,   165,   166,     0,     0,     0,
+     0,     0,     0,     0,     0,   167,     0,     0,     0,   168,
+   159,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   161,   162,   163,   164,   165,   166,     0,     0,
-     0,     0,     0,     0,     0,     0,   639,    11,    12,    13,
-   168,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,     0,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    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,     0,     0,     0,     0,     0,
-     0,    77,   169,   536,    80,   171,   172,    82,    83,   137,
-   138,   139,     0,   140,   141,   142,   143,   144,   145,   146,
-   147,   215,  -530,   637,     0,     0,     0,   343,     0,     0,
+     0,     0,     0,     0,   161,   162,   163,   164,   165,   166,
+     0,     0,     0,     0,     0,     0,     0,     0,   643,   137,
+   138,   139,   168,   140,   141,   142,   143,   144,   145,   146,
+   147,   215,  -531,   695,     0,     0,     0,   343,     0,     0,
      0,     0,   150,   151,   152,   153,   154,   155,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   156,
+    77,   169,   170,     0,   171,   172,    82,     0,     0,   156,
    157,   158,   137,   138,   139,     0,   140,   141,   142,   143,
-   144,   145,   146,   147,   215,  -530,   641,     0,     0,     0,
+   144,   145,   146,   147,   215,  -531,   773,     0,     0,     0,
    343,     0,     0,   159,     0,   150,   151,   152,   153,   154,
-   155,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   155,     0,     0,    77,   169,   170,     0,   171,   172,    82,
      0,     0,   156,   157,   158,     0,     0,   161,   162,   163,
    164,   165,   166,     0,     0,     0,     0,     0,     0,     0,
      0,   167,     0,     0,     0,   168,   159,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    161,   162,   163,   164,   165,   166,     0,     0,     0,     0,
-     0,     0,     0,     0,   642,   137,   138,   139,   168,   140,
-   141,   142,   143,   144,   145,   146,   147,   215,  -530,   694,
+     0,     0,     0,     0,   167,   137,   138,   139,   168,   140,
+   141,   142,   143,   144,   145,   146,   147,   215,  -531,   774,
      0,     0,     0,   343,     0,     0,     0,     0,   150,   151,
    152,   153,   154,   155,     0,     0,    77,   169,   170,     0,
    171,   172,    82,     0,     0,   156,   157,   158,   137,   138,
    139,     0,   140,   141,   142,   143,   144,   145,   146,   147,
-   215,  -530,   772,     0,     0,     0,   343,     0,     0,   159,
+   215,  -531,   776,     0,     0,     0,   343,     0,     0,   159,
      0,   150,   151,   152,   153,   154,   155,     0,     0,    77,
    169,   170,     0,   171,   172,    82,     0,     0,   156,   157,
    158,     0,     0,   161,   162,   163,   164,   165,   166,     0,
-     0,     0,     0,     0,     0,     0,     0,   167,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   775,     0,     0,
      0,   168,   159,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   161,   162,   163,   164,
    165,   166,     0,     0,     0,     0,     0,     0,     0,     0,
    167,   137,   138,   139,   168,   140,   141,   142,   143,   144,
-   145,   146,   147,   215,  -530,   773,     0,     0,     0,   343,
+   145,   146,   147,   215,  -531,   899,     0,     0,     0,   343,
      0,     0,     0,     0,   150,   151,   152,   153,   154,   155,
      0,     0,    77,   169,   170,     0,   171,   172,    82,     0,
      0,   156,   157,   158,   137,   138,   139,     0,   140,   141,
-   142,   143,   144,   145,   146,   147,   215,  -530,   775,     0,
+   142,   143,   144,   145,   146,   147,   215,  -531,     0,     0,
      0,     0,   343,     0,     0,   159,     0,   150,   151,   152,
    153,   154,   155,     0,     0,    77,   169,   170,     0,   171,
    172,    82,     0,     0,   156,   157,   158,     0,     0,   161,
    162,   163,   164,   165,   166,     0,     0,     0,     0,     0,
-     0,     0,     0,   774,     0,     0,     0,   168,   159,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   161,   162,   163,   164,   165,   166,     0,     0,
-     0,     0,     0,     0,     0,     0,   167,   137,   138,   139,
-   168,   140,   141,   142,   143,   144,   145,   146,   147,   215,
-  -530,   898,     0,     0,     0,   343,     0,     0,     0,     0,
-   150,   151,   152,   153,   154,   155,     0,     0,    77,   169,
-   170,     0,   171,   172,    82,     0,     0,   156,   157,   158,
-   137,   138,   139,     0,   140,   141,   142,   143,   144,   145,
-   146,   147,   215,  -530,     0,     0,     0,     0,   343,     0,
-     0,   159,     0,   150,   151,   152,   153,   154,   155,     0,
-     0,    77,   169,   170,     0,   171,   172,    82,     0,     0,
-   156,   157,   158,     0,     0,   161,   162,   163,   164,   165,
-   166,     0,     0,     0,     0,     0,     0,     0,     0,   167,
-     0,     0,     0,   168,   159,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   161,   162,
-   163,   164,   165,   166,  -132,     0,     0,     0,     0,  -132,
-     0,     0,   167,     0,     0,     0,   168,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     3,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    77,   169,   170,     0,   171,   172,
-    82,     0,     0,     0,     0,     0,     4,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  -533,     0,     0,     0,    77,   169,   170,
-     0,   171,   172,    82,    11,    12,    13,     0,    14,    15,
-    16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
-    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-    35,    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,     0,     0,     0,     0,     0,     0,     0,     0,
-   131,    80,    11,    12,    13,    83,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,     0,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    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,
-  -673,     0,     0,     0,     0,     0,     0,     0,   131,    80,
-     0,     0,     0,    83,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   167,     0,     0,     0,   168,   159,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,  -675,  -675,  -675,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,  -675,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  -675,  -675,  -675,
-     0,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,
-  -675,     0,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,
-  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,
-  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,
-  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,
-  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,  -675,
-  -675,  -675,  -675,  -675,  -675,     0,     0,     0,     0,     0,
-   791,     0,     0,     0,  -675,   303,     0,     0,  -675,     0,
-   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   156,   157,   158,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   159,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,  -266,     0,     0,     0,     0,     0,
-     0,     0,     0,   168,     2,   303,     0,     0,   598,     0,
-   150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   156,   157,   158,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   159,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   161,   162,   163,   164,   165,   166,  -132,     0,
+     0,     0,     0,  -132,     0,     0,   167,     0,     0,     0,
+   168,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     3,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    77,   169,
+   170,     0,   171,   172,    82,     0,     0,     0,     0,     0,
+     4,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    77,   304,   305,     0,   171,    11,
-    12,    13,     0,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,   168,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    33,    34,    35,    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,     0,     0,     0,
-     0,     0,     0,    77,    78,    79,    80,     0,    81,    82,
-    83,     0,     0,     0,    77,   304,   305,   303,   171,     0,
-   679,     0,   150,   151,   152,   153,   154,   155,   303,   937,
-     0,     0,     0,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,     0,     0,     0,     0,     0,     0,   303,  -248,
-   156,   157,   158,   150,   151,   152,   153,   154,   155,     0,
-     0,     0,     0,   159,     0,     0,     0,     0,     0,     0,
-   156,   157,   158,   303,   159,     0,     0,     0,   150,   151,
-   152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   159,   156,   157,   158,     0,     0,
-     0,     0,   332,     0,     0,   168,     0,   150,   151,   152,
-   153,   154,   155,     0,     0,     0,   168,     0,     0,   159,
-     0,     0,   621,     0,   156,   157,   158,   150,   151,   152,
-   153,   154,   155,   623,     0,     0,   168,     0,   150,   151,
-   152,   153,   154,   155,   156,   157,   158,     0,   159,     0,
-     0,     0,     0,     0,     0,   156,   157,   158,     0,     0,
-     0,   168,     0,     0,     0,     0,     0,     0,   159,     0,
-     0,     0,     0,     0,     0,     0,    77,   304,   305,   159,
-   171,     0,     0,     0,     0,     0,     0,    77,   304,   305,
-   168,   171,   697,     0,     0,     0,     0,   698,   699,   700,
-   701,   702,   703,     0,     0,     0,     0,    77,   304,   305,
-   168,   171,     0,     0,   156,   704,   705,     0,     0,     0,
-     0,   168,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    77,   304,   305,     0,   171,     0,   706,     0,
+     0,     0,     0,     0,     0,     0,     0,  -534,     0,     0,
+     0,    77,   169,   170,     0,   171,   172,    82,    11,    12,
+    13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
+    22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    33,    34,    35,    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,     0,     0,     0,     0,
+     0,     0,     0,     0,   131,    80,    11,    12,    13,    83,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+    33,    34,    35,    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,  -674,     0,     0,     0,     0,     0,
+     0,     0,   131,    80,     0,     0,     0,    83,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    77,   304,   305,     0,   171,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  -676,
+  -676,  -676,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  -676,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   168,    77,   304,   305,     0,   171,     0,     0,     0,  -192,
-  -192,     0,    77,   304,   305,     0,   171,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,  -676,  -676,  -676,     0,  -676,  -676,  -676,  -676,  -676,
+  -676,  -676,  -676,  -676,  -676,     0,  -676,  -676,  -676,  -676,
+  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,
+  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,
+  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,
+  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,
+  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,  -676,     0,
+     0,     0,     0,     0,   792,     0,     0,     0,  -676,   303,
+     0,     0,  -676,     0,   150,   151,   152,   153,   154,   155,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   156,   157,   158,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   159,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    77,   707,   708,     0,   171,    11,    12,    13,     0,
-    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-    33,    34,    35,    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,     3,     0,     0,     0,     0,     0,
-     0,     0,   131,    80,     0,     0,     0,    83,     0,     0,
-     0,     0,     0,     0,     0,     0,  -398,  -398,  -398,     0,
-     4,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  -266,     0,
+     0,     0,     0,     0,     0,     0,     0,   168,     2,   303,
+   495,     0,     0,     0,   150,   151,   152,   153,   154,   155,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   156,   157,   158,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    11,    12,
-    13,     0,    14,    15,    16,    17,    18,    19,    20,    21,
-    22,    23,     0,    24,    25,    26,    27,    28,    29,    30,
-    31,    32,    33,    34,    35,    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,     3,     0,     0,     0,
-     0,     0,     0,     0,   131,    80,     0,     0,     0,    83,
+     0,     0,     0,     0,     0,   159,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     4,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    77,   304,
+   305,     0,   171,    11,    12,    13,     0,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,   168,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    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,     0,     0,     0,     0,     0,     0,    77,    78,    79,
+    80,     0,    81,    82,    83,     0,     0,     0,    77,   304,
+   305,   303,   171,     0,   599,     0,   150,   151,   152,   153,
+   154,   155,   303,     0,     0,   680,     0,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,     0,     0,     0,     0,
+     0,     0,   303,   938,   156,   157,   158,   150,   151,   152,
+   153,   154,   155,     0,     0,     0,     0,   159,     0,     0,
+     0,     0,     0,     0,   156,   157,   158,     0,   159,   303,
+  -248,     0,     0,     0,   150,   151,   152,   153,   154,   155,
+     0,     0,     0,     0,     0,     0,     0,     0,   159,     0,
+     0,   156,   157,   158,     0,     0,   303,     0,     0,   168,
+     0,   150,   151,   152,   153,   154,   155,     0,     0,     0,
+   168,     0,     0,     0,     0,   159,   332,     0,   156,   157,
+   158,   150,   151,   152,   153,   154,   155,   622,     0,     0,
+   168,     0,   150,   151,   152,   153,   154,   155,   156,   157,
+   158,     0,   159,     0,     0,     0,     0,     0,     0,   156,
+   157,   158,     0,     0,     0,     0,     0,   168,     0,     0,
+     0,     0,   159,     0,     0,     0,     0,     0,     0,     0,
+    77,   304,   305,   159,   171,     0,     0,     0,     0,     0,
+     0,    77,   304,   305,   168,   171,     0,     0,     0,     0,
+   624,     0,     0,     0,     0,   150,   151,   152,   153,   154,
+   155,    77,   304,   305,   168,   171,     0,     0,     0,     0,
+     0,     0,   156,   157,   158,   168,   698,     0,     0,     0,
+     0,   699,   700,   701,   702,   703,   704,     0,    77,   304,
+   305,     0,   171,     0,     0,     0,   159,     0,   156,   705,
+   706,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    77,   304,   305,     0,   171,
+     0,     0,   707,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    77,   304,   305,   168,   171,
+     0,     0,     0,     0,     0,     0,    77,   304,   305,     0,
+   171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   168,     0,     0,     0,     0,     0,
+     0,     0,     0,  -192,  -192,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
+   304,   305,     0,   171,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    77,   708,   709,     0,   171,
     11,    12,    13,     0,    14,    15,    16,    17,    18,    19,
     20,    21,    22,    23,     0,    24,    25,    26,    27,    28,
     29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
@@ -1903,9 +1889,9 @@ static const short yytable[] = {   118,
     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,     3,     0,
-     0,     0,     0,     0,    77,  1046,   131,    80,     0,     0,
+     0,     0,     0,     0,     0,     0,   131,    80,     0,     0,
      0,    83,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     4,     0,     0,     0,     0,     0,
+  -398,  -398,  -398,     0,     4,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1916,261 +1902,313 @@ static const short yytable[] = {   118,
     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,
-  -398,  -398,  -398,     0,     0,     0,     0,     0,   131,    80,
+     3,     0,     0,     0,     0,     0,     0,     0,   131,    80,
      0,     0,     0,    83,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     4,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    11,    12,    13,     0,    14,    15,    16,    17,
-    18,    19,    20,    21,    22,    23,     0,    24,    25,    26,
-    27,    28,    29,    30,    31,    32,    33,    34,    35,    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,
-     8,     9,    10,     0,     0,     0,     0,     0,   131,    80,
-     0,     0,     0,    83,     0,     0,     0,     0,     0,    11,
-    12,    13,     0,    14,    15,    16,    17,    18,    19,    20,
-    21,    22,    23,     0,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    33,    34,    35,    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,     0,     0,     0,
-     0,     0,     0,     0,     0,   131,    80,    11,    12,    13,
-    83,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-    23,     0,    24,    25,    26,    27,    28,    29,    30,    31,
-    32,    33,    34,    35,    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,     0,     0,     0,     0,     0,
-     0,     0,     0,   131,    80,     0,     0,     0,    83
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    11,    12,    13,     0,    14,    15,
+    16,    17,    18,    19,    20,    21,    22,    23,     0,    24,
+    25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+    35,    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,     3,     0,     0,     0,     0,     0,    77,  1047,
+   131,    80,     0,     0,     0,    83,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     4,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    11,    12,    13,     0,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+    33,    34,    35,    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,  -398,  -398,  -398,     0,     0,     0,
+     0,     0,   131,    80,     0,     0,     0,    83,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    11,    12,    13,     0,
+    14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+     0,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+    33,    34,    35,    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,     8,     9,    10,     0,     0,     0,
+     0,     0,   131,    80,     0,     0,     0,    83,     0,     0,
+     0,     0,     0,    11,    12,    13,     0,    14,    15,    16,
+    17,    18,    19,    20,    21,    22,    23,     0,    24,    25,
+    26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+    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,     0,     0,     0,     0,     0,     0,     0,     0,   131,
+    80,    11,    12,    13,    83,    14,    15,    16,    17,    18,
+    19,    20,    21,    22,    23,     0,    24,    25,    26,    27,
+    28,    29,    30,    31,    32,    33,    34,    35,    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,     0,
+     0,     0,     0,     0,     0,     0,     0,   131,    80,     0,
+     0,     0,    83
 };
 
 static const short yycheck[] = {     0,
-   137,   295,     3,   441,   117,   388,     7,     8,     9,    10,
-   343,   596,     0,   425,   631,     2,   530,   278,   378,   379,
-   473,   380,   381,   389,   382,   383,   384,   385,   528,    19,
-    21,   227,   631,     8,    25,     0,   791,   631,   631,   794,
-    18,    27,   386,   387,   216,   451,    24,   906,   539,   221,
-   654,   223,   797,     5,   390,   669,    34,   886,   803,   471,
-   600,   635,   258,   235,   913,   556,   297,     0,   894,   426,
-   687,     5,    24,    28,   486,  1058,  1059,    34,    21,    87,
-    88,    21,    34,    84,    27,    24,     5,    27,   687,    44,
-    24,    25,    26,   687,   687,    34,    84,     8,    22,    21,
-    34,    19,    26,    25,    28,    28,    25,    86,    24,   117,
-   118,     9,    10,    49,    50,    24,   117,   631,    34,    84,
-    44,    44,    21,   131,    41,    34,    25,    49,    50,     5,
-     0,   631,   133,     3,    21,     5,    18,   124,    25,    56,
-  1123,   681,    29,   144,   899,    41,   133,   756,   149,    25,
-    18,    84,   109,   110,    53,    54,   985,   986,    32,    33,
-    56,  1020,   771,  1022,  1013,    24,   167,    21,   580,   995,
-   996,    25,   917,   687,   149,    21,   582,   781,     9,    10,
-   784,    18,   756,   797,    21,    39,    24,   687,    25,   803,
-   602,   782,   193,   183,   184,   185,   187,   771,   188,   189,
-   201,   187,   203,   399,   205,   183,   184,   208,   150,   151,
-   152,   153,   154,   155,    84,   216,     8,   478,   193,   672,
-   221,   452,   223,    24,   581,   558,   201,  1056,    98,    26,
-   205,   183,   184,   208,   235,   236,   237,    34,   149,   109,
-   110,  1067,    18,  1069,   183,   184,    21,    23,   631,   421,
-    25,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,   635,   237,   133,    24,   631,     0,   183,   184,     3,
-  1025,   631,   631,   631,   183,   184,   277,    11,    12,   280,
-   281,   282,   193,   577,   883,    24,    21,   631,   425,   277,
-    25,     5,   107,   294,   205,   631,   111,   208,   113,   300,
-   115,   562,    24,   917,   687,   120,   294,   183,   184,   185,
-    18,   644,   188,   189,   905,   130,   907,   132,   216,    18,
-    21,   687,    21,   221,    25,   223,   237,   687,   687,   687,
-    22,    32,    33,   995,   471,   322,    18,   235,   236,    21,
-   925,    23,    34,   687,   345,   606,  1172,   635,    18,   486,
-    84,   687,   353,    18,   355,   972,    21,   149,   635,   174,
-   621,   814,   623,    24,   878,    99,   100,   101,   102,   103,
-   104,   105,   106,   972,   108,   787,   876,   111,   972,   972,
-   635,   921,   756,   117,    18,   216,    24,    21,    26,    16,
-   221,    25,   223,   127,   128,   129,    34,   771,   399,   133,
-     8,   193,    21,    16,   235,   236,    25,   903,    18,   201,
-   906,    21,  1074,   205,    21,   149,   208,  1079,    25,    24,
-   421,    26,   156,    21,   399,    16,   427,    25,   429,    34,
-    49,    50,    16,   375,   376,   377,   697,    26,   439,    28,
-   441,   429,   443,   580,    21,   237,   261,    15,    25,    99,
-   451,   321,   417,   454,  1053,    44,    29,   458,   972,    25,
-    26,    22,    28,   428,   451,   602,  1128,    22,   756,   183,
-   184,   185,   972,   288,   188,   189,   291,    21,    44,   756,
-    22,    25,   216,   771,   299,     5,    39,   302,   399,   490,
-   873,   183,   184,   185,   771,    40,   188,   189,   499,   500,
-     5,   756,    19,   863,   864,    25,   865,   866,   874,   867,
-   868,   869,   870,    53,    54,     0,   771,    26,     3,    28,
-   254,  1120,     7,   421,  1020,    21,  1022,   871,   872,    25,
-    25,    26,    21,    28,   476,    44,    25,   538,   539,   875,
-    24,   149,    26,   277,   278,   546,   280,   281,     5,    44,
-    37,    38,   553,    49,    50,   556,   557,    21,   546,   672,
-   294,    25,   432,   538,    51,    52,   300,    24,    26,   303,
-    28,    21,    21,    55,   539,    25,    25,    34,   183,   184,
-   185,   582,    93,   188,   189,   193,    44,    93,   322,   972,
-   421,   556,   886,   201,    24,   582,    26,   205,   931,    84,
-   208,   416,    18,    22,    21,    21,   972,   399,    25,   343,
-    22,   426,   972,   972,   972,   187,   431,    25,    25,    26,
-    28,   436,    24,   438,     5,   919,   627,   628,   972,   237,
-   631,   446,   117,    21,    93,   450,   972,    25,   639,   640,
-    24,   642,    26,    24,    25,    26,  1099,  1085,   133,    18,
-   787,    34,    21,    34,    18,    22,   657,    21,   659,   144,
-    19,    49,    50,   183,   184,   185,    20,   668,   188,   189,
-   671,   672,   673,     8,     9,    10,    42,    43,   183,   184,
-   185,    26,   416,   188,   189,   672,   687,   981,    18,    34,
-   677,    21,   829,    21,    21,   429,   990,    25,    25,    93,
-    34,   814,   436,    86,   438,    24,   440,   441,    27,   443,
-    25,    26,    24,    28,   448,    34,  1010,   451,    24,   589,
-    26,    21,   179,   180,   458,    25,   183,   184,    18,    44,
-   187,    21,  1026,     6,     7,  1147,   470,    37,    38,   473,
-    27,   475,    18,    21,   478,    24,   538,    25,    27,    21,
-    21,    51,    52,    25,    25,    34,   698,   699,   700,   701,
-   702,   703,    18,    21,    18,    21,   581,    25,  1062,  1181,
-    21,    20,    21,   774,    25,  1036,   183,   184,   185,    37,
-    38,   188,   189,    18,    21,   600,    24,  1081,    25,    23,
-   605,   399,   277,    51,    52,   280,   281,   282,    21,    22,
-   183,   184,   183,   184,   185,   188,   189,   188,   189,   294,
-    32,    33,   546,   814,   149,   300,    22,   632,    21,   634,
-    24,    18,    25,   824,    25,   559,    25,   814,   562,    24,
-    34,    18,    21,    24,    18,    26,    25,    28,   183,   184,
-   185,   575,   576,   188,   189,    34,    35,    36,   582,   183,
-   184,   185,    18,    44,   188,   189,    47,    48,   193,    49,
-    50,    24,    24,    26,   183,   184,   201,   601,   187,     9,
-   205,    34,   606,   208,    21,    21,    37,    38,    25,    25,
-    21,   216,   616,   617,    25,   886,   221,   621,   223,   623,
-    51,    52,    21,   894,   709,    21,    25,    53,    54,    25,
-   235,   236,   237,    18,   183,   184,    32,    33,   187,   779,
-    18,    24,   782,    26,   648,    28,    19,    21,   860,   861,
-   862,    25,   656,    21,   658,    20,    21,    25,   662,   663,
-   538,    44,    21,   667,    47,    48,    25,   671,   672,   940,
-   941,    20,    21,   677,   429,    34,    35,    36,    21,   764,
-   765,     8,    25,    21,   439,    11,   441,    25,   443,   183,
-   184,   185,    25,   697,   188,   189,   451,    89,    21,   454,
-    21,   972,    25,   458,    25,   179,   180,    21,    22,   183,
-   184,   796,   983,   187,   985,   986,  1099,    21,   137,    32,
-    33,    25,   993,   935,   995,   996,    21,    67,    68,    69,
-    25,   150,   151,   152,   153,   154,   155,    11,   157,   158,
-  1147,  1012,    21,    21,   499,   500,  1017,    25,   983,    19,
-   183,   184,   185,  1160,    19,   188,   189,   190,  1029,  1017,
-    21,  1032,    19,   903,    25,   905,   906,   907,    34,    35,
-    36,  1029,  1029,   777,  1181,    21,   203,    21,    19,    25,
-    89,    25,  1053,  1054,  1055,  1056,    24,  1058,  1059,   109,
-   110,   546,    27,    25,   399,    21,  1067,    22,  1069,  1070,
-    34,    35,    36,  1074,    23,  1076,  1077,    21,  1079,   813,
-   814,    18,   816,    24,  1085,    21,   421,   902,    11,    24,
-   147,    25,   149,    51,    52,    53,    24,   582,  1099,    24,
-    27,    25,    24,    23,    20,    19,   921,    20,    57,    58,
-    59,    60,    61,    62,    63,    64,    65,    66,    19,  1120,
-  1121,  1122,  1123,    23,    21,    27,     5,  1128,     8,     9,
-    10,    25,    24,    22,    24,    20,   193,    25,    20,    72,
-    27,    25,    18,    21,   201,    22,    27,  1148,   205,    24,
-  1020,   208,  1022,    25,    72,    73,    74,    75,    25,   216,
-  1148,    79,    80,    81,    82,    83,    84,    85,   902,    25,
-    25,  1172,   657,    39,   659,   909,    29,    40,    25,   184,
-   237,    55,    89,   668,    89,   335,   671,   672,   345,    18,
-    89,    89,    25,    89,    89,    25,   353,    24,   355,    25,
-  1015,    25,    18,   538,    25,    18,    21,   187,    40,   359,
-    18,    21,    23,   182,   364,   365,   366,   367,   368,   369,
-   370,   371,   372,   373,   374,    24,   375,   376,   377,   378,
-   379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
-   389,   390,    18,    89,   189,   395,   303,    22,    22,    21,
-    21,     8,     9,    10,   311,   312,   313,   314,    22,    20,
-    20,     8,     9,    10,    89,    27,    25,    25,    18,   149,
-   427,    40,   191,    27,  1089,   332,   425,    25,    20,    20,
-  1014,    27,    25,  1017,     0,     0,   343,    84,   300,  1172,
-   894,  1141,  1070,  1044,   975,  1029,   984,  1031,   660,  1120,
-  1012,   844,  1036,   360,   443,  1039,  1040,   769,  1148,   562,
-   659,   657,   814,   193,   671,   124,   322,    10,   341,   236,
-  1104,   201,   471,   490,   399,   205,   687,   476,   208,   814,
-   972,    -1,    23,   490,    -1,    -1,   216,   486,    -1,   824,
-    -1,   221,   399,   223,    -1,    -1,  1080,    -1,    -1,    -1,
-   407,  1085,    -1,  1087,  1088,   235,   236,   237,    -1,    -1,
-    -1,    -1,    -1,    -1,  1179,  1099,    57,    58,    59,    60,
-    61,    62,    63,    64,    65,    66,    -1,    -1,    -1,   528,
-    -1,   530,   539,   532,   533,    -1,    -1,    -1,    -1,    -1,
-  1124,    -1,   149,    -1,    -1,    -1,     8,     9,    10,   556,
-   557,    -1,   149,    -1,    -1,     8,     9,    10,    -1,    -1,
-  1144,  1145,    -1,    18,  1148,    -1,    -1,  1151,    -1,    24,
-    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
-    -1,   580,    -1,    -1,    -1,    -1,   193,    -1,    -1,    -1,
-    -1,    46,    47,    48,   201,    -1,   193,    -1,   205,    -1,
-    -1,   208,    -1,   602,   201,   940,   941,    -1,   205,   216,
-   217,   208,    -1,   613,   221,    70,   223,    -1,    -1,   216,
-   627,   628,   529,    -1,   221,    -1,   223,    -1,   235,   236,
-   237,   538,   631,   640,    -1,    -1,    -1,    -1,   235,   236,
-   237,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,
-    -1,   661,    -1,    -1,    -1,    -1,   673,    -1,    -1,   399,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1017,    -1,    -1,    -1,    -1,   149,   687,   596,
-    -1,   421,    -1,    -1,  1029,    -1,   149,  1032,    -1,   698,
-   699,   700,   701,   702,   703,   704,   705,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   621,    -1,   623,    -1,    -1,  1054,
-  1055,    -1,   629,    -1,    -1,    -1,   633,    -1,   183,   184,
-   185,   193,   187,    -1,    -1,    -1,    -1,    -1,    -1,   201,
-   193,  1076,  1077,   205,    -1,    -1,   208,    -1,   201,    -1,
-  1085,   358,   205,    -1,   216,   208,    -1,    -1,    -1,   221,
-    -1,   223,    -1,   216,  1099,    -1,    -1,    -1,   221,    -1,
-   223,    -1,    -1,   235,   236,   237,    -1,    -1,    -1,   686,
-    -1,    -1,   235,   236,   237,    -1,  1121,  1122,   787,    -1,
-   697,   791,   399,    -1,   794,    -1,    -1,    -1,    -1,     8,
-     9,    10,   399,    -1,    -1,    -1,    -1,    -1,   538,    -1,
-    -1,    -1,    -1,  1148,   421,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   421,    -1,    -1,    -1,    -1,    -1,
-   829,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   843,   844,    -1,    -1,    -1,    -1,   849,
-   850,   851,   852,   853,   854,   855,   856,   857,   858,   859,
-    -1,   860,   861,   862,   863,   864,   865,   866,   867,   868,
-   869,   870,   871,   872,   873,   874,   875,   876,    18,   878,
-    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,
-    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,   899,
-    19,    20,    -1,    -1,    -1,    24,    46,    47,    48,    -1,
-    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-    70,   538,    -1,    -1,    -1,    -1,   935,   399,   845,    -1,
-   149,   538,    -1,    -1,    -1,    -1,   399,    -1,    -1,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   421,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   421,    -1,
-    -1,    -1,   112,   972,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   193,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   201,   112,    -1,    -1,   205,    -1,    -1,   208,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   216,    -1,    -1,
-    -1,    -1,   221,    -1,   223,    -1,    -1,    -1,   925,    -1,
-    -1,    -1,    -1,    -1,    -1,  1025,   235,   236,   237,    -1,
-    -1,    -1,    24,    25,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    34,   183,   184,   185,    -1,   187,    -1,    -1,
-    -1,    -1,    -1,    -1,    46,    47,    48,    -1,    -1,    -1,
-    -1,    -1,    -1,   970,   183,   184,   185,    -1,   187,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   538,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,   538,    -1,    -1,    -1,     0,
-     1,    -1,   119,   120,   121,   122,    -1,   124,    -1,    -1,
+   425,   441,     3,     2,   388,   117,     7,     8,     9,    10,
+   343,   278,     0,     0,   473,     0,     3,   389,     5,   390,
+   632,   380,   381,   632,   295,   601,   137,   528,   378,   379,
+   597,   530,   632,   227,     8,   382,   383,   384,   385,   887,
+   297,   792,     0,   895,   795,     8,   471,   426,   216,   386,
+   387,   632,    27,   221,   914,   223,    18,   798,   636,    19,
+   539,   486,   670,   804,   258,     8,    21,    32,    33,   451,
+    25,     5,   636,    21,    18,    34,   688,    25,   557,   688,
+    24,    29,    21,    84,    24,    21,    25,    27,   688,    25,
+    34,    25,  1059,  1060,    34,    24,    84,    84,   757,    84,
+    19,     9,    10,    39,    26,    34,   682,   688,     5,    41,
+    24,    98,    34,   772,    53,    54,   117,    21,     9,    10,
+   636,    25,   109,   110,    56,   124,    84,    24,    25,    26,
+    18,   632,   133,   632,   133,    21,   636,    34,   986,   987,
+   655,    27,    24,   144,   996,   997,   133,   636,   149,   900,
+   109,   110,    34,    26,  1014,    28,   581,  1124,    26,    21,
+    28,    21,    21,    25,    21,    25,   167,     0,    27,     5,
+     3,    44,    32,    33,     7,   149,    44,   918,   603,   757,
+   150,   151,   152,   153,   154,   155,   149,   688,    24,   688,
+   798,    86,   193,   757,   772,   452,   804,   783,    34,    24,
+   201,   583,   203,   582,   205,   399,   149,   208,   772,  1057,
+   907,   478,   187,    21,   673,   216,  1068,    25,  1070,   193,
+   221,    28,   223,   183,   184,   185,   559,   201,   188,   189,
+   193,   205,   187,     5,   208,   236,   237,    44,   201,   183,
+   184,   757,   205,   183,   184,   208,    24,   187,   632,    24,
+   193,    84,   420,   421,   183,   184,   772,   757,   201,    34,
+   632,   632,   205,   237,    24,   208,     0,   782,   757,     3,
+   785,    24,   772,   632,   237,  1026,   277,    11,    12,   280,
+   281,   282,   632,   772,   117,   632,   183,   184,   185,   277,
+    41,   188,   189,   294,   237,   632,   563,     5,    24,   300,
+   133,   183,   184,   884,   688,    56,   294,   578,   216,    18,
+   918,   144,   645,   221,   425,   223,   688,   688,   996,     8,
+   906,  1173,   908,   322,  1021,   216,  1023,    22,   236,   688,
+   221,    26,   223,    28,   321,    26,    18,    28,   688,    21,
+   607,   688,    18,    25,   345,   236,   922,   183,   184,    44,
+    84,   688,   353,    44,   355,   622,   815,   624,    21,   926,
+   471,   973,    25,   788,   973,    99,   100,   101,   102,   103,
+   104,   105,   106,   973,   108,   486,   877,   111,   904,    18,
+   879,   907,    21,   117,    28,    18,    49,    50,    21,    37,
+    38,    18,   973,   127,   128,   129,    23,  1075,   399,   133,
+    44,    24,  1080,    51,    52,   375,   376,   377,   183,   184,
+    16,   183,   184,   185,     5,   149,   188,   189,    25,   420,
+   421,    28,   156,    49,    50,   399,   427,    24,   429,    21,
+    27,   698,   417,    25,    25,    21,   399,    34,   439,    25,
+   441,   429,   443,   428,   277,   432,    16,   280,   281,   282,
+   451,  1129,   451,   454,    37,    38,   399,   458,    16,    18,
+   149,   294,    21,    49,    50,     5,    25,   300,    51,    52,
+   581,    22,   973,  1054,   973,   183,   184,   185,    53,    54,
+   188,   189,   216,    34,    24,    25,    26,    87,    88,   490,
+   874,    24,   603,    26,    34,  1021,    21,  1023,   499,   500,
+    25,    34,    16,   875,   193,   876,   476,   866,   867,    34,
+    35,    36,   420,   421,   864,   865,   205,   117,   118,   208,
+   254,   868,   869,   870,   871,    25,    26,     6,     7,   420,
+   421,   131,    24,    15,    26,   872,   873,   538,   539,    24,
+  1121,    26,    34,   277,   278,   546,   280,   281,   237,    42,
+    43,    21,     8,   554,   539,    25,   557,   558,   546,    39,
+   294,   673,    25,    26,   538,    28,   300,    99,    18,   303,
+    21,    21,   557,    23,    25,   538,    67,    68,    69,    49,
+    50,    44,   583,    24,   583,    26,   183,   184,   322,   973,
+   187,    22,   183,   184,   185,   538,   429,   188,   189,   932,
+     5,   973,   973,   590,    20,    21,   439,    21,   441,   343,
+   443,    25,    22,   203,   973,    21,   887,    29,   451,    25,
+    25,   454,    22,   973,     5,   458,   973,   628,   629,    21,
+    22,   632,   183,   184,   185,    55,   973,   188,   189,   640,
+   641,  1100,   643,    24,    21,    24,  1086,    26,    25,   920,
+   183,   184,   185,    34,    21,   188,   189,   658,    25,   660,
+    18,    25,    26,    21,    28,    21,   499,   500,   669,    25,
+    40,   672,   673,   674,   673,    25,    26,   788,    28,   678,
+    44,   187,   416,   183,   184,   185,    21,   688,   188,   189,
+    25,   147,    93,   149,    44,   429,    34,    49,    50,    34,
+    35,    36,   436,   815,   438,    18,   440,   441,    21,   443,
+   399,   982,    34,   546,   448,    24,    22,   451,    21,   830,
+   991,    93,    25,  1148,   458,    34,    34,    35,    36,   699,
+   700,   701,   702,   703,   704,    19,   470,   193,    21,   473,
+  1011,   475,    25,    22,   478,   201,    49,    50,    86,   205,
+   583,    26,   208,    24,    21,   345,  1027,  1182,    25,    34,
+   216,    22,    24,   353,    26,   355,    28,    24,    21,    26,
+  1037,    21,    25,    18,   775,    25,    21,    34,   183,   184,
+   185,   237,    44,   188,   189,    47,    48,    34,    35,    36,
+    21,    21,  1063,   780,    25,    25,   783,    93,   179,   180,
+    21,    21,   183,   184,    25,    25,   187,    37,    38,    21,
+    19,  1082,   546,    25,   815,    21,   815,    37,    38,    25,
+    18,    51,    52,    21,   825,   658,   560,   660,    20,   563,
+    21,    51,    52,    93,    25,    18,   669,   427,    21,   672,
+   673,    18,   576,   577,    21,   183,   184,   303,    21,   583,
+   188,   189,    25,    32,    33,   311,   312,   313,   314,    32,
+    33,   183,   184,   185,    27,    21,   188,   189,   602,    25,
+   179,   180,    24,   607,   183,   184,   332,    21,   187,    18,
+    18,    25,    21,   617,   618,    21,   887,   343,   622,    25,
+   624,   861,   862,   863,   895,    21,   183,   184,   185,    25,
+   490,   188,   189,    21,   360,    53,    54,    25,   183,   184,
+   185,    18,    21,   188,   189,   649,    25,   904,    21,   906,
+   907,   908,    25,   657,    18,   659,   183,   184,   185,   663,
+   664,   188,   189,   190,   668,    51,    52,    53,   672,   673,
+   941,   942,    23,   399,   678,    24,    18,    26,    24,   539,
+    21,   407,    24,    22,    25,    20,    21,    29,    30,    31,
+    32,    33,    34,    18,   698,    21,   936,   557,   558,    25,
+    20,    21,   973,    25,    46,    47,    48,    24,    24,    26,
+    21,    28,   815,   984,    25,   986,   987,    21,  1100,    25,
+    21,    25,   825,   994,    25,   996,   997,    44,    70,   984,
+    47,    48,    21,    21,    21,    21,    25,    25,    25,    25,
+    21,    22,  1013,   109,   110,    18,    18,  1018,    18,     8,
+     9,    10,    32,    33,    18,    18,     9,    19,    24,  1030,
+  1018,  1030,  1033,    21,  1021,    11,  1023,  1148,   628,   629,
+   112,    25,  1030,    11,   778,    89,    19,    19,    19,    19,
+  1161,   641,    89,  1054,  1055,  1056,  1057,    21,  1059,  1060,
+    27,    24,    22,    25,    21,    18,    24,  1068,    11,  1070,
+  1071,  1182,    21,   529,  1075,    25,  1077,  1078,    24,  1080,
+   814,   815,   538,   817,   674,  1086,    24,    24,    66,    67,
+    68,    69,    70,    71,    72,    73,    74,    75,    27,  1100,
+    25,    24,    23,    20,    19,    23,    20,    19,   941,   942,
+    21,   183,   184,   185,     5,   187,    25,    27,    24,    22,
+  1121,  1122,  1123,  1124,    24,    20,    25,    20,  1129,   107,
+    72,    25,    18,   111,    21,   113,    40,   115,    27,    27,
+    25,   597,   120,    25,    22,    25,    25,    24,  1149,    39,
+    55,    25,   130,    29,   132,   184,    89,    89,    89,    89,
+   149,  1149,    89,    18,    25,    89,   622,    24,   624,   903,
+    18,    25,  1173,    25,   630,    25,   910,    18,   634,    25,
+    18,    21,   187,    24,    40,  1018,    18,    21,    29,    30,
+    31,    32,    33,    34,    23,   182,   174,  1030,    24,    18,
+  1033,    22,    22,   189,   193,    46,    47,    48,     8,     9,
+    10,    21,   201,    21,    89,    22,   205,    20,    20,   208,
+    89,    25,  1055,  1056,    25,   191,    40,   216,    27,    70,
+    27,   687,   221,    25,   223,    18,    20,    27,    20,    25,
+     0,   137,   698,     0,  1077,  1078,   300,   236,   237,    84,
+   895,  1071,  1173,  1086,   150,   151,   152,   153,   154,   155,
+   976,   157,   158,  1142,   661,  1045,   985,  1100,  1121,  1013,
+   563,   112,   845,   443,   770,  1149,   660,   815,   658,   124,
+   322,  1015,   672,   261,  1018,    10,  1105,   490,   236,  1122,
+  1123,    23,   341,   399,   688,   973,  1030,    -1,  1032,    -1,
+    -1,    -1,    -1,  1037,    -1,    -1,  1040,  1041,    -1,    -1,
+   288,    -1,    -1,   291,    -1,    -1,  1149,    -1,    -1,    -1,
+    -1,   299,    -1,    -1,   302,    57,    58,    59,    60,    61,
+    62,    63,    64,    65,    66,     8,     9,    10,   335,    -1,
+    -1,    -1,   183,   184,   185,    23,   187,  1081,    -1,   149,
+    -1,    -1,  1086,    -1,  1088,  1089,    -1,    -1,    -1,     8,
+     9,    10,   359,    -1,    -1,    -1,  1100,   364,   365,   366,
+   367,   368,   369,   370,   371,   372,   373,   374,    -1,    57,
+    58,    59,    60,    61,    62,    63,    64,    65,    66,    -1,
+   846,  1125,    -1,   193,    -1,    -1,    -1,    -1,   395,    -1,
+    -1,   201,    -1,    -1,    -1,   205,    -1,    -1,   208,    -1,
+   399,  1145,  1146,    -1,    -1,  1149,   216,   217,  1152,    -1,
+    -1,   221,    -1,   223,    -1,     8,     9,    10,    -1,    -1,
+    -1,   420,   421,    -1,    -1,    -1,   236,   237,   416,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   426,    -1,
+    -1,    -1,    -1,   431,    72,    73,    74,    75,   436,    -1,
+   438,    79,    80,    81,    82,    83,    84,    85,   446,    -1,
+   926,    -1,   450,     8,     9,    10,   149,    -1,    -1,   375,
+   376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
+   386,   387,   388,   389,   390,    -1,    -1,    -1,    -1,    -1,
+   149,    -1,    -1,    -1,    -1,    -1,     8,     9,    10,    -1,
+    -1,    -1,    -1,    -1,    -1,   971,    -1,    -1,    -1,    -1,
+   193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   201,   425,
+    -1,    -1,   205,    -1,    -1,   208,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   216,   193,    -1,    -1,    -1,   221,   538,
+   223,    -1,   201,    -1,    -1,    -1,   205,    -1,   358,   208,
+    -1,    -1,    -1,   236,   237,    -1,   149,   216,    -1,    -1,
+    -1,    -1,   221,    -1,   223,   471,    -1,    -1,    -1,    -1,
+   476,    -1,    -1,    -1,    -1,    -1,    -1,   236,   237,    -1,
+   486,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   399,
+    -1,    -1,    -1,    -1,   582,    -1,    -1,    -1,    -1,    -1,
+   193,    -1,    -1,    -1,   149,    -1,    -1,   614,   201,    -1,
+   420,   421,   205,   601,    -1,   208,    -1,    -1,   606,    -1,
+    -1,    -1,   528,   216,   530,    -1,   532,   533,   221,    -1,
+   223,    -1,    -1,    -1,    -1,    -1,    -1,   149,    -1,    -1,
+    -1,    -1,    -1,   236,   237,   633,    -1,   635,   193,    -1,
+    -1,    -1,    -1,    -1,    -1,   662,   201,    -1,    -1,    -1,
+   205,    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   216,    -1,    -1,    -1,   581,   221,    -1,   223,    -1,
+    -1,   193,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   201,
+    -1,   236,   237,   205,    -1,    -1,   208,   603,    -1,    -1,
+    -1,    -1,    -1,    -1,   216,    -1,    -1,    -1,    -1,   221,
+    -1,   223,    -1,    -1,    -1,    -1,   399,    -1,    -1,    -1,
+    -1,    -1,   710,    -1,   236,   237,   632,    -1,   538,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    19,   420,   421,    -1,
+   399,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   420,   421,    46,    47,    48,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   765,   766,    -1,
+    -1,    -1,   688,    -1,    -1,   792,    -1,    70,   795,    -1,
+    -1,    -1,    -1,   699,   700,   701,   702,   703,   704,   705,
+   706,    -1,   119,   120,   121,   122,   399,   124,    -1,   797,
     -1,    -1,   129,   130,    -1,    -1,   133,   134,    -1,   136,
-   137,   138,   139,    24,    -1,    -1,    -1,    -1,    -1,    -1,
-   112,    -1,    -1,    34,   151,   152,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1147,   176,
-    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,   186,
-    71,  1160,    -1,    -1,    -1,    76,    77,    78,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-    91,    92,  1181,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   399,   183,   184,   185,    -1,   187,    -1,    -1,   109,   110,
+   137,   138,   139,    -1,    -1,    -1,    -1,   420,   421,   112,
+    -1,    -1,    -1,    -1,   151,   152,    -1,   844,   845,    -1,
+    -1,    -1,    -1,   850,   851,   852,   853,   854,   855,   856,
+   857,   858,   859,   860,   399,   538,    -1,    -1,    -1,   176,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   186,
+    -1,    -1,    -1,    -1,    -1,   420,   421,    -1,    -1,   538,
+    -1,    -1,   788,    -1,    -1,    -1,    -1,   399,    -1,    -1,
+    -1,    -1,    -1,   900,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,    -1,   187,    -1,    -1,    -1,   420,   421,
+    -1,    -1,    -1,    -1,    -1,   903,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   830,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   922,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   538,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   861,   862,   863,   864,   865,
+   866,   867,   868,   869,   870,   871,   872,   873,   874,   875,
+   876,   877,    -1,   879,    -1,    -1,    -1,    -1,    -1,     0,
+     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   538,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,  1026,
+    -1,    -1,    -1,    -1,    45,    -1,   538,    -1,  1016,    -1,
+   936,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,    -1,
+    71,    -1,    -1,    -1,    -1,    76,    77,    78,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   973,    -1,    90,
+    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,
    111,    -1,   113,   114,   115,   116,   117,   118,   119,   120,
-   121,   122,   421,   124,   125,   126,   127,   128,   129,   130,
+   121,   122,  1090,   124,   125,   126,   127,   128,   129,   130,
    131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
    141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
    151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
    161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,     0,     1,    -1,    -1,
+   171,   172,   173,   174,   175,   176,    -1,    -1,    -1,    -1,
     -1,    -1,   183,   184,   185,   186,    -1,   188,   189,   190,
+     0,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   538,
-    -1,    -1,    -1,    67,    68,    69,    -1,    71,    -1,    -1,
-    -1,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,    -1,
+    -1,    -1,  1180,    -1,    24,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   109,   110,   111,    -1,   113,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,
+    -1,    71,  1148,    -1,    -1,    -1,    76,    77,    78,    -1,
+    -1,    -1,    -1,    -1,    -1,  1161,    -1,    -1,    -1,    -1,
+    90,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1182,    -1,    -1,   109,
+   110,   111,    -1,   113,   114,   115,   116,   117,   118,   119,
+   120,   121,   122,    -1,   124,   125,   126,   127,   128,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+   170,   171,   172,   173,   174,   175,   176,    -1,    -1,    -1,
+    -1,    -1,    -1,   183,   184,   185,   186,     1,   188,   189,
+   190,    -1,     6,     7,     8,    -1,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
+    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+    -1,    45,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    67,    68,    69,    70,    71,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   108,   109,   110,   111,   112,   113,
    114,   115,   116,   117,   118,   119,   120,   121,   122,    -1,
    124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
    134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
@@ -2178,15 +2216,121 @@ static const short yycheck[] = {     0,
    154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
    164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
    174,   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,
-   184,   185,   186,     1,   188,   189,   190,    -1,     6,     7,
-     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+   184,   185,   186,   187,   188,   189,   190,     1,    -1,    -1,
+    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,    -1,
+    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+    -1,    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   108,   109,   110,   111,   112,   113,
+   114,   115,   116,   117,   118,   119,   120,   121,   122,    -1,
+   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+   134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,
+   184,   185,   186,   187,   188,   189,   190,     1,    -1,    -1,
+    -1,    -1,     6,     7,     8,    -1,    -1,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
+    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+    -1,    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    67,    68,    69,    70,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   108,   109,   110,   111,   112,   113,
+   114,   115,   116,   117,   118,   119,   120,   121,   122,    -1,
+   124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+   134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+   174,   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,
+   184,   185,   186,   187,   188,   189,   190,     1,    -1,    -1,
+    -1,    -1,     6,     7,     8,    -1,    -1,    11,    12,    13,
+    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
+    24,    25,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
+     1,    -1,    46,    47,    48,     6,     7,     8,    -1,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    -1,
+    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,    30,
+    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    42,    43,    -1,    -1,    46,    47,    48,    -1,    93,
+    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,   112,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    93,    94,    95,    96,    97,    98,    99,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,
+    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,
+   184,   185,    -1,   187,   188,   189,    -1,    -1,     1,    -1,
+    -1,    -1,    -1,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    -1,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,   183,   184,   185,    -1,   187,   188,   189,    42,
+    43,     1,    -1,    46,    47,    48,     6,     7,     8,    -1,
+    -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    42,    43,    -1,    -1,    46,    47,    48,    -1,
+    93,    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,   112,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    93,    94,    95,    96,    97,    98,    99,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
+    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,    -1,   187,   188,   189,    -1,    -1,     1,
+    -1,    -1,    -1,    -1,     6,     7,     8,    -1,    10,    11,
+    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
+    32,    33,    34,   183,   184,   185,    -1,   187,   188,   189,
+    42,    43,     1,    -1,    46,    47,    48,     6,     7,     8,
+    -1,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
+    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,
+    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    42,    43,    -1,    -1,    46,    47,    48,
+    -1,    -1,    94,    95,    96,    97,    98,    99,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,
+   112,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    94,    95,    96,    97,    98,
+    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,
+    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    19,    20,    -1,    -1,    -1,    24,
+    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
+    -1,   183,   184,   185,    -1,   187,   188,   189,    -1,    -1,
+     1,    46,    47,    48,    -1,     6,     7,     8,    -1,    10,
+    11,    12,    13,    14,    15,    16,    17,    18,    19,    -1,
+    -1,    -1,    -1,    24,    -1,    70,    -1,    -1,    29,    30,
+    31,    32,    33,    34,   183,   184,   185,    -1,   187,   188,
+   189,    42,    43,    -1,    -1,    46,    47,    48,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    94,    95,    96,    97,    98,    99,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,     6,     7,
+     8,   112,    10,    11,    12,    13,    14,    15,    16,    17,
     18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    43,    -1,    45,    46,    47,
+    -1,    29,    30,    31,    32,    33,    34,    -1,   183,   184,
+   185,    -1,   187,    -1,    42,    43,    -1,    45,    46,    47,
     48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    68,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   183,   184,   185,    -1,   187,   188,   189,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    94,    95,    96,    97,
     98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
@@ -2197,33 +2341,32 @@ static const short yycheck[] = {     0,
    158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
    168,   169,   170,   171,   172,   173,   174,   175,   176,    -1,
     -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,   187,
-   188,   189,   190,     1,    -1,    -1,    -1,    -1,     6,     7,
-     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    43,    -1,    -1,    46,    47,
-    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   188,   189,   190,     6,     7,     8,    -1,    10,    11,    12,
+    13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+    43,    -1,    45,    46,    47,    48,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    94,    95,    96,    97,
-    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-   118,   119,   120,   121,   122,    -1,   124,   125,   126,   127,
-   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-   168,   169,   170,   171,   172,   173,   174,   175,   176,    -1,
-    -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,   187,
-   188,   189,   190,     1,    -1,    -1,    -1,    -1,     6,     7,
-     8,    -1,    -1,    11,    12,    13,    14,    15,    16,    17,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   108,   109,   110,   111,   112,
+   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+    -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,   186,   187,   188,   189,   190,     6,     7,
+     8,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
     18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,
     -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    43,    -1,    -1,    46,    47,
+    -1,    -1,    -1,    -1,    42,    43,    -1,    45,    46,    47,
     48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
-    68,    69,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    94,    95,    96,    97,
     98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -2235,138 +2378,29 @@ static const short yycheck[] = {     0,
    158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
    168,   169,   170,   171,   172,   173,   174,   175,   176,    -1,
     -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,   187,
-   188,   189,   190,     1,    -1,    -1,    -1,    -1,     6,     7,
-     8,    -1,    -1,    11,    12,    13,    14,    15,    16,    17,
-    18,    19,    20,    -1,    -1,    -1,    24,    25,    -1,    -1,
-    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    42,    43,     1,    -1,    46,    47,
-    48,     6,     7,     8,    -1,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    -1,    -1,    -1,    -1,    24,
-    -1,    -1,    70,    -1,    29,    30,    31,    32,    33,    34,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,
-    -1,    46,    47,    48,    -1,    93,    94,    95,    96,    97,
-    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   108,    -1,    -1,    -1,   112,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,
-    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   108,    -1,    -1,    -1,   112,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   183,   184,   185,    -1,   187,
-   188,   189,    -1,    -1,     1,    -1,    -1,    -1,    -1,     6,
-     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    -1,    -1,    -1,    -1,    24,    -1,    -1,
-    -1,    -1,    29,    30,    31,    32,    33,    34,   183,   184,
-   185,    -1,   187,   188,   189,    42,    43,     1,    -1,    46,
-    47,    48,     6,     7,     8,    -1,    -1,    11,    12,    13,
-    14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
-    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
-    -1,    -1,    46,    47,    48,    -1,    93,    94,    95,    96,
-    97,    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   108,    -1,    -1,    -1,   112,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,   112,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,    -1,
-   187,   188,   189,    -1,    -1,     1,    -1,    -1,    -1,    -1,
-     6,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,   183,
-   184,   185,    -1,   187,   188,   189,    42,    43,     1,    -1,
-    46,    47,    48,     6,     7,     8,    -1,    -1,    11,    12,
+   188,   189,   190,     6,     7,     8,    -1,    10,    11,    12,
     13,    14,    15,    16,    17,    18,    19,    20,    -1,    -1,
-    -1,    24,    -1,    -1,    70,    -1,    29,    30,    31,    32,
-    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-    43,    -1,    -1,    46,    47,    48,    -1,    -1,    94,    95,
-    96,    97,    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   108,    -1,    -1,    -1,   112,    70,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,
+    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    46,    47,    48,     6,     7,     8,    -1,
+    10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+    20,    -1,    -1,    -1,    24,    -1,    -1,    70,    -1,    29,
+    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    -1,
     -1,    94,    95,    96,    97,    98,    99,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,   112,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    19,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
-    29,    30,    31,    32,    33,    34,    -1,   183,   184,   185,
-    -1,   187,   188,   189,    -1,    -1,     1,    46,    47,    48,
-    -1,     6,     7,     8,    -1,    10,    11,    12,    13,    14,
-    15,    16,    17,    18,    19,    -1,    -1,    -1,    -1,    24,
-    -1,    70,    -1,    -1,    29,    30,    31,    32,    33,    34,
-   183,   184,   185,    -1,   187,   188,   189,    42,    43,    -1,
-    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   112,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,
-    95,    96,    97,    98,    99,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   108,     6,     7,     8,   112,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
-    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    34,    -1,   183,   184,   185,    -1,   187,    -1,
-    42,    43,    -1,    45,    46,    47,    48,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,
-   185,    -1,   187,   188,   189,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    94,    95,    96,    97,    98,    99,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,   110,   111,
-   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,    -1,    -1,    -1,    -1,    -1,
-    -1,   183,   184,   185,   186,   187,   188,   189,   190,     6,
-     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
-    17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
-    -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    42,    43,    -1,    45,    46,
-    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    70,    71,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    95,    96,
-    97,    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,    -1,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,   186,
-   187,   188,   189,   190,     6,     7,     8,    -1,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
-    -1,    -1,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    42,    43,    -1,    45,    46,    47,    48,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    71,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    94,    95,    96,    97,    98,    99,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,   110,   111,
-   112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,    -1,    -1,    -1,    -1,    -1,
-    -1,   183,   184,   185,   186,   187,   188,   189,   190,     6,
-     7,     8,    -1,    10,    11,    12,    13,    14,    15,    16,
+    -1,    -1,    -1,    -1,    94,    95,    96,    97,    98,    99,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,     6,
+     7,     8,   112,    10,    11,    12,    13,    14,    15,    16,
     17,    18,    19,    20,    -1,    -1,    -1,    24,    -1,    -1,
     -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+   183,   184,   185,    -1,   187,   188,   189,    -1,    -1,    46,
     47,    48,     6,     7,     8,    -1,    10,    11,    12,    13,
     14,    15,    16,    17,    18,    19,    20,    -1,    -1,    -1,
     24,    -1,    -1,    70,    -1,    29,    30,    31,    32,    33,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    34,    -1,    -1,   183,   184,   185,    -1,   187,   188,   189,
     -1,    -1,    46,    47,    48,    -1,    -1,    94,    95,    96,
     97,    98,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,   108,    -1,    -1,    -1,   112,    70,    -1,    -1,    -1,
@@ -2393,7 +2427,7 @@ static const short yycheck[] = {     0,
     -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
     -1,    -1,   183,   184,   185,    -1,   187,   188,   189,    -1,
     -1,    46,    47,    48,     6,     7,     8,    -1,    10,    11,
-    12,    13,    14,    15,    16,    17,    18,    19,    20,    -1,
+    12,    13,    14,    15,    16,    17,    18,    19,    -1,    -1,
     -1,    -1,    24,    -1,    -1,    70,    -1,    29,    30,    31,
     32,    33,    34,    -1,    -1,   183,   184,   185,    -1,   187,
    188,   189,    -1,    -1,    46,    47,    48,    -1,    -1,    94,
@@ -2401,147 +2435,109 @@ static const short yycheck[] = {     0,
     -1,    -1,    -1,   108,    -1,    -1,    -1,   112,    70,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    94,    95,    96,    97,    98,    99,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   108,     6,     7,     8,
-   112,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-    19,    20,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
-    29,    30,    31,    32,    33,    34,    -1,    -1,   183,   184,
-   185,    -1,   187,   188,   189,    -1,    -1,    46,    47,    48,
-     6,     7,     8,    -1,    10,    11,    12,    13,    14,    15,
-    16,    17,    18,    19,    -1,    -1,    -1,    -1,    24,    -1,
-    -1,    70,    -1,    29,    30,    31,    32,    33,    34,    -1,
-    -1,   183,   184,   185,    -1,   187,   188,   189,    -1,    -1,
-    46,    47,    48,    -1,    -1,    94,    95,    96,    97,    98,
-    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,
-    -1,    -1,    -1,   112,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    95,
-    96,    97,    98,    99,    19,    -1,    -1,    -1,    -1,    24,
-    -1,    -1,   108,    -1,    -1,    -1,   112,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   183,   184,   185,    -1,   187,   188,
-   189,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    20,    -1,    -1,    -1,   183,   184,   185,
-    -1,   187,   188,   189,   109,   110,   111,    -1,   113,   114,
-   115,   116,   117,   118,   119,   120,   121,   122,    -1,   124,
-   125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-   175,   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   185,   186,   109,   110,   111,   190,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,    -1,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-    22,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
-    -1,    -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    67,    68,    69,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    86,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,   111,
-    -1,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,    -1,    -1,    -1,    -1,    -1,
-    19,    -1,    -1,    -1,   186,    24,    -1,    -1,   190,    -1,
-    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   112,    34,    24,    -1,    -1,    27,    -1,
-    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   183,   184,   185,    -1,   187,   109,
-   110,   111,    -1,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,   122,   112,   124,   125,   126,   127,   128,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   176,    -1,    -1,    -1,
-    -1,    -1,    -1,   183,   184,   185,   186,    -1,   188,   189,
-   190,    -1,    -1,    -1,   183,   184,   185,    24,   187,    -1,
-    27,    -1,    29,    30,    31,    32,    33,    34,    24,    25,
-    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,    46,
-    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,
-    46,    47,    48,    29,    30,    31,    32,    33,    34,    -1,
-    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    46,    47,    48,    24,    70,    -1,    -1,    -1,    29,    30,
-    31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,    46,    47,    48,    -1,    -1,
-    -1,    -1,    24,    -1,    -1,   112,    -1,    29,    30,    31,
-    32,    33,    34,    -1,    -1,    -1,   112,    -1,    -1,    70,
-    -1,    -1,    24,    -1,    46,    47,    48,    29,    30,    31,
-    32,    33,    34,    24,    -1,    -1,   112,    -1,    29,    30,
-    31,    32,    33,    34,    46,    47,    48,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    -1,    -1,
-    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,    70,
-   187,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,
-   112,   187,    24,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    33,    34,    -1,    -1,    -1,    -1,   183,   184,   185,
-   112,   187,    -1,    -1,    46,    47,    48,    -1,    -1,    -1,
-    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   183,   184,   185,    -1,   187,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   183,   184,   185,    -1,   187,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   112,   183,   184,   185,    -1,   187,    -1,    -1,    -1,    42,
-    43,    -1,   183,   184,   185,    -1,   187,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    94,    95,    96,    97,    98,    99,    19,    -1,
+    -1,    -1,    -1,    24,    -1,    -1,   108,    -1,    -1,    -1,
+   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,
+   185,    -1,   187,   188,   189,    -1,    -1,    -1,    -1,    -1,
+    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   183,   184,   185,    -1,   187,   109,   110,   111,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    20,    -1,    -1,
+    -1,   183,   184,   185,    -1,   187,   188,   189,   109,   110,
+   111,    -1,   113,   114,   115,   116,   117,   118,   119,   120,
+   121,   122,    -1,   124,   125,   126,   127,   128,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+   171,   172,   173,   174,   175,   176,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   185,   186,   109,   110,   111,   190,
    113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
     -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
    133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
    143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
    153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
    163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-   173,   174,   175,   176,    45,    -1,    -1,    -1,    -1,    -1,
+   173,   174,   175,   176,    22,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,   185,   186,    -1,    -1,    -1,   190,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    67,    68,    69,    -1,
-    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,
-   111,    -1,   113,   114,   115,   116,   117,   118,   119,   120,
-   121,   122,    -1,   124,   125,   126,   127,   128,   129,   130,
-   131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-   151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-   171,   172,   173,   174,   175,   176,    45,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   185,   186,    -1,    -1,    -1,   190,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+    68,    69,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   109,   110,   111,    -1,   113,   114,   115,   116,   117,
+   118,   119,   120,   121,   122,    -1,   124,   125,   126,   127,
+   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   176,    -1,
+    -1,    -1,    -1,    -1,    19,    -1,    -1,    -1,   186,    24,
+    -1,    -1,   190,    -1,    29,    30,    31,    32,    33,    34,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,    34,    24,
+    25,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    46,    47,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,
+   185,    -1,   187,   109,   110,   111,    -1,   113,   114,   115,
+   116,   117,   118,   119,   120,   121,   122,   112,   124,   125,
+   126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+   176,    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,
+   186,    -1,   188,   189,   190,    -1,    -1,    -1,   183,   184,
+   185,    24,   187,    -1,    27,    -1,    29,    30,    31,    32,
+    33,    34,    24,    -1,    -1,    27,    -1,    29,    30,    31,
+    32,    33,    34,    46,    47,    48,    -1,    -1,    -1,    -1,
+    -1,    -1,    24,    25,    46,    47,    48,    29,    30,    31,
+    32,    33,    34,    -1,    -1,    -1,    -1,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    46,    47,    48,    -1,    70,    24,
+    25,    -1,    -1,    -1,    29,    30,    31,    32,    33,    34,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+    -1,    46,    47,    48,    -1,    -1,    24,    -1,    -1,   112,
+    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+   112,    -1,    -1,    -1,    -1,    70,    24,    -1,    46,    47,
+    48,    29,    30,    31,    32,    33,    34,    24,    -1,    -1,
+   112,    -1,    29,    30,    31,    32,    33,    34,    46,    47,
+    48,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+    47,    48,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   183,   184,   185,    70,   187,    -1,    -1,    -1,    -1,    -1,
+    -1,   183,   184,   185,   112,   187,    -1,    -1,    -1,    -1,
+    24,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    33,
+    34,   183,   184,   185,   112,   187,    -1,    -1,    -1,    -1,
+    -1,    -1,    46,    47,    48,   112,    24,    -1,    -1,    -1,
+    -1,    29,    30,    31,    32,    33,    34,    -1,   183,   184,
+   185,    -1,   187,    -1,    -1,    -1,    70,    -1,    46,    47,
+    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   183,   184,   185,    -1,   187,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   183,   184,   185,   112,   187,
+    -1,    -1,    -1,    -1,    -1,    -1,   183,   184,   185,    -1,
+   187,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    42,    43,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   183,
+   184,   185,    -1,   187,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   183,   184,   185,    -1,   187,
    109,   110,   111,    -1,   113,   114,   115,   116,   117,   118,
    119,   120,   121,   122,    -1,   124,   125,   126,   127,   128,
    129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
@@ -2549,9 +2545,9 @@ static const short yycheck[] = {     0,
    149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
    159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
    169,   170,   171,   172,   173,   174,   175,   176,    45,    -1,
-    -1,    -1,    -1,    -1,   183,   184,   185,   186,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,    -1,    -1,
     -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+    67,    68,    69,    -1,    71,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -2562,35 +2558,62 @@ static const short yycheck[] = {     0,
    147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
    157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
    167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-    67,    68,    69,    -1,    -1,    -1,    -1,    -1,   185,   186,
+    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,
     -1,    -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   109,   110,   111,    -1,   113,   114,   115,   116,
-   117,   118,   119,   120,   121,   122,    -1,   124,   125,   126,
-   127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-   147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-   167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-    90,    91,    92,    -1,    -1,    -1,    -1,    -1,   185,   186,
-    -1,    -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,   109,
-   110,   111,    -1,   113,   114,   115,   116,   117,   118,   119,
-   120,   121,   122,    -1,   124,   125,   126,   127,   128,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-   150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-   170,   171,   172,   173,   174,   175,   176,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   185,   186,   109,   110,   111,
-   190,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-   122,    -1,   124,   125,   126,   127,   128,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-   152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-   172,   173,   174,   175,   176,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   185,   186,    -1,    -1,    -1,   190
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   109,   110,   111,    -1,   113,   114,
+   115,   116,   117,   118,   119,   120,   121,   122,    -1,   124,
+   125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+   135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+   155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+   165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+   175,   176,    45,    -1,    -1,    -1,    -1,    -1,   183,   184,
+   185,   186,    -1,    -1,    -1,   190,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,   111,    -1,
+   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+    -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,    67,    68,    69,    -1,    -1,    -1,
+    -1,    -1,   185,   186,    -1,    -1,    -1,   190,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,   111,    -1,
+   113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+    -1,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,    90,    91,    92,    -1,    -1,    -1,
+    -1,    -1,   185,   186,    -1,    -1,    -1,   190,    -1,    -1,
+    -1,    -1,    -1,   109,   110,   111,    -1,   113,   114,   115,
+   116,   117,   118,   119,   120,   121,   122,    -1,   124,   125,
+   126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+   156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+   166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+   176,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,
+   186,   109,   110,   111,   190,   113,   114,   115,   116,   117,
+   118,   119,   120,   121,   122,    -1,   124,   125,   126,   127,
+   128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+   138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+   148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+   168,   169,   170,   171,   172,   173,   174,   175,   176,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   185,   186,    -1,
+    -1,    -1,   190
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 
@@ -4596,211 +4619,218 @@ case 498:
 { yyval.expr = exprNode_makeError (); ;
     break;}
 case 499:
+{ exprNode_checkIfPred (yyvsp[0].expr); ;
+    break;}
+case 500:
 { /* don't: context_exitTrueClause ($1, $2); */
-     yyval.expr = exprNode_if (yyvsp[-1].expr, yyvsp[0].expr); 
+     yyval.expr = exprNode_if (yyvsp[-2].expr, yyvsp[0].expr); 
    ;
     break;}
-case 500:
+case 501:
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 501:
+case 502:
 { yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
-case 512:
+case 513:
 { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
-case 514:
-{ yyval.expr = exprNode_makeError (); ;
-    break;}
 case 515:
-{ yyval.expr = exprNode_labelMarker (yyvsp[-1].cname); ;
+{ yyval.expr = exprNode_makeError (); ;
     break;}
 case 516:
-{ yyval.expr = exprNode_notReached (yyvsp[0].expr); ;
+{ yyval.expr = exprNode_labelMarker (yyvsp[-1].cname); ;
     break;}
 case 517:
-{ ; ;
+{ yyval.expr = exprNode_notReached (yyvsp[0].expr); ;
     break;}
 case 518:
 { ; ;
     break;}
 case 519:
-{ context_enterCaseClause (yyvsp[0].expr); ;
+{ ; ;
     break;}
 case 520:
-{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, FALSE); ;
+{ context_enterCaseClause (yyvsp[0].expr); ;
     break;}
 case 521:
-{ context_enterCaseClause (yyvsp[0].expr); ;
+{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, FALSE); ;
     break;}
 case 522:
-{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, TRUE); ;
+{ context_enterCaseClause (yyvsp[0].expr); ;
     break;}
 case 523:
-{ context_enterCaseClause (exprNode_undefined); ;
+{ yyval.expr = exprNode_caseMarker (yyvsp[-2].expr, TRUE); ;
     break;}
 case 524:
-{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, FALSE); ;
+{ context_enterCaseClause (exprNode_undefined); ;
     break;}
 case 525:
-{ context_enterCaseClause (exprNode_undefined); ;
+{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, FALSE); ;
     break;}
 case 526:
-{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, TRUE); ;
+{ context_enterCaseClause (exprNode_undefined); ;
     break;}
 case 527:
-{ yyval.expr = yyvsp[-1].expr; ;
+{ yyval.expr = exprNode_defaultMarker (yyvsp[-2].tok, TRUE); ;
     break;}
 case 528:
-{ yyval.expr = yyvsp[0].expr; context_exitInner (yyvsp[0].expr); ;
+{ yyval.expr = yyvsp[-1].expr; ;
     break;}
 case 529:
-{ yyval.expr = yyvsp[-1].expr; ;
+{ yyval.expr = yyvsp[0].expr; context_exitInner (yyvsp[0].expr); ;
     break;}
 case 530:
-{ context_enterInnerContext (); ;
+{ yyval.expr = yyvsp[-1].expr; ;
     break;}
 case 531:
-{ context_exitInnerPlain (); ;
+{ context_enterInnerContext (); ;
     break;}
 case 532:
-{ context_enterStructInnerContext (); ;
+{ context_exitInnerPlain (); ;
     break;}
 case 533:
-{ context_exitStructInnerContext (); ;
+{ context_enterStructInnerContext (); ;
     break;}
 case 534:
-{ context_exitInnerSafe (); ;
+{ context_exitStructInnerContext (); ;
     break;}
 case 535:
-{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
+{ context_exitInnerSafe (); ;
     break;}
 case 536:
-{ yyval.expr = exprNode_notReached (exprNode_createTok (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
 case 537:
-{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_notReached (exprNode_createTok (yyvsp[0].tok)); ;
     break;}
 case 538:
-{ yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
+{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
 case 539:
-{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
     break;}
 case 540:
-{ yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
+{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
 case 541:
-{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_notReached (exprNode_updateLocation (yyvsp[-2].expr, lltok_getLoc (yyvsp[0].tok))); ;
     break;}
 case 542:
+{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
+    break;}
+case 543:
 { yyval.expr = exprNode_notReached (exprNode_updateLocation (exprNode_concat (yyvsp[-3].expr, yyvsp[-2].expr), 
                                                        lltok_getLoc (yyvsp[-1].tok))); 
    ;
     break;}
-case 543:
-{ yyval.expr = exprNode_makeBlock (yyvsp[0].expr); ;
-    break;}
 case 544:
-{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
+{ yyval.expr = exprNode_makeBlock (yyvsp[0].expr); ;
     break;}
 case 545:
-{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
 case 546:
 { yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
 case 547:
-{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
+{ yyval.expr = exprNode_updateLocation (yyvsp[-1].expr, lltok_getLoc (yyvsp[0].tok)); ;
     break;}
-case 549:
-{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
+case 548:
+{ yyval.expr = exprNode_updateLocation (exprNode_concat (yyvsp[-2].expr, yyvsp[-1].expr), lltok_getLoc (yyvsp[0].tok)); ;
     break;}
 case 550:
-{ yyval.expr = yyvsp[0].expr; ;
+{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 551:
-{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = yyvsp[0].expr; ;
     break;}
 case 552:
-{ yyval.expr = yyvsp[0].expr; ;
+{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 553:
-{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = yyvsp[0].expr; ;
     break;}
 case 554:
-{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
+{ yyval.expr = exprNode_concat (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 555:
-{ yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
+{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
 case 556:
-{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
+{ yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
 case 557:
-{ yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
+{ yyval.expr = exprNode_createTok (yyvsp[0].tok); ;
     break;}
 case 558:
-{ yyval.expr = exprNode_checkExpr (yyvsp[0].expr); ;
+{ yyval.expr = exprNode_statement (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
 case 559:
-{ yyval.expr = yyvsp[-1].expr; exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); ;
+{ yyval.expr = exprNode_checkExpr (yyvsp[0].expr); ;
     break;}
 case 560:
+{ 
+     exprNode_produceGuards (yyvsp[-1].expr); context_enterTrueClause (yyvsp[-1].expr); 
+     exprNode_checkIfPred (yyvsp[-1].expr);
+     yyval.expr = yyvsp[-1].expr;
+   ;
+    break;}
+case 561:
 { 
      context_exitTrueClause (yyvsp[-1].expr, yyvsp[0].expr);
      yyval.expr = exprNode_if (yyvsp[-1].expr, yyvsp[0].expr); 
    ;
     break;}
-case 561:
+case 562:
 { context_enterFalseClause (yyvsp[-2].expr); ;
     break;}
-case 562:
+case 563:
 {
      context_exitClause (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr);
      yyval.expr = exprNode_ifelse (yyvsp[-4].expr, yyvsp[-3].expr, yyvsp[0].expr); 
    ;
     break;}
-case 563:
+case 564:
 { context_enterSwitch (yyvsp[0].expr); ;
     break;}
-case 564:
+case 565:
 { yyval.expr = exprNode_switch (yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
-case 565:
+case 566:
 { yyval.expr = exprNode_whilePred (yyvsp[-1].expr); context_enterWhileClause (yyvsp[-1].expr); ;
     break;}
-case 566:
+case 567:
 { yyval.expr = exprNode_whilePred(yyvsp[-1].expr); ;
     break;}
-case 567:
+case 568:
 { context_enterIterClause (); ;
     break;}
-case 568:
+case 569:
 { setProcessingIterVars (yyvsp[-3].entry); ;
     break;}
-case 569:
+case 570:
 { 
      yyval.expr = exprNode_iter (yyvsp[-9].entry, yyvsp[-4].exprlist, yyvsp[-2].expr, yyvsp[-1].entry); 
 
    ;
     break;}
-case 570:
+case 571:
 { yyval.exprlist = exprNodeList_singleton (yyvsp[0].expr); ;
     break;}
-case 571:
+case 572:
 { nextIterParam (); ;
     break;}
-case 572:
+case 573:
 { yyval.exprlist = exprNodeList_push (yyvsp[-3].exprlist, yyvsp[0].expr); ;
     break;}
-case 573:
+case 574:
 { yyval.expr = exprNode_iterExpr (yyvsp[0].expr); ;
     break;}
-case 574:
+case 575:
 { yyval.expr = exprNode_iterId (yyvsp[0].entry); ;
     break;}
-case 575:
+case 576:
 { uentry ue = coerceIterId (yyvsp[0].cname);
 
                      if (uentry_isValid (ue)) 
@@ -4813,41 +4843,38 @@ case 575:
                        }
                    ;
     break;}
-case 576:
+case 577:
 { yyval.expr = exprNode_iterNewId (yyvsp[0].cname); ;
     break;}
-case 578:
+case 579:
 { yyval.expr = exprNode_combineLiterals (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
-case 580:
+case 581:
 { yyval.expr = exprNode_addParens (yyvsp[-2].tok, yyvsp[-1].expr); ;
     break;}
-case 582:
-{ yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ;
-    break;}
 case 583:
-{ yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ;
+{ yyval.expr = exprNode_arrayFetch (yyvsp[-3].expr, yyvsp[-1].expr); ;
     break;}
 case 584:
-{ yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].exprlist); ;
+{ yyval.expr = exprNode_functionCall (yyvsp[-2].expr, exprNodeList_new ()); ;
     break;}
 case 585:
-{ yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ;
+{ yyval.expr = exprNode_functionCall (yyvsp[-3].expr, yyvsp[-1].exprlist); ;
     break;}
 case 586:
-{ yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ;
+{ yyval.expr = exprNode_vaArg (yyvsp[-5].tok, yyvsp[-3].expr, yyvsp[-1].qtyp); ;
     break;}
 case 587:
-{ yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ;
+{ yyval.expr = exprNode_fieldAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ;
     break;}
 case 588:
-{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
+{ yyval.expr = exprNode_arrowAccess (yyvsp[-4].expr, yyvsp[-2].tok, yyvsp[-1].cname); ;
     break;}
 case 589:
 { yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
-case 591:
-{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
+case 590:
+{ yyval.expr = exprNode_postOp (yyvsp[-1].expr, yyvsp[0].tok); ;
     break;}
 case 592:
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
@@ -4871,33 +4898,33 @@ case 598:
 { yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 599:
+{ yyval.expr = exprNode_preOp (yyvsp[0].expr, yyvsp[-1].tok); ;
+    break;}
+case 600:
 { yyval.expr = yyvsp[0].expr; ;
     break;}
-case 601:
+case 602:
 { yyval.expr = exprNode_cast (yyvsp[-3].tok, yyvsp[0].expr, yyvsp[-2].qtyp); ;
     break;}
-case 603:
-{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
-    break;}
 case 604:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 605:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 607:
+case 606:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 608:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 610:
+case 609:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 611:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 613:
+case 612:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 614:
@@ -4909,38 +4936,38 @@ case 615:
 case 616:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 618:
+case 617:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 619:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 621:
+case 620:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 623:
+case 622:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 625:
+case 624:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 627:
+case 626:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 629:
+case 628:
 { yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
-case 631:
-{ context_enterTrueClause (yyvsp[-1].expr); ;
+case 630:
+{ yyval.expr = exprNode_op (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 632:
-{ context_enterFalseClause (yyvsp[-4].expr); ;
+{ context_enterTrueClause (yyvsp[-1].expr); ;
     break;}
 case 633:
-{ yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ;
+{ context_enterFalseClause (yyvsp[-4].expr); ;
     break;}
-case 635:
-{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
+case 634:
+{ yyval.expr = exprNode_cond (yyvsp[-6].expr, yyvsp[-3].expr, yyvsp[0].expr); ;
     break;}
 case 636:
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
@@ -4973,71 +5000,71 @@ case 645:
 { yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 646:
-{ yyval.entry = yyvsp[0].entry; ;
+{ yyval.expr = exprNode_assign (yyvsp[-2].expr, yyvsp[0].expr, yyvsp[-1].tok); ;
     break;}
 case 647:
-{ yyval.entry = uentry_undefined; ;
+{ yyval.entry = yyvsp[0].entry; ;
     break;}
 case 648:
-{ context_enterDoWhileClause (); yyval.tok = yyvsp[0].tok; ;
+{ yyval.entry = uentry_undefined; ;
     break;}
 case 649:
-{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ context_enterDoWhileClause (); yyval.tok = yyvsp[0].tok; ;
     break;}
 case 650:
-{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
+{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 651:
-{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
     break;}
 case 652:
-{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 653:
-{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
+{ yyval.expr = exprNode_while (yyvsp[-1].expr, yyvsp[0].expr); context_exitWhileClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 654:
-{ yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
+{ yyval.expr = exprNode_statement (exprNode_doWhile (yyvsp[-5].expr, yyvsp[-2].expr), yyvsp[0].tok); ;
     break;}
 case 655:
-{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
+{ yyval.expr = exprNode_doWhile (yyvsp[-4].expr, yyvsp[-1].expr); ;
     break;}
 case 656:
-{ yyval.expr = exprNode_goto (yyvsp[-1].cname); ;
+{ yyval.expr = exprNode_for (yyvsp[-1].expr, yyvsp[0].expr); context_exitForClause (yyvsp[-1].expr, yyvsp[0].expr); ;
     break;}
 case 657:
-{ yyval.expr = exprNode_continue (yyvsp[-1].tok, BADTOK); ;
+{ yyval.expr = exprNode_goto (yyvsp[-1].cname); ;
     break;}
 case 658:
-{ yyval.expr = exprNode_continue (yyvsp[-2].tok, QINNERCONTINUE); ;
+{ yyval.expr = exprNode_continue (yyvsp[-1].tok, BADTOK); ;
     break;}
 case 659:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, BADTOK); ;
+{ yyval.expr = exprNode_continue (yyvsp[-2].tok, QINNERCONTINUE); ;
     break;}
 case 660:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSWITCHBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, BADTOK); ;
     break;}
 case 661:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QLOOPBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSWITCHBREAK); ;
     break;}
 case 662:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QINNERBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QLOOPBREAK); ;
     break;}
 case 663:
-{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSAFEBREAK); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QINNERBREAK); ;
     break;}
 case 664:
-{ yyval.expr = exprNode_nullReturn (yyvsp[-1].tok); ;
+{ yyval.expr = exprNode_break (yyvsp[-1].tok, QSAFEBREAK); ;
     break;}
 case 665:
+{ yyval.expr = exprNode_nullReturn (yyvsp[-1].tok); ;
+    break;}
+case 666:
 { yyval.expr = exprNode_return (yyvsp[-1].expr); ;
     break;}
-case 667:
+case 668:
 { ; ;
     break;}
-case 670:
-{ yyval.cname = uentry_getName (yyvsp[0].entry); ;
-    break;}
 case 671:
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
@@ -5045,9 +5072,12 @@ case 672:
 { yyval.cname = uentry_getName (yyvsp[0].entry); ;
     break;}
 case 673:
+{ yyval.cname = uentry_getName (yyvsp[0].entry); ;
+    break;}
+case 674:
 { yyval.cname = yyvsp[0].cname; ;
     break;}
-case 675:
+case 676:
 { yyval.ctyp = ctype_unknown; ;
     break;}
 }
index 41fbca60e39007817a4637a9c68f40336880e7e8..d2f428b523681e16f11836655cf793fa1b922b18 100644 (file)
@@ -1502,9 +1502,9 @@ iterDefStmt
  | error { $$ = exprNode_makeError (); }
 
 iterSelectionStmt
- : ifPred iterDefStmt 
+ : ifPred { exprNode_checkIfPred ($1); } iterDefStmt 
    { /* don't: context_exitTrueClause ($1, $2); */
-     $$ = exprNode_if ($1, $2); 
+     $$ = exprNode_if ($1, $3); 
    }
 
 openScope
@@ -1633,7 +1633,12 @@ expressionStmtErr
 
 ifPred
  : CIF TLPAREN expr TRPAREN 
-   { $$ = $3; exprNode_produceGuards ($3); context_enterTrueClause ($3); }
+   { 
+     exprNode_produceGuards ($3); context_enterTrueClause ($3); 
+     exprNode_checkIfPred ($3);
+     $$ = $3;
+   }
+
  /*
  ** not ANSI: | CIF TLPAREN compoundStmt TRPAREN 
  **             { $$ = $3; context_enterTrueClause (); } 
@@ -1645,7 +1650,7 @@ selectionStmt
      context_exitTrueClause ($1, $2);
      $$ = exprNode_if ($1, $2); 
    }
- | ifPred stmt CELSE { context_enterFalseClause ($1); } stmt 
+ | ifPred stmt CELSE  { context_enterFalseClause ($1); } stmt 
    {
      context_exitClause ($1, $2, $5);
      $$ = exprNode_ifelse ($1, $2, $5); 
index 23c66e1c3a5c25e3873b6bc30df4af0b13c1819e..7c1e48072e852b3091bc34c883ad0fefba733789 100644 (file)
@@ -1035,7 +1035,9 @@ context_setMode (cstring s)
          FLG_EXPORTLOCAL,
 
          FLG_USERELEASED, FLG_ALIASUNIQUE, FLG_MAYALIASUNIQUE,
-         FLG_MUSTFREE, FLG_MUSTDEFINE, FLG_GLOBSTATE, 
+         FLG_MUSTFREEONLY, 
+         FLG_MUSTFREEFRESH,
+         FLG_MUSTDEFINE, FLG_GLOBSTATE, 
          FLG_COMPDESTROY, FLG_MUSTNOTALIAS,
          FLG_MEMIMPLICIT,
          FLG_BRANCHSTATE, 
@@ -1157,7 +1159,9 @@ context_setMode (cstring s)
          FLG_IMMEDIATETRANS,
          FLG_ONLYUNQGLOBALTRANS,
          FLG_USERELEASED, FLG_ALIASUNIQUE, FLG_MAYALIASUNIQUE,
-         FLG_MUSTFREE, FLG_MUSTDEFINE, FLG_GLOBSTATE, 
+         FLG_MUSTFREEONLY,
+         FLG_MUSTFREEFRESH,
+         FLG_MUSTDEFINE, FLG_GLOBSTATE, 
          FLG_COMPDESTROY, FLG_MUSTNOTALIAS,
          FLG_MEMIMPLICIT,
          FLG_BRANCHSTATE, 
@@ -1267,7 +1271,9 @@ context_setMode (cstring s)
          FLG_UNKNOWNINITTRANS,
 
          FLG_USERELEASED, FLG_ALIASUNIQUE, FLG_MAYALIASUNIQUE,
-         FLG_MUSTFREE, FLG_MUSTDEFINE, FLG_GLOBSTATE, 
+         FLG_MUSTFREEONLY,
+         FLG_MUSTFREEFRESH,
+         FLG_MUSTDEFINE, FLG_GLOBSTATE, 
          FLG_COMPDESTROY, FLG_MUSTNOTALIAS,
          FLG_MEMIMPLICIT,
          FLG_BRANCHSTATE, 
@@ -3984,6 +3990,10 @@ context_setFlagAux (flagcode f, bool b, bool inFile,
       DOSET (FLG_NULLPASS, b);
       DOSET (FLG_NULLRET, b);
       break;
+    case FLG_MUSTFREE:
+      DOSET (FLG_MUSTFREEONLY, b);
+      DOSET (FLG_MUSTFREEFRESH, b);
+      break;
     case FLG_MEMCHECKS:
       DOSET (FLG_NULLSTATE, b);
       DOSET (FLG_NULLDEREF, b);
@@ -3997,7 +4007,8 @@ context_setFlagAux (flagcode f, bool b, bool inFile,
       DOSET (FLG_USERELEASED, b);
       DOSET (FLG_ALIASUNIQUE, b);
       DOSET (FLG_MAYALIASUNIQUE, b);
-      DOSET (FLG_MUSTFREE, b);
+      DOSET (FLG_MUSTFREEONLY, b);
+      DOSET (FLG_MUSTFREEFRESH, b);
       DOSET (FLG_MUSTDEFINE, b);
       DOSET (FLG_GLOBSTATE, b); 
       DOSET (FLG_COMPDESTROY, b);
index 0072539dbb56bffea6e8a7a5c2002b281c02ad27..ce36b71ea3bb0a51faf927952154aec2775482a7 100644 (file)
@@ -822,7 +822,7 @@ void exprNode_checkMacroBody (/*@only@*/ exprNode e)
                case XPR_STRINGLITERAL: case XPR_NUMLIT:
                case XPR_FACCESS: case XPR_OFFSETOF:
 
-                 checkReturnTransfer (e, hdr);
+                 transferChecks_return (e, hdr);
                  break;
 
                  /* these expressions don't */
@@ -1551,7 +1551,7 @@ static void checkSafeReturnExpr (/*@notnull@*/ exprNode e)
                sRef_unparseFull (e->sref),
                uentry_unparse (rval)));
 
-      checkReturnTransfer (e, rval);
+      transferChecks_return (e, rval);
 
       DPRINTF (("After return: %s / %s / %s",
                exprNode_unparse (e),
index 29d0e566bc604aef9517177f6574bc880dd13463..60ed4421604dee39c54616a47a9b997ae11b468a 100644 (file)
@@ -6773,6 +6773,11 @@ bool exprNode_isEmptyStatement (exprNode e)
          && (lltok_isSemi (exprData_getTok (e->edata))));
 }
 
+void exprNode_checkIfPred (exprNode pred)
+{
+  exprNode_checkPred (cstring_makeLiteralTemp ("if"), pred);
+}
+
 exprNode exprNode_if (/*@only@*/ exprNode pred, /*@only@*/ exprNode tclause)
 {
   exprNode ret;
@@ -6822,8 +6827,8 @@ exprNode exprNode_if (/*@only@*/ exprNode pred, /*@only@*/ exprNode tclause)
             message ("Predicate always exits: %s", exprNode_unparse (pred)),
             exprNode_loc (pred));
        }
-
-      exprNode_checkPred (cstring_makeLiteralTemp ("if"), pred);
+      
+      /*! exprNode_checkPred (cstring_makeLiteralTemp ("if"), pred); */ /*@i523@*/
       exprNode_checkUse (pred, pred->sref, pred->loc);
       
       if (!exprNode_isError (tclause))
@@ -6952,7 +6957,7 @@ exprNode exprNode_ifelse (/*@only@*/ exprNode pred,
             exprNode_loc (pred));
        }
       
-      exprNode_checkPred (cstring_makeLiteralTemp ("if"), pred);
+      /*@i3423 exprNode_checkPred (cstring_makeLiteralTemp ("if"), pred);*/
       exprNode_checkUse (ret, pred->sref, pred->loc);
       
       exprNode_mergeCondUSs (ret, tclause, eclause);
@@ -10262,7 +10267,7 @@ checkOneArg (uentry ucurrent, /*@notnull@*/ exprNode current,
            }
        }
       
-      checkPassTransfer (current, ucurrent, isSpec, fcn, argno, totargs);
+      transferChecks_passParam (current, ucurrent, isSpec, fcn, argno, totargs);
       exprNode_mergeUSs (fcn, current);
     }
 }
@@ -10856,11 +10861,11 @@ doAssign (/*@notnull@*/ exprNode e1, /*@notnull@*/ exprNode e2, bool isInit)
        {
            DPRINTF (("Check init: %s / %s",
                      exprNode_unparse (e1), exprNode_unparse (e2)));
-         checkInitTransfer (e1, e2); 
+         transferChecks_initialization (e1, e2); 
        }
       else
        {
-         checkAssignTransfer (e1, e2); 
+         transferChecks_assign (e1, e2); 
        }
     }
   else
index 51bc4266b9f55aeb63d0097ab1ff2793cbb78164..3f453e6e1d0ffb784b7d4c67f986a883ac18ab16 100644 (file)
@@ -1939,14 +1939,30 @@ static flaglist flags =
   },   
   {
     FK_MEMORY, FK_LEAK, modeFlag,
-    "mustfree",
-    FLG_MUSTFREE,
+    "mustfreefresh",
+    FLG_MUSTFREEFRESH,
+    "freshly allocated storage not released before return or scope exit",
+    "A memory leak has been detected. Storage allocated locally "
+    "is not released before the last reference to it is lost.",
+    0, 0
+  },
+  {
+    FK_MEMORY, FK_LEAK, modeFlag,
+    "mustfreeonly",
+    FLG_MUSTFREEONLY,
     "only storage not released before return or scope exit",
-    "A memory leak has been detected. Newly-allocated or "
-    "only-qualified storage is not released before the last "
+    "A memory leak has been detected. Only-qualified storage is not released before the last "
     "reference to it is lost.",
     0, 0
   },
+  {
+    FK_MEMORY, FK_LEAK, specialFlag,
+    "mustfree",
+    FLG_MUSTFREE,
+    "fresh or only storage not released before return or scope exit (sets mustfreefresh and mustfreeonly)",
+    "A memory leak has been detected.",
+    0, 0
+  },
   {
     FK_MEMORY, FK_NONE, modeFlag,
     "branchstate",
index 9123004d47bd81dcbf01a720234c14607dd9e5c9..a223d15d247d8f247dec12b54e547d38b12c4f9d 100644 (file)
@@ -252,13 +252,13 @@ llsuppresshint2 (char c, flagcode f1, flagcode f2)
            {
              if (cstring_isDefined (desc))
                {
-                 llgenhint (message ("%s (Setting %h%s will suppress message)", desc,
+                 llgenhint (message ("%s (Use %h%s to inhibit warning)", desc,
                                      c,
                                      flagcode_unparse (f1)));
                }
              else
                {
-                 llgenhint (message ("(Setting %h%s will suppress message)", 
+                 llgenhint (message ("(Use %h%s to inhibit warning)", 
                                      c, flagcode_unparse (f1)));
                }
            }
@@ -266,7 +266,7 @@ llsuppresshint2 (char c, flagcode f1, flagcode f2)
            {
              if (cstring_isDefined (desc))
                {
-                 llgenhint (message ("%s (Setting either %h%s or %h%s will suppress message)", desc, 
+                 llgenhint (message ("%s (Use either %h%s or %h%s to inhibit warning)", desc, 
                                      c,
                                      flagcode_unparse (f1),
                                      c,
@@ -274,7 +274,7 @@ llsuppresshint2 (char c, flagcode f1, flagcode f2)
                }
              else
                {
-                 llgenhint (message ("(Setting either %h%s or %h%s will suppress message)", c,
+                 llgenhint (message ("(Use either %h%s or %h%s to inhibit warning)", c,
                                      flagcode_unparse (f1),
                                      c, flagcode_unparse (f2)));
                }
@@ -301,12 +301,12 @@ llsuppresshint (char c, flagcode f)
 
          if (cstring_isDefined (desc))
            {
-             llgenhint (message ("%s (%h%s will suppress message)", desc, c,
+             llgenhint (message ("%s (Use %h%s to inhibit warning)", desc, c,
                                  flagcode_unparse (f)));
            }
          else
            {
-             llgenhint (message ("(%h%s will suppress message)", c,
+             llgenhint (message ("(Use %h%s to inhibit warning)", c,
                                  flagcode_unparse (f)));
            }
        }
index 095dd2518cd577c296c140996bb5a1449a7e60e2..83c026fe9b55c291cee37657390030c150898086 100644 (file)
@@ -1537,7 +1537,7 @@ int main (int argc, char *argv[])
              }
            else
              {
-               specErrors = message ("%d spec warning%& found\n       ",
+               specErrors = message ("%d spec warning%&\n       ",
                                      nspecErrors);
                expsuccess = FALSE;
              }
@@ -1584,7 +1584,7 @@ int main (int argc, char *argv[])
                  if (!isQuiet)
                    {
                      llmsg (message ("Finished checking --- "
-                                     "%s%d code warning%& found", 
+                                     "%s%d code warning%&", 
                                      specErrors, context_numErrors ()));
                    }
 
index 8f1ec114b7c62a7496c288ce5e70dcc862eb2af0..83f370530166341bb33fba79a5aca1db5048a285 100644 (file)
@@ -5173,7 +5173,29 @@ void sRef_setPartialDefinedComplete (sRef s, fileloc loc)
 
 void sRef_setDefinedComplete (sRef s, fileloc loc)
 {
+  sRef_innerAliasSetComplete (sRef_setDefined, s, loc);
+}
+
+void sRef_setDefinedCompleteDirect (sRef s, fileloc loc)
+{
+  sRefSet aliases;
+  
+  aliases = usymtab_allAliases (s);
   DPRINTF (("Set defined complete: %s", sRef_unparseFull (s)));
+  DPRINTF (("All aliases: %s", sRefSet_unparseFull (aliases)));
+  
+  sRef_setDefined (s, loc);
+
+  sRefSet_realElements (aliases, current)
+    {
+      if (sRef_isValid (current))
+       {
+         current = sRef_updateSref (current);
+         sRef_setDefined (current, loc);
+       }
+    } end_sRefSet_realElements;
+  
+  sRefSet_free (aliases);
   sRef_innerAliasSetComplete (sRef_setDefined, s, loc);
 }
 
@@ -5408,8 +5430,8 @@ void sRef_setNullState (sRef s, nstate n, fileloc loc)
     }
 }
 
-void sRef_setNullTerminatedStateInnerComplete (sRef s, struct s_bbufinfo b, /*@unused@*/ fileloc loc) {
-   
+void sRef_setNullTerminatedStateInnerComplete (sRef s, struct s_bbufinfo b, /*@unused@*/ fileloc loc) 
+{
   switch (b.bufstate) {
      case BB_NULLTERMINATED:
          sRef_setNullTerminatedState (s);
@@ -8463,7 +8485,6 @@ sRef_innerAliasSetComplete (void (predf) (sRef, fileloc), sRef s, fileloc loc)
       inner = s->info->field->rec;
       aliases = usymtab_allAliases (inner);
       ct = sRef_getType (inner);
-
       
       sRefSet_realElements (aliases, current)
        {
@@ -8525,8 +8546,7 @@ sRef_innerAliasSetCompleteParam (void (predf) (sRef, sRef), sRef s, sRef t)
       inner = s->info->ref;
       aliases = usymtab_allAliases (inner);
       ct = sRef_getType (inner);
-      
-      
+            
       sRefSet_realElements (aliases, current)
        {
          if (sRef_isValid (current))
index d5c264e1253c7aa762497445e6752f2ccc804cb4..a362a64daf195f641b9e1b71cbc2db1d2467bb2f 100644 (file)
@@ -412,7 +412,7 @@ flagcode stateClause_preErrorCode (stateClause cl)
     case SP_ALLOCATES: /*@fallthrough@*/ 
     case SP_DEFINES:
     case SP_SETS:
-      return FLG_MUSTFREE;
+      return FLG_MUSTFREEONLY;
     case SP_RELEASES:
       return FLG_USEDEF;
     case SP_GLOBAL:
@@ -512,7 +512,7 @@ flagcode stateClause_postErrorCode (stateClause cl)
     case SP_SETS:     
       return FLG_COMPDEF;
     case SP_RELEASES:
-      return FLG_MUSTFREE;
+      return FLG_MUSTFREEONLY;
     case SP_GLOBAL:
       BADBRANCH;
     case SP_QUAL:
index 9e11244eb57a33b1d130a4e473caa6489dfe8f1c..89ebe754cf28780cf4495108e91faeddb1244261 100644 (file)
 # include "basic.h"
 # include "transferChecks.h"
 
+/* transfer types: */
+typedef enum
+{
+  TT_FCNRETURN,
+  TT_DOASSIGN,
+  TT_FIELDASSIGN,
+  TT_FCNPASS,
+  TT_GLOBPASS,
+  TT_GLOBRETURN,
+  TT_PARAMRETURN,
+  TT_LEAVETRANS,
+  TT_GLOBINIT
+} transferKind;
+
 static void checkStructTransfer (exprNode p_lhs, sRef p_slhs, exprNode p_rhs, sRef p_srhs,
                                 fileloc p_loc, transferKind p_tt);
 static void checkMetaStateConsistent (/*@exposed@*/ sRef p_fref, sRef p_tref, 
@@ -880,10 +894,8 @@ checkCompletelyDefined (exprNode fexp, /*@exposed@*/ sRef fref, sRef ofref,
                        {
                          sRef rb = sRef_getRootBase (fref);
                          sRef_showStateInfo (fref);
-
-                         DPRINTF (("fref: %s", sRef_unparseFull (fref)));
-                         DPRINTF (("rb: %s", sRef_unparseFull (rb)));
-                         sRef_setDefinedComplete (rb, loc);
+                         
+                         sRef_setDefinedCompleteDirect (rb, loc);
                        }
                    }
                }
@@ -1278,13 +1290,14 @@ static bool
                            fileloc p_loc, int p_depth, dscCode p_desc,
                            bool p_hideErrors);
 
-bool checkGlobalDestroyed (sRef fref, fileloc loc)
+bool transferChecks_globalDestroyed (sRef fref, fileloc loc)
 {
+  DPRINTF (("Global destroyed: %s", sRef_unparseFull (fref)));
   return (checkCompletelyDestroyed (exprNode_undefined, fref, TRUE,
                                    loc, 0, DSC_GLOB, FALSE));
 }
 
-void checkLocalDestroyed (sRef fref, fileloc loc)
+void transferChecks_localDestroyed (sRef fref, fileloc loc)
 {
   if (sRef_isObserver (fref) || sRef_isExposed (fref)
       || sRef_isPartial (fref))
@@ -1298,7 +1311,7 @@ void checkLocalDestroyed (sRef fref, fileloc loc)
     }
 }
 
-void checkStructDestroyed (sRef fref, fileloc loc)
+void transferChecks_structDestroyed (sRef fref, fileloc loc)
 {
   DPRINTF (("Check struct destroyed: %s", sRef_unparse (fref)));
 
@@ -1377,23 +1390,38 @@ static bool
       }
   }
 
-  if (sRef_isPdefined (fref) && !context_getFlag (FLG_STRICTDESTROY))
+  ct = ctype_realType (sRef_getType (fref));
+
+  if (sRef_isPdefined (fref) 
+      && ctype_isAP (ct)
+      && !context_getFlag (FLG_STRICTDESTROY)) 
     {
+      /*
+      ** Don't report errors for array elements (unless strictdestroy)
+      ** when at least one appears to have been destroyed.
+      */
+
       DPRINTF (("Partial: %s", sRef_unparseFull (fref)));
-      hideErrors = TRUE; /* Don't report any more errors, but still change ownership. */
+      hideErrors = TRUE;
+      /* Don't report any more errors, but still change ownership. */
     }
-
+  
   if (usymtab_isDefinitelyNull (fref)) 
     {
       DPRINTF (("Probably null!"));
       return TRUE;
     }
 
-  if (!context_getFlag (FLG_COMPDESTROY)) return TRUE;
-  if (!context_getFlag (FLG_MUSTFREE)) return TRUE;
+  /*
+  ** evans 2002-01-02: removed this
+  ** if (!context_flagOn (FLG_COMPDESTROY, loc)) 
+  ** {
+  ** return TRUE;
+  ** }
+  ** 
+  ** if (!context_getFlag (FLG_MUSTFREEONLY)) return TRUE;
+  */
   
-  ct = ctype_realType (sRef_getType (fref));
-
   DPRINTF (("Here: %s", ctype_unparse (ct)));
 
   if (!topLevel)
@@ -1601,7 +1629,7 @@ static bool
 }
 
 void
-checkReturnTransfer (exprNode fexp, uentry rval)
+transferChecks_return (exprNode fexp, uentry rval)
 {
   sRef uref = uentry_getSref (rval);
   sRef rref = sRef_makeNew (sRef_getType (uref), uref, cstring_undefined);
@@ -1827,8 +1855,8 @@ static void
 */
 
 void
-checkPassTransfer (exprNode fexp, uentry arg, bool isSpec,
-                  /*@dependent@*/ exprNode fcn, int argno, int totargs)
+transferChecks_passParam (exprNode fexp, uentry arg, bool isSpec,
+                         /*@dependent@*/ exprNode fcn, int argno, int totargs)
 {
   sRef tref = uentry_getSref (arg);
   sRef fref = exprNode_getSref (fexp);
@@ -2134,13 +2162,14 @@ checkPassTransfer (exprNode fexp, uentry arg, bool isSpec,
        
        {
          voptgenerror 
-           (FLG_MUSTFREE,
+           (FLG_MUSTFREEFRESH,
             message ("New fresh storage %q(type %s) passed as %s (not released): %s",
                      sRef_unparseOpt (fref),
                      ctype_unparse (sRef_getType (fref)),
                      alkind_unparse (sRef_getAliasKind (tref)),
                      exprNode_unparse (fexp)),
             exprNode_loc (fexp));
+
          DPRINTF (("Fresh: %s", sRef_unparseFull (fref)));
        }
       else 
@@ -2152,7 +2181,7 @@ checkPassTransfer (exprNode fexp, uentry arg, bool isSpec,
              if (!alkind_isError (ak))
                {
                  voptgenerror 
-                   (FLG_MUSTFREE,
+                   (FLG_MUSTFREEFRESH,
                     message ("New reference %q(type %s) passed as %s (not released): %s",
                              sRef_unparseOpt (fref),
                              ctype_unparse (sRef_getType (fref)),
@@ -2229,19 +2258,19 @@ checkPassTransfer (exprNode fexp, uentry arg, bool isSpec,
 }
 
 void
-checkGlobReturn (uentry glob)
+transferChecks_globalReturn (uentry glob)
 {
   sRef_protectDerivs ();
   checkGlobTrans (glob, TT_GLOBRETURN);
   sRef_clearProtectDerivs ();
 }
 
-void checkParamReturn (uentry actual)
+void transferChecks_paramReturn (uentry actual)
 {
   checkLeaveTrans (actual, TT_PARAMRETURN);
 }
 
-void checkLoseRef (uentry actual)
+void transferChecks_loseReference (uentry actual)
 {
   checkLeaveTrans (actual, TT_LEAVETRANS);
 }
@@ -2281,8 +2310,11 @@ static void
 checkGlobTrans (uentry glob, transferKind type)
 {
   sRef eref = uentry_getOrigSref (glob);
-  
-  (void) checkCompletelyDefined (exprNode_undefined, uentry_getSref (glob), uentry_getSref (glob),
+  DPRINTF (("Completely defined: %s", uentry_unparseFull (glob)));
+
+  (void) checkCompletelyDefined (exprNode_undefined, uentry_getSref (glob), 
+                                uentry_getSref (glob),
                                 exprNode_undefined, eref, 
                                 TRUE, FALSE, FALSE,
                                 g_currentloc, type, 0, TRUE);
@@ -2370,7 +2402,7 @@ static void checkStructTransfer (exprNode lhs, sRef slhs, exprNode rhs, sRef srh
 }
 
 void
-checkInitTransfer (exprNode lhs, exprNode rhs)
+transferChecks_initialization (exprNode lhs, exprNode rhs)
 {
   sRef slhs = exprNode_getSref (lhs);
   
@@ -2383,12 +2415,12 @@ checkInitTransfer (exprNode lhs, exprNode rhs)
     }
   else
     {
-      checkAssignTransfer (lhs, rhs);
+      transferChecks_assign (lhs, rhs);
     }
 }
 
 void
-checkAssignTransfer (exprNode lhs, exprNode rhs)
+transferChecks_assign (exprNode lhs, exprNode rhs)
 {
   sRef slhs = exprNode_getSref (lhs);
   sRef srhs = exprNode_getSref (rhs);
@@ -2578,83 +2610,82 @@ checkTransferAssignAux (sRef fref, exprNode fexp, /*@unused@*/ bool ffix,
       && !(sRef_same (fref, tref)) /* okay to assign to self (returned params) */
       && !(usymtab_isDefinitelyNull (tref))) 
     {
-      if (context_getFlag (FLG_MUSTFREE))
+      if (transferChecks_canLoseReference (tref, loc))
        {
-         if (canLoseReference (tref, loc))
+         ; /* no error */
+       }
+      else
+       {
+         flagcode flg = sRef_isFresh (tref) ? FLG_MUSTFREEFRESH : FLG_MUSTFREEONLY;
+
+         if (sRef_hasLastReference (tref))
            {
-             ; /* no error */
+             if (optgenerror 
+                 (flg,
+                  message ("Last reference %q to %s storage %q(type %s) not released "
+                           "before assignment: %q",
+                           sRef_unparse (tref),
+                           alkind_unparse (tkind),
+                           sRef_unparseOpt (sRef_getAliasInfoRef (tref)),
+                           ctype_unparse (sRef_getType (tref)),
+                           generateText (fexp, texp, tref, transferType)),
+                  loc))
+               {
+                 sRef_showRefLost (tref);
+               }
            }
          else
            {
-             if (sRef_hasLastReference (tref))
+             if (context_inGlobalScope ())
                {
-                 if (optgenerror 
-                     (FLG_MUSTFREE,
-                      message ("Last reference %q to %s storage %q(type %s) not released "
-                               "before assignment: %q",
-                               sRef_unparse (tref),
-                               alkind_unparse (tkind),
-                               sRef_unparseOpt (sRef_getAliasInfoRef (tref)),
-                               ctype_unparse (sRef_getType (tref)),
-                               generateText (fexp, texp, tref, transferType)),
-                      loc))
-                   {
-                     sRef_showRefLost (tref);
-                   }
+                 /* no errors for static initializations */
                }
-             else
+             else 
                {
-                 if (context_inGlobalScope ())
-                   {
-                     /* no errors for static initializations */
-                   }
-                 else 
+                 /*
+                 ** don't report this error for a[i], since it could
+                 ** be a new element.
+                 */
+                 
+                 if (alkind_isNewRef (tkind))
                    {
-                     /*
-                      ** don't report this error for a[i], since it could
-                      ** be a new element.
-                      */
-                     
-                     if (alkind_isNewRef (tkind))
-                       {
-                         if (optgenerror 
-                             (FLG_MUSTFREE,
-                              message 
-                              ("%q %q(type %s) not released before assignment: %q",
-                               cstring_makeLiteral
-                               (alkind_isKillRef (sRef_getOrigAliasKind (tref))
-                                ? "Kill reference parameter" : "New reference"),
-                               sRef_unparseOpt (tref),
-                               ctype_unparse (sRef_getType (tref)),
-                               generateText (fexp, texp, tref, transferType)),
-                              loc))
-                           {
-                             sRef_showAliasInfo (tref);
-                             sRef_setAliasKind (tref, AK_ERROR, loc);
-                           }
-                       }
-                     else if
-                       (!(sRef_isUnknownArrayFetch (tref)
-                          && !context_getFlag (FLG_STRICTDESTROY))
-                        && !sRef_isUnionField (tref)
-                        && !sRef_isRelDef (tref)
-                        && optgenerror 
-                        (FLG_MUSTFREE,
-                         message 
-                         ("%s storage %q(type %s) not released before assignment: %q",
-                          alkind_capName (tkind),
-                          sRef_unparseOpt (tref),
-                          ctype_unparse (sRef_getType (tref)),
-                          generateText (fexp, texp, tref, transferType)),
-                         loc))
-                         {
-                           sRef_showAliasInfo (tref);
-                         }
-                     else
+                     if (optgenerror 
+                         (flg,
+                          message 
+                          ("%q %q(type %s) not released before assignment: %q",
+                           cstring_makeLiteral
+                           (alkind_isKillRef (sRef_getOrigAliasKind (tref))
+                            ? "Kill reference parameter" : "New reference"),
+                           sRef_unparseOpt (tref),
+                           ctype_unparse (sRef_getType (tref)),
+                           generateText (fexp, texp, tref, transferType)),
+                          loc))
                        {
-                         ;
+                         sRef_showAliasInfo (tref);
+                         sRef_setAliasKind (tref, AK_ERROR, loc);
                        }
                    }
+                 else if
+                   (!(sRef_isUnknownArrayFetch (tref)
+                      && !context_getFlag (FLG_STRICTDESTROY))
+                    && !sRef_isUnionField (tref)
+                    && !sRef_isRelDef (tref)
+                    && optgenerror 
+                    (flg,
+                     message 
+                     ("%s storage %q(type %s) not released before assignment: %q",
+                      alkind_capName (tkind),
+                      sRef_unparseOpt (tref),
+                      ctype_unparse (sRef_getType (tref)),
+                      generateText (fexp, texp, tref, transferType)),
+                     loc))
+                   {
+                     sRef_showAliasInfo (tref);
+                   }
+                 else
+                   {
+                     ;
+                   }
                }
            }
        }
@@ -3861,7 +3892,7 @@ checkTransferAux (exprNode fexp, /*@exposed@*/ sRef fref, bool ffix,
              && ctype_isMutable (exprNode_getType (fexp))
              && (!iseitherassign || sRef_isReference (tref)))
            {
-             if (canLoseReference (fref, loc))
+             if (transferChecks_canLoseReference (fref, loc))
                {
                  ;
                }
@@ -4408,7 +4439,7 @@ static /*@exposed@*/ sRef
   return sRef_undefined;
 }
 
-bool canLoseReference (/*@dependent@*/ sRef sr, fileloc loc)
+bool transferChecks_canLoseReference (/*@dependent@*/ sRef sr, fileloc loc)
 {
   bool gotone = FALSE;
   sRefSet ab = usymtab_aliasedBy (sr); /* yes, really mean aliasedBy */
index 93a53c792d034e4b5382652eac3da7a6dc58b01e..43ab21ec6a4d474bce8bbcfb7ed0d1926d614870 100644 (file)
@@ -3696,6 +3696,8 @@ checkGlobalReturn (uentry glob, sRef orig)
            {
              ctype ct = ctype_realType (uentry_getType (glob));
 
+             DPRINTF (("Check global destroyed: %s", uentry_unparseFull (glob)));
+
              if (ctype_isVisiblySharable (ct))
                {
                  if (optgenerror 
@@ -3712,7 +3714,7 @@ checkGlobalReturn (uentry glob, sRef orig)
              else
                {
                  sRef_protectDerivs ();
-                 (void) checkGlobalDestroyed (sr, g_currentloc);
+                 (void) transferChecks_globalDestroyed (sr, g_currentloc);
                  sRef_clearProtectDerivs ();
                }
            }
@@ -3771,7 +3773,7 @@ checkGlobalReturn (uentry glob, sRef orig)
                }
              else
                {
-                 checkGlobReturn (glob);
+                 transferChecks_globalReturn (glob);
                }
            }
        }
@@ -3785,7 +3787,7 @@ checkGlobalReturn (uentry glob, sRef orig)
 void usymtab_checkFinalScope (bool isReturn)
   /*@globals utab@*/
 {
-  bool mustFree = context_getFlag (FLG_MUSTFREE);
+  bool mustFree = context_getFlag (FLG_MUSTFREEONLY) || context_getFlag (FLG_MUSTFREEFRESH); /*@i423 remove this mustFree */
   bool mustDefine = context_getFlag (FLG_MUSTDEFINE);
   /* bool mustNotAlias = context_getFlag (FLG_MUSTNOTALIAS); */
   sRefSet checked = sRefSet_new ();
@@ -3925,7 +3927,7 @@ void usymtab_checkFinalScope (bool isReturn)
                      
                      if (sRefSet_isEmpty (als))
                        {
-                         checkLocalDestroyed (sr, g_currentloc);
+                         transferChecks_localDestroyed (sr, g_currentloc);
                        }
                      else
                        {
@@ -3954,7 +3956,7 @@ void usymtab_checkFinalScope (bool isReturn)
                        
                        if (!isReturn)
                          {
-                           if (canLoseReference (sr, g_currentloc))
+                           if (transferChecks_canLoseReference (sr, g_currentloc))
                              {
                                DPRINTF (("Can lose!"));
                                hasError = FALSE;
@@ -3968,7 +3970,7 @@ void usymtab_checkFinalScope (bool isReturn)
                                sRef ar = sRef_getAliasInfoRef (sr);
                                
                                if (optgenerror 
-                                   (FLG_MUSTFREE,
+                                   (sRef_isFresh (ar) ? FLG_MUSTFREEFRESH : FLG_MUSTFREEONLY,
                                     message
                                     ("Last reference %q to %s storage %qnot %q before %q",
                                      sRef_unparse (sr),
@@ -3986,7 +3988,7 @@ void usymtab_checkFinalScope (bool isReturn)
                            else if (sRef_isNewRef (sr))
                              {
                                if (optgenerror
-                                   (FLG_MUSTFREE,
+                                   (sRef_isFresh (sr) ? FLG_MUSTFREEFRESH : FLG_MUSTFREEONLY,
                                     message 
                                     ("%q %q not released before %q",
                                      cstring_makeLiteral 
@@ -4004,14 +4006,14 @@ void usymtab_checkFinalScope (bool isReturn)
                              {
                                if (ctype_isRealSU (sRef_getType (sr)))
                                  {
-                                   checkStructDestroyed (sr, g_currentloc);
+                                   transferChecks_structDestroyed (sr, g_currentloc);
                                  }
                                else
                                  {
                                    DPRINTF (("Here we are: %s", sRef_unparseFull (sr)));
 
                                    if (optgenerror
-                                       (FLG_MUSTFREE,
+                                       (sRef_isFresh (sr) ? FLG_MUSTFREEFRESH : FLG_MUSTFREEONLY,
                                         message 
                                         ("%s storage %q not %q before %q",
                                          alkind_capName (sRef_getAliasKind (sr)),
@@ -4048,6 +4050,8 @@ void usymtab_checkFinalScope (bool isReturn)
                              cstring_makeLiteral 
                              (isReturn ? "return" : "scope exit")),
                     g_currentloc);
+
+                 DPRINTF (("sr: %s", sRef_unparseFull (sr)));
                }
            }
          
@@ -4068,7 +4072,7 @@ void usymtab_checkFinalScope (bool isReturn)
                {
                  /* and no local ref */
                  DPRINTF (("Check lose ref: %s", uentry_unparseFull (ce)));
-                 checkLoseRef (ce);
+                 transferChecks_loseReference (ce);
                }
              else
                {
@@ -4258,7 +4262,7 @@ void usymtab_checkFinalScope (bool isReturn)
                {
                  uentry param = usymtab_lookupQuiet (utab, uentry_rawName (arg));
                  DPRINTF (("Check param return: %s", uentry_unparseFull (param)));
-                 checkParamReturn (param);
+                 transferChecks_paramReturn (param);
                }
            }
        } end_uentryList_elements;
index c43e8e524f53bc71b1404f17becaa63c78d03384..386f042f1a308beeed9a12750af41dc1894fa008 100644 (file)
@@ -4,7 +4,9 @@
 AUTOMAKE_OPTIONS = 1.5 foreign
 
 ## Use this to configure diff output
-DIFFFLAGS = -u
+DIFFFLAGS = 
+
+# -u show context
 
 ## Set up the splint commands
 
index e96558a7e600694c6797a9cdd4a38494cf7d354e..bf55c75454d9904145fb1e64baf78eaaf1807ac4 100644 (file)
@@ -83,8 +83,10 @@ install_sh = @install_sh@
 
 AUTOMAKE_OPTIONS = 1.5 foreign
 
-DIFFFLAGS = -u
+DIFFFLAGS = 
 
+
+# -u show context
 SPLINT = $(top_builddir)/src/splint$(EXEEXT)
 
 ### This is horrible!  Can't we make top_builddir absolute?
index 5378daa91543ceaa139943765b2524d37cfa82b9..a100ec433505029ae075606b2bdf9d3f3ab8719c 100644 (file)
@@ -1,16 +1,16 @@
 
 controldepth.c: (in function f)
 controldepth.c:8:15: Maximum control nesting depth (2) exceeded
-  Maximum number of control levels exceeded. (-controlnestdepth will suppress
-  message)
+  Maximum number of control levels exceeded. (Use -controlnestdepth to inhibit
+  warning)
 controldepth.c:15:17: Maximum control nesting depth (2) exceeded
 
 Finished checking --- 2 code warnings, as expected
 
 controldepth.c: (in function f)
 controldepth.c:6:15: Maximum control nesting depth (1) exceeded
-  Maximum number of control levels exceeded. (-controlnestdepth will suppress
-  message)
+  Maximum number of control levels exceeded. (Use -controlnestdepth to inhibit
+  warning)
 controldepth.c:11:13: Maximum control nesting depth (1) exceeded
 
 Finished checking --- 2 code warnings, as expected
index aa9688b07e81104cceb0773a857cfd4c4c62308d..60f74ba05b3f6945272f13755c8d930f9748a6be 100644 (file)
@@ -3,19 +3,19 @@ Finished checking --- no warnings
 
 czechnames.c:5:5: Variable michelob_light name violates Czech naming
     convention.  Czech prefix michelob is not the name of a type.
-  Variable name is not consistent with Czech naming convention. (Setting either
-  -czechvars or -namechecks will suppress message)
+  Variable name is not consistent with Czech naming convention. (Use either
+  -czechvars or -namechecks to inhibit warning)
 czechnames.c:26:5: Function budweiser name is not consistent with Czech naming
                       convention.  Accessible types: pivo
   Function or iterator name is not consistent with Czech naming convention.
-  (Setting either -czechfcns or -namechecks will suppress message)
+  (Use either -czechfcns or -namechecks to inhibit warning)
 
 Finished checking --- 2 code warnings, as expected
 
 czechnames.c:26:5: Function budweiser name is not consistent with Czech naming
                       convention.  Accessible types: pivo
   Function or iterator name is not consistent with Czech naming convention.
-  (Setting either -czechfcns or -namechecks will suppress message)
+  (Use either -czechfcns or -namechecks to inhibit warning)
 
 Finished checking --- 1 code warning, as expected
 
@@ -24,8 +24,8 @@ czechnames.c:4:5: Variable pivo_pyet name violates Czech naming convention.
   Use +accessczech to allow access to type <t> in functions named <t>_<name>.
 czechnames.c:5:5: Variable michelob_light name violates Czech naming
     convention.  Czech prefix michelob is not the name of a type.
-  Variable name is not consistent with Czech naming convention. (Setting either
-  -czechvars or -namechecks will suppress message)
+  Variable name is not consistent with Czech naming convention. (Use either
+  -czechvars or -namechecks to inhibit warning)
 czechnames.c:8:17: Constant pivo_devenast name violates Czech naming
     convention. Czech prefix pivo names an abstract type that is not
     accessible.
@@ -36,7 +36,7 @@ czechnames.c:11:6: Function pivo_yedno name violates Czech naming convention.
 czechnames.c: (in function pivo_yedno)
 czechnames.c:15:11: Left operand of == is abstract type (pivo): p == 1
   An abstraction barrier is broken. If necessary, use /*@access <type>@*/ to
-  allow access to an abstract type. (-abstract will suppress message)
+  allow access to an abstract type. (Use -abstract to inhibit warning)
 czechnames.c:26:5: Function budweiser name is not consistent with Czech naming
                       convention.  Accessible types: pivo
 
index 8ba3a378258b6b6620a17441dcd05478f6fb61d2..b73884b3e633afce5b0241702fe6e0744677e26c 100644 (file)
@@ -1,25 +1,25 @@
 
 czechnames.c:26:5: Function budweiser name is not consistent with Czechoslovak
                       naming convention.
-  Function name is not consistent with Czechoslovak naming convention. (Setting
-  either -czechoslovakfcns or -namechecks will suppress message)
+  Function name is not consistent with Czechoslovak naming convention. (Use
+  either -czechoslovakfcns or -namechecks to inhibit warning)
 
 Finished checking --- 1 code warning, as expected
 
 slovaknames.c:32:5: Function budweiser name is not consistent with Czechoslovak
                        naming convention.
-  Function name is not consistent with Czechoslovak naming convention. (Setting
-  either -czechoslovakfcns or -namechecks will suppress message)
+  Function name is not consistent with Czechoslovak naming convention. (Use
+  either -czechoslovakfcns or -namechecks to inhibit warning)
 
 Finished checking --- 1 code warning, as expected
 
 slovaknames.c:5:5: Variable michelobLight name violates Slovak naming
     convention.  Slovak prefix michelob is not the name of a type.
-  Variable name is not consistent with Slovak naming convention. (Setting
-  either -slovakvars or -namechecks will suppress message)
+  Variable name is not consistent with Slovak naming convention. (Use either
+  -slovakvars or -namechecks to inhibit warning)
 slovaknames.c:32:5: Function budweiser name is not consistent with Czechoslovak
                        naming convention.
-  Function name is not consistent with Czechoslovak naming convention. (Setting
-  either -czechoslovakfcns or -namechecks will suppress message)
+  Function name is not consistent with Czechoslovak naming convention. (Use
+  either -czechoslovakfcns or -namechecks to inhibit warning)
 
 Finished checking --- 2 code warnings, as expected
index 19a2afe12b4f8e7abde16bde5c13730884cfc56c..5750c219a8a02903891f791e1a94dabaafe0b070 100644 (file)
@@ -624,7 +624,7 @@ macroparens                  4           0
 usereleased                  1           0
 compdef                      3           0
 compdestroy                  1           0
-mustfree                     3           0
+mustfreeonly                 3           0
 branchstate                  2           1
 onlytrans                    1           0
 freshtrans                   3           0
index bb894fa1da2cf18c88eb7a3ab9d54fba66f6c859..fdbbdab633c6d1b95af119da0a220fe4b59e00ce 100644 (file)
@@ -49,8 +49,8 @@ Topics:
 
 
 Command Line: Unrecognized option: asdf
-  A flag is not recognized or used in an incorrect way (-badflag will suppress
-  message)
+  A flag is not recognized or used in an incorrect way (Use -badflag to inhibit
+  warning)
 
 Finished checking --- no code processed
 
@@ -315,6 +315,8 @@ Finished checking --- no code processed
    multithreaded               
    mustdefine                  
    mustfree                    
+   mustfreefresh               
+   mustfreeonly                
    mustmod                     
    mustnotalias                
    mutrep                      
@@ -793,7 +795,11 @@ compdestroy --- all only references derivable from void pointer out only
 parameter are released
 strictdestroy --- report complete destruction errors for array elements that
 may have been released
-mustfree --- only storage not released before return or scope exit
+mustfreefresh --- freshly allocated storage not released before return or scope
+exit
+mustfreeonly --- only storage not released before return or scope exit
+mustfree --- fresh or only storage not released before return or scope exit
+(sets mustfreefresh and mustfreeonly)
 branchstate --- storage has inconsistent states of alternate paths through a
 branch
 strictbranchstate --- storage through array fetch has inconsistent states of
index 347a7278c25de45ec878f7bd0a30f3fa2312d165..37738ea7ff004993bd6b23d5f614bd3a6646a977 100644 (file)
@@ -4,7 +4,7 @@ Finished checking --- no warnings
 impabstract.c: (in function f)
 impabstract.c:11:7: Left operand of < is abstract type (mint): m < 2
   An abstraction barrier is broken. If necessary, use /*@access <type>@*/ to
-  allow access to an abstract type. (-abstract will suppress message)
+  allow access to an abstract type. (Use -abstract to inhibit warning)
 impabstract.c:13:14: Return value type mint does not match declared type int: m
   Underlying types match, but mint is an abstract type that is not accessible
   here.
@@ -17,15 +17,15 @@ impabstract.c:2:28: Mutable abstract type cint declared without pointer
   order for objects to be shared a indirection is necessary in the
   representation. A mutable type may be represented by a pointer or an abstract
   mutable type. Handles into static data are fine, too, but will generate this
-  error message unless it is suppressed. (-mutrep will suppress message)
+  error message unless it is suppressed. (Use -mutrep to inhibit warning)
 impabstract.c:2:28: Datatype cint inconsistently declared as concrete type
-  A function, variable or constant is redefined with a different type.
-  (-incondefs will suppress message)
+  A function, variable or constant is redefined with a different type. (Use
+  -incondefs to inhibit warning)
    impabstract.lcl:2:1: Specification of cint
 impabstract.c: (in function f)
 impabstract.c:6:7: Left operand of > is abstract type (cint): c > 3
   An abstraction barrier is broken. If necessary, use /*@access <type>@*/ to
-  allow access to an abstract type. (-abstract will suppress message)
+  allow access to an abstract type. (Use -abstract to inhibit warning)
 impabstract.c:8:14: Return value type cint does not match declared type int: c
   Underlying types match, but cint is an abstract type that is not accessible
   here.
index 4a14b07165b1dac23df640a1acad6b73899024bd..d73f59fe318316f6f6a835cbf2088397470fb234 100644 (file)
@@ -2,12 +2,12 @@
 noeffect.c: (in macro exprNode_swap)
 noeffect.c:3:59: Assignment to macro parameter: e1
   A macro parameter is used as the left side of an assignment expression. This
-  exhibits behavior that could not be implemented by a function. (-macroassign
-  will suppress message)
+  exhibits behavior that could not be implemented by a function. (Use
+  -macroassign to inhibit warning)
 noeffect.c:3:72: Assignment to macro parameter: e2
 noeffect.c:2:18: File static function exprNode_swap declared but not used
   A function is declared but not used. Use /*@unused@*/ in front of function
-  header to suppress message. (-fcnuse will suppress message)
+  header to suppress message. (Use -fcnuse to inhibit warning)
    noeffect.c:3: Definition of exprNode_swap
 
 Finished checking --- 3 code warnings, as expected
index c02a08ccaf2fe72c8a09bd19c12c5b5009f20554..68a31a2bbd0a9d6a63cf24c4de10cfe15c0ae1b3 100644 (file)
@@ -1,25 +1,25 @@
 
 preds.c: (in function f)
 preds.c:10:7: Test expression for if not bool, type int: *p
-  Test expression type is not boolean or int. (-predboolint will suppress
-  message)
+  Test expression type is not boolean or int. (Use -predboolint to inhibit
+  warning)
 preds.c:15:8: Operand of ! is non-boolean (int): !(*p)
   The operand of a boolean operator is not a boolean. Use +ptrnegate to allow !
-  to be used on pointers. (-boolops will suppress message)
+  to be used on pointers. (Use -boolops to inhibit warning)
 preds.c:20:7: Test expression for if is assignment expression: b1 = b2
   The condition test is an assignment expression. Probably, you mean to use ==
   instead of =. If an assignment is intended, add an extra parentheses nesting
-  (e.g., if ((a = b)) ...) to suppress this message. (-predassign will suppress
-  message)
+  (e.g., if ((a = b)) ...) to suppress this message. (Use -predassign to
+  inhibit warning)
 preds.c:25:7: Test expression for if not bool, type char: (c = 'a')
-  Test expression type is not boolean. (-predboolothers will suppress message)
+  Test expression type is not boolean. (Use -predboolothers to inhibit warning)
 preds.c:30:7: Use of == with bool variables (risks inconsistency because of
                  multiple true values): b1 == b2
   Two bool values are compared directly using a C primitive. This may produce
   unexpected results since all non-zero values are considered TRUE, so
   different TRUE values may not be equal. The file bool.h (included in
-  splint/lib) provides bool_equal for safe bool comparisons. (-boolcompare will
-  suppress message)
+  splint/lib) provides bool_equal for safe bool comparisons. (Use -boolcompare
+  to inhibit warning)
 preds.c:35:7: Test expression for if not bool, type char: c
 
 Finished checking --- 6 code warnings, as expected
@@ -28,38 +28,38 @@ preds.c: (in function f)
 preds.c:20:7: Test expression for if is assignment expression: b1 = b2
   The condition test is an assignment expression. Probably, you mean to use ==
   instead of =. If an assignment is intended, add an extra parentheses nesting
-  (e.g., if ((a = b)) ...) to suppress this message. (-predassign will suppress
-  message)
+  (e.g., if ((a = b)) ...) to suppress this message. (Use -predassign to
+  inhibit warning)
 
 Finished checking --- 1 code warning, as expected
 
 preds.c: (in function f)
 preds.c:5:8: Operand of ! is non-boolean (int *): !p
-  The operand of ! operator is a pointer. (+ptrnegate will suppress message)
+  The operand of ! operator is a pointer. (Use +ptrnegate to inhibit warning)
 preds.c:10:7: Test expression for if not bool, type int: *p
-  Test expression type is not boolean or int. (-predboolint will suppress
-  message)
+  Test expression type is not boolean or int. (Use -predboolint to inhibit
+  warning)
 preds.c:15:8: Operand of ! is non-boolean (int): !(*p)
   The operand of a boolean operator is not a boolean. Use +ptrnegate to allow !
-  to be used on pointers. (-boolops will suppress message)
+  to be used on pointers. (Use -boolops to inhibit warning)
 preds.c:20:7: Test expression for if is assignment expression: b1 = b2
   The condition test is an assignment expression. Probably, you mean to use ==
   instead of =. If an assignment is intended, add an extra parentheses nesting
-  (e.g., if ((a = b)) ...) to suppress this message. (-predassign will suppress
-  message)
+  (e.g., if ((a = b)) ...) to suppress this message. (Use -predassign to
+  inhibit warning)
 preds.c:25:7: Test expression for if not bool, type char: (c = 'a')
-  Test expression type is not boolean. (-predboolothers will suppress message)
+  Test expression type is not boolean. (Use -predboolothers to inhibit warning)
 preds.c:30:7: Use of == with bool variables (risks inconsistency because of
                  multiple true values): b1 == b2
   Two bool values are compared directly using a C primitive. This may produce
   unexpected results since all non-zero values are considered TRUE, so
   different TRUE values may not be equal. The file bool.h (included in
-  splint/lib) provides bool_equal for safe bool comparisons. (-boolcompare will
-  suppress message)
+  splint/lib) provides bool_equal for safe bool comparisons. (Use -boolcompare
+  to inhibit warning)
 preds.c:35:7: Test expression for if not bool, type char: c
 bool.h:21:13: Function bool_initMod declared but not used
   A function is declared but not used. Use /*@unused@*/ in front of function
-  header to suppress message. (-fcnuse will suppress message)
+  header to suppress message. (Use -fcnuse to inhibit warning)
 bool.h:24:29: Function bool_unparse declared but not used
 bool.h:27:13: Function bool_not declared but not used
 bool.h:30:13: Function bool_equal declared but not used
index 1a242715f170ad23376531438038e01f3eaf40aa..3bd57c8c2e689e0f859dd914fdad76297cd65ef0 100644 (file)
@@ -26,8 +26,8 @@ Finished checking --- 1 code warning, as expected
 
 rc3.splintrc:2:1: Bad flag syntax (+ or - expected, + is assumed):
                                     internalnamelen    73
-  A flag is not recognized or used in an incorrect way (-badflag will suppress
-  message)
+  A flag is not recognized or used in an incorrect way (Use -badflag to inhibit
+  warning)
 rc3.splintrc:5:24: Flag dump must be followed by an argument
 rc.c: (in function f)
 rc.c:3:10: Unrecognized identifier: MYSTERY
index acfec465325ac54b76dc560b2e860f7c3a1079de..e0a6ac8feff914691a26c362d0d47a5f375a32fe 100644 (file)
@@ -2,7 +2,7 @@
 slovaknames.c: (in function pivoYedno)
 slovaknames.c:15:11: Left operand of == is abstract type (pivo): p == 1
   An abstraction barrier is broken. If necessary, use /*@access <type>@*/ to
-  allow access to an abstract type. (-abstract will suppress message)
+  allow access to an abstract type. (Use -abstract to inhibit warning)
 
 Finished checking --- 1 code warning, as expected
 
@@ -10,27 +10,27 @@ Finished checking --- no warnings
 
 slovaknames.c:5:5: Variable michelobLight name violates Slovak naming
     convention.  Slovak prefix michelob is not the name of a type.
-  Variable name is not consistent with Slovak naming convention. (Setting
-  either -slovakvars or -namechecks will suppress message)
+  Variable name is not consistent with Slovak naming convention. (Use either
+  -slovakvars or -namechecks to inhibit warning)
 slovaknames.c:19:5: Function samAdams name violates Slovak naming convention. 
                        Slovak prefix sam is not the name of a type.
   Function or iterator name is not consistent with Slovak naming convention.
-  (Setting either -slovakfcns or -namechecks will suppress message)
+  (Use either -slovakfcns or -namechecks to inhibit warning)
 slovaknames.c:32:5: Function budweiser name is not consistent with Slovak
                        naming convention.  Accessible types: pivo
   Function or iterator name is not consistent with Slovak naming convention.
-  (Setting either -slovakfcns or -namechecks will suppress message)
+  (Use either -slovakfcns or -namechecks to inhibit warning)
 
 Finished checking --- 3 code warnings, as expected
 
 slovaknames.c:19:5: Function samAdams name violates Slovak naming convention. 
                        Slovak prefix sam is not the name of a type.
   Function or iterator name is not consistent with Slovak naming convention.
-  (Setting either -slovakfcns or -namechecks will suppress message)
+  (Use either -slovakfcns or -namechecks to inhibit warning)
 slovaknames.c:32:5: Function budweiser name is not consistent with Slovak
                        naming convention.  Accessible types: pivo
   Function or iterator name is not consistent with Slovak naming convention.
-  (Setting either -slovakfcns or -namechecks will suppress message)
+  (Use either -slovakfcns or -namechecks to inhibit warning)
 
 Finished checking --- 2 code warnings, as expected
 
@@ -39,8 +39,8 @@ slovaknames.c:4:5: Variable pivoPyet name violates Slovak naming convention.
   Use +accessslovak to allow access to type <t> in functions named <t>_<name>.
 slovaknames.c:5:5: Variable michelobLight name violates Slovak naming
     convention.  Slovak prefix michelob is not the name of a type.
-  Variable name is not consistent with Slovak naming convention. (Setting
-  either -slovakvars or -namechecks will suppress message)
+  Variable name is not consistent with Slovak naming convention. (Use either
+  -slovakvars or -namechecks to inhibit warning)
 slovaknames.c:8:17: Constant pivoDevenast name violates Slovak naming
     convention. Slovak prefix pivo names an abstract type that is not
     accessible.
@@ -51,7 +51,7 @@ slovaknames.c:11:6: Function pivoYedno name violates Slovak naming convention.
 slovaknames.c: (in function pivoYedno)
 slovaknames.c:15:11: Left operand of == is abstract type (pivo): p == 1
   An abstraction barrier is broken. If necessary, use /*@access <type>@*/ to
-  allow access to an abstract type. (-abstract will suppress message)
+  allow access to an abstract type. (Use -abstract to inhibit warning)
 slovaknames.c:19:5: Function samAdams name violates Slovak naming convention. 
                        Slovak prefix sam is not the name of a type.
 slovaknames.c:32:5: Function budweiser name is not consistent with Slovak
index 2bab909e774501f028fbf4b1e1dbe915de00a335..c0ef24c9b7a017c2262e626dad85ddc5bd7cb218 100644 (file)
@@ -22,8 +22,8 @@ Finished checking --- no warnings
 Finished checking --- no warnings
 
 booltest.c: (in function f)
-booltest.c:9:12: Return value type int does not match declared type bool: i
 booltest.c:8:7: Test expression for if not bool, type int: i
+booltest.c:9:12: Return value type int does not match declared type bool: i
 
 Finished checking --- 2 code warnings, as expected
 
This page took 0.377513 seconds and 5 git commands to generate.