reorganized parsing around constraints
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index b4df934..3c91a61 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -337,7 +337,8 @@
 }
 
 int yylex(void);
-int yyerror(const char *msg);
+static int yyerror(const char *msg);
+
 #ifdef	YYBYACC
 int yyparse(void **param);	/* byacc does not produce a prototype */
 #endif
@@ -425,7 +426,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 115 "asn1p_y.y"
+#line 116 "asn1p_y.y"
 {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
@@ -461,7 +462,7 @@
 	} tv_nametag;
 }
 /* Line 193 of yacc.c.  */
-#line 465 "asn1p_y.c"
+#line 466 "asn1p_y.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -474,7 +475,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 478 "asn1p_y.c"
+#line 479 "asn1p_y.c"
 
 #ifdef short
 # undef short
@@ -689,20 +690,20 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  9
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   944
+#define YYLAST   919
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  125
+#define YYNTOKENS  126
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  145
+#define YYNNTS  147
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  349
+#define YYNRULES  342
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  525
+#define YYNSTATES  522
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   364
+#define YYMAXUTOK   365
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -713,16 +714,16 @@
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   121,     2,     2,     2,     2,     2,     2,
-     114,   115,     2,     2,   117,     2,   122,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   118,   116,
-     123,     2,     2,     2,   124,     2,     2,     2,     2,     2,
+       2,     2,     2,   122,     2,     2,     2,     2,     2,     2,
+     115,   116,     2,     2,   118,     2,   123,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   119,   117,
+     124,     2,     2,     2,   125,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   119,     2,   120,   106,     2,     2,     2,     2,     2,
+       2,   120,     2,   121,   106,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   112,   108,   113,     2,     2,     2,     2,
+       2,     2,     2,   113,   108,   114,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -746,7 +747,7 @@
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   107,   109,   110,   111
+     105,   107,   109,   110,   111,   112
 };
 
 #if YYDEBUG
@@ -760,177 +761,175 @@
       80,    83,    85,    87,    89,    90,    94,    96,    97,    99,
      103,   106,   107,   109,   111,   114,   115,   117,   122,   124,
      128,   130,   134,   136,   137,   139,   143,   147,   150,   152,
-     156,   158,   162,   164,   168,   173,   175,   177,   182,   186,
-     190,   197,   204,   206,   210,   212,   216,   220,   224,   228,
-     230,   234,   236,   238,   240,   242,   243,   245,   247,   251,
-     257,   261,   264,   268,   270,   272,   276,   279,   281,   283,
-     289,   290,   292,   294,   298,   301,   306,   310,   314,   318,
-     322,   326,   327,   329,   330,   337,   339,   342,   344,   346,
-     348,   352,   354,   358,   362,   366,   367,   370,   372,   377,
-     382,   387,   394,   401,   403,   408,   412,   414,   418,   422,
-     426,   428,   432,   434,   438,   440,   442,   444,   446,   450,
-     454,   456,   461,   463,   465,   469,   470,   474,   476,   478,
-     480,   482,   484,   486,   488,   490,   494,   496,   498,   500,
-     502,   505,   507,   509,   511,   513,   515,   518,   521,   523,
-     525,   528,   531,   533,   535,   537,   539,   541,   543,   546,
-     548,   553,   558,   564,   569,   573,   575,   577,   579,   581,
-     583,   585,   587,   589,   591,   593,   595,   597,   599,   601,
-     603,   605,   607,   609,   610,   612,   613,   615,   616,   618,
-     620,   624,   626,   629,   631,   633,   635,   637,   639,   643,
-     649,   651,   655,   657,   661,   663,   667,   669,   673,   675,
-     679,   681,   683,   685,   687,   689,   691,   693,   694,   698,
-     701,   704,   707,   710,   714,   716,   718,   720,   722,   724,
-     726,   728,   730,   732,   734,   736,   738,   741,   742,   744,
-     748,   752,   754,   756,   758,   762,   768,   770,   774,   778,
-     779,   781,   783,   785,   787,   789,   791,   793,   794,   800,
-     803,   805,   808,   811,   815,   817,   819,   823,   828,   830,
-     834,   837,   841,   843,   847,   848,   850,   852,   855,   857,
-     861,   863,   865,   869,   874,   879,   881,   885,   890,   895,
-     897,   899,   903,   905,   910,   915,   917,   919,   921,   923,
-     925,   927,   928,   930,   933,   938,   939,   941,   943,   945,
-     946,   948,   950,   952,   954,   956,   957,   959,   961,   963
+     156,   158,   162,   164,   168,   173,   175,   180,   184,   188,
+     195,   202,   204,   208,   210,   214,   218,   222,   226,   228,
+     232,   234,   236,   238,   240,   241,   243,   245,   249,   255,
+     259,   262,   266,   268,   270,   274,   277,   279,   281,   287,
+     288,   290,   292,   296,   299,   304,   308,   312,   316,   320,
+     324,   325,   327,   328,   335,   337,   340,   342,   344,   346,
+     350,   352,   356,   360,   362,   365,   368,   371,   375,   376,
+     379,   381,   383,   385,   390,   395,   400,   407,   414,   416,
+     421,   425,   427,   429,   433,   437,   441,   443,   447,   449,
+     451,   453,   455,   459,   463,   465,   470,   472,   474,   475,
+     479,   481,   483,   485,   487,   489,   491,   493,   495,   499,
+     501,   503,   505,   507,   510,   512,   514,   516,   518,   520,
+     523,   526,   528,   530,   533,   536,   538,   540,   542,   544,
+     546,   548,   551,   553,   558,   563,   569,   574,   578,   580,
+     582,   584,   586,   588,   590,   592,   594,   596,   598,   600,
+     602,   604,   606,   608,   610,   612,   614,   615,   617,   618,
+     620,   621,   623,   625,   629,   631,   634,   636,   638,   640,
+     642,   644,   648,   654,   656,   660,   662,   666,   668,   672,
+     674,   678,   680,   684,   686,   688,   690,   692,   694,   696,
+     698,   701,   704,   707,   710,   714,   716,   718,   720,   722,
+     724,   726,   728,   731,   733,   737,   741,   743,   745,   747,
+     751,   757,   759,   763,   767,   768,   770,   772,   774,   776,
+     778,   780,   782,   783,   789,   792,   794,   797,   800,   804,
+     806,   808,   812,   817,   819,   823,   826,   830,   832,   836,
+     837,   839,   841,   844,   846,   850,   852,   854,   858,   863,
+     868,   870,   874,   879,   884,   886,   888,   892,   894,   899,
+     904,   906,   908,   910,   912,   914,   915,   917,   920,   925,
+     926,   928,   930,   932,   933,   935,   937,   939,   941,   942,
+     944,   946,   948
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     126,     0,    -1,   104,   127,    -1,   127,    -1,   128,    -1,
-     127,   128,    -1,    -1,   264,   129,   130,    42,   134,     3,
-      29,   137,    47,    -1,    -1,   131,    -1,   112,   132,   113,
-      -1,   112,   113,    -1,   133,    -1,   132,   133,    -1,   267,
-      -1,   267,   114,    12,   115,    -1,    12,    -1,    -1,   135,
-      -1,   136,    -1,   135,   136,    -1,    49,    92,    -1,    60,
+     127,     0,    -1,   104,   128,    -1,   128,    -1,   129,    -1,
+     128,   129,    -1,    -1,   268,   130,   131,    42,   135,     3,
+      29,   138,    47,    -1,    -1,   132,    -1,   113,   133,   114,
+      -1,   113,   114,    -1,   134,    -1,   133,   134,    -1,   270,
+      -1,   270,   115,    12,   116,    -1,    12,    -1,    -1,   136,
+      -1,   137,    -1,   136,   137,    -1,    49,    92,    -1,    60,
       92,    -1,    28,    92,    -1,    51,    61,    -1,    18,    65,
-      -1,    -1,   138,    -1,   150,   142,   139,    -1,   140,    -1,
-     139,   140,    -1,   157,    -1,   187,    -1,   155,    -1,    -1,
-      46,    18,   141,    -1,   198,    -1,    -1,   143,    -1,    62,
-     144,   116,    -1,    62,    54,    -1,    -1,   145,    -1,   147,
-      -1,   145,   147,    -1,    -1,   131,    -1,   148,    54,   264,
-     146,    -1,   149,    -1,   148,   117,   149,    -1,   264,    -1,
-     264,   112,   113,    -1,   267,    -1,    -1,   151,    -1,    50,
-     152,   116,    -1,    50,    25,   116,    -1,    50,   116,    -1,
-     153,    -1,   152,   117,   153,    -1,   264,    -1,   264,   112,
-     113,    -1,   267,    -1,   112,   208,   113,    -1,   264,   156,
-       3,   154,    -1,   197,    -1,   181,    -1,   181,   112,   160,
-     113,    -1,   264,     3,   177,    -1,   264,     3,   167,    -1,
-     264,   112,   158,   113,     3,   177,    -1,   264,   112,   158,
-     113,     3,   167,    -1,   159,    -1,   158,   117,   159,    -1,
-     264,    -1,   264,   118,   267,    -1,   264,   118,   264,    -1,
-     195,   118,   267,    -1,   195,   118,   264,    -1,   161,    -1,
-     160,   117,   161,    -1,   177,    -1,   190,    -1,   267,    -1,
-     154,    -1,    -1,   163,    -1,   164,    -1,   163,   117,   164,
-      -1,   163,   117,     4,   163,     5,    -1,   267,   177,   246,
-      -1,   177,   246,    -1,    38,    76,   177,    -1,   176,    -1,
-     166,    -1,   165,   117,   166,    -1,   267,   177,    -1,   176,
-      -1,   177,    -1,    36,   112,   169,   113,   171,    -1,    -1,
-      96,    -1,   170,    -1,   169,   117,   170,    -1,    19,   246,
-      -1,    20,   177,   168,   246,    -1,    20,   185,   246,    -1,
-      20,   186,   246,    -1,    19,   185,   246,    -1,    19,   177,
-     246,    -1,    19,   186,   246,    -1,    -1,   172,    -1,    -1,
-     103,    90,   112,   173,   174,   113,    -1,   175,    -1,   174,
-     175,    -1,     6,    -1,    21,    -1,   184,    -1,   119,   174,
-     120,    -1,   111,    -1,   111,   121,   191,    -1,   111,   121,
-     257,    -1,   259,   179,   202,    -1,    -1,   178,   180,    -1,
-     156,    -1,    35,   112,   165,   113,    -1,    86,   112,   162,
-     113,    -1,    87,   112,   162,   113,    -1,    86,   203,    76,
-     266,   259,   179,    -1,    87,   203,    76,   266,   259,   179,
-      -1,    26,    -1,    26,    43,    33,   267,    -1,    64,    76,
-     181,    -1,    17,    -1,    17,   122,   264,    -1,   265,   122,
-     264,    -1,    17,   122,   267,    -1,   265,    -1,   265,   122,
-     182,    -1,   183,    -1,   182,   122,   183,    -1,   184,    -1,
-      19,    -1,    20,    -1,    19,    -1,   185,   122,    19,    -1,
-     185,   122,    20,    -1,    18,    -1,   267,   177,     3,   188,
-      -1,   190,    -1,   191,    -1,   267,   118,   188,    -1,    -1,
-     112,   189,   193,    -1,    71,    -1,    53,    -1,    94,    -1,
-       8,    -1,    10,    -1,   192,    -1,   257,    -1,   267,    -1,
-     264,   122,   267,    -1,     9,    -1,    15,    -1,    16,    -1,
-     194,    -1,   193,     7,    -1,     7,    -1,   267,    -1,    32,
-      -1,    71,    -1,    84,    -1,    75,    89,    -1,    73,    59,
-      -1,    85,    -1,    52,    -1,    44,    79,    -1,    34,    89,
-      -1,    99,    -1,    55,    -1,   198,    -1,   196,    -1,    66,
-      -1,    48,    -1,    30,    89,    -1,   195,    -1,    66,   112,
-     250,   113,    -1,    48,   112,   254,   113,    -1,    30,    89,
-     112,   252,   113,    -1,    22,   112,   248,   113,    -1,    22,
-     112,   113,    -1,    31,    -1,    56,    -1,    57,    -1,    58,
-      -1,    67,    -1,    72,    -1,    82,    -1,    91,    -1,    93,
-      -1,    98,    -1,   100,    -1,   101,    -1,   102,    -1,    74,
-      -1,   108,    -1,   109,    -1,   106,    -1,   107,    -1,    -1,
-     204,    -1,    -1,   205,    -1,    -1,   204,    -1,   217,    -1,
-     114,   206,   115,    -1,   204,    -1,   205,   204,    -1,   207,
-      -1,   235,    -1,   208,    -1,   111,    -1,   209,    -1,   209,
-     117,   111,    -1,   209,   117,   111,   117,   209,    -1,   210,
-      -1,    25,   105,   213,    -1,   211,    -1,   210,   199,   211,
-      -1,   212,    -1,   211,   200,   212,    -1,   213,    -1,   213,
-     105,   213,    -1,   214,    -1,   114,   209,   115,    -1,   222,
-      -1,   224,    -1,   216,    -1,   217,    -1,   226,    -1,   218,
-      -1,   219,    -1,    -1,   112,   215,   193,    -1,    54,   204,
-      -1,    88,   204,    -1,    78,     9,    -1,    78,   267,    -1,
-     220,   239,   221,    -1,   222,    -1,    69,    -1,   222,    -1,
-      68,    -1,    53,    -1,    94,    -1,   258,    -1,   192,    -1,
-     223,    -1,   267,    -1,     8,    -1,    10,    -1,   225,   177,
-      -1,    -1,    63,    -1,   103,    37,   227,    -1,   103,    38,
-     228,    -1,   204,    -1,   229,    -1,   230,    -1,   112,   231,
-     113,    -1,   112,   111,   117,   231,   113,    -1,   232,    -1,
-     231,   117,   232,    -1,   269,   201,   233,    -1,    -1,   234,
-      -1,    81,    -1,    23,    -1,    77,    -1,   236,    -1,   240,
-      -1,   238,    -1,    -1,    39,    33,   112,   237,   193,    -1,
-      40,   177,    -1,   110,    -1,   110,   123,    -1,   123,   110,
-      -1,   123,   110,   123,    -1,   241,    -1,   242,    -1,   112,
-     264,   113,    -1,   241,   112,   243,   113,    -1,   244,    -1,
-     243,   117,   244,    -1,   124,   245,    -1,   124,   122,   245,
-      -1,   267,    -1,   245,   122,   267,    -1,    -1,   247,    -1,
-      77,    -1,    41,   188,    -1,   249,    -1,   248,   117,   249,
-      -1,   267,    -1,   251,    -1,   250,   117,   251,    -1,   267,
-     114,   257,   115,    -1,   267,   114,   191,   115,    -1,   253,
-      -1,   252,   117,   253,    -1,   267,   114,    12,   115,    -1,
-     267,   114,   191,   115,    -1,   255,    -1,   256,    -1,   255,
-     117,   256,    -1,   267,    -1,   267,   114,   257,   115,    -1,
-     267,   114,   191,   115,    -1,   257,    -1,   111,    -1,    12,
-      -1,    13,    -1,   257,    -1,    14,    -1,    -1,   260,    -1,
-     261,   263,    -1,   119,   262,    12,   120,    -1,    -1,    97,
-      -1,    27,    -1,    83,    -1,    -1,    60,    -1,    49,    -1,
-      17,    -1,    18,    -1,    18,    -1,    -1,   267,    -1,    11,
-      -1,   267,    -1,   268,    -1
+      -1,    -1,   139,    -1,   151,   143,   140,    -1,   141,    -1,
+     140,   141,    -1,   158,    -1,   193,    -1,   156,    -1,    -1,
+      46,    18,   142,    -1,   204,    -1,    -1,   144,    -1,    62,
+     145,   117,    -1,    62,    54,    -1,    -1,   146,    -1,   148,
+      -1,   146,   148,    -1,    -1,   132,    -1,   149,    54,   268,
+     147,    -1,   150,    -1,   149,   118,   150,    -1,   268,    -1,
+     268,   113,   114,    -1,   270,    -1,    -1,   152,    -1,    50,
+     153,   117,    -1,    50,    25,   117,    -1,    50,   117,    -1,
+     154,    -1,   153,   118,   154,    -1,   268,    -1,   268,   113,
+     114,    -1,   270,    -1,   113,   214,   114,    -1,   268,   178,
+       3,   155,    -1,   187,    -1,   187,   113,   161,   114,    -1,
+     268,     3,   178,    -1,   268,     3,   168,    -1,   268,   113,
+     159,   114,     3,   178,    -1,   268,   113,   159,   114,     3,
+     168,    -1,   160,    -1,   159,   118,   160,    -1,   268,    -1,
+     268,   119,   270,    -1,   268,   119,   268,    -1,   201,   119,
+     270,    -1,   201,   119,   268,    -1,   162,    -1,   161,   118,
+     162,    -1,   181,    -1,   196,    -1,   197,    -1,   155,    -1,
+      -1,   164,    -1,   165,    -1,   164,   118,   165,    -1,   164,
+     118,     4,   164,     5,    -1,   270,   182,   250,    -1,   182,
+     250,    -1,    38,    76,   182,    -1,   177,    -1,   167,    -1,
+     166,   118,   167,    -1,   270,   182,    -1,   177,    -1,   182,
+      -1,    36,   113,   170,   114,   172,    -1,    -1,    96,    -1,
+     171,    -1,   170,   118,   171,    -1,    19,   250,    -1,    20,
+     178,   169,   250,    -1,    20,   191,   250,    -1,    20,   192,
+     250,    -1,    19,   191,   250,    -1,    19,   178,   250,    -1,
+      19,   192,   250,    -1,    -1,   173,    -1,    -1,   103,    90,
+     113,   174,   175,   114,    -1,   176,    -1,   175,   176,    -1,
+       6,    -1,    21,    -1,   190,    -1,   120,   175,   121,    -1,
+     111,    -1,   111,   122,   197,    -1,   111,   122,   261,    -1,
+     179,    -1,   263,   181,    -1,   157,   208,    -1,   185,   208,
+      -1,   263,   184,   208,    -1,    -1,   183,   185,    -1,   186,
+      -1,   157,    -1,   203,    -1,    35,   113,   166,   114,    -1,
+      86,   113,   163,   114,    -1,    87,   113,   163,   114,    -1,
+      86,   209,    76,   269,   263,   184,    -1,    87,   209,    76,
+     269,   263,   184,    -1,    26,    -1,    26,    43,    33,   270,
+      -1,    64,    76,   187,    -1,    17,    -1,    18,    -1,    17,
+     123,   268,    -1,    18,   123,   268,    -1,    18,   123,   188,
+      -1,   189,    -1,   188,   123,   189,    -1,   190,    -1,    19,
+      -1,    20,    -1,    19,    -1,   191,   123,    19,    -1,   191,
+     123,    20,    -1,    18,    -1,   270,   178,     3,   194,    -1,
+     196,    -1,   197,    -1,    -1,   113,   195,   199,    -1,    71,
+      -1,    53,    -1,    94,    -1,   261,    -1,   262,    -1,   198,
+      -1,   228,    -1,   272,    -1,   268,   123,   270,    -1,     9,
+      -1,    15,    -1,    16,    -1,   200,    -1,   199,     7,    -1,
+       7,    -1,   270,    -1,    32,    -1,    71,    -1,    84,    -1,
+      75,    89,    -1,    73,    59,    -1,    85,    -1,    52,    -1,
+      44,    79,    -1,    34,    89,    -1,    99,    -1,    55,    -1,
+     204,    -1,   202,    -1,    66,    -1,    48,    -1,    30,    89,
+      -1,   201,    -1,    66,   113,   254,   114,    -1,    48,   113,
+     258,   114,    -1,    30,    89,   113,   256,   114,    -1,    22,
+     113,   252,   114,    -1,    22,   113,   114,    -1,    31,    -1,
+      56,    -1,    57,    -1,    58,    -1,    67,    -1,    72,    -1,
+      82,    -1,    91,    -1,    93,    -1,    98,    -1,   100,    -1,
+     101,    -1,   102,    -1,    74,    -1,   108,    -1,   109,    -1,
+     106,    -1,   107,    -1,    -1,   210,    -1,    -1,   211,    -1,
+      -1,   210,    -1,   222,    -1,   115,   212,   116,    -1,   210,
+      -1,   211,   210,    -1,   213,    -1,   239,    -1,   214,    -1,
+     111,    -1,   215,    -1,   215,   118,   111,    -1,   215,   118,
+     111,   118,   215,    -1,   216,    -1,    25,   105,   219,    -1,
+     217,    -1,   216,   205,   217,    -1,   218,    -1,   217,   206,
+     218,    -1,   219,    -1,   219,   105,   219,    -1,   220,    -1,
+     115,   215,   116,    -1,   227,    -1,   229,    -1,   221,    -1,
+     222,    -1,   230,    -1,   223,    -1,   224,    -1,    54,   210,
+      -1,    88,   210,    -1,    78,     9,    -1,    78,   270,    -1,
+     225,   243,   226,    -1,   227,    -1,    69,    -1,   227,    -1,
+      68,    -1,   194,    -1,     8,    -1,    10,    -1,    63,   178,
+      -1,   180,    -1,   103,    37,   231,    -1,   103,    38,   232,
+      -1,   210,    -1,   233,    -1,   234,    -1,   113,   235,   114,
+      -1,   113,   111,   118,   235,   114,    -1,   236,    -1,   235,
+     118,   236,    -1,   272,   207,   237,    -1,    -1,   238,    -1,
+      81,    -1,    23,    -1,    77,    -1,   240,    -1,   244,    -1,
+     242,    -1,    -1,    39,    33,   113,   241,   199,    -1,    40,
+     178,    -1,   110,    -1,   110,   124,    -1,   124,   110,    -1,
+     124,   110,   124,    -1,   245,    -1,   246,    -1,   113,   268,
+     114,    -1,   245,   113,   247,   114,    -1,   248,    -1,   247,
+     118,   248,    -1,   125,   249,    -1,   125,   123,   249,    -1,
+     270,    -1,   249,   123,   270,    -1,    -1,   251,    -1,    77,
+      -1,    41,   194,    -1,   253,    -1,   252,   118,   253,    -1,
+     270,    -1,   255,    -1,   254,   118,   255,    -1,   270,   115,
+     261,   116,    -1,   270,   115,   197,   116,    -1,   257,    -1,
+     256,   118,   257,    -1,   270,   115,    12,   116,    -1,   270,
+     115,   197,   116,    -1,   259,    -1,   260,    -1,   259,   118,
+     260,    -1,   270,    -1,   270,   115,   261,   116,    -1,   270,
+     115,   197,   116,    -1,   261,    -1,   111,    -1,    12,    -1,
+      13,    -1,    14,    -1,    -1,   264,    -1,   265,   267,    -1,
+     120,   266,    12,   121,    -1,    -1,    97,    -1,    27,    -1,
+      83,    -1,    -1,    60,    -1,    49,    -1,    17,    -1,    18,
+      -1,    -1,   270,    -1,    11,    -1,   270,    -1,   271,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   411,   411,   414,   420,   425,   442,   442,   471,   472,
-     476,   479,   485,   491,   500,   504,   508,   518,   519,   528,
-     531,   540,   543,   546,   549,   553,   574,   575,   584,   597,
-     600,   617,   624,   638,   646,   645,   659,   672,   673,   676,
-     686,   692,   693,   696,   701,   708,   709,   713,   724,   729,
-     736,   742,   748,   758,   759,   771,   774,   777,   785,   790,
-     797,   803,   809,   818,   821,   831,   844,   854,   874,   880,
-     896,   902,   910,   919,   930,   934,   942,   950,   958,   969,
-     974,   981,   984,   992,  1003,  1026,  1027,  1030,  1035,  1039,
-    1047,  1054,  1060,  1067,  1073,  1078,  1085,  1090,  1093,  1100,
-    1110,  1111,  1115,  1122,  1132,  1142,  1153,  1163,  1174,  1184,
-    1195,  1207,  1208,  1215,  1214,  1223,  1227,  1234,  1238,  1241,
-    1245,  1251,  1259,  1268,  1280,  1304,  1311,  1330,  1333,  1339,
-    1345,  1351,  1361,  1371,  1377,  1389,  1404,  1412,  1423,  1434,
-    1445,  1453,  1475,  1483,  1492,  1496,  1501,  1510,  1515,  1520,
-    1528,  1551,  1561,  1562,  1563,  1570,  1570,  1575,  1583,  1588,
-    1593,  1598,  1603,  1606,  1612,  1623,  1641,  1645,  1650,  1658,
-    1667,  1682,  1683,  1689,  1690,  1691,  1692,  1693,  1694,  1695,
-    1696,  1697,  1698,  1699,  1700,  1701,  1708,  1709,  1710,  1714,
-    1720,  1725,  1730,  1735,  1740,  1749,  1750,  1754,  1758,  1759,
-    1760,  1761,  1762,  1766,  1767,  1768,  1769,  1773,  1774,  1781,
-    1781,  1782,  1782,  1786,  1787,  1791,  1792,  1796,  1797,  1798,
-    1802,  1808,  1809,  1818,  1818,  1820,  1823,  1827,  1828,  1834,
-    1845,  1846,  1852,  1853,  1859,  1860,  1867,  1868,  1874,  1875,
-    1886,  1892,  1898,  1899,  1901,  1902,  1903,  1904,  1904,  1915,
-    1920,  1925,  1930,  1942,  1951,  1952,  1958,  1959,  1965,  1970,
-    1975,  1976,  1977,  1978,  1992,  1997,  2005,  2012,  2013,  2021,
-    2024,  2030,  2031,  2031,  2032,  2034,  2047,  2052,  2058,  2072,
-    2073,  2077,  2080,  2083,  2091,  2092,  2093,  2098,  2097,  2109,
-    2118,  2119,  2120,  2121,  2124,  2127,  2136,  2152,  2158,  2164,
-    2178,  2189,  2205,  2208,  2228,  2232,  2236,  2240,  2247,  2252,
-    2258,  2267,  2272,  2279,  2287,  2297,  2302,  2309,  2317,  2327,
-    2342,  2347,  2354,  2361,  2369,  2377,  2384,  2395,  2399,  2406,
-    2407,  2438,  2439,  2443,  2450,  2456,  2457,  2458,  2459,  2463,
-    2464,  2465,  2469,  2473,  2481,  2488,  2489,  2495,  2502,  2508
+       0,   415,   415,   418,   424,   429,   446,   446,   475,   476,
+     480,   483,   489,   495,   504,   508,   512,   522,   523,   532,
+     535,   544,   547,   550,   553,   557,   578,   579,   588,   601,
+     604,   621,   628,   642,   650,   649,   663,   676,   677,   680,
+     690,   696,   697,   700,   705,   712,   713,   717,   728,   733,
+     740,   746,   752,   762,   763,   775,   778,   781,   789,   794,
+     801,   807,   813,   822,   825,   845,   855,   875,   881,   897,
+     903,   911,   920,   931,   935,   943,   951,   959,   970,   975,
+     982,   983,   991,   999,  1022,  1023,  1026,  1031,  1035,  1043,
+    1050,  1056,  1063,  1069,  1074,  1081,  1086,  1089,  1096,  1106,
+    1107,  1111,  1118,  1128,  1138,  1149,  1159,  1170,  1180,  1191,
+    1203,  1204,  1211,  1210,  1219,  1223,  1230,  1234,  1237,  1241,
+    1247,  1255,  1264,  1275,  1278,  1285,  1308,  1331,  1355,  1362,
+    1381,  1382,  1385,  1386,  1392,  1398,  1404,  1414,  1424,  1430,
+    1442,  1457,  1465,  1473,  1484,  1495,  1517,  1525,  1534,  1538,
+    1543,  1552,  1557,  1562,  1570,  1593,  1603,  1604,  1605,  1605,
+    1613,  1618,  1623,  1628,  1629,  1630,  1631,  1635,  1636,  1654,
+    1658,  1663,  1671,  1680,  1695,  1696,  1702,  1703,  1704,  1705,
+    1706,  1707,  1708,  1709,  1710,  1711,  1712,  1713,  1714,  1721,
+    1722,  1723,  1727,  1733,  1738,  1743,  1748,  1753,  1762,  1763,
+    1767,  1771,  1772,  1773,  1774,  1775,  1779,  1780,  1781,  1782,
+    1786,  1787,  1794,  1794,  1795,  1795,  1799,  1800,  1804,  1805,
+    1809,  1810,  1811,  1815,  1821,  1822,  1831,  1831,  1833,  1836,
+    1840,  1841,  1847,  1858,  1859,  1865,  1866,  1872,  1873,  1880,
+    1881,  1887,  1888,  1899,  1905,  1911,  1912,  1914,  1915,  1916,
+    1921,  1926,  1931,  1936,  1948,  1957,  1958,  1964,  1965,  1970,
+    1973,  1978,  1986,  1991,  2002,  2005,  2011,  2012,  2012,  2013,
+    2015,  2028,  2033,  2039,  2053,  2054,  2058,  2061,  2064,  2072,
+    2073,  2074,  2079,  2078,  2090,  2099,  2100,  2101,  2102,  2105,
+    2108,  2117,  2133,  2139,  2145,  2159,  2170,  2186,  2189,  2209,
+    2213,  2217,  2221,  2228,  2233,  2239,  2248,  2253,  2260,  2268,
+    2278,  2283,  2290,  2298,  2308,  2323,  2328,  2335,  2342,  2350,
+    2358,  2365,  2376,  2380,  2387,  2418,  2419,  2423,  2430,  2436,
+    2437,  2438,  2439,  2443,  2444,  2445,  2449,  2453,  2461,  2462,
+    2468,  2475,  2481
 };
 #endif
 
@@ -966,48 +965,50 @@
   "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime", "TOK_UTF8String",
   "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
   "\"UTF-8 byte order mark\"", "TOK_EXCEPT", "'^'", "TOK_INTERSECTION",
-  "'|'", "TOK_UNION", "\"..\"", "\"...\"", "'{'", "'}'", "'('", "')'",
-  "';'", "','", "':'", "'['", "']'", "'!'", "'.'", "'<'", "'@'", "$accept",
-  "ParsedGrammar", "ModuleList", "ModuleDefinition", "@1",
-  "optObjectIdentifier", "ObjectIdentifier", "ObjectIdentifierBody",
-  "ObjectIdentifierElement", "optModuleDefinitionFlags",
-  "ModuleDefinitionFlags", "ModuleDefinitionFlag", "optModuleBody",
-  "ModuleBody", "AssignmentList", "Assignment", "@2", "optImports",
-  "ImportsDefinition", "optImportsBundleSet", "ImportsBundleSet",
-  "AssignedIdentifier", "ImportsBundle", "ImportsList", "ImportsElement",
-  "optExports", "ExportsDefinition", "ExportsBody", "ExportsElement",
-  "ValueSet", "ValueSetTypeAssignment", "DefinedType", "DataTypeReference",
+  "'|'", "TOK_UNION", "\"..\"", "\"...\"", "\"concrete TypeDeclaration\"",
+  "'{'", "'}'", "'('", "')'", "';'", "','", "':'", "'['", "']'", "'!'",
+  "'.'", "'<'", "'@'", "$accept", "ParsedGrammar", "ModuleList",
+  "ModuleDefinition", "@1", "optObjectIdentifier", "ObjectIdentifier",
+  "ObjectIdentifierBody", "ObjectIdentifierElement",
+  "optModuleDefinitionFlags", "ModuleDefinitionFlags",
+  "ModuleDefinitionFlag", "optModuleBody", "ModuleBody", "AssignmentList",
+  "Assignment", "@2", "optImports", "ImportsDefinition",
+  "optImportsBundleSet", "ImportsBundleSet", "AssignedIdentifier",
+  "ImportsBundle", "ImportsList", "ImportsElement", "optExports",
+  "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet",
+  "ValueSetTypeAssignment", "DefinedType", "DataTypeReference",
   "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
   "ActualParameter", "optComponentTypeLists", "ComponentTypeLists",
   "ComponentType", "AlternativeTypeLists", "AlternativeType",
   "ObjectClass", "optUNIQUE", "FieldSpec", "ClassField", "optWithSyntax",
   "WithSyntax", "@3", "WithSyntaxList", "WithSyntaxToken",
-  "ExtensionAndException", "Type", "NSTD_IndirectMarker",
-  "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference",
+  "ExtensionAndException", "Type", "TaggedType", "DefinedUntaggedType",
+  "UntaggedType", "MaybeIndirectTaggedType", "NSTD_IndirectMarker",
+  "MaybeIndirectTypeDeclaration", "TypeDeclaration",
+  "ConcreteTypeDeclaration", "ComplexTypeReference",
   "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
   "PrimitiveFieldReference", "FieldName", "DefinedObjectClass",
   "ValueAssignment", "Value", "@4", "SimpleValue", "DefinedValue",
   "RestrictedCharacterStringValue", "Opaque", "OpaqueFirstToken",
-  "BasicTypeId", "BasicTypeId_UniverationCompatible", "BasicType",
+  "BasicTypeId", "BasicTypeId_UniverationCompatible", "BuiltinType",
   "BasicString", "UnionMark", "IntersectionMark", "optConstraint",
   "optManyConstraints", "optSizeOrConstraint", "Constraint",
   "ManyConstraints", "ConstraintSpec", "SubtypeConstraint",
   "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
-  "IntersectionElements", "Elements", "SubtypeElements", "@5",
+  "IntersectionElements", "Elements", "SubtypeElements",
   "PermittedAlphabet", "SizeConstraint", "PatternConstraint", "ValueRange",
   "LowerEndValue", "UpperEndValue", "SingleValue", "BitStringValue",
-  "ContainedSubtype", "optINCLUDES", "InnerTypeConstraints",
-  "SingleTypeConstraint", "MultipleTypeConstraints", "FullSpecification",
-  "PartialSpecification", "TypeConstraints", "NamedConstraint",
-  "optPresenceConstraint", "PresenceConstraint", "GeneralConstraint",
-  "UserDefinedConstraint", "@6", "ContentsConstraint",
-  "ConstraintRangeSpec", "TableConstraint", "SimpleTableConstraint",
-  "ComponentRelationConstraint", "AtNotationList", "AtNotationElement",
-  "ComponentIdList", "optMarker", "Marker", "IdentifierList",
-  "IdentifierElement", "NamedNumberList", "NamedNumber", "NamedBitList",
-  "NamedBit", "Enumerations", "UniverationList", "UniverationElement",
-  "SignedNumber", "RealValue", "optTag", "Tag", "TagTypeValue", "TagClass",
-  "TagPlicit", "TypeRefName", "ObjectClassReference", "optIdentifier",
+  "ContainedSubtype", "InnerTypeConstraints", "SingleTypeConstraint",
+  "MultipleTypeConstraints", "FullSpecification", "PartialSpecification",
+  "TypeConstraints", "NamedConstraint", "optPresenceConstraint",
+  "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint", "@5",
+  "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint",
+  "SimpleTableConstraint", "ComponentRelationConstraint", "AtNotationList",
+  "AtNotationElement", "ComponentIdList", "optMarker", "Marker",
+  "IdentifierList", "IdentifierElement", "NamedNumberList", "NamedNumber",
+  "NamedBitList", "NamedBit", "Enumerations", "UniverationList",
+  "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
+  "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName", "optIdentifier",
   "Identifier", "IdentifierAsReference", "IdentifierAsValue", 0
 };
 #endif
@@ -1028,49 +1029,49 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,    94,   361,   124,   362,
-     363,   364,   123,   125,    40,    41,    59,    44,    58,    91,
-      93,    33,    46,    60,    64
+     363,   364,   365,   123,   125,    40,    41,    59,    44,    58,
+      91,    93,    33,    46,    60,    64
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   125,   126,   126,   127,   127,   129,   128,   130,   130,
-     131,   131,   132,   132,   133,   133,   133,   134,   134,   135,
-     135,   136,   136,   136,   136,   136,   137,   137,   138,   139,
-     139,   140,   140,   140,   141,   140,   140,   142,   142,   143,
-     143,   144,   144,   145,   145,   146,   146,   147,   148,   148,
-     149,   149,   149,   150,   150,   151,   151,   151,   152,   152,
-     153,   153,   153,   154,   155,   156,   156,   156,   157,   157,
-     157,   157,   158,   158,   159,   159,   159,   159,   159,   160,
-     160,   161,   161,   161,   161,   162,   162,   163,   163,   163,
-     164,   164,   164,   164,   165,   165,   166,   166,   166,   167,
-     168,   168,   169,   169,   170,   170,   170,   170,   170,   170,
-     170,   171,   171,   173,   172,   174,   174,   175,   175,   175,
-     175,   176,   176,   176,   177,   178,   179,   180,   180,   180,
-     180,   180,   180,   180,   180,   180,   181,   181,   181,   181,
-     181,   181,   182,   182,   183,   184,   184,   185,   185,   185,
-     186,   187,   188,   188,   188,   189,   188,   188,   190,   190,
-     190,   190,   190,   190,   191,   191,   192,   192,   192,   193,
-     193,   194,   194,   195,   195,   195,   195,   195,   195,   195,
-     195,   195,   195,   195,   195,   195,   196,   196,   196,   197,
-     197,   197,   197,   197,   197,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   198,   198,   198,   198,   199,
-     199,   200,   200,   201,   201,   202,   202,   203,   203,   203,
-     204,   205,   205,   206,   206,   207,   208,   208,   208,   208,
-     209,   209,   210,   210,   211,   211,   212,   212,   213,   213,
-     214,   214,   214,   214,   214,   214,   214,   215,   214,   216,
-     217,   218,   218,   219,   220,   220,   221,   221,   222,   222,
-     222,   222,   222,   222,   223,   223,   224,   225,   225,   226,
-     226,   227,   228,   228,   229,   230,   231,   231,   232,   233,
-     233,   234,   234,   234,   235,   235,   235,   237,   236,   238,
-     239,   239,   239,   239,   240,   240,   241,   242,   243,   243,
-     244,   244,   245,   245,   246,   246,   247,   247,   248,   248,
-     249,   250,   250,   251,   251,   252,   252,   253,   253,   254,
-     255,   255,   256,   256,   256,   256,   256,   257,   257,   258,
-     258,   259,   259,   260,   261,   262,   262,   262,   262,   263,
-     263,   263,   264,   264,   265,   266,   266,   267,   268,   269
+       0,   126,   127,   127,   128,   128,   130,   129,   131,   131,
+     132,   132,   133,   133,   134,   134,   134,   135,   135,   136,
+     136,   137,   137,   137,   137,   137,   138,   138,   139,   140,
+     140,   141,   141,   141,   142,   141,   141,   143,   143,   144,
+     144,   145,   145,   146,   146,   147,   147,   148,   149,   149,
+     150,   150,   150,   151,   151,   152,   152,   152,   153,   153,
+     154,   154,   154,   155,   156,   157,   157,   158,   158,   158,
+     158,   159,   159,   160,   160,   160,   160,   160,   161,   161,
+     162,   162,   162,   162,   163,   163,   164,   164,   164,   165,
+     165,   165,   165,   166,   166,   167,   167,   167,   168,   169,
+     169,   170,   170,   171,   171,   171,   171,   171,   171,   171,
+     172,   172,   174,   173,   175,   175,   176,   176,   176,   176,
+     177,   177,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   185,   186,   186,   186,   186,   186,   186,   186,   186,
+     186,   187,   187,   187,   187,   187,   188,   188,   189,   190,
+     190,   191,   191,   191,   192,   193,   194,   194,   195,   194,
+     196,   196,   196,   196,   196,   196,   196,   197,   197,   198,
+     198,   198,   199,   199,   200,   200,   201,   201,   201,   201,
+     201,   201,   201,   201,   201,   201,   201,   201,   201,   202,
+     202,   202,   203,   203,   203,   203,   203,   203,   204,   204,
+     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+     204,   204,   205,   205,   206,   206,   207,   207,   208,   208,
+     209,   209,   209,   210,   211,   211,   212,   212,   213,   214,
+     214,   214,   214,   215,   215,   216,   216,   217,   217,   218,
+     218,   219,   219,   220,   220,   220,   220,   220,   220,   220,
+     221,   222,   223,   223,   224,   225,   225,   226,   226,   227,
+     228,   228,   229,   229,   230,   230,   231,   232,   232,   233,
+     234,   235,   235,   236,   237,   237,   238,   238,   238,   239,
+     239,   239,   241,   240,   242,   243,   243,   243,   243,   244,
+     244,   245,   246,   247,   247,   248,   248,   249,   249,   250,
+     250,   251,   251,   252,   252,   253,   254,   254,   255,   255,
+     256,   256,   257,   257,   258,   259,   259,   260,   260,   260,
+     260,   260,   261,   261,   262,   263,   263,   264,   265,   266,
+     266,   266,   266,   267,   267,   267,   268,   268,   269,   269,
+     270,   271,   272
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1082,35 +1083,35 @@
        2,     1,     1,     1,     0,     3,     1,     0,     1,     3,
        2,     0,     1,     1,     2,     0,     1,     4,     1,     3,
        1,     3,     1,     0,     1,     3,     3,     2,     1,     3,
-       1,     3,     1,     3,     4,     1,     1,     4,     3,     3,
-       6,     6,     1,     3,     1,     3,     3,     3,     3,     1,
-       3,     1,     1,     1,     1,     0,     1,     1,     3,     5,
-       3,     2,     3,     1,     1,     3,     2,     1,     1,     5,
-       0,     1,     1,     3,     2,     4,     3,     3,     3,     3,
-       3,     0,     1,     0,     6,     1,     2,     1,     1,     1,
-       3,     1,     3,     3,     3,     0,     2,     1,     4,     4,
-       4,     6,     6,     1,     4,     3,     1,     3,     3,     3,
-       1,     3,     1,     3,     1,     1,     1,     1,     3,     3,
-       1,     4,     1,     1,     3,     0,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     1,     1,     1,
-       2,     1,     1,     1,     1,     1,     2,     2,     1,     1,
-       2,     2,     1,     1,     1,     1,     1,     1,     2,     1,
-       4,     4,     5,     4,     3,     1,     1,     1,     1,     1,
+       1,     3,     1,     3,     4,     1,     4,     3,     3,     6,
+       6,     1,     3,     1,     3,     3,     3,     3,     1,     3,
+       1,     1,     1,     1,     0,     1,     1,     3,     5,     3,
+       2,     3,     1,     1,     3,     2,     1,     1,     5,     0,
+       1,     1,     3,     2,     4,     3,     3,     3,     3,     3,
+       0,     1,     0,     6,     1,     2,     1,     1,     1,     3,
+       1,     3,     3,     1,     2,     2,     2,     3,     0,     2,
+       1,     1,     1,     4,     4,     4,     6,     6,     1,     4,
+       3,     1,     1,     3,     3,     3,     1,     3,     1,     1,
+       1,     1,     3,     3,     1,     4,     1,     1,     0,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       1,     1,     1,     2,     1,     1,     1,     1,     1,     2,
+       2,     1,     1,     2,     2,     1,     1,     1,     1,     1,
+       1,     2,     1,     4,     4,     5,     4,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     0,     1,     0,     1,     1,
-       3,     1,     2,     1,     1,     1,     1,     1,     3,     5,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     1,     1,     1,     1,     1,     1,     0,     3,     2,
-       2,     2,     2,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     0,     1,     3,
-       3,     1,     1,     1,     3,     5,     1,     3,     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,     1,     3,
-       1,     1,     3,     4,     4,     1,     3,     4,     4,     1,
-       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,     1,     1,     1,     1,     1,     0,     1,     0,     1,
+       0,     1,     1,     3,     1,     2,     1,     1,     1,     1,
+       1,     3,     5,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     3,     1,     1,     1,     1,     1,
+       1,     1,     2,     1,     3,     3,     1,     1,     1,     3,
+       5,     1,     3,     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,     1,     3,     1,     1,     3,     4,     4,
+       1,     3,     4,     4,     1,     1,     3,     1,     4,     4,
+       1,     1,     1,     1,     1,     0,     1,     2,     4,     0,
+       1,     1,     1,     0,     1,     1,     1,     1,     0,     1,
+       1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1118,421 +1119,415 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   342,   343,     0,     0,     3,     4,     6,     2,     1,
-       5,     8,     0,     0,     9,   347,    16,    11,     0,    12,
+       0,   336,   337,     0,     0,     3,     4,     6,     2,     1,
+       5,     8,     0,     0,     9,   340,    16,    11,     0,    12,
       14,    17,    10,    13,     0,     0,     0,     0,     0,     0,
        0,    18,    19,     0,    25,    23,    21,    24,    22,     0,
       20,    15,    53,     0,     0,    27,    37,    54,     0,    57,
        0,    58,    60,    62,     7,    41,     0,    38,    56,    55,
        0,     0,    40,     0,    42,    43,     0,    48,    50,    52,
-     195,     0,   196,   197,   198,   199,   200,   208,   201,   202,
-     203,   204,   205,   206,   207,    28,    29,    33,    31,    32,
-      36,     0,   331,    59,    61,    39,    44,     0,     0,     0,
-      34,    30,   331,   136,   344,     0,     0,   173,     0,     0,
-     187,   179,   183,   186,   174,     0,     0,   175,   178,   182,
-       0,     0,    66,   189,   185,    65,   184,   140,   335,     0,
-     125,   332,   339,    45,    49,    51,    35,     0,    69,    68,
-       0,     0,   188,   181,   180,     0,     0,   177,   176,     0,
-     187,   186,     0,    72,     0,    74,     0,   331,     0,   337,
-     338,   336,     0,     0,     0,   215,   341,   340,   333,    46,
-      47,     0,   137,   139,   194,     0,   308,   310,     0,   327,
-     328,   326,     0,   319,   320,   325,   322,     0,   311,     0,
-     188,     0,     0,     0,     0,   267,    64,   160,   166,   161,
-     167,   168,   158,   159,    84,     0,    79,    81,    82,   162,
-     163,    83,   145,   146,   141,   142,   144,   138,     0,   157,
-     155,   151,   152,   153,     0,   164,   133,     0,     0,   217,
-     217,   127,   126,   267,   124,   221,   216,   331,   331,     0,
-     102,   193,     0,     0,   315,     0,   191,     0,     0,   190,
-       0,     0,   331,    73,    78,    77,    76,    75,   264,   265,
-     330,     0,   258,     0,   268,   255,     0,     0,   259,     0,
-     226,   247,   267,   261,     0,   227,   230,   232,   234,   236,
-     238,   242,   243,   245,   246,     0,   240,   262,   241,   331,
-     244,   329,   260,   263,    67,   331,     0,   334,     0,     0,
-       0,     0,   331,     0,   331,     0,   218,   219,   331,     0,
-       0,   331,   247,     0,   223,   225,   224,   284,   286,   285,
-     294,   295,   222,   150,   147,     0,   306,   304,   304,   304,
-     104,   305,   100,   304,   304,   111,     0,   309,   192,     0,
-       0,   321,     0,     0,   164,   312,     0,     0,    71,    70,
-     267,   249,   251,   252,   250,     0,     0,     0,     0,    63,
-       0,   209,   210,   267,   211,   212,   267,   267,   290,     0,
-       0,   266,    80,   143,   171,   156,   169,   172,   165,   154,
-       0,   121,     0,    94,    97,    98,   331,   135,     0,     0,
-      86,    87,    93,   304,   331,   345,     0,   345,     0,   289,
-       0,   220,     0,   307,   109,     0,   108,   110,   101,   304,
-     106,   107,     0,    99,   112,   103,   316,     0,     0,   324,
-     323,   314,   313,   231,   271,   269,     0,   270,   272,   273,
-     248,   239,   228,   233,   235,   237,   291,   292,   257,   253,
-     256,   170,   134,     0,   128,   331,    96,   331,   129,   331,
-      91,   304,   331,   346,   130,   331,   287,   296,     0,     0,
-     298,   148,   149,   105,     0,   317,   318,     0,     0,   276,
-     348,   349,   213,   267,   293,   122,   123,    95,    92,   331,
-      88,    90,   125,   125,     0,     0,   300,   302,   297,     0,
-     113,     0,   274,     0,   279,   214,   229,     0,   131,   132,
-     288,   301,     0,   299,     0,     0,   277,   282,   283,   281,
-     278,   280,    89,   303,   117,   118,     0,     0,   115,   119,
-     275,     0,   114,   116,   120
+     198,     0,   199,   200,   201,   202,   203,   211,   204,   205,
+     206,   207,   208,   209,   210,    28,    29,    33,    31,    32,
+      36,   325,   325,    59,    61,    39,    44,     0,     0,     0,
+      34,    30,   325,     0,   329,     0,   123,     0,   326,   333,
+       0,    45,    49,    51,    35,     0,    68,    67,     0,   176,
+       0,     0,   190,   182,   186,   189,   177,     0,     0,   178,
+     181,   185,     0,    71,     0,   188,   187,    73,   331,   332,
+     330,     0,     0,   141,   142,     0,   138,     0,     0,   190,
+       0,   189,   220,   220,   131,   124,   218,   130,    65,   192,
+     132,   335,   334,   327,     0,    46,    47,     0,   191,   184,
+     183,   180,   179,     0,     0,     0,     0,     0,     0,    64,
+       0,     0,     0,     0,   191,   325,     0,     0,     0,     0,
+     325,     0,     0,   221,   222,   325,     0,   126,   224,   219,
+       0,   260,   169,   261,   322,   323,   324,   170,   171,   161,
+     160,   162,   158,   155,   156,   157,   165,   166,   163,   164,
+       0,   341,   342,   167,   325,   325,     0,   101,   325,    72,
+      77,    76,    75,    74,   328,   141,   142,     0,     0,   325,
+     256,     0,     0,   229,     0,   218,   263,   259,     0,   230,
+     233,   235,   237,   239,   241,   245,   246,   248,   249,     0,
+     243,   244,   247,   143,   149,   150,   145,   146,   148,   144,
+     197,     0,   303,   305,     0,     0,   120,     0,    93,    96,
+      97,   128,   325,   321,     0,   314,   315,   320,   317,   140,
+       0,   306,     0,   251,     0,     0,    85,    86,    92,   299,
+     325,     0,   325,   158,     0,   226,   228,   227,   279,   281,
+     280,   289,   290,   338,     0,   338,   225,   160,    83,     0,
+      78,    80,    81,    82,     0,     0,   154,   151,     0,   301,
+     299,   299,   299,   103,   300,    99,   299,   299,   110,     0,
+      70,    69,     0,   250,   262,   252,   253,     0,     0,     0,
+     125,    63,     0,   212,   213,     0,   214,   215,     0,     0,
+     285,     0,     0,     0,   196,     0,   139,     0,   310,     0,
+       0,   133,   325,     0,   218,    95,   194,     0,     0,   193,
+       0,     0,   325,   134,   325,    90,   299,     0,   284,     0,
+     223,     0,   325,   339,   135,   325,    66,     0,   174,   159,
+     172,   175,   168,   302,   108,     0,   107,   109,   100,   299,
+     105,   106,     0,    98,   111,   102,   234,   266,   264,     0,
+     265,   267,   268,   242,   231,   236,   238,   240,   286,   287,
+     258,   254,   257,   147,   304,   195,     0,     0,   121,   122,
+      94,   129,   127,   316,     0,     0,   307,     0,     0,    91,
+     325,    87,    89,   282,   291,     0,     0,   293,   128,   128,
+      79,   173,   152,   153,   104,     0,     0,     0,   271,   216,
+       0,   288,   311,     0,     0,   319,   318,   309,   308,     0,
+       0,     0,   295,   297,   292,     0,   136,   137,   112,     0,
+     269,     0,   274,   217,   232,   312,   313,    88,   283,   296,
+       0,   294,     0,     0,   272,   277,   278,   276,   273,   275,
+     298,   116,   117,     0,     0,   114,   118,   270,     0,   113,
+     115,   119
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,     4,     5,     6,    11,    13,    14,    18,    19,    30,
-      31,    32,    44,    45,    85,    86,   136,    56,    57,    63,
-      64,   170,    65,    66,    67,    46,    47,    50,    51,   204,
-      87,   121,    88,   152,   153,   205,   206,   389,   390,   391,
-     382,   383,   138,   409,   239,   240,   413,   414,   504,   517,
-     518,   392,   393,   164,   165,   232,   122,   214,   215,   519,
-     328,   329,    89,   221,   298,   222,   223,   273,   375,   376,
-     123,   124,   125,   126,   363,   366,   494,   234,   305,   306,
-     236,   313,   314,   274,   275,   276,   277,   278,   279,   280,
-     357,   281,   282,   283,   284,   285,   439,   286,   287,   288,
-     289,   290,   425,   427,   428,   429,   468,   469,   510,   511,
-     316,   317,   484,   318,   370,   319,   320,   321,   459,   460,
-     486,   330,   331,   175,   176,   187,   188,   243,   244,   182,
-     183,   184,   291,   292,   130,   131,   132,   162,   168,   224,
-     127,   452,   293,   471,   472
+      31,    32,    44,    45,    85,    86,   114,    56,    57,    63,
+      64,   166,    65,    66,    67,    46,    47,    50,    51,   318,
+      87,   245,    88,   132,   133,   319,   320,   295,   296,   297,
+     277,   278,   116,   409,   226,   227,   413,   414,   502,   514,
+     515,   298,   105,   106,   246,   321,   299,   373,   374,   156,
+     157,   158,   266,   267,   516,   331,   332,    89,   247,   324,
+     214,   215,   216,   399,   400,   159,   135,   160,   136,   355,
+     358,   492,   197,   192,   198,   199,   304,   305,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     431,   260,   217,   261,   262,   418,   420,   421,   422,   467,
+     468,   508,   509,   307,   308,   480,   309,   362,   310,   311,
+     312,   456,   457,   482,   333,   334,   271,   272,   290,   291,
+     367,   368,   284,   285,   286,   218,   219,   281,   108,   109,
+     141,   163,   220,   392,   221,   222,   223
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -350
+#define YYPACT_NINF -296
 static const yytype_int16 yypact[] =
 {
-      28,  -350,  -350,   204,    21,   204,  -350,  -350,   204,  -350,
-    -350,   -75,    50,    14,  -350,  -350,  -350,  -350,    56,  -350,
-     -40,   177,  -350,  -350,    82,    59,    24,    52,    96,    93,
-     196,   177,  -350,    95,  -350,  -350,  -350,  -350,  -350,   179,
-    -350,  -350,    80,    78,   180,  -350,   200,  -350,   113,  -350,
-     165,  -350,   122,  -350,  -350,   198,   676,  -350,  -350,  -350,
-     214,   154,  -350,   163,   214,  -350,   -27,  -350,   185,  -350,
-    -350,   273,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
-    -350,  -350,  -350,  -350,  -350,   676,  -350,  -350,  -350,  -350,
-    -350,   444,   212,  -350,  -350,  -350,  -350,   204,   214,   202,
-    -350,  -350,   -19,   219,  -350,   236,   254,  -350,   266,   284,
-     252,  -350,  -350,   255,  -350,   307,   281,  -350,  -350,  -350,
-     842,   366,   260,  -350,  -350,  -350,  -350,   249,   104,   370,
-    -350,  -350,    33,   -75,  -350,  -350,  -350,   263,  -350,  -350,
-     214,     8,   264,  -350,  -350,    47,   367,  -350,  -350,   288,
-    -350,  -350,   -16,  -350,   261,   262,   269,   232,   305,  -350,
-    -350,  -350,   374,   248,   765,   268,  -350,  -350,  -350,  -350,
-    -350,   280,  -350,  -350,  -350,    89,  -350,  -350,   367,  -350,
-    -350,  -350,   274,   271,  -350,  -350,   275,   133,  -350,   277,
-    -350,   389,   842,   214,   214,   539,  -350,  -350,  -350,  -350,
-    -350,  -350,  -350,  -350,  -350,   136,  -350,  -350,  -350,  -350,
-    -350,  -350,  -350,  -350,   272,  -350,  -350,  -350,   276,  -350,
-    -350,  -350,  -350,  -350,   278,   279,   350,   283,   322,    11,
-      25,  -350,  -350,   296,  -350,  -350,   268,   156,    60,   138,
-    -350,  -350,   367,   155,  -350,   287,  -350,    47,   206,  -350,
-     367,   206,   -19,  -350,  -350,  -350,  -350,  -350,  -350,  -350,
-    -350,   297,  -350,   268,  -350,  -350,   182,   268,  -350,   292,
-    -350,  -350,   560,  -350,   290,   289,   225,   231,  -350,   299,
-    -350,  -350,  -350,  -350,  -350,    45,    66,  -350,  -350,   212,
-    -350,  -350,  -350,  -350,  -350,   232,   320,  -350,   267,   367,
-     248,   372,    54,   329,    77,   335,  -350,  -350,    77,   336,
-     376,   212,   204,   298,  -350,  -350,  -350,  -350,  -350,  -350,
-     303,  -350,  -350,  -350,  -350,   248,  -350,    61,     0,    61,
-    -350,  -350,   321,     0,    61,   313,   280,  -350,  -350,   367,
-     259,  -350,   304,   314,  -350,  -350,   315,   317,  -350,  -350,
-     667,  -350,  -350,  -350,  -350,   268,   306,   267,   319,  -350,
-     324,  -350,  -350,   667,  -350,  -350,   667,   667,   316,   326,
-     412,  -350,  -350,  -350,  -350,   431,  -350,  -350,  -350,  -350,
-     367,   323,   167,  -350,  -350,  -350,   212,  -350,   364,   328,
-     325,  -350,  -350,    61,   212,   367,   330,   367,   337,  -350,
-     332,  -350,   327,  -350,  -350,   333,  -350,  -350,  -350,    61,
-    -350,  -350,   358,  -350,  -350,  -350,  -350,   338,   339,  -350,
-    -350,  -350,  -350,  -350,  -350,  -350,    15,  -350,  -350,  -350,
-     431,  -350,   340,   231,  -350,  -350,  -350,   341,  -350,  -350,
-    -350,  -350,  -350,   206,  -350,    54,  -350,   212,  -350,    31,
-    -350,    61,   212,  -350,  -350,   212,  -350,  -350,    -2,   176,
-    -350,  -350,  -350,  -350,   343,  -350,  -350,   342,   181,  -350,
-    -350,  -350,   268,   560,  -350,  -350,  -350,  -350,  -350,    53,
-    -350,  -350,  -350,  -350,   267,   367,   334,  -350,  -350,   327,
-    -350,   367,  -350,   367,     6,  -350,  -350,     2,  -350,  -350,
-     431,   334,   367,  -350,    34,   201,  -350,  -350,  -350,  -350,
-    -350,  -350,  -350,  -350,  -350,  -350,    34,    30,  -350,  -350,
-    -350,    51,  -350,  -350,  -350
+      51,  -296,  -296,   217,    41,   217,  -296,  -296,   217,  -296,
+    -296,   -63,    53,    43,  -296,  -296,  -296,  -296,    70,  -296,
+     -45,   204,  -296,  -296,    79,    32,    30,    38,   110,    87,
+     200,   204,  -296,    95,  -296,  -296,  -296,  -296,  -296,   198,
+    -296,  -296,   247,    12,   178,  -296,   174,  -296,   134,  -296,
+     140,  -296,   183,  -296,  -296,    72,   663,  -296,  -296,  -296,
+     213,   173,  -296,   187,   213,  -296,    50,  -296,   211,  -296,
+    -296,   293,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,  -296,  -296,  -296,   663,  -296,  -296,  -296,  -296,
+    -296,    19,   219,  -296,  -296,  -296,  -296,   217,   213,   227,
+    -296,  -296,    -2,   817,    68,   340,  -296,   740,  -296,   120,
+     356,   -63,  -296,  -296,  -296,   249,  -296,  -296,   272,  -296,
+     274,   285,  -296,  -296,  -296,  -296,  -296,   307,   278,  -296,
+    -296,  -296,    13,  -296,   250,  -296,  -296,   251,  -296,  -296,
+    -296,   359,   260,   264,   265,   261,   346,   301,   279,   281,
+     315,   294,   113,   135,  -296,  -296,   280,  -296,   295,  -296,
+    -296,  -296,  -296,  -296,   510,  -296,  -296,   290,  -296,  -296,
+    -296,  -296,  -296,   406,   817,   213,   213,   289,   368,  -296,
+     217,   309,    14,   378,   299,    29,   108,   318,   403,   280,
+      61,   229,   339,  -296,  -296,    61,   341,  -296,  -296,   280,
+     604,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+     296,  -296,  -296,  -296,    84,    28,    98,  -296,    -2,  -296,
+    -296,  -296,  -296,  -296,  -296,   264,   265,   311,   280,   219,
+    -296,   104,   300,  -296,   388,   280,  -296,  -296,   304,   302,
+     237,   241,  -296,   320,  -296,  -296,  -296,  -296,  -296,   -18,
+     -17,  -296,  -296,  -296,  -296,  -296,   303,  -296,  -296,  -296,
+    -296,   138,  -296,  -296,   403,   403,   305,   167,  -296,  -296,
+    -296,  -296,   219,  -296,   314,   312,  -296,  -296,   308,  -296,
+     170,  -296,   317,  -296,   353,   319,   316,  -296,  -296,    -3,
+     219,   402,   219,   217,   324,  -296,  -296,  -296,  -296,  -296,
+    -296,   323,  -296,   403,   331,   403,  -296,   329,  -296,   172,
+    -296,  -296,  -296,  -296,   282,   403,  -296,  -296,   510,  -296,
+      -3,    10,    -3,  -296,  -296,   351,    10,    -3,   345,   290,
+    -296,  -296,   496,  -296,  -296,  -296,  -296,   280,   336,   334,
+    -296,  -296,   342,  -296,  -296,   496,  -296,  -296,   496,   496,
+     328,   344,   262,   330,  -296,   403,  -296,   181,  -296,   343,
+     248,  -296,    29,   740,   280,  -296,  -296,   108,   248,  -296,
+     403,   248,   219,  -296,    24,  -296,    -3,   347,  -296,   349,
+    -296,   348,   219,  -296,  -296,   219,  -296,   604,  -296,   448,
+    -296,  -296,  -296,  -296,  -296,   332,  -296,  -296,  -296,    -3,
+    -296,  -296,   371,  -296,  -296,  -296,  -296,  -296,  -296,    25,
+    -296,  -296,  -296,  -296,   352,   241,  -296,  -296,  -296,   350,
+    -296,  -296,  -296,  -296,  -296,  -296,   403,   196,  -296,  -296,
+    -296,  -296,  -296,  -296,   361,   362,  -296,   364,   369,  -296,
+      42,  -296,  -296,  -296,  -296,    22,   188,  -296,  -296,  -296,
+    -296,  -296,  -296,  -296,  -296,   354,   357,   202,  -296,   280,
+     388,  -296,  -296,   370,   373,  -296,  -296,  -296,  -296,    16,
+     282,   403,   367,  -296,  -296,   348,  -296,  -296,  -296,   403,
+    -296,   403,    77,  -296,  -296,  -296,  -296,  -296,   448,   367,
+     403,  -296,    57,   207,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,  -296,    57,    36,  -296,  -296,  -296,    39,  -296,
+    -296,  -296
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -350,  -350,   447,   172,  -350,  -350,   344,  -350,   434,  -350,
-    -350,   427,  -350,  -350,  -350,   375,  -350,  -350,  -350,  -350,
-    -350,  -350,   399,  -350,   371,  -350,  -350,  -350,   408,   331,
-    -350,   318,  -350,  -350,   291,  -350,   175,   178,    -8,    35,
-    -350,    40,   237,  -350,  -350,   157,  -350,  -350,  -350,   -25,
-    -201,  -297,   -91,  -350,  -125,  -350,   191,  -350,   199,  -144,
-     265,   270,  -350,  -189,  -350,  -154,  -236,  -133,  -349,  -350,
-    -107,  -350,  -350,   -38,  -350,  -350,  -350,  -350,   282,  -155,
-    -350,  -350,  -350,   294,  -270,  -350,   134,   139,  -258,  -350,
-    -350,  -350,   132,  -350,  -350,  -350,  -350,   128,  -350,  -350,
-    -350,  -350,  -350,  -350,  -350,  -350,    13,    16,  -350,  -350,
-    -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,  -350,    18,
-      29,  -295,  -350,  -350,   345,  -350,   286,  -350,   174,  -350,
-    -350,   285,  -141,  -350,  -269,  -350,  -350,  -350,  -350,    20,
-    -350,   123,   -12,  -350,  -350
+    -296,  -296,   461,   326,  -296,  -296,   376,  -296,   447,  -296,
+    -296,   441,  -296,  -296,  -296,   399,  -296,  -296,  -296,  -296,
+    -296,  -296,   428,  -296,   395,  -296,  -296,  -296,   434,   355,
+    -296,  -106,  -296,  -296,   321,  -296,    99,   322,    48,   115,
+    -296,   128,   287,  -296,  -296,   163,  -296,  -296,  -296,     3,
+    -196,  -172,   -82,  -296,  -296,   422,  -177,  -296,  -104,   157,
+    -296,   358,  -296,   168,  -164,   310,   313,  -296,  -140,  -296,
+    -191,  -188,  -296,    52,  -296,   -76,  -296,  -296,   -24,  -296,
+    -296,  -296,  -227,   380,  -150,  -296,  -296,  -296,   360,  -237,
+    -296,   179,   182,  -258,  -296,  -296,   205,  -296,  -296,  -296,
+    -296,   175,  -296,  -296,  -296,  -296,  -296,  -296,  -296,    47,
+      55,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,    54,    60,  -220,  -296,  -296,   177,  -296,   164,
+    -296,   107,  -296,  -296,   171,  -160,  -296,   -87,  -296,  -296,
+    -296,  -296,    11,   232,   -12,  -296,  -295
 };
 
 /* 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, syntax error.  */
-#define YYTABLE_NINF -305
+#define YYTABLE_NINF -300
 static const yytype_int16 yytable[] =
 {
-      20,   129,   358,   208,   185,   384,    20,   512,   430,    15,
-     235,   139,   342,   154,   216,   346,   210,   137,    90,    15,
-       7,     9,   210,     7,   209,     7,    15,    97,     7,   507,
-     209,    53,   404,   406,   407,   479,   514,    12,   410,   411,
-     514,   325,    15,    69,    92,     1,     2,    90,    53,   212,
-     213,   515,    69,   212,   213,   515,    21,   514,    15,   179,
-     180,    15,    16,    52,    15,    15,   207,    15,    16,   388,
-     212,   213,   515,    92,    24,    68,    91,   326,   323,   324,
-      52,   322,   166,   508,    68,   154,    69,   509,    15,    15,
-      98,   388,   423,   167,    33,     1,     2,   191,   450,   267,
-     128,   192,   325,    48,   418,    91,   185,   343,   351,   435,
-     347,   379,   354,   267,   463,   388,    35,   133,    68,   449,
-     485,   174,   405,   304,    34,   233,   467,   -26,   173,   177,
-      43,   159,     3,   186,   189,   500,   403,   308,   326,   233,
-     155,   208,   381,   522,    36,   211,   327,   332,   384,   516,
-     128,   225,   216,   516,   210,   368,   481,    37,   181,   210,
-     172,   349,   209,    17,   381,   381,   245,   209,   369,    22,
-     516,   524,   128,   128,   323,   324,  -254,    10,   217,   128,
-      10,   255,   257,   482,   210,    38,   483,   160,   381,  -254,
-     -85,   352,   209,    15,    49,    25,   128,   325,   371,    39,
-     424,   161,   241,   496,   207,    26,   242,   475,    42,    15,
-      41,   385,   155,   254,   256,     1,     2,    15,   179,   180,
-     399,     1,     2,     1,     2,    15,    27,    54,    28,    58,
-     177,     1,     2,   326,    61,   186,   344,    29,   189,   344,
-     197,   198,   199,    15,   179,   180,   249,   200,   201,   294,
-     250,   335,    62,   295,   353,   336,   197,   198,   199,    15,
-     179,   180,    55,   200,   201,     1,     2,    94,   338,  -304,
-      15,   417,   339,  -304,   374,   128,     1,     2,    15,    95,
-     444,    59,    60,   211,   445,   202,   377,   378,   225,   488,
-     386,   100,   394,   489,   492,   446,   394,    99,   493,   237,
-     238,   202,   476,   451,   258,   198,   259,    15,   179,   180,
-     260,   200,   201,   225,   520,   135,   523,   495,   493,   219,
-     523,   261,     1,     2,   212,   213,   203,   245,   344,   355,
-     356,   128,   400,   361,   362,   310,   311,   364,   365,   212,
-     213,   140,   203,   142,   195,   377,   103,   104,   141,   262,
-     263,   128,   461,   462,   385,   143,   478,   498,   499,   264,
-     220,   307,   307,   144,   145,   265,   147,   146,   442,   156,
-     148,   158,   157,   163,   266,   171,   178,   190,    15,   193,
-     194,   195,   233,   453,   267,   453,   218,   246,   247,   248,
-     268,   251,   252,   301,   296,   302,   297,   300,   303,   269,
-     299,   340,   350,   359,   367,   380,   360,   270,   312,   398,
-     272,   395,   397,   401,   470,   402,   412,   408,   426,   419,
-     258,   198,   259,    15,   179,   180,   260,   200,   201,   420,
-     421,   344,   422,   386,   431,   432,   437,   394,   441,   436,
-     447,   448,   449,   454,   443,   457,   487,   102,   464,   456,
-       8,   458,    23,   465,   466,   490,   502,   473,    40,   491,
-     101,   103,   104,    96,   474,   262,   105,   394,    93,   134,
-     372,   497,   377,   487,   106,    70,   107,   169,   108,   470,
-     438,   470,   231,   253,   480,   477,   396,   196,   109,   348,
-     513,   521,   110,   415,   387,   373,   111,   433,   440,   112,
-      72,    73,    74,   333,   505,   434,   268,   503,   334,   506,
-     113,    75,   309,   416,   501,   114,    76,   115,    77,   116,
-     455,     0,     0,     0,     0,     0,    78,   315,   117,   118,
-       0,     0,   341,     0,     0,    79,   345,    80,     0,     0,
-       0,     0,    81,   119,    82,    83,    84,   258,   198,   259,
-      15,   179,   180,   260,   200,   201,   120,     0,     0,     0,
-       0,     0,     0,     0,   261,     0,     0,     0,   258,   198,
-     259,    15,   179,   180,   260,   200,   201,     0,     0,     0,
-       0,     0,     0,     0,     0,   261,     0,   337,     0,     0,
-       0,     0,   262,   263,     0,     0,     0,     0,     0,     0,
-       0,     0,   264,     0,     0,     0,     0,     0,   265,     0,
-       0,     0,     0,   262,   263,     0,     0,   266,     0,     0,
-       0,     0,     0,   264,     0,     0,     0,   267,     0,   265,
-       0,     0,     0,   268,     0,     0,     0,     0,   266,     0,
-       0,     0,   269,     0,     0,     0,     0,     0,   267,     0,
-     270,   271,     0,   272,   268,     0,     0,     0,     0,     0,
-       0,     0,     0,   269,     0,     0,     0,     0,     0,     0,
-       0,     0,   271,     0,   272,   258,   198,   259,    15,   179,
-     180,   260,   200,   201,     0,     0,     0,    15,     0,     0,
-       0,     0,     0,     1,     2,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    70,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     262,   263,    71,     0,     0,     0,     0,     0,     0,     0,
-     264,     0,    72,    73,    74,     0,   265,     0,     0,     0,
-       0,     0,     0,    75,     0,   266,     0,     0,    76,     0,
-      77,     0,     0,     0,     0,   267,     0,     0,    78,     0,
-       0,   268,     0,     0,     0,     0,     0,    79,     0,    80,
-     269,     0,     0,     0,    81,     0,    82,    83,    84,   271,
-       0,   272,   103,   104,     0,     0,     0,   105,     0,     0,
-       0,   226,     0,     0,     0,   106,    70,   107,     0,   108,
-     227,     0,     0,     0,     0,     0,     0,     0,     0,   109,
-       0,     0,     0,   110,     0,     0,     0,   111,     0,     0,
-     112,    72,    73,    74,     0,     0,     0,     0,     0,   228,
-       0,   113,    75,     0,     0,     0,   114,    76,   115,    77,
-     116,     0,     0,     0,     0,     0,     0,    78,     0,   117,
-     118,   229,   230,     0,     0,     0,    79,     0,    80,     1,
-       2,     0,     0,    81,   119,    82,    83,    84,     0,     0,
-       0,     0,   149,    70,   107,     0,   108,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   109,     0,     0,     0,
-     150,     0,     0,     0,   111,     0,     0,   112,    72,    73,
-      74,     0,     0,     0,     0,     0,     0,     0,   151,    75,
-       0,     0,     0,   114,    76,   115,    77,   116,     0,     0,
-       0,     0,     0,     0,    78,     0,   117,   118,     0,     0,
-       0,     0,     0,    79,     0,    80,     0,     0,     0,     0,
-      81,   119,    82,    83,    84
+      20,   154,   193,   193,   107,   107,    20,   349,   280,   322,
+     110,     7,   323,   279,     7,   107,     7,   268,   350,     7,
+     117,   497,   102,    15,   213,    15,   287,   134,   450,     1,
+       2,    53,    90,    15,   115,    15,    15,    48,   328,   293,
+      15,     9,   511,    69,    92,   511,   326,   327,    53,   316,
+      12,   328,    69,    15,    52,   264,   265,   512,   264,   265,
+     512,    90,   294,   511,    15,    16,    68,    91,     1,     2,
+      24,    52,    15,    92,   329,    68,   264,   265,   512,   385,
+     294,    15,    16,    15,   416,    21,    69,   329,   343,     1,
+       2,    33,   360,  -255,   154,   138,    91,    34,   134,   294,
+     505,   427,   326,   327,    97,   375,   361,  -255,   111,    68,
+     404,   406,   407,   345,   137,    15,   410,   411,   104,    15,
+     204,   205,    35,   386,   469,   328,    62,   173,   270,    49,
+      36,   174,   103,   405,   384,   276,   466,   107,   107,   104,
+     276,   107,   330,   335,   104,   481,   341,   442,   104,   104,
+     519,   139,   107,   276,   506,     3,   513,   344,   507,   513,
+     521,   329,   104,   231,   233,   140,   452,    17,    98,   161,
+     273,    37,   276,   282,   288,   -84,   292,   513,   300,    38,
+     162,   104,   438,   300,    22,   137,   230,   232,   403,   464,
+     444,   263,   269,   447,   469,   280,   469,   417,  -299,   268,
+     279,   189,  -299,    39,   104,   449,   322,    15,   473,   323,
+     439,    41,   338,     1,     2,   107,   339,   287,   445,   283,
+     388,   448,    25,   189,    15,    54,   190,    42,   191,   346,
+       1,     2,    26,   494,     1,     2,    55,   201,   202,   203,
+      15,   204,   205,   206,   207,   208,   235,   236,   195,   474,
+     191,    58,   364,    27,   237,    28,   365,    59,    60,    15,
+     204,   205,   366,   369,    29,     1,     2,   154,   301,   302,
+     201,   202,   203,    15,   204,   205,   206,   207,   208,     1,
+       2,   371,   209,   238,   379,   372,   396,    94,   380,   398,
+     397,   154,   239,    15,   -26,   435,    61,    43,   240,   436,
+     210,   393,   484,   393,    95,   458,   485,   241,   459,   224,
+     225,   100,   401,   402,   389,   209,   490,   189,   520,   493,
+     491,   517,   520,   211,    99,   491,     1,     2,   264,   265,
+     430,    10,   242,   210,    10,   143,   144,   347,   348,   104,
+     243,   113,   303,   142,   244,   353,   354,   356,   357,   264,
+     265,   462,   463,   273,   486,   487,   211,   194,   194,   164,
+     282,   168,   167,   169,   170,   288,   171,   172,   292,   175,
+     176,   177,   300,   178,   182,   212,   201,   202,   203,    15,
+     204,   205,   206,   207,   208,   235,   236,   180,   181,   183,
+     184,   187,   185,   237,   186,   191,   201,   202,   203,    15,
+     204,   205,   206,   207,   208,   235,   236,   188,   200,   228,
+     234,   274,   275,   237,    15,   313,   342,   315,   351,   325,
+     352,   209,   238,   378,   369,   359,   363,   370,   376,   382,
+     377,   239,   381,   383,   384,   387,   391,   240,   300,   210,
+     390,   209,   238,   483,  -177,   394,   241,   408,   412,   419,
+     423,   239,   428,   424,   429,   461,   189,   240,   437,   210,
+     453,   465,   211,   454,     8,    23,   241,   488,   401,   483,
+     470,   242,    40,   455,   471,   489,   189,   475,   476,   243,
+     477,   212,   211,   244,   101,   478,   495,   165,   510,   496,
+     500,   242,    96,   112,    93,   229,   460,   179,   479,   451,
+     440,   212,   415,   244,   201,   202,   203,    15,   204,   205,
+     206,   207,   208,   235,   236,   340,   518,   314,   201,   202,
+     203,    15,   204,   205,   206,   207,   208,     1,     2,   155,
+     441,   433,   498,   196,   425,   336,   503,   432,   337,   501,
+     426,   499,   434,   472,   446,   289,   504,   395,   443,   209,
+     238,   306,     0,     0,     0,     0,     0,     0,     0,   239,
+       0,     0,     0,   209,     0,   240,     0,   210,     0,     0,
+       0,     0,     0,     0,   241,     0,     0,     0,     0,     0,
+       0,   210,     0,     0,   189,     0,     0,     0,     0,     0,
+     211,     0,     0,     0,     0,     0,     0,     0,     0,   242,
+       0,     0,     0,     0,   211,     0,     0,     0,     0,   212,
+       0,   244,   201,   202,   203,    15,   204,   205,   206,   207,
+     208,   235,   236,   212,     0,     0,   145,     0,     0,     0,
+     146,     0,     0,     0,   147,    70,   119,     0,   120,   148,
+       0,     0,     0,     0,     0,     0,     0,     0,   121,     0,
+       0,     0,   149,     0,     0,     0,   123,   209,     0,   124,
+      72,    73,    74,     0,     0,     0,     0,     0,   150,     0,
+     151,    75,     0,     0,    15,   317,    76,   127,    77,   128,
+       1,     2,     0,     0,     0,     0,    78,     0,   129,   130,
+     152,   153,     0,     0,    70,    79,     0,    80,   211,     0,
+       0,     0,    81,   131,    82,    83,    84,     0,     0,    71,
+       0,     0,     0,     0,     0,     0,     0,   178,     0,    72,
+      73,    74,     0,     0,     0,     0,     0,     0,     0,     0,
+      75,     0,     0,     0,     0,    76,     0,    77,     0,     0,
+       0,     0,     0,     0,     0,    78,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,     0,    80,   143,   144,     0,
+       0,    81,   145,    82,    83,    84,   146,     0,     0,     0,
+     147,    70,   119,     0,   120,   148,     0,     0,     0,     0,
+       0,     0,     0,     0,   121,     0,     0,     0,   149,     0,
+       0,     0,   123,     0,     0,   124,    72,    73,    74,     0,
+       0,     0,     0,     0,   150,     0,   151,    75,     0,     0,
+       0,   126,    76,   127,    77,   128,     0,     0,     0,     0,
+       0,     0,    78,     0,   129,   130,   152,   153,     0,     0,
+       0,    79,     0,    80,     1,     2,     0,     0,    81,   131,
+      82,    83,    84,     0,     0,     0,     0,   118,    70,   119,
+       0,   120,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   121,     0,     0,     0,   122,     0,     0,     0,   123,
+       0,     0,   124,    72,    73,    74,     0,     0,     0,     0,
+       0,     0,     0,   125,    75,     0,     0,     0,   126,    76,
+     127,    77,   128,     0,     0,     0,     0,     0,     0,    78,
+       0,   129,   130,     0,     0,     0,     0,     0,    79,     0,
+      80,     0,     0,     0,     0,    81,   131,    82,    83,    84
 };
 
 static const yytype_int16 yycheck[] =
 {
-      12,    92,   272,   157,   145,   302,    18,     5,   357,    11,
-     165,   102,   248,   120,   158,   251,   157,    36,    56,    11,
-       0,     0,   163,     3,   157,     5,    11,    54,     8,    23,
-     163,    43,   327,   328,   329,     4,     6,   112,   333,   334,
-       6,    41,    11,    55,    56,    17,    18,    85,    60,    19,
-      20,    21,    64,    19,    20,    21,    42,     6,    11,    12,
-      13,    11,    12,    43,    11,    11,   157,    11,    12,    38,
-      19,    20,    21,    85,   114,    55,    56,    77,    18,    19,
-      60,   236,    49,    77,    64,   192,    98,    81,    11,    11,
-     117,    38,   350,    60,    12,    17,    18,   113,   393,    88,
-     119,   117,    41,    25,   340,    85,   247,   248,   263,   367,
-     251,   300,   267,    88,   409,    38,    92,    97,    98,   117,
-     122,   113,   122,   112,    65,   114,   111,    47,   140,   141,
-      50,    27,   104,   145,   146,   484,   325,   112,    77,   114,
-     120,   295,   111,   113,    92,   157,   237,   238,   445,   119,
-     119,   163,   296,   119,   295,   110,   451,    61,   111,   300,
-     140,   252,   295,   113,   111,   111,   178,   300,   123,   113,
-     119,   120,   119,   119,    18,    19,   110,     5,   158,   119,
-       8,   193,   194,   452,   325,    92,   455,    83,   111,   123,
-     113,     9,   325,    11,   116,    18,   119,    41,   289,     3,
-     355,    97,   113,   473,   295,    28,   117,   443,    29,    11,
-     115,   302,   192,   193,   194,    17,    18,    11,    12,    13,
-     311,    17,    18,    17,    18,    11,    49,    47,    51,   116,
-     242,    17,    18,    77,   112,   247,   248,    60,   250,   251,
-       8,     9,    10,    11,    12,    13,   113,    15,    16,   113,
-     117,   113,    54,   117,   266,   117,     8,     9,    10,    11,
-      12,    13,    62,    15,    16,    17,    18,   113,   113,   113,
-      11,    12,   117,   117,     7,   119,    17,    18,    11,   116,
-     113,   116,   117,   295,   117,    53,   298,   299,   300,   113,
-     302,    18,   304,   117,   113,   386,   308,   112,   117,    19,
-      20,    53,   443,   394,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,   325,   113,   113,   517,   472,   117,    71,
-     521,    25,    17,    18,    19,    20,    94,   339,   340,    37,
-      38,   119,   312,   108,   109,    39,    40,   106,   107,    19,
-      20,   122,    94,    89,   112,   357,    17,    18,   112,    53,
-      54,   119,    19,    20,   445,    89,   447,   482,   483,    63,
-     112,   229,   230,    79,   112,    69,    59,   112,   380,     3,
-      89,   122,   112,     3,    78,   112,   112,    89,    11,   118,
-     118,   112,   114,   395,    88,   397,    12,   113,   117,   114,
-      94,   114,     3,    43,   122,   112,   120,   118,    76,   103,
-     122,   114,   105,   113,   105,    33,   117,   111,   112,    33,
-     114,    76,    76,   115,   426,   112,   103,    96,   112,   115,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,   115,
-     115,   443,   115,   445,   115,   111,   110,   449,     7,   123,
-      76,   113,   117,   113,   121,   113,   458,     3,    90,   112,
-       3,   124,    18,   115,   115,   112,   122,   117,    31,   117,
-      85,    17,    18,    64,   123,    53,    22,   479,    60,    98,
-     295,   479,   484,   485,    30,    31,    32,   133,    34,   491,
-      68,   493,   164,   192,   449,   445,   308,   156,    44,   252,
-     502,   516,    48,   336,   303,   296,    52,   363,   370,    55,
-      56,    57,    58,   238,   491,   366,    94,   489,   238,   493,
-      66,    67,   230,   339,   485,    71,    72,    73,    74,    75,
-     397,    -1,    -1,    -1,    -1,    -1,    82,   233,    84,    85,
-      -1,    -1,   247,    -1,    -1,    91,   250,    93,    -1,    -1,
-      -1,    -1,    98,    99,   100,   101,   102,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,   112,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    25,    -1,   242,    -1,    -1,
-      -1,    -1,    53,    54,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    63,    -1,    -1,    -1,    -1,    -1,    69,    -1,
-      -1,    -1,    -1,    53,    54,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    63,    -1,    -1,    -1,    88,    -1,    69,
-      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    88,    -1,
-     111,   112,    -1,   114,    94,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   112,    -1,   114,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    -1,    -1,    11,    -1,    -1,
-      -1,    -1,    -1,    17,    18,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      53,    54,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      63,    -1,    56,    57,    58,    -1,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,    67,    -1,    78,    -1,    -1,    72,    -1,
-      74,    -1,    -1,    -1,    -1,    88,    -1,    -1,    82,    -1,
-      -1,    94,    -1,    -1,    -1,    -1,    -1,    91,    -1,    93,
-     103,    -1,    -1,    -1,    98,    -1,   100,   101,   102,   112,
-      -1,   114,    17,    18,    -1,    -1,    -1,    22,    -1,    -1,
-      -1,    26,    -1,    -1,    -1,    30,    31,    32,    -1,    34,
-      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
-      -1,    -1,    -1,    48,    -1,    -1,    -1,    52,    -1,    -1,
-      55,    56,    57,    58,    -1,    -1,    -1,    -1,    -1,    64,
-      -1,    66,    67,    -1,    -1,    -1,    71,    72,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    84,
-      85,    86,    87,    -1,    -1,    -1,    91,    -1,    93,    17,
-      18,    -1,    -1,    98,    99,   100,   101,   102,    -1,    -1,
-      -1,    -1,    30,    31,    32,    -1,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,
-      48,    -1,    -1,    -1,    52,    -1,    -1,    55,    56,    57,
-      58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
-      -1,    -1,    -1,    71,    72,    73,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    -1,    84,    85,    -1,    -1,
-      -1,    -1,    -1,    91,    -1,    93,    -1,    -1,    -1,    -1,
-      98,    99,   100,   101,   102
+      12,   107,   152,   153,    91,    92,    18,   244,   185,   200,
+      92,     0,   200,   185,     3,   102,     5,   181,   245,     8,
+     102,     5,     3,    11,   164,    11,   186,   103,     4,    17,
+      18,    43,    56,    11,    36,    11,    11,    25,    41,   189,
+      11,     0,     6,    55,    56,     6,    18,    19,    60,   199,
+     113,    41,    64,    11,    43,    19,    20,    21,    19,    20,
+      21,    85,    38,     6,    11,    12,    55,    56,    17,    18,
+     115,    60,    11,    85,    77,    64,    19,    20,    21,   299,
+      38,    11,    12,    11,   342,    42,    98,    77,   238,    17,
+      18,    12,   110,   110,   200,    27,    85,    65,   174,    38,
+      23,   359,    18,    19,    54,   282,   124,   124,    97,    98,
+     330,   331,   332,     9,   103,    11,   336,   337,   120,    11,
+      12,    13,    92,   300,   419,    41,    54,   114,   114,   117,
+      92,   118,   113,   123,   118,   111,   111,   224,   225,   120,
+     111,   228,   224,   225,   120,   123,   228,   374,   120,   120,
+     114,    83,   239,   111,    77,   104,   120,   239,    81,   120,
+     121,    77,   120,   175,   176,    97,   386,   114,   118,    49,
+     182,    61,   111,   185,   186,   114,   188,   120,   190,    92,
+      60,   120,   370,   195,   114,   174,   175,   176,   328,   409,
+     378,   180,   181,   381,   489,   372,   491,   347,   114,   363,
+     372,    88,   118,     3,   120,   382,   397,    11,    12,   397,
+     370,   116,   114,    17,    18,   302,   118,   377,   378,   111,
+     302,   381,    18,    88,    11,    47,   113,    29,   115,   241,
+      17,    18,    28,   470,    17,    18,    62,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,   113,   437,
+     115,   117,   114,    49,    25,    51,   118,   117,   118,    11,
+      12,    13,   274,   275,    60,    17,    18,   373,    39,    40,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,   114,    53,    54,   114,   118,   114,   114,   118,     7,
+     118,   397,    63,    11,    47,   114,   113,    50,    69,   118,
+      71,   313,   114,   315,   117,   392,   118,    78,   395,    19,
+      20,    18,   324,   325,   303,    53,   114,    88,   514,   469,
+     118,   114,   518,    94,   113,   118,    17,    18,    19,    20,
+      68,     5,   103,    71,     8,    17,    18,    37,    38,   120,
+     111,   114,   113,     3,   115,   108,   109,   106,   107,    19,
+      20,    19,    20,   365,   458,   459,    94,   152,   153,     3,
+     372,    89,   113,    89,    79,   377,    59,    89,   380,   119,
+     119,    12,   384,   113,   113,   113,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,   123,   123,    43,
+      89,    76,   113,    25,   113,   115,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,   113,   113,     3,
+     121,    33,   113,    25,    11,    76,   105,    76,   114,   123,
+     118,    53,    54,   115,   436,   105,   123,   122,   114,    76,
+     118,    63,   115,   114,   118,    33,   113,    69,   450,    71,
+     116,    53,    54,   455,   115,   114,    78,    96,   103,   113,
+     116,    63,   124,   111,   110,     7,    88,    69,   115,    71,
+     113,    90,    94,   114,     3,    18,    78,   113,   480,   481,
+     118,   103,    31,   125,   124,   118,    88,   116,   116,   111,
+     116,   113,    94,   115,    85,   116,   116,   111,   500,   116,
+     123,   103,    64,    98,    60,   174,   397,   142,   450,   384,
+     372,   113,   339,   115,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,   228,   513,   195,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,   107,
+     373,   363,   480,   153,   355,   225,   489,   362,   225,   485,
+     358,   481,   365,   436,   380,   187,   491,   315,   377,    53,
+      54,   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,
+      -1,    -1,    -1,    53,    -1,    69,    -1,    71,    -1,    -1,
+      -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    71,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
+      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
+      -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   113,
+      -1,   115,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,   113,    -1,    -1,    22,    -1,    -1,    -1,
+      26,    -1,    -1,    -1,    30,    31,    32,    -1,    34,    35,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,
+      -1,    -1,    48,    -1,    -1,    -1,    52,    53,    -1,    55,
+      56,    57,    58,    -1,    -1,    -1,    -1,    -1,    64,    -1,
+      66,    67,    -1,    -1,    11,    71,    72,    73,    74,    75,
+      17,    18,    -1,    -1,    -1,    -1,    82,    -1,    84,    85,
+      86,    87,    -1,    -1,    31,    91,    -1,    93,    94,    -1,
+      -1,    -1,    98,    99,   100,   101,   102,    -1,    -1,    46,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,    56,
+      57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    -1,    93,    17,    18,    -1,
+      -1,    98,    22,   100,   101,   102,    26,    -1,    -1,    -1,
+      30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    48,    -1,
+      -1,    -1,    52,    -1,    -1,    55,    56,    57,    58,    -1,
+      -1,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
+      -1,    71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    -1,    84,    85,    86,    87,    -1,    -1,
+      -1,    91,    -1,    93,    17,    18,    -1,    -1,    98,    99,
+     100,   101,   102,    -1,    -1,    -1,    -1,    30,    31,    32,
+      -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    44,    -1,    -1,    -1,    48,    -1,    -1,    -1,    52,
+      -1,    -1,    55,    56,    57,    58,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    71,    72,
+      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    91,    -1,
+      93,    -1,    -1,    -1,    -1,    98,    99,   100,   101,   102
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint16 yystos[] =
 {
-       0,    17,    18,   104,   126,   127,   128,   264,   127,     0,
-     128,   129,   112,   130,   131,    11,    12,   113,   132,   133,
-     267,    42,   113,   133,   114,    18,    28,    49,    51,    60,
-     134,   135,   136,    12,    65,    92,    92,    61,    92,     3,
-     136,   115,    29,    50,   137,   138,   150,   151,    25,   116,
-     152,   153,   264,   267,    47,    62,   142,   143,   116,   116,
-     117,   112,    54,   144,   145,   147,   148,   149,   264,   267,
+       0,    17,    18,   104,   127,   128,   129,   268,   128,     0,
+     129,   130,   113,   131,   132,    11,    12,   114,   133,   134,
+     270,    42,   114,   134,   115,    18,    28,    49,    51,    60,
+     135,   136,   137,    12,    65,    92,    92,    61,    92,     3,
+     137,   116,    29,    50,   138,   139,   151,   152,    25,   117,
+     153,   154,   268,   270,    47,    62,   143,   144,   117,   117,
+     118,   113,    54,   145,   146,   148,   149,   150,   268,   270,
       31,    46,    56,    57,    58,    67,    72,    74,    82,    91,
-      93,    98,   100,   101,   102,   139,   140,   155,   157,   187,
-     198,   264,   267,   153,   113,   116,   147,    54,   117,   112,
-      18,   140,     3,    17,    18,    22,    30,    32,    34,    44,
-      48,    52,    55,    66,    71,    73,    75,    84,    85,    99,
-     112,   156,   181,   195,   196,   197,   198,   265,   119,   177,
-     259,   260,   261,   264,   149,   113,   141,    36,   167,   177,
-     122,   112,    89,    89,    79,   112,   112,    59,    89,    30,
-      48,    66,   158,   159,   195,   264,     3,   112,   122,    27,
-      83,    97,   262,     3,   178,   179,    49,    60,   263,   131,
-     146,   112,   264,   267,   113,   248,   249,   267,   112,    12,
-      13,   111,   254,   255,   256,   257,   267,   250,   251,   267,
-      89,   113,   117,   118,   118,   112,   154,     8,     9,    10,
-      15,    16,    53,    94,   154,   160,   161,   177,   190,   192,
-     257,   267,    19,    20,   182,   183,   184,   264,    12,    71,
-     112,   188,   190,   191,   264,   267,    26,    35,    64,    86,
-      87,   156,   180,   114,   202,   204,   205,    19,    20,   169,
-     170,   113,   117,   252,   253,   267,   113,   117,   114,   113,
-     117,   114,     3,   159,   264,   267,   264,   267,     8,    10,
-      14,    25,    53,    54,    63,    69,    78,    88,    94,   103,
-     111,   112,   114,   192,   208,   209,   210,   211,   212,   213,
-     214,   216,   217,   218,   219,   220,   222,   223,   224,   225,
-     226,   257,   258,   267,   113,   117,   122,   120,   189,   122,
-     118,    43,   112,    76,   112,   203,   204,   217,   112,   203,
-      39,    40,   112,   206,   207,   208,   235,   236,   238,   240,
-     241,   242,   204,    18,    19,    41,    77,   177,   185,   186,
-     246,   247,   177,   185,   186,   113,   117,   249,   113,   117,
-     114,   256,   191,   257,   267,   251,   191,   257,   167,   177,
-     105,   204,     9,   267,   204,    37,    38,   215,   209,   113,
-     117,   108,   109,   199,   106,   107,   200,   105,   110,   123,
-     239,   177,   161,   183,     7,   193,   194,   267,   267,   188,
-      33,   111,   165,   166,   176,   177,   267,   181,    38,   162,
-     163,   164,   176,   177,   267,    76,   162,    76,    33,   177,
-     264,   115,   112,   188,   246,   122,   246,   246,    96,   168,
-     246,   246,   103,   171,   172,   170,   253,    12,   191,   115,
-     115,   115,   115,   213,   204,   227,   112,   228,   229,   230,
-     193,   115,   111,   211,   212,   213,   123,   110,    68,   221,
-     222,     7,   267,   121,   113,   117,   177,    76,   113,   117,
-     246,   177,   266,   267,   113,   266,   112,   113,   124,   243,
-     244,    19,    20,   246,    90,   115,   115,   111,   231,   232,
-     267,   268,   269,   117,   123,   191,   257,   166,   177,     4,
-     164,   246,   259,   259,   237,   122,   245,   267,   113,   117,
-     112,   117,   113,   117,   201,   204,   209,   163,   179,   179,
-     193,   245,   122,   244,   173,   231,   232,    23,    77,    81,
-     233,   234,     5,   267,     6,    21,   119,   174,   175,   184,
-     113,   174,   113,   175,   120
+      93,    98,   100,   101,   102,   140,   141,   156,   158,   193,
+     204,   268,   270,   154,   114,   117,   148,    54,   118,   113,
+      18,   141,     3,   113,   120,   178,   179,   263,   264,   265,
+     178,   268,   150,   114,   142,    36,   168,   178,    30,    32,
+      34,    44,    48,    52,    55,    66,    71,    73,    75,    84,
+      85,    99,   159,   160,   201,   202,   204,   268,    27,    83,
+      97,   266,     3,    17,    18,    22,    26,    30,    35,    48,
+      64,    66,    86,    87,   157,   181,   185,   186,   187,   201,
+     203,    49,    60,   267,     3,   132,   147,   113,    89,    89,
+      79,    59,    89,   114,   118,   119,   119,    12,   113,   155,
+     123,   123,   113,    43,    89,   113,   113,    76,   113,    88,
+     113,   115,   209,   210,   222,   113,   209,   208,   210,   211,
+     113,     8,     9,    10,    12,    13,    14,    15,    16,    53,
+      71,    94,   113,   194,   196,   197,   198,   228,   261,   262,
+     268,   270,   271,   272,    19,    20,   170,   171,     3,   160,
+     268,   270,   268,   270,   121,    17,    18,    25,    54,    63,
+      69,    78,   103,   111,   115,   157,   180,   194,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     227,   229,   230,   268,    19,    20,   188,   189,   190,   268,
+     114,   252,   253,   270,    33,   113,   111,   166,   167,   177,
+     182,   263,   270,   111,   258,   259,   260,   261,   270,   187,
+     254,   255,   270,   210,    38,   163,   164,   165,   177,   182,
+     270,    39,    40,   113,   212,   213,   214,   239,   240,   242,
+     244,   245,   246,    76,   163,    76,   210,    71,   155,   161,
+     162,   181,   196,   197,   195,   123,    18,    19,    41,    77,
+     178,   191,   192,   250,   251,   178,   191,   192,   114,   118,
+     168,   178,   105,   210,   178,     9,   270,    37,    38,   215,
+     208,   114,   118,   108,   109,   205,   106,   107,   206,   105,
+     110,   124,   243,   123,   114,   118,   270,   256,   257,   270,
+     122,   114,   118,   183,   184,   182,   114,   118,   115,   114,
+     118,   115,    76,   114,   118,   250,   182,    33,   178,   268,
+     116,   113,   269,   270,   114,   269,   114,   118,     7,   199,
+     200,   270,   270,   194,   250,   123,   250,   250,    96,   169,
+     250,   250,   103,   172,   173,   171,   219,   210,   231,   113,
+     232,   233,   234,   116,   111,   217,   218,   219,   124,   110,
+      68,   226,   227,   189,   253,   114,   118,   115,   197,   261,
+     167,   185,   208,   260,   197,   261,   255,   197,   261,   182,
+       4,   165,   250,   113,   114,   125,   247,   248,   263,   263,
+     162,     7,    19,    20,   250,    90,   111,   235,   236,   272,
+     118,   124,   257,    12,   197,   116,   116,   116,   116,   164,
+     241,   123,   249,   270,   114,   118,   184,   184,   113,   118,
+     114,   118,   207,   210,   215,   116,   116,     5,   199,   249,
+     123,   248,   174,   235,   236,    23,    77,    81,   237,   238,
+     270,     6,    21,   120,   175,   176,   190,   114,   175,   114,
+     176,   121
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2347,21 +2342,21 @@
   switch (yyn)
     {
         case 2:
-#line 411 "asn1p_y.y"
+#line 415 "asn1p_y.y"
     {
 		*(void **)param = (yyvsp[(2) - (2)].a_grammar);
 	}
     break;
 
   case 3:
-#line 414 "asn1p_y.y"
+#line 418 "asn1p_y.y"
     {
 		*(void **)param = (yyvsp[(1) - (1)].a_grammar);
 	}
     break;
 
   case 4:
-#line 420 "asn1p_y.y"
+#line 424 "asn1p_y.y"
     {
 		(yyval.a_grammar) = asn1p_new();
 		checkmem((yyval.a_grammar));
@@ -2370,7 +2365,7 @@
     break;
 
   case 5:
-#line 425 "asn1p_y.y"
+#line 429 "asn1p_y.y"
     {
 		(yyval.a_grammar) = (yyvsp[(1) - (2)].a_grammar);
 		TQ_ADD(&((yyval.a_grammar)->modules), (yyvsp[(2) - (2)].a_module), mod_next);
@@ -2378,12 +2373,12 @@
     break;
 
   case 6:
-#line 442 "asn1p_y.y"
+#line 446 "asn1p_y.y"
     { currentModule = asn1p_module_new(); }
     break;
 
   case 7:
-#line 447 "asn1p_y.y"
+#line 451 "asn1p_y.y"
     {
 
 		(yyval.a_module) = currentModule;
@@ -2404,31 +2399,31 @@
     break;
 
   case 8:
-#line 471 "asn1p_y.y"
+#line 475 "asn1p_y.y"
     { (yyval.a_oid) = 0; }
     break;
 
   case 9:
-#line 472 "asn1p_y.y"
+#line 476 "asn1p_y.y"
     { (yyval.a_oid) = (yyvsp[(1) - (1)].a_oid); }
     break;
 
   case 10:
-#line 476 "asn1p_y.y"
+#line 480 "asn1p_y.y"
     {
 		(yyval.a_oid) = (yyvsp[(2) - (3)].a_oid);
 	}
     break;
 
   case 11:
-#line 479 "asn1p_y.y"
+#line 483 "asn1p_y.y"
     {
 		(yyval.a_oid) = 0;
 	}
     break;
 
   case 12:
-#line 485 "asn1p_y.y"
+#line 489 "asn1p_y.y"
     {
 		(yyval.a_oid) = asn1p_oid_new();
 		asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(1) - (1)].a_oid_arc));
@@ -2438,7 +2433,7 @@
     break;
 
   case 13:
-#line 491 "asn1p_y.y"
+#line 495 "asn1p_y.y"
     {
 		(yyval.a_oid) = (yyvsp[(1) - (2)].a_oid);
 		asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(2) - (2)].a_oid_arc));
@@ -2448,7 +2443,7 @@
     break;
 
   case 14:
-#line 500 "asn1p_y.y"
+#line 504 "asn1p_y.y"
     {					/* iso */
 		(yyval.a_oid_arc).name = (yyvsp[(1) - (1)].tv_str);
 		(yyval.a_oid_arc).number = -1;
@@ -2456,7 +2451,7 @@
     break;
 
   case 15:
-#line 504 "asn1p_y.y"
+#line 508 "asn1p_y.y"
     {		/* iso(1) */
 		(yyval.a_oid_arc).name = (yyvsp[(1) - (4)].tv_str);
 		(yyval.a_oid_arc).number = (yyvsp[(3) - (4)].a_int);
@@ -2464,7 +2459,7 @@
     break;
 
   case 16:
-#line 508 "asn1p_y.y"
+#line 512 "asn1p_y.y"
     {					/* 1 */
 		(yyval.a_oid_arc).name = 0;
 		(yyval.a_oid_arc).number = (yyvsp[(1) - (1)].a_int);
@@ -2472,61 +2467,61 @@
     break;
 
   case 17:
-#line 518 "asn1p_y.y"
+#line 522 "asn1p_y.y"
     { (yyval.a_module_flags) = MSF_NOFLAGS; }
     break;
 
   case 18:
-#line 519 "asn1p_y.y"
+#line 523 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
 	}
     break;
 
   case 19:
-#line 528 "asn1p_y.y"
+#line 532 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
 	}
     break;
 
   case 20:
-#line 531 "asn1p_y.y"
+#line 535 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (2)].a_module_flags) | (yyvsp[(2) - (2)].a_module_flags);
 	}
     break;
 
   case 21:
-#line 540 "asn1p_y.y"
+#line 544 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_EXPLICIT_TAGS;
 	}
     break;
 
   case 22:
-#line 543 "asn1p_y.y"
+#line 547 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_IMPLICIT_TAGS;
 	}
     break;
 
   case 23:
-#line 546 "asn1p_y.y"
+#line 550 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_AUTOMATIC_TAGS;
 	}
     break;
 
   case 24:
-#line 549 "asn1p_y.y"
+#line 553 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_EXTENSIBILITY_IMPLIED;
 	}
     break;
 
   case 25:
-#line 553 "asn1p_y.y"
+#line 557 "asn1p_y.y"
     {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp((yyvsp[(1) - (2)].tv_str), "TAG") == 0) {
@@ -2545,19 +2540,19 @@
     break;
 
   case 26:
-#line 574 "asn1p_y.y"
+#line 578 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 27:
-#line 575 "asn1p_y.y"
+#line 579 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (1)].a_module);
 	}
     break;
 
   case 28:
-#line 584 "asn1p_y.y"
+#line 588 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		AL_IMPORT((yyval.a_module), exports, (yyvsp[(1) - (3)].a_module), xp_next);
@@ -2571,14 +2566,14 @@
     break;
 
   case 29:
-#line 597 "asn1p_y.y"
+#line 601 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (1)].a_module);
 	}
     break;
 
   case 30:
-#line 600 "asn1p_y.y"
+#line 604 "asn1p_y.y"
     {
 		if((yyvsp[(1) - (2)].a_module)) {
 			(yyval.a_module) = (yyvsp[(1) - (2)].a_module);
@@ -2592,7 +2587,7 @@
     break;
 
   case 31:
-#line 617 "asn1p_y.y"
+#line 621 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2603,7 +2598,7 @@
     break;
 
   case 32:
-#line 624 "asn1p_y.y"
+#line 628 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2614,7 +2609,7 @@
     break;
 
   case 33:
-#line 638 "asn1p_y.y"
+#line 642 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2625,12 +2620,12 @@
     break;
 
   case 34:
-#line 646 "asn1p_y.y"
+#line 650 "asn1p_y.y"
     { asn1p_lexer_hack_push_encoding_control(); }
     break;
 
   case 35:
-#line 647 "asn1p_y.y"
+#line 651 "asn1p_y.y"
     {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -2642,7 +2637,7 @@
     break;
 
   case 36:
-#line 659 "asn1p_y.y"
+#line 663 "asn1p_y.y"
     {
 		return yyerror(
 			"Attempt to redefine a standard basic string type, "
@@ -2651,12 +2646,12 @@
     break;
 
   case 37:
-#line 672 "asn1p_y.y"
+#line 676 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 39:
-#line 676 "asn1p_y.y"
+#line 680 "asn1p_y.y"
     {
 		if(!saved_aid && 0)
 			return yyerror("Unterminated IMPORTS FROM, "
@@ -2667,19 +2662,19 @@
     break;
 
   case 40:
-#line 686 "asn1p_y.y"
+#line 690 "asn1p_y.y"
     {
 		return yyerror("Empty IMPORTS list");
 	}
     break;
 
   case 41:
-#line 692 "asn1p_y.y"
+#line 696 "asn1p_y.y"
     { (yyval.a_module) = asn1p_module_new(); }
     break;
 
   case 43:
-#line 696 "asn1p_y.y"
+#line 700 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2688,7 +2683,7 @@
     break;
 
   case 44:
-#line 701 "asn1p_y.y"
+#line 705 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (2)].a_module);
 		TQ_ADD(&((yyval.a_module)->imports), (yyvsp[(2) - (2)].a_xports), xp_next);
@@ -2696,17 +2691,17 @@
     break;
 
   case 45:
-#line 708 "asn1p_y.y"
+#line 712 "asn1p_y.y"
     { memset(&(yyval.a_aid), 0, sizeof((yyval.a_aid))); }
     break;
 
   case 46:
-#line 709 "asn1p_y.y"
+#line 713 "asn1p_y.y"
     { (yyval.a_aid).oid = (yyvsp[(1) - (1)].a_oid); }
     break;
 
   case 47:
-#line 713 "asn1p_y.y"
+#line 717 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (4)].a_xports);
 		(yyval.a_xports)->fromModuleName = (yyvsp[(3) - (4)].tv_str);
@@ -2718,7 +2713,7 @@
     break;
 
   case 48:
-#line 724 "asn1p_y.y"
+#line 728 "asn1p_y.y"
     {
 		(yyval.a_xports) = asn1p_xports_new();
 		checkmem((yyval.a_xports));
@@ -2727,7 +2722,7 @@
     break;
 
   case 49:
-#line 729 "asn1p_y.y"
+#line 733 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
 		TQ_ADD(&((yyval.a_xports)->members), (yyvsp[(3) - (3)].a_expr), next);
@@ -2735,7 +2730,7 @@
     break;
 
   case 50:
-#line 736 "asn1p_y.y"
+#line 740 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2745,7 +2740,7 @@
     break;
 
   case 51:
-#line 742 "asn1p_y.y"
+#line 746 "asn1p_y.y"
     {		/* Completely equivalent to above */
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2755,7 +2750,7 @@
     break;
 
   case 52:
-#line 748 "asn1p_y.y"
+#line 752 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2765,12 +2760,12 @@
     break;
 
   case 53:
-#line 758 "asn1p_y.y"
+#line 762 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 54:
-#line 759 "asn1p_y.y"
+#line 763 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2783,21 +2778,21 @@
     break;
 
   case 55:
-#line 771 "asn1p_y.y"
+#line 775 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(2) - (3)].a_xports);
 	}
     break;
 
   case 56:
-#line 774 "asn1p_y.y"
+#line 778 "asn1p_y.y"
     {
 		(yyval.a_xports) = 0;
 	}
     break;
 
   case 57:
-#line 777 "asn1p_y.y"
+#line 781 "asn1p_y.y"
     {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		(yyval.a_xports) = asn1p_xports_new();
@@ -2806,7 +2801,7 @@
     break;
 
   case 58:
-#line 785 "asn1p_y.y"
+#line 789 "asn1p_y.y"
     {
 		(yyval.a_xports) = asn1p_xports_new();
 		assert((yyval.a_xports));
@@ -2815,7 +2810,7 @@
     break;
 
   case 59:
-#line 790 "asn1p_y.y"
+#line 794 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
 		TQ_ADD(&((yyval.a_xports)->members), (yyvsp[(3) - (3)].a_expr), next);
@@ -2823,7 +2818,7 @@
     break;
 
   case 60:
-#line 797 "asn1p_y.y"
+#line 801 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2833,7 +2828,7 @@
     break;
 
   case 61:
-#line 803 "asn1p_y.y"
+#line 807 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2843,7 +2838,7 @@
     break;
 
   case 62:
-#line 809 "asn1p_y.y"
+#line 813 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2853,12 +2848,12 @@
     break;
 
   case 63:
-#line 818 "asn1p_y.y"
+#line 822 "asn1p_y.y"
     { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
     break;
 
   case 64:
-#line 821 "asn1p_y.y"
+#line 825 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -2869,14 +2864,7 @@
     break;
 
   case 65:
-#line 831 "asn1p_y.y"
-    {
-		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
-	}
-    break;
-
-  case 66:
-#line 844 "asn1p_y.y"
+#line 845 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2886,8 +2874,8 @@
 	}
     break;
 
-  case 67:
-#line 854 "asn1p_y.y"
+  case 66:
+#line 855 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2898,8 +2886,8 @@
 	}
     break;
 
-  case 68:
-#line 874 "asn1p_y.y"
+  case 67:
+#line 875 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -2908,8 +2896,8 @@
 	}
     break;
 
-  case 69:
-#line 880 "asn1p_y.y"
+  case 68:
+#line 881 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -2918,8 +2906,17 @@
 	}
     break;
 
+  case 69:
+#line 897 "asn1p_y.y"
+    {
+		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
+		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
+		(yyval.a_expr)->lhs_params = (yyvsp[(3) - (6)].a_plist);
+	}
+    break;
+
   case 70:
-#line 896 "asn1p_y.y"
+#line 903 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
@@ -2928,16 +2925,7 @@
     break;
 
   case 71:
-#line 902 "asn1p_y.y"
-    {
-		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
-		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
-		(yyval.a_expr)->lhs_params = (yyvsp[(3) - (6)].a_plist);
-	}
-    break;
-
-  case 72:
-#line 910 "asn1p_y.y"
+#line 911 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_plist) = asn1p_paramlist_new(yylineno);
@@ -2949,8 +2937,8 @@
 	}
     break;
 
-  case 73:
-#line 919 "asn1p_y.y"
+  case 72:
+#line 920 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_plist) = (yyvsp[(1) - (3)].a_plist);
@@ -2961,16 +2949,28 @@
 	}
     break;
 
-  case 74:
-#line 930 "asn1p_y.y"
+  case 73:
+#line 931 "asn1p_y.y"
     {
 		(yyval.a_parg).governor = NULL;
 		(yyval.a_parg).argument = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
+  case 74:
+#line 935 "asn1p_y.y"
+    {
+		int ret;
+		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
+		ret = asn1p_ref_add_component((yyval.a_parg).governor, (yyvsp[(1) - (3)].tv_str), 0);
+		checkmem(ret == 0);
+		(yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
+		free((yyvsp[(1) - (3)].tv_str));
+	}
+    break;
+
   case 75:
-#line 934 "asn1p_y.y"
+#line 943 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2982,19 +2982,19 @@
     break;
 
   case 76:
-#line 942 "asn1p_y.y"
+#line 951 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
-		ret = asn1p_ref_add_component((yyval.a_parg).governor, (yyvsp[(1) - (3)].tv_str), 0);
+		ret = asn1p_ref_add_component((yyval.a_parg).governor,
+			ASN_EXPR_TYPE2STR((yyvsp[(1) - (3)].a_type)), 1);
 		checkmem(ret == 0);
 		(yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
-		free((yyvsp[(1) - (3)].tv_str));
 	}
     break;
 
   case 77:
-#line 950 "asn1p_y.y"
+#line 959 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -3006,19 +3006,7 @@
     break;
 
   case 78:
-#line 958 "asn1p_y.y"
-    {
-		int ret;
-		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
-		ret = asn1p_ref_add_component((yyval.a_parg).governor,
-			ASN_EXPR_TYPE2STR((yyvsp[(1) - (3)].a_type)), 1);
-		checkmem(ret == 0);
-		(yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
-	}
-    break;
-
-  case 79:
-#line 969 "asn1p_y.y"
+#line 970 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3026,8 +3014,8 @@
 	}
     break;
 
-  case 80:
-#line 974 "asn1p_y.y"
+  case 79:
+#line 975 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3035,14 +3023,19 @@
     break;
 
   case 81:
-#line 981 "asn1p_y.y"
+#line 983 "asn1p_y.y"
     {
-		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
+		(yyval.a_expr) = NEW_EXPR();
+		checkmem((yyval.a_expr));
+		(yyval.a_expr)->Identifier = strdup("?");
+		(yyval.a_expr)->expr_type = A1TC_REFERENCE;
+		(yyval.a_expr)->meta_type = AMT_VALUE;
+		(yyval.a_expr)->value = (yyvsp[(1) - (1)].a_value);
 	}
     break;
 
   case 82:
-#line 984 "asn1p_y.y"
+#line 991 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3054,22 +3047,7 @@
     break;
 
   case 83:
-#line 992 "asn1p_y.y"
-    {
-		asn1p_ref_t *ref;
-		(yyval.a_expr) = NEW_EXPR();
-		checkmem((yyval.a_expr));
-		(yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
-		(yyval.a_expr)->expr_type = A1TC_REFERENCE;
-		(yyval.a_expr)->meta_type = AMT_VALUE;
-		ref = asn1p_ref_new(yylineno, currentModule);
-		asn1p_ref_add_component(ref, (yyvsp[(1) - (1)].tv_str), RLT_lowercase);
-		(yyval.a_expr)->value = asn1p_value_fromref(ref, 0);
-	}
-    break;
-
-  case 84:
-#line 1003 "asn1p_y.y"
+#line 999 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->expr_type = A1TC_VALUESET;
@@ -3078,18 +3056,18 @@
 	}
     break;
 
-  case 85:
-#line 1026 "asn1p_y.y"
+  case 84:
+#line 1022 "asn1p_y.y"
     { (yyval.a_expr) = NEW_EXPR(); }
     break;
 
-  case 86:
-#line 1027 "asn1p_y.y"
+  case 85:
+#line 1023 "asn1p_y.y"
     { (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr); }
     break;
 
-  case 87:
-#line 1030 "asn1p_y.y"
+  case 86:
+#line 1026 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3097,16 +3075,16 @@
 	}
     break;
 
-  case 88:
-#line 1035 "asn1p_y.y"
+  case 87:
+#line 1031 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 89:
-#line 1039 "asn1p_y.y"
+  case 88:
+#line 1035 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (5)].a_expr);
 		asn1p_expr_add_many((yyval.a_expr), (yyvsp[(4) - (5)].a_expr));
@@ -3114,8 +3092,8 @@
 	}
     break;
 
-  case 90:
-#line 1047 "asn1p_y.y"
+  case 89:
+#line 1043 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -3125,8 +3103,8 @@
 	}
     break;
 
-  case 91:
-#line 1054 "asn1p_y.y"
+  case 90:
+#line 1050 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
 		(yyvsp[(2) - (2)].a_marker).flags |= (yyval.a_expr)->marker.flags;
@@ -3135,8 +3113,8 @@
 	}
     break;
 
-  case 92:
-#line 1060 "asn1p_y.y"
+  case 91:
+#line 1056 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3146,15 +3124,15 @@
 	}
     break;
 
-  case 93:
-#line 1067 "asn1p_y.y"
+  case 92:
+#line 1063 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
-  case 94:
-#line 1073 "asn1p_y.y"
+  case 93:
+#line 1069 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3162,16 +3140,16 @@
 	}
     break;
 
-  case 95:
-#line 1078 "asn1p_y.y"
+  case 94:
+#line 1074 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 96:
-#line 1085 "asn1p_y.y"
+  case 95:
+#line 1081 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -3179,23 +3157,23 @@
 	}
     break;
 
-  case 97:
-#line 1090 "asn1p_y.y"
+  case 96:
+#line 1086 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
-  case 98:
-#line 1093 "asn1p_y.y"
+  case 97:
+#line 1089 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 		_fixup_anonymous_identifier((yyval.a_expr));
 	}
     break;
 
-  case 99:
-#line 1100 "asn1p_y.y"
+  case 98:
+#line 1096 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (5)].a_expr);
 		checkmem((yyval.a_expr));
@@ -3205,18 +3183,18 @@
 	}
     break;
 
-  case 100:
-#line 1110 "asn1p_y.y"
+  case 99:
+#line 1106 "asn1p_y.y"
     { (yyval.a_int) = 0; }
     break;
 
+  case 100:
+#line 1107 "asn1p_y.y"
+    { (yyval.a_int) = 1; }
+    break;
+
   case 101:
 #line 1111 "asn1p_y.y"
-    { (yyval.a_int) = 1; }
-    break;
-
-  case 102:
-#line 1115 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3226,16 +3204,16 @@
 	}
     break;
 
-  case 103:
-#line 1122 "asn1p_y.y"
+  case 102:
+#line 1118 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 104:
-#line 1132 "asn1p_y.y"
+  case 103:
+#line 1128 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3246,8 +3224,8 @@
 	}
     break;
 
-  case 105:
-#line 1142 "asn1p_y.y"
+  case 104:
+#line 1138 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
@@ -3259,8 +3237,8 @@
 	}
     break;
 
-  case 106:
-#line 1153 "asn1p_y.y"
+  case 105:
+#line 1149 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -3271,8 +3249,8 @@
 	}
     break;
 
-  case 107:
-#line 1163 "asn1p_y.y"
+  case 106:
+#line 1159 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3284,8 +3262,8 @@
 	}
     break;
 
-  case 108:
-#line 1174 "asn1p_y.y"
+  case 107:
+#line 1170 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -3296,8 +3274,8 @@
 	}
     break;
 
-  case 109:
-#line 1184 "asn1p_y.y"
+  case 108:
+#line 1180 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3309,8 +3287,8 @@
 	}
     break;
 
-  case 110:
-#line 1195 "asn1p_y.y"
+  case 109:
+#line 1191 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3322,78 +3300,78 @@
 	}
     break;
 
-  case 111:
-#line 1207 "asn1p_y.y"
+  case 110:
+#line 1203 "asn1p_y.y"
     { (yyval.a_wsynt) = 0; }
     break;
 
-  case 112:
-#line 1208 "asn1p_y.y"
+  case 111:
+#line 1204 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(1) - (1)].a_wsynt);
 	}
     break;
 
-  case 113:
-#line 1215 "asn1p_y.y"
+  case 112:
+#line 1211 "asn1p_y.y"
     { asn1p_lexer_hack_enable_with_syntax(); }
     break;
 
-  case 114:
-#line 1217 "asn1p_y.y"
+  case 113:
+#line 1213 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(5) - (6)].a_wsynt);
 	}
     break;
 
-  case 115:
-#line 1223 "asn1p_y.y"
+  case 114:
+#line 1219 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = asn1p_wsyntx_new();
 		TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(1) - (1)].a_wchunk), next);
 	}
     break;
 
-  case 116:
-#line 1227 "asn1p_y.y"
+  case 115:
+#line 1223 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(1) - (2)].a_wsynt);
 		TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(2) - (2)].a_wchunk), next);
 	}
     break;
 
-  case 117:
-#line 1234 "asn1p_y.y"
+  case 116:
+#line 1230 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_opaque).buf, 0);
 		(yyval.a_wchunk)->type = WC_WHITESPACE;
 	}
     break;
 
-  case 118:
-#line 1238 "asn1p_y.y"
+  case 117:
+#line 1234 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_str), 0);
 	}
     break;
 
-  case 119:
-#line 1241 "asn1p_y.y"
+  case 118:
+#line 1237 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].a_refcomp).name, 0);
 		(yyval.a_wchunk)->type = WC_FIELD;
 	}
     break;
 
-  case 120:
-#line 1245 "asn1p_y.y"
+  case 119:
+#line 1241 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromsyntax((yyvsp[(2) - (3)].a_wsynt));
 	}
     break;
 
-  case 121:
-#line 1251 "asn1p_y.y"
+  case 120:
+#line 1247 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3404,8 +3382,8 @@
 	}
     break;
 
-  case 122:
-#line 1259 "asn1p_y.y"
+  case 121:
+#line 1255 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3417,8 +3395,8 @@
 	}
     break;
 
-  case 123:
-#line 1268 "asn1p_y.y"
+  case 122:
+#line 1264 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3431,7 +3409,63 @@
     break;
 
   case 124:
-#line 1280 "asn1p_y.y"
+#line 1278 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
+        (yyval.a_expr)->tag = (yyvsp[(1) - (2)].a_tag);
+    }
+    break;
+
+  case 125:
+#line 1285 "asn1p_y.y"
+    {
+		(yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
+		/*
+		 * Outer constraint for SEQUENCE OF and SET OF applies
+		 * to the inner type.
+		 */
+		if((yyval.a_expr)->expr_type == ASN_CONSTR_SEQUENCE_OF
+		|| (yyval.a_expr)->expr_type == ASN_CONSTR_SET_OF) {
+			assert(!TQ_FIRST(&((yyval.a_expr)->members))->constraints);
+			TQ_FIRST(&((yyval.a_expr)->members))->constraints = (yyvsp[(2) - (2)].a_constr);
+		} else {
+			if((yyval.a_expr)->constraints) {
+				assert(!(yyvsp[(2) - (2)].a_constr));
+				/* Check this : optManyConstraints is not used ?! */
+				asn1p_constraint_free((yyvsp[(2) - (2)].a_constr));
+			} else {
+				(yyval.a_expr)->constraints = (yyvsp[(2) - (2)].a_constr);
+			}
+		}
+	}
+    break;
+
+  case 126:
+#line 1308 "asn1p_y.y"
+    {
+		(yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
+		/*
+		 * Outer constraint for SEQUENCE OF and SET OF applies
+		 * to the inner type.
+		 */
+		if((yyval.a_expr)->expr_type == ASN_CONSTR_SEQUENCE_OF
+		|| (yyval.a_expr)->expr_type == ASN_CONSTR_SET_OF) {
+			assert(!TQ_FIRST(&((yyval.a_expr)->members))->constraints);
+			TQ_FIRST(&((yyval.a_expr)->members))->constraints = (yyvsp[(2) - (2)].a_constr);
+		} else {
+			if((yyval.a_expr)->constraints) {
+				assert(!(yyvsp[(2) - (2)].a_constr));
+				/* Check this : optManyConstraints is not used ?! */
+				asn1p_constraint_free((yyvsp[(2) - (2)].a_constr));
+			} else {
+				(yyval.a_expr)->constraints = (yyvsp[(2) - (2)].a_constr);
+			}
+		}
+	}
+    break;
+
+  case 127:
+#line 1331 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
 		(yyval.a_expr)->tag = (yyvsp[(1) - (3)].a_tag);
@@ -3455,18 +3489,18 @@
 	}
     break;
 
-  case 125:
-#line 1304 "asn1p_y.y"
+  case 128:
+#line 1355 "asn1p_y.y"
     {
 		(yyval.a_int) = asn1p_as_pointer ? EM_INDIRECT : 0;
 		asn1p_as_pointer = 0;
 	}
     break;
 
-  case 126:
-#line 1311 "asn1p_y.y"
+  case 129:
+#line 1362 "asn1p_y.y"
     {
-		(yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
+        (yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
 		(yyval.a_expr)->marker.flags |= (yyvsp[(1) - (2)].a_int);
 
 		if(((yyval.a_expr)->marker.flags & EM_INDIRECT)
@@ -3480,18 +3514,11 @@
 				ASN_FILENAME, (yyval.a_expr)->_lineno
 			);
 		}
-	}
+    }
     break;
 
-  case 127:
-#line 1330 "asn1p_y.y"
-    {
-		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
-	}
-    break;
-
-  case 128:
-#line 1333 "asn1p_y.y"
+  case 133:
+#line 1386 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3500,8 +3527,8 @@
 	}
     break;
 
-  case 129:
-#line 1339 "asn1p_y.y"
+  case 134:
+#line 1392 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3510,8 +3537,8 @@
 	}
     break;
 
-  case 130:
-#line 1345 "asn1p_y.y"
+  case 135:
+#line 1398 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3520,8 +3547,8 @@
 	}
     break;
 
-  case 131:
-#line 1351 "asn1p_y.y"
+  case 136:
+#line 1404 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3534,8 +3561,8 @@
 	}
     break;
 
-  case 132:
-#line 1361 "asn1p_y.y"
+  case 137:
+#line 1414 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3548,8 +3575,8 @@
 	}
     break;
 
-  case 133:
-#line 1371 "asn1p_y.y"
+  case 138:
+#line 1424 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3558,8 +3585,8 @@
 	}
     break;
 
-  case 134:
-#line 1377 "asn1p_y.y"
+  case 139:
+#line 1430 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_expr) = NEW_EXPR();
@@ -3574,8 +3601,8 @@
 	}
     break;
 
-  case 135:
-#line 1389 "asn1p_y.y"
+  case 140:
+#line 1442 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3585,8 +3612,8 @@
 	}
     break;
 
-  case 136:
-#line 1404 "asn1p_y.y"
+  case 141:
+#line 1457 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3597,53 +3624,8 @@
 	}
     break;
 
-  case 137:
-#line 1412 "asn1p_y.y"
-    {
-		int ret;
-		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
-		checkmem((yyval.a_ref));
-		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_UNKNOWN);
-		checkmem(ret == 0);
-		free((yyvsp[(1) - (3)].tv_str));
-		free((yyvsp[(3) - (3)].tv_str));
-	}
-    break;
-
-  case 138:
-#line 1423 "asn1p_y.y"
-    {
-		int ret;
-		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
-		checkmem((yyval.a_ref));
-		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_UNKNOWN);
-		checkmem(ret == 0);
-		free((yyvsp[(1) - (3)].tv_str));
-		free((yyvsp[(3) - (3)].tv_str));
-	}
-    break;
-
-  case 139:
-#line 1434 "asn1p_y.y"
-    {
-		int ret;
-		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
-		checkmem((yyval.a_ref));
-		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_lowercase);
-		checkmem(ret == 0);
-		free((yyvsp[(1) - (3)].tv_str));
-		free((yyvsp[(3) - (3)].tv_str));
-	}
-    break;
-
-  case 140:
-#line 1445 "asn1p_y.y"
+  case 142:
+#line 1465 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3654,8 +3636,38 @@
 	}
     break;
 
-  case 141:
-#line 1453 "asn1p_y.y"
+  case 143:
+#line 1473 "asn1p_y.y"
+    {
+		int ret;
+		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+		checkmem((yyval.a_ref));
+		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
+		checkmem(ret == 0);
+		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_UNKNOWN);
+		checkmem(ret == 0);
+		free((yyvsp[(1) - (3)].tv_str));
+		free((yyvsp[(3) - (3)].tv_str));
+	}
+    break;
+
+  case 144:
+#line 1484 "asn1p_y.y"
+    {
+		int ret;
+		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+		checkmem((yyval.a_ref));
+		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
+		checkmem(ret == 0);
+		ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_UNKNOWN);
+		checkmem(ret == 0);
+		free((yyvsp[(1) - (3)].tv_str));
+		free((yyvsp[(3) - (3)].tv_str));
+	}
+    break;
+
+  case 145:
+#line 1495 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = (yyvsp[(3) - (3)].a_ref);
@@ -3677,8 +3689,8 @@
 	}
     break;
 
-  case 142:
-#line 1475 "asn1p_y.y"
+  case 146:
+#line 1517 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3689,8 +3701,8 @@
 	}
     break;
 
-  case 143:
-#line 1483 "asn1p_y.y"
+  case 147:
+#line 1525 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = (yyvsp[(1) - (3)].a_ref);
@@ -3700,24 +3712,24 @@
 	}
     break;
 
-  case 145:
-#line 1496 "asn1p_y.y"
+  case 149:
+#line 1538 "asn1p_y.y"
     {
 		(yyval.a_refcomp).lex_type = RLT_AmpUppercase;
 		(yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 146:
-#line 1501 "asn1p_y.y"
+  case 150:
+#line 1543 "asn1p_y.y"
     {
 		(yyval.a_refcomp).lex_type = RLT_Amplowercase;
 		(yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 147:
-#line 1510 "asn1p_y.y"
+  case 151:
+#line 1552 "asn1p_y.y"
     {
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_AmpUppercase);
@@ -3725,8 +3737,8 @@
 	}
     break;
 
-  case 148:
-#line 1515 "asn1p_y.y"
+  case 152:
+#line 1557 "asn1p_y.y"
     {
 		(yyval.a_ref) = (yyval.a_ref);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_AmpUppercase);
@@ -3734,8 +3746,8 @@
 	}
     break;
 
-  case 149:
-#line 1520 "asn1p_y.y"
+  case 153:
+#line 1562 "asn1p_y.y"
     {
 		(yyval.a_ref) = (yyval.a_ref);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_Amplowercase);
@@ -3743,8 +3755,8 @@
 	}
     break;
 
-  case 150:
-#line 1528 "asn1p_y.y"
+  case 154:
+#line 1570 "asn1p_y.y"
     {
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_CAPITALS);
@@ -3752,8 +3764,8 @@
 	}
     break;
 
-  case 151:
-#line 1551 "asn1p_y.y"
+  case 155:
+#line 1593 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
 		assert((yyval.a_expr)->Identifier == NULL);
@@ -3763,24 +3775,13 @@
 	}
     break;
 
-  case 154:
-#line 1563 "asn1p_y.y"
-    {
-		(yyval.a_value) = asn1p_value_fromint(0);
-		checkmem((yyval.a_value));
-		(yyval.a_value)->type = ATV_CHOICE_IDENTIFIER;
-		(yyval.a_value)->value.choice_identifier.identifier = (yyvsp[(1) - (3)].tv_str);
-		(yyval.a_value)->value.choice_identifier.value = (yyvsp[(3) - (3)].a_value);
-	}
-    break;
-
-  case 155:
-#line 1570 "asn1p_y.y"
+  case 158:
+#line 1605 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 156:
-#line 1570 "asn1p_y.y"
+  case 159:
+#line 1605 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_frombuf((yyvsp[(3) - (3)].tv_opaque).buf, (yyvsp[(3) - (3)].tv_opaque).len, 0);
 		checkmem((yyval.a_value));
@@ -3788,8 +3789,8 @@
 	}
     break;
 
-  case 157:
-#line 1575 "asn1p_y.y"
+  case 160:
+#line 1613 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3797,8 +3798,8 @@
 	}
     break;
 
-  case 158:
-#line 1583 "asn1p_y.y"
+  case 161:
+#line 1618 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3806,64 +3807,17 @@
 	}
     break;
 
-  case 159:
-#line 1588 "asn1p_y.y"
+  case 162:
+#line 1623 "asn1p_y.y"
     {
-		(yyval.a_value) = asn1p_value_fromint(0);
+		(yyval.a_value) = asn1p_value_fromint(1);
 		checkmem((yyval.a_value));
 		(yyval.a_value)->type = ATV_TRUE;
 	}
     break;
 
-  case 160:
-#line 1593 "asn1p_y.y"
-    {
-		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
-		checkmem((yyval.a_value));
-		free((yyvsp[(1) - (1)].tv_str));
-	}
-    break;
-
-  case 161:
-#line 1598 "asn1p_y.y"
-    {
-		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
-		checkmem((yyval.a_value));
-		free((yyvsp[(1) - (1)].tv_str));
-	}
-    break;
-
-  case 162:
-#line 1603 "asn1p_y.y"
-    {
-		(yyval.a_value) = (yyval.a_value);
-	}
-    break;
-
-  case 163:
-#line 1606 "asn1p_y.y"
-    {
-		(yyval.a_value) = (yyvsp[(1) - (1)].a_value);
-	}
-    break;
-
-  case 164:
-#line 1612 "asn1p_y.y"
-    {
-		asn1p_ref_t *ref;
-		int ret;
-		ref = asn1p_ref_new(yylineno, currentModule);
-		checkmem(ref);
-		ret = asn1p_ref_add_component(ref, (yyvsp[(1) - (1)].tv_str), RLT_lowercase);
-		checkmem(ret == 0);
-		(yyval.a_value) = asn1p_value_fromref(ref, 0);
-		checkmem((yyval.a_value));
-		free((yyvsp[(1) - (1)].tv_str));
-	}
-    break;
-
-  case 165:
-#line 1623 "asn1p_y.y"
+  case 168:
+#line 1636 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3880,16 +3834,16 @@
 	}
     break;
 
-  case 166:
-#line 1641 "asn1p_y.y"
+  case 169:
+#line 1654 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_frombuf((yyvsp[(1) - (1)].tv_opaque).buf, (yyvsp[(1) - (1)].tv_opaque).len, 0);
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 167:
-#line 1645 "asn1p_y.y"
+  case 170:
+#line 1658 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
@@ -3897,8 +3851,8 @@
 	}
     break;
 
-  case 168:
-#line 1650 "asn1p_y.y"
+  case 171:
+#line 1663 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
@@ -3906,8 +3860,8 @@
 	}
     break;
 
-  case 169:
-#line 1658 "asn1p_y.y"
+  case 172:
+#line 1671 "asn1p_y.y"
     {
 		(yyval.tv_opaque).len = (yyvsp[(1) - (1)].tv_opaque).len + 1;
 		(yyval.tv_opaque).buf = malloc(1 + (yyval.tv_opaque).len + 1);
@@ -3919,8 +3873,8 @@
     }
     break;
 
-  case 170:
-#line 1667 "asn1p_y.y"
+  case 173:
+#line 1680 "asn1p_y.y"
     {
 		int newsize = (yyvsp[(1) - (2)].tv_opaque).len + (yyvsp[(2) - (2)].tv_opaque).len;
 		char *p = malloc(newsize + 1);
@@ -3935,86 +3889,86 @@
 	}
     break;
 
-  case 172:
-#line 1683 "asn1p_y.y"
+  case 175:
+#line 1696 "asn1p_y.y"
     {
         (yyval.tv_opaque).len = strlen((yyvsp[(1) - (1)].tv_str));
         (yyval.tv_opaque).buf = (yyvsp[(1) - (1)].tv_str);
     }
     break;
 
-  case 173:
-#line 1689 "asn1p_y.y"
+  case 176:
+#line 1702 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_BOOLEAN; }
     break;
 
-  case 174:
-#line 1690 "asn1p_y.y"
+  case 177:
+#line 1703 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_NULL; }
     break;
 
-  case 175:
-#line 1691 "asn1p_y.y"
+  case 178:
+#line 1704 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_REAL; }
     break;
 
-  case 176:
-#line 1692 "asn1p_y.y"
+  case 179:
+#line 1705 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_OCTET_STRING; }
     break;
 
-  case 177:
-#line 1693 "asn1p_y.y"
+  case 180:
+#line 1706 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_OBJECT_IDENTIFIER; }
     break;
 
-  case 178:
-#line 1694 "asn1p_y.y"
+  case 181:
+#line 1707 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_RELATIVE_OID; }
     break;
 
-  case 179:
-#line 1695 "asn1p_y.y"
+  case 182:
+#line 1708 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_EXTERNAL; }
     break;
 
-  case 180:
-#line 1696 "asn1p_y.y"
+  case 183:
+#line 1709 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_EMBEDDED_PDV; }
     break;
 
-  case 181:
-#line 1697 "asn1p_y.y"
+  case 184:
+#line 1710 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_CHARACTER_STRING; }
     break;
 
-  case 182:
-#line 1698 "asn1p_y.y"
+  case 185:
+#line 1711 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_UTCTime; }
     break;
 
-  case 183:
-#line 1699 "asn1p_y.y"
+  case 186:
+#line 1712 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_GeneralizedTime; }
     break;
 
-  case 186:
-#line 1708 "asn1p_y.y"
+  case 189:
+#line 1721 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_INTEGER; }
     break;
 
-  case 187:
-#line 1709 "asn1p_y.y"
+  case 190:
+#line 1722 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_INTEGER; }
     break;
 
-  case 188:
-#line 1710 "asn1p_y.y"
+  case 191:
+#line 1723 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_BIT_STRING; }
     break;
 
-  case 189:
-#line 1714 "asn1p_y.y"
+  case 192:
+#line 1727 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4023,8 +3977,8 @@
 	}
     break;
 
-  case 190:
-#line 1720 "asn1p_y.y"
+  case 193:
+#line 1733 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_INTEGER;
@@ -4032,8 +3986,8 @@
     }
     break;
 
-  case 191:
-#line 1725 "asn1p_y.y"
+  case 194:
+#line 1738 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_ENUMERATED;
@@ -4041,8 +3995,8 @@
     }
     break;
 
-  case 192:
-#line 1730 "asn1p_y.y"
+  case 195:
+#line 1743 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(4) - (5)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
@@ -4050,8 +4004,8 @@
     }
     break;
 
-  case 193:
-#line 1735 "asn1p_y.y"
+  case 196:
+#line 1748 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
@@ -4059,8 +4013,8 @@
     }
     break;
 
-  case 194:
-#line 1740 "asn1p_y.y"
+  case 197:
+#line 1753 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4069,112 +4023,112 @@
     }
     break;
 
-  case 195:
-#line 1749 "asn1p_y.y"
+  case 198:
+#line 1762 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_BMPString; }
     break;
 
-  case 196:
-#line 1750 "asn1p_y.y"
+  case 199:
+#line 1763 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
 	}
     break;
 
-  case 197:
-#line 1754 "asn1p_y.y"
+  case 200:
+#line 1767 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
 	}
     break;
 
-  case 198:
-#line 1758 "asn1p_y.y"
+  case 201:
+#line 1771 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_IA5String; }
     break;
 
-  case 199:
-#line 1759 "asn1p_y.y"
+  case 202:
+#line 1772 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_ISO646String; }
     break;
 
-  case 200:
-#line 1760 "asn1p_y.y"
+  case 203:
+#line 1773 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_NumericString; }
     break;
 
-  case 201:
-#line 1761 "asn1p_y.y"
+  case 204:
+#line 1774 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_PrintableString; }
     break;
 
-  case 202:
-#line 1762 "asn1p_y.y"
+  case 205:
+#line 1775 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
 	}
     break;
 
-  case 203:
-#line 1766 "asn1p_y.y"
+  case 206:
+#line 1779 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_TeletexString; }
     break;
 
-  case 204:
-#line 1767 "asn1p_y.y"
+  case 207:
+#line 1780 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_UniversalString; }
     break;
 
-  case 205:
-#line 1768 "asn1p_y.y"
+  case 208:
+#line 1781 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_UTF8String; }
     break;
 
-  case 206:
-#line 1769 "asn1p_y.y"
+  case 209:
+#line 1782 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
 	}
     break;
 
-  case 207:
-#line 1773 "asn1p_y.y"
+  case 210:
+#line 1786 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_VisibleString; }
     break;
 
-  case 208:
-#line 1774 "asn1p_y.y"
+  case 211:
+#line 1787 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_ObjectDescriptor; }
     break;
 
-  case 213:
-#line 1786 "asn1p_y.y"
+  case 216:
+#line 1799 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
-  case 215:
-#line 1791 "asn1p_y.y"
-    { (yyval.a_constr) = 0; }
-    break;
-
-  case 217:
-#line 1796 "asn1p_y.y"
+  case 218:
+#line 1804 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
   case 220:
-#line 1802 "asn1p_y.y"
+#line 1809 "asn1p_y.y"
+    { (yyval.a_constr) = 0; }
+    break;
+
+  case 223:
+#line 1815 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(2) - (3)].a_constr), 0);
     }
     break;
 
-  case 222:
-#line 1809 "asn1p_y.y"
+  case 225:
+#line 1822 "asn1p_y.y"
     {
         if((yyvsp[(2) - (2)].a_constr)->type == ACT_CA_SET && (yyvsp[(2) - (2)].a_constr)->el_count == 1) {
             CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (2)].a_constr), (yyvsp[(2) - (2)].a_constr)->elements[0]);
@@ -4184,16 +4138,16 @@
 	}
     break;
 
-  case 226:
-#line 1823 "asn1p_y.y"
+  case 229:
+#line 1836 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_EL_EXT;
 	}
     break;
 
-  case 228:
-#line 1828 "asn1p_y.y"
+  case 231:
+#line 1841 "asn1p_y.y"
     {
        asn1p_constraint_t *ct;
        ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4202,8 +4156,8 @@
    }
     break;
 
-  case 229:
-#line 1834 "asn1p_y.y"
+  case 232:
+#line 1847 "asn1p_y.y"
     {
        asn1p_constraint_t *ct;
        ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4214,36 +4168,36 @@
    }
     break;
 
-  case 231:
-#line 1846 "asn1p_y.y"
+  case 234:
+#line 1859 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_AEX, (yyvsp[(3) - (3)].a_constr), 0);
 	}
     break;
 
-  case 233:
-#line 1853 "asn1p_y.y"
+  case 236:
+#line 1866 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_UNI, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 235:
-#line 1860 "asn1p_y.y"
+  case 238:
+#line 1873 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_INT, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 237:
-#line 1868 "asn1p_y.y"
+  case 240:
+#line 1881 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_EXC, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 239:
-#line 1875 "asn1p_y.y"
+  case 242:
+#line 1888 "asn1p_y.y"
     {
         int ret;
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4254,8 +4208,8 @@
     }
     break;
 
-  case 240:
-#line 1886 "asn1p_y.y"
+  case 243:
+#line 1899 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4264,8 +4218,8 @@
 	}
     break;
 
-  case 241:
-#line 1892 "asn1p_y.y"
+  case 244:
+#line 1905 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4274,38 +4228,22 @@
 	}
     break;
 
-  case 247:
-#line 1904 "asn1p_y.y"
-    { asn1p_lexer_hack_push_opaque_state(); }
-    break;
-
-  case 248:
-#line 1904 "asn1p_y.y"
-    {
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = ACT_EL_VALUE;
-		(yyval.a_constr)->value = asn1p_value_frombuf((yyvsp[(3) - (3)].tv_opaque).buf, (yyvsp[(3) - (3)].tv_opaque).len, 0);
-		(yyval.a_constr)->value->type = ATV_UNPARSED;
-	}
-    break;
-
-  case 249:
-#line 1915 "asn1p_y.y"
+  case 250:
+#line 1921 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_FROM, (yyvsp[(2) - (2)].a_constr), 0);
 	}
     break;
 
-  case 250:
-#line 1920 "asn1p_y.y"
+  case 251:
+#line 1926 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_SIZE, (yyvsp[(2) - (2)].a_constr), 0);
 	}
     break;
 
-  case 251:
-#line 1925 "asn1p_y.y"
+  case 252:
+#line 1931 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_CT_PATTERN;
@@ -4313,8 +4251,8 @@
 	}
     break;
 
-  case 252:
-#line 1930 "asn1p_y.y"
+  case 253:
+#line 1936 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4326,8 +4264,8 @@
 	}
     break;
 
-  case 253:
-#line 1942 "asn1p_y.y"
+  case 254:
+#line 1948 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4337,57 +4275,24 @@
     }
     break;
 
-  case 255:
-#line 1952 "asn1p_y.y"
+  case 256:
+#line 1958 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(-123);
 		(yyval.a_value)->type = ATV_MIN;
     }
     break;
 
-  case 257:
-#line 1959 "asn1p_y.y"
+  case 258:
+#line 1965 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(321);
 		(yyval.a_value)->type = ATV_MAX;
     }
     break;
 
-  case 258:
-#line 1965 "asn1p_y.y"
-    {
-		(yyval.a_value) = asn1p_value_fromint(0);
-		checkmem((yyval.a_value));
-		(yyval.a_value)->type = ATV_FALSE;
-	}
-    break;
-
-  case 259:
-#line 1970 "asn1p_y.y"
-    {
-		(yyval.a_value) = asn1p_value_fromint(1);
-		checkmem((yyval.a_value));
-		(yyval.a_value)->type = ATV_TRUE;
-	}
-    break;
-
-  case 263:
-#line 1978 "asn1p_y.y"
-    {
-		asn1p_ref_t *ref;
-		int ret;
-		ref = asn1p_ref_new(yylineno, currentModule);
-		checkmem(ref);
-		ret = asn1p_ref_add_component(ref, (yyvsp[(1) - (1)].tv_str), RLT_lowercase);
-		checkmem(ret == 0);
-		(yyval.a_value) = asn1p_value_fromref(ref, 0);
-		checkmem((yyval.a_value));
-		free((yyvsp[(1) - (1)].tv_str));
-	}
-    break;
-
-  case 264:
-#line 1992 "asn1p_y.y"
+  case 260:
+#line 1973 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
 		checkmem((yyval.a_value));
@@ -4395,8 +4300,8 @@
 	}
     break;
 
-  case 265:
-#line 1997 "asn1p_y.y"
+  case 261:
+#line 1978 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
 		checkmem((yyval.a_value));
@@ -4404,33 +4309,31 @@
 	}
     break;
 
-  case 266:
-#line 2005 "asn1p_y.y"
+  case 262:
+#line 1986 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromtype((yyvsp[(2) - (2)].a_expr));
 		checkmem((yyval.a_value));
     }
     break;
 
-  case 267:
-#line 2012 "asn1p_y.y"
-    { (yyval.a_int) = 0; }
+  case 263:
+#line 1991 "asn1p_y.y"
+    {
+		(yyval.a_value) = asn1p_value_fromtype((yyvsp[(1) - (1)].a_expr));
+		checkmem((yyval.a_value));
+    }
     break;
 
-  case 268:
-#line 2013 "asn1p_y.y"
-    { (yyval.a_int) = 1; }
-    break;
-
-  case 269:
-#line 2021 "asn1p_y.y"
+  case 264:
+#line 2002 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_WCOMP, (yyvsp[(3) - (3)].a_constr), 0);
 	}
     break;
 
-  case 270:
-#line 2024 "asn1p_y.y"
+  case 265:
+#line 2005 "asn1p_y.y"
     {
         assert((yyvsp[(3) - (3)].a_constr)->type == ACT_CA_CSV);
         (yyvsp[(3) - (3)].a_constr)->type = ACT_CT_WCOMPS;
@@ -4438,13 +4341,13 @@
 	}
     break;
 
-  case 274:
-#line 2032 "asn1p_y.y"
+  case 269:
+#line 2013 "asn1p_y.y"
     { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
     break;
 
-  case 275:
-#line 2034 "asn1p_y.y"
+  case 270:
+#line 2015 "asn1p_y.y"
     {
         assert((yyvsp[(4) - (5)].a_constr)->type == ACT_CA_CSV);
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4459,8 +4362,8 @@
     }
     break;
 
-  case 276:
-#line 2047 "asn1p_y.y"
+  case 271:
+#line 2028 "asn1p_y.y"
     {
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
         (yyval.a_constr)->type = ACT_CA_CSV;
@@ -4468,16 +4371,16 @@
     }
     break;
 
-  case 277:
-#line 2052 "asn1p_y.y"
+  case 272:
+#line 2033 "asn1p_y.y"
     {
         (yyval.a_constr) = (yyvsp[(1) - (3)].a_constr);
         asn1p_constraint_insert((yyval.a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 278:
-#line 2058 "asn1p_y.y"
+  case 273:
+#line 2039 "asn1p_y.y"
     {
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
         checkmem((yyval.a_constr));
@@ -4488,44 +4391,44 @@
     }
     break;
 
-  case 279:
-#line 2072 "asn1p_y.y"
+  case 274:
+#line 2053 "asn1p_y.y"
     { (yyval.a_pres) = ACPRES_DEFAULT; }
     break;
 
-  case 280:
-#line 2073 "asn1p_y.y"
+  case 275:
+#line 2054 "asn1p_y.y"
     { (yyval.a_pres) = (yyvsp[(1) - (1)].a_pres); }
     break;
 
-  case 281:
-#line 2077 "asn1p_y.y"
+  case 276:
+#line 2058 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_PRESENT;
 	}
     break;
 
-  case 282:
-#line 2080 "asn1p_y.y"
+  case 277:
+#line 2061 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_ABSENT;
 	}
     break;
 
-  case 283:
-#line 2083 "asn1p_y.y"
+  case 278:
+#line 2064 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_OPTIONAL;
 	}
     break;
 
-  case 287:
-#line 2098 "asn1p_y.y"
+  case 282:
+#line 2079 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 288:
-#line 2098 "asn1p_y.y"
+  case 283:
+#line 2079 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4536,8 +4439,8 @@
 	}
     break;
 
-  case 289:
-#line 2109 "asn1p_y.y"
+  case 284:
+#line 2090 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_CT_CTNG;
@@ -4546,42 +4449,42 @@
 	}
     break;
 
-  case 290:
-#line 2118 "asn1p_y.y"
+  case 285:
+#line 2099 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_RANGE; }
     break;
 
-  case 291:
-#line 2119 "asn1p_y.y"
+  case 286:
+#line 2100 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_RLRANGE; }
     break;
 
-  case 292:
-#line 2120 "asn1p_y.y"
+  case 287:
+#line 2101 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_LLRANGE; }
     break;
 
-  case 293:
-#line 2121 "asn1p_y.y"
+  case 288:
+#line 2102 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_ULRANGE; }
     break;
 
-  case 294:
-#line 2124 "asn1p_y.y"
+  case 289:
+#line 2105 "asn1p_y.y"
     {
 		(yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
 	}
     break;
 
-  case 295:
-#line 2127 "asn1p_y.y"
+  case 290:
+#line 2108 "asn1p_y.y"
     {
 		(yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
 	}
     break;
 
-  case 296:
-#line 2136 "asn1p_y.y"
+  case 291:
+#line 2117 "asn1p_y.y"
     {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno, currentModule);
 		asn1p_constraint_t *ct;
@@ -4597,15 +4500,15 @@
 	}
     break;
 
-  case 297:
-#line 2152 "asn1p_y.y"
+  case 292:
+#line 2133 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CRC, (yyvsp[(1) - (4)].a_constr), (yyvsp[(3) - (4)].a_constr));
 	}
     break;
 
-  case 298:
-#line 2158 "asn1p_y.y"
+  case 293:
+#line 2139 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4614,8 +4517,8 @@
 	}
     break;
 
-  case 299:
-#line 2164 "asn1p_y.y"
+  case 294:
+#line 2145 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4626,8 +4529,8 @@
 	}
     break;
 
-  case 300:
-#line 2178 "asn1p_y.y"
+  case 295:
+#line 2159 "asn1p_y.y"
     {
 		char *p = malloc(strlen((yyvsp[(2) - (2)].tv_str)) + 2);
 		int ret;
@@ -4641,8 +4544,8 @@
 	}
     break;
 
-  case 301:
-#line 2189 "asn1p_y.y"
+  case 296:
+#line 2170 "asn1p_y.y"
     {
 		char *p = malloc(strlen((yyvsp[(3) - (3)].tv_str)) + 3);
 		int ret;
@@ -4657,15 +4560,15 @@
 	}
     break;
 
-  case 302:
-#line 2205 "asn1p_y.y"
+  case 297:
+#line 2186 "asn1p_y.y"
     {
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 303:
-#line 2208 "asn1p_y.y"
+  case 298:
+#line 2189 "asn1p_y.y"
     {
 		int l1 = strlen((yyvsp[(1) - (3)].tv_str));
 		int l3 = strlen((yyvsp[(3) - (3)].tv_str));
@@ -4679,37 +4582,37 @@
 	}
     break;
 
-  case 304:
-#line 2228 "asn1p_y.y"
+  case 299:
+#line 2209 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_NOMARK;
 		(yyval.a_marker).default_value = 0;
 	}
     break;
 
-  case 305:
-#line 2232 "asn1p_y.y"
+  case 300:
+#line 2213 "asn1p_y.y"
     { (yyval.a_marker) = (yyvsp[(1) - (1)].a_marker); }
     break;
 
-  case 306:
-#line 2236 "asn1p_y.y"
+  case 301:
+#line 2217 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_OPTIONAL | EM_INDIRECT;
 		(yyval.a_marker).default_value = 0;
 	}
     break;
 
-  case 307:
-#line 2240 "asn1p_y.y"
+  case 302:
+#line 2221 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_DEFAULT;
 		(yyval.a_marker).default_value = (yyvsp[(2) - (2)].a_value);
 	}
     break;
 
-  case 308:
-#line 2247 "asn1p_y.y"
+  case 303:
+#line 2228 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4717,16 +4620,16 @@
     }
     break;
 
-  case 309:
-#line 2252 "asn1p_y.y"
+  case 304:
+#line 2233 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
     }
     break;
 
-  case 310:
-#line 2258 "asn1p_y.y"
+  case 305:
+#line 2239 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4736,8 +4639,8 @@
     }
     break;
 
-  case 311:
-#line 2267 "asn1p_y.y"
+  case 306:
+#line 2248 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4745,16 +4648,69 @@
 	}
     break;
 
-  case 312:
-#line 2272 "asn1p_y.y"
+  case 307:
+#line 2253 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
+  case 308:
+#line 2260 "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[(1) - (4)].tv_str);
+		(yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+	}
+    break;
+
+  case 309:
+#line 2268 "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[(1) - (4)].tv_str);
+		(yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+	}
+    break;
+
+  case 310:
+#line 2278 "asn1p_y.y"
+    {
+		(yyval.a_expr) = NEW_EXPR();
+		checkmem((yyval.a_expr));
+		asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+	}
+    break;
+
+  case 311:
+#line 2283 "asn1p_y.y"
+    {
+		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+	}
+    break;
+
+  case 312:
+#line 2290 "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[(1) - (4)].tv_str);
+		(yyval.a_expr)->value = asn1p_value_fromint((yyvsp[(3) - (4)].a_int));
+	}
+    break;
+
   case 313:
-#line 2279 "asn1p_y.y"
+#line 2298 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4766,60 +4722,7 @@
     break;
 
   case 314:
-#line 2287 "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[(1) - (4)].tv_str);
-		(yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
-	}
-    break;
-
-  case 315:
-#line 2297 "asn1p_y.y"
-    {
-		(yyval.a_expr) = NEW_EXPR();
-		checkmem((yyval.a_expr));
-		asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
-	}
-    break;
-
-  case 316:
-#line 2302 "asn1p_y.y"
-    {
-		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
-		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
-	}
-    break;
-
-  case 317:
-#line 2309 "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[(1) - (4)].tv_str);
-		(yyval.a_expr)->value = asn1p_value_fromint((yyvsp[(3) - (4)].a_int));
-	}
-    break;
-
-  case 318:
-#line 2317 "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[(1) - (4)].tv_str);
-		(yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
-	}
-    break;
-
-  case 319:
-#line 2327 "asn1p_y.y"
+#line 2308 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
         asn1p_expr_t *first_memb = TQ_FIRST(&((yyval.a_expr)->members));
@@ -4835,8 +4738,8 @@
     }
     break;
 
-  case 320:
-#line 2342 "asn1p_y.y"
+  case 315:
+#line 2323 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4844,16 +4747,16 @@
 	}
     break;
 
-  case 321:
-#line 2347 "asn1p_y.y"
+  case 316:
+#line 2328 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 322:
-#line 2354 "asn1p_y.y"
+  case 317:
+#line 2335 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4863,8 +4766,8 @@
 	}
     break;
 
-  case 323:
-#line 2361 "asn1p_y.y"
+  case 318:
+#line 2342 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4875,8 +4778,8 @@
 	}
     break;
 
-  case 324:
-#line 2369 "asn1p_y.y"
+  case 319:
+#line 2350 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4887,8 +4790,8 @@
 	}
     break;
 
-  case 325:
-#line 2377 "asn1p_y.y"
+  case 320:
+#line 2358 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4898,8 +4801,8 @@
 	}
     break;
 
-  case 326:
-#line 2384 "asn1p_y.y"
+  case 321:
+#line 2365 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4910,145 +4813,137 @@
 	}
     break;
 
-  case 327:
-#line 2395 "asn1p_y.y"
+  case 322:
+#line 2376 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 328:
-#line 2399 "asn1p_y.y"
+  case 323:
+#line 2380 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 330:
-#line 2407 "asn1p_y.y"
+  case 324:
+#line 2387 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromdouble((yyvsp[(1) - (1)].a_dbl));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 331:
-#line 2438 "asn1p_y.y"
+  case 325:
+#line 2418 "asn1p_y.y"
     { memset(&(yyval.a_tag), 0, sizeof((yyval.a_tag))); }
     break;
 
-  case 332:
-#line 2439 "asn1p_y.y"
+  case 326:
+#line 2419 "asn1p_y.y"
     { (yyval.a_tag) = (yyvsp[(1) - (1)].a_tag); }
     break;
 
-  case 333:
-#line 2443 "asn1p_y.y"
+  case 327:
+#line 2423 "asn1p_y.y"
     {
 		(yyval.a_tag) = (yyvsp[(1) - (2)].a_tag);
 		(yyval.a_tag).tag_mode = (yyvsp[(2) - (2)].a_tag).tag_mode;
 	}
     break;
 
-  case 334:
-#line 2450 "asn1p_y.y"
+  case 328:
+#line 2430 "asn1p_y.y"
     {
 		(yyval.a_tag) = (yyvsp[(2) - (4)].a_tag);
 		(yyval.a_tag).tag_value = (yyvsp[(3) - (4)].a_int);
 	}
     break;
 
-  case 335:
-#line 2456 "asn1p_y.y"
+  case 329:
+#line 2436 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_CONTEXT_SPECIFIC; }
     break;
 
-  case 336:
-#line 2457 "asn1p_y.y"
+  case 330:
+#line 2437 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_UNIVERSAL; }
     break;
 
-  case 337:
-#line 2458 "asn1p_y.y"
+  case 331:
+#line 2438 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_APPLICATION; }
     break;
 
-  case 338:
-#line 2459 "asn1p_y.y"
+  case 332:
+#line 2439 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_PRIVATE; }
     break;
 
-  case 339:
-#line 2463 "asn1p_y.y"
+  case 333:
+#line 2443 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_DEFAULT; }
     break;
 
-  case 340:
-#line 2464 "asn1p_y.y"
+  case 334:
+#line 2444 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_IMPLICIT; }
     break;
 
-  case 341:
-#line 2465 "asn1p_y.y"
+  case 335:
+#line 2445 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_EXPLICIT; }
     break;
 
-  case 342:
-#line 2469 "asn1p_y.y"
+  case 336:
+#line 2449 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 343:
-#line 2473 "asn1p_y.y"
+  case 337:
+#line 2453 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 344:
-#line 2481 "asn1p_y.y"
-    {
-		checkmem((yyvsp[(1) - (1)].tv_str));
-		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
-	}
-    break;
-
-  case 345:
-#line 2488 "asn1p_y.y"
+  case 338:
+#line 2461 "asn1p_y.y"
     { (yyval.tv_str) = 0; }
     break;
 
-  case 346:
-#line 2489 "asn1p_y.y"
+  case 339:
+#line 2462 "asn1p_y.y"
     {
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 347:
-#line 2495 "asn1p_y.y"
+  case 340:
+#line 2468 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 348:
-#line 2502 "asn1p_y.y"
+  case 341:
+#line 2475 "asn1p_y.y"
     {
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_lowercase);
     }
     break;
 
-  case 349:
-#line 2508 "asn1p_y.y"
+  case 342:
+#line 2481 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromref((yyvsp[(1) - (1)].a_ref), 0);
     }
@@ -5056,7 +4951,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 5060 "asn1p_y.c"
+#line 4955 "asn1p_y.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5270,7 +5165,7 @@
 }
 
 
-#line 2512 "asn1p_y.y"
+#line 2485 "asn1p_y.y"
 
 
 
@@ -5410,7 +5305,7 @@
 		expr->Identifier);
 }
 
-int
+static int
 yyerror(const char *msg) {
 	extern char *asn1p_text;
 	fprintf(stderr,
diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h
index 8581bc8..9e5f2ce 100644
--- a/libasn1parser/asn1p_y.h
+++ b/libasn1parser/asn1p_y.h
@@ -262,7 +262,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 115 "asn1p_y.y"
+#line 116 "asn1p_y.y"
 {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index c81f524..466218a 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -38,7 +38,8 @@
 }
 
 int yylex(void);
-int yyerror(const char *msg);
+static int yyerror(const char *msg);
+
 #ifdef	YYBYACC
 int yyparse(void **param);	/* byacc does not produce a prototype */
 #endif
@@ -294,8 +295,13 @@
 %type	<a_expr>		ExportsElement
 %type	<a_expr>		ExtensionAndException
 %type	<a_expr>		Type
+%type	<a_expr>		TaggedType
+%type	<a_expr>		MaybeIndirectTaggedType
+%type	<a_expr>		UntaggedType
+%type	<a_expr>		DefinedUntaggedType
+%type	<a_expr>		ConcreteTypeDeclaration "concrete TypeDeclaration"
 %type	<a_expr>		TypeDeclaration
-%type	<a_expr>		TypeDeclarationSet
+%type	<a_expr>		MaybeIndirectTypeDeclaration
 %type	<a_ref>			ComplexTypeReference
 %type	<a_ref>			ComplexTypeReferenceAmpList
 %type	<a_refcomp>		ComplexTypeReferenceElement
@@ -331,7 +337,6 @@
 %type	<a_expr>		IdentifierElement
 %type	<a_expr>		UniverationElement
 %type	<tv_str>		TypeRefName
-%type	<tv_str>		ObjectClassReference
 %type	<tv_str>		Identifier
 %type	<a_ref>		    IdentifierAsReference
 %type	<a_value>		IdentifierAsValue
@@ -345,7 +350,7 @@
 %type	<a_oid>			optObjectIdentifier	/* Optional OID */
 %type	<a_oid>			ObjectIdentifierBody
 %type	<a_oid_arc>		ObjectIdentifierElement
-%type	<a_expr>		BasicType
+%type	<a_expr>		BuiltinType
 %type	<a_type>		BasicTypeId
 %type	<a_type>		BasicTypeId_UniverationCompatible
 %type	<a_type>		BasicString
@@ -399,7 +404,6 @@
 %type	<a_wchunk>		WithSyntaxToken
 %type	<a_marker>		optMarker Marker
 %type	<a_int>			optUNIQUE
-%type	<a_int>			optINCLUDES
 %type	<a_pres>		optPresenceConstraint PresenceConstraint
 %type	<tv_str>		ComponentIdList
 %type	<a_int>			NSTD_IndirectMarker
@@ -818,7 +822,7 @@
 ValueSet: '{' ElementSetSpecs '}' { $$ = $2; };
 
 ValueSetTypeAssignment:
-	TypeRefName DefinedType TOK_PPEQ ValueSet {
+	TypeRefName Type TOK_PPEQ ValueSet {
 		$$ = $2;
 		assert($$->Identifier == 0);
 		$$->Identifier = $1;
@@ -828,9 +832,6 @@
 	;
 
 DefinedType:
-	BasicType {
-		$$ = $1;
-	}
 	/*
 	 * A DefinedType reference.
 	 * "CLASS1.&id.&id2"
@@ -841,7 +842,7 @@
 	 * or
 	 * "Type"
 	 */
-	| ComplexTypeReference {
+	ComplexTypeReference {
 		$$ = NEW_EXPR();
 		checkmem($$);
 		$$->reference = $1;
@@ -978,9 +979,7 @@
 	;
 
 ActualParameter:
-	Type {
-		$$ = $1;
-	}
+	UntaggedType    /* act. Type */
 	| SimpleValue {
 		$$ = NEW_EXPR();
 		checkmem($$);
@@ -989,16 +988,13 @@
 		$$->meta_type = AMT_VALUE;
 		$$->value = $1;
 	}
-	| Identifier {
-		asn1p_ref_t *ref;
+	| DefinedValue {
 		$$ = NEW_EXPR();
 		checkmem($$);
-		$$->Identifier = $1;
+		$$->Identifier = strdup("?");
 		$$->expr_type = A1TC_REFERENCE;
 		$$->meta_type = AMT_VALUE;
-		ref = asn1p_ref_new(yylineno, currentModule);
-		asn1p_ref_add_component(ref, $1, RLT_lowercase);
-		$$->value = asn1p_value_fromref(ref, 0);
+		$$->value = $1;
 	}
 	| ValueSet {
 		$$ = NEW_EXPR();
@@ -1044,20 +1040,20 @@
 	;
 
 ComponentType:
-	Identifier Type optMarker {
+	Identifier MaybeIndirectTaggedType optMarker {
 		$$ = $2;
 		assert($$->Identifier == 0);
 		$$->Identifier = $1;
 		$3.flags |= $$->marker.flags;
 		$$->marker = $3;
 	}
-	| Type optMarker {
+	| MaybeIndirectTaggedType optMarker {
 		$$ = $1;
 		$2.flags |= $$->marker.flags;
 		$$->marker = $2;
 		_fixup_anonymous_identifier($$);
 	}
-	| TOK_COMPONENTS TOK_OF Type {
+	| TOK_COMPONENTS TOK_OF MaybeIndirectTaggedType {
 		$$ = NEW_EXPR();
 		checkmem($$);
 		$$->meta_type = $3->meta_type;
@@ -1082,7 +1078,7 @@
 	;
 
 AlternativeType:
-	Identifier Type {
+	Identifier MaybeIndirectTaggedType {
 		$$ = $2;
 		assert($$->Identifier == 0);
 		$$->Identifier = $1;
@@ -1090,7 +1086,7 @@
 	| ExtensionAndException {
 		$$ = $1;
 	}
-	| Type {
+	| MaybeIndirectTaggedType {
 		$$ = $1;
 		_fixup_anonymous_identifier($$);
 	}
@@ -1276,8 +1272,63 @@
 	}
 	;
 
-Type:
-	optTag TypeDeclaration optManyConstraints {
+Type: TaggedType;
+
+TaggedType:
+    optTag UntaggedType {
+        $$ = $2;
+        $$->tag = $1;
+    }
+    ;
+
+DefinedUntaggedType:
+	DefinedType optManyConstraints {
+		$$ = $1;
+		/*
+		 * Outer constraint for SEQUENCE OF and SET OF applies
+		 * to the inner type.
+		 */
+		if($$->expr_type == ASN_CONSTR_SEQUENCE_OF
+		|| $$->expr_type == ASN_CONSTR_SET_OF) {
+			assert(!TQ_FIRST(&($$->members))->constraints);
+			TQ_FIRST(&($$->members))->constraints = $2;
+		} else {
+			if($$->constraints) {
+				assert(!$2);
+				/* Check this : optManyConstraints is not used ?! */
+				asn1p_constraint_free($2);
+			} else {
+				$$->constraints = $2;
+			}
+		}
+	}
+	;
+
+UntaggedType:
+	TypeDeclaration optManyConstraints {
+		$$ = $1;
+		/*
+		 * Outer constraint for SEQUENCE OF and SET OF applies
+		 * to the inner type.
+		 */
+		if($$->expr_type == ASN_CONSTR_SEQUENCE_OF
+		|| $$->expr_type == ASN_CONSTR_SET_OF) {
+			assert(!TQ_FIRST(&($$->members))->constraints);
+			TQ_FIRST(&($$->members))->constraints = $2;
+		} else {
+			if($$->constraints) {
+				assert(!$2);
+				/* Check this : optManyConstraints is not used ?! */
+				asn1p_constraint_free($2);
+			} else {
+				$$->constraints = $2;
+			}
+		}
+	}
+	;
+
+MaybeIndirectTaggedType:
+    optTag MaybeIndirectTypeDeclaration optManyConstraints {
 		$$ = $2;
 		$$->tag = $1;
 		/*
@@ -1298,7 +1349,7 @@
 			}
 		}
 	}
-	;
+    ;
 
 NSTD_IndirectMarker:
 	{
@@ -1307,9 +1358,9 @@
 	}
 	;
 
-TypeDeclaration:
-	NSTD_IndirectMarker TypeDeclarationSet {
-		$$ = $2;
+MaybeIndirectTypeDeclaration:
+    NSTD_IndirectMarker TypeDeclaration {
+        $$ = $2;
 		$$->marker.flags |= $1;
 
 		if(($$->marker.flags & EM_INDIRECT)
@@ -1323,13 +1374,15 @@
 				ASN_FILENAME, $$->_lineno
 			);
 		}
-	}
-	;
+    }
+    ;
 
-TypeDeclarationSet:
-	DefinedType {
-		$$ = $1;
-	}
+TypeDeclaration:
+    ConcreteTypeDeclaration
+    | DefinedType;
+
+ConcreteTypeDeclaration:
+	BuiltinType
 	| TOK_CHOICE '{' AlternativeTypeLists '}' {
 		$$ = $3;
 		assert($$->expr_type == A1TC_INVALID);
@@ -1348,7 +1401,7 @@
 		$$->expr_type = ASN_CONSTR_SET;
 		$$->meta_type = AMT_TYPE;
 	}
-	| TOK_SEQUENCE optSizeOrConstraint TOK_OF optIdentifier optTag TypeDeclaration {
+	| TOK_SEQUENCE optSizeOrConstraint TOK_OF optIdentifier optTag MaybeIndirectTypeDeclaration {
 		$$ = NEW_EXPR();
 		checkmem($$);
 		$$->constraints = $2;
@@ -1358,7 +1411,7 @@
 		$6->tag = $5;
 		asn1p_expr_add($$, $6);
 	}
-	| TOK_SET optSizeOrConstraint TOK_OF optIdentifier optTag TypeDeclaration {
+	| TOK_SET optSizeOrConstraint TOK_OF optIdentifier optTag MaybeIndirectTypeDeclaration {
 		$$ = NEW_EXPR();
 		checkmem($$);
 		$$->constraints = $2;
@@ -1409,6 +1462,14 @@
 		checkmem(ret == 0);
 		free($1);
 	}
+	| TOK_capitalreference {
+		int ret;
+		$$ = asn1p_ref_new(yylineno, currentModule);
+		checkmem($$);
+		ret = asn1p_ref_add_component($$, $1, RLT_CAPITALS);
+		free($1);
+		checkmem(ret == 0);
+	}
 	| TOK_typereference '.' TypeRefName {
 		int ret;
 		$$ = asn1p_ref_new(yylineno, currentModule);
@@ -1420,7 +1481,7 @@
 		free($1);
 		free($3);
 	}
-	| ObjectClassReference '.' TypeRefName {
+	| TOK_capitalreference '.' TypeRefName {
 		int ret;
 		$$ = asn1p_ref_new(yylineno, currentModule);
 		checkmem($$);
@@ -1431,26 +1492,7 @@
 		free($1);
 		free($3);
 	}
-	| TOK_typereference '.' Identifier {
-		int ret;
-		$$ = asn1p_ref_new(yylineno, currentModule);
-		checkmem($$);
-		ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component($$, $3, RLT_lowercase);
-		checkmem(ret == 0);
-		free($1);
-		free($3);
-	}
-	| ObjectClassReference {
-		int ret;
-		$$ = asn1p_ref_new(yylineno, currentModule);
-		checkmem($$);
-		ret = asn1p_ref_add_component($$, $1, RLT_CAPITALS);
-		free($1);
-		checkmem(ret == 0);
-	}
-	| ObjectClassReference '.' ComplexTypeReferenceAmpList {
+	| TOK_capitalreference '.' ComplexTypeReferenceAmpList {
 		int ret;
 		$$ = $3;
 		ret = asn1p_ref_add_component($$, $1, RLT_CAPITALS);
@@ -1560,66 +1602,37 @@
 Value:
 	SimpleValue
 	| DefinedValue
-	| Identifier ':' Value {
-		$$ = asn1p_value_fromint(0);
-		checkmem($$);
-		$$->type = ATV_CHOICE_IDENTIFIER;
-		$$->value.choice_identifier.identifier = $1;
-		$$->value.choice_identifier.value = $3;
-	}
 	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque {
 		$$ = asn1p_value_frombuf($3.buf, $3.len, 0);
 		checkmem($$);
 		$$->type = ATV_UNPARSED;
 	}
-	| TOK_NULL {
+    ;
+
+SimpleValue:
+	TOK_NULL {
 		$$ = asn1p_value_fromint(0);
 		checkmem($$);
 		$$->type = ATV_NULL;
 	}
-	;
-
-SimpleValue:
-	TOK_FALSE {
+	| TOK_FALSE {
 		$$ = asn1p_value_fromint(0);
 		checkmem($$);
 		$$->type = ATV_FALSE;
 	}
 	| TOK_TRUE {
-		$$ = asn1p_value_fromint(0);
+		$$ = asn1p_value_fromint(1);
 		checkmem($$);
 		$$->type = ATV_TRUE;
 	}
-	| TOK_bstring {
-		$$ = _convert_bitstring2binary($1, 'B');
-		checkmem($$);
-		free($1);
-	}
-	| TOK_hstring {
-		$$ = _convert_bitstring2binary($1, 'H');
-		checkmem($$);
-		free($1);
-	}
-	| RestrictedCharacterStringValue {
-		$$ = $$;
-	}
-	| SignedNumber {
-		$$ = $1;
-	}
+	| SignedNumber
+	| RealValue
+	| RestrictedCharacterStringValue
+	| BitStringValue
 	;
 
 DefinedValue:
-	Identifier {
-		asn1p_ref_t *ref;
-		int ret;
-		ref = asn1p_ref_new(yylineno, currentModule);
-		checkmem(ref);
-		ret = asn1p_ref_add_component(ref, $1, RLT_lowercase);
-		checkmem(ret == 0);
-		$$ = asn1p_value_fromref(ref, 0);
-		checkmem($$);
-		free($1);
-	}
+	IdentifierAsValue
 	| TypeRefName '.' Identifier {
 		asn1p_ref_t *ref;
 		int ret;
@@ -1710,7 +1723,7 @@
 	| TOK_BIT TOK_STRING { $$ = ASN_BASIC_BIT_STRING; }
 	;
 
-BasicType:
+BuiltinType:
 	BasicTypeId {
 		$$ = NEW_EXPR();
 		checkmem($$);
@@ -1901,13 +1914,6 @@
 	| InnerTypeConstraints  /* WITH COMPONENT[S] ... */
 	| PatternConstraint     /* PATTERN ... */
 	| ValueRange
-	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque {
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = ACT_EL_VALUE;
-		$$->value = asn1p_value_frombuf($3.buf, $3.len, 0);
-		$$->value->type = ATV_UNPARSED;
-	}
 	;
 
 
@@ -1961,32 +1967,7 @@
 		$$->type = ATV_MAX;
     };
 
-SingleValue:
-	TOK_FALSE {
-		$$ = asn1p_value_fromint(0);
-		checkmem($$);
-		$$->type = ATV_FALSE;
-	}
-	| TOK_TRUE {
-		$$ = asn1p_value_fromint(1);
-		checkmem($$);
-		$$->type = ATV_TRUE;
-	}
-	| RealValue
-	| RestrictedCharacterStringValue
-	| BitStringValue
-	| Identifier {
-		asn1p_ref_t *ref;
-		int ret;
-		ref = asn1p_ref_new(yylineno, currentModule);
-		checkmem(ref);
-		ret = asn1p_ref_add_component(ref, $1, RLT_lowercase);
-		checkmem(ret == 0);
-		$$ = asn1p_value_fromref(ref, 0);
-		checkmem($$);
-		free($1);
-	}
-	;
+SingleValue: Value;
 
 BitStringValue:
 	TOK_bstring {
@@ -2002,15 +1983,15 @@
 	;
 
 ContainedSubtype:
-    optINCLUDES Type {
+    TOK_INCLUDES Type {
 		$$ = asn1p_value_fromtype($2);
 		checkmem($$);
     }
-	;
-
-optINCLUDES:
-	{ $$ = 0; }
-	| TOK_INCLUDES { $$ = 1; }
+    /* Can't put Type here because of conflicts. Simplified subset */
+    | DefinedUntaggedType {
+		$$ = asn1p_value_fromtype($1);
+		checkmem($$);
+    }
 	;
 
 /*
@@ -2403,8 +2384,7 @@
 	;
 
 RealValue:
-	SignedNumber
-	| TOK_realnumber {
+	TOK_realnumber {
 		$$ = asn1p_value_fromdouble($1);
 		checkmem($$);
 	}
@@ -2477,13 +2457,6 @@
 	;
 
 
-ObjectClassReference:
-	TOK_capitalreference {
-		checkmem($1);
-		$$ = $1;
-	}
-	;
-
 optIdentifier:
 	{ $$ = 0; }
 	| Identifier {
@@ -2648,7 +2621,7 @@
 		expr->Identifier);
 }
 
-int
+static int
 yyerror(const char *msg) {
 	extern char *asn1p_text;
 	fprintf(stderr,