precedence based parsing of constraints


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@1231 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 9519596..1123367 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -523,16 +523,16 @@
 
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  7
-#define YYLAST   834
+#define YYLAST   840
 
 /* YYNTOKENS -- Number of terminals. */
 #define YYNTOKENS  121
 /* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  117
+#define YYNNTS  119
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  302
+#define YYNRULES  304
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  462
+#define YYNSTATES  464
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -608,26 +608,26 @@
      499,   501,   504,   507,   509,   511,   514,   517,   519,   521,
      523,   525,   527,   530,   532,   535,   537,   539,   541,   543,
      545,   547,   549,   551,   553,   555,   557,   559,   561,   563,
-     565,   567,   569,   571,   573,   574,   576,   578,   582,   584,
-     589,   593,   598,   600,   602,   606,   612,   614,   618,   622,
-     626,   630,   635,   639,   641,   643,   647,   651,   655,   659,
-     661,   663,   665,   667,   669,   671,   673,   675,   677,   681,
-     687,   689,   693,   695,   699,   700,   702,   704,   706,   708,
-     710,   712,   714,   715,   721,   724,   726,   729,   732,   736,
-     738,   740,   744,   749,   751,   755,   758,   762,   764,   768,
-     769,   771,   773,   776,   779,   783,   785,   789,   791,   796,
-     801,   803,   805,   807,   809,   811,   813,   814,   816,   819,
-     824,   825,   827,   829,   831,   832,   834,   836,   838,   840,
-     842,   843,   845
+     565,   567,   569,   571,   572,   574,   576,   580,   582,   587,
+     591,   596,   598,   600,   604,   610,   612,   616,   618,   622,
+     624,   628,   630,   634,   639,   643,   645,   647,   651,   655,
+     659,   663,   665,   667,   669,   671,   673,   675,   677,   679,
+     681,   685,   691,   693,   697,   699,   703,   704,   706,   708,
+     710,   712,   714,   716,   718,   719,   725,   728,   730,   733,
+     736,   740,   742,   744,   748,   753,   755,   759,   762,   766,
+     768,   772,   773,   775,   777,   780,   783,   787,   789,   793,
+     795,   800,   805,   807,   809,   811,   813,   815,   817,   818,
+     820,   823,   828,   829,   831,   833,   835,   836,   838,   840,
+     842,   844,   846,   847,   849
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const short yyrhs[] =
 {
      122,     0,    -1,   123,    -1,   124,    -1,   123,   124,    -1,
-      -1,   234,   125,   126,    39,   130,     3,    26,   133,    44,
+      -1,   236,   125,   126,    39,   130,     3,    26,   133,    44,
       -1,    -1,   127,    -1,   108,   128,   109,    -1,   108,   109,
-      -1,   129,    -1,   128,   129,    -1,   237,    -1,   237,   110,
+      -1,   129,    -1,   128,   129,    -1,   239,    -1,   239,   110,
       10,   111,    -1,    10,    -1,    -1,   131,    -1,   132,    -1,
      131,   132,    -1,    46,    89,    -1,    57,    89,    -1,    25,
       89,    -1,    48,    58,    -1,    16,    62,    -1,    -1,   134,
@@ -635,116 +635,117 @@
      152,    -1,   182,    -1,   150,    -1,    -1,    43,    16,   137,
       -1,   192,    -1,    -1,   139,    -1,    59,   140,   112,    -1,
       59,    51,    -1,   142,    -1,   140,   142,    -1,    -1,   127,
-      -1,   143,    51,   234,   141,    -1,   144,    -1,   143,   113,
-     144,    -1,   234,    -1,   234,   108,   109,    -1,   237,    -1,
+      -1,   143,    51,   236,   141,    -1,   144,    -1,   143,   113,
+     144,    -1,   236,    -1,   236,   108,   109,    -1,   239,    -1,
       -1,   146,    -1,    47,   147,   112,    -1,    47,    22,   112,
       -1,    47,   112,    -1,   148,    -1,   147,   113,   148,    -1,
-     234,    -1,   234,   108,   109,    -1,   237,    -1,   108,   200,
-     109,    -1,   234,   151,     3,   149,    -1,   191,    -1,   176,
-      -1,   176,   108,   155,   109,    -1,   234,     3,   172,    -1,
-     234,     3,   162,    -1,   234,   108,   153,   109,     3,   172,
-      -1,   234,   108,   153,   109,     3,   162,    -1,   154,    -1,
-     153,   113,   154,    -1,   234,    -1,   234,   114,   237,    -1,
-     234,   114,   234,    -1,   189,   114,   237,    -1,   189,   114,
-     234,    -1,   156,    -1,   155,   113,   156,    -1,   172,    -1,
-     185,    -1,   237,    -1,   149,    -1,    -1,   158,    -1,   159,
-      -1,   158,   113,   159,    -1,   237,   172,   222,    -1,   172,
-     222,    -1,    35,    73,   172,    -1,   171,    -1,   161,    -1,
-     160,   113,   161,    -1,   237,   172,    -1,   171,    -1,   172,
+     236,    -1,   236,   108,   109,    -1,   239,    -1,   108,   199,
+     109,    -1,   236,   151,     3,   149,    -1,   191,    -1,   176,
+      -1,   176,   108,   155,   109,    -1,   236,     3,   172,    -1,
+     236,     3,   162,    -1,   236,   108,   153,   109,     3,   172,
+      -1,   236,   108,   153,   109,     3,   162,    -1,   154,    -1,
+     153,   113,   154,    -1,   236,    -1,   236,   114,   239,    -1,
+     236,   114,   236,    -1,   189,   114,   239,    -1,   189,   114,
+     236,    -1,   156,    -1,   155,   113,   156,    -1,   172,    -1,
+     185,    -1,   239,    -1,   149,    -1,    -1,   158,    -1,   159,
+      -1,   158,   113,   159,    -1,   239,   172,   224,    -1,   172,
+     224,    -1,    35,    73,   172,    -1,   171,    -1,   161,    -1,
+     160,   113,   161,    -1,   239,   172,    -1,   171,    -1,   172,
       -1,    33,   108,   164,   109,   166,    -1,    -1,    93,    -1,
-     165,    -1,   164,   113,   165,    -1,    17,   222,    -1,    18,
-     172,   163,   222,    -1,    18,   180,   222,    -1,    18,   181,
-     222,    -1,    17,   180,   222,    -1,    17,   172,   222,    -1,
-      17,   181,   222,    -1,    -1,   167,    -1,    -1,   100,    87,
+     165,    -1,   164,   113,   165,    -1,    17,   224,    -1,    18,
+     172,   163,   224,    -1,    18,   180,   224,    -1,    18,   181,
+     224,    -1,    17,   180,   224,    -1,    17,   172,   224,    -1,
+      17,   181,   224,    -1,    -1,   167,    -1,    -1,   100,    87,
      108,   168,   169,   109,    -1,   170,    -1,   169,   170,    -1,
        4,    -1,    19,    -1,   179,    -1,   115,   169,   116,    -1,
-     107,    -1,   107,   117,   186,    -1,   107,   117,   227,    -1,
-     229,   174,   196,    -1,    -1,   173,   175,    -1,   151,    -1,
+     107,    -1,   107,   117,   186,    -1,   107,   117,   229,    -1,
+     231,   174,   195,    -1,    -1,   173,   175,    -1,   151,    -1,
       32,   108,   160,   109,    -1,    83,   108,   157,   109,    -1,
-      84,   108,   157,   109,    -1,    83,   196,    73,   236,   229,
-     174,    -1,    84,   196,    73,   236,   229,   174,    -1,    23,
-      -1,    23,    40,    30,   237,    -1,    61,    73,   176,    -1,
-      15,    -1,    15,   118,   234,    -1,   235,   118,   234,    -1,
-      15,   118,   237,    -1,   235,    -1,   235,   118,   177,    -1,
+      84,   108,   157,   109,    -1,    83,   195,    73,   238,   231,
+     174,    -1,    84,   195,    73,   238,   231,   174,    -1,    23,
+      -1,    23,    40,    30,   239,    -1,    61,    73,   176,    -1,
+      15,    -1,    15,   118,   236,    -1,   237,   118,   236,    -1,
+      15,   118,   239,    -1,   237,    -1,   237,   118,   177,    -1,
      178,    -1,   177,   118,   178,    -1,   179,    -1,    17,    -1,
       18,    -1,    17,    -1,   180,   118,    17,    -1,   180,   118,
-      18,    -1,    16,    -1,   237,   151,     3,   183,    -1,   185,
-      -1,   186,    -1,   237,   114,   183,    -1,    -1,   108,   184,
+      18,    -1,    16,    -1,   239,   151,     3,   183,    -1,   185,
+      -1,   186,    -1,   239,   114,   183,    -1,    -1,   108,   184,
      188,    -1,    68,    -1,    50,    -1,    91,    -1,     6,    -1,
-       8,    -1,   187,    -1,   227,    -1,   237,    -1,   234,   118,
-     237,    -1,     7,    -1,    13,    -1,    14,    -1,     5,    -1,
+       8,    -1,   187,    -1,   229,    -1,   239,    -1,   236,   118,
+     239,    -1,     7,    -1,    13,    -1,    14,    -1,     5,    -1,
      188,     5,    -1,    29,    -1,    68,    -1,    81,    -1,   190,
       -1,    72,    86,    -1,    70,    56,    -1,    82,    -1,    49,
       -1,    41,    76,    -1,    31,    86,    -1,    96,    -1,    52,
       -1,   192,    -1,    63,    -1,    45,    -1,    27,    86,    -1,
-     189,    -1,   190,   224,    -1,    28,    -1,    53,    -1,    54,
+     189,    -1,   190,   226,    -1,    28,    -1,    53,    -1,    54,
       -1,    55,    -1,    64,    -1,    69,    -1,    79,    -1,    88,
       -1,    90,    -1,    95,    -1,    97,    -1,    98,    -1,    99,
       -1,    71,    -1,   104,    -1,   105,    -1,   102,    -1,   103,
-      -1,   101,    -1,    -1,   197,    -1,   198,    -1,   110,   211,
-     111,    -1,   199,    -1,    85,   110,   200,   111,    -1,   110,
-     200,   111,    -1,   199,   110,   200,   111,    -1,   107,    -1,
-     201,    -1,   201,   113,   107,    -1,   201,   113,   107,   113,
-     201,    -1,   202,    -1,    22,   101,   202,    -1,   201,   193,
-     202,    -1,   201,   194,   202,    -1,   202,   195,   202,    -1,
-     203,   110,   200,   111,    -1,   110,   200,   111,    -1,   204,
-      -1,   205,    -1,   204,   215,   204,    -1,    66,   215,   204,
-      -1,   204,   215,    65,    -1,    66,   215,    65,    -1,   206,
-      -1,    85,    -1,    51,    -1,    50,    -1,    91,    -1,   228,
-      -1,   187,    -1,   237,    -1,   234,    -1,   100,    34,   199,
-      -1,   100,    35,   108,   207,   109,    -1,   208,    -1,   207,
-     113,   208,    -1,   107,    -1,   237,   196,   209,    -1,    -1,
-     210,    -1,    78,    -1,    20,    -1,    74,    -1,   212,    -1,
-     216,    -1,   214,    -1,    -1,    36,    30,   108,   213,   188,
-      -1,    37,   172,    -1,   106,    -1,   106,   119,    -1,   119,
-     106,    -1,   119,   106,   119,    -1,   217,    -1,   218,    -1,
-     108,   234,   109,    -1,   217,   108,   219,   109,    -1,   220,
-      -1,   219,   113,   220,    -1,   120,   221,    -1,   120,   118,
-     221,    -1,   237,    -1,   221,   118,   237,    -1,    -1,   223,
-      -1,    74,    -1,    38,   183,    -1,   108,   109,    -1,   108,
-     225,   109,    -1,   226,    -1,   225,   113,   226,    -1,   237,
-      -1,   237,   110,   227,   111,    -1,   237,   110,   186,   111,
-      -1,   227,    -1,   107,    -1,    10,    -1,    11,    -1,   227,
-      -1,    12,    -1,    -1,   230,    -1,   231,   233,    -1,   115,
-     232,    10,   116,    -1,    -1,    94,    -1,    24,    -1,    80,
-      -1,    -1,    57,    -1,    46,    -1,    15,    -1,    16,    -1,
-      16,    -1,    -1,   237,    -1,     9,    -1
+      -1,    -1,   196,    -1,   197,    -1,   110,   213,   111,    -1,
+     198,    -1,    85,   110,   199,   111,    -1,   110,   199,   111,
+      -1,   198,   110,   199,   111,    -1,   107,    -1,   200,    -1,
+     200,   113,   107,    -1,   200,   113,   107,   113,   200,    -1,
+     201,    -1,    22,   101,   204,    -1,   202,    -1,   201,   193,
+     202,    -1,   203,    -1,   202,   194,   203,    -1,   204,    -1,
+     204,   101,   204,    -1,   205,   110,   199,   111,    -1,   110,
+     199,   111,    -1,   206,    -1,   207,    -1,   206,   217,   206,
+      -1,    66,   217,   206,    -1,   206,   217,    65,    -1,    66,
+     217,    65,    -1,   208,    -1,    85,    -1,    51,    -1,    50,
+      -1,    91,    -1,   230,    -1,   187,    -1,   239,    -1,   236,
+      -1,   100,    34,   198,    -1,   100,    35,   108,   209,   109,
+      -1,   210,    -1,   209,   113,   210,    -1,   107,    -1,   239,
+     195,   211,    -1,    -1,   212,    -1,    78,    -1,    20,    -1,
+      74,    -1,   214,    -1,   218,    -1,   216,    -1,    -1,    36,
+      30,   108,   215,   188,    -1,    37,   172,    -1,   106,    -1,
+     106,   119,    -1,   119,   106,    -1,   119,   106,   119,    -1,
+     219,    -1,   220,    -1,   108,   236,   109,    -1,   219,   108,
+     221,   109,    -1,   222,    -1,   221,   113,   222,    -1,   120,
+     223,    -1,   120,   118,   223,    -1,   239,    -1,   223,   118,
+     239,    -1,    -1,   225,    -1,    74,    -1,    38,   183,    -1,
+     108,   109,    -1,   108,   227,   109,    -1,   228,    -1,   227,
+     113,   228,    -1,   239,    -1,   239,   110,   229,   111,    -1,
+     239,   110,   186,   111,    -1,   229,    -1,   107,    -1,    10,
+      -1,    11,    -1,   229,    -1,    12,    -1,    -1,   232,    -1,
+     233,   235,    -1,   115,   234,    10,   116,    -1,    -1,    94,
+      -1,    24,    -1,    80,    -1,    -1,    57,    -1,    46,    -1,
+      15,    -1,    16,    -1,    16,    -1,    -1,   239,    -1,     9,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short yyrline[] =
 {
-       0,   349,   349,   355,   361,   378,   377,   406,   408,   411,
-     415,   420,   427,   435,   440,   444,   453,   455,   463,   467,
-     475,   479,   482,   485,   489,   509,   511,   519,   528,   532,
-     547,   555,   568,   576,   575,   589,   601,   603,   605,   616,
-     621,   627,   633,   635,   638,   649,   655,   661,   668,   674,
-     683,   685,   696,   700,   703,   710,   716,   722,   729,   735,
-     744,   746,   756,   770,   780,   796,   806,   822,   828,   835,
-     845,   855,   860,   867,   874,   882,   892,   898,   904,   908,
-     916,   927,   949,   951,   953,   959,   965,   973,   979,   986,
-     991,   997,  1003,  1009,  1012,  1018,  1028,  1030,  1033,  1041,
-    1048,  1061,  1072,  1082,  1093,  1103,  1114,  1125,  1127,  1134,
-    1132,  1141,  1146,  1152,  1157,  1160,  1164,  1169,  1178,  1187,
-    1198,  1220,  1227,  1246,  1250,  1256,  1262,  1268,  1278,  1288,
-    1294,  1305,  1319,  1328,  1338,  1348,  1358,  1366,  1387,  1396,
-    1405,  1407,  1414,  1421,  1427,  1431,  1437,  1457,  1467,  1469,
-    1470,  1477,  1477,  1482,  1489,  1495,  1500,  1504,  1508,  1511,
-    1516,  1528,  1545,  1550,  1555,  1588,  1598,  1612,  1614,  1615,
-    1616,  1617,  1618,  1619,  1620,  1621,  1622,  1623,  1624,  1625,
-    1631,  1633,  1634,  1637,  1644,  1656,  1658,  1662,  1666,  1667,
-    1668,  1669,  1670,  1674,  1675,  1676,  1677,  1681,  1682,  1689,
-    1689,  1690,  1690,  1691,  1693,  1695,  1700,  1702,  1707,  1711,
-    1720,  1724,  1729,  1734,  1737,  1743,  1753,  1757,  1760,  1763,
-    1766,  1771,  1780,  1788,  1794,  1800,  1807,  1815,  1823,  1832,
-    1837,  1841,  1846,  1852,  1857,  1858,  1859,  1872,  1886,  1890,
-    1895,  1899,  1904,  1911,  1924,  1926,  1929,  1933,  1936,  1943,
-    1945,  1946,  1951,  1949,  1961,  1969,  1971,  1972,  1973,  1975,
-    1979,  1987,  2002,  2008,  2015,  2028,  2040,  2055,  2059,  2076,
-    2081,  2084,  2089,  2111,  2116,  2121,  2127,  2133,  2141,  2149,
-    2157,  2164,  2174,  2179,  2185,  2187,  2217,  2219,  2222,  2229,
-    2235,  2237,  2238,  2239,  2242,  2244,  2245,  2248,  2253,  2260,
-    2267,  2269,  2274
+       0,   352,   352,   358,   364,   381,   380,   409,   411,   414,
+     418,   423,   430,   438,   443,   447,   456,   458,   466,   470,
+     478,   482,   485,   488,   492,   512,   514,   522,   531,   535,
+     550,   558,   571,   579,   578,   592,   604,   606,   608,   619,
+     624,   630,   636,   638,   641,   652,   658,   664,   671,   677,
+     686,   688,   699,   703,   706,   713,   719,   725,   732,   738,
+     747,   749,   759,   773,   783,   799,   809,   825,   831,   838,
+     848,   858,   863,   870,   877,   885,   895,   901,   907,   911,
+     919,   930,   952,   954,   956,   962,   968,   976,   982,   989,
+     994,  1000,  1006,  1012,  1015,  1021,  1031,  1033,  1036,  1044,
+    1051,  1064,  1075,  1085,  1096,  1106,  1117,  1128,  1130,  1137,
+    1135,  1144,  1149,  1155,  1160,  1163,  1167,  1172,  1181,  1190,
+    1201,  1223,  1230,  1249,  1253,  1259,  1265,  1271,  1281,  1291,
+    1297,  1308,  1322,  1331,  1341,  1351,  1361,  1369,  1390,  1399,
+    1408,  1410,  1417,  1424,  1430,  1434,  1440,  1460,  1470,  1472,
+    1473,  1480,  1480,  1485,  1492,  1498,  1503,  1507,  1511,  1514,
+    1519,  1531,  1548,  1553,  1558,  1591,  1601,  1615,  1617,  1618,
+    1619,  1620,  1621,  1622,  1623,  1624,  1625,  1626,  1627,  1628,
+    1634,  1636,  1637,  1640,  1647,  1659,  1661,  1665,  1669,  1670,
+    1671,  1672,  1673,  1677,  1678,  1679,  1680,  1684,  1685,  1692,
+    1692,  1693,  1693,  1695,  1697,  1702,  1704,  1709,  1713,  1722,
+    1726,  1731,  1736,  1739,  1745,  1755,  1757,  1762,  1764,  1769,
+    1771,  1777,  1779,  1784,  1793,  1801,  1807,  1813,  1820,  1828,
+    1836,  1845,  1850,  1854,  1859,  1865,  1870,  1871,  1872,  1885,
+    1899,  1903,  1908,  1912,  1917,  1924,  1937,  1939,  1942,  1946,
+    1949,  1956,  1958,  1959,  1964,  1962,  1974,  1982,  1984,  1985,
+    1986,  1988,  1992,  2000,  2015,  2021,  2028,  2041,  2053,  2068,
+    2072,  2089,  2094,  2097,  2102,  2124,  2129,  2134,  2140,  2146,
+    2154,  2162,  2170,  2177,  2187,  2192,  2198,  2200,  2230,  2232,
+    2235,  2242,  2248,  2250,  2251,  2252,  2255,  2257,  2258,  2261,
+    2266,  2273,  2280,  2282,  2287
 };
 #endif
 
@@ -802,13 +803,14 @@
   "ValueDefinition", "Value", "@4", "SimpleValue", "DefinedValue", 
   "RestrictedCharacterStringValue", "Opaque", "BasicTypeId", 
   "BasicTypeId_UniverationCompatible", "BasicType", "BasicString", 
-  "Union", "Intersection", "Except", "optConstraints", "Constraint", 
+  "UnionMark", "IntersectionMark", "optConstraints", "Constraint", 
   "SubtypeConstraint", "SetOfConstraints", "ElementSetSpecs", 
-  "ElementSetSpec", "ConstraintSubtypeElement", "ConstraintSpec", 
-  "SingleValue", "ContainedSubtype", "InnerTypeConstraint", 
-  "WithComponentsList", "WithComponentsElement", "optPresenceConstraint", 
-  "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint", 
-  "@5", "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint", 
+  "ElementSetSpec", "Unions", "Intersections", "IntersectionElements", 
+  "ConstraintSubtypeElement", "ConstraintSpec", "SingleValue", 
+  "ContainedSubtype", "InnerTypeConstraint", "WithComponentsList", 
+  "WithComponentsElement", "optPresenceConstraint", "PresenceConstraint", 
+  "GeneralConstraint", "UserDefinedConstraint", "@5", 
+  "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint", 
   "SimpleTableConstraint", "ComponentRelationConstraint", 
   "AtNotationList", "AtNotationElement", "ComponentIdList", "optMarker", 
   "Marker", "UniverationDefinition", "UniverationList", 
@@ -862,17 +864,17 @@
      189,   189,   189,   189,   189,   189,   189,   189,   189,   189,
      190,   190,   190,   191,   191,   192,   192,   192,   192,   192,
      192,   192,   192,   192,   192,   192,   192,   192,   192,   193,
-     193,   194,   194,   195,   196,   196,   197,   197,   198,   198,
-     199,   199,   200,   200,   200,   200,   201,   201,   201,   201,
-     201,   202,   202,   202,   202,   202,   202,   202,   202,   202,
-     203,   203,   204,   204,   204,   204,   204,   205,   206,   206,
-     207,   207,   208,   208,   209,   209,   210,   210,   210,   211,
-     211,   211,   213,   212,   214,   215,   215,   215,   215,   216,
-     216,   217,   218,   219,   219,   220,   220,   221,   221,   222,
-     222,   223,   223,   224,   224,   225,   225,   226,   226,   226,
-     226,   226,   227,   227,   228,   228,   229,   229,   230,   231,
-     232,   232,   232,   232,   233,   233,   233,   234,   234,   235,
-     236,   236,   237
+     193,   194,   194,   195,   195,   196,   196,   197,   197,   198,
+     198,   199,   199,   199,   199,   200,   200,   201,   201,   202,
+     202,   203,   203,   204,   204,   204,   204,   204,   204,   204,
+     204,   204,   205,   205,   206,   206,   206,   206,   206,   207,
+     208,   208,   209,   209,   210,   210,   211,   211,   212,   212,
+     212,   213,   213,   213,   215,   214,   216,   217,   217,   217,
+     217,   218,   218,   219,   220,   221,   221,   222,   222,   223,
+     223,   224,   224,   225,   225,   226,   226,   227,   227,   228,
+     228,   228,   228,   228,   229,   229,   230,   230,   231,   231,
+     232,   233,   234,   234,   234,   234,   235,   235,   235,   236,
+     236,   237,   238,   238,   239
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -898,17 +900,17 @@
        1,     2,     2,     1,     1,     2,     2,     1,     1,     1,
        1,     1,     2,     1,     2,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     1,     1,     3,     1,     4,
-       3,     4,     1,     1,     3,     5,     1,     3,     3,     3,
-       3,     4,     3,     1,     1,     3,     3,     3,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     5,
-       1,     3,     1,     3,     0,     1,     1,     1,     1,     1,
-       1,     1,     0,     5,     2,     1,     2,     2,     3,     1,
-       1,     3,     4,     1,     3,     2,     3,     1,     3,     0,
-       1,     1,     2,     2,     3,     1,     3,     1,     4,     4,
-       1,     1,     1,     1,     1,     1,     0,     1,     2,     4,
-       0,     1,     1,     1,     0,     1,     1,     1,     1,     1,
-       0,     1,     1
+       1,     1,     1,     0,     1,     1,     3,     1,     4,     3,
+       4,     1,     1,     3,     5,     1,     3,     1,     3,     1,
+       3,     1,     3,     4,     3,     1,     1,     3,     3,     3,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       3,     5,     1,     3,     1,     3,     0,     1,     1,     1,
+       1,     1,     1,     1,     0,     5,     2,     1,     2,     2,
+       3,     1,     1,     3,     4,     1,     3,     2,     3,     1,
+       3,     0,     1,     1,     2,     2,     3,     1,     3,     1,
+       4,     4,     1,     1,     1,     1,     1,     1,     0,     1,
+       2,     4,     0,     1,     1,     1,     0,     1,     1,     1,
+       1,     1,     0,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -916,8 +918,8 @@
    means the default is an error.  */
 static const unsigned short yydefact[] =
 {
-       0,   297,   298,     0,     2,     3,     5,     1,     4,     7,
-       0,     0,     8,   302,    15,    10,     0,    11,    13,    16,
+       0,   299,   300,     0,     2,     3,     5,     1,     4,     7,
+       0,     0,     8,   304,    15,    10,     0,    11,    13,    16,
        9,    12,     0,     0,     0,     0,     0,     0,     0,    17,
       18,     0,    24,    22,    20,    23,    21,     0,    19,    14,
       50,     0,     0,    26,    36,    51,     0,    54,     0,    55,
@@ -925,44 +927,44 @@
       39,     0,    40,     0,    45,    47,    49,   185,     0,   186,
      187,   188,   189,   190,   198,   191,   192,   193,   194,   195,
      196,   197,    27,    28,    32,    30,    31,    35,     0,     0,
-      56,    58,    38,    41,     0,     0,     0,    33,    29,   286,
-     132,   299,     0,   167,     0,     0,   181,   174,   178,   180,
+      56,    58,    38,    41,     0,     0,     0,    33,    29,   288,
+     132,   301,     0,   167,     0,     0,   181,   174,   178,   180,
      168,     0,     0,   169,   173,   177,     0,     0,    63,   183,
      170,    62,   179,   136,     0,    42,    46,    48,    34,     0,
-     290,    66,    65,   121,   287,   294,     0,   182,   176,   175,
-     172,   171,     0,    69,     0,   170,    71,     0,   286,     0,
-     184,     0,     0,    43,    44,     0,   292,   293,   291,     0,
-       0,   204,   296,   295,   288,   133,   135,     0,     0,     0,
-       0,     0,    61,   156,   162,   157,   282,   283,   163,   164,
+     292,    66,    65,   121,   289,   296,     0,   182,   176,   175,
+     172,   171,     0,    69,     0,   170,    71,     0,   288,     0,
+     184,     0,     0,    43,    44,     0,   294,   295,   293,     0,
+       0,   203,   298,   297,   290,   133,   135,     0,     0,     0,
+       0,     0,    61,   156,   162,   157,   284,   285,   163,   164,
      154,   155,    81,     0,    76,    78,    79,   158,   159,    80,
-     281,   273,     0,   275,   280,   277,   141,   142,   137,   138,
-     140,   134,   153,   151,   147,   148,   149,     0,   160,   286,
-     286,     0,    98,     0,   129,     0,     0,   204,   204,   123,
-     122,     0,     0,   120,   205,   206,   208,   286,    70,    75,
-      74,    73,    72,   285,     0,   232,   231,     0,   230,   233,
-       0,   212,     0,   235,     0,   213,   216,     0,   223,   224,
-     229,   284,   234,   237,   236,    64,   286,   274,     0,     0,
-       0,     0,     0,     0,   146,   143,     0,   271,   269,   269,
-     269,   100,   270,    96,   269,   269,   107,     0,   289,     0,
-     286,     0,   286,     0,   286,     0,     0,     0,   286,     0,
-       0,     0,   249,   251,   250,   259,   260,     0,    68,    67,
-       0,   255,     0,     0,     0,     0,     0,    60,   201,   202,
-     199,   200,     0,     0,     0,   203,     0,     0,     0,    77,
-     276,     0,     0,   160,   139,   165,   152,   161,   150,   272,
-     105,     0,   104,   106,    97,   269,   102,   103,     0,    95,
-     108,    99,     0,   117,     0,    90,    93,    94,   286,   131,
-       0,     0,    83,    84,    89,   269,   286,   300,     0,   300,
-       0,     0,   254,     0,   210,   207,     0,     0,   217,   256,
-     257,   228,   226,     0,   238,     0,   222,   214,   218,   219,
-     220,     0,   227,   225,   279,   278,   166,   144,   145,   101,
-       0,   130,     0,   124,   286,    92,   286,   125,   286,    87,
-     269,   286,   301,   126,   286,   209,   252,   261,     0,     0,
-     263,   211,   258,   242,     0,   240,   204,     0,   221,   109,
-     118,   119,    91,    88,    85,    86,   121,   121,     0,     0,
-     265,   267,   262,     0,   239,     0,   244,   215,     0,   127,
-     128,   253,   266,     0,   264,   241,   247,   248,   246,   243,
-     245,   113,   114,     0,     0,   111,   115,   268,     0,   110,
-     112,   116
+     283,   275,     0,   277,   282,   279,   141,   142,   137,   138,
+     140,   134,   153,   151,   147,   148,   149,     0,   160,   288,
+     288,     0,    98,     0,   129,     0,     0,   203,   203,   123,
+     122,     0,     0,   120,   204,   205,   207,   288,    70,    75,
+      74,    73,    72,   287,     0,   234,   233,     0,   232,   235,
+       0,   211,     0,   237,     0,   212,   215,   217,   219,   221,
+       0,   225,   226,   231,   286,   236,   239,   238,    64,   288,
+     276,     0,     0,     0,     0,     0,     0,   146,   143,     0,
+     273,   271,   271,   271,   100,   272,    96,   271,   271,   107,
+       0,   291,     0,   288,     0,   288,     0,   288,     0,     0,
+       0,   288,     0,     0,     0,   251,   253,   252,   261,   262,
+       0,    68,    67,     0,   257,     0,     0,     0,     0,     0,
+      60,     0,   199,   200,     0,   201,   202,     0,     0,     0,
+       0,    77,   278,     0,     0,   160,   139,   165,   152,   161,
+     150,   274,   105,     0,   104,   106,    97,   271,   102,   103,
+       0,    95,   108,    99,     0,   117,     0,    90,    93,    94,
+     288,   131,     0,     0,    83,    84,    89,   271,   288,   302,
+       0,   302,     0,     0,   256,     0,   209,   206,     0,     0,
+     216,   258,   259,   230,   228,     0,   240,     0,   224,   213,
+     218,   220,   222,     0,   229,   227,   281,   280,   166,   144,
+     145,   101,     0,   130,     0,   124,   288,    92,   288,   125,
+     288,    87,   271,   288,   303,   126,   288,   208,   254,   263,
+       0,     0,   265,   210,   260,   244,     0,   242,   203,     0,
+     223,   109,   118,   119,    91,    88,    85,    86,   121,   121,
+       0,     0,   267,   269,   264,     0,   241,     0,   246,   214,
+       0,   127,   128,   255,   268,     0,   266,   243,   249,   250,
+     248,   245,   247,   113,   114,     0,     0,   111,   115,   270,
+       0,   110,   112,   116
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
@@ -971,258 +973,252 @@
       -1,     3,     4,     5,     9,    11,    12,    16,    17,    28,
       29,    30,    42,    43,    82,    83,   128,    54,    55,    61,
      154,    62,    63,    64,    44,    45,    48,    49,   182,    84,
-     117,    85,   142,   143,   183,   184,   351,   352,   353,   344,
-     345,   131,   335,   211,   212,   339,   340,   438,   454,   455,
-     354,   355,   160,   161,   220,   118,   198,   199,   456,   269,
-     270,    86,   204,   261,   205,   206,   243,   326,   119,   120,
-     121,   122,   313,   314,   316,   223,   224,   225,   226,   290,
-     245,   246,   247,   248,   249,   250,   414,   415,   449,   450,
-     291,   292,   428,   293,   303,   294,   295,   296,   409,   410,
-     430,   271,   272,   150,   192,   193,   251,   252,   133,   134,
-     135,   159,   164,   253,   123,   401,   254
+     117,    85,   142,   143,   183,   184,   353,   354,   355,   346,
+     347,   131,   337,   211,   212,   341,   342,   440,   456,   457,
+     356,   357,   160,   161,   220,   118,   198,   199,   458,   272,
+     273,    86,   204,   264,   205,   206,   243,   328,   119,   120,
+     121,   122,   314,   317,   223,   224,   225,   226,   293,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   416,   417,
+     451,   452,   294,   295,   430,   296,   306,   297,   298,   299,
+     411,   412,   432,   274,   275,   150,   192,   193,   254,   255,
+     133,   134,   135,   159,   164,   256,   123,   403,   257
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -345
+#define YYPACT_NINF -282
 static const short yypact[] =
 {
-     179,  -345,  -345,    94,   179,  -345,  -345,  -345,  -345,   -87,
-      25,   118,  -345,  -345,  -345,  -345,    64,  -345,    37,   234,
-    -345,  -345,   106,   123,   107,   113,   164,   165,   260,   234,
-    -345,   157,  -345,  -345,  -345,  -345,  -345,   247,  -345,  -345,
-     177,    60,   235,  -345,   239,  -345,   175,  -345,   -72,  -345,
-     198,  -345,  -345,   147,   506,  -345,  -345,  -345,   246,   199,
-    -345,    21,  -345,   100,  -345,   205,  -345,  -345,   299,  -345,
-    -345,  -345,  -345,  -345,  -345,  -345,  -345,  -345,  -345,  -345,
-    -345,  -345,   506,  -345,  -345,  -345,  -345,  -345,   273,   659,
-    -345,  -345,  -345,  -345,   179,   246,   212,  -345,  -345,    16,
-     242,  -345,   237,  -345,   254,   270,  -345,  -345,  -345,  -345,
-    -345,   306,   278,  -345,  -345,  -345,   735,   376,   272,  -345,
-     275,  -345,  -345,   267,   383,   -87,  -345,  -345,  -345,   281,
-      87,  -345,  -345,  -345,  -345,    14,   246,  -345,  -345,  -345,
-    -345,  -345,    36,  -345,   276,  -345,   277,   284,    91,    77,
-    -345,   341,   201,  -345,  -345,   214,  -345,  -345,  -345,   377,
-     583,   108,  -345,  -345,  -345,  -345,  -345,   391,   735,   246,
-     246,   435,  -345,  -345,  -345,  -345,  -345,  -345,  -345,  -345,
-    -345,  -345,  -345,   134,  -345,  -345,  -345,  -345,  -345,  -345,
-    -345,  -345,   186,  -345,  -345,   285,  -345,  -345,   289,  -345,
-    -345,  -345,  -345,  -345,  -345,  -345,  -345,   290,   282,   162,
-      76,   211,  -345,   293,   370,   303,   340,   -52,    95,  -345,
-    -345,   304,   390,  -345,  -345,  -345,   305,    16,  -345,  -345,
-    -345,  -345,  -345,  -345,   315,  -345,  -345,   114,  -345,  -345,
-     210,  -345,   435,  -345,   308,   181,   317,   310,   114,  -345,
-    -345,  -345,  -345,  -345,  -345,  -345,    91,  -345,    97,   301,
-     279,   416,   413,   201,  -345,  -345,   201,  -345,   -13,    74,
-     -13,  -345,  -345,   330,    74,   -13,   324,   214,  -345,   398,
-      61,   323,    68,   356,    68,   357,   435,   401,   319,   179,
-     321,   325,  -345,  -345,  -345,   327,  -345,   435,  -345,  -345,
-     497,   318,   332,   216,   329,   335,   342,  -345,  -345,  -345,
-    -345,  -345,   345,   497,   497,  -345,   497,   435,   228,  -345,
-    -345,   343,   344,  -345,  -345,  -345,   453,  -345,  -345,  -345,
-    -345,   349,  -345,  -345,  -345,   -13,  -345,  -345,   373,  -345,
-    -345,  -345,   413,   352,   220,  -345,  -345,  -345,   319,  -345,
-     397,   362,   359,  -345,  -345,   -13,   319,   413,   364,   413,
-     365,   369,  -345,   371,  -345,  -345,   358,   368,  -345,  -345,
-     363,  -345,  -345,   435,   305,     8,  -345,   374,  -345,  -345,
-    -345,   372,  -345,  -345,  -345,  -345,  -345,  -345,  -345,  -345,
-     380,  -345,   301,  -345,    61,  -345,   319,  -345,    43,  -345,
-     -13,   319,  -345,  -345,   319,  -345,  -345,  -345,    -5,   221,
-    -345,  -345,  -345,  -345,   222,  -345,   108,   452,  -345,  -345,
-    -345,  -345,  -345,  -345,  -345,  -345,  -345,  -345,   416,   413,
-     366,  -345,  -345,   358,  -345,     8,     6,   271,    49,  -345,
-    -345,   453,   366,   413,  -345,  -345,  -345,  -345,  -345,  -345,
-    -345,  -345,  -345,    49,    46,  -345,  -345,  -345,    28,  -345,
-    -345,  -345
+     193,  -282,  -282,    28,   193,  -282,  -282,  -282,  -282,   -47,
+      13,    45,  -282,  -282,  -282,  -282,    37,  -282,   -16,   168,
+    -282,  -282,   138,    93,    83,   140,   165,   147,   223,   168,
+    -282,   155,  -282,  -282,  -282,  -282,  -282,   245,  -282,  -282,
+      64,    84,   225,  -282,   222,  -282,   176,  -282,   132,  -282,
+     196,  -282,  -282,   167,   512,  -282,  -282,  -282,   249,   202,
+    -282,    11,  -282,    65,  -282,   212,  -282,  -282,   314,  -282,
+    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
+    -282,  -282,   512,  -282,  -282,  -282,  -282,  -282,   344,   665,
+    -282,  -282,  -282,  -282,   193,   249,   234,  -282,  -282,    -8,
+     215,  -282,   262,  -282,   264,   278,  -282,  -282,  -282,  -282,
+    -282,   299,   270,  -282,  -282,  -282,   741,   354,   250,  -282,
+     255,  -282,  -282,   246,   362,   -47,  -282,  -282,  -282,   258,
+      25,  -282,  -282,  -282,  -282,   128,   249,  -282,  -282,  -282,
+    -282,  -282,   134,  -282,   254,  -282,   256,   261,    60,    70,
+    -282,   279,   224,  -282,  -282,   243,  -282,  -282,  -282,   364,
+     589,    82,  -282,  -282,  -282,  -282,  -282,   373,   741,   249,
+     249,   444,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
+    -282,  -282,  -282,   159,  -282,  -282,  -282,  -282,  -282,  -282,
+    -282,  -282,   177,  -282,  -282,   268,  -282,  -282,   263,  -282,
+    -282,  -282,  -282,  -282,  -282,  -282,  -282,   265,   266,   174,
+      73,   203,  -282,   272,   339,   274,   318,   109,   112,  -282,
+    -282,   282,   191,  -282,  -282,  -282,   284,    -8,  -282,  -282,
+    -282,  -282,  -282,  -282,   300,  -282,  -282,   -61,  -282,  -282,
+     294,  -282,   444,  -282,   293,   291,   231,   235,  -282,   304,
+     301,   -61,  -282,  -282,  -282,  -282,  -282,  -282,  -282,    60,
+    -282,    92,   269,   322,   401,   400,   224,  -282,  -282,   224,
+    -282,    50,   -21,    50,  -282,  -282,   317,   -21,    50,   319,
+     243,  -282,   387,    66,   326,    47,   345,    47,   347,   444,
+     392,   309,   193,   320,   325,  -282,  -282,  -282,   321,  -282,
+     444,  -282,  -282,   472,   311,   331,   296,   323,   330,   333,
+    -282,   338,  -282,  -282,   472,  -282,  -282,   472,   472,   444,
+     312,  -282,  -282,   335,   336,  -282,  -282,  -282,   423,  -282,
+    -282,  -282,  -282,   327,  -282,  -282,  -282,    50,  -282,  -282,
+     361,  -282,  -282,  -282,   400,   332,   204,  -282,  -282,  -282,
+     309,  -282,   377,   352,   349,  -282,  -282,    50,   309,   400,
+     355,   400,   365,   367,  -282,   368,  -282,  -282,   343,   378,
+    -282,  -282,   359,  -282,  -282,   444,   284,    23,  -282,   379,
+     235,  -282,  -282,   380,  -282,  -282,  -282,  -282,  -282,  -282,
+    -282,  -282,   382,  -282,   269,  -282,    66,  -282,   309,  -282,
+      51,  -282,    50,   309,  -282,  -282,   309,  -282,  -282,  -282,
+      31,   205,  -282,  -282,  -282,  -282,   218,  -282,    82,   458,
+    -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,  -282,
+     401,   400,   375,  -282,  -282,   343,  -282,    23,   137,  -282,
+      46,  -282,  -282,   423,   375,   400,  -282,  -282,  -282,  -282,
+    -282,  -282,  -282,  -282,  -282,    46,    20,  -282,  -282,  -282,
+      17,  -282,  -282,  -282
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short yypgoto[] =
 {
-    -345,  -345,  -345,   485,  -345,  -345,   367,  -345,   475,  -345,
-    -345,   464,  -345,  -345,  -345,   412,  -345,  -345,  -345,  -345,
-    -345,   434,  -345,   404,  -345,  -345,  -345,   438,   378,  -345,
-     -79,  -345,  -345,   337,  -345,   258,   232,  -345,   119,  -345,
-     125,   296,  -345,  -345,   250,  -345,  -345,  -345,    71,  -344,
-    -271,   -91,  -345,   -49,  -345,   248,  -345,   268,  -132,   320,
-     322,  -345,    85,  -345,  -135,  -252,  -136,   103,   -89,   -78,
-    -345,   -43,  -345,  -345,  -345,  -215,  -345,  -345,   229,  -151,
-     121,  -126,  -345,   -84,  -345,  -345,  -345,   101,  -345,  -345,
-    -345,  -345,  -345,  -345,   291,  -345,  -345,  -345,  -345,   111,
-     112,  -246,  -345,  -345,  -345,   288,  -134,  -345,   -51,  -345,
-    -345,  -345,  -345,     1,  -345,   191,   -10
+    -282,  -282,  -282,   492,  -282,  -282,   372,  -282,   482,  -282,
+    -282,   470,  -282,  -282,  -282,   418,  -282,  -282,  -282,  -282,
+    -282,   440,  -282,   407,  -282,  -282,  -282,   445,   357,  -282,
+     -48,  -282,  -282,   337,  -282,   247,   220,  -282,   111,  -282,
+     116,   286,  -282,  -282,   236,  -282,  -282,  -282,    59,  -210,
+    -281,   -96,  -282,   -76,  -282,   233,  -282,   252,  -136,   308,
+     310,  -282,   -80,  -282,  -118,  -258,  -119,    89,   -59,   -24,
+    -282,    22,  -282,  -282,  -208,  -282,  -282,   219,  -155,   106,
+    -282,   216,   214,  -138,  -282,  -229,  -282,  -282,  -282,    95,
+    -282,  -282,  -282,  -282,  -282,  -282,   283,  -282,  -282,  -282,
+    -282,    98,   105,  -259,  -282,  -282,  -282,   276,  -141,  -282,
+    -182,  -282,  -282,  -282,  -282,     1,  -282,   178,   -10
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, parse error.  */
-#define YYTABLE_NINF -270
+#define YYTABLE_NINF -272
 static const short yytable[] =
 {
-      18,     6,   283,   285,    13,     6,    18,   321,   132,   346,
-     124,    87,   187,   186,   188,   194,   187,    13,   188,   200,
-     244,    10,   330,   332,   333,   266,   446,   144,   336,   337,
-      13,    51,   451,   221,    13,    14,     1,     2,   145,    87,
-      57,    58,    50,    66,    89,   196,   197,   452,    51,   129,
-     451,    66,    13,   451,    65,    88,   282,   185,   222,    50,
-     162,   267,    65,   196,   197,   452,   196,   197,   452,    13,
-      13,   163,    89,    13,    14,     1,     2,    13,   350,   144,
-     447,   219,    46,    88,   448,    66,    13,   176,   177,   389,
-     145,   306,   264,   265,     7,   125,    65,   173,   174,   175,
-      13,   176,   177,   350,   178,   179,    13,   176,   177,   399,
-     460,   156,   266,   429,   460,   413,    31,   146,   268,   273,
-     187,   186,   188,   346,   194,   322,   166,   187,   200,   188,
-     187,   130,   188,    92,    15,   360,   299,   165,   189,   195,
-     420,   180,   208,   453,   461,   167,   367,    22,   267,   168,
-     343,    94,   201,   207,   425,   459,    13,    19,   130,   230,
-     232,   453,     1,     2,   453,   185,   381,   157,   343,   146,
-     229,   231,    47,    20,   368,   343,   130,   -82,   264,   265,
-     221,   158,   181,   130,   190,    32,   191,   378,   379,   347,
-     380,   130,   331,   221,     1,     2,    33,   362,    60,   171,
-     266,   436,    34,   284,   190,   222,   130,   173,   174,   175,
-      13,   176,   177,    95,   178,   179,     1,     2,   222,   372,
-     301,   -25,    35,   174,    41,    13,   176,   177,   233,   178,
-     179,   209,   210,   302,   383,   174,   267,    13,   176,   177,
-     233,   178,   179,   255,   304,   305,   189,   256,   195,   323,
-      23,   180,   327,   208,    36,    13,   208,   395,   421,    24,
-     207,     1,     2,    37,   207,   400,   235,   207,    39,   202,
-     348,  -269,   356,    40,   356,  -269,    99,   130,   235,    52,
-      25,   371,    26,   308,   309,   310,   311,    56,   100,   101,
-     363,    27,   181,   382,   312,   257,   196,   197,    53,   258,
-     102,    67,   103,   347,   104,   423,    59,   239,    91,   203,
-      13,   176,   177,    96,   105,    97,     1,     2,   106,   239,
-     276,   127,   107,   137,   277,   108,    69,    70,    71,   393,
-     432,   434,   391,   394,   433,   435,   109,    72,   100,   101,
-     138,   110,    73,   111,    74,   112,   139,   402,   328,   402,
-     426,   329,    75,   427,   113,   114,     1,     2,   196,   197,
-     136,    76,   140,    77,   141,   416,   387,   388,    78,   115,
-      79,    80,    81,   308,   309,   310,   311,   439,   440,   147,
-     148,   116,   323,   149,   348,   151,   152,   213,   356,   155,
-     169,   170,   171,   207,   227,   259,   263,   174,   431,    13,
-     176,   177,   233,   178,   179,     1,     2,   260,   262,   278,
-     279,   280,   234,   281,   286,   297,   300,   307,   315,   431,
-     317,   325,    13,   334,   338,   416,   287,   288,   342,   357,
-     359,   361,   364,   457,   130,   366,   365,   369,   370,   373,
-     235,   236,   174,   375,    13,   176,   177,   233,   178,   179,
-       1,     2,   377,   376,   384,   385,   237,   234,   386,   174,
-     390,    13,   176,   177,   233,   178,   179,     1,     2,   392,
-     396,   397,   398,   403,   234,   238,   405,   406,   408,   411,
-     407,   239,   412,   418,   443,   235,   236,   417,   419,     8,
-     240,    21,   153,    38,    98,    93,    90,   241,   289,   126,
-     242,   237,   235,   236,   174,   228,    13,   176,   177,   233,
-     178,   179,     1,     2,   319,    13,   358,   424,   237,   422,
-     238,     1,     2,   298,   458,   172,   239,   341,   324,   349,
-     274,   441,   275,   374,    67,   240,   445,   238,   437,   318,
-       0,   442,   241,   239,   444,   242,   320,   235,   236,    68,
-     404,     0,   240,     0,     0,     0,     0,     0,     0,    69,
-      70,    71,   242,   237,     0,     0,     0,     0,     0,     0,
-      72,     0,     0,     0,     0,    73,     0,    74,     0,     0,
-       0,     0,   238,     0,     0,    75,     0,     0,   239,     0,
-       0,     0,     0,     0,    76,     0,    77,   240,   100,   101,
-       0,    78,     0,    79,    80,    81,   214,   242,     0,     0,
-     102,    67,   103,     0,   104,   215,     0,     0,     0,     0,
-       0,     0,     0,     0,   105,     0,     0,     0,   106,     0,
-       0,     0,   107,     0,     0,   108,    69,    70,    71,     0,
-       0,     0,     0,     0,   216,     0,   109,    72,     0,     0,
-       0,   110,    73,   111,    74,   112,     0,     0,     0,     0,
-       0,     0,    75,     0,   113,   114,   217,   218,     0,     0,
-       0,    76,     0,    77,   100,   101,     0,     0,    78,   115,
-      79,    80,    81,     0,     0,     0,   102,    67,   103,     0,
-     104,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      18,     6,   348,   132,   323,     6,    18,   188,   194,   286,
+     288,   188,   332,   334,   335,   200,   244,   269,   338,   339,
+      13,   453,    13,    14,   453,   129,     1,     2,     7,   187,
+     186,    51,    13,   187,   196,   197,   454,   196,   197,   454,
+      13,   124,    50,    66,    89,   304,    13,    14,    51,   156,
+     453,    66,   185,   270,    65,    88,    13,   144,   305,    50,
+      13,    10,    65,   196,   197,   454,   173,   174,   175,    13,
+     176,   177,    89,   178,   179,    13,    87,   374,   391,    13,
+     176,   177,   352,    88,    19,    66,   352,   309,   269,   267,
+     268,   385,   145,    13,    22,   125,    65,   333,   401,     1,
+       2,    13,   176,   177,    87,   157,    46,   130,   -25,   144,
+     180,    41,   219,   271,   276,   348,    94,   146,   188,   158,
+     194,   324,    15,    92,   270,   188,   166,   200,   188,   461,
+     415,   302,   455,   463,   362,   455,   422,   165,   189,   195,
+     187,   186,   208,   427,   145,   369,    20,   187,    31,   431,
+     187,   181,   201,   207,   345,    32,   -82,   448,   345,   230,
+     232,   455,   130,   185,   383,   370,   130,   221,   171,   146,
+     229,   231,    33,   345,   162,   130,    13,   190,    95,   191,
+     382,   130,     1,     2,    23,   163,   330,   349,   130,   331,
+     267,   268,   222,    24,   221,   364,    47,   221,   174,   190,
+      13,   176,   177,   233,   178,   179,     1,     2,     1,     2,
+     438,   449,   269,   234,    25,   450,    26,   285,    60,   222,
+     287,   428,   222,    35,   429,    27,    37,   290,   291,    34,
+     173,   174,   175,    13,   176,   177,    36,   178,   179,     1,
+       2,   235,   236,   167,    57,    58,   462,   168,   270,   189,
+     462,   195,   325,   423,   397,   329,   208,   237,    13,   208,
+     209,   210,   402,   207,     1,     2,    39,   207,   258,    52,
+     207,    40,   259,   350,   180,   358,   238,   358,    13,   176,
+     177,    53,   239,  -271,     1,     2,   260,  -271,    56,   130,
+     261,   240,   202,   365,     1,     2,   196,   197,   241,   292,
+     349,   242,   425,   174,    59,    13,   176,   177,   233,   178,
+     179,    91,   279,   395,   434,   181,   280,   396,   435,   174,
+      96,    13,   176,   177,   233,   178,   179,   436,   307,   308,
+      97,   437,   203,   136,   393,   312,   313,   315,   316,   196,
+     197,   100,   101,   127,   389,   390,   235,    99,   137,   404,
+     138,   404,   441,   442,   139,   140,   141,   147,   148,   100,
+     101,   373,   235,   149,   151,   152,   155,   418,   169,   171,
+     170,   102,    67,   103,   213,   104,   227,   384,   262,   282,
+     266,   263,   283,   265,   325,   105,   350,   239,   281,   106,
+     358,   284,   289,   107,   300,   207,   108,    69,    70,    71,
+     433,   303,   310,   239,   311,   318,   327,   109,    72,    13,
+     336,   319,   110,    73,   111,    74,   112,   344,   359,   340,
+     361,   433,   363,    75,   130,   113,   114,   418,   388,   368,
+     371,   366,    76,   375,    77,   459,   367,   372,   377,    78,
+     115,    79,    80,    81,   378,   379,   386,   387,   392,   394,
+     398,   174,   116,    13,   176,   177,   233,   178,   179,     1,
+       2,   399,   400,   410,   405,   174,   234,    13,   176,   177,
+     233,   178,   179,     1,     2,   408,   407,   409,   414,   174,
+     234,    13,   176,   177,   233,   178,   179,     1,     2,   413,
+     421,   420,   419,   445,   235,   236,     8,   153,    21,    38,
+      98,    93,   126,    90,   172,   228,   321,   360,   235,   236,
+     237,   426,   424,   301,   460,   326,   343,   351,   277,   443,
+     278,    13,   235,   236,   237,   439,   376,     1,     2,   238,
+     380,   381,   447,   446,   320,   239,   444,   322,   237,   406,
+      67,     0,     0,   238,   240,     0,     0,     0,     0,   239,
+       0,   241,     0,     0,   242,    68,     0,   238,   240,     0,
+       0,     0,     0,   239,     0,    69,    70,    71,   242,     0,
+       0,     0,   240,     0,     0,     0,    72,     0,     0,     0,
+       0,    73,   242,    74,     0,     0,     0,     0,     0,     0,
+       0,    75,     0,     0,     0,     0,     0,     0,     0,     0,
+      76,     0,    77,     0,   100,   101,     0,    78,     0,    79,
+      80,    81,   214,     0,     0,     0,   102,    67,   103,     0,
+     104,   215,     0,     0,     0,     0,     0,     0,     0,     0,
      105,     0,     0,     0,   106,     0,     0,     0,   107,     0,
        0,   108,    69,    70,    71,     0,     0,     0,     0,     0,
-       0,     0,   109,    72,     0,     0,     0,   110,    73,   111,
+     216,     0,   109,    72,     0,     0,     0,   110,    73,   111,
       74,   112,     0,     0,     0,     0,     0,     0,    75,     0,
-     113,   114,     0,     0,     0,     0,     0,    76,     0,    77,
-       1,     2,     0,     0,    78,   115,    79,    80,    81,     0,
+     113,   114,   217,   218,     0,     0,     0,    76,     0,    77,
+     100,   101,     0,     0,    78,   115,    79,    80,    81,     0,
        0,     0,   102,    67,   103,     0,   104,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   105,     0,     0,     0,
      106,     0,     0,     0,   107,     0,     0,   108,    69,    70,
       71,     0,     0,     0,     0,     0,     0,     0,   109,    72,
        0,     0,     0,   110,    73,   111,    74,   112,     0,     0,
        0,     0,     0,     0,    75,     0,   113,   114,     0,     0,
-       0,     0,     0,    76,     0,    77,     0,     0,     0,     0,
-      78,   115,    79,    80,    81
+       0,     0,     0,    76,     0,    77,     1,     2,     0,     0,
+      78,   115,    79,    80,    81,     0,     0,     0,   102,    67,
+     103,     0,   104,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   105,     0,     0,     0,   106,     0,     0,     0,
+     107,     0,     0,   108,    69,    70,    71,     0,     0,     0,
+       0,     0,     0,     0,   109,    72,     0,     0,     0,   110,
+      73,   111,    74,   112,     0,     0,     0,     0,     0,     0,
+      75,     0,   113,   114,     0,     0,     0,     0,     0,    76,
+       0,    77,     0,     0,     0,     0,    78,   115,    79,    80,
+      81
 };
 
 static const short yycheck[] =
 {
-      10,     0,   217,   218,     9,     4,    16,   259,    99,   280,
-      89,    54,   148,   148,   148,   149,   152,     9,   152,   151,
-     171,   108,   268,   269,   270,    38,    20,   116,   274,   275,
-       9,    41,     4,    85,     9,    10,    15,    16,   116,    82,
-     112,   113,    41,    53,    54,    17,    18,    19,    58,    33,
-       4,    61,     9,     4,    53,    54,   108,   148,   110,    58,
-      46,    74,    61,    17,    18,    19,    17,    18,    19,     9,
-       9,    57,    82,     9,    10,    15,    16,     9,    35,   168,
-      74,   160,    22,    82,    78,    95,     9,    10,    11,   335,
-     168,   242,    16,    17,     0,    94,    95,     6,     7,     8,
-       9,    10,    11,    35,    13,    14,     9,    10,    11,   355,
-     454,    24,    38,   118,   458,   107,    10,   116,   209,   210,
-     256,   256,   256,   394,   258,   259,   136,   263,   260,   263,
-     266,   115,   266,   112,   109,   286,   227,   136,   148,   149,
-     392,    50,   152,   115,   116,   109,   297,   110,    74,   113,
-     107,    51,   151,   152,   400,   109,     9,    39,   115,   169,
-     170,   115,    15,    16,   115,   256,   317,    80,   107,   168,
-     169,   170,   112,   109,   300,   107,   115,   109,    16,    17,
-      85,    94,    91,   115,   107,    62,   109,   313,   314,   280,
-     316,   115,   118,    85,    15,    16,    89,   288,    51,   108,
-      38,   416,    89,   108,   107,   110,   115,     6,     7,     8,
-       9,    10,    11,   113,    13,    14,    15,    16,   110,   303,
-     106,    44,    58,     7,    47,     9,    10,    11,    12,    13,
-      14,    17,    18,   119,   318,     7,    74,     9,    10,    11,
-      12,    13,    14,   109,    34,    35,   256,   113,   258,   259,
-      16,    50,   262,   263,    89,     9,   266,   348,   392,    25,
-     259,    15,    16,     3,   263,   356,    50,   266,   111,    68,
-     280,   109,   282,    26,   284,   113,     3,   115,    50,    44,
-      46,    65,    48,   102,   103,   104,   105,   112,    15,    16,
-     289,    57,    91,    65,   113,   109,    17,    18,    59,   113,
-      27,    28,    29,   394,    31,   396,   108,    91,   109,   108,
-       9,    10,    11,   108,    41,    16,    15,    16,    45,    91,
-     109,   109,    49,    86,   113,    52,    53,    54,    55,   109,
-     109,   109,   342,   113,   113,   113,    63,    64,    15,    16,
-      86,    68,    69,    70,    71,    72,    76,   357,   263,   359,
-     401,   266,    79,   404,    81,    82,    15,    16,    17,    18,
-     118,    88,    56,    90,    86,   375,    17,    18,    95,    96,
-      97,    98,    99,   102,   103,   104,   105,   426,   427,     3,
-     108,   108,   392,   108,   394,   118,     3,    10,   398,   108,
-     114,   114,   108,   392,     3,   110,   114,     7,   408,     9,
-      10,    11,    12,    13,    14,    15,    16,   118,   118,   116,
-      40,   108,    22,    73,   110,   110,   101,   109,   101,   429,
-     110,     5,     9,    93,   100,   435,    36,    37,    30,    73,
-      73,    30,   111,   443,   115,   108,   111,   119,   106,   110,
-      50,    51,     7,   108,     9,    10,    11,    12,    13,    14,
-      15,    16,   107,   111,   111,   111,    66,    22,     5,     7,
-      87,     9,    10,    11,    12,    13,    14,    15,    16,   117,
-      73,   109,   113,   109,    22,    85,   111,   108,   120,   111,
-     109,    91,   119,   111,   118,    50,    51,   113,   108,     4,
-     100,    16,   125,    29,    82,    61,    58,   107,   108,    95,
-     110,    66,    50,    51,     7,   168,     9,    10,    11,    12,
-      13,    14,    15,    16,   256,     9,   284,   398,    66,   394,
-      85,    15,    16,   227,   453,   147,    91,   277,   260,   281,
-     210,   428,   210,   304,    28,   100,   435,    85,   417,   248,
-      -1,   429,   107,    91,   433,   110,   258,    50,    51,    43,
-     359,    -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    53,
-      54,    55,   110,    66,    -1,    -1,    -1,    -1,    -1,    -1,
-      64,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,    -1,
-      -1,    -1,    85,    -1,    -1,    79,    -1,    -1,    91,    -1,
-      -1,    -1,    -1,    -1,    88,    -1,    90,   100,    15,    16,
-      -1,    95,    -1,    97,    98,    99,    23,   110,    -1,    -1,
-      27,    28,    29,    -1,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,
-      -1,    -1,    49,    -1,    -1,    52,    53,    54,    55,    -1,
-      -1,    -1,    -1,    -1,    61,    -1,    63,    64,    -1,    -1,
-      -1,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    79,    -1,    81,    82,    83,    84,    -1,    -1,
-      -1,    88,    -1,    90,    15,    16,    -1,    -1,    95,    96,
-      97,    98,    99,    -1,    -1,    -1,    27,    28,    29,    -1,
-      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      10,     0,   283,    99,   262,     4,    16,   148,   149,   217,
+     218,   152,   271,   272,   273,   151,   171,    38,   277,   278,
+       9,     4,     9,    10,     4,    33,    15,    16,     0,   148,
+     148,    41,     9,   152,    17,    18,    19,    17,    18,    19,
+       9,    89,    41,    53,    54,   106,     9,    10,    58,    24,
+       4,    61,   148,    74,    53,    54,     9,   116,   119,    58,
+       9,   108,    61,    17,    18,    19,     6,     7,     8,     9,
+      10,    11,    82,    13,    14,     9,    54,   306,   337,     9,
+      10,    11,    35,    82,    39,    95,    35,   242,    38,    16,
+      17,   320,   116,     9,   110,    94,    95,   118,   357,    15,
+      16,     9,    10,    11,    82,    80,    22,   115,    44,   168,
+      50,    47,   160,   209,   210,   396,    51,   116,   259,    94,
+     261,   262,   109,   112,    74,   266,   136,   263,   269,   109,
+     107,   227,   115,   116,   289,   115,   394,   136,   148,   149,
+     259,   259,   152,   402,   168,   300,   109,   266,    10,   118,
+     269,    91,   151,   152,   107,    62,   109,    20,   107,   169,
+     170,   115,   115,   259,   319,   303,   115,    85,   108,   168,
+     169,   170,    89,   107,    46,   115,     9,   107,   113,   109,
+     318,   115,    15,    16,    16,    57,   266,   283,   115,   269,
+      16,    17,   110,    25,    85,   291,   112,    85,     7,   107,
+       9,    10,    11,    12,    13,    14,    15,    16,    15,    16,
+     418,    74,    38,    22,    46,    78,    48,   108,    51,   110,
+     108,   403,   110,    58,   406,    57,     3,    36,    37,    89,
+       6,     7,     8,     9,    10,    11,    89,    13,    14,    15,
+      16,    50,    51,   109,   112,   113,   456,   113,    74,   259,
+     460,   261,   262,   394,   350,   265,   266,    66,     9,   269,
+      17,    18,   358,   262,    15,    16,   111,   266,   109,    44,
+     269,    26,   113,   283,    50,   285,    85,   287,     9,    10,
+      11,    59,    91,   109,    15,    16,   109,   113,   112,   115,
+     113,   100,    68,   292,    15,    16,    17,    18,   107,   108,
+     396,   110,   398,     7,   108,     9,    10,    11,    12,    13,
+      14,   109,   109,   109,   109,    91,   113,   113,   113,     7,
+     108,     9,    10,    11,    12,    13,    14,   109,    34,    35,
+      16,   113,   108,   118,   344,   104,   105,   102,   103,    17,
+      18,    15,    16,   109,    17,    18,    50,     3,    86,   359,
+      86,   361,   428,   429,    76,    56,    86,     3,   108,    15,
+      16,    65,    50,   108,   118,     3,   108,   377,   114,   108,
+     114,    27,    28,    29,    10,    31,     3,    65,   110,    40,
+     114,   118,   108,   118,   394,    41,   396,    91,   116,    45,
+     400,    73,   110,    49,   110,   394,    52,    53,    54,    55,
+     410,   101,   109,    91,   113,   101,     5,    63,    64,     9,
+      93,   110,    68,    69,    70,    71,    72,    30,    73,   100,
+      73,   431,    30,    79,   115,    81,    82,   437,     5,   108,
+     119,   111,    88,   110,    90,   445,   111,   106,   108,    95,
+      96,    97,    98,    99,   111,   107,   111,   111,    87,   117,
+      73,     7,   108,     9,    10,    11,    12,    13,    14,    15,
+      16,   109,   113,   120,   109,     7,    22,     9,    10,    11,
+      12,    13,    14,    15,    16,   108,   111,   109,   119,     7,
+      22,     9,    10,    11,    12,    13,    14,    15,    16,   111,
+     108,   111,   113,   118,    50,    51,     4,   125,    16,    29,
+      82,    61,    95,    58,   147,   168,   259,   287,    50,    51,
+      66,   400,   396,   227,   455,   263,   280,   284,   210,   430,
+     210,     9,    50,    51,    66,   419,   307,    15,    16,    85,
+     314,   317,   437,   435,   251,    91,   431,   261,    66,   361,
+      28,    -1,    -1,    85,   100,    -1,    -1,    -1,    -1,    91,
+      -1,   107,    -1,    -1,   110,    43,    -1,    85,   100,    -1,
+      -1,    -1,    -1,    91,    -1,    53,    54,    55,   110,    -1,
+      -1,    -1,   100,    -1,    -1,    -1,    64,    -1,    -1,    -1,
+      -1,    69,   110,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    -1,    90,    -1,    15,    16,    -1,    95,    -1,    97,
+      98,    99,    23,    -1,    -1,    -1,    27,    28,    29,    -1,
+      31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    49,    -1,
       -1,    52,    53,    54,    55,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    63,    64,    -1,    -1,    -1,    68,    69,    70,
+      61,    -1,    63,    64,    -1,    -1,    -1,    68,    69,    70,
       71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,
-      81,    82,    -1,    -1,    -1,    -1,    -1,    88,    -1,    90,
+      81,    82,    83,    84,    -1,    -1,    -1,    88,    -1,    90,
       15,    16,    -1,    -1,    95,    96,    97,    98,    99,    -1,
       -1,    -1,    27,    28,    29,    -1,    31,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
@@ -1230,61 +1226,69 @@
       55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    64,
       -1,    -1,    -1,    68,    69,    70,    71,    72,    -1,    -1,
       -1,    -1,    -1,    -1,    79,    -1,    81,    82,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    90,    -1,    -1,    -1,    -1,
-      95,    96,    97,    98,    99
+      -1,    -1,    -1,    88,    -1,    90,    15,    16,    -1,    -1,
+      95,    96,    97,    98,    99,    -1,    -1,    -1,    27,    28,
+      29,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,
+      49,    -1,    -1,    52,    53,    54,    55,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    63,    64,    -1,    -1,    -1,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,    88,
+      -1,    90,    -1,    -1,    -1,    -1,    95,    96,    97,    98,
+      99
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,    15,    16,   122,   123,   124,   234,     0,   124,   125,
-     108,   126,   127,     9,    10,   109,   128,   129,   237,    39,
+       0,    15,    16,   122,   123,   124,   236,     0,   124,   125,
+     108,   126,   127,     9,    10,   109,   128,   129,   239,    39,
      109,   129,   110,    16,    25,    46,    48,    57,   130,   131,
      132,    10,    62,    89,    89,    58,    89,     3,   132,   111,
       26,    47,   133,   134,   145,   146,    22,   112,   147,   148,
-     234,   237,    44,    59,   138,   139,   112,   112,   113,   108,
-      51,   140,   142,   143,   144,   234,   237,    28,    43,    53,
+     236,   239,    44,    59,   138,   139,   112,   112,   113,   108,
+      51,   140,   142,   143,   144,   236,   239,    28,    43,    53,
       54,    55,    64,    69,    71,    79,    88,    90,    95,    97,
-      98,    99,   135,   136,   150,   152,   182,   192,   234,   237,
+      98,    99,   135,   136,   150,   152,   182,   192,   236,   239,
      148,   109,   112,   142,    51,   113,   108,    16,   136,     3,
       15,    16,    27,    29,    31,    41,    45,    49,    52,    63,
       68,    70,    72,    81,    82,    96,   108,   151,   176,   189,
-     190,   191,   192,   235,   151,   234,   144,   109,   137,    33,
-     115,   162,   172,   229,   230,   231,   118,    86,    86,    76,
-      56,    86,   153,   154,   189,   190,   234,     3,   108,   108,
-     224,   118,     3,   127,   141,   108,    24,    80,    94,   232,
-     173,   174,    46,    57,   233,   234,   237,   109,   113,   114,
+     190,   191,   192,   237,   151,   236,   144,   109,   137,    33,
+     115,   162,   172,   231,   232,   233,   118,    86,    86,    76,
+      56,    86,   153,   154,   189,   190,   236,     3,   108,   108,
+     226,   118,     3,   127,   141,   108,    24,    80,    94,   234,
+     173,   174,    46,    57,   235,   236,   239,   109,   113,   114,
      114,   108,   149,     6,     7,     8,    10,    11,    13,    14,
-      50,    91,   149,   155,   156,   172,   185,   187,   227,   237,
-     107,   109,   225,   226,   227,   237,    17,    18,   177,   178,
-     179,   234,    68,   108,   183,   185,   186,   234,   237,    17,
+      50,    91,   149,   155,   156,   172,   185,   187,   229,   239,
+     107,   109,   227,   228,   229,   239,    17,    18,   177,   178,
+     179,   236,    68,   108,   183,   185,   186,   236,   239,    17,
       18,   164,   165,    10,    23,    32,    61,    83,    84,   151,
-     175,    85,   110,   196,   197,   198,   199,     3,   154,   234,
-     237,   234,   237,    12,    22,    50,    51,    66,    85,    91,
-     100,   107,   110,   187,   200,   201,   202,   203,   204,   205,
-     206,   227,   228,   234,   237,   109,   113,   109,   113,   110,
-     118,   184,   118,   114,    16,    17,    38,    74,   172,   180,
-     181,   222,   223,   172,   180,   181,   109,   113,   116,    40,
-     108,    73,   108,   196,   108,   196,   110,    36,    37,   108,
-     200,   211,   212,   214,   216,   217,   218,   110,   162,   172,
-     101,   106,   119,   215,    34,    35,   200,   109,   102,   103,
-     104,   105,   113,   193,   194,   101,   195,   110,   215,   156,
-     226,   186,   227,   237,   178,     5,   188,   237,   183,   183,
-     222,   118,   222,   222,    93,   163,   222,   222,   100,   166,
-     167,   165,    30,   107,   160,   161,   171,   172,   237,   176,
-      35,   157,   158,   159,   171,   172,   237,    73,   157,    73,
-     200,    30,   172,   234,   111,   111,   108,   200,   202,   119,
-     106,    65,   204,   110,   199,   108,   111,   107,   202,   202,
-     202,   200,    65,   204,   111,   111,     5,    17,    18,   222,
-      87,   237,   117,   109,   113,   172,    73,   109,   113,   222,
-     172,   236,   237,   109,   236,   111,   108,   109,   120,   219,
-     220,   111,   119,   107,   207,   208,   237,   113,   111,   108,
-     186,   227,   161,   172,   159,   222,   229,   229,   213,   118,
-     221,   237,   109,   113,   109,   113,   196,   201,   168,   174,
-     174,   188,   221,   118,   220,   208,    20,    74,    78,   209,
-     210,     4,    19,   115,   169,   170,   179,   237,   169,   109,
-     170,   116
+     175,    85,   110,   195,   196,   197,   198,     3,   154,   236,
+     239,   236,   239,    12,    22,    50,    51,    66,    85,    91,
+     100,   107,   110,   187,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   229,   230,   236,   239,   109,   113,
+     109,   113,   110,   118,   184,   118,   114,    16,    17,    38,
+      74,   172,   180,   181,   224,   225,   172,   180,   181,   109,
+     113,   116,    40,   108,    73,   108,   195,   108,   195,   110,
+      36,    37,   108,   199,   213,   214,   216,   218,   219,   220,
+     110,   162,   172,   101,   106,   119,   217,    34,    35,   199,
+     109,   113,   104,   105,   193,   102,   103,   194,   101,   110,
+     217,   156,   228,   186,   229,   239,   178,     5,   188,   239,
+     183,   183,   224,   118,   224,   224,    93,   163,   224,   224,
+     100,   166,   167,   165,    30,   107,   160,   161,   171,   172,
+     239,   176,    35,   157,   158,   159,   171,   172,   239,    73,
+     157,    73,   199,    30,   172,   236,   111,   111,   108,   199,
+     204,   119,   106,    65,   206,   110,   198,   108,   111,   107,
+     202,   203,   204,   199,    65,   206,   111,   111,     5,    17,
+      18,   224,    87,   239,   117,   109,   113,   172,    73,   109,
+     113,   224,   172,   238,   239,   109,   238,   111,   108,   109,
+     120,   221,   222,   111,   119,   107,   209,   210,   239,   113,
+     111,   108,   186,   229,   161,   172,   159,   224,   231,   231,
+     215,   118,   223,   239,   109,   113,   109,   113,   195,   200,
+     168,   174,   174,   188,   223,   118,   222,   210,    20,    74,
+      78,   211,   212,     4,    19,   115,   169,   170,   179,   239,
+     169,   109,   170,   116
 };
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
@@ -1835,14 +1839,14 @@
   switch (yyn)
     {
         case 2:
-#line 350 "asn1p_y.y"
+#line 353 "asn1p_y.y"
     {
 		*(void **)param = yyvsp[0].a_grammar;
 	}
     break;
 
   case 3:
-#line 356 "asn1p_y.y"
+#line 359 "asn1p_y.y"
     {
 		yyval.a_grammar = asn1p_new();
 		checkmem(yyval.a_grammar);
@@ -1851,7 +1855,7 @@
     break;
 
   case 4:
-#line 361 "asn1p_y.y"
+#line 364 "asn1p_y.y"
     {
 		yyval.a_grammar = yyvsp[-1].a_grammar;
 		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
@@ -1859,12 +1863,12 @@
     break;
 
   case 5:
-#line 378 "asn1p_y.y"
+#line 381 "asn1p_y.y"
     { currentModule = asn1p_module_new(); }
     break;
 
   case 6:
-#line 383 "asn1p_y.y"
+#line 386 "asn1p_y.y"
     {
 
 		yyval.a_module = currentModule;
@@ -1885,31 +1889,31 @@
     break;
 
   case 7:
-#line 407 "asn1p_y.y"
+#line 410 "asn1p_y.y"
     { yyval.a_oid = 0; }
     break;
 
   case 8:
-#line 408 "asn1p_y.y"
+#line 411 "asn1p_y.y"
     { yyval.a_oid = yyvsp[0].a_oid; }
     break;
 
   case 9:
-#line 412 "asn1p_y.y"
+#line 415 "asn1p_y.y"
     {
 		yyval.a_oid = yyvsp[-1].a_oid;
 	}
     break;
 
   case 10:
-#line 415 "asn1p_y.y"
+#line 418 "asn1p_y.y"
     {
 		yyval.a_oid = 0;
 	}
     break;
 
   case 11:
-#line 421 "asn1p_y.y"
+#line 424 "asn1p_y.y"
     {
 		yyval.a_oid = asn1p_oid_new();
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1919,7 +1923,7 @@
     break;
 
   case 12:
-#line 427 "asn1p_y.y"
+#line 430 "asn1p_y.y"
     {
 		yyval.a_oid = yyvsp[-1].a_oid;
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1929,7 +1933,7 @@
     break;
 
   case 13:
-#line 436 "asn1p_y.y"
+#line 439 "asn1p_y.y"
     {					/* iso */
 		yyval.a_oid_arc.name = yyvsp[0].tv_str;
 		yyval.a_oid_arc.number = -1;
@@ -1937,7 +1941,7 @@
     break;
 
   case 14:
-#line 440 "asn1p_y.y"
+#line 443 "asn1p_y.y"
     {		/* iso(1) */
 		yyval.a_oid_arc.name = yyvsp[-3].tv_str;
 		yyval.a_oid_arc.number = yyvsp[-1].a_int;
@@ -1945,7 +1949,7 @@
     break;
 
   case 15:
-#line 444 "asn1p_y.y"
+#line 447 "asn1p_y.y"
     {					/* 1 */
 		yyval.a_oid_arc.name = 0;
 		yyval.a_oid_arc.number = yyvsp[0].a_int;
@@ -1953,61 +1957,61 @@
     break;
 
   case 16:
-#line 454 "asn1p_y.y"
+#line 457 "asn1p_y.y"
     { yyval.a_module_flags = MSF_NOFLAGS; }
     break;
 
   case 17:
-#line 455 "asn1p_y.y"
+#line 458 "asn1p_y.y"
     {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	}
     break;
 
   case 18:
-#line 464 "asn1p_y.y"
+#line 467 "asn1p_y.y"
     {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	}
     break;
 
   case 19:
-#line 467 "asn1p_y.y"
+#line 470 "asn1p_y.y"
     {
 		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
 	}
     break;
 
   case 20:
-#line 476 "asn1p_y.y"
+#line 479 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
 	}
     break;
 
   case 21:
-#line 479 "asn1p_y.y"
+#line 482 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
 	}
     break;
 
   case 22:
-#line 482 "asn1p_y.y"
+#line 485 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
 	}
     break;
 
   case 23:
-#line 485 "asn1p_y.y"
+#line 488 "asn1p_y.y"
     {
 		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
 	}
     break;
 
   case 24:
-#line 489 "asn1p_y.y"
+#line 492 "asn1p_y.y"
     {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
@@ -2026,19 +2030,19 @@
     break;
 
   case 25:
-#line 510 "asn1p_y.y"
+#line 513 "asn1p_y.y"
     { yyval.a_module = 0; }
     break;
 
   case 26:
-#line 511 "asn1p_y.y"
+#line 514 "asn1p_y.y"
     {
 		yyval.a_module = yyvsp[0].a_module;
 	}
     break;
 
   case 27:
-#line 520 "asn1p_y.y"
+#line 523 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		AL_IMPORT(yyval.a_module, exports, yyvsp[-2].a_module, xp_next);
@@ -2048,14 +2052,14 @@
     break;
 
   case 28:
-#line 529 "asn1p_y.y"
+#line 532 "asn1p_y.y"
     {
 		yyval.a_module = yyvsp[0].a_module;
 	}
     break;
 
   case 29:
-#line 532 "asn1p_y.y"
+#line 535 "asn1p_y.y"
     {
 		if(yyvsp[-1].a_module) {
 			yyval.a_module = yyvsp[-1].a_module;
@@ -2068,7 +2072,7 @@
     break;
 
   case 30:
-#line 548 "asn1p_y.y"
+#line 551 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2079,7 +2083,7 @@
     break;
 
   case 31:
-#line 555 "asn1p_y.y"
+#line 558 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2090,7 +2094,7 @@
     break;
 
   case 32:
-#line 568 "asn1p_y.y"
+#line 571 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2101,12 +2105,12 @@
     break;
 
   case 33:
-#line 576 "asn1p_y.y"
+#line 579 "asn1p_y.y"
     { asn1p_lexer_hack_push_encoding_control(); }
     break;
 
   case 34:
-#line 577 "asn1p_y.y"
+#line 580 "asn1p_y.y"
     {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -2118,7 +2122,7 @@
     break;
 
   case 35:
-#line 589 "asn1p_y.y"
+#line 592 "asn1p_y.y"
     {
 		return yyerror(
 			"Attempt to redefine a standard basic string type, "
@@ -2127,12 +2131,12 @@
     break;
 
   case 36:
-#line 602 "asn1p_y.y"
+#line 605 "asn1p_y.y"
     { yyval.a_module = 0; }
     break;
 
   case 38:
-#line 606 "asn1p_y.y"
+#line 609 "asn1p_y.y"
     {
 		if(!saved_aid && 0)
 			return yyerror("Unterminated IMPORTS FROM, "
@@ -2143,14 +2147,14 @@
     break;
 
   case 39:
-#line 616 "asn1p_y.y"
+#line 619 "asn1p_y.y"
     {
 		return yyerror("Empty IMPORTS list");
 	}
     break;
 
   case 40:
-#line 622 "asn1p_y.y"
+#line 625 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2159,7 +2163,7 @@
     break;
 
   case 41:
-#line 627 "asn1p_y.y"
+#line 630 "asn1p_y.y"
     {
 		yyval.a_module = yyvsp[-1].a_module;
 		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
@@ -2167,17 +2171,17 @@
     break;
 
   case 42:
-#line 634 "asn1p_y.y"
+#line 637 "asn1p_y.y"
     { memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); }
     break;
 
   case 43:
-#line 635 "asn1p_y.y"
+#line 638 "asn1p_y.y"
     { yyval.a_aid.oid = yyvsp[0].a_oid; }
     break;
 
   case 44:
-#line 639 "asn1p_y.y"
+#line 642 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-3].a_xports;
 		yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
@@ -2189,7 +2193,7 @@
     break;
 
   case 45:
-#line 650 "asn1p_y.y"
+#line 653 "asn1p_y.y"
     {
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
@@ -2198,7 +2202,7 @@
     break;
 
   case 46:
-#line 655 "asn1p_y.y"
+#line 658 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
@@ -2206,7 +2210,7 @@
     break;
 
   case 47:
-#line 662 "asn1p_y.y"
+#line 665 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2216,7 +2220,7 @@
     break;
 
   case 48:
-#line 668 "asn1p_y.y"
+#line 671 "asn1p_y.y"
     {		/* Completely equivalent to above */
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2226,7 +2230,7 @@
     break;
 
   case 49:
-#line 674 "asn1p_y.y"
+#line 677 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2236,12 +2240,12 @@
     break;
 
   case 50:
-#line 684 "asn1p_y.y"
+#line 687 "asn1p_y.y"
     { yyval.a_module = 0; }
     break;
 
   case 51:
-#line 685 "asn1p_y.y"
+#line 688 "asn1p_y.y"
     {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -2254,21 +2258,21 @@
     break;
 
   case 52:
-#line 697 "asn1p_y.y"
+#line 700 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-1].a_xports;
 	}
     break;
 
   case 53:
-#line 700 "asn1p_y.y"
+#line 703 "asn1p_y.y"
     {
 		yyval.a_xports = 0;
 	}
     break;
 
   case 54:
-#line 703 "asn1p_y.y"
+#line 706 "asn1p_y.y"
     {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		yyval.a_xports = asn1p_xports_new();
@@ -2277,7 +2281,7 @@
     break;
 
   case 55:
-#line 711 "asn1p_y.y"
+#line 714 "asn1p_y.y"
     {
 		yyval.a_xports = asn1p_xports_new();
 		assert(yyval.a_xports);
@@ -2286,7 +2290,7 @@
     break;
 
   case 56:
-#line 716 "asn1p_y.y"
+#line 719 "asn1p_y.y"
     {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
@@ -2294,7 +2298,7 @@
     break;
 
   case 57:
-#line 723 "asn1p_y.y"
+#line 726 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2304,7 +2308,7 @@
     break;
 
   case 58:
-#line 729 "asn1p_y.y"
+#line 732 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2314,7 +2318,7 @@
     break;
 
   case 59:
-#line 735 "asn1p_y.y"
+#line 738 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2324,12 +2328,12 @@
     break;
 
   case 60:
-#line 744 "asn1p_y.y"
+#line 747 "asn1p_y.y"
     { yyval.a_constr = yyvsp[-1].a_constr; }
     break;
 
   case 61:
-#line 747 "asn1p_y.y"
+#line 750 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2340,14 +2344,14 @@
     break;
 
   case 62:
-#line 757 "asn1p_y.y"
+#line 760 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
   case 63:
-#line 770 "asn1p_y.y"
+#line 773 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2358,7 +2362,7 @@
     break;
 
   case 64:
-#line 780 "asn1p_y.y"
+#line 783 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2370,7 +2374,7 @@
     break;
 
   case 65:
-#line 800 "asn1p_y.y"
+#line 803 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2380,7 +2384,7 @@
     break;
 
   case 66:
-#line 806 "asn1p_y.y"
+#line 809 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2390,7 +2394,7 @@
     break;
 
   case 67:
-#line 822 "asn1p_y.y"
+#line 825 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
@@ -2399,7 +2403,7 @@
     break;
 
   case 68:
-#line 828 "asn1p_y.y"
+#line 831 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
@@ -2408,7 +2412,7 @@
     break;
 
   case 69:
-#line 836 "asn1p_y.y"
+#line 839 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_plist = asn1p_paramlist_new(yylineno);
@@ -2421,7 +2425,7 @@
     break;
 
   case 70:
-#line 845 "asn1p_y.y"
+#line 848 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_plist = yyvsp[-2].a_plist;
@@ -2433,7 +2437,7 @@
     break;
 
   case 71:
-#line 856 "asn1p_y.y"
+#line 859 "asn1p_y.y"
     {
 		yyval.a_parg.governor = NULL;
 		yyval.a_parg.argument = yyvsp[0].tv_str;
@@ -2441,7 +2445,7 @@
     break;
 
   case 72:
-#line 860 "asn1p_y.y"
+#line 863 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -2452,7 +2456,7 @@
     break;
 
   case 73:
-#line 867 "asn1p_y.y"
+#line 870 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -2463,7 +2467,7 @@
     break;
 
   case 74:
-#line 874 "asn1p_y.y"
+#line 877 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -2475,7 +2479,7 @@
     break;
 
   case 75:
-#line 882 "asn1p_y.y"
+#line 885 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -2487,7 +2491,7 @@
     break;
 
   case 76:
-#line 893 "asn1p_y.y"
+#line 896 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2496,7 +2500,7 @@
     break;
 
   case 77:
-#line 898 "asn1p_y.y"
+#line 901 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
@@ -2504,14 +2508,14 @@
     break;
 
   case 78:
-#line 905 "asn1p_y.y"
+#line 908 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
   case 79:
-#line 908 "asn1p_y.y"
+#line 911 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2523,7 +2527,7 @@
     break;
 
   case 80:
-#line 916 "asn1p_y.y"
+#line 919 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		yyval.a_expr = NEW_EXPR();
@@ -2538,7 +2542,7 @@
     break;
 
   case 81:
-#line 927 "asn1p_y.y"
+#line 930 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		yyval.a_expr->expr_type = A1TC_VALUESET;
@@ -2548,17 +2552,17 @@
     break;
 
   case 82:
-#line 950 "asn1p_y.y"
+#line 953 "asn1p_y.y"
     { yyval.a_expr = NEW_EXPR(); }
     break;
 
   case 83:
-#line 951 "asn1p_y.y"
+#line 954 "asn1p_y.y"
     { yyval.a_expr = yyvsp[0].a_expr; }
     break;
 
   case 84:
-#line 954 "asn1p_y.y"
+#line 957 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2567,7 +2571,7 @@
     break;
 
   case 85:
-#line 959 "asn1p_y.y"
+#line 962 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
@@ -2575,7 +2579,7 @@
     break;
 
   case 86:
-#line 966 "asn1p_y.y"
+#line 969 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2586,7 +2590,7 @@
     break;
 
   case 87:
-#line 973 "asn1p_y.y"
+#line 976 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
@@ -2596,7 +2600,7 @@
     break;
 
   case 88:
-#line 979 "asn1p_y.y"
+#line 982 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2607,14 +2611,14 @@
     break;
 
   case 89:
-#line 986 "asn1p_y.y"
+#line 989 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
   case 90:
-#line 992 "asn1p_y.y"
+#line 995 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2623,7 +2627,7 @@
     break;
 
   case 91:
-#line 997 "asn1p_y.y"
+#line 1000 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
@@ -2631,7 +2635,7 @@
     break;
 
   case 92:
-#line 1004 "asn1p_y.y"
+#line 1007 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -2640,14 +2644,14 @@
     break;
 
   case 93:
-#line 1009 "asn1p_y.y"
+#line 1012 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
   case 94:
-#line 1012 "asn1p_y.y"
+#line 1015 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		_fixup_anonymous_identifier(yyval.a_expr);
@@ -2655,7 +2659,7 @@
     break;
 
   case 95:
-#line 1019 "asn1p_y.y"
+#line 1022 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		checkmem(yyval.a_expr);
@@ -2666,17 +2670,17 @@
     break;
 
   case 96:
-#line 1029 "asn1p_y.y"
+#line 1032 "asn1p_y.y"
     { yyval.a_int = 0; }
     break;
 
   case 97:
-#line 1030 "asn1p_y.y"
+#line 1033 "asn1p_y.y"
     { yyval.a_int = 1; }
     break;
 
   case 98:
-#line 1034 "asn1p_y.y"
+#line 1037 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2687,7 +2691,7 @@
     break;
 
   case 99:
-#line 1041 "asn1p_y.y"
+#line 1044 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
@@ -2695,7 +2699,7 @@
     break;
 
   case 100:
-#line 1051 "asn1p_y.y"
+#line 1054 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2707,7 +2711,7 @@
     break;
 
   case 101:
-#line 1061 "asn1p_y.y"
+#line 1064 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -2720,7 +2724,7 @@
     break;
 
   case 102:
-#line 1072 "asn1p_y.y"
+#line 1075 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2732,7 +2736,7 @@
     break;
 
   case 103:
-#line 1082 "asn1p_y.y"
+#line 1085 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2745,7 +2749,7 @@
     break;
 
   case 104:
-#line 1093 "asn1p_y.y"
+#line 1096 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2757,7 +2761,7 @@
     break;
 
   case 105:
-#line 1103 "asn1p_y.y"
+#line 1106 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2770,7 +2774,7 @@
     break;
 
   case 106:
-#line 1114 "asn1p_y.y"
+#line 1117 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2783,31 +2787,31 @@
     break;
 
   case 107:
-#line 1126 "asn1p_y.y"
+#line 1129 "asn1p_y.y"
     { yyval.a_wsynt = 0; }
     break;
 
   case 108:
-#line 1127 "asn1p_y.y"
+#line 1130 "asn1p_y.y"
     {
 		yyval.a_wsynt = yyvsp[0].a_wsynt;
 	}
     break;
 
   case 109:
-#line 1134 "asn1p_y.y"
+#line 1137 "asn1p_y.y"
     { asn1p_lexer_hack_enable_with_syntax(); }
     break;
 
   case 110:
-#line 1136 "asn1p_y.y"
+#line 1139 "asn1p_y.y"
     {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 	}
     break;
 
   case 111:
-#line 1142 "asn1p_y.y"
+#line 1145 "asn1p_y.y"
     {
 		yyval.a_wsynt = asn1p_wsyntx_new();
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
@@ -2815,7 +2819,7 @@
     break;
 
   case 112:
-#line 1146 "asn1p_y.y"
+#line 1149 "asn1p_y.y"
     {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
@@ -2823,7 +2827,7 @@
     break;
 
   case 113:
-#line 1153 "asn1p_y.y"
+#line 1156 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_opaque.buf, 0);
 		yyval.a_wchunk->type = WC_WHITESPACE;
@@ -2831,14 +2835,14 @@
     break;
 
   case 114:
-#line 1157 "asn1p_y.y"
+#line 1160 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].tv_str, 0);
 	}
     break;
 
   case 115:
-#line 1160 "asn1p_y.y"
+#line 1163 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromstring(yyvsp[0].a_refcomp.name, 0);
 		yyval.a_wchunk->type = WC_FIELD;
@@ -2846,14 +2850,14 @@
     break;
 
   case 116:
-#line 1164 "asn1p_y.y"
+#line 1167 "asn1p_y.y"
     {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
 	}
     break;
 
   case 117:
-#line 1170 "asn1p_y.y"
+#line 1173 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2865,7 +2869,7 @@
     break;
 
   case 118:
-#line 1178 "asn1p_y.y"
+#line 1181 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2878,7 +2882,7 @@
     break;
 
   case 119:
-#line 1187 "asn1p_y.y"
+#line 1190 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2891,7 +2895,7 @@
     break;
 
   case 120:
-#line 1199 "asn1p_y.y"
+#line 1202 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyval.a_expr->tag = yyvsp[-2].a_tag;
@@ -2914,7 +2918,7 @@
     break;
 
   case 121:
-#line 1221 "asn1p_y.y"
+#line 1224 "asn1p_y.y"
     {
 		yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
 		asn1p_as_pointer = 0;
@@ -2922,7 +2926,7 @@
     break;
 
   case 122:
-#line 1228 "asn1p_y.y"
+#line 1231 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
@@ -2942,14 +2946,14 @@
     break;
 
   case 123:
-#line 1247 "asn1p_y.y"
+#line 1250 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[0].a_expr;
 	}
     break;
 
   case 124:
-#line 1250 "asn1p_y.y"
+#line 1253 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2959,7 +2963,7 @@
     break;
 
   case 125:
-#line 1256 "asn1p_y.y"
+#line 1259 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2969,7 +2973,7 @@
     break;
 
   case 126:
-#line 1262 "asn1p_y.y"
+#line 1265 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2979,7 +2983,7 @@
     break;
 
   case 127:
-#line 1268 "asn1p_y.y"
+#line 1271 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -2993,7 +2997,7 @@
     break;
 
   case 128:
-#line 1278 "asn1p_y.y"
+#line 1281 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -3007,7 +3011,7 @@
     break;
 
   case 129:
-#line 1288 "asn1p_y.y"
+#line 1291 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -3017,7 +3021,7 @@
     break;
 
   case 130:
-#line 1294 "asn1p_y.y"
+#line 1297 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_expr = NEW_EXPR();
@@ -3032,7 +3036,7 @@
     break;
 
   case 131:
-#line 1305 "asn1p_y.y"
+#line 1308 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -3043,7 +3047,7 @@
     break;
 
   case 132:
-#line 1320 "asn1p_y.y"
+#line 1323 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3055,7 +3059,7 @@
     break;
 
   case 133:
-#line 1328 "asn1p_y.y"
+#line 1331 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3069,7 +3073,7 @@
     break;
 
   case 134:
-#line 1338 "asn1p_y.y"
+#line 1341 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3083,7 +3087,7 @@
     break;
 
   case 135:
-#line 1348 "asn1p_y.y"
+#line 1351 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3097,7 +3101,7 @@
     break;
 
   case 136:
-#line 1358 "asn1p_y.y"
+#line 1361 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3109,7 +3113,7 @@
     break;
 
   case 137:
-#line 1366 "asn1p_y.y"
+#line 1369 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -3132,7 +3136,7 @@
     break;
 
   case 138:
-#line 1388 "asn1p_y.y"
+#line 1391 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -3144,7 +3148,7 @@
     break;
 
   case 139:
-#line 1396 "asn1p_y.y"
+#line 1399 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -3155,7 +3159,7 @@
     break;
 
   case 141:
-#line 1409 "asn1p_y.y"
+#line 1412 "asn1p_y.y"
     {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
@@ -3163,7 +3167,7 @@
     break;
 
   case 142:
-#line 1414 "asn1p_y.y"
+#line 1417 "asn1p_y.y"
     {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
@@ -3171,7 +3175,7 @@
     break;
 
   case 143:
-#line 1423 "asn1p_y.y"
+#line 1426 "asn1p_y.y"
     {
 		yyval.a_ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
@@ -3179,7 +3183,7 @@
     break;
 
   case 144:
-#line 1427 "asn1p_y.y"
+#line 1430 "asn1p_y.y"
     {
 		yyval.a_ref = yyval.a_ref;
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
@@ -3187,7 +3191,7 @@
     break;
 
   case 145:
-#line 1431 "asn1p_y.y"
+#line 1434 "asn1p_y.y"
     {
 		yyval.a_ref = yyval.a_ref;
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
@@ -3195,7 +3199,7 @@
     break;
 
   case 146:
-#line 1438 "asn1p_y.y"
+#line 1441 "asn1p_y.y"
     {
 		yyval.a_ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
@@ -3203,7 +3207,7 @@
     break;
 
   case 147:
-#line 1458 "asn1p_y.y"
+#line 1461 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -3214,7 +3218,7 @@
     break;
 
   case 150:
-#line 1470 "asn1p_y.y"
+#line 1473 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3225,12 +3229,12 @@
     break;
 
   case 151:
-#line 1477 "asn1p_y.y"
+#line 1480 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
   case 152:
-#line 1477 "asn1p_y.y"
+#line 1480 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
@@ -3239,7 +3243,7 @@
     break;
 
   case 153:
-#line 1482 "asn1p_y.y"
+#line 1485 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3248,7 +3252,7 @@
     break;
 
   case 154:
-#line 1490 "asn1p_y.y"
+#line 1493 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3257,7 +3261,7 @@
     break;
 
   case 155:
-#line 1495 "asn1p_y.y"
+#line 1498 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3266,7 +3270,7 @@
     break;
 
   case 156:
-#line 1500 "asn1p_y.y"
+#line 1503 "asn1p_y.y"
     {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
@@ -3274,7 +3278,7 @@
     break;
 
   case 157:
-#line 1504 "asn1p_y.y"
+#line 1507 "asn1p_y.y"
     {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
@@ -3282,21 +3286,21 @@
     break;
 
   case 158:
-#line 1508 "asn1p_y.y"
+#line 1511 "asn1p_y.y"
     {
 		yyval.a_value = yyval.a_value;
 	}
     break;
 
   case 159:
-#line 1511 "asn1p_y.y"
+#line 1514 "asn1p_y.y"
     {
 		yyval.a_value = yyvsp[0].a_value;
 	}
     break;
 
   case 160:
-#line 1517 "asn1p_y.y"
+#line 1520 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3311,7 +3315,7 @@
     break;
 
   case 161:
-#line 1528 "asn1p_y.y"
+#line 1531 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3329,7 +3333,7 @@
     break;
 
   case 162:
-#line 1546 "asn1p_y.y"
+#line 1549 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
@@ -3337,7 +3341,7 @@
     break;
 
   case 163:
-#line 1550 "asn1p_y.y"
+#line 1553 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
@@ -3346,7 +3350,7 @@
     break;
 
   case 164:
-#line 1555 "asn1p_y.y"
+#line 1558 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
@@ -3355,7 +3359,7 @@
     break;
 
   case 165:
-#line 1589 "asn1p_y.y"
+#line 1592 "asn1p_y.y"
     {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -3368,7 +3372,7 @@
     break;
 
   case 166:
-#line 1598 "asn1p_y.y"
+#line 1601 "asn1p_y.y"
     {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -3384,87 +3388,87 @@
     break;
 
   case 167:
-#line 1613 "asn1p_y.y"
+#line 1616 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_BOOLEAN; }
     break;
 
   case 168:
-#line 1614 "asn1p_y.y"
+#line 1617 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_NULL; }
     break;
 
   case 169:
-#line 1615 "asn1p_y.y"
+#line 1618 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_REAL; }
     break;
 
   case 170:
-#line 1616 "asn1p_y.y"
+#line 1619 "asn1p_y.y"
     { yyval.a_type = yyvsp[0].a_type; }
     break;
 
   case 171:
-#line 1617 "asn1p_y.y"
+#line 1620 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_OCTET_STRING; }
     break;
 
   case 172:
-#line 1618 "asn1p_y.y"
+#line 1621 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; }
     break;
 
   case 173:
-#line 1619 "asn1p_y.y"
+#line 1622 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_RELATIVE_OID; }
     break;
 
   case 174:
-#line 1620 "asn1p_y.y"
+#line 1623 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_EXTERNAL; }
     break;
 
   case 175:
-#line 1621 "asn1p_y.y"
+#line 1624 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; }
     break;
 
   case 176:
-#line 1622 "asn1p_y.y"
+#line 1625 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_CHARACTER_STRING; }
     break;
 
   case 177:
-#line 1623 "asn1p_y.y"
+#line 1626 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_UTCTime; }
     break;
 
   case 178:
-#line 1624 "asn1p_y.y"
+#line 1627 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_GeneralizedTime; }
     break;
 
   case 179:
-#line 1625 "asn1p_y.y"
+#line 1628 "asn1p_y.y"
     { yyval.a_type = yyvsp[0].a_type; }
     break;
 
   case 180:
-#line 1632 "asn1p_y.y"
+#line 1635 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_INTEGER; }
     break;
 
   case 181:
-#line 1633 "asn1p_y.y"
+#line 1636 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_ENUMERATED; }
     break;
 
   case 182:
-#line 1634 "asn1p_y.y"
+#line 1637 "asn1p_y.y"
     { yyval.a_type = ASN_BASIC_BIT_STRING; }
     break;
 
   case 183:
-#line 1638 "asn1p_y.y"
+#line 1641 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -3474,7 +3478,7 @@
     break;
 
   case 184:
-#line 1644 "asn1p_y.y"
+#line 1647 "asn1p_y.y"
     {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -3488,12 +3492,12 @@
     break;
 
   case 185:
-#line 1657 "asn1p_y.y"
+#line 1660 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_BMPString; }
     break;
 
   case 186:
-#line 1658 "asn1p_y.y"
+#line 1661 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
@@ -3501,7 +3505,7 @@
     break;
 
   case 187:
-#line 1662 "asn1p_y.y"
+#line 1665 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
@@ -3509,27 +3513,27 @@
     break;
 
   case 188:
-#line 1666 "asn1p_y.y"
+#line 1669 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_IA5String; }
     break;
 
   case 189:
-#line 1667 "asn1p_y.y"
+#line 1670 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_ISO646String; }
     break;
 
   case 190:
-#line 1668 "asn1p_y.y"
+#line 1671 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_NumericString; }
     break;
 
   case 191:
-#line 1669 "asn1p_y.y"
+#line 1672 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_PrintableString; }
     break;
 
   case 192:
-#line 1670 "asn1p_y.y"
+#line 1673 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
@@ -3537,22 +3541,22 @@
     break;
 
   case 193:
-#line 1674 "asn1p_y.y"
+#line 1677 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_TeletexString; }
     break;
 
   case 194:
-#line 1675 "asn1p_y.y"
+#line 1678 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_UniversalString; }
     break;
 
   case 195:
-#line 1676 "asn1p_y.y"
+#line 1679 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_UTF8String; }
     break;
 
   case 196:
-#line 1677 "asn1p_y.y"
+#line 1680 "asn1p_y.y"
     {
 		yyval.a_type = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
@@ -3560,43 +3564,43 @@
     break;
 
   case 197:
-#line 1681 "asn1p_y.y"
+#line 1684 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_VisibleString; }
     break;
 
   case 198:
-#line 1682 "asn1p_y.y"
+#line 1685 "asn1p_y.y"
     { yyval.a_type = ASN_STRING_ObjectDescriptor; }
     break;
 
-  case 204:
-#line 1694 "asn1p_y.y"
+  case 203:
+#line 1696 "asn1p_y.y"
     { yyval.a_constr = 0; }
     break;
 
-  case 205:
-#line 1695 "asn1p_y.y"
+  case 204:
+#line 1697 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 207:
-#line 1702 "asn1p_y.y"
+  case 206:
+#line 1704 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	}
     break;
 
-  case 208:
-#line 1708 "asn1p_y.y"
+  case 207:
+#line 1710 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
 	}
     break;
 
-  case 209:
-#line 1711 "asn1p_y.y"
+  case 208:
+#line 1713 "asn1p_y.y"
     {
 		/*
 		 * This is a special case, for compatibility purposes.
@@ -3606,37 +3610,37 @@
 	}
     break;
 
-  case 210:
-#line 1721 "asn1p_y.y"
+  case 209:
+#line 1723 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	}
     break;
 
-  case 211:
-#line 1724 "asn1p_y.y"
+  case 210:
+#line 1726 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	}
     break;
 
-  case 212:
-#line 1730 "asn1p_y.y"
+  case 211:
+#line 1732 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		yyval.a_constr->type = ACT_EL_EXT;
 	}
     break;
 
-  case 213:
-#line 1734 "asn1p_y.y"
+  case 212:
+#line 1736 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 214:
-#line 1737 "asn1p_y.y"
+  case 213:
+#line 1739 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3645,8 +3649,8 @@
 	}
     break;
 
-  case 215:
-#line 1743 "asn1p_y.y"
+  case 214:
+#line 1745 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3658,13 +3662,6 @@
     break;
 
   case 216:
-#line 1754 "asn1p_y.y"
-    {
-		yyval.a_constr = yyvsp[0].a_constr;
-	}
-    break;
-
-  case 217:
 #line 1757 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
@@ -3672,28 +3669,28 @@
     break;
 
   case 218:
-#line 1760 "asn1p_y.y"
+#line 1764 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 219:
-#line 1763 "asn1p_y.y"
+  case 220:
+#line 1771 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 220:
-#line 1766 "asn1p_y.y"
+  case 222:
+#line 1779 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 221:
-#line 1772 "asn1p_y.y"
+  case 223:
+#line 1785 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -3704,8 +3701,8 @@
 	}
     break;
 
-  case 222:
-#line 1780 "asn1p_y.y"
+  case 224:
+#line 1793 "asn1p_y.y"
     {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -3716,8 +3713,8 @@
 	}
     break;
 
-  case 223:
-#line 1788 "asn1p_y.y"
+  case 225:
+#line 1801 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3726,8 +3723,8 @@
 	}
     break;
 
-  case 224:
-#line 1794 "asn1p_y.y"
+  case 226:
+#line 1807 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3736,43 +3733,43 @@
 	}
     break;
 
-  case 225:
-#line 1800 "asn1p_y.y"
-    {
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-	}
-    break;
-
-  case 226:
-#line 1807 "asn1p_y.y"
-    {
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = asn1p_value_fromint(-123);
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-		yyval.a_constr->range_start->type = ATV_MIN;
-	}
-    break;
-
   case 227:
-#line 1815 "asn1p_y.y"
+#line 1813 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = yyvsp[-1].a_ctype;
 		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = asn1p_value_fromint(321);
-		yyval.a_constr->range_stop->type = ATV_MAX;
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
 	}
     break;
 
   case 228:
-#line 1823 "asn1p_y.y"
+#line 1820 "asn1p_y.y"
+    {
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
+		yyval.a_constr->range_start->type = ATV_MIN;
+	}
+    break;
+
+  case 229:
+#line 1828 "asn1p_y.y"
+    {
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_stop->type = ATV_MAX;
+	}
+    break;
+
+  case 230:
+#line 1836 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3784,29 +3781,29 @@
 	}
     break;
 
-  case 229:
-#line 1832 "asn1p_y.y"
+  case 231:
+#line 1845 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 230:
-#line 1838 "asn1p_y.y"
+  case 232:
+#line 1851 "asn1p_y.y"
     {
 		yyval.a_ctype = ACT_CT_SIZE;
 	}
     break;
 
-  case 231:
-#line 1841 "asn1p_y.y"
+  case 233:
+#line 1854 "asn1p_y.y"
     {
 		yyval.a_ctype = ACT_CT_FROM;
 	}
     break;
 
-  case 232:
-#line 1847 "asn1p_y.y"
+  case 234:
+#line 1860 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -3814,8 +3811,8 @@
 	}
     break;
 
-  case 233:
-#line 1852 "asn1p_y.y"
+  case 235:
+#line 1865 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
@@ -3823,8 +3820,8 @@
 	}
     break;
 
-  case 236:
-#line 1859 "asn1p_y.y"
+  case 238:
+#line 1872 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3838,8 +3835,8 @@
 	}
     break;
 
-  case 237:
-#line 1873 "asn1p_y.y"
+  case 239:
+#line 1886 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3853,36 +3850,36 @@
 	}
     break;
 
-  case 238:
-#line 1887 "asn1p_y.y"
+  case 240:
+#line 1900 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
 	}
     break;
 
-  case 239:
-#line 1890 "asn1p_y.y"
+  case 241:
+#line 1903 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	}
     break;
 
-  case 240:
-#line 1896 "asn1p_y.y"
+  case 242:
+#line 1909 "asn1p_y.y"
     {
 		yyval.a_constr = yyvsp[0].a_constr;
 	}
     break;
 
-  case 241:
-#line 1899 "asn1p_y.y"
+  case 243:
+#line 1912 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	}
     break;
 
-  case 242:
-#line 1905 "asn1p_y.y"
+  case 244:
+#line 1918 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3891,8 +3888,8 @@
 	}
     break;
 
-  case 243:
-#line 1911 "asn1p_y.y"
+  case 245:
+#line 1924 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3903,44 +3900,44 @@
 	}
     break;
 
-  case 244:
-#line 1925 "asn1p_y.y"
+  case 246:
+#line 1938 "asn1p_y.y"
     { yyval.a_pres = ACPRES_DEFAULT; }
     break;
 
-  case 245:
-#line 1926 "asn1p_y.y"
+  case 247:
+#line 1939 "asn1p_y.y"
     { yyval.a_pres = yyvsp[0].a_pres; }
     break;
 
-  case 246:
-#line 1930 "asn1p_y.y"
+  case 248:
+#line 1943 "asn1p_y.y"
     {
 		yyval.a_pres = ACPRES_PRESENT;
 	}
     break;
 
-  case 247:
-#line 1933 "asn1p_y.y"
+  case 249:
+#line 1946 "asn1p_y.y"
     {
 		yyval.a_pres = ACPRES_ABSENT;
 	}
     break;
 
-  case 248:
-#line 1936 "asn1p_y.y"
+  case 250:
+#line 1949 "asn1p_y.y"
     {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	}
     break;
 
-  case 252:
-#line 1951 "asn1p_y.y"
+  case 254:
+#line 1964 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 253:
-#line 1951 "asn1p_y.y"
+  case 255:
+#line 1964 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3951,8 +3948,8 @@
 	}
     break;
 
-  case 254:
-#line 1962 "asn1p_y.y"
+  case 256:
+#line 1975 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		yyval.a_constr->type = ACT_CT_CTNG;
@@ -3960,42 +3957,42 @@
 	}
     break;
 
-  case 255:
-#line 1970 "asn1p_y.y"
+  case 257:
+#line 1983 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_RANGE; }
     break;
 
-  case 256:
-#line 1971 "asn1p_y.y"
+  case 258:
+#line 1984 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_RLRANGE; }
     break;
 
-  case 257:
-#line 1972 "asn1p_y.y"
+  case 259:
+#line 1985 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_LLRANGE; }
     break;
 
-  case 258:
-#line 1973 "asn1p_y.y"
+  case 260:
+#line 1986 "asn1p_y.y"
     { yyval.a_ctype = ACT_EL_ULRANGE; }
     break;
 
-  case 259:
-#line 1976 "asn1p_y.y"
-    {
-		yyval.a_constr = yyvsp[0].a_constr;
-	}
-    break;
-
-  case 260:
-#line 1979 "asn1p_y.y"
-    {
-		yyval.a_constr = yyvsp[0].a_constr;
-	}
-    break;
-
   case 261:
-#line 1988 "asn1p_y.y"
+#line 1989 "asn1p_y.y"
+    {
+		yyval.a_constr = yyvsp[0].a_constr;
+	}
+    break;
+
+  case 262:
+#line 1992 "asn1p_y.y"
+    {
+		yyval.a_constr = yyvsp[0].a_constr;
+	}
+    break;
+
+  case 263:
+#line 2001 "asn1p_y.y"
     {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -4010,15 +4007,15 @@
 	}
     break;
 
-  case 262:
-#line 2003 "asn1p_y.y"
+  case 264:
+#line 2016 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	}
     break;
 
-  case 263:
-#line 2009 "asn1p_y.y"
+  case 265:
+#line 2022 "asn1p_y.y"
     {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -4027,8 +4024,8 @@
 	}
     break;
 
-  case 264:
-#line 2015 "asn1p_y.y"
+  case 266:
+#line 2028 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -4039,8 +4036,8 @@
 	}
     break;
 
-  case 265:
-#line 2029 "asn1p_y.y"
+  case 267:
+#line 2042 "asn1p_y.y"
     {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -4054,8 +4051,8 @@
 	}
     break;
 
-  case 266:
-#line 2040 "asn1p_y.y"
+  case 268:
+#line 2053 "asn1p_y.y"
     {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -4070,15 +4067,15 @@
 	}
     break;
 
-  case 267:
-#line 2056 "asn1p_y.y"
+  case 269:
+#line 2069 "asn1p_y.y"
     {
 		yyval.tv_str = yyvsp[0].tv_str;
 	}
     break;
 
-  case 268:
-#line 2059 "asn1p_y.y"
+  case 270:
+#line 2072 "asn1p_y.y"
     {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -4090,52 +4087,52 @@
 	}
     break;
 
-  case 269:
-#line 2077 "asn1p_y.y"
+  case 271:
+#line 2090 "asn1p_y.y"
     {
 		yyval.a_marker.flags = EM_NOMARK;
 		yyval.a_marker.default_value = 0;
 	}
     break;
 
-  case 270:
-#line 2081 "asn1p_y.y"
+  case 272:
+#line 2094 "asn1p_y.y"
     { yyval.a_marker = yyvsp[0].a_marker; }
     break;
 
-  case 271:
-#line 2085 "asn1p_y.y"
+  case 273:
+#line 2098 "asn1p_y.y"
     {
 		yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
 		yyval.a_marker.default_value = 0;
 	}
     break;
 
-  case 272:
-#line 2089 "asn1p_y.y"
+  case 274:
+#line 2102 "asn1p_y.y"
     {
 		yyval.a_marker.flags = EM_DEFAULT;
 		yyval.a_marker.default_value = yyvsp[0].a_value;
 	}
     break;
 
-  case 273:
-#line 2112 "asn1p_y.y"
+  case 275:
+#line 2125 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
 	}
     break;
 
-  case 274:
-#line 2116 "asn1p_y.y"
+  case 276:
+#line 2129 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	}
     break;
 
-  case 275:
-#line 2122 "asn1p_y.y"
+  case 277:
+#line 2135 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -4143,16 +4140,16 @@
 	}
     break;
 
-  case 276:
-#line 2127 "asn1p_y.y"
+  case 278:
+#line 2140 "asn1p_y.y"
     {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	}
     break;
 
-  case 277:
-#line 2134 "asn1p_y.y"
+  case 279:
+#line 2147 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -4162,32 +4159,32 @@
 	}
     break;
 
-  case 278:
-#line 2141 "asn1p_y.y"
-    {
-		yyval.a_expr = NEW_EXPR();
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
-		yyval.a_expr->meta_type = AMT_VALUE;
-		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
-		yyval.a_expr->value = yyvsp[-1].a_value;
-	}
-    break;
-
-  case 279:
-#line 2149 "asn1p_y.y"
-    {
-		yyval.a_expr = NEW_EXPR();
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
-		yyval.a_expr->meta_type = AMT_VALUE;
-		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
-		yyval.a_expr->value = yyvsp[-1].a_value;
-	}
-    break;
-
   case 280:
-#line 2157 "asn1p_y.y"
+#line 2154 "asn1p_y.y"
+    {
+		yyval.a_expr = NEW_EXPR();
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
+		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
+		yyval.a_expr->value = yyvsp[-1].a_value;
+	}
+    break;
+
+  case 281:
+#line 2162 "asn1p_y.y"
+    {
+		yyval.a_expr = NEW_EXPR();
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
+		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
+		yyval.a_expr->value = yyvsp[-1].a_value;
+	}
+    break;
+
+  case 282:
+#line 2170 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -4197,8 +4194,8 @@
 	}
     break;
 
-  case 281:
-#line 2164 "asn1p_y.y"
+  case 283:
+#line 2177 "asn1p_y.y"
     {
 		yyval.a_expr = NEW_EXPR();
 		checkmem(yyval.a_expr);
@@ -4209,16 +4206,8 @@
 	}
     break;
 
-  case 282:
-#line 2175 "asn1p_y.y"
-    {
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	}
-    break;
-
-  case 283:
-#line 2179 "asn1p_y.y"
+  case 284:
+#line 2188 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
@@ -4226,92 +4215,84 @@
     break;
 
   case 285:
-#line 2187 "asn1p_y.y"
+#line 2192 "asn1p_y.y"
+    {
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	}
+    break;
+
+  case 287:
+#line 2200 "asn1p_y.y"
     {
 		yyval.a_value = asn1p_value_fromdouble(yyvsp[0].a_dbl);
 		checkmem(yyval.a_value);
 	}
     break;
 
-  case 286:
-#line 2218 "asn1p_y.y"
+  case 288:
+#line 2231 "asn1p_y.y"
     { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); }
     break;
 
-  case 287:
-#line 2219 "asn1p_y.y"
+  case 289:
+#line 2232 "asn1p_y.y"
     { yyval.a_tag = yyvsp[0].a_tag; }
     break;
 
-  case 288:
-#line 2223 "asn1p_y.y"
+  case 290:
+#line 2236 "asn1p_y.y"
     {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
 	}
     break;
 
-  case 289:
-#line 2230 "asn1p_y.y"
+  case 291:
+#line 2243 "asn1p_y.y"
     {
 		yyval.a_tag = yyvsp[-2].a_tag;
 		yyval.a_tag.tag_value = yyvsp[-1].a_int;
 	}
     break;
 
-  case 290:
-#line 2236 "asn1p_y.y"
+  case 292:
+#line 2249 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; }
     break;
 
-  case 291:
-#line 2237 "asn1p_y.y"
+  case 293:
+#line 2250 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_UNIVERSAL; }
     break;
 
-  case 292:
-#line 2238 "asn1p_y.y"
+  case 294:
+#line 2251 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_APPLICATION; }
     break;
 
-  case 293:
-#line 2239 "asn1p_y.y"
+  case 295:
+#line 2252 "asn1p_y.y"
     { yyval.a_tag.tag_class = TC_PRIVATE; }
     break;
 
-  case 294:
-#line 2243 "asn1p_y.y"
+  case 296:
+#line 2256 "asn1p_y.y"
     { yyval.a_tag.tag_mode = TM_DEFAULT; }
     break;
 
-  case 295:
-#line 2244 "asn1p_y.y"
+  case 297:
+#line 2257 "asn1p_y.y"
     { yyval.a_tag.tag_mode = TM_IMPLICIT; }
     break;
 
-  case 296:
-#line 2245 "asn1p_y.y"
+  case 298:
+#line 2258 "asn1p_y.y"
     { yyval.a_tag.tag_mode = TM_EXPLICIT; }
     break;
 
-  case 297:
-#line 2249 "asn1p_y.y"
-    {
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	}
-    break;
-
-  case 298:
-#line 2253 "asn1p_y.y"
-    {
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	}
-    break;
-
   case 299:
-#line 2261 "asn1p_y.y"
+#line 2262 "asn1p_y.y"
     {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
@@ -4319,19 +4300,35 @@
     break;
 
   case 300:
-#line 2268 "asn1p_y.y"
-    { yyval.tv_str = 0; }
+#line 2266 "asn1p_y.y"
+    {
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	}
     break;
 
   case 301:
-#line 2269 "asn1p_y.y"
+#line 2274 "asn1p_y.y"
     {
+		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	}
     break;
 
   case 302:
-#line 2275 "asn1p_y.y"
+#line 2281 "asn1p_y.y"
+    { yyval.tv_str = 0; }
+    break;
+
+  case 303:
+#line 2282 "asn1p_y.y"
+    {
+		yyval.tv_str = yyvsp[0].tv_str;
+	}
+    break;
+
+  case 304:
+#line 2288 "asn1p_y.y"
     {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
@@ -4342,7 +4339,7 @@
     }
 
 /* Line 1016 of /usr/local/share/bison/yacc.c.  */
-#line 4346 "asn1p_y.c"
+#line 4343 "asn1p_y.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4561,7 +4558,7 @@
 }
 
 
-#line 2281 "asn1p_y.y"
+#line 2294 "asn1p_y.y"
 
 
 
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 9baa9ce..a89ba79 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -226,7 +226,7 @@
 %token			TOK_VisibleString
 %token			TOK_WITH
 
-%left			TOK_EXCEPT
+%nonassoc		TOK_EXCEPT
 %left			'^' TOK_INTERSECTION
 %left			'|' TOK_UNION
 
@@ -316,6 +316,9 @@
 %type	<a_constr>		SetOfConstraints
 %type	<a_constr>		ElementSetSpecs		/* 1..2,...,3 */
 %type	<a_constr>		ElementSetSpec		/* 1..2,...,3 */
+%type	<a_constr>		Unions
+%type	<a_constr>		Intersections
+%type	<a_constr>		IntersectionElements
 %type	<a_constr>		ConstraintSubtypeElement /* 1..2 */
 %type	<a_constr>		SimpleTableConstraint
 %type	<a_constr>		UserDefinedConstraint
@@ -1686,9 +1689,8 @@
 /*
  * Data type constraints.
  */
-Union:		'|' | TOK_UNION;
-Intersection:	'^' | TOK_INTERSECTION;
-Except:		      TOK_EXCEPT;
+UnionMark:		'|' | TOK_UNION;
+IntersectionMark:	'^' | TOK_INTERSECTION;
 
 optConstraints:
 	{ $$ = 0; }
@@ -1751,19 +1753,30 @@
 	;
 
 ElementSetSpec:
-	ConstraintSubtypeElement {
-		$$ = $1;
-	}
+	Unions
 	| TOK_ALL TOK_EXCEPT ConstraintSubtypeElement {
 		CONSTRAINT_INSERT($$, ACT_CA_AEX, $3, 0);
 	}
-	| ElementSetSpec Union ConstraintSubtypeElement {
+	;
+
+Unions:
+	Intersections
+	| Unions UnionMark Intersections {
 		CONSTRAINT_INSERT($$, ACT_CA_UNI, $1, $3);
 	}
-	| ElementSetSpec Intersection ConstraintSubtypeElement {
+	;
+
+Intersections:
+	IntersectionElements
+	|  Intersections IntersectionMark IntersectionElements {
 		CONSTRAINT_INSERT($$, ACT_CA_INT, $1, $3);
 	}
-	| ConstraintSubtypeElement Except ConstraintSubtypeElement {
+	;
+
+
+IntersectionElements:
+	ConstraintSubtypeElement
+	| ConstraintSubtypeElement TOK_EXCEPT ConstraintSubtypeElement {
 		CONSTRAINT_INSERT($$, ACT_CA_EXC, $1, $3);
 	}
 	;