updated parsing bnf
diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index 686509e..1d7c6b6 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -173,7 +173,10 @@
                 warnings_as_errors = 1;
                 break;
             } else if(strcmp(optarg, "debug-lexer") == 0) {
-                asn1_parser_flags |= A1P_LEXER_DEBUG;
+                asn1_parser_flags |= A1P_DEBUG_LEXER;
+                break;
+            } else if(strcmp(optarg, "debug-parser") == 0) {
+                asn1_parser_flags |= A1P_DEBUG_PARSER;
                 break;
             } else if(strcmp(optarg, "debug-fixer") == 0) {
                 asn1_fixer_flags |= A1F_DEBUG;
@@ -483,6 +486,7 @@
 
 "  -Werror               Treat warnings as errors; abort if any warning\n"
 "  -Wdebug-lexer         Enable verbose debugging output from lexer\n"
+"  -Wdebug-parser        Enable verbose debugging output from parser\n"
 "  -Wdebug-fixer         --//-- semantics processor\n"
 "  -Wdebug-compiler      --//-- compiler\n"
 "\n"
diff --git a/doc/man/asn1c.1 b/doc/man/asn1c.1
index f6b6268..93d47c9 100644
--- a/doc/man/asn1c.1
+++ b/doc/man/asn1c.1
@@ -78,6 +78,11 @@
 .RE
 .TP
 .B \-Wdebug\-lexer
+Enable lexer debugging during the ASN.1 lexing stage.
+.RS
+.RE
+.TP
+.B \-Wdebug\-parser
 Enable lexer debugging during the ASN.1 parsing stage.
 .RS
 .RE
diff --git a/doc/man/asn1c.man.md b/doc/man/asn1c.man.md
index ac38328..5b553bc 100644
--- a/doc/man/asn1c.man.md
+++ b/doc/man/asn1c.man.md
@@ -54,6 +54,9 @@
 :   Treat warnings as errors; abort if any warning is produced.
 
 -Wdebug-lexer
+:   Enable lexer debugging during the ASN.1 lexing stage.
+
+-Wdebug-parser
 :   Enable lexer debugging during the ASN.1 parsing stage.
 
 -Wdebug-fixer
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index ec688ab..fdb6a8f 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -302,6 +302,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <stdarg.h>
 #include <errno.h>
 #include <assert.h>
 
@@ -310,6 +311,30 @@
 #define YYPARSE_PARAM	param
 #define YYPARSE_PARAM_TYPE	void **
 #define YYERROR_VERBOSE
+#define YYDEBUG 1
+#define YYFPRINTF   prefixed_fprintf
+
+/*
+ * Prefix parser debug with "PARSER: " for easier human eye scanning.
+ */
+static int
+__attribute__((format(printf, 2, 3)))
+prefixed_fprintf(FILE *f, const char *fmt, ...) {
+    static int line_ended = 1;
+    va_list ap;
+    va_start(ap, fmt);
+    if(line_ended) {
+        fprintf(f, "PARSER: ");
+        line_ended = 0;
+    }
+    size_t len = strlen(fmt);
+    if(len && fmt[len-1] == '\n') {
+        line_ended = 1;
+    }
+    int ret = vfprintf(f, fmt, ap);
+    va_end(ap);
+    return ret;
+}
 
 int yylex(void);
 int yyerror(const char *msg);
@@ -400,7 +425,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 90 "asn1p_y.y"
+#line 115 "asn1p_y.y"
 {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
@@ -436,7 +461,7 @@
 	} tv_nametag;
 }
 /* Line 193 of yacc.c.  */
-#line 440 "asn1p_y.c"
+#line 465 "asn1p_y.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -449,7 +474,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 453 "asn1p_y.c"
+#line 478 "asn1p_y.c"
 
 #ifdef short
 # undef short
@@ -664,16 +689,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  9
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   932
+#define YYLAST   921
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  125
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  137
+#define YYNNTS  144
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  339
+#define YYNRULES  347
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  524
+#define YYNSTATES  523
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -750,159 +775,162 @@
      527,   529,   531,   533,   535,   537,   539,   542,   544,   549,
      554,   560,   565,   569,   571,   573,   575,   577,   579,   581,
      583,   585,   587,   589,   591,   593,   595,   597,   599,   601,
-     603,   605,   606,   608,   609,   611,   616,   618,   622,   627,
-     629,   631,   633,   635,   637,   641,   647,   649,   653,   655,
-     659,   661,   665,   667,   671,   676,   680,   682,   684,   688,
-     692,   696,   700,   702,   704,   705,   709,   712,   715,   717,
-     719,   721,   723,   725,   727,   729,   731,   733,   735,   737,
-     741,   745,   747,   749,   751,   755,   761,   763,   767,   771,
-     772,   774,   776,   778,   780,   782,   784,   786,   787,   793,
-     796,   798,   801,   804,   808,   810,   812,   816,   821,   823,
-     827,   830,   834,   836,   840,   841,   843,   845,   848,   850,
-     854,   856,   858,   862,   867,   872,   874,   878,   883,   888,
-     890,   892,   896,   898,   903,   908,   910,   912,   914,   916,
-     918,   920,   921,   923,   926,   931,   932,   934,   936,   938,
-     939,   941,   943,   945,   947,   949,   950,   952,   954,   956
+     603,   605,   606,   608,   609,   611,   612,   614,   616,   620,
+     622,   625,   627,   629,   631,   633,   635,   639,   645,   647,
+     651,   653,   657,   659,   663,   665,   669,   671,   675,   677,
+     679,   681,   683,   685,   687,   689,   690,   694,   697,   700,
+     703,   706,   710,   712,   714,   716,   718,   720,   722,   724,
+     726,   728,   730,   732,   734,   737,   738,   740,   744,   748,
+     750,   752,   754,   758,   764,   766,   770,   774,   775,   777,
+     779,   781,   783,   785,   787,   789,   790,   796,   799,   801,
+     804,   807,   811,   813,   815,   819,   824,   826,   830,   833,
+     837,   839,   843,   844,   846,   848,   851,   853,   857,   859,
+     861,   865,   870,   875,   877,   881,   886,   891,   893,   895,
+     899,   901,   906,   911,   913,   915,   917,   919,   921,   923,
+     924,   926,   929,   934,   935,   937,   939,   941,   942,   944,
+     946,   948,   950,   952,   953,   955,   957,   959
 };
 
 /* 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,   256,   129,   130,    42,   134,     3,
+     127,   128,    -1,    -1,   263,   129,   130,    42,   134,     3,
       29,   137,    47,    -1,    -1,   131,    -1,   112,   132,   113,
-      -1,   112,   113,    -1,   133,    -1,   132,   133,    -1,   259,
-      -1,   259,   114,    12,   115,    -1,    12,    -1,    -1,   135,
+      -1,   112,   113,    -1,   133,    -1,   132,   133,    -1,   266,
+      -1,   266,   114,    12,   115,    -1,    12,    -1,    -1,   135,
       -1,   136,    -1,   135,   136,    -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,   197,    -1,    -1,   143,    -1,    62,
      144,   116,    -1,    62,    54,    -1,    -1,   145,    -1,   147,
-      -1,   145,   147,    -1,    -1,   131,    -1,   148,    54,   256,
-     146,    -1,   149,    -1,   148,   117,   149,    -1,   256,    -1,
-     256,   112,   113,    -1,   259,    -1,    -1,   151,    -1,    50,
+      -1,   145,   147,    -1,    -1,   131,    -1,   148,    54,   263,
+     146,    -1,   149,    -1,   148,   117,   149,    -1,   263,    -1,
+     263,   112,   113,    -1,   266,    -1,    -1,   151,    -1,    50,
      152,   116,    -1,    50,    25,   116,    -1,    50,   116,    -1,
-     153,    -1,   152,   117,   153,    -1,   256,    -1,   256,   112,
-     113,    -1,   259,    -1,   112,   206,   113,    -1,   256,   156,
+     153,    -1,   152,   117,   153,    -1,   263,    -1,   263,   112,
+     113,    -1,   266,    -1,   112,   207,   113,    -1,   263,   156,
        3,   154,    -1,   196,    -1,   181,    -1,   181,   112,   160,
-     113,    -1,   256,     3,   177,    -1,   256,     3,   167,    -1,
-     256,   112,   158,   113,     3,   177,    -1,   256,   112,   158,
+     113,    -1,   263,     3,   177,    -1,   263,     3,   167,    -1,
+     263,   112,   158,   113,     3,   177,    -1,   263,   112,   158,
      113,     3,   167,    -1,   159,    -1,   158,   117,   159,    -1,
-     256,    -1,   256,   118,   259,    -1,   256,   118,   256,    -1,
-     194,   118,   259,    -1,   194,   118,   256,    -1,   161,    -1,
-     160,   117,   161,    -1,   177,    -1,   190,    -1,   259,    -1,
+     263,    -1,   263,   118,   266,    -1,   263,   118,   263,    -1,
+     194,   118,   266,    -1,   194,   118,   263,    -1,   161,    -1,
+     160,   117,   161,    -1,   177,    -1,   190,    -1,   266,    -1,
      154,    -1,    -1,   163,    -1,   164,    -1,   163,   117,   164,
-      -1,   163,   117,     4,   163,     5,    -1,   259,   177,   238,
-      -1,   177,   238,    -1,    38,    76,   177,    -1,   176,    -1,
-     166,    -1,   165,   117,   166,    -1,   259,   177,    -1,   176,
+      -1,   163,   117,     4,   163,     5,    -1,   266,   177,   245,
+      -1,   177,   245,    -1,    38,    76,   177,    -1,   176,    -1,
+     166,    -1,   165,   117,   166,    -1,   266,   177,    -1,   176,
       -1,   177,    -1,    36,   112,   169,   113,   171,    -1,    -1,
-      96,    -1,   170,    -1,   169,   117,   170,    -1,    19,   238,
-      -1,    20,   177,   168,   238,    -1,    20,   185,   238,    -1,
-      20,   186,   238,    -1,    19,   185,   238,    -1,    19,   177,
-     238,    -1,    19,   186,   238,    -1,    -1,   172,    -1,    -1,
+      96,    -1,   170,    -1,   169,   117,   170,    -1,    19,   245,
+      -1,    20,   177,   168,   245,    -1,    20,   185,   245,    -1,
+      20,   186,   245,    -1,    19,   185,   245,    -1,    19,   177,
+     245,    -1,    19,   186,   245,    -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,
-     249,    -1,   251,   179,   200,    -1,    -1,   178,   180,    -1,
+     256,    -1,   258,   179,   201,    -1,    -1,   178,   180,    -1,
      156,    -1,    35,   112,   165,   113,    -1,    86,   112,   162,
-     113,    -1,    87,   112,   162,   113,    -1,    86,   201,    76,
-     258,   251,   179,    -1,    87,   201,    76,   258,   251,   179,
-      -1,    26,    -1,    26,    43,    33,   259,    -1,    64,    76,
-     181,    -1,    17,    -1,    17,   122,   256,    -1,   257,   122,
-     256,    -1,    17,   122,   259,    -1,   257,    -1,   257,   122,
+     113,    -1,    87,   112,   162,   113,    -1,    86,   202,    76,
+     265,   258,   179,    -1,    87,   202,    76,   265,   258,   179,
+      -1,    26,    -1,    26,    43,    33,   266,    -1,    64,    76,
+     181,    -1,    17,    -1,    17,   122,   263,    -1,   264,   122,
+     263,    -1,    17,   122,   266,    -1,   264,    -1,   264,   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,   259,   177,     3,   188,
-      -1,   190,    -1,   191,    -1,   259,   118,   188,    -1,    -1,
+     185,   122,    20,    -1,    18,    -1,   266,   177,     3,   188,
+      -1,   190,    -1,   191,    -1,   266,   118,   188,    -1,    -1,
      112,   189,   193,    -1,    71,    -1,    53,    -1,    94,    -1,
-       8,    -1,    10,    -1,   192,    -1,   249,    -1,   259,    -1,
-     256,   122,   259,    -1,     9,    -1,    15,    -1,    16,    -1,
+       8,    -1,    10,    -1,   192,    -1,   256,    -1,   266,    -1,
+     263,   122,   266,    -1,     9,    -1,    15,    -1,    16,    -1,
        7,    -1,   193,     7,    -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,   197,    -1,   195,    -1,    66,    -1,    48,    -1,    30,
-      89,    -1,   194,    -1,    66,   112,   242,   113,    -1,    48,
-     112,   246,   113,    -1,    30,    89,   112,   244,   113,    -1,
-      22,   112,   240,   113,    -1,    22,   112,   113,    -1,    31,
+      89,    -1,   194,    -1,    66,   112,   249,   113,    -1,    48,
+     112,   253,   113,    -1,    30,    89,   112,   251,   113,    -1,
+      22,   112,   247,   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,   202,    -1,    -1,   202,
-      -1,    88,   114,   204,   115,    -1,   203,    -1,   114,   204,
-     115,    -1,   203,   114,   204,   115,    -1,   205,    -1,   227,
-      -1,   206,    -1,   111,    -1,   207,    -1,   207,   117,   111,
-      -1,   207,   117,   111,   117,   207,    -1,   208,    -1,    25,
-     105,   211,    -1,   209,    -1,   208,   198,   209,    -1,   210,
-      -1,   209,   199,   210,    -1,   211,    -1,   211,   105,   211,
-      -1,   214,   114,   206,   115,    -1,   114,   206,   115,    -1,
-     215,    -1,   217,    -1,   215,   231,   215,    -1,    69,   231,
-     215,    -1,   215,   231,    68,    -1,    69,   231,    68,    -1,
-     218,    -1,   213,    -1,    -1,   112,   212,   193,    -1,    78,
-       9,    -1,    78,   259,    -1,    88,    -1,    54,    -1,    53,
-      -1,    94,    -1,   250,    -1,   192,    -1,   216,    -1,   259,
-      -1,     8,    -1,    10,    -1,   177,    -1,   103,    37,   219,
-      -1,   103,    38,   220,    -1,   202,    -1,   221,    -1,   222,
-      -1,   112,   223,   113,    -1,   112,   111,   117,   223,   113,
-      -1,   224,    -1,   223,   117,   224,    -1,   261,   200,   225,
-      -1,    -1,   226,    -1,    81,    -1,    23,    -1,    77,    -1,
-     228,    -1,   232,    -1,   230,    -1,    -1,    39,    33,   112,
-     229,   193,    -1,    40,   177,    -1,   110,    -1,   110,   123,
-      -1,   123,   110,    -1,   123,   110,   123,    -1,   233,    -1,
-     234,    -1,   112,   256,   113,    -1,   233,   112,   235,   113,
-      -1,   236,    -1,   235,   117,   236,    -1,   124,   237,    -1,
-     124,   122,   237,    -1,   259,    -1,   237,   122,   259,    -1,
-      -1,   239,    -1,    77,    -1,    41,   188,    -1,   241,    -1,
-     240,   117,   241,    -1,   259,    -1,   243,    -1,   242,   117,
-     243,    -1,   259,   114,   249,   115,    -1,   259,   114,   191,
-     115,    -1,   245,    -1,   244,   117,   245,    -1,   259,   114,
-      12,   115,    -1,   259,   114,   191,   115,    -1,   247,    -1,
-     248,    -1,   247,   117,   248,    -1,   259,    -1,   259,   114,
-     249,   115,    -1,   259,   114,   191,   115,    -1,   249,    -1,
-     111,    -1,    12,    -1,    13,    -1,   249,    -1,    14,    -1,
-      -1,   252,    -1,   253,   255,    -1,   119,   254,    12,   120,
-      -1,    -1,    97,    -1,    27,    -1,    83,    -1,    -1,    60,
-      -1,    49,    -1,    17,    -1,    18,    -1,    18,    -1,    -1,
-     259,    -1,    11,    -1,   259,    -1,   260,    -1
+      -1,   106,    -1,   107,    -1,    -1,   203,    -1,    -1,   204,
+      -1,    -1,   203,    -1,   216,    -1,   114,   205,   115,    -1,
+     203,    -1,   204,   203,    -1,   206,    -1,   234,    -1,   207,
+      -1,   111,    -1,   208,    -1,   208,   117,   111,    -1,   208,
+     117,   111,   117,   208,    -1,   209,    -1,    25,   105,   212,
+      -1,   210,    -1,   209,   198,   210,    -1,   211,    -1,   210,
+     199,   211,    -1,   212,    -1,   212,   105,   212,    -1,   213,
+      -1,   114,   208,   115,    -1,   221,    -1,   223,    -1,   215,
+      -1,   216,    -1,   225,    -1,   217,    -1,   218,    -1,    -1,
+     112,   214,   193,    -1,    54,   203,    -1,    88,   203,    -1,
+      78,     9,    -1,    78,   266,    -1,   219,   238,   220,    -1,
+     221,    -1,    69,    -1,   221,    -1,    68,    -1,    53,    -1,
+      94,    -1,   257,    -1,   192,    -1,   222,    -1,   266,    -1,
+       8,    -1,    10,    -1,   224,   177,    -1,    -1,    63,    -1,
+     103,    37,   226,    -1,   103,    38,   227,    -1,   203,    -1,
+     228,    -1,   229,    -1,   112,   230,   113,    -1,   112,   111,
+     117,   230,   113,    -1,   231,    -1,   230,   117,   231,    -1,
+     268,   200,   232,    -1,    -1,   233,    -1,    81,    -1,    23,
+      -1,    77,    -1,   235,    -1,   239,    -1,   237,    -1,    -1,
+      39,    33,   112,   236,   193,    -1,    40,   177,    -1,   110,
+      -1,   110,   123,    -1,   123,   110,    -1,   123,   110,   123,
+      -1,   240,    -1,   241,    -1,   112,   263,   113,    -1,   240,
+     112,   242,   113,    -1,   243,    -1,   242,   117,   243,    -1,
+     124,   244,    -1,   124,   122,   244,    -1,   266,    -1,   244,
+     122,   266,    -1,    -1,   246,    -1,    77,    -1,    41,   188,
+      -1,   248,    -1,   247,   117,   248,    -1,   266,    -1,   250,
+      -1,   249,   117,   250,    -1,   266,   114,   256,   115,    -1,
+     266,   114,   191,   115,    -1,   252,    -1,   251,   117,   252,
+      -1,   266,   114,    12,   115,    -1,   266,   114,   191,   115,
+      -1,   254,    -1,   255,    -1,   254,   117,   255,    -1,   266,
+      -1,   266,   114,   256,   115,    -1,   266,   114,   191,   115,
+      -1,   256,    -1,   111,    -1,    12,    -1,    13,    -1,   256,
+      -1,    14,    -1,    -1,   259,    -1,   260,   262,    -1,   119,
+     261,    12,   120,    -1,    -1,    97,    -1,    27,    -1,    83,
+      -1,    -1,    60,    -1,    49,    -1,    17,    -1,    18,    -1,
+      18,    -1,    -1,   266,    -1,    11,    -1,   266,    -1,   267,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   378,   378,   381,   387,   392,   409,   409,   438,   439,
-     443,   446,   452,   458,   467,   471,   475,   485,   486,   495,
-     498,   507,   510,   513,   516,   520,   541,   542,   551,   564,
-     567,   584,   591,   605,   613,   612,   626,   639,   640,   643,
-     653,   659,   660,   663,   668,   675,   676,   680,   691,   696,
-     703,   709,   715,   725,   726,   738,   741,   744,   752,   757,
-     764,   770,   776,   785,   788,   798,   811,   821,   841,   847,
-     863,   869,   877,   886,   897,   901,   909,   917,   925,   936,
-     941,   948,   951,   959,   970,   993,   994,   997,  1002,  1006,
-    1014,  1021,  1027,  1034,  1040,  1045,  1052,  1057,  1060,  1067,
-    1077,  1078,  1082,  1089,  1099,  1109,  1120,  1130,  1141,  1151,
-    1162,  1174,  1175,  1182,  1181,  1190,  1194,  1201,  1205,  1208,
-    1212,  1218,  1226,  1235,  1247,  1271,  1278,  1297,  1300,  1306,
-    1312,  1318,  1328,  1338,  1344,  1356,  1371,  1379,  1390,  1401,
-    1412,  1420,  1442,  1450,  1459,  1463,  1468,  1477,  1482,  1487,
-    1495,  1518,  1528,  1529,  1530,  1537,  1537,  1542,  1550,  1555,
-    1560,  1565,  1570,  1573,  1579,  1590,  1608,  1612,  1617,  1625,
-    1634,  1649,  1650,  1651,  1652,  1653,  1654,  1655,  1656,  1657,
-    1658,  1659,  1660,  1661,  1668,  1669,  1670,  1674,  1680,  1685,
-    1690,  1695,  1700,  1709,  1710,  1714,  1718,  1719,  1720,  1721,
-    1722,  1726,  1727,  1728,  1729,  1733,  1734,  1741,  1741,  1742,
-    1742,  1746,  1747,  1751,  1752,  1753,  1759,  1765,  1768,  1773,
-    1773,  1775,  1778,  1782,  1783,  1789,  1800,  1801,  1807,  1808,
-    1814,  1815,  1822,  1823,  1829,  1837,  1845,  1851,  1857,  1864,
-    1872,  1880,  1889,  1890,  1891,  1891,  1901,  1906,  1918,  1921,
-    1927,  1932,  1937,  1938,  1939,  1940,  1954,  1959,  1967,  1978,
-    1981,  1987,  1988,  1988,  1989,  1991,  2004,  2009,  2015,  2029,
-    2030,  2034,  2037,  2040,  2048,  2049,  2050,  2055,  2054,  2066,
-    2075,  2076,  2077,  2078,  2081,  2084,  2093,  2109,  2115,  2121,
-    2135,  2146,  2162,  2165,  2185,  2189,  2193,  2197,  2204,  2209,
-    2215,  2224,  2229,  2236,  2244,  2254,  2259,  2266,  2274,  2284,
-    2299,  2304,  2311,  2318,  2326,  2334,  2341,  2352,  2356,  2363,
-    2364,  2395,  2396,  2400,  2407,  2413,  2414,  2415,  2416,  2420,
-    2421,  2422,  2426,  2430,  2438,  2445,  2446,  2452,  2459,  2465
+       0,   410,   410,   413,   419,   424,   441,   441,   470,   471,
+     475,   478,   484,   490,   499,   503,   507,   517,   518,   527,
+     530,   539,   542,   545,   548,   552,   573,   574,   583,   596,
+     599,   616,   623,   637,   645,   644,   658,   671,   672,   675,
+     685,   691,   692,   695,   700,   707,   708,   712,   723,   728,
+     735,   741,   747,   757,   758,   770,   773,   776,   784,   789,
+     796,   802,   808,   817,   820,   830,   843,   853,   873,   879,
+     895,   901,   909,   918,   929,   933,   941,   949,   957,   968,
+     973,   980,   983,   991,  1002,  1025,  1026,  1029,  1034,  1038,
+    1046,  1053,  1059,  1066,  1072,  1077,  1084,  1089,  1092,  1099,
+    1109,  1110,  1114,  1121,  1131,  1141,  1152,  1162,  1173,  1183,
+    1194,  1206,  1207,  1214,  1213,  1222,  1226,  1233,  1237,  1240,
+    1244,  1250,  1258,  1267,  1279,  1303,  1310,  1329,  1332,  1338,
+    1344,  1350,  1360,  1370,  1376,  1388,  1403,  1411,  1422,  1433,
+    1444,  1452,  1474,  1482,  1491,  1495,  1500,  1509,  1514,  1519,
+    1527,  1550,  1560,  1561,  1562,  1569,  1569,  1574,  1582,  1587,
+    1592,  1597,  1602,  1605,  1611,  1622,  1640,  1644,  1649,  1657,
+    1666,  1681,  1682,  1683,  1684,  1685,  1686,  1687,  1688,  1689,
+    1690,  1691,  1692,  1693,  1700,  1701,  1702,  1706,  1712,  1717,
+    1722,  1727,  1732,  1741,  1742,  1746,  1750,  1751,  1752,  1753,
+    1754,  1758,  1759,  1760,  1761,  1765,  1766,  1773,  1773,  1774,
+    1774,  1778,  1779,  1783,  1784,  1788,  1789,  1790,  1794,  1800,
+    1801,  1810,  1810,  1812,  1815,  1819,  1820,  1826,  1837,  1838,
+    1844,  1845,  1851,  1852,  1859,  1860,  1866,  1867,  1878,  1884,
+    1890,  1891,  1893,  1894,  1895,  1896,  1896,  1907,  1912,  1917,
+    1922,  1934,  1943,  1944,  1950,  1951,  1957,  1962,  1967,  1968,
+    1969,  1970,  1984,  1989,  1997,  2004,  2005,  2013,  2016,  2022,
+    2023,  2023,  2024,  2026,  2039,  2044,  2050,  2064,  2065,  2069,
+    2072,  2075,  2083,  2084,  2085,  2090,  2089,  2101,  2110,  2111,
+    2112,  2113,  2116,  2119,  2128,  2144,  2150,  2156,  2170,  2181,
+    2197,  2200,  2220,  2224,  2228,  2232,  2239,  2244,  2250,  2259,
+    2264,  2271,  2279,  2289,  2294,  2301,  2309,  2319,  2334,  2339,
+    2346,  2353,  2361,  2369,  2376,  2387,  2391,  2398,  2399,  2430,
+    2431,  2435,  2442,  2448,  2449,  2450,  2451,  2455,  2456,  2457,
+    2461,  2465,  2473,  2480,  2481,  2487,  2494,  2500
 };
 #endif
 
@@ -952,7 +980,7 @@
   "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
   "ActualParameter", "optComponentTypeLists", "ComponentTypeLists",
   "ComponentType", "AlternativeTypeLists", "AlternativeType",
-  "ObjectClass", "optUnique", "FieldSpec", "ClassField", "optWithSyntax",
+  "ObjectClass", "optUNIQUE", "FieldSpec", "ClassField", "optWithSyntax",
   "WithSyntax", "@3", "WithSyntaxList", "WithSyntaxToken",
   "ExtensionAndException", "Type", "NSTD_IndirectMarker",
   "TypeDeclaration", "TypeDeclarationSet", "ComplexTypeReference",
@@ -961,12 +989,14 @@
   "ValueAssignment", "Value", "@4", "SimpleValue", "DefinedValue",
   "RestrictedCharacterStringValue", "Opaque", "BasicTypeId",
   "BasicTypeId_UniverationCompatible", "BasicType", "BasicString",
-  "UnionMark", "IntersectionMark", "optConstraints", "optSizeConstraints",
-  "Constraint", "SetOfConstraints", "ConstraintSpec", "SubtypeConstraint",
-  "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
-  "IntersectionElements", "ConstraintSubtypeElement", "@5",
-  "PatternConstraint", "ConstraintType", "SingleValue", "BitStringValue",
-  "ContainedSubtype", "InnerTypeConstraint", "SingleTypeConstraint",
+  "UnionMark", "IntersectionMark", "optConstraint", "optManyConstraints",
+  "optSizeOrConstraint", "Constraint", "ManyConstraints", "ConstraintSpec",
+  "SubtypeConstraint", "ElementSetSpecs", "ElementSetSpec", "Unions",
+  "Intersections", "IntersectionElements", "Elements", "SubtypeElements",
+  "@5", "PermittedAlphabet", "SizeConstraint", "PatternConstraint",
+  "ValueRange", "LowerEndValue", "UpperEndValue", "SingleValue",
+  "BitStringValue", "ContainedSubtype", "optINCLUDES",
+  "InnerTypeConstraints", "SingleTypeConstraint",
   "MultipleTypeConstraints", "FullSpecification", "PartialSpecification",
   "TypeConstraints", "NamedConstraint", "optPresenceConstraint",
   "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint", "@6",
@@ -1027,19 +1057,20 @@
      194,   194,   194,   194,   195,   195,   195,   196,   196,   196,
      196,   196,   196,   197,   197,   197,   197,   197,   197,   197,
      197,   197,   197,   197,   197,   197,   197,   198,   198,   199,
-     199,   200,   200,   201,   201,   201,   202,   203,   203,   204,
-     204,   205,   206,   206,   206,   206,   207,   207,   208,   208,
-     209,   209,   210,   210,   211,   211,   211,   211,   211,   211,
-     211,   211,   211,   211,   212,   211,   213,   213,   214,   214,
-     215,   215,   215,   215,   215,   215,   216,   216,   217,   218,
-     218,   219,   220,   220,   221,   222,   223,   223,   224,   225,
-     225,   226,   226,   226,   227,   227,   227,   229,   228,   230,
-     231,   231,   231,   231,   232,   232,   233,   234,   235,   235,
-     236,   236,   237,   237,   238,   238,   239,   239,   240,   240,
-     241,   242,   242,   243,   243,   244,   244,   245,   245,   246,
-     247,   247,   248,   248,   248,   248,   248,   249,   249,   250,
-     250,   251,   251,   252,   253,   254,   254,   254,   254,   255,
-     255,   255,   256,   256,   257,   258,   258,   259,   260,   261
+     199,   200,   200,   201,   201,   202,   202,   202,   203,   204,
+     204,   205,   205,   206,   207,   207,   207,   207,   208,   208,
+     209,   209,   210,   210,   211,   211,   212,   212,   213,   213,
+     213,   213,   213,   213,   213,   214,   213,   215,   216,   217,
+     217,   218,   219,   219,   220,   220,   221,   221,   221,   221,
+     221,   221,   222,   222,   223,   224,   224,   225,   225,   226,
+     227,   227,   228,   229,   230,   230,   231,   232,   232,   233,
+     233,   233,   234,   234,   234,   236,   235,   237,   238,   238,
+     238,   238,   239,   239,   240,   241,   242,   242,   243,   243,
+     244,   244,   245,   245,   246,   246,   247,   247,   248,   249,
+     249,   250,   250,   251,   251,   252,   252,   253,   254,   254,
+     255,   255,   255,   255,   255,   256,   256,   257,   257,   258,
+     258,   259,   260,   261,   261,   261,   261,   262,   262,   262,
+     263,   263,   264,   265,   265,   266,   267,   268
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1066,19 +1097,20 @@
        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,     1,     1,
-       1,     0,     1,     0,     1,     4,     1,     3,     4,     1,
-       1,     1,     1,     1,     3,     5,     1,     3,     1,     3,
-       1,     3,     1,     3,     4,     3,     1,     1,     3,     3,
-       3,     3,     1,     1,     0,     3,     2,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     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,     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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1086,8 +1118,8 @@
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   332,   333,     0,     0,     3,     4,     6,     2,     1,
-       5,     8,     0,     0,     9,   337,    16,    11,     0,    12,
+       0,   340,   341,     0,     0,     3,     4,     6,     2,     1,
+       5,     8,     0,     0,     9,   345,    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,
@@ -1095,50 +1127,50 @@
        0,     0,    40,     0,    42,    43,     0,    48,    50,    52,
      193,     0,   194,   195,   196,   197,   198,   206,   199,   200,
      201,   202,   203,   204,   205,    28,    29,    33,    31,    32,
-      36,     0,   321,    59,    61,    39,    44,     0,     0,     0,
-      34,    30,   321,   136,   334,     0,     0,   171,     0,     0,
+      36,     0,   329,    59,    61,    39,    44,     0,     0,     0,
+      34,    30,   329,   136,   342,     0,     0,   171,     0,     0,
      185,   177,   181,   184,   172,     0,     0,   173,   176,   180,
-       0,     0,    66,   187,   183,    65,   182,   140,   325,     0,
-     125,   322,   329,    45,    49,    51,    35,     0,    69,    68,
+       0,     0,    66,   187,   183,    65,   182,   140,   333,     0,
+     125,   330,   337,    45,    49,    51,    35,     0,    69,    68,
        0,     0,   186,   179,   178,     0,     0,   175,   174,     0,
-     185,   184,     0,    72,     0,    74,     0,   321,     0,   327,
-     328,   326,     0,     0,     0,   211,   331,   330,   323,    46,
-      47,     0,   137,   139,   192,     0,   298,   300,     0,   317,
-     318,   316,     0,   309,   310,   315,   312,     0,   301,     0,
-     186,     0,     0,     0,     0,   321,    64,   160,   166,   161,
+     185,   184,     0,    72,     0,    74,     0,   329,     0,   335,
+     336,   334,     0,     0,     0,   213,   339,   338,   331,    46,
+      47,     0,   137,   139,   192,     0,   306,   308,     0,   325,
+     326,   324,     0,   317,   318,   323,   320,     0,   309,     0,
+     186,     0,     0,     0,     0,   265,    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,   213,
-     213,   127,   126,   321,   124,   212,   216,   321,   321,     0,
-     102,   191,     0,     0,   305,     0,   189,     0,     0,   188,
-       0,     0,   321,    73,    78,    77,    76,    75,   256,   257,
-     320,     0,   250,   249,     0,     0,   248,   251,     0,   222,
-     244,   321,   258,   253,     0,   223,   226,   228,   230,   232,
-     243,     0,   236,   254,   237,   242,   319,   252,   255,    67,
-     321,     0,   324,     0,     0,     0,     0,   321,     0,     0,
-     321,     0,   214,   321,     0,     0,   321,   244,     0,   219,
-     221,   220,   274,   276,   275,   284,   285,   321,   150,   147,
-       0,   296,   294,   294,   294,   104,   295,   100,   294,   294,
-     111,     0,   299,   190,     0,     0,   311,     0,     0,   164,
-     302,     0,     0,    71,    70,   321,   280,     0,     0,   246,
-     247,     0,     0,     0,     0,    63,     0,   207,   208,   321,
-     209,   210,   321,   321,   321,     0,    80,   143,   169,   156,
-     165,   154,     0,   121,     0,    94,    97,    98,   321,   135,
-     321,     0,     0,    86,    87,    93,   294,   321,   335,     0,
-     335,     0,   279,     0,   217,     0,     0,   297,   109,     0,
-     108,   110,   101,   294,   106,   107,     0,    99,   112,   103,
-     306,     0,     0,   314,   313,   304,   303,   227,   281,   282,
-     241,   239,   261,   259,     0,   260,   262,   263,   245,   235,
-     224,   229,   231,   233,     0,   240,   238,   170,   134,     0,
-     128,   321,    96,     0,   321,   129,   321,    91,   294,   321,
-     336,   130,   321,   277,   286,     0,     0,   288,   218,   148,
-     149,   105,     0,   307,   308,   283,     0,     0,   266,   338,
-     339,   211,   321,   234,   122,   123,    95,   215,    92,   321,
-      88,    90,   125,   125,     0,     0,   290,   292,   287,     0,
-     113,     0,   264,     0,   269,   225,     0,   131,   132,   278,
-     291,     0,   289,     0,     0,   267,   272,   273,   271,   268,
-     270,    89,   293,   117,   118,     0,     0,   115,   119,   265,
-       0,   114,   116,   120
+     155,   151,   152,   153,     0,   164,   133,     0,     0,   215,
+     215,   127,   126,   265,   124,   219,   214,   329,   329,     0,
+     102,   191,     0,     0,   313,     0,   189,     0,     0,   188,
+       0,     0,   329,    73,    78,    77,    76,    75,   262,   263,
+     328,     0,   256,     0,   266,   253,     0,     0,   257,     0,
+     224,   245,   265,   259,     0,   225,   228,   230,   232,   234,
+     236,   240,   241,   243,   244,     0,   238,   260,   239,   329,
+     242,   327,   258,   261,    67,   329,     0,   332,     0,     0,
+       0,     0,   329,     0,   329,     0,   216,   217,   329,     0,
+       0,   329,   245,     0,   221,   223,   222,   282,   284,   283,
+     292,   293,   220,   150,   147,     0,   304,   302,   302,   302,
+     104,   303,   100,   302,   302,   111,     0,   307,   190,     0,
+       0,   319,     0,     0,   164,   310,     0,     0,    71,    70,
+     265,   247,   249,   250,   248,     0,     0,     0,     0,    63,
+       0,   207,   208,   265,   209,   210,   265,   265,   288,     0,
+       0,   264,    80,   143,   169,   156,   165,   154,     0,   121,
+       0,    94,    97,    98,   329,   135,     0,     0,    86,    87,
+      93,   302,   329,   343,     0,   343,     0,   287,     0,   218,
+       0,   305,   109,     0,   108,   110,   101,   302,   106,   107,
+       0,    99,   112,   103,   314,     0,     0,   322,   321,   312,
+     311,   229,   269,   267,     0,   268,   270,   271,   246,   237,
+     226,   231,   233,   235,   289,   290,   255,   251,   254,   170,
+     134,     0,   128,   329,    96,   329,   129,   329,    91,   302,
+     329,   344,   130,   329,   285,   294,     0,     0,   296,   148,
+     149,   105,     0,   315,   316,     0,     0,   274,   346,   347,
+     211,   265,   291,   122,   123,    95,    92,   329,    88,    90,
+     125,   125,     0,     0,   298,   300,   295,     0,   113,     0,
+     272,     0,   277,   212,   227,     0,   131,   132,   286,   299,
+       0,   297,     0,     0,   275,   280,   281,   279,   276,   278,
+      89,   301,   117,   118,     0,     0,   115,   119,   273,     0,
+     114,   116,   120
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -1147,356 +1179,356 @@
       -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,   382,   383,   384,
-     374,   375,   138,   403,   239,   240,   407,   408,   503,   516,
-     517,   385,   272,   164,   165,   232,   122,   214,   215,   518,
-     323,   324,    89,   221,   293,   222,   223,   273,   369,   123,
-     124,   125,   126,   359,   362,   234,   301,   235,   236,   308,
-     309,   310,   275,   276,   277,   278,   279,   353,   280,   281,
-     282,   283,   284,   285,   423,   425,   426,   427,   467,   468,
-     509,   510,   311,   312,   484,   313,   348,   314,   315,   316,
-     456,   457,   486,   325,   326,   175,   176,   187,   188,   243,
-     244,   182,   183,   184,   286,   287,   130,   131,   132,   162,
-     168,   224,   127,   449,   288,   470,   471
+      87,   121,    88,   152,   153,   205,   206,   387,   388,   389,
+     380,   381,   138,   407,   239,   240,   411,   412,   502,   515,
+     516,   390,   391,   164,   165,   232,   122,   214,   215,   517,
+     328,   329,    89,   221,   298,   222,   223,   273,   375,   123,
+     124,   125,   126,   363,   366,   492,   234,   305,   306,   236,
+     313,   314,   274,   275,   276,   277,   278,   279,   280,   357,
+     281,   282,   283,   284,   285,   437,   286,   287,   288,   289,
+     290,   423,   425,   426,   427,   466,   467,   508,   509,   316,
+     317,   482,   318,   370,   319,   320,   321,   457,   458,   484,
+     330,   331,   175,   176,   187,   188,   243,   244,   182,   183,
+     184,   291,   292,   130,   131,   132,   162,   168,   224,   127,
+     450,   293,   469,   470
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -330
+#define YYPACT_NINF -351
 static const yytype_int16 yypact[] =
 {
-      90,  -330,  -330,   158,    53,   158,  -330,  -330,   158,  -330,
-    -330,   -47,    17,    30,  -330,  -330,  -330,  -330,    24,  -330,
-     -35,   203,  -330,  -330,    99,   122,   113,   132,   173,   148,
-     276,   203,  -330,   162,  -330,  -330,  -330,  -330,  -330,   266,
-    -330,  -330,   274,    74,   237,  -330,   238,  -330,   210,  -330,
-     116,  -330,   197,  -330,  -330,   193,   676,  -330,  -330,  -330,
-     281,   215,  -330,   236,   281,  -330,    -5,  -330,   242,  -330,
-    -330,   338,  -330,  -330,  -330,  -330,  -330,  -330,  -330,  -330,
-    -330,  -330,  -330,  -330,  -330,   676,  -330,  -330,  -330,  -330,
-    -330,   604,   240,  -330,  -330,  -330,  -330,   158,   281,   264,
-    -330,  -330,     1,   258,  -330,   269,   294,  -330,   295,   306,
-     275,  -330,  -330,   277,  -330,   327,   301,  -330,  -330,  -330,
-     830,   388,   283,  -330,  -330,  -330,  -330,   271,   140,   393,
-    -330,  -330,   123,   -47,  -330,  -330,  -330,   285,  -330,  -330,
-     281,    19,   287,  -330,  -330,    82,   389,  -330,  -330,   312,
-    -330,  -330,    71,  -330,   284,   286,   291,   106,   313,  -330,
-    -330,  -330,   394,   233,   753,   296,  -330,  -330,  -330,  -330,
-    -330,   328,  -330,  -330,  -330,    78,  -330,  -330,   389,  -330,
-    -330,  -330,   292,   297,  -330,  -330,   299,   103,  -330,   303,
-    -330,   405,   830,   281,   281,   437,  -330,  -330,  -330,  -330,
-    -330,  -330,  -330,  -330,  -330,   142,  -330,  -330,  -330,  -330,
-    -330,  -330,  -330,  -330,   289,  -330,  -330,  -330,   302,  -330,
-    -330,  -330,  -330,  -330,   308,   307,   366,   309,   343,   114,
-     115,  -330,  -330,   304,  -330,  -330,   310,   145,    22,   143,
-    -330,  -330,   389,   144,  -330,   314,  -330,    82,   263,  -330,
-     389,   263,     1,  -330,  -330,  -330,  -330,  -330,  -330,  -330,
-    -330,   321,  -330,  -330,   -20,   208,  -330,  -330,   324,  -330,
-    -330,   437,  -330,  -330,   318,   315,   255,   259,  -330,   330,
-    -330,   319,   -20,  -330,  -330,  -330,  -330,  -330,  -330,  -330,
-     106,   348,  -330,   429,   389,   233,   404,    66,   352,   325,
-      12,   362,  -330,    12,   364,   408,   240,   158,   329,  -330,
-    -330,  -330,  -330,  -330,  -330,   342,  -330,   304,  -330,  -330,
-     233,  -330,    10,    21,    10,  -330,  -330,   346,    21,    10,
-     353,   328,  -330,  -330,   389,   196,  -330,   340,   344,  -330,
-    -330,   345,   349,  -330,  -330,   555,   334,   351,   257,  -330,
-    -330,   296,   354,   429,   350,  -330,   347,  -330,  -330,   555,
-    -330,  -330,   555,   555,   437,   326,  -330,  -330,  -330,   456,
-    -330,  -330,   389,   356,   176,  -330,  -330,  -330,   240,  -330,
-     304,   392,   357,   358,  -330,  -330,    10,   240,   389,   359,
-     389,   368,  -330,   361,  -330,   360,   363,  -330,  -330,   355,
-    -330,  -330,  -330,    10,  -330,  -330,   379,  -330,  -330,  -330,
-    -330,   367,   370,  -330,  -330,  -330,  -330,  -330,  -330,   365,
-    -330,  -330,  -330,  -330,    31,  -330,  -330,  -330,   456,  -330,
-     369,   259,  -330,  -330,   372,  -330,  -330,  -330,  -330,   263,
-    -330,    66,  -330,   386,   240,  -330,    16,  -330,    10,   240,
-    -330,  -330,   240,  -330,  -330,    14,   177,  -330,  -330,  -330,
-    -330,  -330,   371,  -330,  -330,  -330,   385,   188,  -330,  -330,
-    -330,   296,   484,  -330,  -330,  -330,  -330,  -330,  -330,    46,
-    -330,  -330,  -330,  -330,   429,   389,   381,  -330,  -330,   360,
-    -330,   389,  -330,   389,    23,  -330,     9,  -330,  -330,   456,
-     381,   389,  -330,    61,   189,  -330,  -330,  -330,  -330,  -330,
-    -330,  -330,  -330,  -330,  -330,    61,    55,  -330,  -330,  -330,
-      50,  -330,  -330,  -330
+       0,  -351,  -351,   238,    59,   238,  -351,  -351,   238,  -351,
+    -351,   -21,    26,    43,  -351,  -351,  -351,  -351,    49,  -351,
+     -18,   248,  -351,  -351,   103,    70,    65,    71,   124,   113,
+     216,   248,  -351,    82,  -351,  -351,  -351,  -351,  -351,   252,
+    -351,  -351,   122,    77,   161,  -351,   172,  -351,   170,  -351,
+      63,  -351,   177,  -351,  -351,   198,   653,  -351,  -351,  -351,
+     105,   191,  -351,   196,   105,  -351,    -3,  -351,   204,  -351,
+    -351,   301,  -351,  -351,  -351,  -351,  -351,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,  -351,   653,  -351,  -351,  -351,  -351,
+    -351,   303,   212,  -351,  -351,  -351,  -351,   238,   105,   210,
+    -351,  -351,   -10,   214,  -351,   226,   253,  -351,   261,   274,
+     270,  -351,  -351,   272,  -351,   314,   297,  -351,  -351,  -351,
+     819,   386,   278,  -351,  -351,  -351,  -351,   269,    28,   389,
+    -351,  -351,    33,   -21,  -351,  -351,  -351,   281,  -351,  -351,
+     105,    13,   283,  -351,  -351,   163,   387,  -351,  -351,   308,
+    -351,  -351,    24,  -351,   282,   288,   287,   179,   250,  -351,
+    -351,  -351,   395,   232,   742,   294,  -351,  -351,  -351,  -351,
+    -351,   275,  -351,  -351,  -351,    93,  -351,  -351,   387,  -351,
+    -351,  -351,   296,   293,  -351,  -351,   299,   104,  -351,   300,
+    -351,   408,   819,   105,   105,   516,  -351,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,  -351,   112,  -351,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,   304,  -351,  -351,  -351,   307,  -351,
+    -351,  -351,  -351,  -351,   306,   298,   390,   318,   356,   -14,
+     139,  -351,  -351,   409,  -351,  -351,   294,   205,    23,   120,
+    -351,  -351,   387,   162,  -351,   322,  -351,   163,   328,  -351,
+     387,   328,   -10,  -351,  -351,  -351,  -351,  -351,  -351,  -351,
+    -351,   332,  -351,   294,  -351,  -351,   217,   294,  -351,   292,
+    -351,  -351,   537,  -351,   325,   323,   240,   256,  -351,   334,
+    -351,  -351,  -351,  -351,  -351,   -78,   -20,  -351,  -351,   212,
+    -351,  -351,  -351,  -351,  -351,   179,   337,  -351,   434,   387,
+     232,   410,    19,   347,     8,   366,  -351,  -351,     8,   369,
+     413,   212,   238,   335,  -351,  -351,  -351,  -351,  -351,  -351,
+     339,  -351,  -351,  -351,  -351,   232,  -351,    12,   109,    12,
+    -351,  -351,   351,   109,    12,   349,   275,  -351,  -351,   387,
+     260,  -351,   338,   340,  -351,  -351,   341,   342,  -351,  -351,
+     644,  -351,  -351,  -351,  -351,   294,   346,   434,   344,  -351,
+     343,  -351,  -351,   644,  -351,  -351,   644,   644,   345,   350,
+     249,  -351,  -351,  -351,  -351,   454,  -351,  -351,   387,   352,
+     167,  -351,  -351,  -351,   212,  -351,   388,   353,   357,  -351,
+    -351,    12,   212,   387,   354,   387,   358,  -351,   362,  -351,
+     359,  -351,  -351,   348,  -351,  -351,  -351,    12,  -351,  -351,
+     379,  -351,  -351,  -351,  -351,   361,   365,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,    25,  -351,  -351,  -351,   454,  -351,
+     364,   256,  -351,  -351,  -351,   363,  -351,  -351,  -351,  -351,
+    -351,   328,  -351,    19,  -351,   212,  -351,    45,  -351,    12,
+     212,  -351,  -351,   212,  -351,  -351,     2,   192,  -351,  -351,
+    -351,  -351,   370,  -351,  -351,   367,   194,  -351,  -351,  -351,
+     294,   537,  -351,  -351,  -351,  -351,  -351,    54,  -351,  -351,
+    -351,  -351,   434,   387,   368,  -351,  -351,   359,  -351,   387,
+    -351,   387,   126,  -351,  -351,     3,  -351,  -351,   454,   368,
+     387,  -351,    51,   197,  -351,  -351,  -351,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,    51,    58,  -351,  -351,  -351,    48,
+    -351,  -351,  -351
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -330,  -330,   468,   184,  -330,  -330,   374,  -330,   458,  -330,
-    -330,   473,  -330,  -330,  -330,   420,  -330,  -330,  -330,  -330,
-    -330,  -330,   444,  -330,   412,  -330,  -330,  -330,   451,   373,
-    -330,   375,  -330,  -330,   320,  -330,   223,   211,    37,    72,
-    -330,    76,   267,  -330,  -330,   190,  -330,  -330,  -330,     5,
-    -213,  -289,   -91,  -330,  -111,  -330,   224,  -330,   232,  -153,
-     288,   290,  -330,  -237,  -330,  -140,  -238,  -141,  -329,   -32,
-    -330,  -330,   -30,  -330,  -330,    56,   300,  -211,  -330,  -207,
-    -330,  -193,    52,  -330,   174,   170,  -300,  -330,  -330,  -330,
-    -209,  -330,  -330,  -330,  -330,  -330,  -330,  -330,    43,    42,
-    -330,  -330,  -330,  -330,  -330,  -330,   254,  -330,  -330,  -330,
-    -330,    54,    57,  -290,  -330,  -330,   305,  -330,   311,  -330,
-     207,  -330,  -330,   298,  -142,  -330,  -103,  -330,  -330,  -330,
-    -330,     4,  -330,   154,   -12,  -330,  -330
+    -351,  -351,   482,    42,  -351,  -351,   360,  -351,   471,  -351,
+    -351,   460,  -351,  -351,  -351,   407,  -351,  -351,  -351,  -351,
+    -351,  -351,   430,  -351,   397,  -351,  -351,  -351,   436,   355,
+    -351,   336,  -351,  -351,   309,  -351,   203,   199,    22,    55,
+    -351,    61,   254,  -351,  -351,   169,  -351,  -351,  -351,    -6,
+    -297,  -299,   -91,  -351,  -109,  -351,   206,  -351,   218,  -153,
+     277,   279,  -351,  -238,  -351,  -143,  -239,  -142,  -350,   -93,
+    -351,  -351,   -27,  -351,  -351,  -351,  -351,   280,  -155,  -351,
+    -351,  -351,   285,  -270,  -351,   153,   147,  -219,  -351,  -351,
+    -351,   150,  -351,  -351,  -351,  -351,   149,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,  -351,    44,    31,  -351,  -351,  -351,
+    -351,  -351,  -351,  -351,  -351,  -351,  -351,  -351,    47,    52,
+    -294,  -351,  -351,   295,  -351,   286,  -351,   200,  -351,  -351,
+     291,  -141,  -351,  -254,  -351,  -351,  -351,  -351,    20,  -351,
+     145,   -12,  -351,  -351
 };
 
 /* 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 -295
+#define YYTABLE_NINF -303
 static const yytype_int16 yytable[] =
 {
-      20,   129,   274,   185,     7,   216,    20,     7,   376,     7,
-     337,   139,     7,   341,   511,   210,   209,   208,   302,   302,
-     479,   210,   209,    15,   428,    15,    90,    15,    15,    16,
-      15,    53,   398,   400,   401,    15,    16,   137,   404,   405,
-     318,   319,    15,    69,    92,   417,   506,    52,    53,    97,
-     381,   320,    69,     9,   381,    90,   513,    15,   371,    68,
-      91,   513,   320,   433,    52,    12,   207,   513,    68,   212,
-     213,   514,    21,    92,   212,   213,   514,    15,   354,    24,
-     212,   213,   514,   397,   381,    15,    69,   321,   154,    91,
-     346,     1,     2,    15,   179,   180,   447,   412,   321,    48,
-     507,   133,    68,   347,   508,   185,   338,     1,     2,   342,
-     396,    33,    98,   461,   197,   198,   199,    15,   179,   180,
-     128,   200,   201,   373,   155,   -85,   446,   373,   173,   177,
-      17,   128,   174,   186,   189,   128,   485,    22,   216,   421,
-     422,   128,   466,   399,   172,   211,   322,   327,   210,   209,
-     208,   225,   376,   210,   209,   499,   436,   373,   481,   202,
-     154,   344,   217,   318,   319,   128,   245,   159,   521,   515,
-     523,   434,   166,   443,   515,     1,     2,   373,   210,   209,
-     515,   255,   257,   167,   191,   128,   320,    34,   192,    10,
-      49,   241,    10,   181,     3,   242,   155,   254,   256,   207,
-     203,   474,   299,   299,    15,    35,   377,    15,   411,   386,
-       1,     2,   386,     1,     2,   392,   249,   349,   195,    15,
-     250,    25,   321,   160,    36,   128,   300,   303,   233,   233,
-     177,    26,    59,    60,    37,   186,   339,   161,   189,   339,
-      38,   197,   198,   199,    15,   179,   180,    62,   200,   201,
-       1,     2,    27,   350,    28,   289,   330,   333,  -294,   290,
-     331,   334,  -294,    29,   128,   258,   198,   259,    15,   179,
-     180,   260,   200,   201,    15,   179,   180,    41,   211,    39,
-       1,     2,   370,   225,    54,   378,   202,   442,   387,   440,
-     488,   387,    15,   441,   489,    42,   448,   475,     1,     2,
-      55,   492,   519,   522,   219,   493,   493,   522,   225,    61,
-     262,   393,   258,   198,   259,    15,   179,   180,   260,   200,
-     201,   -26,   245,   339,    43,   420,    58,   203,    94,   261,
-       1,     2,   212,   213,   258,   198,   259,    15,   179,   180,
-     260,   200,   201,   305,   306,   220,   482,   237,   238,   483,
-     377,   267,    95,   478,    99,   386,   100,   262,   263,   128,
-     438,   351,   352,   357,   358,   360,   361,   212,   213,   103,
-     104,   497,   498,   264,   459,   460,   450,   135,   450,   262,
-     140,   141,   265,   142,   143,   144,   147,   145,   386,   146,
-     148,   156,   266,   158,   435,   157,   163,   171,   267,   178,
-      15,   190,   193,   195,   194,   246,   218,   268,   252,   296,
-     233,   291,   469,   248,   247,   269,   307,   251,   271,   298,
-     267,   297,   292,   128,   317,   295,   345,   339,   335,   378,
-     294,   355,   356,   364,   387,   363,   368,   372,   388,   380,
-     390,   391,   402,   487,   394,   258,   198,   259,    15,   179,
-     180,   260,   200,   201,   395,   413,   406,   418,   430,   414,
-     415,   419,   261,   437,   416,   429,   424,   387,   444,   462,
-     445,     8,   451,   487,   454,   446,    23,   439,   458,   469,
-     453,   469,   463,   490,   455,   464,   472,   473,   465,   512,
-     262,   263,   258,   198,   259,    15,   179,   180,   260,   200,
-     201,   477,   491,   501,    40,   101,   264,   169,    96,   261,
-     134,    93,   253,   366,   389,   265,   496,   476,   480,   343,
-     520,   409,   379,   367,   495,   266,   328,   494,   329,   196,
-     304,   267,   432,   431,   504,   505,   365,   262,   263,   231,
-     268,   410,   500,   502,   452,   336,     0,   332,   269,   270,
-       0,   271,     0,   264,     0,     0,   128,     0,     0,     0,
-       0,   340,   265,   258,   198,   259,    15,   179,   180,   260,
-     200,   201,   266,     0,     0,     0,     0,     0,   267,     0,
-       0,     0,     0,     0,     0,     0,     0,   268,     0,     0,
-       0,     0,     0,     0,     0,     0,   270,     0,   271,     0,
-       0,     0,     0,   128,     0,     0,     0,   102,   262,   263,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   103,   104,     0,   264,     0,   105,     0,     0,     0,
-       0,     0,     0,   265,   106,    70,   107,     0,   108,     0,
-       0,     0,     0,   266,     0,     0,     0,     0,   109,   267,
-       0,     0,   110,     0,     0,     0,   111,     0,   268,   112,
-      72,    73,    74,     0,     0,     0,     0,   270,     0,   271,
-     113,    75,     0,     0,   128,   114,    76,   115,    77,   116,
-       0,     0,     0,     0,     0,     0,    78,    15,   117,   118,
-       0,     0,     0,     1,     2,    79,     0,    80,     0,     0,
-       0,     0,    81,   119,    82,    83,    84,    70,     0,     0,
-       0,     0,     0,     0,     0,     0,   120,     0,     0,     0,
-       0,     0,    71,     0,     0,     0,     0,     0,     0,     0,
-       0,     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,
-     103,   104,     0,     0,    81,   105,    82,    83,    84,   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,   129,   358,   382,   185,   216,    20,   428,   510,   342,
+     235,   139,   346,    15,   208,   209,   210,     1,     2,    15,
+       7,   209,   210,     7,    15,     7,   137,   154,     7,    90,
+      15,    53,   368,   402,   404,   405,    15,    15,    16,   408,
+     409,   323,   324,    69,    92,   369,   386,    10,    53,   477,
+      10,    97,    69,   325,   512,   159,    15,   512,    90,     9,
+      15,    16,   377,    52,   512,    15,   207,   212,   213,   513,
+     212,   213,   513,    92,   267,    68,    91,   212,   213,   513,
+      52,   322,   166,   386,    68,    21,    69,   401,    15,   326,
+    -252,    12,   386,   167,     1,     2,    24,   448,   304,   154,
+     233,   416,    48,  -252,     3,    91,   185,   343,   351,   128,
+     347,   160,   354,   461,    98,    33,    15,   133,    68,   379,
+     447,   -85,     1,     2,   483,   161,   174,   128,   173,   177,
+     379,   421,   498,   186,   189,    34,   465,   191,   128,    17,
+     155,   192,   128,   216,   382,   211,   327,   332,   433,   505,
+     325,   225,   208,   209,   210,   479,   379,    35,   209,   210,
+     172,   349,    22,    36,   128,   379,   245,   514,   522,   -26,
+     514,   520,    43,   128,    15,   179,   180,   514,   217,    59,
+      60,   255,   257,   209,   210,    37,   326,   197,   198,   199,
+      15,   179,   180,    49,   200,   201,   480,    41,   371,   481,
+     422,   494,   473,   506,   207,    38,   241,   507,    54,    15,
+     242,   383,   155,   254,   256,     1,     2,   249,   521,    39,
+     397,   250,   521,   323,   324,   294,   352,   267,    15,   295,
+     177,   403,   202,   335,    55,   186,   344,   336,   189,   344,
+     197,   198,   199,    15,   179,   180,   325,   200,   201,     1,
+       2,   308,    62,   233,   353,     1,     2,   258,   198,   259,
+      15,   179,   180,   260,   200,   201,    25,     1,     2,   212,
+     213,    15,   415,   203,   181,   338,    26,     1,     2,   339,
+     442,    42,   326,   211,   443,   202,    58,   376,   225,    61,
+     384,   195,   392,   444,   237,   238,   392,    27,   128,    28,
+     474,   449,   262,   219,    94,   486,   102,   490,    29,   487,
+     518,   491,    95,   225,   491,   493,    99,   436,  -302,   100,
+     103,   104,  -302,   135,   128,   105,   203,   245,   344,   355,
+     356,   128,   398,   106,    70,   107,   140,   108,   141,    15,
+     179,   180,   142,   268,   220,     1,     2,   109,   361,   362,
+     143,   110,   383,   144,   476,   111,   212,   213,   112,    72,
+      73,    74,   364,   365,   103,   104,   440,   459,   460,   113,
+      75,   496,   497,   147,   114,    76,   115,    77,   116,   307,
+     307,   451,   145,   451,   146,    78,   148,   117,   118,   156,
+     157,   158,   163,   171,    79,   178,    80,   190,    15,   195,
+     193,    81,   119,    82,    83,    84,   194,   218,   233,   246,
+     247,   252,   468,   248,   251,   120,   300,   258,   198,   259,
+      15,   179,   180,   260,   200,   201,   296,   297,   299,   344,
+     302,   384,   303,   301,   261,   392,   340,   350,   359,   367,
+     360,   374,   393,   378,   485,   395,   396,   406,   310,   311,
+     399,   400,   410,   417,   430,   418,   419,   420,   424,   429,
+     435,   439,   262,   263,   445,   392,   446,   452,   434,   462,
+     454,   485,   264,   441,   447,   455,   463,   468,   265,   468,
+     464,   471,   488,   456,   489,     8,   472,   266,   511,    23,
+     500,    40,   101,   169,    96,   134,    93,   267,   372,   495,
+     231,   253,   478,   268,   475,   413,   348,   394,   519,   385,
+     309,   196,   269,   432,   373,   333,   431,   334,   315,   438,
+     270,   312,   504,   272,   258,   198,   259,    15,   179,   180,
+     260,   200,   201,   503,   501,   499,   345,   337,   341,   414,
+     453,   261,     0,     0,     0,   258,   198,   259,    15,   179,
+     180,   260,   200,   201,     0,     0,     0,     0,     0,     0,
+       0,     0,   261,     0,     0,     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
 };
 
 static const yytype_int16 yycheck[] =
 {
-      12,    92,   195,   145,     0,   158,    18,     3,   297,     5,
-     248,   102,     8,   251,     5,   157,   157,   157,   229,   230,
-       4,   163,   163,    11,   353,    11,    56,    11,    11,    12,
-      11,    43,   322,   323,   324,    11,    12,    36,   328,   329,
-      18,    19,    11,    55,    56,   345,    23,    43,    60,    54,
-      38,    41,    64,     0,    38,    85,     6,    11,   295,    55,
-      56,     6,    41,   363,    60,   112,   157,     6,    64,    19,
-      20,    21,    42,    85,    19,    20,    21,    11,   271,   114,
-      19,    20,    21,   320,    38,    11,    98,    77,   120,    85,
-     110,    17,    18,    11,    12,    13,   386,   335,    77,    25,
-      77,    97,    98,   123,    81,   247,   248,    17,    18,   251,
-     317,    12,   117,   403,     8,     9,    10,    11,    12,    13,
-     119,    15,    16,   111,   120,   113,   117,   111,   140,   141,
-     113,   119,   113,   145,   146,   119,   122,   113,   291,   348,
-     351,   119,   111,   122,   140,   157,   237,   238,   290,   290,
-     290,   163,   441,   295,   295,   484,   365,   111,   448,    53,
-     192,   252,   158,    18,    19,   119,   178,    27,   113,   119,
-     120,   364,    49,   380,   119,    17,    18,   111,   320,   320,
-     119,   193,   194,    60,   113,   119,    41,    65,   117,     5,
-     116,   113,     8,   111,   104,   117,   192,   193,   194,   290,
-      94,   439,    88,    88,    11,    92,   297,    11,    12,   300,
-      17,    18,   303,    17,    18,   306,   113,     9,   112,    11,
-     117,    18,    77,    83,    92,   119,   112,   112,   114,   114,
-     242,    28,   116,   117,    61,   247,   248,    97,   250,   251,
-      92,     8,     9,    10,    11,    12,    13,    54,    15,    16,
-      17,    18,    49,   265,    51,   113,   113,   113,   113,   117,
-     117,   117,   117,    60,   119,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    11,    12,    13,   115,   290,     3,
-      17,    18,   294,   295,    47,   297,    53,   378,   300,   113,
-     113,   303,    11,   117,   117,    29,   387,   439,    17,    18,
-      62,   113,   113,   516,    71,   117,   117,   520,   320,   112,
-      53,   307,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    47,   334,   335,    50,    68,   116,    94,   113,    25,
-      17,    18,    19,    20,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    39,    40,   112,   449,    19,    20,   452,
-     441,    94,   116,   444,   112,   446,    18,    53,    54,   119,
-     372,    37,    38,   108,   109,   106,   107,    19,    20,    17,
-      18,   482,   483,    69,    19,    20,   388,   113,   390,    53,
-     122,   112,    78,    89,    89,    79,    59,   112,   479,   112,
-      89,     3,    88,   122,    68,   112,     3,   112,    94,   112,
-      11,    89,   118,   112,   118,   113,    12,   103,     3,    43,
-     114,   122,   424,   114,   117,   111,   112,   114,   114,    76,
-      94,   112,   120,   119,   114,   118,   105,   439,   114,   441,
-     122,   113,   117,   114,   446,   105,     7,    33,    76,   114,
-      76,    33,    96,   455,   115,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,   112,   115,   103,   123,   111,   115,
-     115,   110,    25,     7,   115,   115,   112,   479,    76,    90,
-     113,     3,   113,   485,   113,   117,    18,   121,   115,   491,
-     112,   493,   115,   112,   124,   115,   117,   115,   123,   501,
-      53,    54,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,   115,   117,   122,    31,    85,    69,   133,    64,    25,
-      98,    60,   192,   290,   303,    78,   479,   441,   446,   252,
-     515,   331,   298,   291,   472,    88,   238,   471,   238,   156,
-     230,    94,   362,   359,   491,   493,   282,    53,    54,   164,
-     103,   334,   485,   489,   390,   247,    -1,   242,   111,   112,
-      -1,   114,    -1,    69,    -1,    -1,   119,    -1,    -1,    -1,
-      -1,   250,    78,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,   114,    -1,
-      -1,    -1,    -1,   119,    -1,    -1,    -1,     3,    53,    54,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    17,    18,    -1,    69,    -1,    22,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    30,    31,    32,    -1,    34,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    44,    94,
-      -1,    -1,    48,    -1,    -1,    -1,    52,    -1,   103,    55,
-      56,    57,    58,    -1,    -1,    -1,    -1,   112,    -1,   114,
-      66,    67,    -1,    -1,   119,    71,    72,    73,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    11,    84,    85,
-      -1,    -1,    -1,    17,    18,    91,    -1,    93,    -1,    -1,
-      -1,    -1,    98,    99,   100,   101,   102,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   112,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -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
+      12,    92,   272,   302,   145,   158,    18,   357,     5,   248,
+     165,   102,   251,    11,   157,   157,   157,    17,    18,    11,
+       0,   163,   163,     3,    11,     5,    36,   120,     8,    56,
+      11,    43,   110,   327,   328,   329,    11,    11,    12,   333,
+     334,    18,    19,    55,    56,   123,    38,     5,    60,     4,
+       8,    54,    64,    41,     6,    27,    11,     6,    85,     0,
+      11,    12,   300,    43,     6,    11,   157,    19,    20,    21,
+      19,    20,    21,    85,    88,    55,    56,    19,    20,    21,
+      60,   236,    49,    38,    64,    42,    98,   325,    11,    77,
+     110,   112,    38,    60,    17,    18,   114,   391,   112,   192,
+     114,   340,    25,   123,   104,    85,   247,   248,   263,   119,
+     251,    83,   267,   407,   117,    12,    11,    97,    98,   111,
+     117,   113,    17,    18,   122,    97,   113,   119,   140,   141,
+     111,   350,   482,   145,   146,    65,   111,   113,   119,   113,
+     120,   117,   119,   296,   443,   157,   237,   238,   367,    23,
+      41,   163,   295,   295,   295,   449,   111,    92,   300,   300,
+     140,   252,   113,    92,   119,   111,   178,   119,   120,    47,
+     119,   113,    50,   119,    11,    12,    13,   119,   158,   116,
+     117,   193,   194,   325,   325,    61,    77,     8,     9,    10,
+      11,    12,    13,   116,    15,    16,   450,   115,   289,   453,
+     355,   471,   441,    77,   295,    92,   113,    81,    47,    11,
+     117,   302,   192,   193,   194,    17,    18,   113,   515,     3,
+     311,   117,   519,    18,    19,   113,     9,    88,    11,   117,
+     242,   122,    53,   113,    62,   247,   248,   117,   250,   251,
+       8,     9,    10,    11,    12,    13,    41,    15,    16,    17,
+      18,   112,    54,   114,   266,    17,    18,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    18,    17,    18,    19,
+      20,    11,    12,    94,   111,   113,    28,    17,    18,   117,
+     113,    29,    77,   295,   117,    53,   116,   299,   300,   112,
+     302,   112,   304,   384,    19,    20,   308,    49,   119,    51,
+     441,   392,    53,    71,   113,   113,     3,   113,    60,   117,
+     113,   117,   116,   325,   117,   470,   112,    68,   113,    18,
+      17,    18,   117,   113,   119,    22,    94,   339,   340,    37,
+      38,   119,   312,    30,    31,    32,   122,    34,   112,    11,
+      12,    13,    89,    94,   112,    17,    18,    44,   108,   109,
+      89,    48,   443,    79,   445,    52,    19,    20,    55,    56,
+      57,    58,   106,   107,    17,    18,   378,    19,    20,    66,
+      67,   480,   481,    59,    71,    72,    73,    74,    75,   229,
+     230,   393,   112,   395,   112,    82,    89,    84,    85,     3,
+     112,   122,     3,   112,    91,   112,    93,    89,    11,   112,
+     118,    98,    99,   100,   101,   102,   118,    12,   114,   113,
+     117,     3,   424,   114,   114,   112,   118,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,   122,   120,   122,   441,
+     112,   443,    76,    43,    25,   447,   114,   105,   113,   105,
+     117,     7,    76,    33,   456,    76,    33,    96,    39,    40,
+     115,   112,   103,   115,   111,   115,   115,   115,   112,   115,
+     110,     7,    53,    54,    76,   477,   113,   113,   123,    90,
+     112,   483,    63,   121,   117,   113,   115,   489,    69,   491,
+     115,   117,   112,   124,   117,     3,   123,    78,   500,    18,
+     122,    31,    85,   133,    64,    98,    60,    88,   295,   477,
+     164,   192,   447,    94,   443,   336,   252,   308,   514,   303,
+     230,   156,   103,   366,   296,   238,   363,   238,   233,   370,
+     111,   112,   491,   114,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,   489,   487,   483,   250,   242,   247,   339,
+     395,    25,    -1,    -1,    -1,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    25,    -1,    -1,    -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
 };
 
 /* 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,   256,   127,     0,
+       0,    17,    18,   104,   126,   127,   128,   263,   127,     0,
      128,   129,   112,   130,   131,    11,    12,   113,   132,   133,
-     259,    42,   113,   133,   114,    18,    28,    49,    51,    60,
+     266,    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,   256,   259,    47,    62,   142,   143,   116,   116,
-     117,   112,    54,   144,   145,   147,   148,   149,   256,   259,
+     152,   153,   263,   266,    47,    62,   142,   143,   116,   116,
+     117,   112,    54,   144,   145,   147,   148,   149,   263,   266,
       31,    46,    56,    57,    58,    67,    72,    74,    82,    91,
       93,    98,   100,   101,   102,   139,   140,   155,   157,   187,
-     197,   256,   259,   153,   113,   116,   147,    54,   117,   112,
+     197,   263,   266,   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,   194,   195,   196,   197,   257,   119,   177,
-     251,   252,   253,   256,   149,   113,   141,    36,   167,   177,
+     112,   156,   181,   194,   195,   196,   197,   264,   119,   177,
+     258,   259,   260,   263,   149,   113,   141,    36,   167,   177,
      122,   112,    89,    89,    79,   112,   112,    59,    89,    30,
-      48,    66,   158,   159,   194,   256,     3,   112,   122,    27,
-      83,    97,   254,     3,   178,   179,    49,    60,   255,   131,
-     146,   112,   256,   259,   113,   240,   241,   259,   112,    12,
-      13,   111,   246,   247,   248,   249,   259,   242,   243,   259,
+      48,    66,   158,   159,   194,   263,     3,   112,   122,    27,
+      83,    97,   261,     3,   178,   179,    49,    60,   262,   131,
+     146,   112,   263,   266,   113,   247,   248,   266,   112,    12,
+      13,   111,   253,   254,   255,   256,   266,   249,   250,   266,
       89,   113,   117,   118,   118,   112,   154,     8,     9,    10,
       15,    16,    53,    94,   154,   160,   161,   177,   190,   192,
-     249,   259,    19,    20,   182,   183,   184,   256,    12,    71,
-     112,   188,   190,   191,   256,   259,    26,    35,    64,    86,
-      87,   156,   180,   114,   200,   202,   203,    19,    20,   169,
-     170,   113,   117,   244,   245,   259,   113,   117,   114,   113,
-     117,   114,     3,   159,   256,   259,   256,   259,     8,    10,
-      14,    25,    53,    54,    69,    78,    88,    94,   103,   111,
-     112,   114,   177,   192,   206,   207,   208,   209,   210,   211,
-     213,   214,   215,   216,   217,   218,   249,   250,   259,   113,
-     117,   122,   120,   189,   122,   118,    43,   112,    76,    88,
-     112,   201,   202,   112,   201,    39,    40,   112,   204,   205,
-     206,   227,   228,   230,   232,   233,   234,   114,    18,    19,
-      41,    77,   177,   185,   186,   238,   239,   177,   185,   186,
-     113,   117,   241,   113,   117,   114,   248,   191,   249,   259,
-     243,   191,   249,   167,   177,   105,   110,   123,   231,     9,
-     259,    37,    38,   212,   206,   113,   117,   108,   109,   198,
-     106,   107,   199,   105,   114,   231,   161,   183,     7,   193,
-     259,   188,    33,   111,   165,   166,   176,   177,   259,   181,
-     114,    38,   162,   163,   164,   176,   177,   259,    76,   162,
-      76,    33,   177,   256,   115,   112,   204,   188,   238,   122,
-     238,   238,    96,   168,   238,   238,   103,   171,   172,   170,
-     245,    12,   191,   115,   115,   115,   115,   211,   123,   110,
-      68,   215,   202,   219,   112,   220,   221,   222,   193,   115,
-     111,   209,   210,   211,   206,    68,   215,     7,   259,   121,
-     113,   117,   177,   204,    76,   113,   117,   238,   177,   258,
-     259,   113,   258,   112,   113,   124,   235,   236,   115,    19,
-      20,   238,    90,   115,   115,   123,   111,   223,   224,   259,
-     260,   261,   117,   115,   191,   249,   166,   115,   177,     4,
-     164,   238,   251,   251,   229,   122,   237,   259,   113,   117,
-     112,   117,   113,   117,   200,   207,   163,   179,   179,   193,
-     237,   122,   236,   173,   223,   224,    23,    77,    81,   225,
-     226,     5,   259,     6,    21,   119,   174,   175,   184,   113,
-     174,   113,   175,   120
+     256,   266,    19,    20,   182,   183,   184,   263,    12,    71,
+     112,   188,   190,   191,   263,   266,    26,    35,    64,    86,
+      87,   156,   180,   114,   201,   203,   204,    19,    20,   169,
+     170,   113,   117,   251,   252,   266,   113,   117,   114,   113,
+     117,   114,     3,   159,   263,   266,   263,   266,     8,    10,
+      14,    25,    53,    54,    63,    69,    78,    88,    94,   103,
+     111,   112,   114,   192,   207,   208,   209,   210,   211,   212,
+     213,   215,   216,   217,   218,   219,   221,   222,   223,   224,
+     225,   256,   257,   266,   113,   117,   122,   120,   189,   122,
+     118,    43,   112,    76,   112,   202,   203,   216,   112,   202,
+      39,    40,   112,   205,   206,   207,   234,   235,   237,   239,
+     240,   241,   203,    18,    19,    41,    77,   177,   185,   186,
+     245,   246,   177,   185,   186,   113,   117,   248,   113,   117,
+     114,   255,   191,   256,   266,   250,   191,   256,   167,   177,
+     105,   203,     9,   266,   203,    37,    38,   214,   208,   113,
+     117,   108,   109,   198,   106,   107,   199,   105,   110,   123,
+     238,   177,   161,   183,     7,   193,   266,   188,    33,   111,
+     165,   166,   176,   177,   266,   181,    38,   162,   163,   164,
+     176,   177,   266,    76,   162,    76,    33,   177,   263,   115,
+     112,   188,   245,   122,   245,   245,    96,   168,   245,   245,
+     103,   171,   172,   170,   252,    12,   191,   115,   115,   115,
+     115,   212,   203,   226,   112,   227,   228,   229,   193,   115,
+     111,   210,   211,   212,   123,   110,    68,   220,   221,     7,
+     266,   121,   113,   117,   177,    76,   113,   117,   245,   177,
+     265,   266,   113,   265,   112,   113,   124,   242,   243,    19,
+      20,   245,    90,   115,   115,   111,   230,   231,   266,   267,
+     268,   117,   123,   191,   256,   166,   177,     4,   164,   245,
+     258,   258,   236,   122,   244,   266,   113,   117,   112,   117,
+     113,   117,   200,   203,   208,   163,   179,   179,   193,   244,
+     122,   243,   173,   230,   231,    23,    77,    81,   232,   233,
+       5,   266,     6,    21,   119,   174,   175,   184,   113,   174,
+     113,   175,   120
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2311,21 +2343,21 @@
   switch (yyn)
     {
         case 2:
-#line 378 "asn1p_y.y"
+#line 410 "asn1p_y.y"
     {
 		*(void **)param = (yyvsp[(2) - (2)].a_grammar);
 	}
     break;
 
   case 3:
-#line 381 "asn1p_y.y"
+#line 413 "asn1p_y.y"
     {
 		*(void **)param = (yyvsp[(1) - (1)].a_grammar);
 	}
     break;
 
   case 4:
-#line 387 "asn1p_y.y"
+#line 419 "asn1p_y.y"
     {
 		(yyval.a_grammar) = asn1p_new();
 		checkmem((yyval.a_grammar));
@@ -2334,7 +2366,7 @@
     break;
 
   case 5:
-#line 392 "asn1p_y.y"
+#line 424 "asn1p_y.y"
     {
 		(yyval.a_grammar) = (yyvsp[(1) - (2)].a_grammar);
 		TQ_ADD(&((yyval.a_grammar)->modules), (yyvsp[(2) - (2)].a_module), mod_next);
@@ -2342,12 +2374,12 @@
     break;
 
   case 6:
-#line 409 "asn1p_y.y"
+#line 441 "asn1p_y.y"
     { currentModule = asn1p_module_new(); }
     break;
 
   case 7:
-#line 414 "asn1p_y.y"
+#line 446 "asn1p_y.y"
     {
 
 		(yyval.a_module) = currentModule;
@@ -2368,31 +2400,31 @@
     break;
 
   case 8:
-#line 438 "asn1p_y.y"
+#line 470 "asn1p_y.y"
     { (yyval.a_oid) = 0; }
     break;
 
   case 9:
-#line 439 "asn1p_y.y"
+#line 471 "asn1p_y.y"
     { (yyval.a_oid) = (yyvsp[(1) - (1)].a_oid); }
     break;
 
   case 10:
-#line 443 "asn1p_y.y"
+#line 475 "asn1p_y.y"
     {
 		(yyval.a_oid) = (yyvsp[(2) - (3)].a_oid);
 	}
     break;
 
   case 11:
-#line 446 "asn1p_y.y"
+#line 478 "asn1p_y.y"
     {
 		(yyval.a_oid) = 0;
 	}
     break;
 
   case 12:
-#line 452 "asn1p_y.y"
+#line 484 "asn1p_y.y"
     {
 		(yyval.a_oid) = asn1p_oid_new();
 		asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(1) - (1)].a_oid_arc));
@@ -2402,7 +2434,7 @@
     break;
 
   case 13:
-#line 458 "asn1p_y.y"
+#line 490 "asn1p_y.y"
     {
 		(yyval.a_oid) = (yyvsp[(1) - (2)].a_oid);
 		asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(2) - (2)].a_oid_arc));
@@ -2412,7 +2444,7 @@
     break;
 
   case 14:
-#line 467 "asn1p_y.y"
+#line 499 "asn1p_y.y"
     {					/* iso */
 		(yyval.a_oid_arc).name = (yyvsp[(1) - (1)].tv_str);
 		(yyval.a_oid_arc).number = -1;
@@ -2420,7 +2452,7 @@
     break;
 
   case 15:
-#line 471 "asn1p_y.y"
+#line 503 "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);
@@ -2428,7 +2460,7 @@
     break;
 
   case 16:
-#line 475 "asn1p_y.y"
+#line 507 "asn1p_y.y"
     {					/* 1 */
 		(yyval.a_oid_arc).name = 0;
 		(yyval.a_oid_arc).number = (yyvsp[(1) - (1)].a_int);
@@ -2436,61 +2468,61 @@
     break;
 
   case 17:
-#line 485 "asn1p_y.y"
+#line 517 "asn1p_y.y"
     { (yyval.a_module_flags) = MSF_NOFLAGS; }
     break;
 
   case 18:
-#line 486 "asn1p_y.y"
+#line 518 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
 	}
     break;
 
   case 19:
-#line 495 "asn1p_y.y"
+#line 527 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
 	}
     break;
 
   case 20:
-#line 498 "asn1p_y.y"
+#line 530 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = (yyvsp[(1) - (2)].a_module_flags) | (yyvsp[(2) - (2)].a_module_flags);
 	}
     break;
 
   case 21:
-#line 507 "asn1p_y.y"
+#line 539 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_EXPLICIT_TAGS;
 	}
     break;
 
   case 22:
-#line 510 "asn1p_y.y"
+#line 542 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_IMPLICIT_TAGS;
 	}
     break;
 
   case 23:
-#line 513 "asn1p_y.y"
+#line 545 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_AUTOMATIC_TAGS;
 	}
     break;
 
   case 24:
-#line 516 "asn1p_y.y"
+#line 548 "asn1p_y.y"
     {
 		(yyval.a_module_flags) = MSF_EXTENSIBILITY_IMPLIED;
 	}
     break;
 
   case 25:
-#line 520 "asn1p_y.y"
+#line 552 "asn1p_y.y"
     {
 		/* X.680Amd1 specifies TAG and XER */
 		if(strcmp((yyvsp[(1) - (2)].tv_str), "TAG") == 0) {
@@ -2509,19 +2541,19 @@
     break;
 
   case 26:
-#line 541 "asn1p_y.y"
+#line 573 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 27:
-#line 542 "asn1p_y.y"
+#line 574 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (1)].a_module);
 	}
     break;
 
   case 28:
-#line 551 "asn1p_y.y"
+#line 583 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		AL_IMPORT((yyval.a_module), exports, (yyvsp[(1) - (3)].a_module), xp_next);
@@ -2535,14 +2567,14 @@
     break;
 
   case 29:
-#line 564 "asn1p_y.y"
+#line 596 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (1)].a_module);
 	}
     break;
 
   case 30:
-#line 567 "asn1p_y.y"
+#line 599 "asn1p_y.y"
     {
 		if((yyvsp[(1) - (2)].a_module)) {
 			(yyval.a_module) = (yyvsp[(1) - (2)].a_module);
@@ -2556,7 +2588,7 @@
     break;
 
   case 31:
-#line 584 "asn1p_y.y"
+#line 616 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2567,7 +2599,7 @@
     break;
 
   case 32:
-#line 591 "asn1p_y.y"
+#line 623 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2578,7 +2610,7 @@
     break;
 
   case 33:
-#line 605 "asn1p_y.y"
+#line 637 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2589,12 +2621,12 @@
     break;
 
   case 34:
-#line 613 "asn1p_y.y"
+#line 645 "asn1p_y.y"
     { asn1p_lexer_hack_push_encoding_control(); }
     break;
 
   case 35:
-#line 614 "asn1p_y.y"
+#line 646 "asn1p_y.y"
     {
 		fprintf(stderr,
 			"WARNING: ENCODING-CONTROL %s "
@@ -2606,7 +2638,7 @@
     break;
 
   case 36:
-#line 626 "asn1p_y.y"
+#line 658 "asn1p_y.y"
     {
 		return yyerror(
 			"Attempt to redefine a standard basic string type, "
@@ -2615,12 +2647,12 @@
     break;
 
   case 37:
-#line 639 "asn1p_y.y"
+#line 671 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 39:
-#line 643 "asn1p_y.y"
+#line 675 "asn1p_y.y"
     {
 		if(!saved_aid && 0)
 			return yyerror("Unterminated IMPORTS FROM, "
@@ -2631,19 +2663,19 @@
     break;
 
   case 40:
-#line 653 "asn1p_y.y"
+#line 685 "asn1p_y.y"
     {
 		return yyerror("Empty IMPORTS list");
 	}
     break;
 
   case 41:
-#line 659 "asn1p_y.y"
+#line 691 "asn1p_y.y"
     { (yyval.a_module) = asn1p_module_new(); }
     break;
 
   case 43:
-#line 663 "asn1p_y.y"
+#line 695 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2652,7 +2684,7 @@
     break;
 
   case 44:
-#line 668 "asn1p_y.y"
+#line 700 "asn1p_y.y"
     {
 		(yyval.a_module) = (yyvsp[(1) - (2)].a_module);
 		TQ_ADD(&((yyval.a_module)->imports), (yyvsp[(2) - (2)].a_xports), xp_next);
@@ -2660,17 +2692,17 @@
     break;
 
   case 45:
-#line 675 "asn1p_y.y"
+#line 707 "asn1p_y.y"
     { memset(&(yyval.a_aid), 0, sizeof((yyval.a_aid))); }
     break;
 
   case 46:
-#line 676 "asn1p_y.y"
+#line 708 "asn1p_y.y"
     { (yyval.a_aid).oid = (yyvsp[(1) - (1)].a_oid); }
     break;
 
   case 47:
-#line 680 "asn1p_y.y"
+#line 712 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (4)].a_xports);
 		(yyval.a_xports)->fromModuleName = (yyvsp[(3) - (4)].tv_str);
@@ -2682,7 +2714,7 @@
     break;
 
   case 48:
-#line 691 "asn1p_y.y"
+#line 723 "asn1p_y.y"
     {
 		(yyval.a_xports) = asn1p_xports_new();
 		checkmem((yyval.a_xports));
@@ -2691,7 +2723,7 @@
     break;
 
   case 49:
-#line 696 "asn1p_y.y"
+#line 728 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
 		TQ_ADD(&((yyval.a_xports)->members), (yyvsp[(3) - (3)].a_expr), next);
@@ -2699,7 +2731,7 @@
     break;
 
   case 50:
-#line 703 "asn1p_y.y"
+#line 735 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2709,7 +2741,7 @@
     break;
 
   case 51:
-#line 709 "asn1p_y.y"
+#line 741 "asn1p_y.y"
     {		/* Completely equivalent to above */
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2719,7 +2751,7 @@
     break;
 
   case 52:
-#line 715 "asn1p_y.y"
+#line 747 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2729,12 +2761,12 @@
     break;
 
   case 53:
-#line 725 "asn1p_y.y"
+#line 757 "asn1p_y.y"
     { (yyval.a_module) = 0; }
     break;
 
   case 54:
-#line 726 "asn1p_y.y"
+#line 758 "asn1p_y.y"
     {
 		(yyval.a_module) = asn1p_module_new();
 		checkmem((yyval.a_module));
@@ -2747,21 +2779,21 @@
     break;
 
   case 55:
-#line 738 "asn1p_y.y"
+#line 770 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(2) - (3)].a_xports);
 	}
     break;
 
   case 56:
-#line 741 "asn1p_y.y"
+#line 773 "asn1p_y.y"
     {
 		(yyval.a_xports) = 0;
 	}
     break;
 
   case 57:
-#line 744 "asn1p_y.y"
+#line 776 "asn1p_y.y"
     {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		(yyval.a_xports) = asn1p_xports_new();
@@ -2770,7 +2802,7 @@
     break;
 
   case 58:
-#line 752 "asn1p_y.y"
+#line 784 "asn1p_y.y"
     {
 		(yyval.a_xports) = asn1p_xports_new();
 		assert((yyval.a_xports));
@@ -2779,7 +2811,7 @@
     break;
 
   case 59:
-#line 757 "asn1p_y.y"
+#line 789 "asn1p_y.y"
     {
 		(yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
 		TQ_ADD(&((yyval.a_xports)->members), (yyvsp[(3) - (3)].a_expr), next);
@@ -2787,7 +2819,7 @@
     break;
 
   case 60:
-#line 764 "asn1p_y.y"
+#line 796 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2797,7 +2829,7 @@
     break;
 
   case 61:
-#line 770 "asn1p_y.y"
+#line 802 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2807,7 +2839,7 @@
     break;
 
   case 62:
-#line 776 "asn1p_y.y"
+#line 808 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2817,12 +2849,12 @@
     break;
 
   case 63:
-#line 785 "asn1p_y.y"
+#line 817 "asn1p_y.y"
     { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
     break;
 
   case 64:
-#line 788 "asn1p_y.y"
+#line 820 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -2833,14 +2865,14 @@
     break;
 
   case 65:
-#line 798 "asn1p_y.y"
+#line 830 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 66:
-#line 811 "asn1p_y.y"
+#line 843 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2851,7 +2883,7 @@
     break;
 
   case 67:
-#line 821 "asn1p_y.y"
+#line 853 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2863,7 +2895,7 @@
     break;
 
   case 68:
-#line 841 "asn1p_y.y"
+#line 873 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -2873,7 +2905,7 @@
     break;
 
   case 69:
-#line 847 "asn1p_y.y"
+#line 879 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -2883,7 +2915,7 @@
     break;
 
   case 70:
-#line 863 "asn1p_y.y"
+#line 895 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
@@ -2892,7 +2924,7 @@
     break;
 
   case 71:
-#line 869 "asn1p_y.y"
+#line 901 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
@@ -2901,7 +2933,7 @@
     break;
 
   case 72:
-#line 877 "asn1p_y.y"
+#line 909 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_plist) = asn1p_paramlist_new(yylineno);
@@ -2914,7 +2946,7 @@
     break;
 
   case 73:
-#line 886 "asn1p_y.y"
+#line 918 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_plist) = (yyvsp[(1) - (3)].a_plist);
@@ -2926,7 +2958,7 @@
     break;
 
   case 74:
-#line 897 "asn1p_y.y"
+#line 929 "asn1p_y.y"
     {
 		(yyval.a_parg).governor = NULL;
 		(yyval.a_parg).argument = (yyvsp[(1) - (1)].tv_str);
@@ -2934,7 +2966,7 @@
     break;
 
   case 75:
-#line 901 "asn1p_y.y"
+#line 933 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2946,7 +2978,7 @@
     break;
 
   case 76:
-#line 909 "asn1p_y.y"
+#line 941 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2958,7 +2990,7 @@
     break;
 
   case 77:
-#line 917 "asn1p_y.y"
+#line 949 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2970,7 +3002,7 @@
     break;
 
   case 78:
-#line 925 "asn1p_y.y"
+#line 957 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
@@ -2982,7 +3014,7 @@
     break;
 
   case 79:
-#line 936 "asn1p_y.y"
+#line 968 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -2991,7 +3023,7 @@
     break;
 
   case 80:
-#line 941 "asn1p_y.y"
+#line 973 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -2999,14 +3031,14 @@
     break;
 
   case 81:
-#line 948 "asn1p_y.y"
+#line 980 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 82:
-#line 951 "asn1p_y.y"
+#line 983 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3018,7 +3050,7 @@
     break;
 
   case 83:
-#line 959 "asn1p_y.y"
+#line 991 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		(yyval.a_expr) = NEW_EXPR();
@@ -3033,7 +3065,7 @@
     break;
 
   case 84:
-#line 970 "asn1p_y.y"
+#line 1002 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->expr_type = A1TC_VALUESET;
@@ -3043,17 +3075,17 @@
     break;
 
   case 85:
-#line 993 "asn1p_y.y"
+#line 1025 "asn1p_y.y"
     { (yyval.a_expr) = NEW_EXPR(); }
     break;
 
   case 86:
-#line 994 "asn1p_y.y"
+#line 1026 "asn1p_y.y"
     { (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr); }
     break;
 
   case 87:
-#line 997 "asn1p_y.y"
+#line 1029 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3062,7 +3094,7 @@
     break;
 
   case 88:
-#line 1002 "asn1p_y.y"
+#line 1034 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3070,7 +3102,7 @@
     break;
 
   case 89:
-#line 1006 "asn1p_y.y"
+#line 1038 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (5)].a_expr);
 		asn1p_expr_add_many((yyval.a_expr), (yyvsp[(4) - (5)].a_expr));
@@ -3079,7 +3111,7 @@
     break;
 
   case 90:
-#line 1014 "asn1p_y.y"
+#line 1046 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -3090,7 +3122,7 @@
     break;
 
   case 91:
-#line 1021 "asn1p_y.y"
+#line 1053 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
 		(yyvsp[(2) - (2)].a_marker).flags |= (yyval.a_expr)->marker.flags;
@@ -3100,7 +3132,7 @@
     break;
 
   case 92:
-#line 1027 "asn1p_y.y"
+#line 1059 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3111,14 +3143,14 @@
     break;
 
   case 93:
-#line 1034 "asn1p_y.y"
+#line 1066 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 94:
-#line 1040 "asn1p_y.y"
+#line 1072 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3127,7 +3159,7 @@
     break;
 
   case 95:
-#line 1045 "asn1p_y.y"
+#line 1077 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3135,7 +3167,7 @@
     break;
 
   case 96:
-#line 1052 "asn1p_y.y"
+#line 1084 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
 		assert((yyval.a_expr)->Identifier == 0);
@@ -3144,14 +3176,14 @@
     break;
 
   case 97:
-#line 1057 "asn1p_y.y"
+#line 1089 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 98:
-#line 1060 "asn1p_y.y"
+#line 1092 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 		_fixup_anonymous_identifier((yyval.a_expr));
@@ -3159,7 +3191,7 @@
     break;
 
   case 99:
-#line 1067 "asn1p_y.y"
+#line 1099 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (5)].a_expr);
 		checkmem((yyval.a_expr));
@@ -3170,17 +3202,17 @@
     break;
 
   case 100:
-#line 1077 "asn1p_y.y"
+#line 1109 "asn1p_y.y"
     { (yyval.a_int) = 0; }
     break;
 
   case 101:
-#line 1078 "asn1p_y.y"
+#line 1110 "asn1p_y.y"
     { (yyval.a_int) = 1; }
     break;
 
   case 102:
-#line 1082 "asn1p_y.y"
+#line 1114 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3191,7 +3223,7 @@
     break;
 
   case 103:
-#line 1089 "asn1p_y.y"
+#line 1121 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
@@ -3199,7 +3231,7 @@
     break;
 
   case 104:
-#line 1099 "asn1p_y.y"
+#line 1131 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3211,7 +3243,7 @@
     break;
 
   case 105:
-#line 1109 "asn1p_y.y"
+#line 1141 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
@@ -3224,7 +3256,7 @@
     break;
 
   case 106:
-#line 1120 "asn1p_y.y"
+#line 1152 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -3236,7 +3268,7 @@
     break;
 
   case 107:
-#line 1130 "asn1p_y.y"
+#line 1162 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3249,7 +3281,7 @@
     break;
 
   case 108:
-#line 1141 "asn1p_y.y"
+#line 1173 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		(yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
@@ -3261,7 +3293,7 @@
     break;
 
   case 109:
-#line 1151 "asn1p_y.y"
+#line 1183 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3274,7 +3306,7 @@
     break;
 
   case 110:
-#line 1162 "asn1p_y.y"
+#line 1194 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3287,31 +3319,31 @@
     break;
 
   case 111:
-#line 1174 "asn1p_y.y"
+#line 1206 "asn1p_y.y"
     { (yyval.a_wsynt) = 0; }
     break;
 
   case 112:
-#line 1175 "asn1p_y.y"
+#line 1207 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(1) - (1)].a_wsynt);
 	}
     break;
 
   case 113:
-#line 1182 "asn1p_y.y"
+#line 1214 "asn1p_y.y"
     { asn1p_lexer_hack_enable_with_syntax(); }
     break;
 
   case 114:
-#line 1184 "asn1p_y.y"
+#line 1216 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(5) - (6)].a_wsynt);
 	}
     break;
 
   case 115:
-#line 1190 "asn1p_y.y"
+#line 1222 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = asn1p_wsyntx_new();
 		TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(1) - (1)].a_wchunk), next);
@@ -3319,7 +3351,7 @@
     break;
 
   case 116:
-#line 1194 "asn1p_y.y"
+#line 1226 "asn1p_y.y"
     {
 		(yyval.a_wsynt) = (yyvsp[(1) - (2)].a_wsynt);
 		TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(2) - (2)].a_wchunk), next);
@@ -3327,7 +3359,7 @@
     break;
 
   case 117:
-#line 1201 "asn1p_y.y"
+#line 1233 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_opaque).buf, 0);
 		(yyval.a_wchunk)->type = WC_WHITESPACE;
@@ -3335,14 +3367,14 @@
     break;
 
   case 118:
-#line 1205 "asn1p_y.y"
+#line 1237 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_str), 0);
 	}
     break;
 
   case 119:
-#line 1208 "asn1p_y.y"
+#line 1240 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].a_refcomp).name, 0);
 		(yyval.a_wchunk)->type = WC_FIELD;
@@ -3350,14 +3382,14 @@
     break;
 
   case 120:
-#line 1212 "asn1p_y.y"
+#line 1244 "asn1p_y.y"
     {
 		(yyval.a_wchunk) = asn1p_wsyntx_chunk_fromsyntax((yyvsp[(2) - (3)].a_wsynt));
 	}
     break;
 
   case 121:
-#line 1218 "asn1p_y.y"
+#line 1250 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3369,7 +3401,7 @@
     break;
 
   case 122:
-#line 1226 "asn1p_y.y"
+#line 1258 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3382,7 +3414,7 @@
     break;
 
   case 123:
-#line 1235 "asn1p_y.y"
+#line 1267 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3395,7 +3427,7 @@
     break;
 
   case 124:
-#line 1247 "asn1p_y.y"
+#line 1279 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
 		(yyval.a_expr)->tag = (yyvsp[(1) - (3)].a_tag);
@@ -3410,7 +3442,7 @@
 		} else {
 			if((yyval.a_expr)->constraints) {
 				assert(!(yyvsp[(2) - (3)].a_expr));
-				/* Check this : optConstraints is not used ?! */
+				/* Check this : optManyConstraints is not used ?! */
 				asn1p_constraint_free((yyvsp[(3) - (3)].a_constr));
 			} else {
 				(yyval.a_expr)->constraints = (yyvsp[(3) - (3)].a_constr);
@@ -3420,7 +3452,7 @@
     break;
 
   case 125:
-#line 1271 "asn1p_y.y"
+#line 1303 "asn1p_y.y"
     {
 		(yyval.a_int) = asn1p_as_pointer ? EM_INDIRECT : 0;
 		asn1p_as_pointer = 0;
@@ -3428,7 +3460,7 @@
     break;
 
   case 126:
-#line 1278 "asn1p_y.y"
+#line 1310 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
 		(yyval.a_expr)->marker.flags |= (yyvsp[(1) - (2)].a_int);
@@ -3448,14 +3480,14 @@
     break;
 
   case 127:
-#line 1297 "asn1p_y.y"
+#line 1329 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
 	}
     break;
 
   case 128:
-#line 1300 "asn1p_y.y"
+#line 1332 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3465,7 +3497,7 @@
     break;
 
   case 129:
-#line 1306 "asn1p_y.y"
+#line 1338 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3475,7 +3507,7 @@
     break;
 
   case 130:
-#line 1312 "asn1p_y.y"
+#line 1344 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
 		assert((yyval.a_expr)->expr_type == A1TC_INVALID);
@@ -3485,7 +3517,7 @@
     break;
 
   case 131:
-#line 1318 "asn1p_y.y"
+#line 1350 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3499,7 +3531,7 @@
     break;
 
   case 132:
-#line 1328 "asn1p_y.y"
+#line 1360 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3513,7 +3545,7 @@
     break;
 
   case 133:
-#line 1338 "asn1p_y.y"
+#line 1370 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3523,7 +3555,7 @@
     break;
 
   case 134:
-#line 1344 "asn1p_y.y"
+#line 1376 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_expr) = NEW_EXPR();
@@ -3539,7 +3571,7 @@
     break;
 
   case 135:
-#line 1356 "asn1p_y.y"
+#line 1388 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3550,7 +3582,7 @@
     break;
 
   case 136:
-#line 1371 "asn1p_y.y"
+#line 1403 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3562,7 +3594,7 @@
     break;
 
   case 137:
-#line 1379 "asn1p_y.y"
+#line 1411 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3577,7 +3609,7 @@
     break;
 
   case 138:
-#line 1390 "asn1p_y.y"
+#line 1422 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3592,7 +3624,7 @@
     break;
 
   case 139:
-#line 1401 "asn1p_y.y"
+#line 1433 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3607,7 +3639,7 @@
     break;
 
   case 140:
-#line 1412 "asn1p_y.y"
+#line 1444 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3619,7 +3651,7 @@
     break;
 
   case 141:
-#line 1420 "asn1p_y.y"
+#line 1452 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = (yyvsp[(3) - (3)].a_ref);
@@ -3642,7 +3674,7 @@
     break;
 
   case 142:
-#line 1442 "asn1p_y.y"
+#line 1474 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
@@ -3654,7 +3686,7 @@
     break;
 
   case 143:
-#line 1450 "asn1p_y.y"
+#line 1482 "asn1p_y.y"
     {
 		int ret;
 		(yyval.a_ref) = (yyvsp[(1) - (3)].a_ref);
@@ -3665,7 +3697,7 @@
     break;
 
   case 145:
-#line 1463 "asn1p_y.y"
+#line 1495 "asn1p_y.y"
     {
 		(yyval.a_refcomp).lex_type = RLT_AmpUppercase;
 		(yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
@@ -3673,7 +3705,7 @@
     break;
 
   case 146:
-#line 1468 "asn1p_y.y"
+#line 1500 "asn1p_y.y"
     {
 		(yyval.a_refcomp).lex_type = RLT_Amplowercase;
 		(yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
@@ -3681,7 +3713,7 @@
     break;
 
   case 147:
-#line 1477 "asn1p_y.y"
+#line 1509 "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);
@@ -3690,7 +3722,7 @@
     break;
 
   case 148:
-#line 1482 "asn1p_y.y"
+#line 1514 "asn1p_y.y"
     {
 		(yyval.a_ref) = (yyval.a_ref);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_AmpUppercase);
@@ -3699,7 +3731,7 @@
     break;
 
   case 149:
-#line 1487 "asn1p_y.y"
+#line 1519 "asn1p_y.y"
     {
 		(yyval.a_ref) = (yyval.a_ref);
 		asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_Amplowercase);
@@ -3708,7 +3740,7 @@
     break;
 
   case 150:
-#line 1495 "asn1p_y.y"
+#line 1527 "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);
@@ -3717,7 +3749,7 @@
     break;
 
   case 151:
-#line 1518 "asn1p_y.y"
+#line 1550 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
 		assert((yyval.a_expr)->Identifier == NULL);
@@ -3728,7 +3760,7 @@
     break;
 
   case 154:
-#line 1530 "asn1p_y.y"
+#line 1562 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3739,12 +3771,12 @@
     break;
 
   case 155:
-#line 1537 "asn1p_y.y"
+#line 1569 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
   case 156:
-#line 1537 "asn1p_y.y"
+#line 1569 "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));
@@ -3753,7 +3785,7 @@
     break;
 
   case 157:
-#line 1542 "asn1p_y.y"
+#line 1574 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3762,7 +3794,7 @@
     break;
 
   case 158:
-#line 1550 "asn1p_y.y"
+#line 1582 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3771,7 +3803,7 @@
     break;
 
   case 159:
-#line 1555 "asn1p_y.y"
+#line 1587 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -3780,7 +3812,7 @@
     break;
 
   case 160:
-#line 1560 "asn1p_y.y"
+#line 1592 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
 		checkmem((yyval.a_value));
@@ -3789,7 +3821,7 @@
     break;
 
   case 161:
-#line 1565 "asn1p_y.y"
+#line 1597 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
 		checkmem((yyval.a_value));
@@ -3798,21 +3830,21 @@
     break;
 
   case 162:
-#line 1570 "asn1p_y.y"
+#line 1602 "asn1p_y.y"
     {
 		(yyval.a_value) = (yyval.a_value);
 	}
     break;
 
   case 163:
-#line 1573 "asn1p_y.y"
+#line 1605 "asn1p_y.y"
     {
 		(yyval.a_value) = (yyvsp[(1) - (1)].a_value);
 	}
     break;
 
   case 164:
-#line 1579 "asn1p_y.y"
+#line 1611 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3827,7 +3859,7 @@
     break;
 
   case 165:
-#line 1590 "asn1p_y.y"
+#line 1622 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -3845,7 +3877,7 @@
     break;
 
   case 166:
-#line 1608 "asn1p_y.y"
+#line 1640 "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));
@@ -3853,7 +3885,7 @@
     break;
 
   case 167:
-#line 1612 "asn1p_y.y"
+#line 1644 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
@@ -3862,7 +3894,7 @@
     break;
 
   case 168:
-#line 1617 "asn1p_y.y"
+#line 1649 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
@@ -3871,7 +3903,7 @@
     break;
 
   case 169:
-#line 1625 "asn1p_y.y"
+#line 1657 "asn1p_y.y"
     {
 		(yyval.tv_opaque).len = (yyvsp[(1) - (1)].tv_opaque).len + 1;
 		(yyval.tv_opaque).buf = malloc((yyval.tv_opaque).len + 1);
@@ -3884,7 +3916,7 @@
     break;
 
   case 170:
-#line 1634 "asn1p_y.y"
+#line 1666 "asn1p_y.y"
     {
 		int newsize = (yyvsp[(1) - (2)].tv_opaque).len + (yyvsp[(2) - (2)].tv_opaque).len;
 		char *p = malloc(newsize + 1);
@@ -3900,77 +3932,77 @@
     break;
 
   case 171:
-#line 1649 "asn1p_y.y"
+#line 1681 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_BOOLEAN; }
     break;
 
   case 172:
-#line 1650 "asn1p_y.y"
+#line 1682 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_NULL; }
     break;
 
   case 173:
-#line 1651 "asn1p_y.y"
+#line 1683 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_REAL; }
     break;
 
   case 174:
-#line 1652 "asn1p_y.y"
+#line 1684 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_OCTET_STRING; }
     break;
 
   case 175:
-#line 1653 "asn1p_y.y"
+#line 1685 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_OBJECT_IDENTIFIER; }
     break;
 
   case 176:
-#line 1654 "asn1p_y.y"
+#line 1686 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_RELATIVE_OID; }
     break;
 
   case 177:
-#line 1655 "asn1p_y.y"
+#line 1687 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_EXTERNAL; }
     break;
 
   case 178:
-#line 1656 "asn1p_y.y"
+#line 1688 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_EMBEDDED_PDV; }
     break;
 
   case 179:
-#line 1657 "asn1p_y.y"
+#line 1689 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_CHARACTER_STRING; }
     break;
 
   case 180:
-#line 1658 "asn1p_y.y"
+#line 1690 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_UTCTime; }
     break;
 
   case 181:
-#line 1659 "asn1p_y.y"
+#line 1691 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_GeneralizedTime; }
     break;
 
   case 184:
-#line 1668 "asn1p_y.y"
+#line 1700 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_INTEGER; }
     break;
 
   case 185:
-#line 1669 "asn1p_y.y"
+#line 1701 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_INTEGER; }
     break;
 
   case 186:
-#line 1670 "asn1p_y.y"
+#line 1702 "asn1p_y.y"
     { (yyval.a_type) = ASN_BASIC_BIT_STRING; }
     break;
 
   case 187:
-#line 1674 "asn1p_y.y"
+#line 1706 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -3980,7 +4012,7 @@
     break;
 
   case 188:
-#line 1680 "asn1p_y.y"
+#line 1712 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_INTEGER;
@@ -3989,7 +4021,7 @@
     break;
 
   case 189:
-#line 1685 "asn1p_y.y"
+#line 1717 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_ENUMERATED;
@@ -3998,7 +4030,7 @@
     break;
 
   case 190:
-#line 1690 "asn1p_y.y"
+#line 1722 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(4) - (5)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
@@ -4007,7 +4039,7 @@
     break;
 
   case 191:
-#line 1695 "asn1p_y.y"
+#line 1727 "asn1p_y.y"
     {
         (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
         (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
@@ -4016,7 +4048,7 @@
     break;
 
   case 192:
-#line 1700 "asn1p_y.y"
+#line 1732 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4026,12 +4058,12 @@
     break;
 
   case 193:
-#line 1709 "asn1p_y.y"
+#line 1741 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_BMPString; }
     break;
 
   case 194:
-#line 1710 "asn1p_y.y"
+#line 1742 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
@@ -4039,7 +4071,7 @@
     break;
 
   case 195:
-#line 1714 "asn1p_y.y"
+#line 1746 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
@@ -4047,27 +4079,27 @@
     break;
 
   case 196:
-#line 1718 "asn1p_y.y"
+#line 1750 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_IA5String; }
     break;
 
   case 197:
-#line 1719 "asn1p_y.y"
+#line 1751 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_ISO646String; }
     break;
 
   case 198:
-#line 1720 "asn1p_y.y"
+#line 1752 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_NumericString; }
     break;
 
   case 199:
-#line 1721 "asn1p_y.y"
+#line 1753 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_PrintableString; }
     break;
 
   case 200:
-#line 1722 "asn1p_y.y"
+#line 1754 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
@@ -4075,22 +4107,22 @@
     break;
 
   case 201:
-#line 1726 "asn1p_y.y"
+#line 1758 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_TeletexString; }
     break;
 
   case 202:
-#line 1727 "asn1p_y.y"
+#line 1759 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_UniversalString; }
     break;
 
   case 203:
-#line 1728 "asn1p_y.y"
+#line 1760 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_UTF8String; }
     break;
 
   case 204:
-#line 1729 "asn1p_y.y"
+#line 1761 "asn1p_y.y"
     {
 		(yyval.a_type) = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
@@ -4098,137 +4130,120 @@
     break;
 
   case 205:
-#line 1733 "asn1p_y.y"
+#line 1765 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_VisibleString; }
     break;
 
   case 206:
-#line 1734 "asn1p_y.y"
+#line 1766 "asn1p_y.y"
     { (yyval.a_type) = ASN_STRING_ObjectDescriptor; }
     break;
 
   case 211:
-#line 1746 "asn1p_y.y"
+#line 1778 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
   case 213:
-#line 1751 "asn1p_y.y"
+#line 1783 "asn1p_y.y"
     { (yyval.a_constr) = 0; }
     break;
 
   case 215:
-#line 1753 "asn1p_y.y"
-    {
-		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_SIZE, (yyvsp[(3) - (4)].a_constr), 0);
-	}
-    break;
-
-  case 216:
-#line 1759 "asn1p_y.y"
-    {
-		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (1)].a_constr), 0);
-    }
-    break;
-
-  case 217:
-#line 1765 "asn1p_y.y"
-    {
-		(yyval.a_constr) = (yyvsp[(2) - (3)].a_constr);
-	}
+#line 1788 "asn1p_y.y"
+    { (yyval.a_constr) = 0; }
     break;
 
   case 218:
-#line 1768 "asn1p_y.y"
+#line 1794 "asn1p_y.y"
     {
-		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (4)].a_constr), (yyvsp[(3) - (4)].a_constr));
+		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(2) - (3)].a_constr), 0);
+    }
+    break;
+
+  case 220:
+#line 1801 "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]);
+        } else {
+            CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (2)].a_constr), (yyvsp[(2) - (2)].a_constr));
+        }
 	}
     break;
 
-  case 222:
-#line 1778 "asn1p_y.y"
+  case 224:
+#line 1815 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_EL_EXT;
 	}
     break;
 
-  case 224:
-#line 1783 "asn1p_y.y"
+  case 226:
+#line 1820 "asn1p_y.y"
     {
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno, currentModule);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (3)].a_constr), ct);
-	}
-    break;
-
-  case 225:
-#line 1789 "asn1p_y.y"
-    {
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno, currentModule);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (5)].a_constr), ct);
-		ct = (yyval.a_constr);
-		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, ct, (yyvsp[(5) - (5)].a_constr));
-	}
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (3)].a_constr), ct);
+   }
     break;
 
   case 227:
-#line 1801 "asn1p_y.y"
+#line 1826 "asn1p_y.y"
+    {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (5)].a_constr), ct);
+       ct = (yyval.a_constr);
+       CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, ct, (yyvsp[(5) - (5)].a_constr));
+   }
+    break;
+
+  case 229:
+#line 1838 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_AEX, (yyvsp[(3) - (3)].a_constr), 0);
 	}
     break;
 
-  case 229:
-#line 1808 "asn1p_y.y"
+  case 231:
+#line 1845 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_UNI, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 231:
-#line 1815 "asn1p_y.y"
+  case 233:
+#line 1852 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_INT, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 233:
-#line 1823 "asn1p_y.y"
+  case 235:
+#line 1860 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_EXC, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 234:
-#line 1829 "asn1p_y.y"
+  case 237:
+#line 1867 "asn1p_y.y"
     {
-		int ret;
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = (yyvsp[(1) - (4)].a_ctype);
-		ret = asn1p_constraint_insert((yyval.a_constr), (yyvsp[(3) - (4)].a_constr));
-		checkmem(ret == 0);
-	}
+        int ret;
+        (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+        checkmem((yyval.a_constr));
+        (yyval.a_constr)->type = ACT_CA_SET;
+        ret = asn1p_constraint_insert((yyval.a_constr), (yyvsp[(2) - (3)].a_constr));
+        checkmem(ret == 0);
+    }
     break;
 
-  case 235:
-#line 1837 "asn1p_y.y"
-    {
-		int ret;
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = ACT_CA_SET;
-		ret = asn1p_constraint_insert((yyval.a_constr), (yyvsp[(2) - (3)].a_constr));
-		checkmem(ret == 0);
-	}
-    break;
-
-  case 236:
-#line 1845 "asn1p_y.y"
+  case 238:
+#line 1878 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4237,8 +4252,8 @@
 	}
     break;
 
-  case 237:
-#line 1851 "asn1p_y.y"
+  case 239:
+#line 1884 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4247,61 +4262,13 @@
 	}
     break;
 
-  case 238:
-#line 1857 "asn1p_y.y"
-    {
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = (yyvsp[(2) - (3)].a_ctype);
-		(yyval.a_constr)->range_start = (yyvsp[(1) - (3)].a_value);
-		(yyval.a_constr)->range_stop = (yyvsp[(3) - (3)].a_value);
-	}
-    break;
-
-  case 239:
-#line 1864 "asn1p_y.y"
-    {
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = (yyvsp[(2) - (3)].a_ctype);
-		(yyval.a_constr)->range_start = asn1p_value_fromint(-123);
-		(yyval.a_constr)->range_stop = (yyvsp[(3) - (3)].a_value);
-		(yyval.a_constr)->range_start->type = ATV_MIN;
-	}
-    break;
-
-  case 240:
-#line 1872 "asn1p_y.y"
-    {
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = (yyvsp[(2) - (3)].a_ctype);
-		(yyval.a_constr)->range_start = (yyvsp[(1) - (3)].a_value);
-		(yyval.a_constr)->range_stop = asn1p_value_fromint(321);
-		(yyval.a_constr)->range_stop->type = ATV_MAX;
-	}
-    break;
-
-  case 241:
-#line 1880 "asn1p_y.y"
-    {
-		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
-		checkmem((yyval.a_constr));
-		(yyval.a_constr)->type = (yyvsp[(2) - (3)].a_ctype);
-		(yyval.a_constr)->range_start = asn1p_value_fromint(-123);
-		(yyval.a_constr)->range_stop = asn1p_value_fromint(321);
-		(yyval.a_constr)->range_start->type = ATV_MIN;
-		(yyval.a_constr)->range_stop->type = ATV_MAX;
-	}
-    break;
-
-  case 244:
-#line 1891 "asn1p_y.y"
+  case 245:
+#line 1896 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 245:
-#line 1891 "asn1p_y.y"
+  case 246:
+#line 1896 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4311,8 +4278,22 @@
 	}
     break;
 
-  case 246:
-#line 1901 "asn1p_y.y"
+  case 247:
+#line 1907 "asn1p_y.y"
+    {
+		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_FROM, (yyvsp[(2) - (2)].a_constr), 0);
+	}
+    break;
+
+  case 248:
+#line 1912 "asn1p_y.y"
+    {
+		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_SIZE, (yyvsp[(2) - (2)].a_constr), 0);
+	}
+    break;
+
+  case 249:
+#line 1917 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_CT_PATTERN;
@@ -4320,8 +4301,8 @@
 	}
     break;
 
-  case 247:
-#line 1906 "asn1p_y.y"
+  case 250:
+#line 1922 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4333,22 +4314,35 @@
 	}
     break;
 
-  case 248:
-#line 1918 "asn1p_y.y"
+  case 251:
+#line 1934 "asn1p_y.y"
     {
-		(yyval.a_ctype) = ACT_CT_SIZE;
-	}
+		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+		checkmem((yyval.a_constr));
+		(yyval.a_constr)->type = (yyvsp[(2) - (3)].a_ctype);
+		(yyval.a_constr)->range_start = (yyvsp[(1) - (3)].a_value);
+		(yyval.a_constr)->range_stop = (yyvsp[(3) - (3)].a_value);
+    }
     break;
 
-  case 249:
-#line 1921 "asn1p_y.y"
+  case 253:
+#line 1944 "asn1p_y.y"
     {
-		(yyval.a_ctype) = ACT_CT_FROM;
-	}
+		(yyval.a_value) = asn1p_value_fromint(-123);
+		(yyval.a_value)->type = ATV_MIN;
+    }
     break;
 
-  case 250:
-#line 1927 "asn1p_y.y"
+  case 255:
+#line 1951 "asn1p_y.y"
+    {
+		(yyval.a_value) = asn1p_value_fromint(321);
+		(yyval.a_value)->type = ATV_MAX;
+    }
+    break;
+
+  case 256:
+#line 1957 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(0);
 		checkmem((yyval.a_value));
@@ -4356,8 +4350,8 @@
 	}
     break;
 
-  case 251:
-#line 1932 "asn1p_y.y"
+  case 257:
+#line 1962 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint(1);
 		checkmem((yyval.a_value));
@@ -4365,8 +4359,8 @@
 	}
     break;
 
-  case 255:
-#line 1940 "asn1p_y.y"
+  case 261:
+#line 1970 "asn1p_y.y"
     {
 		asn1p_ref_t *ref;
 		int ret;
@@ -4380,8 +4374,8 @@
 	}
     break;
 
-  case 256:
-#line 1954 "asn1p_y.y"
+  case 262:
+#line 1984 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
 		checkmem((yyval.a_value));
@@ -4389,8 +4383,8 @@
 	}
     break;
 
-  case 257:
-#line 1959 "asn1p_y.y"
+  case 263:
+#line 1989 "asn1p_y.y"
     {
 		(yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
 		checkmem((yyval.a_value));
@@ -4398,23 +4392,33 @@
 	}
     break;
 
-  case 258:
-#line 1967 "asn1p_y.y"
+  case 264:
+#line 1997 "asn1p_y.y"
     {
-		(yyval.a_value) = asn1p_value_fromtype((yyvsp[(1) - (1)].a_expr));
+		(yyval.a_value) = asn1p_value_fromtype((yyvsp[(2) - (2)].a_expr));
 		checkmem((yyval.a_value));
     }
     break;
 
-  case 259:
-#line 1978 "asn1p_y.y"
+  case 265:
+#line 2004 "asn1p_y.y"
+    { (yyval.a_int) = 0; }
+    break;
+
+  case 266:
+#line 2005 "asn1p_y.y"
+    { (yyval.a_int) = 1; }
+    break;
+
+  case 267:
+#line 2013 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_WCOMP, (yyvsp[(3) - (3)].a_constr), 0);
 	}
     break;
 
-  case 260:
-#line 1981 "asn1p_y.y"
+  case 268:
+#line 2016 "asn1p_y.y"
     {
         assert((yyvsp[(3) - (3)].a_constr)->type == ACT_CA_CSV);
         (yyvsp[(3) - (3)].a_constr)->type = ACT_CT_WCOMPS;
@@ -4422,13 +4426,13 @@
 	}
     break;
 
-  case 264:
-#line 1989 "asn1p_y.y"
+  case 272:
+#line 2024 "asn1p_y.y"
     { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
     break;
 
-  case 265:
-#line 1991 "asn1p_y.y"
+  case 273:
+#line 2026 "asn1p_y.y"
     {
         assert((yyvsp[(4) - (5)].a_constr)->type == ACT_CA_CSV);
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
@@ -4443,8 +4447,8 @@
     }
     break;
 
-  case 266:
-#line 2004 "asn1p_y.y"
+  case 274:
+#line 2039 "asn1p_y.y"
     {
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
         (yyval.a_constr)->type = ACT_CA_CSV;
@@ -4452,16 +4456,16 @@
     }
     break;
 
-  case 267:
-#line 2009 "asn1p_y.y"
+  case 275:
+#line 2044 "asn1p_y.y"
     {
         (yyval.a_constr) = (yyvsp[(1) - (3)].a_constr);
         asn1p_constraint_insert((yyval.a_constr), (yyvsp[(3) - (3)].a_constr));
 	}
     break;
 
-  case 268:
-#line 2015 "asn1p_y.y"
+  case 276:
+#line 2050 "asn1p_y.y"
     {
         (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
         checkmem((yyval.a_constr));
@@ -4472,44 +4476,44 @@
     }
     break;
 
-  case 269:
-#line 2029 "asn1p_y.y"
+  case 277:
+#line 2064 "asn1p_y.y"
     { (yyval.a_pres) = ACPRES_DEFAULT; }
     break;
 
-  case 270:
-#line 2030 "asn1p_y.y"
+  case 278:
+#line 2065 "asn1p_y.y"
     { (yyval.a_pres) = (yyvsp[(1) - (1)].a_pres); }
     break;
 
-  case 271:
-#line 2034 "asn1p_y.y"
+  case 279:
+#line 2069 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_PRESENT;
 	}
     break;
 
-  case 272:
-#line 2037 "asn1p_y.y"
+  case 280:
+#line 2072 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_ABSENT;
 	}
     break;
 
-  case 273:
-#line 2040 "asn1p_y.y"
+  case 281:
+#line 2075 "asn1p_y.y"
     {
 		(yyval.a_pres) = ACPRES_OPTIONAL;
 	}
     break;
 
-  case 277:
-#line 2055 "asn1p_y.y"
+  case 285:
+#line 2090 "asn1p_y.y"
     { asn1p_lexer_hack_push_opaque_state(); }
     break;
 
-  case 278:
-#line 2055 "asn1p_y.y"
+  case 286:
+#line 2090 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4520,8 +4524,8 @@
 	}
     break;
 
-  case 279:
-#line 2066 "asn1p_y.y"
+  case 287:
+#line 2101 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		(yyval.a_constr)->type = ACT_CT_CTNG;
@@ -4530,42 +4534,42 @@
 	}
     break;
 
-  case 280:
-#line 2075 "asn1p_y.y"
+  case 288:
+#line 2110 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_RANGE; }
     break;
 
-  case 281:
-#line 2076 "asn1p_y.y"
+  case 289:
+#line 2111 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_RLRANGE; }
     break;
 
-  case 282:
-#line 2077 "asn1p_y.y"
+  case 290:
+#line 2112 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_LLRANGE; }
     break;
 
-  case 283:
-#line 2078 "asn1p_y.y"
+  case 291:
+#line 2113 "asn1p_y.y"
     { (yyval.a_ctype) = ACT_EL_ULRANGE; }
     break;
 
-  case 284:
-#line 2081 "asn1p_y.y"
+  case 292:
+#line 2116 "asn1p_y.y"
     {
 		(yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
 	}
     break;
 
-  case 285:
-#line 2084 "asn1p_y.y"
+  case 293:
+#line 2119 "asn1p_y.y"
     {
 		(yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
 	}
     break;
 
-  case 286:
-#line 2093 "asn1p_y.y"
+  case 294:
+#line 2128 "asn1p_y.y"
     {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno, currentModule);
 		asn1p_constraint_t *ct;
@@ -4581,15 +4585,15 @@
 	}
     break;
 
-  case 287:
-#line 2109 "asn1p_y.y"
+  case 295:
+#line 2144 "asn1p_y.y"
     {
 		CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CRC, (yyvsp[(1) - (4)].a_constr), (yyvsp[(3) - (4)].a_constr));
 	}
     break;
 
-  case 288:
-#line 2115 "asn1p_y.y"
+  case 296:
+#line 2150 "asn1p_y.y"
     {
 		(yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
 		checkmem((yyval.a_constr));
@@ -4598,8 +4602,8 @@
 	}
     break;
 
-  case 289:
-#line 2121 "asn1p_y.y"
+  case 297:
+#line 2156 "asn1p_y.y"
     {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno, currentModule);
@@ -4610,8 +4614,8 @@
 	}
     break;
 
-  case 290:
-#line 2135 "asn1p_y.y"
+  case 298:
+#line 2170 "asn1p_y.y"
     {
 		char *p = malloc(strlen((yyvsp[(2) - (2)].tv_str)) + 2);
 		int ret;
@@ -4625,8 +4629,8 @@
 	}
     break;
 
-  case 291:
-#line 2146 "asn1p_y.y"
+  case 299:
+#line 2181 "asn1p_y.y"
     {
 		char *p = malloc(strlen((yyvsp[(3) - (3)].tv_str)) + 3);
 		int ret;
@@ -4641,15 +4645,15 @@
 	}
     break;
 
-  case 292:
-#line 2162 "asn1p_y.y"
+  case 300:
+#line 2197 "asn1p_y.y"
     {
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 293:
-#line 2165 "asn1p_y.y"
+  case 301:
+#line 2200 "asn1p_y.y"
     {
 		int l1 = strlen((yyvsp[(1) - (3)].tv_str));
 		int l3 = strlen((yyvsp[(3) - (3)].tv_str));
@@ -4663,37 +4667,37 @@
 	}
     break;
 
-  case 294:
-#line 2185 "asn1p_y.y"
+  case 302:
+#line 2220 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_NOMARK;
 		(yyval.a_marker).default_value = 0;
 	}
     break;
 
-  case 295:
-#line 2189 "asn1p_y.y"
+  case 303:
+#line 2224 "asn1p_y.y"
     { (yyval.a_marker) = (yyvsp[(1) - (1)].a_marker); }
     break;
 
-  case 296:
-#line 2193 "asn1p_y.y"
+  case 304:
+#line 2228 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_OPTIONAL | EM_INDIRECT;
 		(yyval.a_marker).default_value = 0;
 	}
     break;
 
-  case 297:
-#line 2197 "asn1p_y.y"
+  case 305:
+#line 2232 "asn1p_y.y"
     {
 		(yyval.a_marker).flags = EM_DEFAULT;
 		(yyval.a_marker).default_value = (yyvsp[(2) - (2)].a_value);
 	}
     break;
 
-  case 298:
-#line 2204 "asn1p_y.y"
+  case 306:
+#line 2239 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4701,16 +4705,16 @@
     }
     break;
 
-  case 299:
-#line 2209 "asn1p_y.y"
+  case 307:
+#line 2244 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
     }
     break;
 
-  case 300:
-#line 2215 "asn1p_y.y"
+  case 308:
+#line 2250 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4720,66 +4724,66 @@
     }
     break;
 
-  case 301:
-#line 2224 "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 302:
-#line 2229 "asn1p_y.y"
-    {
-		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
-		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
-	}
-    break;
-
-  case 303:
-#line 2236 "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 304:
-#line 2244 "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 305:
-#line 2254 "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 306:
+  case 309:
 #line 2259 "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 310:
+#line 2264 "asn1p_y.y"
+    {
 		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
 		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
 	}
     break;
 
-  case 307:
-#line 2266 "asn1p_y.y"
+  case 311:
+#line 2271 "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 312:
+#line 2279 "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 313:
+#line 2289 "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 314:
+#line 2294 "asn1p_y.y"
+    {
+		(yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+		asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+	}
+    break;
+
+  case 315:
+#line 2301 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4790,8 +4794,8 @@
 	}
     break;
 
-  case 308:
-#line 2274 "asn1p_y.y"
+  case 316:
+#line 2309 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4802,8 +4806,8 @@
 	}
     break;
 
-  case 309:
-#line 2284 "asn1p_y.y"
+  case 317:
+#line 2319 "asn1p_y.y"
     {
 		(yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
         asn1p_expr_t *first_memb = TQ_FIRST(&((yyval.a_expr)->members));
@@ -4819,8 +4823,8 @@
     }
     break;
 
-  case 310:
-#line 2299 "asn1p_y.y"
+  case 318:
+#line 2334 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4828,16 +4832,16 @@
 	}
     break;
 
-  case 311:
-#line 2304 "asn1p_y.y"
+  case 319:
+#line 2339 "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 2311 "asn1p_y.y"
+  case 320:
+#line 2346 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4847,8 +4851,8 @@
 	}
     break;
 
-  case 313:
-#line 2318 "asn1p_y.y"
+  case 321:
+#line 2353 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4859,8 +4863,8 @@
 	}
     break;
 
-  case 314:
-#line 2326 "asn1p_y.y"
+  case 322:
+#line 2361 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4871,8 +4875,8 @@
 	}
     break;
 
-  case 315:
-#line 2334 "asn1p_y.y"
+  case 323:
+#line 2369 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4882,8 +4886,8 @@
 	}
     break;
 
-  case 316:
-#line 2341 "asn1p_y.y"
+  case 324:
+#line 2376 "asn1p_y.y"
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
@@ -4894,145 +4898,145 @@
 	}
     break;
 
-  case 317:
-#line 2352 "asn1p_y.y"
+  case 325:
+#line 2387 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 318:
-#line 2356 "asn1p_y.y"
+  case 326:
+#line 2391 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 320:
-#line 2364 "asn1p_y.y"
+  case 328:
+#line 2399 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromdouble((yyvsp[(1) - (1)].a_dbl));
 		checkmem((yyval.a_value));
 	}
     break;
 
-  case 321:
-#line 2395 "asn1p_y.y"
+  case 329:
+#line 2430 "asn1p_y.y"
     { memset(&(yyval.a_tag), 0, sizeof((yyval.a_tag))); }
     break;
 
-  case 322:
-#line 2396 "asn1p_y.y"
+  case 330:
+#line 2431 "asn1p_y.y"
     { (yyval.a_tag) = (yyvsp[(1) - (1)].a_tag); }
     break;
 
-  case 323:
-#line 2400 "asn1p_y.y"
+  case 331:
+#line 2435 "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 324:
-#line 2407 "asn1p_y.y"
+  case 332:
+#line 2442 "asn1p_y.y"
     {
 		(yyval.a_tag) = (yyvsp[(2) - (4)].a_tag);
 		(yyval.a_tag).tag_value = (yyvsp[(3) - (4)].a_int);
 	}
     break;
 
-  case 325:
-#line 2413 "asn1p_y.y"
+  case 333:
+#line 2448 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_CONTEXT_SPECIFIC; }
     break;
 
-  case 326:
-#line 2414 "asn1p_y.y"
+  case 334:
+#line 2449 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_UNIVERSAL; }
     break;
 
-  case 327:
-#line 2415 "asn1p_y.y"
+  case 335:
+#line 2450 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_APPLICATION; }
     break;
 
-  case 328:
-#line 2416 "asn1p_y.y"
+  case 336:
+#line 2451 "asn1p_y.y"
     { (yyval.a_tag).tag_class = TC_PRIVATE; }
     break;
 
-  case 329:
-#line 2420 "asn1p_y.y"
+  case 337:
+#line 2455 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_DEFAULT; }
     break;
 
-  case 330:
-#line 2421 "asn1p_y.y"
+  case 338:
+#line 2456 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_IMPLICIT; }
     break;
 
-  case 331:
-#line 2422 "asn1p_y.y"
+  case 339:
+#line 2457 "asn1p_y.y"
     { (yyval.a_tag).tag_mode = TM_EXPLICIT; }
     break;
 
-  case 332:
-#line 2426 "asn1p_y.y"
+  case 340:
+#line 2461 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 333:
-#line 2430 "asn1p_y.y"
+  case 341:
+#line 2465 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 334:
-#line 2438 "asn1p_y.y"
+  case 342:
+#line 2473 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 335:
-#line 2445 "asn1p_y.y"
+  case 343:
+#line 2480 "asn1p_y.y"
     { (yyval.tv_str) = 0; }
     break;
 
-  case 336:
-#line 2446 "asn1p_y.y"
+  case 344:
+#line 2481 "asn1p_y.y"
     {
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 337:
-#line 2452 "asn1p_y.y"
+  case 345:
+#line 2487 "asn1p_y.y"
     {
 		checkmem((yyvsp[(1) - (1)].tv_str));
 		(yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
 	}
     break;
 
-  case 338:
-#line 2459 "asn1p_y.y"
+  case 346:
+#line 2494 "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 339:
-#line 2465 "asn1p_y.y"
+  case 347:
+#line 2500 "asn1p_y.y"
     {
 		(yyval.a_value) = asn1p_value_fromref((yyvsp[(1) - (1)].a_ref), 0);
     }
@@ -5040,7 +5044,7 @@
 
 
 /* Line 1267 of yacc.c.  */
-#line 5044 "asn1p_y.c"
+#line 5048 "asn1p_y.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5254,7 +5258,7 @@
 }
 
 
-#line 2469 "asn1p_y.y"
+#line 2504 "asn1p_y.y"
 
 
 
diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h
index 4c53acb..8581bc8 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 90 "asn1p_y.y"
+#line 115 "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 dbad995..1f213d2 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <stdarg.h>
 #include <errno.h>
 #include <assert.h>
 
@@ -11,6 +12,30 @@
 #define YYPARSE_PARAM	param
 #define YYPARSE_PARAM_TYPE	void **
 #define YYERROR_VERBOSE
+#define YYDEBUG 1
+#define YYFPRINTF   prefixed_fprintf
+
+/*
+ * Prefix parser debug with "PARSER: " for easier human eye scanning.
+ */
+static int
+__attribute__((format(printf, 2, 3)))
+prefixed_fprintf(FILE *f, const char *fmt, ...) {
+    static int line_ended = 1;
+    va_list ap;
+    va_start(ap, fmt);
+    if(line_ended) {
+        fprintf(f, "PARSER: ");
+        line_ended = 0;
+    }
+    size_t len = strlen(fmt);
+    if(len && fmt[len-1] == '\n') {
+        line_ended = 1;
+    }
+    int ret = vfprintf(f, fmt, ap);
+    va_end(ap);
+    return ret;
+}
 
 int yylex(void);
 int yyerror(const char *msg);
@@ -328,9 +353,13 @@
 %type	<a_tag>			Tag 		/* [UNIVERSAL 0] IMPLICIT */
 %type	<a_tag>			TagClass TagTypeValue TagPlicit
 %type	<a_tag>			optTag		/* [UNIVERSAL 0] IMPLICIT */
-%type	<a_constr>		optConstraints
-%type	<a_constr>		optSizeConstraints
+%type	<a_constr>		optConstraint
+%type	<a_constr>		optManyConstraints  /* Only for Type */
+%type	<a_constr>		ManyConstraints
+%type	<a_constr>		optSizeOrConstraint
 %type	<a_constr>		Constraint
+%type	<a_constr>		PermittedAlphabet
+%type	<a_constr>		SizeConstraint
 %type	<a_constr>		SingleTypeConstraint
 %type	<a_constr>		MultipleTypeConstraints
 %type	<a_constr>		NamedConstraint
@@ -340,25 +369,27 @@
 %type	<a_constr>		ConstraintSpec
 %type	<a_constr>		SubtypeConstraint
 %type	<a_constr>		GeneralConstraint
-%type	<a_constr>		SetOfConstraints
 %type	<a_constr>		ElementSetSpecs		/* 1..2,...,3 */
-%type	<a_constr>		ElementSetSpec		/* 1..2,...,3 */
+%type	<a_constr>		ElementSetSpec		/* 1..2 */
 %type	<a_constr>		Unions
 %type	<a_constr>		Intersections
 %type	<a_constr>		IntersectionElements
-%type	<a_constr>		ConstraintSubtypeElement /* 1..2 */
+%type	<a_constr>		Elements
+%type	<a_constr>		SubtypeElements /* 1..2 */
 %type	<a_constr>		SimpleTableConstraint
 %type	<a_constr>		UserDefinedConstraint
 %type	<a_constr>		TableConstraint
 %type	<a_constr>		ContentsConstraint
 %type	<a_constr>		PatternConstraint
-%type	<a_constr>		InnerTypeConstraint
+%type	<a_constr>		InnerTypeConstraints
+%type	<a_constr>		ValueRange
 %type	<a_constr>		ComponentRelationConstraint
 %type	<a_constr>		AtNotationList
 %type	<a_ref>			AtNotationElement
 %type	<a_value>		SingleValue
+%type	<a_value>		LowerEndValue
+%type	<a_value>		UpperEndValue
 %type	<a_value>		ContainedSubtype
-%type	<a_ctype>		ConstraintType
 %type	<a_ctype>		ConstraintRangeSpec
 %type	<a_value>		RestrictedCharacterStringValue
 %type	<a_wsynt>		optWithSyntax
@@ -366,7 +397,8 @@
 %type	<a_wsynt>		WithSyntaxList
 %type	<a_wchunk>		WithSyntaxToken
 %type	<a_marker>		optMarker Marker
-%type	<a_int>			optUnique
+%type	<a_int>			optUNIQUE
+%type	<a_int>			optINCLUDES
 %type	<a_pres>		optPresenceConstraint PresenceConstraint
 %type	<tv_str>		ComponentIdList
 %type	<a_int>			NSTD_IndirectMarker
@@ -1073,7 +1105,7 @@
 	}
 	;
 
-optUnique:
+optUNIQUE:
 	{ $$ = 0; }
 	| TOK_UNIQUE { $$ = 1; }
 	;
@@ -1106,7 +1138,7 @@
 	}
 
 	/* FixedTypeValueFieldSpec ::= valuefieldreference Type UNIQUE ? ValueOptionalitySpec ? */
-	| TOK_valuefieldreference Type optUnique optMarker {
+	| TOK_valuefieldreference Type optUNIQUE optMarker {
 		$$ = NEW_EXPR();
 		$$->Identifier = $1;
 		$$->meta_type = AMT_OBJECTFIELD;
@@ -1244,7 +1276,7 @@
 	;
 
 Type:
-	optTag TypeDeclaration optConstraints {
+	optTag TypeDeclaration optManyConstraints {
 		$$ = $2;
 		$$->tag = $1;
 		/*
@@ -1258,7 +1290,7 @@
 		} else {
 			if($$->constraints) {
 				assert(!$2);
-				/* Check this : optConstraints is not used ?! */
+				/* Check this : optManyConstraints is not used ?! */
 				asn1p_constraint_free($3);
 			} else {
 				$$->constraints = $3;
@@ -1315,7 +1347,7 @@
 		$$->expr_type = ASN_CONSTR_SET;
 		$$->meta_type = AMT_TYPE;
 	}
-	| TOK_SEQUENCE optSizeConstraints TOK_OF optIdentifier optTag TypeDeclaration {
+	| TOK_SEQUENCE optSizeOrConstraint TOK_OF optIdentifier optTag TypeDeclaration {
 		$$ = NEW_EXPR();
 		checkmem($$);
 		$$->constraints = $2;
@@ -1325,7 +1357,7 @@
 		$6->tag = $5;
 		asn1p_expr_add($$, $6);
 	}
-	| TOK_SET optSizeConstraints TOK_OF optIdentifier optTag TypeDeclaration {
+	| TOK_SET optSizeOrConstraint TOK_OF optIdentifier optTag TypeDeclaration {
 		$$ = NEW_EXPR();
 		checkmem($$);
 		$$->constraints = $2;
@@ -1742,31 +1774,36 @@
 IntersectionMark:	'^' | TOK_INTERSECTION;
 
 /* empty | Constraint */
-optConstraints:
+optConstraint:
 	{ $$ = 0; }
 	| Constraint;
 
+/* empty | Constraint... */
+optManyConstraints:
+	{ $$ = 0; }
+	| ManyConstraints;
+
 /* empty | Constraint | SIZE(...) */
-optSizeConstraints:
+optSizeOrConstraint:
 	{ $$ = 0; }
 	| Constraint
-	| TOK_SIZE '('  ConstraintSpec ')' {
-		CONSTRAINT_INSERT($$, ACT_CT_SIZE, $3, 0);
-	}
+	| SizeConstraint
 	;
 
 Constraint:
-    SetOfConstraints {
-		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0);
+    '(' ConstraintSpec ')' {
+		CONSTRAINT_INSERT($$, ACT_CA_SET, $2, 0);
     }
     ;
 
-SetOfConstraints:
-	'(' ConstraintSpec ')' {
-		$$ = $2;
-	}
-	| SetOfConstraints '(' ConstraintSpec ')' {
-		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $3);
+ManyConstraints:
+    Constraint
+	| ManyConstraints Constraint {
+        if($2->type == ACT_CA_SET && $2->el_count == 1) {
+            CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $2->elements[0]);
+        } else {
+            CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $2);
+        }
 	}
 	;
 
@@ -1779,26 +1816,26 @@
 		$$ = asn1p_constraint_new(yylineno, currentModule);
 		$$->type = ACT_EL_EXT;
 	}
-	| ElementSetSpec
-	| ElementSetSpec ',' TOK_ThreeDots {
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno, currentModule);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
-	}
-	| ElementSetSpec ',' TOK_ThreeDots ',' ElementSetSpec {
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno, currentModule);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
-		ct = $$;
-		CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $5);
-	}
-	;
+   | ElementSetSpec
+   | ElementSetSpec ',' TOK_ThreeDots {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
+   }
+   | ElementSetSpec ',' TOK_ThreeDots ',' ElementSetSpec {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
+       ct = $$;
+       CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $5);
+   }
+;
 
 ElementSetSpec:
 	Unions
-	| TOK_ALL TOK_EXCEPT ConstraintSubtypeElement {
+	| TOK_ALL TOK_EXCEPT Elements {
 		CONSTRAINT_INSERT($$, ACT_CA_AEX, $3, 0);
 	}
 	;
@@ -1819,30 +1856,26 @@
 
 
 IntersectionElements:
-	ConstraintSubtypeElement
-	| ConstraintSubtypeElement TOK_EXCEPT ConstraintSubtypeElement {
+	Elements
+	| Elements TOK_EXCEPT Elements {
 		CONSTRAINT_INSERT($$, ACT_CA_EXC, $1, $3);
 	}
 	;
 
-ConstraintSubtypeElement:
-	ConstraintType '(' ElementSetSpecs ')' {
-		int ret;
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = $1;
-		ret = asn1p_constraint_insert($$, $3);
-		checkmem(ret == 0);
-	}
-	| '(' ElementSetSpecs ')' {
-		int ret;
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = ACT_CA_SET;
-		ret = asn1p_constraint_insert($$, $2);
-		checkmem(ret == 0);
-	}
-	| SingleValue {
+Elements:
+    SubtypeElements
+    | '(' ElementSetSpec ')' {
+        int ret;
+        $$ = asn1p_constraint_new(yylineno, currentModule);
+        checkmem($$);
+        $$->type = ACT_CA_SET;
+        ret = asn1p_constraint_insert($$, $2);
+        checkmem(ret == 0);
+    }
+    ;
+
+SubtypeElements:
+	SingleValue {
 		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
 		$$->type = ACT_EL_VALUE;
@@ -1854,40 +1887,12 @@
 		$$->type = ACT_EL_TYPE;
 		$$->containedSubtype = $1;
 	}
-	| SingleValue ConstraintRangeSpec SingleValue {
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = $2;
-		$$->range_start = $1;
-		$$->range_stop = $3;
-	}
-	| TOK_MIN ConstraintRangeSpec SingleValue {
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = $2;
-		$$->range_start = asn1p_value_fromint(-123);
-		$$->range_stop = $3;
-		$$->range_start->type = ATV_MIN;
-	}
-	| SingleValue ConstraintRangeSpec TOK_MAX {
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = $2;
-		$$->range_start = $1;
-		$$->range_stop = asn1p_value_fromint(321);
-		$$->range_stop->type = ATV_MAX;
-	}
-	| TOK_MIN ConstraintRangeSpec TOK_MAX {
-		$$ = asn1p_constraint_new(yylineno, currentModule);
-		checkmem($$);
-		$$->type = $2;
-		$$->range_start = asn1p_value_fromint(-123);
-		$$->range_stop = asn1p_value_fromint(321);
-		$$->range_start->type = ATV_MIN;
-		$$->range_stop->type = ATV_MAX;
-	}
-	| InnerTypeConstraint
-	| PatternConstraint
+    | PermittedAlphabet /* FROM ... */
+    | SizeConstraint    /* SIZE ... */
+    /* | TypeConstraint is via ContainedSubtype */
+	| InnerTypeConstraints  /* WITH COMPONENT[S] ... */
+	| PatternConstraint     /* PATTERN ... */
+	| ValueRange
 	| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
 		$$ = asn1p_constraint_new(yylineno, currentModule);
 		checkmem($$);
@@ -1897,6 +1902,17 @@
 	}
 	;
 
+
+PermittedAlphabet:
+	TOK_FROM Constraint {
+		CONSTRAINT_INSERT($$, ACT_CT_FROM, $2, 0);
+	};
+
+SizeConstraint:
+	TOK_SIZE Constraint {
+		CONSTRAINT_INSERT($$, ACT_CT_SIZE, $2, 0);
+	};
+
 PatternConstraint:
 	TOK_PATTERN TOK_cstring {
 		$$ = asn1p_constraint_new(yylineno, currentModule);
@@ -1914,14 +1930,28 @@
 	}
 	;
 
-ConstraintType:
-	TOK_SIZE {
-		$$ = ACT_CT_SIZE;
-	}
-	| TOK_FROM {
-		$$ = ACT_CT_FROM;
-	}
-	;
+ValueRange:
+    LowerEndValue ConstraintRangeSpec UpperEndValue {
+		$$ = asn1p_constraint_new(yylineno, currentModule);
+		checkmem($$);
+		$$->type = $2;
+		$$->range_start = $1;
+		$$->range_stop = $3;
+    };
+
+LowerEndValue:
+    SingleValue
+    | TOK_MIN {
+		$$ = asn1p_value_fromint(-123);
+		$$->type = ATV_MIN;
+    };
+
+UpperEndValue:
+    SingleValue
+    | TOK_MAX {
+		$$ = asn1p_value_fromint(321);
+		$$->type = ATV_MAX;
+    };
 
 SingleValue:
 	TOK_FALSE {
@@ -1964,17 +1994,22 @@
 	;
 
 ContainedSubtype:
-    Type {
-		$$ = asn1p_value_fromtype($1);
+    optINCLUDES Type {
+		$$ = asn1p_value_fromtype($2);
 		checkmem($$);
     }
 	;
 
+optINCLUDES:
+	{ $$ = 0; }
+	| TOK_INCLUDES { $$ = 1; }
+	;
+
 /*
  * X.680 08/2015
  * #51.8.5
  */
-InnerTypeConstraint:
+InnerTypeConstraints:
 	TOK_WITH TOK_COMPONENT SingleTypeConstraint {
 		CONSTRAINT_INSERT($$, ACT_CT_WCOMP, $3, 0);
 	}
@@ -2012,7 +2047,7 @@
 	}
 	;
 NamedConstraint:
-	IdentifierAsValue optConstraints optPresenceConstraint {
+	IdentifierAsValue optConstraint optPresenceConstraint {
         $$ = asn1p_constraint_new(yylineno, currentModule);
         checkmem($$);
         $$->type = ACT_EL_VALUE;
diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c
index 32b6734..fcc59b1 100644
--- a/libasn1parser/asn1parser.c
+++ b/libasn1parser/asn1parser.c
@@ -132,6 +132,7 @@
 extern int asn1p_lexer_constructs_year;
 extern int asn1p_lexer_extended_values;
 extern int asn1p__flex_debug;
+extern int asn1p_debug;
 
 static int
 _asn1p_set_flags(enum asn1p_flags flags) {
@@ -139,15 +140,18 @@
 	asn1p_lexer_types_year = 0;
 	asn1p_lexer_constructs_year = 0;
 	asn1p__flex_debug = 0;
+	asn1p_debug = 0;
 
-	/*
-	 * Enable debugging in lexer.
-	 */
-	if(flags & A1P_LEXER_DEBUG) {
-		flags &= ~A1P_LEXER_DEBUG;
+	if(flags & A1P_DEBUG_LEXER) {
+		flags &= ~A1P_DEBUG_LEXER;
 		asn1p__flex_debug = 1;
     }
 
+	if(flags & A1P_DEBUG_PARSER) {
+		flags &= ~A1P_DEBUG_PARSER;
+		asn1p_debug = 1;
+    }
+
     if(flags & A1P_EXTENDED_VALUES) {
         flags &= ~A1P_EXTENDED_VALUES;
         asn1p_lexer_extended_values = 1;
diff --git a/libasn1parser/asn1parser.h b/libasn1parser/asn1parser.h
index ed0a9f8..0819816 100644
--- a/libasn1parser/asn1parser.h
+++ b/libasn1parser/asn1parser.h
@@ -29,13 +29,14 @@
 enum asn1p_flags {
     A1P_NOFLAGS,
     /*
-     * Enable verbose debugging output from lexer.
+     * Enable verbose debugging output from lexer and parser.
      */
-    A1P_LEXER_DEBUG = 0x01,
+    A1P_DEBUG_LEXER = 0x01,
+    A1P_DEBUG_PARSER = 0x02,
     /*
      * Unlock internal helper value types.
      */
-    A1P_EXTENDED_VALUES = 0x02
+    A1P_EXTENDED_VALUES = 0x04
 };
 
 /*
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index 92c8d0e..9696dd4 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -341,9 +341,6 @@
 
 	if(ct == 0) return 0;
 
-	if(ct->type == ACT_CA_SET)
-		safe_printf("(");
-
 	switch(ct->type) {
 	case ACT_EL_TYPE:
 		asn1print_value(ct->containedSubtype, flags);
@@ -373,14 +370,13 @@
 	case ACT_CT_SIZE:
 	case ACT_CT_FROM:
 		switch(ct->type) {
-		case ACT_CT_SIZE: safe_printf("SIZE("); break;
-		case ACT_CT_FROM: safe_printf("FROM("); break;
-		default: safe_printf("??? ("); break;
+		case ACT_CT_SIZE: safe_printf("SIZE"); break;
+		case ACT_CT_FROM: safe_printf("FROM"); break;
+		default: safe_printf("??? "); break;
 		}
 		assert(ct->el_count != 0);
 		assert(ct->el_count == 1);
 		asn1print_constraint(ct->elements[0], flags);
-		safe_printf(")");
 		break;
 	case ACT_CT_WCOMP:
 		assert(ct->el_count != 0);
@@ -431,6 +427,7 @@
 			char *symtable[] = { " EXCEPT ", " ^ ", " | ", ",",
 					"", "(" };
 			unsigned int i;
+            if(ct->type == ACT_CA_SET) safe_printf("(");
 			for(i = 0; i < ct->el_count; i++) {
 				if(i) safe_printf("%s", symtable[symno]);
 				if(ct->type == ACT_CA_CRC) safe_printf("{");
@@ -439,6 +436,7 @@
 				if(ct->type == ACT_CA_SET && i+1 < ct->el_count)
 					safe_printf(") ");
 			}
+            if(ct->type == ACT_CA_SET) safe_printf(")");
 		}
 		break;
 	case ACT_CA_AEX:
@@ -457,9 +455,6 @@
         asn1print_constraint(ct->elements[0], flags);
     }
 
-	if(ct->type == ACT_CA_SET)
-		safe_printf(")");
-
 	return 0;
 }
 
diff --git a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1 b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1
index ce868b5..486cbc0 100644
--- a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1
+++ b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1
@@ -20,13 +20,16 @@
     G-3-3 ::= INTEGER (0..10,...)(2..5,...)(3)  -- OER-visible constraint 3
     -- X.696 #8.2.4 Not OER-visible parts of INTERSECTION are ignored
     H-4-5 ::= INTEGER ((0..5) ^ (4..9))         -- OER-visible constraint 4..5
-    I-0-5 ::= INTEGER ((0..5) ^ (4..12,...))    -- OER-visible constraint 0..5
-    J-4-9 ::= INTEGER ((0..5,...) ^ (4..9))     -- OER-visible constraint 4..9
-    K-inv ::= INTEGER ((0..5,...) ^ (4..9,...)) -- Not OER-visible
+    I-1-5 ::= INTEGER ((0..5) ^ (EConstr))      -- OER-visible constraint 1..5
+    J-4-5 ::= INTEGER ((EConstr) ^ (4..9))      -- OER-visible constraint 4..5
+    K-1-4 ::= INTEGER ((FConstr) ^ (EConstr))   -- OER-visible constraint 1..4
     -- X.696 #8.2.5 UNION with exeptions are ignored
     L-0-5 ::= INTEGER ((0) | (5))               -- OER-visible constraint 0..5
-    M-inv ::= INTEGER ((0) | (5,...))           -- Not OER-visible
-    N-inv ::= INTEGER ((0..4,...) | (5))        -- Not OER-visible
-    O-inv ::= INTEGER ((0..4,...) | (5,...))    -- Not OER-visible
+    M-inv ::= INTEGER ((0) | (EConstr),...)     -- Not OER-visible
+    N-0-5 ::= INTEGER ((FConstr) | (5))         -- OER-visible constraint 0..5
+    O-inv ::= INTEGER ((FConstr) | (5), ...)    -- Not OER-visible
+
+    EConstr ::= INTEGER (1..5,...)
+    FConstr ::= INTEGER (0..4)
 
 END
diff --git a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
index 3dd913e..0cea1a6 100644
--- a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
+++ b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
@@ -624,31 +624,31 @@
 };
 
 
-/*** <<< INCLUDES [I-0-5] >>> ***/
+/*** <<< INCLUDES [I-1-5] >>> ***/
 
 #include <NativeInteger.h>
 
-/*** <<< TYPE-DECLS [I-0-5] >>> ***/
+/*** <<< TYPE-DECLS [I-1-5] >>> ***/
 
-typedef long	 I_0_5_t;
+typedef long	 I_1_5_t;
 
-/*** <<< FUNC-DECLS [I-0-5] >>> ***/
+/*** <<< FUNC-DECLS [I-1-5] >>> ***/
 
-extern asn_TYPE_descriptor_t asn_DEF_I_0_5;
-asn_struct_free_f I_0_5_free;
-asn_struct_print_f I_0_5_print;
-asn_constr_check_f I_0_5_constraint;
-ber_type_decoder_f I_0_5_decode_ber;
-der_type_encoder_f I_0_5_encode_der;
-xer_type_decoder_f I_0_5_decode_xer;
-xer_type_encoder_f I_0_5_encode_xer;
-oer_type_decoder_f I_0_5_decode_oer;
-oer_type_encoder_f I_0_5_encode_oer;
+extern asn_TYPE_descriptor_t asn_DEF_I_1_5;
+asn_struct_free_f I_1_5_free;
+asn_struct_print_f I_1_5_print;
+asn_constr_check_f I_1_5_constraint;
+ber_type_decoder_f I_1_5_decode_ber;
+der_type_encoder_f I_1_5_encode_der;
+xer_type_decoder_f I_1_5_decode_xer;
+xer_type_encoder_f I_1_5_encode_xer;
+oer_type_decoder_f I_1_5_decode_oer;
+oer_type_encoder_f I_1_5_encode_oer;
 
-/*** <<< CODE [I-0-5] >>> ***/
+/*** <<< CODE [I-1-5] >>> ***/
 
 int
-I_0_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+I_1_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	long value;
 	
@@ -661,7 +661,7 @@
 	
 	value = *(const long *)sptr;
 	
-	if((value >= 4 && value <= 5)) {
+	if((value >= 1 && value <= 5)) {
 		/* Constraint check succeeded */
 		return 0;
 	} else {
@@ -677,60 +677,60 @@
  * so here we adjust the DEF accordingly.
  */
 
-/*** <<< CTDEFS [I-0-5] >>> ***/
+/*** <<< CTDEFS [I-1-5] >>> ***/
 
-static asn_oer_constraints_t asn_OER_type_I_0_5_constr_1 GCC_NOTUSED = {
-	{ 1, 1 }	/* (0..5) */,
+static asn_oer_constraints_t asn_OER_type_I_1_5_constr_1 GCC_NOTUSED = {
+	{ 1, 1 }	/* (1..5) */,
 	-1};
 
-/*** <<< STAT-DEFS [I-0-5] >>> ***/
+/*** <<< STAT-DEFS [I-1-5] >>> ***/
 
-static const ber_tlv_tag_t asn_DEF_I_0_5_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_I_1_5_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_I_0_5 = {
-	"I-0-5",
-	"I-0-5",
+asn_TYPE_descriptor_t asn_DEF_I_1_5 = {
+	"I-1-5",
+	"I-1-5",
 	&asn_OP_NativeInteger,
-	I_0_5_constraint,
-	asn_DEF_I_0_5_tags_1,
-	sizeof(asn_DEF_I_0_5_tags_1)
-		/sizeof(asn_DEF_I_0_5_tags_1[0]), /* 1 */
-	asn_DEF_I_0_5_tags_1,	/* Same as above */
-	sizeof(asn_DEF_I_0_5_tags_1)
-		/sizeof(asn_DEF_I_0_5_tags_1[0]), /* 1 */
-	&asn_OER_type_I_0_5_constr_1,
+	I_1_5_constraint,
+	asn_DEF_I_1_5_tags_1,
+	sizeof(asn_DEF_I_1_5_tags_1)
+		/sizeof(asn_DEF_I_1_5_tags_1[0]), /* 1 */
+	asn_DEF_I_1_5_tags_1,	/* Same as above */
+	sizeof(asn_DEF_I_1_5_tags_1)
+		/sizeof(asn_DEF_I_1_5_tags_1[0]), /* 1 */
+	&asn_OER_type_I_1_5_constr_1,
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
 
 
-/*** <<< INCLUDES [J-4-9] >>> ***/
+/*** <<< INCLUDES [J-4-5] >>> ***/
 
 #include <NativeInteger.h>
 
-/*** <<< TYPE-DECLS [J-4-9] >>> ***/
+/*** <<< TYPE-DECLS [J-4-5] >>> ***/
 
-typedef long	 J_4_9_t;
+typedef long	 J_4_5_t;
 
-/*** <<< FUNC-DECLS [J-4-9] >>> ***/
+/*** <<< FUNC-DECLS [J-4-5] >>> ***/
 
-extern asn_TYPE_descriptor_t asn_DEF_J_4_9;
-asn_struct_free_f J_4_9_free;
-asn_struct_print_f J_4_9_print;
-asn_constr_check_f J_4_9_constraint;
-ber_type_decoder_f J_4_9_decode_ber;
-der_type_encoder_f J_4_9_encode_der;
-xer_type_decoder_f J_4_9_decode_xer;
-xer_type_encoder_f J_4_9_encode_xer;
-oer_type_decoder_f J_4_9_decode_oer;
-oer_type_encoder_f J_4_9_encode_oer;
+extern asn_TYPE_descriptor_t asn_DEF_J_4_5;
+asn_struct_free_f J_4_5_free;
+asn_struct_print_f J_4_5_print;
+asn_constr_check_f J_4_5_constraint;
+ber_type_decoder_f J_4_5_decode_ber;
+der_type_encoder_f J_4_5_encode_der;
+xer_type_decoder_f J_4_5_decode_xer;
+xer_type_encoder_f J_4_5_encode_xer;
+oer_type_decoder_f J_4_5_decode_oer;
+oer_type_encoder_f J_4_5_encode_oer;
 
-/*** <<< CODE [J-4-9] >>> ***/
+/*** <<< CODE [J-4-5] >>> ***/
 
 int
-J_4_9_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+J_4_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	long value;
 	
@@ -759,60 +759,60 @@
  * so here we adjust the DEF accordingly.
  */
 
-/*** <<< CTDEFS [J-4-9] >>> ***/
+/*** <<< CTDEFS [J-4-5] >>> ***/
 
-static asn_oer_constraints_t asn_OER_type_J_4_9_constr_1 GCC_NOTUSED = {
-	{ 1, 1 }	/* (4..9) */,
+static asn_oer_constraints_t asn_OER_type_J_4_5_constr_1 GCC_NOTUSED = {
+	{ 1, 1 }	/* (4..5) */,
 	-1};
 
-/*** <<< STAT-DEFS [J-4-9] >>> ***/
+/*** <<< STAT-DEFS [J-4-5] >>> ***/
 
-static const ber_tlv_tag_t asn_DEF_J_4_9_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_J_4_5_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_J_4_9 = {
-	"J-4-9",
-	"J-4-9",
+asn_TYPE_descriptor_t asn_DEF_J_4_5 = {
+	"J-4-5",
+	"J-4-5",
 	&asn_OP_NativeInteger,
-	J_4_9_constraint,
-	asn_DEF_J_4_9_tags_1,
-	sizeof(asn_DEF_J_4_9_tags_1)
-		/sizeof(asn_DEF_J_4_9_tags_1[0]), /* 1 */
-	asn_DEF_J_4_9_tags_1,	/* Same as above */
-	sizeof(asn_DEF_J_4_9_tags_1)
-		/sizeof(asn_DEF_J_4_9_tags_1[0]), /* 1 */
-	&asn_OER_type_J_4_9_constr_1,
+	J_4_5_constraint,
+	asn_DEF_J_4_5_tags_1,
+	sizeof(asn_DEF_J_4_5_tags_1)
+		/sizeof(asn_DEF_J_4_5_tags_1[0]), /* 1 */
+	asn_DEF_J_4_5_tags_1,	/* Same as above */
+	sizeof(asn_DEF_J_4_5_tags_1)
+		/sizeof(asn_DEF_J_4_5_tags_1[0]), /* 1 */
+	&asn_OER_type_J_4_5_constr_1,
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
 };
 
 
-/*** <<< INCLUDES [K-inv] >>> ***/
+/*** <<< INCLUDES [K-1-4] >>> ***/
 
 #include <NativeInteger.h>
 
-/*** <<< TYPE-DECLS [K-inv] >>> ***/
+/*** <<< TYPE-DECLS [K-1-4] >>> ***/
 
-typedef long	 K_inv_t;
+typedef long	 K_1_4_t;
 
-/*** <<< FUNC-DECLS [K-inv] >>> ***/
+/*** <<< FUNC-DECLS [K-1-4] >>> ***/
 
-extern asn_TYPE_descriptor_t asn_DEF_K_inv;
-asn_struct_free_f K_inv_free;
-asn_struct_print_f K_inv_print;
-asn_constr_check_f K_inv_constraint;
-ber_type_decoder_f K_inv_decode_ber;
-der_type_encoder_f K_inv_encode_der;
-xer_type_decoder_f K_inv_decode_xer;
-xer_type_encoder_f K_inv_encode_xer;
-oer_type_decoder_f K_inv_decode_oer;
-oer_type_encoder_f K_inv_encode_oer;
+extern asn_TYPE_descriptor_t asn_DEF_K_1_4;
+asn_struct_free_f K_1_4_free;
+asn_struct_print_f K_1_4_print;
+asn_constr_check_f K_1_4_constraint;
+ber_type_decoder_f K_1_4_decode_ber;
+der_type_encoder_f K_1_4_encode_der;
+xer_type_decoder_f K_1_4_decode_xer;
+xer_type_encoder_f K_1_4_encode_xer;
+oer_type_decoder_f K_1_4_decode_oer;
+oer_type_encoder_f K_1_4_encode_oer;
 
-/*** <<< CODE [K-inv] >>> ***/
+/*** <<< CODE [K-1-4] >>> ***/
 
 int
-K_inv_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+K_1_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	long value;
 	
@@ -825,7 +825,7 @@
 	
 	value = *(const long *)sptr;
 	
-	if((value >= 4 && value <= 5)) {
+	if((value >= 1 && value <= 4)) {
 		/* Constraint check succeeded */
 		return 0;
 	} else {
@@ -841,29 +841,29 @@
  * so here we adjust the DEF accordingly.
  */
 
-/*** <<< CTDEFS [K-inv] >>> ***/
+/*** <<< CTDEFS [K-1-4] >>> ***/
 
-static asn_oer_constraints_t asn_OER_type_K_inv_constr_1 GCC_NOTUSED = {
-	{ 0, 0 },
+static asn_oer_constraints_t asn_OER_type_K_1_4_constr_1 GCC_NOTUSED = {
+	{ 1, 1 }	/* (1..4) */,
 	-1};
 
-/*** <<< STAT-DEFS [K-inv] >>> ***/
+/*** <<< STAT-DEFS [K-1-4] >>> ***/
 
-static const ber_tlv_tag_t asn_DEF_K_inv_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_K_1_4_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_K_inv = {
-	"K-inv",
-	"K-inv",
+asn_TYPE_descriptor_t asn_DEF_K_1_4 = {
+	"K-1-4",
+	"K-1-4",
 	&asn_OP_NativeInteger,
-	K_inv_constraint,
-	asn_DEF_K_inv_tags_1,
-	sizeof(asn_DEF_K_inv_tags_1)
-		/sizeof(asn_DEF_K_inv_tags_1[0]), /* 1 */
-	asn_DEF_K_inv_tags_1,	/* Same as above */
-	sizeof(asn_DEF_K_inv_tags_1)
-		/sizeof(asn_DEF_K_inv_tags_1[0]), /* 1 */
-	&asn_OER_type_K_inv_constr_1,
+	K_1_4_constraint,
+	asn_DEF_K_1_4_tags_1,
+	sizeof(asn_DEF_K_1_4_tags_1)
+		/sizeof(asn_DEF_K_1_4_tags_1[0]), /* 1 */
+	asn_DEF_K_1_4_tags_1,	/* Same as above */
+	sizeof(asn_DEF_K_1_4_tags_1)
+		/sizeof(asn_DEF_K_1_4_tags_1[0]), /* 1 */
+	&asn_OER_type_K_1_4_constr_1,
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
@@ -989,7 +989,7 @@
 	
 	value = *(const long *)sptr;
 	
-	if(((value == 0) || (value == 5))) {
+	if((value >= 0 && value <= 5)) {
 		/* Constraint check succeeded */
 		return 0;
 	} else {
@@ -1034,31 +1034,31 @@
 };
 
 
-/*** <<< INCLUDES [N-inv] >>> ***/
+/*** <<< INCLUDES [N-0-5] >>> ***/
 
 #include <NativeInteger.h>
 
-/*** <<< TYPE-DECLS [N-inv] >>> ***/
+/*** <<< TYPE-DECLS [N-0-5] >>> ***/
 
-typedef long	 N_inv_t;
+typedef long	 N_0_5_t;
 
-/*** <<< FUNC-DECLS [N-inv] >>> ***/
+/*** <<< FUNC-DECLS [N-0-5] >>> ***/
 
-extern asn_TYPE_descriptor_t asn_DEF_N_inv;
-asn_struct_free_f N_inv_free;
-asn_struct_print_f N_inv_print;
-asn_constr_check_f N_inv_constraint;
-ber_type_decoder_f N_inv_decode_ber;
-der_type_encoder_f N_inv_encode_der;
-xer_type_decoder_f N_inv_decode_xer;
-xer_type_encoder_f N_inv_encode_xer;
-oer_type_decoder_f N_inv_decode_oer;
-oer_type_encoder_f N_inv_encode_oer;
+extern asn_TYPE_descriptor_t asn_DEF_N_0_5;
+asn_struct_free_f N_0_5_free;
+asn_struct_print_f N_0_5_print;
+asn_constr_check_f N_0_5_constraint;
+ber_type_decoder_f N_0_5_decode_ber;
+der_type_encoder_f N_0_5_encode_der;
+xer_type_decoder_f N_0_5_decode_xer;
+xer_type_encoder_f N_0_5_encode_xer;
+oer_type_decoder_f N_0_5_decode_oer;
+oer_type_encoder_f N_0_5_encode_oer;
 
-/*** <<< CODE [N-inv] >>> ***/
+/*** <<< CODE [N-0-5] >>> ***/
 
 int
-N_inv_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+N_0_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	long value;
 	
@@ -1087,29 +1087,29 @@
  * so here we adjust the DEF accordingly.
  */
 
-/*** <<< CTDEFS [N-inv] >>> ***/
+/*** <<< CTDEFS [N-0-5] >>> ***/
 
-static asn_oer_constraints_t asn_OER_type_N_inv_constr_1 GCC_NOTUSED = {
-	{ 0, 0 },
+static asn_oer_constraints_t asn_OER_type_N_0_5_constr_1 GCC_NOTUSED = {
+	{ 1, 1 }	/* (0..5) */,
 	-1};
 
-/*** <<< STAT-DEFS [N-inv] >>> ***/
+/*** <<< STAT-DEFS [N-0-5] >>> ***/
 
-static const ber_tlv_tag_t asn_DEF_N_inv_tags_1[] = {
+static const ber_tlv_tag_t asn_DEF_N_0_5_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
 };
-asn_TYPE_descriptor_t asn_DEF_N_inv = {
-	"N-inv",
-	"N-inv",
+asn_TYPE_descriptor_t asn_DEF_N_0_5 = {
+	"N-0-5",
+	"N-0-5",
 	&asn_OP_NativeInteger,
-	N_inv_constraint,
-	asn_DEF_N_inv_tags_1,
-	sizeof(asn_DEF_N_inv_tags_1)
-		/sizeof(asn_DEF_N_inv_tags_1[0]), /* 1 */
-	asn_DEF_N_inv_tags_1,	/* Same as above */
-	sizeof(asn_DEF_N_inv_tags_1)
-		/sizeof(asn_DEF_N_inv_tags_1[0]), /* 1 */
-	&asn_OER_type_N_inv_constr_1,
+	N_0_5_constraint,
+	asn_DEF_N_0_5_tags_1,
+	sizeof(asn_DEF_N_0_5_tags_1)
+		/sizeof(asn_DEF_N_0_5_tags_1[0]), /* 1 */
+	asn_DEF_N_0_5_tags_1,	/* Same as above */
+	sizeof(asn_DEF_N_0_5_tags_1)
+		/sizeof(asn_DEF_N_0_5_tags_1[0]), /* 1 */
+	&asn_OER_type_N_0_5_constr_1,
 	0,	/* No PER visible constraints */
 	0, 0,	/* No members */
 	0	/* No specifics */
@@ -1197,3 +1197,167 @@
 	0	/* No specifics */
 };
 
+
+/*** <<< INCLUDES [EConstr] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [EConstr] >>> ***/
+
+typedef long	 EConstr_t;
+
+/*** <<< FUNC-DECLS [EConstr] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_EConstr;
+asn_struct_free_f EConstr_free;
+asn_struct_print_f EConstr_print;
+asn_constr_check_f EConstr_constraint;
+ber_type_decoder_f EConstr_decode_ber;
+der_type_encoder_f EConstr_encode_der;
+xer_type_decoder_f EConstr_decode_xer;
+xer_type_encoder_f EConstr_encode_xer;
+oer_type_decoder_f EConstr_decode_oer;
+oer_type_encoder_f EConstr_encode_oer;
+
+/*** <<< CODE [EConstr] >>> ***/
+
+int
+EConstr_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 1 && value <= 5)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [EConstr] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_EConstr_constr_1 GCC_NOTUSED = {
+	{ 0, 0 },
+	-1};
+
+/*** <<< STAT-DEFS [EConstr] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_EConstr_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EConstr = {
+	"EConstr",
+	"EConstr",
+	&asn_OP_NativeInteger,
+	EConstr_constraint,
+	asn_DEF_EConstr_tags_1,
+	sizeof(asn_DEF_EConstr_tags_1)
+		/sizeof(asn_DEF_EConstr_tags_1[0]), /* 1 */
+	asn_DEF_EConstr_tags_1,	/* Same as above */
+	sizeof(asn_DEF_EConstr_tags_1)
+		/sizeof(asn_DEF_EConstr_tags_1[0]), /* 1 */
+	&asn_OER_type_EConstr_constr_1,
+	0,	/* No PER visible constraints */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
+
+/*** <<< INCLUDES [FConstr] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [FConstr] >>> ***/
+
+typedef long	 FConstr_t;
+
+/*** <<< FUNC-DECLS [FConstr] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_FConstr;
+asn_struct_free_f FConstr_free;
+asn_struct_print_f FConstr_print;
+asn_constr_check_f FConstr_constraint;
+ber_type_decoder_f FConstr_decode_ber;
+der_type_encoder_f FConstr_encode_der;
+xer_type_decoder_f FConstr_decode_xer;
+xer_type_encoder_f FConstr_encode_xer;
+oer_type_decoder_f FConstr_decode_oer;
+oer_type_encoder_f FConstr_encode_oer;
+
+/*** <<< CODE [FConstr] >>> ***/
+
+int
+FConstr_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	long value;
+	
+	if(!sptr) {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	value = *(const long *)sptr;
+	
+	if((value >= 0 && value <= 4)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		ASN__CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [FConstr] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_FConstr_constr_1 GCC_NOTUSED = {
+	{ 1, 1 }	/* (0..4) */,
+	-1};
+
+/*** <<< STAT-DEFS [FConstr] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_FConstr_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_FConstr = {
+	"FConstr",
+	"FConstr",
+	&asn_OP_NativeInteger,
+	FConstr_constraint,
+	asn_DEF_FConstr_tags_1,
+	sizeof(asn_DEF_FConstr_tags_1)
+		/sizeof(asn_DEF_FConstr_tags_1[0]), /* 1 */
+	asn_DEF_FConstr_tags_1,	/* Same as above */
+	sizeof(asn_DEF_FConstr_tags_1)
+		/sizeof(asn_DEF_FConstr_tags_1[0]), /* 1 */
+	&asn_OER_type_FConstr_constr_1,
+	0,	/* No PER visible constraints */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1 b/tests/tests-asn1c-compiler/50-constraint-OK.asn1
index 62c4fdf..43c9ba4 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1
@@ -24,7 +24,7 @@
 	other-ten Int2 ::= 10
 
 	-- G.4.3.4
-	ExtensibleExtensions ::= INTEGER ((1..256,...) INTERSECTION (1..256))  
+	ExtensibleExtensions ::= INTEGER (1..256) (1..255,...)
 
 	Str1 ::= IA5String
 	Str2 ::= Str1 (SIZE(MIN..20 | 25..30))	
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints
index aa51aa8..d77822b 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints
Binary files differ
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
index f18a21b..420e914 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
@@ -405,7 +405,7 @@
 		return -1;
 	}
 	
-	if((value >= 1 && value <= 256)) {
+	if((value >= 1 && value <= 255)) {
 		/* Constraint check succeeded */
 		return 0;
 	} else {
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
index 6499e91..f198842 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
@@ -427,7 +427,7 @@
 	
 	value = *(const long *)sptr;
 	
-	if((value >= 1 && value <= 256)) {
+	if((value >= 1 && value <= 255)) {
 		/* Constraint check succeeded */
 		return 0;
 	} else {
@@ -446,7 +446,7 @@
 /*** <<< CTDEFS [ExtensibleExtensions] >>> ***/
 
 static asn_per_constraints_t asn_PER_type_ExtensibleExtensions_constr_1 GCC_NOTUSED = {
-	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  256 }	/* (1..256,...) */,
+	{ APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  255 }	/* (1..255,...) */,
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	0, 0	/* No PER value map */
 };