new style constraints implementation support


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@130 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1parser/Makefile.in b/libasn1parser/Makefile.in
index 375d37e..4af0910 100644
--- a/libasn1parser/Makefile.in
+++ b/libasn1parser/Makefile.in
@@ -546,9 +546,9 @@
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-	-rm -f asn1p_y.h
-	-rm -f asn1p_y.c
 	-rm -f asn1p_l.c
+	-rm -f asn1p_y.c
+	-rm -f asn1p_y.h
 clean: clean-am
 
 clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
diff --git a/libasn1parser/asn1p_constr.c b/libasn1parser/asn1p_constr.c
index faec6f2..26f920f 100644
--- a/libasn1parser/asn1p_constr.c
+++ b/libasn1parser/asn1p_constr.c
@@ -108,3 +108,42 @@
 
 	return 0;
 }
+
+
+char *
+asn1p_constraint_type2str(enum asn1p_constraint_type_e type) {
+	switch(type) {
+	case ACT_INVALID:
+		return "INVALID";
+	case ACT_EL_VALUE:
+		return "SingleValue";
+	case ACT_EL_RANGE:
+	case ACT_EL_LLRANGE:
+	case ACT_EL_RLRANGE:
+	case ACT_EL_ULRANGE:
+		return "ValueRange";
+	case ACT_EL_EXT:
+		return "...";
+	case ACT_CT_SIZE:
+		return "SizeConstraint";
+	case ACT_CT_FROM:
+		return "PermittedAlphabet";
+	case ACT_CT_WCOMP:
+		return "SingleTypeConstraint";
+	case ACT_CT_WCOMPS:
+		return "MultipleTypeConstraints";
+	case ACT_CA_SET:
+		return "SET";
+	case ACT_CA_CRC:
+		return "ComponentRelationConstraint";
+	case ACT_CA_CSV:
+		return "CSV";
+	case ACT_CA_UNI:
+		return "UNION";
+	case ACT_CA_INT:
+		return "INTERSECTION";
+	case ACT_CA_EXC:
+		return "EXCEPT";
+	}
+	return "UNKNOWN";
+}
diff --git a/libasn1parser/asn1p_constr.h b/libasn1parser/asn1p_constr.h
index 19099b2..d375678 100644
--- a/libasn1parser/asn1p_constr.h
+++ b/libasn1parser/asn1p_constr.h
@@ -59,6 +59,8 @@
 	int _lineno;	/* Position in a source file */
 } asn1p_constraint_t;
 
+/* Human-readable constraint type description */
+char *asn1p_constraint_type2str(enum asn1p_constraint_type_e);
 
 /*
  * Constructors and a recursive destructor.
diff --git a/libasn1parser/asn1p_expr.c b/libasn1parser/asn1p_expr.c
index 23ab4cb..be9da77 100644
--- a/libasn1parser/asn1p_expr.c
+++ b/libasn1parser/asn1p_expr.c
@@ -57,6 +57,7 @@
 	CLCLONE(Identifier, strdup);
 	CLCLONE(reference, asn1p_ref_clone);
 	CLCLONE(constraints, asn1p_constraint_clone);
+	CLCLONE(combined_constraints, asn1p_constraint_clone);
 	CLCLONE(params, asn1p_paramlist_clone);
 	CLCLONE(value, asn1p_value_clone);
 	CLCLONE(with_syntax, asn1p_wsyntx_clone);
@@ -90,6 +91,8 @@
 			asn1p_ref_free(expr->reference);
 		if(expr->constraints)
 			asn1p_constraint_free(expr->constraints);
+		if(expr->combined_constraints)
+			asn1p_constraint_free(expr->combined_constraints);
 		if(expr->params)
 			asn1p_paramlist_free(expr->params);
 		if(expr->value)
diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h
index 331285c..ef1941b 100644
--- a/libasn1parser/asn1p_expr.h
+++ b/libasn1parser/asn1p_expr.h
@@ -125,6 +125,12 @@
 	asn1p_constraint_t *constraints;
 
 	/*
+	 * This field is holding the transformed constraints, with all the
+	 * parent constraints taken into account.
+	 */
+	asn1p_constraint_t *combined_constraints;
+
+	/*
 	 * A list of parameters for parametrized type declaration
 	 * (AMT_PARAMTYPE).
 	 */
diff --git a/libasn1parser/asn1p_l.c b/libasn1parser/asn1p_l.c
index bbddbcc..f40f7a3 100644
--- a/libasn1parser/asn1p_l.c
+++ b/libasn1parser/asn1p_l.c
@@ -16,12 +16,11 @@
 #define yytext asn1p_text
 #define yylineno asn1p_lineno
 
-#line 20 "lex.yy.c"
+#line 20 "asn1p_l.c"
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
  * $Header$
- * $FreeBSD: src/usr.bin/lex/flex.skl,v 1.4 1999/10/27 07:56:44 obrien Exp $
  */
 
 #define FLEX_SCANNER
@@ -313,220 +312,235 @@
 	*yy_cp = '\0'; \
 	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 123
-#define YY_END_OF_BUFFER 124
-static yyconst short int yy_acclist[1196] =
+#define YY_NUM_RULES 132
+#define YY_END_OF_BUFFER 133
+static yyconst short int yy_acclist[1291] =
     {   0,
-      124,  122,  123,  117,  122,  123,  117,  123,  116,  122,
-      123,   15,  122,  123,  116,  122,  123,  122,  123,  116,
-      122,  123,  122,  123,  116,  122,  123,  122,  123,   23,
-      122,  123,   22,  122,  123,  116,  122,  123,  122,  123,
-      111,  112,  122,  123,  111,  112,  122,  123,  111,  112,
-      122,  123,  111,  112,  122,  123,  111,  112,  122,  123,
-      111,  112,  122,  123,  111,  112,  122,  123,  111,  112,
-      122,  123,  111,  112,  122,  123,  111,  112,  122,  123,
-      111,  112,  122,  123,  111,  112,  122,  123,  111,  112,
-      122,  123,  111,  112,  122,  123,  111,  112,  122,  123,
+      133,  131,  132,  125,  131,  132,  125,  132,  124,  131,
+      132,   15,  131,  132,  124,  131,  132,  131,  132,  124,
+      131,  132,  131,  132,  124,  131,  132,  131,  132,   29,
+      131,  132,   28,  131,  132,  124,  131,  132,  131,  132,
+      119,  120,  131,  132,  119,  120,  131,  132,  119,  120,
+      131,  132,  119,  120,  131,  132,  119,  120,  131,  132,
+      119,  120,  131,  132,  119,  120,  131,  132,  119,  120,
+      131,  132,  119,  120,  131,  132,  119,  120,  131,  132,
+      119,  120,  131,  132,  119,  120,  131,  132,  119,  120,
+      131,  132,  119,  120,  131,  132,  119,  120,  131,  132,
 
-      111,  112,  122,  123,  111,  112,  122,  123,  111,  112,
-      122,  123,  111,  112,  122,  123,  116,  122,  123,  110,
-      122,  123,    5,  122,  123,    2,  123,    2,  122,  123,
-        4,  122,  123,    7,    9,  122,  123,    7,  123,    9,
-      122,  123,    9,  122,  123,   17,  122,  123,   17,  123,
-       18,  122,  123,   12,  122,  123,   12,  123,   14,  122,
-      123,   14,  122,  123,   10,  122,  123,   11,  122,  123,
-      119,  122,  123,  120,  122,  123,  120,  123,  122,  123,
-      121,  122,  123,  117,   15,   15,  108,  109,    1,   21,
-      115,    6,   22,  111,  112,  111,  112,  111,  112,  111,
+      119,  120,  131,  132,  119,  120,  131,  132,  119,  120,
+      131,  132,  119,  120,  131,  132,  124,  131,  132,  130,
+      131,  132,  118,  131,  132,  124,  130,  131,  132,    5,
+      131,  132,    2,  132,    2,  131,  132,    4,  131,  132,
+        7,    9,  131,  132,    7,  132,    9,  131,  132,    9,
+      131,  132,   17,  131,  132,   17,  132,   18,  131,  132,
+       12,  131,  132,   12,  132,   14,  131,  132,   14,  131,
+      132,   10,  131,  132,   11,  131,  132,   21,   23,  131,
+      132,   23,  131,  132,   24,  132,   21,   22,   23,  131,
+      132,   21,   22,   23,  131,  132,  127,  131,  132,  128,
 
-      112,  111,  112,  111,  112,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,   36,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  112,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  112,  111,  112,  111,  112,   79,  111,
-      112,  111,  112,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  112,  111,  112,  111,  112,  112,  112,  111,  112,
+      131,  132,  128,  132,  131,  132,  129,  131,  132,  125,
+       15,   15,  116,  117,    1,   27,  123,    6,   28,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+       42,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  120,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  120,
+      119,  120,  119,  120,   87,  119,  120,  119,  120,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  120,  119,
 
-      110,    5,    3,    8,   17,   16,   12,  119,  120,  118,
-      108,  109,   21,  114,  113,  111,  112,   28,  111,  112,
-       29,  111,  112,  111,  112,  111,  112,  111,  112,   33,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,   49,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  112,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,   71,  111,  112,   72,  111,  112,  111,
-      112,  112,  111,  112,  111,  112,  111,  112,  112,  111,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  120,  119,  120,
+      119,  120,  120,  120,  119,  120,  118,    5,    3,    8,
+       17,   16,   12,   21,   21,   22,   21,   22,  127,  128,
+      126,  116,  117,   27,  122,  121,  119,  120,   34,  119,
+      120,   35,  119,  120,  119,  120,  119,  120,  119,  120,
+       39,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,   56,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  120,  120,
 
-      112,   82,  111,  112,  111,  112,  111,  112,  111,  112,
-      112,  111,  112,  111,  112,  111,  112,   90,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  112,  111,  112,  111,  112,  111,
-      112,  112,  112,  112,  111,  112,   24,   13,   20,   19,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,   57,  111,  112,  112,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,   79,  119,  120,   80,  119,  120,
+      119,  120,  120,  119,  120,  119,  120,  119,  120,  120,
+      119,  120,   90,  119,  120,  119,  120,  119,  120,  119,
+      120,  120,  119,  120,  119,  120,  119,  120,   98,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  120,  119,  120,  119,  120,
+      119,  120,  120,  120,  120,  119,  120,   30,   13,   21,
+       22,   20,   21,   22,   26,   25,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
 
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,   74,
-      111,  112,  112,  111,  112,  111,  112,  111,  112,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  112,   87,
-      111,  112,  111,  112,  111,  112,   91,  111,  112,  111,
-      112,  111,  112,  111,  112,   95,  111,  112,   97,  111,
-      112,  111,  112,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  112,  112,  112,  107,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,   32,  111,
-      112,  112,  111,  112,  111,  112,  111,  112,   39,  111,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,   64,  119,  120,  120,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,   82,  119,  120,  120,  119,
+      120,  119,  120,  119,  120,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  120,   95,  119,  120,  119,  120,
+      119,  120,   99,  119,  120,  119,  120,  119,  120,  119,
+      120,  103,  119,  120,  105,  119,  120,  119,  120,  120,
 
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,   56,  111,  112,
-      112,  112,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  112,  111,  112,   78,  111,  112,  111,  112,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  112,  111,
-      112,  111,  112,  111,  112,  111,  112,  112,  111,  112,
-      112,   99,  111,  112,  111,  112,  111,  112,  112,  111,
-      112,  112,  112,  112,   25,   26,  111,  112,  111,  112,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      120,  120,  120,  115,  119,  120,   21,   22,  119,  120,
+      119,  120,  119,  120,  119,  120,   38,  119,  120,  120,
+      119,  120,  119,  120,  119,  120,   45,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,   63,  119,  120,  120,  120,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
+      120,  120,  119,  120,   86,  119,  120,  119,  120,  120,
 
-      111,  112,  111,  112,  112,  111,  112,  111,  112,   38,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-       51,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,  112,  112,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,  111,  112,  112,   76,  111,  112,  111,  112,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  112,
-      111,  112,  111,  112,   92,  111,  112,   93,  111,  112,
-      112,  111,  112,  112,  100,  111,  112,  111,  112,  112,
+      119,  120,  119,  120,  119,  120,  119,  120,  120,  119,
+      120,  119,  120,  119,  120,  119,  120,  120,  119,  120,
+      120,  107,  119,  120,  119,  120,  119,  120,  120,  119,
+      120,  120,  120,  120,   31,   21,   22,   32,  119,  120,
+      119,  120,  119,  120,  119,  120,  120,  119,  120,  119,
+      120,   44,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,   58,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  120,  120,  120,  119,  120,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
 
-      112,  112,  112,  112,  111,  112,  111,  112,  111,  112,
-      112,   35,  111,  112,  111,  112,  111,  112,  111,  112,
-      111,  112,   44,  111,  112,   45,  111,  112,  111,  112,
-      111,  112,   48,  111,  112,  111,  112,  111,  112,   53,
-      111,  112,  111,  112,  111,  112,  112,  112,  112,  111,
-      112,  111,  112,   64,  111,  112,   65,  111,  112,  111,
-      112,  111,  112,   68,  111,  112,  111,  112,  111,  112,
-      111,  112,  112,  111,  112,  112,   81,  111,  112,  111,
-      112,   84,  111,  112,   86,  111,  112,  112,  111,  112,
-      111,  112,  112,  111,  112,  112,  111,  112,  103,  112,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      120,   84,  119,  120,  119,  120,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,  120,  119,  120,  119,  120,
+      100,  119,  120,  101,  119,  120,  120,  119,  120,  120,
+      108,  119,  120,  119,  120,  120,  120,  120,  120,  120,
+       21,   22,  119,  120,  119,  120,  119,  120,  120,   41,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+       50,  119,  120,   51,  119,  120,  119,  120,  119,  120,
+       54,  119,  120,  119,  120,  119,  120,  119,  120,   60,
+      119,  120,  119,  120,  119,  120,  120,  120,  120,  119,
 
-      112,  112,  112,  112,  111,  112,  111,  112,  111,  112,
-      112,  111,  112,  111,  112,  111,  112,  111,  112,  111,
-      112,   47,  111,  112,  111,  112,   52,  111,  112,  111,
-      112,   55,  111,  112,  112,  112,  112,  112,  111,  112,
-       63,  111,  112,   66,  111,  112,   67,  111,  112,  111,
-      112,  112,  111,  112,  112,   80,  111,  112,  112,  111,
-      112,  112,  111,  112,   89,  111,  112,  112,  111,  112,
-      112,  111,  112,  112,  112,  112,  112,  111,  112,  111,
-      112,   31,  111,  112,   34,  112,   37,  111,  112,   40,
-      111,  112,  111,  112,  111,  112,  111,  112,  111,  112,
+      120,  119,  120,   71,  119,  120,   72,  119,  120,  119,
+      120,  119,  120,  119,  120,   76,  119,  120,  119,  120,
+      119,  120,  119,  120,  120,  119,  120,  120,   89,  119,
+      120,  119,  120,   92,  119,  120,   94,  119,  120,  120,
+      119,  120,  119,  120,  120,  119,  120,  120,  119,  120,
+      111,  120,  120,  120,  120,  120,   21,   22,  119,  120,
+      119,  120,  119,  120,  120,  119,  120,  119,  120,  119,
+      120,  119,  120,  119,  120,   53,  119,  120,  119,  120,
+      119,  120,   59,  119,  120,  119,  120,   62,  119,  120,
+      120,  120,  120,  120,  119,  120,   70,  119,  120,   73,
 
-      111,  112,  112,  112,  112,   61,  112,  111,  112,  111,
-      112,  112,  111,  112,  112,  112,  111,  112,  112,  111,
-      112,   94,  112,  111,  112,  112,  101,  111,  112,  112,
-      112,  112,  112,  111,  112,  111,  112,   41,  111,  112,
-       42,  111,  112,   43,  111,  112,  111,  112,   50,  111,
-      112,  111,  112,  112,  112,  112,   62,  111,  112,  111,
-      112,  112,  111,  112,  112,  112,  111,  112,  112,  111,
-      112,  111,  112,  112,  104,  112,  112,  112,  112,  111,
-      112,   30,  111,  112,   46,  111,  112,  111,  112,  112,
-      112,  112,  111,  112,  112,  111,  112,  112,  112,  111,
+      119,  120,   74,  119,  120,  119,  120,  119,  120,  120,
+      119,  120,  120,   88,  119,  120,  120,  119,  120,  120,
+      119,  120,   97,  119,  120,  120,  119,  120,  120,  119,
+      120,  120,  120,  120,  120,   21,   22,  119,  120,  119,
+      120,   37,  119,  120,   40,  120,   43,  119,  120,   46,
+      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
+      119,  120,  119,  120,  120,  120,  120,   68,  120,  119,
+      120,  119,  120,  119,  120,  120,  119,  120,  120,  120,
+      119,  120,  120,  119,  120,  102,  120,  119,  120,  120,
+      109,  119,  120,  120,  120,  120,  120,   21,  119,  120,
 
-      112,  112,  111,  112,  111,  112,  112,  112,  112,  112,
-       24,   25,  111,  112,  111,  112,  112,  112,  112,   69,
-      111,  112,   70,  112,  111,  112,  112,  112,  111,  112,
-      112,   88,  111,  112,  111,  112,  112,  112,  112,  112,
-      111,  112,   54,  111,  112,   59,  112,  112,   60,  112,
-      111,  112,   75,  112,  112,   83,  111,  112,  112,  111,
-      112,   96,  112,  112,  112,  106,  112,  111,  112,  112,
-       73,  111,  112,  112,  112,  111,  112,  112,  105,  112,
-       27,  111,  112,   58,  112,  112,   85,  112,   98,  111,
-      112,  102,  112,   77,  112
+      119,  120,   47,  119,  120,   48,  119,  120,   49,  119,
+      120,  119,  120,  119,  120,   57,  119,  120,  119,  120,
+      120,  120,  120,   69,  119,  120,  119,  120,  119,  120,
+      120,  119,  120,  120,  120,  119,  120,  120,  119,  120,
+      119,  120,  120,  112,  120,  120,  120,  120,   21,  119,
+      120,   36,  119,  120,   52,  119,  120,  119,  120,  119,
+      120,  120,  120,  120,  119,  120,  119,  120,  120,  119,
+      120,  120,  120,  119,  120,  120,  119,  120,  119,  120,
+      120,  120,  120,  120,   30,   31,   21,  119,  120,  119,
+      120,  119,  120,  120,  120,  120,   75,  119,  120,   77,
 
+      119,  120,   78,  120,  119,  120,  120,  120,  119,  120,
+      120,   96,  119,  120,  119,  120,  120,  120,  120,  120,
+       21,  119,  120,  119,  120,   61,  119,  120,   66,  120,
+      120,   67,  120,  119,  120,   83,  120,  120,   91,  119,
+      120,  120,  119,  120,  104,  120,  120,  120,  114,  120,
+       21,  119,  120,  119,  120,  120,   81,  119,  120,  120,
+      120,  119,  120,  120,  113,  120,   21,   33,  119,  120,
+      119,  120,   65,  120,  120,   93,  120,  106,  119,  120,
+      110,  120,   21,   55,  119,  120,   85,  120,   19,   21
     } ;
 
-static yyconst short int yy_accept[676] =
+static yyconst short int yy_accept[722] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    2,    4,    7,    9,   12,   15,   18,
-       20,   23,   25,   28,   30,   33,   36,   39,   41,   45,
-       49,   53,   57,   61,   65,   69,   73,   77,   81,   85,
-       89,   93,   97,  101,  105,  109,  113,  117,  120,  123,
-      126,  128,  131,  134,  138,  140,  143,  146,  149,  151,
-      154,  157,  159,  162,  165,  168,  171,  174,  177,  179,
-      181,  184,  184,  185,  186,  187,  187,  188,  188,  189,
-      189,  189,  190,  191,  192,  193,  194,  194,  196,  198,
-      200,  202,  204,  206,  207,  209,  211,  213,  215,  218,
+        1,    1,    1,    1,    1,    2,    4,    7,    9,   12,
+       15,   18,   20,   23,   25,   28,   30,   33,   36,   39,
+       41,   45,   49,   53,   57,   61,   65,   69,   73,   77,
+       81,   85,   89,   93,   97,  101,  105,  109,  113,  117,
+      120,  123,  126,  130,  133,  135,  138,  141,  145,  147,
+      150,  153,  156,  158,  161,  164,  166,  169,  172,  175,
+      178,  182,  185,  187,  192,  197,  200,  203,  205,  207,
+      210,  210,  211,  212,  213,  213,  214,  214,  215,  215,
+      215,  216,  217,  218,  219,  220,  220,  222,  224,  226,
 
-      220,  222,  224,  226,  228,  230,  232,  234,  236,  237,
-      238,  240,  242,  244,  246,  248,  250,  252,  254,  255,
-      257,  259,  262,  264,  265,  267,  269,  271,  273,  274,
-      276,  278,  280,  282,  284,  286,  288,  290,  292,  293,
-      295,  297,  298,  299,  301,  301,  301,  301,  301,  301,
-      302,  303,  304,  305,  306,  307,  308,  308,  309,  310,
-      311,  311,  312,  313,  313,  313,  314,  315,  316,  318,
-      321,  324,  326,  328,  330,  333,  335,  337,  339,  341,
-      343,  345,  347,  349,  351,  353,  356,  358,  360,  362,
-      364,  366,  368,  369,  370,  372,  374,  376,  378,  380,
+      228,  230,  232,  233,  235,  237,  239,  241,  244,  246,
+      248,  250,  252,  254,  256,  258,  260,  262,  263,  264,
+      266,  268,  270,  272,  274,  276,  278,  280,  281,  283,
+      285,  288,  290,  291,  293,  295,  297,  299,  300,  302,
+      304,  306,  308,  310,  312,  314,  316,  318,  319,  321,
+      323,  324,  325,  327,  327,  327,  327,  327,  327,  328,
+      329,  330,  331,  332,  333,  334,  334,  335,  337,  339,
+      340,  341,  342,  342,  343,  344,  344,  344,  345,  346,
+      347,  349,  352,  355,  357,  359,  361,  364,  366,  368,
+      370,  372,  374,  376,  378,  380,  382,  384,  387,  389,
 
-      382,  384,  387,  390,  392,  393,  395,  397,  399,  400,
-      402,  405,  407,  409,  411,  412,  414,  416,  418,  421,
-      423,  425,  427,  429,  431,  433,  435,  436,  438,  440,
-      442,  443,  444,  445,  447,  448,  448,  448,  448,  448,
-      449,  449,  450,  451,  453,  455,  457,  459,  461,  463,
-      465,  467,  469,  471,  473,  475,  477,  479,  481,  483,
-      485,  487,  489,  491,  493,  495,  497,  500,  501,  502,
-      504,  506,  508,  510,  512,  514,  516,  518,  520,  523,
-      524,  526,  528,  530,  531,  533,  535,  537,  539,  540,
-      543,  545,  547,  550,  552,  554,  556,  559,  562,  564,
+      391,  393,  395,  397,  399,  400,  401,  403,  405,  407,
+      409,  411,  413,  415,  418,  421,  423,  424,  426,  428,
+      430,  431,  433,  436,  438,  440,  442,  443,  445,  447,
+      449,  452,  454,  456,  458,  460,  462,  464,  466,  467,
+      469,  471,  473,  474,  475,  476,  478,  479,  479,  479,
+      479,  479,  480,  482,  485,  485,  486,  487,  489,  491,
+      493,  495,  497,  499,  501,  503,  505,  507,  509,  511,
+      513,  515,  517,  519,  521,  523,  525,  527,  529,  531,
+      533,  536,  537,  538,  540,  542,  544,  546,  548,  550,
+      552,  554,  556,  559,  560,  562,  564,  566,  567,  569,
 
-      565,  567,  569,  571,  573,  575,  576,  577,  578,  581,
-      581,  581,  581,  581,  583,  585,  587,  589,  592,  593,
-      595,  597,  599,  602,  604,  606,  608,  610,  612,  614,
-      616,  618,  620,  622,  624,  626,  628,  631,  632,  633,
-      634,  636,  638,  640,  642,  644,  646,  648,  650,  652,
-      653,  655,  658,  660,  661,  663,  665,  667,  669,  670,
-      672,  674,  676,  678,  679,  681,  682,  685,  687,  689,
-      690,  692,  693,  694,  695,  696,  696,  696,  696,  699,
-      701,  703,  705,  706,  708,  710,  713,  715,  717,  719,
-      721,  723,  725,  727,  729,  731,  734,  736,  738,  740,
+      571,  573,  575,  576,  579,  581,  583,  586,  588,  590,
+      592,  595,  598,  600,  601,  603,  605,  607,  609,  611,
+      612,  613,  614,  617,  617,  617,  617,  617,  619,  621,
+      623,  625,  627,  630,  631,  633,  635,  637,  640,  642,
+      644,  646,  648,  650,  652,  654,  656,  658,  660,  662,
+      664,  666,  669,  670,  671,  672,  674,  676,  678,  680,
+      682,  684,  686,  688,  690,  692,  693,  695,  698,  700,
+      701,  703,  705,  707,  709,  710,  712,  714,  716,  718,
+      719,  721,  722,  725,  727,  729,  730,  732,  733,  734,
+      735,  736,  736,  736,  736,  738,  741,  743,  745,  747,
 
-      742,  743,  744,  745,  747,  749,  751,  753,  755,  757,
-      759,  761,  763,  765,  766,  769,  771,  772,  774,  776,
-      778,  780,  781,  783,  785,  788,  791,  792,  794,  795,
-      798,  800,  801,  802,  803,  804,  805,  805,  805,  805,
-      807,  809,  811,  812,  815,  817,  819,  821,  823,  826,
-      829,  831,  833,  836,  838,  840,  843,  845,  847,  848,
-      849,  850,  852,  854,  857,  860,  862,  864,  867,  869,
-      871,  873,  874,  876,  877,  880,  882,  885,  888,  889,
-      891,  893,  894,  896,  897,  899,  901,  902,  903,  904,
-      905,  905,  905,  905,  907,  909,  911,  912,  914,  916,
+      748,  750,  752,  755,  757,  759,  761,  763,  765,  767,
+      769,  771,  773,  775,  778,  780,  782,  784,  786,  787,
+      788,  789,  791,  793,  795,  797,  799,  801,  803,  805,
+      807,  809,  811,  812,  815,  817,  818,  820,  822,  824,
+      826,  827,  829,  831,  834,  837,  838,  840,  841,  844,
+      846,  847,  848,  849,  850,  851,  851,  851,  851,  853,
+      855,  857,  859,  860,  863,  865,  867,  869,  871,  874,
+      877,  879,  881,  884,  886,  888,  890,  893,  895,  897,
+      898,  899,  900,  902,  904,  907,  910,  912,  914,  916,
+      919,  921,  923,  925,  926,  928,  929,  932,  934,  937,
 
-      918,  920,  922,  925,  927,  930,  932,  935,  936,  937,
-      938,  939,  941,  944,  947,  950,  952,  953,  955,  956,
-      959,  960,  962,  963,  965,  968,  969,  971,  972,  974,
-      975,  976,  977,  978,  978,  978,  978,  980,  982,  985,
-      987,  990,  993,  995,  997,  999, 1001, 1003, 1004, 1005,
-     1006, 1008, 1010, 1012, 1013, 1015, 1016, 1017, 1019, 1020,
-     1022, 1024, 1026, 1027, 1030, 1031, 1032, 1033, 1034, 1034,
-     1034, 1034, 1036, 1038, 1041, 1044, 1047, 1049, 1052, 1054,
-     1055, 1056, 1057, 1060, 1062, 1063, 1065, 1066, 1067, 1069,
-     1070, 1072, 1074, 1075, 1077, 1078, 1079, 1080, 1080, 1080,
+      940,  941,  943,  945,  946,  948,  949,  951,  953,  954,
+      955,  956,  957,  957,  957,  957,  959,  961,  963,  965,
+      966,  968,  970,  972,  974,  976,  979,  981,  983,  986,
+      988,  991,  992,  993,  994,  995,  997, 1000, 1003, 1006,
+     1008, 1010, 1011, 1013, 1014, 1017, 1018, 1020, 1021, 1023,
+     1026, 1027, 1029, 1030, 1032, 1033, 1034, 1035, 1036, 1036,
+     1036, 1036, 1038, 1040, 1042, 1045, 1047, 1050, 1053, 1055,
+     1057, 1059, 1061, 1063, 1065, 1066, 1067, 1068, 1070, 1072,
+     1074, 1076, 1077, 1079, 1080, 1081, 1083, 1084, 1086, 1088,
+     1090, 1091, 1094, 1095, 1096, 1097, 1098, 1098, 1098, 1098,
 
-     1080, 1082, 1085, 1088, 1090, 1091, 1092, 1093, 1095, 1096,
-     1098, 1099, 1100, 1102, 1103, 1105, 1107, 1108, 1109, 1110,
-     1111, 1111, 1113, 1113, 1115, 1117, 1118, 1119, 1120, 1123,
-     1125, 1127, 1128, 1129, 1131, 1132, 1135, 1137, 1138, 1139,
-     1140, 1141, 1141, 1143, 1146, 1148, 1149, 1151, 1153, 1155,
-     1156, 1159, 1160, 1162, 1164, 1165, 1166, 1168, 1168, 1170,
-     1171, 1174, 1175, 1176, 1178, 1179, 1181, 1184, 1186, 1187,
-     1189, 1192, 1194, 1196, 1196
+     1099, 1101, 1103, 1106, 1109, 1112, 1114, 1116, 1119, 1121,
+     1122, 1123, 1124, 1127, 1129, 1131, 1132, 1134, 1135, 1136,
+     1138, 1139, 1141, 1143, 1144, 1146, 1147, 1148, 1149, 1149,
+     1149, 1149, 1150, 1152, 1155, 1158, 1160, 1162, 1163, 1164,
+     1165, 1167, 1169, 1170, 1172, 1173, 1174, 1176, 1177, 1179,
+     1181, 1182, 1183, 1184, 1185, 1185, 1187, 1187, 1188, 1190,
+     1192, 1194, 1195, 1196, 1197, 1200, 1203, 1205, 1207, 1208,
+     1209, 1211, 1212, 1215, 1217, 1218, 1219, 1220, 1221, 1221,
+     1222, 1224, 1226, 1229, 1231, 1232, 1234, 1236, 1238, 1239,
+     1242, 1243, 1245, 1247, 1248, 1249, 1251, 1251, 1252, 1254,
+
+     1256, 1257, 1260, 1261, 1262, 1264, 1265, 1267, 1268, 1271,
+     1273, 1275, 1276, 1278, 1281, 1283, 1284, 1287, 1289, 1291,
+     1291
     } ;
 
 static yyconst int yy_ec[256] =
@@ -573,636 +587,683 @@
        11,   11,   11,   11,   11,   12,    1,   12
     } ;
 
-static yyconst short int yy_base[691] =
+static yyconst short int yy_base[740] =
     {   0,
         0,    0,   76,   78,   80,   81,   82,   89,   83,   93,
-       96,  106,  844,  833,  116,  119,  822,  821,  177,  126,
-     4166,  127,  816,  123, 4166,  134,  805, 4166,  242,  292,
-      141,  298,  152,  314,  322,  130,  338,  359,  360,  376,
-      382,  397,  410,  437,  440,  462,  463,  495,    0,    0,
-     4166, 4166,  811, 4166, 4166,  807,  807,    0,    0,  809,
-        0,    0,  787, 4166, 4166, 4166,    0,  160,  191,  104,
-     4166,  800,  261,    0,  798,  797,    0,   79,    0,  426,
-      793, 4166,  511,  787, 4166,  527,  771,  512,  513,  528,
-      529,  544,  550,    0,  561,  567,  578,  589,  595,  611,
+      171,  249,  109,  120,  961,  952,   95,   98,  951,  948,
+      320,  117, 4484,  118,  933,  100, 4484,  125,  923, 4484,
+      385,  176,  194,  120,  239,  267,  435,  163,  293,  441,
+      191,  259,  463,  471,  484,  500,  508,  270,  521,  553,
+      935,    0,  933,    0, 4484, 4484,  926, 4484, 4484,  922,
+      922,    0,    0,  924,    0,    0,  902, 4484, 4484, 4484,
+        0, 4484, 4484,  598,  675,    0,  148,  151,  182, 4484,
+      915,  160,    0,  913,  912,    0,  135,    0,  573,  908,
+     4484,  226,  902, 4484,  598,  886,  556,  597,  598,  618,
 
-      617,  628,  641,  644,  664,  661,  672,  685,  727,  737,
-      696,  702,  713,  719,  730,  741,  747,  758,  725,  771,
-      774,  787,  795,  725,  798,  811,  822,  835,  720,  851,
-      857,  868,  874,  885,  900,  901,  916,  917,  716,  932,
-      933,  716,   45,  948,  980,  987,  736,   97,  120,    0,
-        0, 4166, 4166,    0, 4166,    0,  750,    0,  291, 4166,
-      761,    0,    0,   79,  739,  994, 4166, 4166,  990, 1003,
-     1011, 1014, 1027, 1035, 1038, 1051, 1059, 1067, 1075, 1088,
-     1096, 1099, 1120, 1121, 1136, 1142, 1153, 1159, 1170, 1176,
-     1187, 1198,  707,  693, 1211, 1219, 1222, 1237, 1240, 1243,
+      619,  634,    0,  664,  667,  680,  693,  704,  720,  728,
+      741,  744,  757,  772,  778,  775,  793,  842,  852,  808,
+      811,  819,  834,  845,  856,  862,  873,  840,  886,  889,
+      902,  910,  840,  913,  926,  937,  950,  835,  966,  972,
+      983,  989, 1000, 1015, 1016, 1031, 1032,  831, 1047, 1048,
+      831,   48, 1063, 1095, 1102,  851,   88,  128,    0,    0,
+     4484, 4484,    0, 4484,    0,  865,    0,  849,  253,    0,
+      264, 4484,  875,    0,    0,   83,  848,  611, 4484, 4484,
+     1099, 1100, 1115, 1123, 1126, 1141, 1144, 1147, 1162, 1168,
+     1179, 1185, 1196, 1207, 1223, 1229, 1240, 1246, 1257, 1263,
 
-     1267, 1261, 1264, 1282,  702, 1285, 1300, 1306,  696, 1317,
-     1328, 1334, 1345, 1356,  686, 1367, 1373, 1384, 1390, 1405,
-     1406, 1421, 1432, 1438, 1453, 1459,  692, 1470, 1481, 1492,
-      675,  686,  681, 1503, 4166, 1542,  697,  143,  158, 4166,
-      683, 4166, 4166, 1527, 1528, 1543, 1549, 1564, 1565, 1582,
-     1581, 1597, 1603, 1614, 1625, 1643, 1640, 1646, 1661, 1664,
-     1667, 1682, 1688, 1699, 1710, 1725, 1731,  664,  668, 1742,
-     1748, 1763, 1764, 1779, 1785, 1796, 1809, 1817, 1825,  658,
-     1840, 1843, 1856,  670, 1864, 1880, 1879, 1896,  649, 1897,
-     1912, 1925, 1933, 1936, 1954, 1951, 1957, 1972, 1975,  648,
+     1274, 1280, 1291, 1302,  818,  807, 1315, 1323, 1326, 1341,
+     1344, 1347, 1371, 1365, 1368, 1386,  815, 1389, 1404, 1410,
+      811, 1421, 1432, 1438, 1449, 1460,  802, 1471, 1477, 1488,
+     1494, 1509, 1510, 1525, 1536, 1542, 1557, 1563,  809, 1574,
+     1585, 1596,  793,  807,  801, 1607, 4484, 1646,  822,  178,
+      250, 4484,  109,  820,  802, 4484, 4484, 1631, 1632, 1647,
+     1653, 1668, 1669, 1686, 1685, 1701, 1707, 1718, 1729, 1747,
+     1744, 1750, 1765, 1768, 1771, 1786, 1792, 1803, 1814, 1829,
+     1835,  783,  789, 1846, 1852, 1867, 1868, 1883, 1889, 1904,
+     1907, 1915, 1928,  774, 1936, 1939, 1952,  786, 1960, 1976,
 
-     1978, 1993, 1999, 2010, 2016,  660,  649,  660, 2031, 2063,
-      283,  280,  305, 2048, 2064, 2072, 2080, 2088,  644, 2096,
-     2104, 2117, 2125, 2128, 2146, 2143, 2149, 2164, 2170, 2185,
-     2186, 2201, 2216, 2222, 2233, 2239, 2254,  653,  641,  627,
-     2255, 2275, 2272, 2293, 2292, 2310, 2309, 2325, 2331,  633,
-     2342, 2353, 2359,  623, 2370, 2381, 2387, 2398,  639, 2411,
-     2414, 2422, 2435,  616, 2446,  625, 2452, 2467, 2468,  613,
-     2483,  607,  604,  610, 4166,  302,  321,   96, 2489, 2504,
-     2507, 2515,  610, 2530, 2536, 2547, 2553, 2564, 2570, 2581,
-     2592, 2598, 2615, 2621, 2637, 2638, 2653, 2654, 2669, 2675,
+     1975, 1992,  770, 1993, 2008, 2021, 2029, 2032, 2050, 2047,
+     2053, 2068, 2071,  768, 2074, 2089, 2095, 2106, 2112,  778,
+      768,  775, 2127, 2159,  170,  151,  242,  200, 2144, 2160,
+     2168, 2176, 2184,  759, 2192, 2200, 2213, 2221, 2224, 2242,
+     2239, 2245, 2260, 2266, 2281, 2282, 2297, 2312, 2318, 2329,
+     2335, 2350,  773,  763,  755, 2351, 2371, 2368, 2389, 2388,
+     2404, 2410, 2421, 2432, 2443,  759, 2449, 2460, 2466,  738,
+     2477, 2488, 2494, 2505,  753, 2518, 2521, 2529, 2542,  737,
+     2553,  745, 2559, 2574, 2575,  731, 2590,  725,  721,  727,
+     4484,  280,  297,  294,  231, 2596, 2611, 2614, 2622,  728,
 
-      605,  607,  599, 2686, 2692, 2707, 2708, 2728, 2729, 2744,
-     2752, 2765, 2773,  604, 2776, 2794,  631, 2791, 2797, 2812,
-     2815,  603, 2823, 2838, 2841, 2844,  590, 2859,  574, 2862,
-     2865,  588,  576,  574,  583,  581,  317,  309,  328, 2880,
-     2883, 2896,  572, 2904, 2917, 2925, 2928, 2941, 2949, 2952,
-     2965, 2976, 2973, 2989, 3000, 3011, 3017, 3028,   54,  589,
-      564, 3034, 3045, 3056, 3062, 3073, 3079, 3094, 3095, 3110,
-     3111,  583, 3126,  566, 3127, 3144, 3147, 3150,  558, 3165,
-     3171,  554, 3186,  576, 3192,    0,  555,  559,  536,  566,
-      347,  226,  339, 3203, 3209, 3224,  548, 3230, 3241, 3254,
+     2637, 2643, 2654, 2660, 2671, 2677, 2688, 2699, 2705, 2722,
+     2728, 2739, 2745, 2756, 2762, 2773, 2779, 2795,  724,  731,
+      723, 2796, 2811, 2817, 2828, 2834, 2849, 2855, 2866, 2881,
+     2887, 2898,  720, 2909, 2915,  747, 2926, 2932, 2943, 2956,
+      716, 2964, 2979, 2982, 2985,  707, 3000,  689, 3003, 3006,
+      704,  692,  687,  697,  693,  271,  295,  301,  712, 3021,
+     3024, 3037,  682, 3045, 3058, 3066, 3069, 3082, 3090, 3093,
+     3106, 3117, 3114, 3130, 3138, 3141, 3154, 3162, 3165,  124,
+      704,  677, 3178, 3186, 3189, 3202, 3210, 3223, 3231, 3234,
+     3251, 3254, 3257,  698, 3272,  681, 3275, 3288, 3296, 3304,
 
-     3262, 3265, 3280, 3283, 3291, 3304, 3307,  531,  525,  525,
-      531, 3322, 3328, 3339, 3345, 3356,  516, 3367,  512, 3373,
-      511, 3384,  521, 3395, 3401,  517, 3412,  504, 3418,  506,
-      507,  520,  466,  325,  465,  348, 3429, 3440, 3451,    0,
-     3457, 3468, 3479, 3490, 3496, 3511, 3512,  467,  476,  464,
-        0, 3527, 3528,  470, 3544,  450,  462, 3545,  474, 3560,
-        0, 3566,  447, 3577,  444,  454,  423,  424,  361, 3616,
-      353, 3601, 3602, 3617, 3618, 3633, 3634, 3649, 3650,  430,
-      434,  428, 3665, 3673,  421, 3681,  421,  412, 3689,  403,
-     3697, 3705,  410,    0,  400,  401,  403,  189, 3737,  519,
+      673, 3317, 3325,  658, 3338,  680, 3346,    0,  660,  667,
+      643,  672,  438,  368,  366,  286, 3349, 3362, 3370,  654,
+     3378, 3386, 3399, 3407, 3410, 3425, 3431, 3446, 3428, 3452,
+     3463,  639,  633,  630,  634, 3469, 3480, 3486, 3497, 3503,
+     3514,  623, 3525,  620, 3531,  619, 3542,  619, 3553, 3559,
+      613, 3570,  600, 3576,  603,  604,  623,  594,  300,  466,
+      447,  360, 3587, 3598, 3609,    0, 3615, 3626, 3637, 3648,
+     3654, 3669, 3672, 3675,  593,  603,  584,    0, 3690, 3698,
+     3713,  590, 3714,  579,  591, 3729,  603, 3737,    0, 3745,
+      572, 3758,  579,  589,  531,  528,  443, 3797,  454,  568,
 
-     3722, 3723, 3738, 3746,  398,  417,  394, 3759,  398, 3767,
-      391,  391, 3770,  383, 3783, 3794,  383,  378,  383,  378,
-      371, 4166, 3833, 3818, 3819,  378,  363,  359, 3834,    0,
-     3840,  357,  347, 3851,  351, 3857, 3868,  330,  315,  305,
-      295,  558, 3884, 3881,    0,  282,    0, 3892,    0,  262,
-     3907,  256, 3910,    0,  188,  141,    0, 3954, 3939,  138,
-     3940,  120,  105, 3955,   95,    0, 3956,    0,   37,    0,
-     3972,    0,    0, 4166, 4017, 4029, 4041, 4053, 4065, 4077,
-     4088, 4089, 4093, 4104, 4116, 4128, 4139, 4144, 4149, 4154
+     3782, 3783, 3798, 3799, 3814, 3815, 3830, 3836, 3847,  529,
+      533,  527, 3853, 3864, 3875,  520, 3881,  523,  515, 3892,
+      512, 3898, 3909,  518,    0,  508,  496,  498,  397, 3941,
+      560,  517, 3926, 3927, 3942, 3943, 3958,  489,  507,  484,
+     3969, 3975,  483, 3990,  475,  477, 3993,  468, 3996, 4013,
+      469,  462,  468,  461,  424, 4484, 4052,  485, 4037, 4048,
+     4059,  461,  456,  455, 4065, 4076,    0, 4087,  454,  444,
+     4098,  440, 4104, 4115,  438,  434,  429,  432,  732,  441,
+     4131, 4128, 4139,    0,  419,    0, 4152,    0,  411, 4155,
+      399, 4170,    0,  372,  347,    0, 4209,  330, 4194, 4205,
+
+      258, 4211,  227,  214, 4222,  177,    0,  180, 4233, 4239,
+        0,  138,    0, 4250,    0,  134, 4256,    0,    0, 4484,
+     4301, 4313, 4325, 4337, 4349, 4361, 4373, 4384, 4385, 4389,
+     4400, 4412, 4424, 4435, 4446, 4457, 4462, 4467, 4472
     } ;
 
-static yyconst short int yy_def[691] =
+static yyconst short int yy_def[740] =
     {   0,
-      674,    1,  675,  675,  676,  676,  677,  677,  678,  678,
-      679,  679,  674,  674,  674,  674,  674,  680,  674,  681,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,  682,  683,  684,
-      674,  674,  674,  674,  674,  674,  674,  685,  685,  674,
-      686,  686,  674,  674,  674,  674,  687,  674,  674,   19,
-      674,  674,  674,  680,  680,  674,  688,  674,  689,  681,
-      681,  674,  674,  674,  674,  674,  674,   29,   29,   29,
-       29,   29,   29,  690,   29,   29,   29,   29,   29,   29,
+      720,    1,  721,  721,  722,  722,  723,  723,  724,  724,
+      725,  725,  726,  726,  720,  720,  720,  720,  720,  727,
+      720,  728,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,  729,
+      720,  730,  720,  731,  720,  720,  720,  720,  720,  720,
+      720,  732,  732,  720,  733,  733,  720,  720,  720,  720,
+      734,  720,  720,  735,  735,  736,  720,  720,   21,  720,
+      720,  720,  727,  727,  720,  737,  720,  738,  728,  728,
+      720,  720,  720,  720,  720,  720,   31,   31,   31,   31,
 
-       29,   29,   29,   29,   29,   29,   29,   29,  690,  690,
-       29,   29,   29,   29,   29,   29,   29,   29,  690,   29,
-       29,   29,   29,  690,   29,   29,   29,   29,  690,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,  690,   29,
-       29,  690,  690,   29,  674,  682,  146,  146,  146,  683,
-      684,  674,  674,  685,  674,  686,  674,  687,  674,  674,
-      674,  688,  689,  674,  674,  674,  674,  674,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,  690,  690,   29,   29,   29,   29,   29,   29,
+       31,   31,  739,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,  739,  739,   31,
+       31,   31,   31,   31,   31,   31,   31,  739,   31,   31,
+       31,   31,  739,   31,   31,   31,   31,  739,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,  739,   31,   31,
+      739,  739,   31,  720,  729,  155,  155,  155,  730,  731,
+      720,  720,  732,  720,  733,  720,  734,   75,   75,  736,
+      720,  720,  720,  737,  738,  720,  720,  720,  720,  720,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
 
-       29,   29,   29,   29,  690,   29,   29,   29,  690,   29,
-       29,   29,   29,   29,  690,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,  690,   29,   29,   29,
-      690,  690,  690,   29,  674,  674,  146,  146,  146,  674,
-      674,  674,  674,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,  690,  690,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,  690,
-       29,   29,   29,  690,   29,   29,   29,   29,  690,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,  690,
+       31,   31,   31,   31,  739,  739,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,  739,   31,   31,   31,
+      739,   31,   31,   31,   31,   31,  739,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,  739,   31,
+       31,   31,  739,  739,  739,   31,  720,  720,  155,  155,
+      155,  720,   75,   75,  720,  720,  720,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,  739,  739,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,  739,   31,   31,   31,  739,   31,   31,
 
-       29,   29,   29,   29,   29,  690,  690,  690,   29,  674,
-      146,  146,  146,   29,   29,   29,   29,   29,  690,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,  690,  690,  690,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,  690,
-       29,   29,   29,  690,   29,   29,   29,   29,  690,   29,
-       29,   29,   29,  690,   29,  690,   29,   29,   29,  690,
-       29,  690,  690,  690,  674,  146,  146,  146,   29,   29,
-       29,   29,  690,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
+       31,   31,  739,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,  739,   31,   31,   31,   31,   31,  739,
+      739,  739,   31,  720,  155,  155,  155,   75,   31,   31,
+       31,   31,   31,  739,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,  739,  739,  739,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,  739,   31,   31,   31,  739,
+       31,   31,   31,   31,  739,   31,   31,   31,   31,  739,
+       31,  739,   31,   31,   31,  739,   31,  739,  739,  739,
+      720,  155,  155,  155,   75,   31,   31,   31,   31,  739,
 
-      690,  690,  690,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,  690,   29,   29,  690,   29,   29,   29,
-       29,  690,   29,   29,   29,   29,  690,   29,  690,   29,
-       29,  690,  690,  690,  690,  690,  146,  146,  146,   29,
-       29,   29,  690,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,  690,  690,
-      690,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,  690,   29,  690,   29,   29,   29,   29,  690,   29,
-       29,  690,   29,  690,   29,  690,  690,  690,  690,  690,
-      146,  146,  146,   29,   29,   29,  690,   29,   29,   29,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,  739,  739,
+      739,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,  739,   31,   31,  739,   31,   31,   31,   31,
+      739,   31,   31,   31,   31,  739,   31,  739,   31,   31,
+      739,  739,  739,  739,  739,  155,  155,  155,   75,   31,
+       31,   31,  739,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,  739,
+      739,  739,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,  739,   31,  739,   31,   31,   31,   31,
 
-       29,   29,   29,   29,   29,   29,   29,  690,  690,  690,
-      690,   29,   29,   29,   29,   29,  690,   29,  690,   29,
-      690,   29,  690,   29,   29,  690,   29,  690,   29,  690,
-      690,  690,  690,  146,  146,  146,   29,   29,   29,  690,
-       29,   29,   29,   29,   29,   29,   29,  690,  690,  690,
-      690,   29,   29,  690,   29,  690,  690,   29,  690,   29,
-      690,   29,  690,   29,  690,  690,  690,  690,  146,  674,
-      146,   29,   29,   29,   29,   29,   29,   29,   29,  690,
-      690,  690,   29,   29,  690,   29,  690,  690,   29,  690,
-       29,   29,  690,  690,  690,  690,  690,  146,  674,  146,
+      739,   31,   31,  739,   31,  739,   31,  739,  739,  739,
+      739,  739,  155,  155,  155,   75,   31,   31,   31,  739,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,  739,  739,  739,  739,   31,   31,   31,   31,   31,
+       31,  739,   31,  739,   31,  739,   31,  739,   31,   31,
+      739,   31,  739,   31,  739,  739,  739,  739,  155,  155,
+      155,   75,   31,   31,   31,  739,   31,   31,   31,   31,
+       31,   31,   31,   31,  739,  739,  739,  739,   31,   31,
+       31,  739,   31,  739,  739,   31,  739,   31,  739,   31,
+      739,   31,  739,  739,  739,  739,  155,  720,  155,  734,
 
-       29,   29,   29,   29,  690,  690,  690,   29,  690,   29,
-      690,  690,   29,  690,   29,   29,  690,  690,  690,  690,
-      146,  674,  674,   29,   29,  690,  690,  690,   29,  690,
-       29,  690,  690,   29,  690,   29,   29,  690,  690,  690,
-      690,  146,   29,   29,  690,  690,  690,   29,  690,  690,
-       29,  690,   29,  690,  690,  690,  690,  674,   29,  690,
-       29,  690,  690,   29,  690,  690,   29,  690,  690,  690,
-       29,  690,  690,    0,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674
+       31,   31,   31,   31,   31,   31,   31,   31,   31,  739,
+      739,  739,   31,   31,   31,  739,   31,  739,  739,   31,
+      739,   31,   31,  739,  739,  739,  739,  739,  155,  720,
+      155,  734,   31,   31,   31,   31,   31,  739,  739,  739,
+       31,   31,  739,   31,  739,  739,   31,  739,   31,   31,
+      739,  739,  739,  739,  155,  720,  720,  734,   31,   31,
+       31,  739,  739,  739,   31,   31,  739,   31,  739,  739,
+       31,  739,   31,   31,  739,  739,  739,  739,  155,  734,
+       31,   31,   31,  739,  739,  739,   31,  739,  739,   31,
+      739,   31,  739,  739,  739,  739,  720,  734,   31,   31,
+
+      739,   31,  739,  739,   31,  739,  739,  734,   31,   31,
+      739,  739,  739,   31,  739,  734,   31,  739,  734,    0,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720
     } ;
 
-static yyconst short int yy_nxt[4245] =
+static yyconst short int yy_nxt[4563] =
     {   0,
-       14,   15,   16,   15,   17,   18,   19,   20,   21,   14,
-       22,   23,   24,   25,   26,   26,   26,   26,   26,   26,
-       27,   17,   28,   28,   29,   30,   31,   32,   33,   34,
-       35,   36,   37,   36,   36,   36,   38,   39,   40,   41,
-       36,   42,   43,   44,   45,   46,   47,   36,   36,   36,
-       48,   17,   14,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-       49,   49,   49,   49,   49,   21,   17,   21,   51,   52,
-       51,   52,   55,   55,   59,   62,   53,   60,   53,   56,
-       56,   59,   57,   57,   60,   62,  508,   68,   69,   68,
+       16,   17,   18,   17,   19,   20,   21,   22,   23,   16,
+       24,   25,   26,   27,   28,   28,   28,   28,   28,   28,
+       29,   19,   30,   30,   31,   32,   33,   34,   35,   36,
+       37,   38,   39,   38,   38,   38,   40,   41,   42,   43,
+       38,   44,   45,   46,   47,   48,   49,   38,   38,   38,
+       50,   19,   51,   52,   52,   52,   52,   52,   52,   52,
+       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
+       52,   52,   52,   52,   52,   23,   53,   23,   55,   56,
+       55,   56,   59,   59,   63,   66,   57,   64,   57,   60,
+       60,   63,   61,   61,   64,   66,   82,   82,   82,   82,
 
-       76,  232,   70,   63,  242,  673,   64,   68,   69,   68,
-      243,  674,   70,   63,  233,  509,   64,   73,   73,   73,
-       73,   73,   73,   72,  439,  674,   72,   80,   80,   80,
-       72,   78,   85,   72,   72,  147,  147,   82,  238,   80,
-       80,   83,   83,   83,   83,   83,   83,   86,   86,   86,
-       86,   86,   86,   86,  672,   88,  674,  239,   65,  147,
-       66,  159,  159,  159,  670,   88,   88,   88,   65,   88,
-       66,   28,  100,   71,   88,  312,  101,   88,   88,  102,
-       88,   28,  147,   71,   72,   88,  669,   88,  104,  105,
-      313,   88,  159,  159,  159,  668,   88,  147,   76,  106,
+       82,   82,   81,   67,  244,   81,   68,   81,  256,   94,
+       77,   78,   77,   67,  257,   79,   68,  245,   89,   89,
+       89,   77,   78,   77,   81,   81,   79,  156,   91,  250,
+       89,   89,   92,   92,   92,   92,   92,   92,   95,   95,
+       95,   95,   95,   95,   95,   97,  168,  328,  112,  171,
+      171,  171,  171,  171,  171,   97,   85,   97,   69,   97,
+       70,   82,   82,   82,   97,  251,  532,  156,   69,  719,
+       70,   71,   72,   73,   72,   71,   71,   71,   71,   71,
+       71,   71,   71,   71,   30,  533,   80,   87,   97,  720,
+      156,   71,   71,   71,   71,   30,  393,   80,   97,   75,
 
-      666,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,  621,  147,   78,
-       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
-       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
-       79,   79,   88,  665,  535,   88,   88,   88,   88,   88,
-       88,   88,   73,   73,   73,  147,   88,   89,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   90,   88,   91,
-       88,   92,   88,   88,   88,   88,   93,   88,   88,   88,
-       88,   88,  159,  159,  159,   94,   94,   94,   94,   94,
+       97,   97,   97,  720,  104,  392,  718,   97,  105,  156,
+      326,   97,  106,   97,  107,   97,   97,  156,  716,   97,
+       97,   71,   71,   71,  108,  109,   97,  395,   97,  110,
+       97,   97,  111,   97,  720,  127,  715,  168,   97,  178,
+      178,  178,  178,  178,  178,  178,   72,   71,   72,   71,
+       72,   73,   72,   71,   71,   71,   71,   71,   71,   71,
+       71,   71,  128,  459,   97,  171,  171,  171,  168,   71,
+       71,   71,   71,  713,   97,  113,  114,   75,   97,  253,
+      254,  156,  327,   97,  129,  130,  115,  394,  131,  156,
+      168,  116,   97,  712,   97,   97,   97,  513,  132,   71,
 
-       94,   94,   94,   94,   94,   94,   94,   94,   94,   94,
-       94,   94,   94,   94,   94,   94,   94,   88,  376,  147,
-       95,  663,  147,   88,   96,  377,  103,   88,   97,   88,
-       98,   88,  662,   88,  437,   88,   88,   88,  107,   88,
-       99,  147,   88,  491,  147,  438,  660,   88,  147,   88,
-      378,   88,  492,   88,  657,  108,  147,   88,   88,   88,
-      147,   88,  111,   88,  147,  112,   88,  147,  569,  493,
-      656,  534,  571,   88,  113,  114,  655,   88,  147,  109,
-      115,  536,   88,  116,   88,   88,  147,  147,  600,  654,
-      110,  117,  147,  598,   88,   88,   88,   88,   88,   88,
+       71,   71,   97,   97,   97,   97,   97,   97,  117,   97,
+      156,   97,  456,  133,   97,  711,  562,  120,   97,  156,
+      121,  457,  458,  168,   72,   71,   72,   81,   97,  122,
+      123,  152,   97,  156,  156,  124,  156,   97,  514,  156,
+      156,   85,  515,  597,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
+      600,  708,   87,   88,   88,   88,   88,   88,   88,   88,
+       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
+       88,   88,   88,   88,   88,   97,  560,  168,   97,   97,
 
-      147,  120,  121,   88,  118,  122,  125,   88,  642,  126,
-      147,   88,  652,   88,  650,  123,  649,  127,  647,   88,
-       88,   88,   88,  128,  646,  130,   88,   80,   80,   80,
-      124,  119,   88,  164,   88,   88,   88,  645,  131,   80,
-       80,   88,  132,  641,  640,   88,  639,   88,  638,   88,
-      129,  635,  633,  133,   88,  135,  632,  630,  134,  628,
-      627,  136,   88,  626,  620,   88,  570,  570,  570,  619,
-      618,  617,   88,  614,   88,   88,   88,  140,  137,   88,
-      612,   88,  611,  141,   88,  138,  609,   88,   88,  607,
-      606,  605,  597,  596,  139,  144,  595,   88,   88,   88,
+       97,   97,   97,   97,   97,  156,  707,  156,  561,   97,
+       98,   97,   97,   97,   97,   97,   97,   97,   97,   97,
+       99,   97,  100,   97,  101,   97,   97,   97,   97,  102,
+       97,   97,   97,   97,   97,  655,  156,  706,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+       97,  679,  559,  156,  704,  125,   97,  598,  598,  598,
+       97,  599,   97,  126,   97,  629,   97,  156,   97,   97,
+       97,  703,  156,  701,  698,   97,  156,  134,   97,  631,
+      135,  696,  118,  156,  695,  694,   97,  693,  136,  139,
 
-       88,   88,   88,  594,  147,  142,   88,   88,  145,  145,
-      145,  145,  145,  145,  145,  593,  590,  588,  587,  146,
-      623,  623,  623,  143,  166,  166,  166,  166,  166,  166,
-      166,  585,  582,  581,  148,  580,  568,   88,   88,  149,
-       86,   86,   86,   86,   86,   86,   86,   88,   88,   88,
-       88,   88,   88,   88,   88,  169,   88,   88,  147,  658,
-      658,  658,  567,  170,   88,   88,   88,   88,   88,   88,
-      566,  565,   88,   88,  563,   88,  561,  171,  559,   88,
-      557,   88,  556,  172,  554,   88,   88,   88,   88,   88,
-      551,  174,   88,  173,   88,  550,   88,  147,   88,  549,
+       97,  691,   97,  119,  137,  156,   97,   97,   97,   97,
+       97,  689,  140,  688,  686,   97,  141,  685,  144,   97,
+      684,   97,  680,   97,  145,   97,  678,  142,   97,  677,
+      676,  138,  143,   97,  675,   97,  672,   97,  670,   97,
+      669,  146,  667,   97,   97,  149,   97,   97,  147,  664,
+      663,  150,   97,  153,  662,  658,   97,  148,   97,  654,
+       97,  657,  657,  657,  653,   97,  154,  154,  154,  154,
+      154,  154,  154,  151,   89,   89,   89,  155,  652,  651,
+      176,   97,  648,  646,  645,  643,   89,   89,  640,  639,
+      638,   97,  157,   97,  632,   97,  628,  158,  167,  156,
 
-       88,  548,   88,   88,   88,   88,   88,  540,  533,  532,
-      175,   88,  531,   88,   88,   88,  530,  176,  528,  526,
-       88,  523,   88,  521,   88,  519,   88,  177,   88,  511,
-       88,  510,   88,   88,   88,  178,   88,  497,  490,   88,
-      489,  180,   88,  488,  487,  486,   88,  484,   88,  179,
-       88,  482,   88,   88,   88,   88,   88,  479,  474,  472,
-      461,   88,  460,   88,  181,  182,   88,   88,  459,  184,
-      183,  443,   88,  436,  435,  434,   88,  432,   88,   88,
-       88,   88,  429,   88,  427,   88,   88,  188,   88,   88,
-      185,  186,  422,  417,  414,  403,   88,   88,   88,   88,
+       97,  627,  167,  167,  167,  167,  167,  167,  167,  167,
+      167,   95,   95,   95,   95,   95,   95,   95,  167,  167,
+      167,  167,   97,   97,  178,  178,  178,  178,  178,  178,
+      178,  626,   97,  182,   97,   97,   97,   97,  625,  181,
+      624,   97,   97,   97,   97,  621,  619,  618,  167,  167,
+      167,  616,  612,   97,   97,   97,   97,   97,  184,   97,
+      611,  610,   97,   97,  596,  595,  183,  594,  593,   97,
+      591,   97,  589,   97,  167,  167,  587,  185,   97,  167,
+      167,  167,  167,  167,  167,  167,  167,  167,  585,   97,
+      584,  582,   97,  578,  186,  167,  167,  167,  167,   97,
 
-      189,   88,  402,   88,  190,   88,  401,  191,  187,   88,
-       88,   88,  383,  195,  374,  373,   88,  372,  366,  359,
-       88,   88,   88,  192,   88,  354,  350,   88,  339,   88,
-      196,   88,  338,   88,  160,   88,  311,   88,   88,   88,
-       88,   88,  308,  307,   88,  198,   88,  306,   88,  300,
-       88,  289,  197,  284,   88,   88,   88,   88,   88,  280,
-      269,  199,  200,   88,  268,   88,   88,   88,  201,   88,
-      243,  241,   88,  240,   88,  147,   88,  231,   88,  227,
-       88,  215,   88,   88,  203,   88,   88,  209,  202,  205,
-      194,   88,  193,  204,  168,   88,   88,   88,  167,   88,
+      577,   97,   97,   97,   97,   97,   97,  576,   97,  575,
+      187,   97,  169,  566,  558,   97,  557,   97,   97,  188,
+      556,  555,  553,  551,   97,  167,  167,  167,   97,   97,
+       97,  189,   97,  697,  697,  697,  548,   97,  546,   97,
+      544,   97,  535,   97,  190,   97,  534,  520,   97,  516,
+      512,  167,  192,   97,  511,   97,  510,   97,  191,   97,
+      509,  508,  506,   97,   97,   97,   97,   97,  504,   97,
+      501,  156,   97,  195,  496,  494,   97,  193,  194,   97,
+       97,   97,  196,   97,  482,   97,  481,  480,   97,  463,
+      455,  454,   97,  453,   97,  451,   97,   97,  197,  198,
 
-      165,  161,   88,  160,  206,  160,   88,  157,   88,   88,
-       88,   88,   88,   88,  155,   88,   85,  207,   88,  153,
-       88,  152,   88,   88,   88,   87,   88,   84,   75,   72,
-       88,   88,   88,   88,   88,   88,   88,   88,  208,   88,
-       72,  210,   88,  674,  674,  674,   88,   88,   88,  674,
-       88,  674,  674,  674,  674,   88,  211,   88,  674,   88,
-       88,   88,  674,  213,  674,  674,  212,  214,  674,  674,
-       88,  674,   88,  674,   88,  216,   88,  674,  674,   88,
-      674,  674,   88,  674,  674,  674,  217,  674,   88,  674,
-       88,  674,   88,   88,   88,   88,   88,  218,  674,   88,
+       97,   97,  448,   97,  200,  446,  441,   97,  436,   97,
+      203,   97,   97,   97,   97,   97,  199,  201,   97,   97,
+      433,  202,   97,  421,  420,  207,  419,  400,   97,  390,
+       97,  204,   97,   97,  389,  388,   97,   97,  382,  208,
+      375,  370,  366,   97,   97,   97,   97,   97,   97,  354,
+       97,  353,   97,  172,   97,   97,   97,  168,  209,   97,
+      210,  325,  322,   97,  321,  320,  314,  303,  298,   97,
+       97,   97,  294,   97,  283,  282,  211,  212,   97,  257,
+       97,   97,   97,  213,   97,  255,  168,   97,  252,   97,
+      156,   97,  243,   97,  239,   97,  227,   97,   97,  215,
 
-      219,   88,  674,   88,  674,   88,  674,   88,  674,   88,
-       88,   88,   88,   88,  223,  221,  674,  220,   88,  674,
-       88,  674,  222,  674,   88,   88,   88,  674,  674,   88,
-      674,  224,  674,  674,  674,   88,   88,   88,   88,   88,
-       88,   88,   88,  674,   88,   88,  674,  674,  674,  674,
-      674,   88,   88,   88,   88,   88,  226,   88,   88,  229,
-      225,   88,  230,  674,  228,  674,  674,   88,   88,   88,
-       88,   88,   88,   88,  674,  674,   88,   88,  674,  674,
-      674,  674,  674,   88,  674,   88,  674,   88,  236,  236,
-      236,  234,   88,  145,  145,  145,  145,  145,  145,  145,
+       97,   97,  221,  214,  217,  206,   97,  205,  216,  180,
+       97,   97,   97,  179,   97,  177,  173,   97,  172,  218,
+      172,   97,  166,   97,   97,   97,   97,   97,   97,  164,
+       97,   94,  219,   97,  162,   97,  161,   97,   97,   97,
+       81,   97,   81,   96,   93,   97,   97,   97,   97,   97,
+       97,   97,   97,  220,   97,   84,  222,   97,   81,   81,
+      720,   97,   97,   97,  720,   97,  720,  720,  720,  720,
+       97,  223,   97,  720,   97,   97,   97,  720,  225,  720,
+      720,  224,  226,  720,  720,   97,  720,   97,  720,   97,
+      228,   97,  720,  720,   97,  720,  720,   97,  720,  720,
 
-      674,  674,  674,  674,  674,  674,  674,  166,  166,  166,
-      166,  166,  166,  166,  674,   88,  674,  674,  244,  674,
-      674,  674,  674,  674,  674,   88,  237,   88,   88,   88,
-      674,  235,  674,  245,   88,  674,   88,  674,   88,   88,
-       88,  674,   88,  674,  674,  674,   88,   88,   88,  246,
-       88,   88,   88,   88,  674,   88,  674,  674,   88,  674,
-       88,  674,   88,   88,   88,  247,   88,  248,  674,  674,
-       88,   88,   88,   88,   88,   88,   88,   88,  674,   88,
-      674,  674,   88,  674,   88,  674,   88,  674,   88,  674,
-       88,  674,   88,  249,  250,   88,   88,  674,   88,  674,
+      720,  229,  720,   97,  720,   97,  720,   97,   97,   97,
+       97,   97,  230,  720,   97,  231,   97,  720,   97,  720,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  235,
+      233,  720,  232,   97,  720,   97,  720,  234,  720,   97,
+       97,   97,  720,  720,   97,  720,  236,  720,  720,  720,
+       97,   97,   97,   97,   97,   97,   97,   97,  720,   97,
+       97,  720,  720,  720,  720,  720,   97,   97,   97,   97,
+       97,  238,   97,   97,  241,  237,   97,  242,  720,  240,
+      720,  720,   97,   97,   97,   97,   97,   97,   97,  720,
+      720,   97,   97,  720,  720,  720,  720,  720,   97,  720,
 
-       88,  674,   88,   88,   88,  674,   88,  252,  251,  674,
-       88,   88,   88,   88,   88,  674,  674,  674,  674,   88,
-      674,   88,  674,   88,   88,   88,  674,   88,  674,  674,
-      253,   88,   88,   88,   88,  254,   88,  674,   88,  674,
-       88,  255,  256,   88,  257,   88,   88,  674,  674,  259,
-      674,  674,  258,  674,  674,   88,   88,   88,   88,   88,
-       88,   88,  674,  674,   88,   88,  674,   88,  674,  674,
-      674,   88,  674,   88,  260,   88,  674,   88,   88,   88,
-       88,   88,  674,  674,   88,  674,   88,  262,   88,  261,
-       88,  674,   88,  674,   88,   88,   88,   88,   88,  674,
+       97,  720,   97,  248,  248,  248,  246,   97,  154,  154,
+      154,  154,  154,  154,  154,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,   97,   97,  720,  258,  720,  720,
+      720,  720,  720,  720,   97,   97,   97,   97,   97,   97,
+       97,  249,  259,   97,   97,  720,  247,  720,   97,  720,
+       97,   97,   97,  720,   97,  720,  720,  720,  260,   97,
+       97,   97,   97,   97,  261,   97,   97,   97,  720,   97,
+       97,  720,   97,  262,  720,  720,   97,  720,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,   97,  263,
+      720,   97,  720,   97,  720,  720,  720,  264,  720,   97,
 
-      674,   88,  674,   88,  265,  263,  674,   88,  264,   88,
-      674,   88,   88,   88,   88,   88,  674,  674,  674,  674,
-       88,  674,   88,   88,   88,  674,   88,  674,  674,  266,
-      674,   88,  674,   88,  267,   88,   88,   88,  674,  674,
-      674,  674,   88,  674,   88,  674,   88,   88,   88,  674,
-       88,  674,  674,  270,   88,   88,  271,  272,   88,   88,
-      273,   88,   88,   88,  674,   88,   88,  674,   88,  674,
-      674,  276,  274,  674,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,  275,   88,  277,   88,   88,  674,   88,
-      674,  674,   88,  674,  674,  674,   88,  674,   88,   88,
+      720,   97,  720,   97,   97,   97,   97,   97,  720,  265,
+       97,  266,   97,  720,   97,  720,   97,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,  267,  720,   97,
+      720,   97,   97,   97,  720,  268,  720,  720,  720,  720,
+       97,  720,   97,  720,   97,  720,   97,  271,   97,  269,
+      270,   97,  720,  720,   97,  272,  720,  273,   97,  720,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  720,
+      720,   97,  720,   97,  720,   97,  720,   97,  274,   97,
+      720,   97,   97,   97,   97,   97,  720,  720,   97,  720,
+       97,  276,   97,  275,   97,  720,   97,  720,   97,   97,
 
-       88,   88,   88,   88,   88,   88,   88,   88,  278,  674,
-       88,   88,  674,  281,  674,  674,  674,  279,  674,   88,
-       88,   88,   88,  674,   88,   88,   88,  674,  282,   88,
-      674,   88,  674,  674,  674,   88,  674,   88,  283,   88,
-      674,   88,   88,   88,   88,   88,  674,  674,  674,  674,
-       88,  674,   88,   88,   88,  674,   88,  674,  674,   88,
-      285,   88,  674,   88,  674,   88,  674,   88,  674,   88,
-       88,   88,   88,   88,  674,  674,  286,  674,   88,  674,
-       88,   88,   88,  674,   88,  674,  674,  287,  674,   88,
-      674,   88,   88,   88,  674,   88,  674,  291,   88,  674,
+       97,   97,   97,  720,  720,   97,  720,   97,  279,  277,
+      720,   97,  278,   97,  720,   97,   97,   97,   97,   97,
+      720,  720,  720,  720,   97,  720,   97,   97,   97,  720,
+       97,  720,  720,  280,  720,   97,  720,   97,  281,   97,
+       97,   97,  720,  720,  720,  720,   97,  720,   97,  720,
+       97,   97,   97,  720,   97,  720,  720,  284,   97,   97,
+      285,  286,   97,   97,  287,   97,   97,   97,  720,   97,
+       97,  720,   97,  720,  720,  290,  288,  720,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,  289,   97,  291,
+       97,   97,  720,   97,  720,  720,   97,  720,  720,  720,
 
-       88,  288,  290,  674,   88,  674,   88,  674,   88,   88,
-       88,   88,   88,  674,  674,   88,  674,   88,  674,   88,
-      674,   88,  674,   88,  674,   88,  674,   88,  292,   88,
-       88,   88,  674,  293,   88,  674,  674,  674,  294,  674,
-       88,   88,   88,   88,   88,   88,   88,  674,  674,   88,
-       88,  674,  674,  674,  674,  674,   88,   88,   88,  674,
-       88,  674,  674,   88,  295,   88,  674,   88,  674,   88,
-      674,   88,  674,   88,  296,   88,   88,   88,   88,  674,
-      297,  298,   88,  674,   88,  674,  674,  299,   88,  674,
-       88,  674,   88,  674,   88,   88,   88,   88,   88,  674,
+       97,  720,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,  292,  720,   97,   97,  720,  295,  720,  720,
+      720,  293,  720,   97,   97,   97,   97,  720,   97,   97,
+       97,  720,  296,   97,  720,   97,  720,  720,  720,   97,
+      720,   97,  297,   97,  720,   97,   97,   97,   97,   97,
+      720,  720,  720,  720,   97,  720,   97,   97,   97,  720,
+       97,  720,  720,   97,  299,   97,  720,   97,  720,   97,
+      720,   97,  720,   97,   97,   97,   97,   97,  720,  720,
+      300,  720,   97,  720,   97,   97,   97,  720,   97,  720,
+      720,  301,  720,   97,  720,   97,   97,   97,  720,   97,
 
-      674,  674,  674,   88,  674,   88,   88,   88,  301,   88,
-      302,  305,  674,  674,   88,  303,   88,   88,   88,  674,
-       88,  674,  674,  674,  304,   88,  674,   88,   88,   88,
-      674,   88,  674,  674,  309,  674,   88,  674,   88,  674,
-       88,  674,   88,  236,  236,  236,  674,   88,  674,  674,
-      674,  674,   88,   88,  674,  310,  310,  310,  310,  310,
-      310,  310,   88,   88,  314,   88,   88,   88,   88,  315,
-      674,   88,   88,  674,   88,  316,  674,  674,   88,  674,
-       88,  674,   88,  674,   88,  317,   88,   88,   88,   88,
-       88,  674,  674,   88,  674,  674,  674,  674,  674,   88,
+      720,  305,   97,  720,   97,  302,  304,  720,   97,  720,
+       97,  720,   97,   97,   97,   97,   97,  720,  720,   97,
+      720,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+      720,   97,  306,   97,   97,   97,  720,  307,   97,  720,
+      720,  720,  308,  720,   97,   97,   97,   97,   97,   97,
+       97,  720,  720,   97,   97,  720,  720,  720,  720,  720,
+       97,   97,   97,  720,   97,  720,  720,   97,  309,   97,
+      720,   97,  720,   97,  720,   97,  720,   97,  310,   97,
+       97,   97,   97,  720,  311,  312,   97,  720,   97,  720,
+      720,  313,   97,  720,   97,  720,   97,  720,   97,   97,
 
-       88,  318,   88,   88,   88,  321,   88,   88,   88,   88,
-      320,  674,  674,  674,  674,  674,   88,   88,   88,   88,
-       88,   88,   88,  322,  674,   88,   88,  674,   88,  674,
-      674,  674,   88,  674,   88,  319,   88,  674,   88,   88,
-       88,   88,   88,  674,  674,  323,  674,   88,  674,   88,
-       88,   88,  324,   88,  674,  674,  674,  674,   88,  674,
-       88,  674,   88,  674,   88,   88,  325,  326,   88,   88,
-      674,   88,  674,  674,  674,   88,  674,   88,   88,   88,
-       88,   88,   88,  328,  327,   88,   88,   88,  329,   88,
-       88,  330,   88,  674,  674,  331,   88,  674,   88,   88,
+       97,   97,   97,  720,  720,  720,  720,   97,  720,   97,
+       97,   97,  315,   97,  316,  319,  720,  720,   97,  317,
+       97,   97,   97,  720,   97,  720,  720,  720,  318,   97,
+      720,   97,   97,   97,  720,   97,  720,  720,  323,  720,
+       97,  720,   97,  720,   97,  720,   97,  248,  248,  248,
+      720,   97,  720,  720,  720,  720,   97,   97,  720,  324,
+      324,  324,  324,  324,  324,  324,   97,   97,  329,   97,
+       97,   97,   97,  330,  720,   97,   97,  720,   97,  331,
+      720,  720,   97,  720,   97,  720,   97,  720,   97,  332,
+       97,   97,   97,   97,   97,  720,  720,   97,  720,  720,
 
-       88,   88,   88,   88,   88,   88,   88,   88,   88,  674,
-      674,   88,  674,   88,  674,  674,  674,   88,  674,   88,
-      333,  332,  674,   88,   88,   88,   88,   88,  674,  674,
-      674,  674,   88,  674,   88,   88,   88,  674,   88,  674,
-      334,  674,  674,   88,  674,   88,  674,  335,  674,   88,
-       88,  336,  674,  337,   88,  674,   88,  674,  674,  674,
-       88,  674,   88,  674,   88,  674,   88,   88,   88,   88,
-       88,  674,  674,   88,  674,   88,  674,   88,  674,   88,
-      674,   88,  674,   88,  674,   88,   88,   88,   88,   88,
-      674,  341,   88,  674,  674,  342,  674,  674,   88,   88,
+      720,  720,  720,   97,   97,  333,   97,   97,   97,  336,
+       97,   97,   97,   97,  335,  720,  720,  720,  720,  720,
+       97,   97,   97,   97,   97,   97,   97,  337,  720,   97,
+       97,  720,   97,  720,  720,  720,   97,  720,   97,  334,
+       97,  720,   97,   97,   97,   97,   97,  720,  720,  338,
+      720,   97,  720,   97,   97,   97,  339,   97,  720,  720,
+      720,  720,   97,  720,   97,  720,   97,  720,   97,   97,
+      340,  341,   97,   97,  720,   97,  720,  720,  720,   97,
+      720,   97,   97,   97,   97,   97,   97,  343,  342,   97,
+       97,   97,  344,   97,   97,  345,   97,  720,  720,  346,
 
-       88,   88,   88,   88,   88,  343,  674,   88,   88,  345,
-       88,  674,  340,  674,   88,  674,   88,  674,   88,  674,
-       88,   88,   88,  344,   88,  348,  346,  674,  674,   88,
-      674,   88,  674,   88,   88,   88,  674,  347,  674,  674,
-       88,  674,   88,  674,   88,  674,   88,  674,   88,  674,
-       88,  674,   88,   88,   88,  674,   88,  674,  674,  349,
-       88,   88,   88,  674,   88,   88,  351,  674,   88,   88,
-      674,  674,  674,  674,  674,   88,  674,   88,   88,   88,
-       88,   88,   88,  674,   88,  674,  352,   88,  674,   88,
-      356,   88,  355,   88,  353,   88,  674,  674,  674,   88,
+       97,  720,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,  720,  720,   97,  720,   97,  720,  720,
+      720,   97,  720,   97,  348,  347,  720,   97,   97,   97,
+       97,   97,  720,  720,  720,  720,   97,  720,   97,   97,
+       97,  720,   97,  720,  349,  720,  720,   97,  720,   97,
+      720,  350,  720,   97,   97,  351,  720,  352,   97,  720,
+       97,  720,  720,  720,   97,  720,   97,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,   97,  720,   97,
+      720,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+       97,   97,   97,   97,  720,  356,   97,  720,  720,  357,
 
-       88,   88,  674,   88,   88,   88,  674,  357,   88,  674,
-      674,  674,  674,  674,   88,   88,   88,   88,   88,   88,
-      358,   88,   88,   88,   88,  674,  674,  674,  674,  674,
-      674,   88,   88,   88,   88,   88,   88,   88,  674,  674,
-       88,   88,  674,  674,  674,  674,  674,   88,  674,   88,
-       88,   88,  674,  361,  674,  360,   88,  674,   88,  674,
-       88,   88,   88,  674,   88,  674,  674,  674,   88,   88,
-       88,   88,   88,  362,  674,   88,   88,   88,  363,   88,
-       88,  674,   88,  674,  674,  365,   88,  674,   88,   88,
-       88,   88,   88,   88,   88,   88,   88,   88,   88,  674,
+      720,  720,   97,   97,   97,   97,   97,   97,   97,  358,
+      720,   97,   97,  360,   97,  720,  355,  720,   97,  720,
+       97,  720,   97,  364,   97,  720,   97,  359,   97,   97,
+      361,  720,   97,   97,  362,  720,  720,  720,  720,   97,
+       97,   97,   97,   97,   97,  363,   97,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,  365,  720,   97,
+      720,   97,  367,   97,   97,   97,  720,   97,  720,  720,
+      720,   97,   97,   97,   97,   97,   97,   97,   97,  720,
+       97,  720,  368,   97,  720,   97,  372,   97,  371,   97,
+      369,   97,  720,  720,  720,   97,   97,   97,  720,   97,
 
-       88,   88,  674,   88,  674,  674,  674,   88,  674,   88,
-       88,   88,   88,   88,   88,  367,   88,   88,   88,   88,
-      674,  364,   88,  674,   88,  674,  674,  369,   88,  674,
-       88,  674,   88,  674,   88,   88,   88,  368,   88,  674,
-      674,   88,  674,   88,  674,   88,  674,   88,  674,   88,
-      674,   88,  674,   88,   88,   88,   88,  674,  371,  674,
-       88,  674,  674,  674,  674,  674,   88,  674,   88,  674,
-       88,  370,  674,   88,  674,   88,  310,  310,  310,  310,
-      310,  310,  310,   88,  674,   88,  674,   88,  380,   88,
-      674,  379,   88,  674,  674,  674,  674,   88,  381,   88,
+       97,   97,  720,  373,   97,  720,  720,  720,  720,  720,
+       97,   97,   97,   97,   97,   97,  374,   97,   97,   97,
+       97,  720,  720,  720,  720,  720,  720,   97,   97,   97,
+       97,   97,   97,   97,  720,  720,   97,   97,  720,  720,
+      720,  720,  720,   97,  720,   97,   97,   97,  720,  377,
+      720,  376,   97,  720,   97,  720,   97,   97,   97,  720,
+       97,  720,  720,  720,   97,   97,   97,   97,   97,  378,
+      720,   97,   97,   97,  379,   97,   97,  720,   97,  720,
+      720,  381,   97,  720,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,  720,   97,   97,  720,   97,
 
-      674,   88,  674,   88,  382,   88,  674,   88,   88,   88,
-      674,   88,  674,   88,  375,   88,   88,   88,  674,   88,
-      384,   88,  674,   88,   88,   88,  674,   88,  674,   88,
-      385,   88,   88,   88,  674,   88,  674,  674,  674,   88,
-       88,   88,   88,   88,  674,  386,  674,  674,   88,  674,
-       88,  674,   88,   88,   88,  674,   88,  674,  674,  674,
-       88,   88,   88,   88,   88,  387,  674,   88,   88,   88,
-      388,   88,   88,  674,   88,  389,  674,  674,   88,  674,
-       88,   88,   88,   88,  390,   88,   88,   88,   88,   88,
-       88,  674,  391,   88,  674,   88,  392,  393,  674,   88,
+      720,  720,  720,   97,  720,   97,   97,   97,   97,   97,
+       97,  383,   97,   97,   97,   97,  720,  380,   97,  720,
+       97,  720,  720,  385,   97,  720,   97,  720,   97,  720,
+       97,   97,   97,  384,   97,  720,  720,   97,  720,   97,
+      720,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+       97,   97,   97,  720,  387,  720,   97,  720,  720,  720,
+      720,  720,   97,  720,   97,  720,   97,  386,  720,   97,
+      720,   97,  324,  324,  324,  324,  324,  324,  324,   97,
+      720,   97,  720,   97,  397,   97,  720,  396,   97,  720,
+      720,  720,  720,   97,  398,   97,  720,   97,  720,   97,
 
-      674,   88,  674,   88,  674,   88,  674,   88,   88,   88,
-       88,   88,  674,  394,   88,  674,  674,  674,  674,  674,
-       88,   88,   88,   88,   88,   88,   88,  395,  674,   88,
-       88,  674,  674,  674,  674,  674,   88,  674,   88,  674,
-       88,   88,  397,  674,  396,   88,  674,   88,  674,  674,
-      674,   88,  674,   88,  674,   88,  674,   88,   88,   88,
-       88,   88,  674,  674,   88,  398,   88,  674,   88,  674,
-       88,  674,   88,  674,   88,  399,  400,   88,   88,   88,
-       88,  674,  674,   88,  674,  674,  674,  404,  674,   88,
-       88,   88,   88,   88,   88,  674,  674,   88,   88,   88,
+      399,   97,  720,   97,   97,   97,  720,   97,  720,   97,
+      391,   97,   97,   97,  720,   97,  401,   97,  720,   97,
+       97,   97,  720,   97,  720,   97,  402,   97,   97,   97,
+      720,   97,  720,  720,  720,   97,   97,   97,   97,   97,
+      720,  403,  720,  720,   97,  720,   97,  720,   97,   97,
+       97,  720,   97,  720,  720,  720,   97,   97,   97,   97,
+       97,  404,  720,   97,   97,   97,  405,   97,   97,  720,
+       97,  406,  720,  720,   97,  720,   97,   97,   97,   97,
+      407,   97,   97,   97,   97,   97,   97,  720,  408,   97,
+      720,   97,  409,  410,  720,   97,  720,   97,  720,   97,
 
-       88,  405,  674,  406,  674,  674,  674,   88,  674,   88,
-       88,   88,   88,  674,   88,  407,   88,   88,   88,   88,
-      408,  674,  674,  674,  674,  674,  674,   88,   88,  409,
-       88,   88,   88,  674,   88,   88,   88,   88,  410,  674,
-      674,  413,  674,  412,   88,   88,   88,   88,   88,   88,
-       88,  411,  674,   88,   88,  674,   88,  674,  674,  674,
-       88,  674,   88,  674,   88,  674,   88,   88,   88,   88,
-       88,  674,  674,  674,  674,   88,  674,   88,   88,   88,
-      674,   88,  674,  674,   88,  415,   88,  674,   88,  674,
-       88,  674,   88,  674,   88,   88,  416,   88,   88,  674,
+      720,   97,  720,   97,   97,   97,   97,   97,  720,  411,
+       97,  720,  720,  412,  720,  720,   97,   97,   97,   97,
+       97,   97,   97,  413,  720,   97,   97,  720,  720,  720,
+      720,  720,   97,  720,   97,  720,   97,   97,  415,  720,
+      414,   97,  720,   97,  720,  720,  720,   97,  720,   97,
+      720,   97,  720,   97,   97,   97,   97,   97,  720,  720,
+       97,  416,   97,  720,   97,  720,   97,  720,   97,  720,
+       97,  417,  418,   97,   97,   97,   97,  720,  720,   97,
+      720,  720,  720,  422,  720,   97,   97,   97,   97,   97,
+       97,  720,  720,   97,   97,   97,   97,  423,  720,  424,
 
-      674,  674,  674,   88,  674,   88,   88,   88,  674,   88,
-      674,  418,   88,  419,   88,  674,   88,  674,   88,  674,
-       88,  674,   88,   88,  420,   88,   88,  674,  674,  674,
-      674,   88,  674,   88,  674,   88,   88,   88,  674,   88,
-      674,  421,   88,  423,  674,  674,   88,   88,   88,   88,
-       88,  424,  425,   88,  674,   88,  674,   88,   88,   88,
-       88,   88,  674,  674,  674,  674,   88,  674,  674,  674,
-       88,   88,   88,  674,   88,  674,  674,   88,  428,   88,
-      674,   88,  426,   88,  674,   88,  674,   88,  674,   88,
-       88,   88,   88,   88,  674,  430,   88,  674,  674,  674,
+      720,  720,  720,   97,  720,   97,   97,   97,   97,  720,
+       97,  425,   97,   97,   97,   97,  426,  720,  720,  720,
+      720,  720,  720,   97,   97,  427,   97,   97,   97,   97,
+      720,  720,   97,   97,  720,   97,  720,  720,  429,   97,
+      720,   97,  720,   97,  720,   97,   97,   97,  428,   97,
+      431,  720,  720,  432,   97,  720,   97,   97,   97,  720,
+       97,  720,  720,  430,  720,   97,  720,   97,   97,   97,
+      720,   97,  720,  720,   97,  720,   97,  720,   97,  720,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  720,
+      720,   97,  434,   97,  720,   97,  720,   97,  720,   97,
 
-      674,  674,   88,   88,   88,   88,   88,   88,   88,  431,
-      674,   88,   88,  674,   88,  674,  674,  674,   88,  674,
-       88,  674,   88,  674,   88,  674,   88,   88,   88,   88,
-      440,  441,   88,   88,  674,  674,  674,  674,  674,   88,
-       88,   88,   88,   88,   88,  674,   88,  674,   88,  674,
-       88,   88,   88,  433,   88,   88,  674,  674,  442,   88,
-      674,   88,  674,  674,  674,   88,  674,  444,  674,   88,
-      674,   88,   88,   88,   88,   88,  674,  674,   88,  445,
-       88,  446,   88,  674,   88,  674,   88,  674,   88,   88,
-       88,   88,   88,  674,  674,   88,  447,   88,  674,   88,
+      720,   97,   97,  435,   97,   97,  720,  720,  720,  720,
+       97,  720,   97,   97,   97,  720,   97,  720,  437,   97,
+      438,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+       97,  439,   97,   97,  720,  720,  720,  720,   97,  720,
+       97,  720,   97,   97,   97,  720,   97,  720,  440,   97,
+      442,  720,  720,   97,   97,   97,   97,   97,  443,  444,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  720,
+      720,  720,  720,   97,  720,  720,  720,   97,   97,   97,
+      720,   97,  720,  720,   97,  447,   97,  720,   97,  445,
+       97,  720,   97,  720,   97,  720,   97,   97,   97,   97,
 
-      674,   88,  674,   88,  674,   88,   88,  448,   88,   88,
-      674,  674,  674,  674,   88,  674,   88,   88,   88,  450,
-       88,  674,  674,   88,  449,   88,  674,   88,  674,   88,
-      674,   88,  674,   88,  674,   88,   88,   88,  674,  674,
-       88,  451,   88,  452,  674,  674,   88,  674,  453,  674,
-       88,  674,   88,  674,   88,  674,   88,  674,   88,   88,
-       88,  454,   88,   88,  674,   88,  674,  674,  674,  674,
-      674,  674,   88,   88,   88,   88,   88,   88,   88,   88,
-      674,   88,   88,  674,  674,  455,  674,  674,   88,   88,
-       88,   88,   88,   88,   88,  674,  456,   88,   88,  458,
+       97,  720,  449,   97,  720,  720,  720,  720,  720,   97,
+       97,   97,   97,   97,   97,   97,  450,  720,   97,   97,
+      720,   97,  720,  720,  720,   97,  720,   97,  720,   97,
+      720,   97,  720,   97,   97,   97,   97,  460,  461,   97,
+       97,  720,  720,  720,  720,  720,   97,   97,   97,   97,
+       97,   97,  720,   97,  720,   97,  720,   97,   97,   97,
+      452,   97,   97,  720,  720,  462,   97,  720,   97,  720,
+      720,  720,   97,  720,  464,  720,   97,  720,   97,   97,
+       97,   97,   97,  720,  720,   97,  465,   97,  466,   97,
+      720,   97,  720,   97,  720,   97,   97,   97,   97,   97,
 
-       88,  457,  674,  674,   88,  674,   88,  674,   88,  674,
-       88,   88,   88,   88,   88,  462,  674,   88,  674,   88,
-      674,   88,  674,   88,  463,   88,  674,   88,  674,   88,
-       88,   88,   88,   88,  464,  674,   88,  674,  674,  674,
-      674,  674,   88,   88,   88,   88,   88,   88,  674,  674,
-      465,   88,   88,   88,   88,  467,  466,  674,  674,  674,
-      674,  674,  674,   88,   88,   88,   88,   88,   88,   88,
-      674,  674,   88,   88,  674,  674,  674,   88,  674,   88,
-      469,   88,  674,   88,  674,  468,  674,   88,   88,   88,
-       88,   88,  674,  674,  674,  674,   88,  674,   88,  674,
+      720,  720,   97,  467,   97,  720,   97,  720,   97,  720,
+       97,  720,   97,   97,  468,   97,   97,  720,  720,  720,
+      720,   97,  720,   97,   97,   97,  470,   97,  720,  720,
+       97,  469,   97,  720,   97,  720,   97,  720,   97,  720,
+       97,  720,   97,   97,   97,  720,  720,   97,  471,   97,
+      472,  720,  720,   97,  720,  473,  720,   97,  720,   97,
+      720,   97,  720,   97,   97,   97,   97,   97,  720,  475,
+       97,  720,   97,  720,   97,  720,  474,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,   97,  720,   97,
+      720,   97,  720,   97,  476,   97,  720,   97,   97,   97,
 
-       88,   88,   88,  674,   88,  471,  674,  470,   88,   88,
-       88,   88,   88,   88,  674,   88,   88,   88,  473,   88,
-       88,  674,   88,  674,  674,  674,   88,  674,  475,   88,
-       88,   88,   88,   88,  476,   88,   88,   88,   88,  674,
-       88,   88,  674,  478,  674,  674,  674,   88,   88,   88,
-       88,   88,   88,  674,   88,  477,   88,  674,   88,   88,
-       88,  674,   88,   88,  481,  674,   88,   88,  480,   88,
-      674,  674,  674,   88,  674,   88,   88,   88,   88,   88,
-       88,   88,   88,   88,   88,   88,  483,   88,   88,  674,
-       88,  674,  674,  674,   88,  674,   88,   88,   88,   88,
+       97,   97,  720,  720,   97,  720,   97,  720,   97,  720,
+       97,  478,   97,  720,   97,  477,   97,   97,   97,  479,
+       97,   97,  720,   97,  720,  483,  720,  720,  720,  720,
+       97,   97,   97,   97,   97,   97,   97,  720,  720,   97,
+       97,  720,   97,  484,  485,  720,   97,  720,   97,  720,
+       97,  720,   97,   97,   97,   97,   97,  720,  720,   97,
+      720,   97,  487,   97,  720,   97,  720,   97,  720,   97,
+      486,   97,   97,   97,   97,  488,  720,  720,   97,  720,
+       97,  489,  720,  720,   97,  720,   97,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,  720,  720,   97,
 
-       88,   88,   88,   88,   88,   88,   88,  485,   88,   88,
-      674,  674,  674,  674,  674,   88,  674,   88,   88,   88,
-       88,   88,   88,  494,   88,  674,  495,   88,  496,   88,
-      674,   88,  674,   88,  674,   88,  674,  674,  674,   88,
-       88,   88,   88,   88,  674,  498,  674,  674,   88,  674,
-       88,  674,   88,   88,   88,  674,   88,  674,  674,  674,
-       88,   88,  499,   88,   88,  500,   88,   88,  674,   88,
-      674,  674,   88,  501,   88,  674,   88,   88,   88,  674,
-       88,  674,  674,  674,   88,   88,   88,   88,   88,   88,
-       88,   88,  674,   88,  674,  674,   88,  502,   88,  674,
+      720,   97,  720,   97,  720,   97,   97,  490,  720,  491,
+       97,  720,   97,  720,  720,  720,   97,  720,   97,  720,
+       97,  720,   97,   97,   97,   97,   97,  720,  720,  492,
+      493,   97,  720,   97,   97,   97,  720,   97,  720,  495,
+       97,  720,   97,  720,   97,  720,   97,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,   97,  720,   97,
+      720,   97,  720,  497,  720,   97,  720,   97,   97,  498,
+       97,   97,  720,  720,  720,  720,   97,  720,   97,  720,
+       97,   97,   97,  720,  500,  720,  499,   97,  720,   97,
+      720,   97,  720,   97,  720,   97,  720,  720,  720,   97,
 
-       88,   88,   88,  503,   88,  674,  674,  674,   88,   88,
-       88,   88,   88,   88,   88,   88,  674,   88,  674,  674,
-       88,  674,  674,  674,   88,   88,   88,  674,   88,  674,
-      674,  674,  504,   88,  674,   88,   88,   88,  674,   88,
-      674,  674,  506,  505,   88,  674,   88,  674,   88,  674,
-       88,  674,   88,   88,   88,   88,   88,  674,  674,   88,
-      674,   88,  674,  507,  674,   88,  512,   88,  674,   88,
-       88,   88,   88,   88,  674,  674,  674,  674,   88,  674,
-       88,   88,   88,  674,   88,  674,  674,   88,  513,   88,
-      674,   88,  674,   88,  674,   88,  674,   88,   88,   88,
+       97,   97,  720,   97,   97,  503,  720,   97,   97,  502,
+       97,  720,  720,  720,   97,  720,   97,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,  505,   97,   97,
+      720,   97,  720,  720,  720,   97,  720,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,   97,   97,  507,   97,
+       97,  720,  720,  720,  720,  720,   97,  720,   97,   97,
+       97,   97,   97,   97,  517,   97,  720,  518,   97,  519,
+       97,  720,   97,  720,   97,  720,   97,  720,  720,  720,
+       97,   97,   97,   97,   97,  720,  521,  720,  720,   97,
+      720,   97,  720,   97,   97,   97,  720,   97,  720,  720,
 
-       88,   88,  674,  674,   88,  674,   88,  515,   88,  674,
-       88,  674,   88,  674,   88,  514,   88,   88,   88,   88,
-       88,  516,  674,   88,  674,  674,  674,  674,  674,   88,
-       88,   88,   88,   88,   88,   88,   88,  674,   88,   88,
-      674,  674,  674,  674,  674,   88,   88,   88,  518,   88,
-       88,   88,   88,  674,   88,   88,  674,  674,  674,  674,
-      674,  520,   88,   88,   88,   88,   88,  674,  674,   88,
-       88,   88,   88,  522,  674,   88,  674,  674,  674,   88,
-      517,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,  674,  524,   88,  674,   88,  674,  674,  525,
+      720,   97,   97,  522,   97,   97,  523,   97,   97,  720,
+       97,  720,  720,   97,  524,   97,  720,   97,   97,   97,
+      720,   97,  720,  720,  720,   97,   97,   97,   97,   97,
+       97,   97,   97,  720,   97,  720,  720,   97,  525,   97,
+      720,   97,   97,   97,  526,   97,  720,  720,  720,   97,
+       97,   97,   97,   97,   97,   97,   97,  720,   97,  720,
+      527,   97,  720,   97,  720,   97,   97,   97,  720,   97,
+      720,  720,  720,   97,   97,   97,   97,   97,   97,   97,
+       97,  528,   97,  720,  529,   97,  720,  530,  720,   97,
+       97,   97,  720,   97,  720,  720,  720,   97,   97,   97,
 
-       88,  674,   88,  674,   88,  674,   88,  674,   88,   88,
-       88,   88,  674,  537,  527,   88,  529,   88,  674,  674,
-      674,   88,  674,   88,  674,   88,  674,   88,   88,   88,
-       88,   88,  674,  674,   88,  674,   88,  674,   88,  674,
-       88,  538,   88,  674,   88,  674,   88,   88,   88,   88,
-      539,  674,  674,   88,  674,   88,  674,  674,  674,   88,
-      674,   88,  674,   88,  674,   88,   88,   88,   88,   88,
-      674,  541,  674,  674,   88,  674,   88,  674,   88,   88,
-       88,  674,  543,  674,  542,   88,  674,   88,  674,   88,
-       88,   88,  674,   88,  674,  674,  674,   88,   88,  544,
+      531,   97,   97,   97,   97,  720,   97,  720,  720,   97,
+      536,   97,  720,   97,   97,   97,  720,   97,  720,  720,
+      720,   97,   97,   97,   97,   97,   97,   97,   97,  537,
+       97,  720,  720,   97,  720,   97,  720,   97,  720,   97,
+      720,   97,  720,  720,  720,   97,   97,   97,   97,   97,
+      720,  539,  538,  720,   97,  720,   97,  720,   97,   97,
+       97,  720,   97,  720,  720,  720,   97,   97,   97,   97,
+       97,   97,  720,   97,  540,   97,   97,  541,   97,   97,
+      720,  720,   97,  720,  720,  720,   97,  720,   97,   97,
+       97,   97,   97,   97,  543,   97,   97,   97,   97,  720,
 
-       88,   88,   88,  545,   88,   88,   88,  674,   88,   88,
-      674,  546,  674,  674,  674,   88,   88,   88,   88,   88,
-       88,  674,   88,  674,   88,  674,   88,   88,   88,   88,
-       88,  674,   88,  674,  674,   88,  547,  674,  674,   88,
-      674,   88,   88,   88,   88,  674,   88,   88,   88,  674,
-      552,   88,  674,   88,  674,  674,  674,   88,  674,   88,
-      674,   88,  674,   88,   88,   88,   88,   88,  674,  674,
-       88,  674,   88,  674,   88,  674,   88,  674,   88,  674,
-       88,   88,   88,   88,   88,  674,  674,  674,  674,   88,
-      674,   88,   88,   88,  674,   88,  555,  674,   88,  553,
+       97,   97,  720,  720,  720,  720,  720,  545,  720,   97,
+       97,   97,   97,   97,   97,  720,   97,  547,  720,   97,
+      720,   97,  720,   97,  542,   97,  720,   97,  720,   97,
+      720,   97,   97,   97,  720,   97,  720,  720,  720,   97,
+       97,   97,   97,   97,  720,  549,  720,  720,   97,  720,
+       97,  720,   97,  550,   97,  720,   97,  720,  720,  563,
+       97,   97,   97,   97,   97,  720,  552,  720,  720,   97,
+      554,   97,  720,   97,   97,   97,  720,   97,  720,  720,
+      720,   97,   97,   97,   97,   97,   97,   97,   97,  720,
+       97,  720,  720,   97,  564,   97,  565,   97,  720,   97,
 
-       88,  674,   88,  674,   88,  560,   88,  674,   88,   88,
-       88,   88,   88,  674,  674,  674,  558,   88,  674,   88,
-       88,   88,  674,   88,  674,  674,   88,  674,   88,  674,
-       88,  674,   88,  674,   88,  674,   88,   88,   88,   88,
-       88,  674,  674,   88,  674,   88,  674,   88,  674,  562,
-      674,   88,  674,  564,   88,   88,   88,   88,  674,  674,
-      674,  674,   88,  674,   88,   88,   88,  674,   88,  674,
-      674,  572,  674,   88,  674,   88,   88,   88,  573,   88,
-      674,  674,   88,  674,   88,  674,   88,  674,   88,  674,
-       88,  674,   88,   88,   88,   88,   88,  674,  674,  674,
+      720,   97,  720,   97,  720,   97,   97,   97,  720,   97,
+      720,   97,  720,   97,   97,   97,  720,   97,  720,  567,
+      720,   97,   97,   97,   97,   97,  720,  569,  720,  568,
+       97,  720,   97,  720,   97,   97,   97,  720,   97,  720,
+      720,  572,   97,   97,  570,   97,   97,   97,  571,   97,
+       97,   97,  720,   97,   97,  720,   97,  720,  720,  720,
+       97,  720,   97,   97,   97,   97,   97,   97,   97,   97,
+       97,   97,   97,  720,  573,   97,  720,   97,  720,  720,
+      720,   97,  720,   97,  574,   97,  720,   97,   97,   97,
+       97,   97,  720,  720,   97,  720,   97,  579,   97,  720,
 
-      674,   88,  674,   88,   88,   88,  575,   88,  674,  674,
-      574,  674,   88,  674,   88,   88,   88,  674,   88,  674,
-      576,   88,  674,   88,  674,   88,  674,   88,  674,   88,
-      674,   88,  674,  577,   88,   88,   88,   88,  578,  674,
-       88,  674,  674,  674,  674,  674,   88,  579,   88,   88,
-       88,   88,   88,   88,  674,   88,   88,  674,  674,  674,
-      584,  674,   88,   88,   88,   88,   88,   88,  583,   88,
-       88,   88,   88,  674,  674,  674,  586,  674,  674,   88,
-       88,   88,  589,   88,   88,   88,  674,  674,   88,   88,
-      674,   88,  674,  674,  674,   88,  674,   88,  591,   88,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  720,
+      720,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+      720,   97,   97,   97,   97,   97,  720,  720,   97,  720,
+       97,  720,   97,  720,   97,  580,   97,  720,   97,   97,
+       97,   97,   97,  720,  720,  720,  720,   97,  720,   97,
+       97,   97,  720,   97,  583,  720,   97,  581,   97,  720,
+       97,  720,   97,  588,   97,  720,   97,   97,   97,   97,
+       97,  720,  720,  720,  586,   97,  720,   97,   97,   97,
+      720,   97,  720,  720,   97,  720,   97,  720,   97,  720,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  720,
 
-      674,   88,   88,   88,   88,   88,  674,  674,  674,  592,
-       88,  674,   88,  674,   88,  674,   88,  570,  570,  570,
-      674,   88,  674,  674,  674,  674,   88,   88,  674,  599,
-      599,  599,  599,  599,  599,  599,   88,   88,   88,  602,
-       88,   88,   88,   88,  674,   88,   88,  674,  674,  601,
-      674,  674,   88,   88,   88,   88,   88,   88,   88,   88,
-      674,   88,   88,  674,  674,  674,  674,  674,   88,   88,
-       88,   88,   88,   88,   88,   88,  603,   88,   88,  674,
-      674,  674,  604,  674,   88,   88,   88,   88,   88,   88,
-       88,  674,  674,   88,   88,  674,  674,  674,   88,  674,
+      720,   97,  720,   97,  720,   97,  720,  590,  720,   97,
+      720,  592,   97,   97,   97,   97,  720,  720,  720,  720,
+       97,  720,   97,   97,   97,  720,   97,  720,  720,  601,
+      720,   97,  720,   97,   97,   97,  602,   97,  720,  720,
+       97,  720,   97,  720,   97,  720,   97,  720,   97,  720,
+       97,   97,   97,   97,   97,  720,  720,  720,  720,   97,
+      720,   97,   97,   97,  604,   97,  720,  720,  603,  720,
+       97,  720,   97,   97,   97,  720,   97,  720,  605,   97,
+      720,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+      720,  606,   97,   97,   97,  607,  720,   97,   97,  608,
 
-       88,  674,   88,  674,   88,  674,   88,  674,   88,   88,
-       88,  608,   88,  674,   88,  674,   88,   88,  610,  674,
-       88,  613,   88,  674,   88,   88,   88,  674,   88,  615,
-       88,  674,   88,   88,   88,  674,   88,  616,  674,  674,
-       88,   88,   88,  674,   88,  674,  674,   88,   88,   88,
-      599,  599,  599,  599,  599,  599,  599,   88,   88,  624,
-       88,   88,   88,   88,  674,  674,   88,   88,  674,  674,
-      674,   88,  674,   88,  674,   88,  674,   88,  674,  674,
-      674,   88,   88,   88,   88,   88,  674,  674,  622,  625,
-       88,  674,   88,  674,   88,   88,  629,  674,   88,  631,
+       97,  720,  720,  720,   97,  720,   97,   97,   97,   97,
+      609,   97,   97,   97,   97,   97,   97,  720,  720,   97,
+      720,  720,  720,   97,  720,   97,  720,   97,  720,   97,
+      720,  613,  720,   97,   97,   97,  614,   97,   97,   97,
+      720,  720,   97,  720,  720,  615,  617,  720,   97,   97,
+       97,   97,   97,   97,   97,  720,  720,   97,   97,  720,
+      720,  720,   97,  720,   97,  720,  620,  720,   97,  720,
+       97,  720,   97,   97,   97,  622,   97,  720,  720,  720,
+       97,   97,   97,   97,   97,  720,  720,  720,  623,   97,
+      720,  720,  720,   97,  720,   97,  720,   97,  598,  598,
 
-      674,  674,   88,   88,   88,   88,   88,   88,   88,   88,
-      636,   88,  674,  634,   88,  674,  674,  674,   88,   88,
-       88,  674,   88,  637,  674,  674,  674,   88,  674,   88,
-      674,   88,  674,   88,  623,  623,  623,  674,   88,  674,
-      674,  674,  674,   88,   88,  674,  599,  599,  599,  599,
-      599,  599,  599,   88,   88,   88,   88,   88,   88,   88,
-      674,  643,   88,   88,  674,   88,  674,  644,  674,   88,
-      674,   88,  674,   88,  674,   88,   88,   88,   88,   88,
-      674,  674,   88,  648,   88,  674,   88,  674,   88,  674,
-       88,  674,   88,   88,   88,   88,   88,  674,  674,  651,
+      598,  720,   97,  720,  720,  720,  720,   97,   97,  720,
+      630,  630,  630,  630,  630,  630,  630,   97,   97,   97,
+      634,   97,   97,   97,   97,  720,   97,   97,  720,  720,
+      633,  720,  720,   97,   97,   97,   97,   97,   97,   97,
+       97,  720,   97,   97,  720,  720,  720,  720,  720,   97,
+       97,   97,   97,   97,   97,   97,  720,  635,   97,   97,
+      720,   97,  720,  720,  720,   97,  720,   97,  636,   97,
+      720,   97,   97,   97,   97,   97,  720,  720,   97,  637,
+       97,  720,   97,  720,   97,  720,   97,  720,   97,   97,
+       97,   97,   97,  720,  720,  720,  720,   97,  720,   97,
 
-      653,   88,  674,   88,  674,   88,   88,   88,  659,   88,
-      674,  674,   88,  674,  674,  674,   88,   88,   88,   88,
-       88,   88,  674,   88,  674,   88,  674,   88,   88,   88,
-      674,   88,   88,  674,  674,   88,   88,  674,  664,  674,
-      661,  674,   88,  674,   88,   88,   88,   88,  674,   88,
-      674,   88,  674,  674,   88,  658,  658,  658,  674,  674,
-      674,  674,  674,  674,   88,   88,  674,  599,  599,  599,
-      599,  599,  599,  599,   88,   88,   88,   88,   88,   88,
-       88,   88,  674,   88,   88,  674,  667,  674,  674,  674,
-       88,   88,   88,   88,   88,   88,  671,   88,  674,   88,
+       97,  641,  720,   97,  720,  720,   97,  720,   97,  720,
+       97,  720,   97,  642,   97,  720,   97,   97,  644,   97,
+       97,  720,  720,   97,  647,   97,  720,   97,  720,   97,
+      649,   97,  720,   97,   97,   97,   97,   97,  720,  720,
+      720,  650,   97,  720,   97,  720,   97,  720,   97,  720,
+      720,   97,   97,   97,  630,  630,  630,  630,  630,  630,
+      630,   97,   97,  659,   97,   97,   97,   97,   97,  720,
+       97,   97,  720,  720,  720,  720,  720,   97,   97,   97,
+      660,   97,   97,   97,  720,  720,   97,   97,  720,  720,
+      720,  720,  656,   97,   97,   97,  720,   97,  720,  720,
 
-       88,  674,  674,  674,  674,  674,  674,   88,  674,   88,
-      674,   88,  674,  674,  674,  674,   88,   50,   50,   50,
-       50,   50,   50,   50,   50,   50,   50,   50,   50,   54,
-       54,   54,   54,   54,   54,   54,   54,   54,   54,   54,
-       54,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   61,   61,   61,   61,   61,   61,   61,
-       61,   61,   61,   61,   61,   67,   67,   67,   67,   67,
-       67,   67,   67,   67,   67,   67,   67,   74,   74,   74,
-      674,   74,   74,   74,   74,   74,   74,   74,   74,   81,
-       81,  674,  674,   81,  674,   81,  147,  674,  147,  150,
+       97,  661,   97,  720,   97,  720,   97,  720,   97,  720,
+       97,  665,  666,   97,   97,   97,  720,  720,   97,   97,
+      720,   97,  668,  673,  720,   97,  720,   97,   97,   97,
+       97,   97,   97,   97,   97,   97,  671,   97,   97,  720,
+       97,  720,  674,  720,  720,  720,  720,  720,   97,  720,
+       97,  720,   97,  657,  657,  657,  720,   97,  720,  720,
+      720,  720,   97,  720,  720,  630,  630,  630,  630,  630,
+      630,  630,   97,   97,   97,  720,   97,  720,  720,  720,
+      681,   97,  720,   97,   97,   97,  720,   97,  720,  720,
+       97,  682,   97,  720,   97,  720,   97,  720,   97,  720,
 
-      150,  674,  150,  150,  151,  151,  674,  151,  151,  151,
-      674,  151,  151,  151,  151,  151,  154,  154,  154,  674,
-      154,  154,  154,  154,  154,  154,  154,  154,  156,  156,
-      156,  156,  156,  156,  156,  156,  674,  156,  156,  158,
-      674,  674,  158,  674,  158,  158,  158,  158,  158,  158,
-      162,  162,  674,  162,  162,  163,  163,  674,  163,  163,
-       94,   94,  674,   94,   94,   13,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+       97,   97,   97,   97,   97,  720,  720,  683,  720,   97,
+      720,   97,   97,   97,  720,   97,  720,  720,  720,  720,
+       97,  720,   97,   97,   97,  720,   97,  720,  720,   97,
+      687,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+       97,   97,   97,   97,  720,  720,  690,  692,   97,  720,
+       97,  720,   97,   97,   97,  699,   97,  720,  720,   97,
+      720,  720,  720,   97,   97,   97,   97,   97,   97,  700,
+       97,  720,   97,  720,   97,   97,   97,   97,   97,  720,
+       97,  720,  720,   97,  720,  720,  720,   97,  720,   97,
+       97,   97,   97,  720,   97,   97,   97,  720,  705,   97,
 
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674
+      702,  720,  720,  720,  720,   97,  720,   97,  720,   97,
+      697,  697,  697,  720,   97,  720,  720,  720,  720,   97,
+      720,  720,  630,  630,  630,  630,  630,  630,  630,   97,
+       97,   97,  720,   97,  720,  720,   97,  720,   97,  720,
+       97,  709,   97,  710,   97,  720,   97,   97,   97,   97,
+       97,  720,  720,  720,  720,   97,  720,   97,   97,   97,
+      720,   97,  720,  714,   97,  720,   97,  720,   97,  720,
+       97,  720,   97,  720,  717,   97,   97,   97,   97,  720,
+      720,   97,  720,   97,  720,   97,  720,   97,  720,   97,
+      720,   97,  720,   97,   97,   97,  720,  720,  720,  720,
+
+       97,   54,   54,   54,   54,   54,   54,   54,   54,   54,
+       54,   54,   54,   58,   58,   58,   58,   58,   58,   58,
+       58,   58,   58,   58,   58,   62,   62,   62,   62,   62,
+       62,   62,   62,   62,   62,   62,   62,   65,   65,   65,
+       65,   65,   65,   65,   65,   65,   65,   65,   65,   74,
+       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
+       74,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   83,   83,   83,  720,   83,   83,   83,
+       83,   83,   83,   83,   83,   90,   90,  720,  720,   90,
+      720,   90,  156,  720,  156,  159,  159,  720,  159,  159,
+
+      160,  160,  720,  160,  160,  160,  720,  160,  160,  160,
+      160,  160,  163,  163,  163,  720,  163,  163,  163,  163,
+      163,  163,  163,  163,  165,  165,  165,  165,  165,  165,
+      165,  165,  720,  165,  165,  167,  720,  720,  167,  167,
+      167,  167,  167,  167,  167,  167,  168,  720,  720,  168,
+      168,  168,  168,  168,  168,  168,  168,  170,  720,  720,
+      170,  720,  170,  170,  170,  170,  170,  170,  174,  174,
+      720,  174,  174,  175,  175,  720,  175,  175,  103,  103,
+      720,  103,  103,   15,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720
     } ;
 
-static yyconst short int yy_chk[4245] =
+static yyconst short int yy_chk[4563] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1213,485 +1274,521 @@
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    3,    3,
         4,    4,    5,    6,    7,    9,    3,    7,    4,    5,
-        6,    8,    5,    6,    8,   10,  459,   11,   11,   11,
+        6,    8,    5,    6,    8,   10,   17,   17,   17,   18,
 
-       78,  143,   11,    9,  164,  669,    9,   12,   12,   12,
-      164,   70,   12,   10,  143,  459,   10,   15,   15,   15,
-       16,   16,   16,   15,  378,   70,   16,   20,   20,   20,
-       24,   78,   24,   20,   22,  378,  148,   22,  148,   20,
-       20,   22,   22,   22,   22,   22,   22,   26,   26,   26,
-       26,   26,   26,   26,  665,   36,   70,  149,    9,  149,
-        9,   68,   68,   68,  663,   36,   31,   36,   10,   36,
-       10,   11,   31,   11,   36,  238,   31,   33,   31,   31,
-       31,   12,  238,   12,   19,   31,  662,   33,   33,   33,
-      239,   33,   69,   69,   69,  660,   33,  239,   19,   33,
+       18,   18,   17,    9,  152,   18,    9,   26,  176,   26,
+       13,   13,   13,   10,  176,   13,   10,  152,   22,   22,
+       22,   14,   14,   14,   22,   24,   14,  157,   24,  157,
+       22,   22,   24,   24,   24,   24,   24,   24,   28,   28,
+       28,   28,   28,   28,   28,   34,  253,  253,   34,   77,
+       77,   77,   78,   78,   78,   34,   87,   34,    9,   34,
+        9,   82,   82,   82,   34,  158,  480,  158,   10,  716,
+       10,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   13,  480,   13,   87,   38,   79,
+      326,   11,   11,   11,   11,   14,  326,   14,   38,   11,
 
-      656,   19,   19,   19,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19,  598,  598,   19,
-       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
-       19,   19,   29,  655,  492,   29,   29,   29,   29,   29,
-       29,   29,   73,   73,   73,  492,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,  159,  159,  159,   29,   29,   29,   29,   29,
+       38,   32,   38,   79,   32,  325,  712,   38,   32,  325,
+      250,   32,   32,   32,   32,   32,   41,  250,  708,   33,
+       32,   11,   11,   11,   32,   33,   41,  328,   41,   33,
+       41,   33,   33,   33,   79,   41,  706,  328,   33,   92,
+       92,   92,   92,   92,   92,   92,   11,   11,   11,   12,
+       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   41,  395,   35,  171,  171,  171,  395,   12,
+       12,   12,   12,  704,   35,   35,   35,   12,   35,  169,
+      169,  327,  251,   35,   42,   42,   35,  327,   42,  251,
+      169,   36,   36,  703,   42,   48,   42,  456,   42,   12,
 
-       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
-       29,   29,   29,   29,   29,   29,   29,   30,  311,  312,
-       30,  652,  311,   32,   30,  312,   32,   30,   30,   30,
-       30,   30,  650,   32,  376,   32,   30,   32,   34,   34,
-       30,  376,   32,  437,  313,  377,  646,   35,  438,   34,
-      313,   34,  438,   34,  641,   34,  437,   35,   34,   35,
-      377,   35,   37,   37,  534,   37,   35,  439,  534,  439,
-      640,  491,  536,   37,   37,   37,  639,   37,  493,   35,
-       37,  493,   37,   38,   38,   39,  491,  536,  571,  638,
-       35,   38,  571,  569,   38,   39,   38,   39,   38,   39,
+       12,   12,   36,   42,   36,   48,   36,   48,   36,   48,
+      456,   36,  392,   42,   48,  701,  516,   39,   39,  392,
+       39,  393,  394,  516,   12,   12,   12,   21,   39,   39,
+       39,   48,   39,  394,  457,   39,  393,   39,  457,  559,
+      458,   21,  458,  559,   21,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
+      562,  698,   21,   21,   21,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
+       21,   21,   21,   21,   21,   31,  514,  562,   31,   31,
 
-      569,   40,   40,   38,   39,   40,   41,   41,  621,   41,
-      621,   40,  635,   40,  633,   40,  632,   41,  628,   41,
-       40,   41,   42,   41,  627,   42,   41,   80,   80,   80,
-       40,   39,   42,   80,   42,   43,   42,  626,   43,   80,
-       80,   42,   43,  620,  619,   43,  618,   43,  617,   43,
-       41,  614,  612,   43,   43,   44,  611,  609,   43,  607,
-      606,   44,   44,  605,  597,   45,  535,  535,  535,  596,
-      595,  593,   44,  590,   44,   45,   44,   45,   44,   45,
-      588,   44,  587,   45,   45,   44,  585,   46,   47,  582,
-      581,  580,  568,  567,   44,   47,  566,   46,   47,   46,
+       31,   31,   31,   31,   31,  515,  695,  514,  515,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,  629,  629,  694,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       37,  655,  513,  655,  691,   40,   40,  560,  560,  560,
+       37,  561,   37,   40,   37,  597,   40,  513,   40,   37,
+       40,  689,  597,  685,  680,   40,  561,   43,   43,  599,
+       43,  678,   37,  599,  677,  676,   44,  675,   43,   44,
 
-       47,   46,   47,  565,  535,   45,   46,   47,   48,   48,
-       48,   48,   48,   48,   48,  563,  559,  557,  556,   48,
-      600,  600,  600,   46,   83,   83,   83,   83,   83,   83,
-       83,  554,  550,  549,   48,  548,  533,   88,   89,   48,
-       86,   86,   86,   86,   86,   86,   86,   88,   89,   88,
-       89,   88,   89,   90,   91,   89,   88,   89,  600,  642,
-      642,  642,  532,   90,   91,   90,   91,   90,   91,   92,
-      531,  530,   90,   91,  528,   93,  526,   91,  523,   92,
-      521,   92,  519,   92,  517,   93,   95,   93,   92,   93,
-      511,   95,   96,   93,   93,  510,   95,  642,   95,  509,
+       43,  672,   43,   37,   43,  560,   44,   43,   44,   45,
+       44,  670,   45,  669,  664,   44,   45,  663,   46,   45,
+      662,   45,  658,   45,   46,   46,  654,   45,   45,  653,
+      652,   43,   45,   47,  651,   46,  648,   46,  646,   46,
+      645,   46,  643,   47,   46,   47,   49,   47,   46,  640,
+      639,   47,   47,   49,  638,  632,   49,   46,   49,  628,
+       49,  631,  631,  631,  627,   49,   50,   50,   50,   50,
+       50,   50,   50,   47,   89,   89,   89,   50,  626,  624,
+       89,   97,  621,  619,  618,  616,   89,   89,  612,  611,
+      610,   97,   50,   97,  600,   97,  596,   50,   74,  631,
 
-       95,  508,   96,   97,   96,   95,   96,  497,  490,  489,
-       96,   96,  488,   97,   98,   97,  487,   97,  484,  482,
-       99,  479,   97,  474,   98,  472,   98,   98,   98,  461,
-       99,  460,   99,   98,   99,  100,  100,  443,  436,   99,
-      435,  101,  101,  434,  433,  432,  100,  429,  100,  100,
-      100,  427,  101,  102,  101,  100,  101,  422,  417,  414,
-      403,  101,  402,  102,  102,  102,  103,  102,  401,  104,
-      103,  383,  102,  374,  373,  372,  103,  370,  103,  104,
-      103,  104,  366,  104,  364,  103,  106,  106,  104,  105,
-      105,  105,  359,  354,  350,  340,  106,  107,  106,  105,
+       97,  595,   74,   74,   74,   74,   74,   74,   74,   74,
+       74,   95,   95,   95,   95,   95,   95,   95,   74,   74,
+       74,   74,   98,   99,  178,  178,  178,  178,  178,  178,
+      178,  594,   98,   99,   98,   99,   98,   99,  593,   98,
+      591,   98,   99,  100,  101,  587,  585,  584,   74,   74,
+       74,  582,  577,  100,  101,  100,  101,  100,  101,  102,
+      576,  575,  100,  101,  558,  557,  100,  556,  555,  102,
+      553,  102,  551,  102,   74,   75,  548,  102,  102,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,  546,  104,
+      544,  542,  105,  535,  104,   75,   75,   75,   75,  104,
 
-      106,  105,  339,  105,  106,  106,  338,  107,  105,  107,
-      108,  107,  319,  111,  308,  307,  107,  306,  300,  289,
-      108,  111,  108,  108,  108,  284,  280,  112,  269,  108,
-      112,  111,  268,  111,  241,  111,  237,  112,  113,  112,
-      111,  112,  233,  232,  114,  114,  112,  231,  113,  227,
-      113,  215,  113,  209,  114,  115,  114,  113,  114,  205,
-      194,  114,  114,  114,  193,  115,  116,  115,  115,  115,
-      165,  161,  117,  157,  115,  147,  116,  142,  116,  139,
-      116,  129,  117,  118,  117,  116,  117,  124,  116,  119,
-      110,  117,  109,  118,   87,  118,  120,  118,   84,  121,
+      534,  104,  105,  104,  105,  106,  105,  533,  104,  532,
+      105,  105,   75,  520,  512,  106,  511,  106,  107,  106,
+      510,  509,  506,  504,  106,   75,   75,   75,  107,  108,
+      107,  107,  107,  679,  679,  679,  501,  107,  496,  108,
+      494,  108,  482,  108,  109,  109,  481,  463,  108,  459,
+      455,   75,  110,  110,  454,  109,  453,  109,  109,  109,
+      452,  451,  448,  110,  109,  110,  111,  110,  446,  112,
+      441,  679,  110,  112,  436,  433,  111,  111,  111,  112,
+      111,  112,  113,  112,  421,  111,  420,  419,  112,  400,
+      390,  389,  113,  388,  113,  386,  113,  114,  114,  114,
 
-       81,   76,  118,   75,  120,   72,  120,   63,  120,  121,
-      120,  121,  122,  121,   60,  120,   57,  121,  121,   56,
-      123,   53,  122,  125,  122,   27,  122,   23,   18,   17,
-      123,  122,  123,  125,  123,  125,  126,  125,  123,  123,
-       14,  125,  125,   13,    0,    0,  126,  127,  126,    0,
-      126,    0,    0,    0,    0,  126,  126,  127,    0,  127,
-      128,  127,    0,  128,    0,    0,  127,  128,    0,    0,
-      128,    0,  128,    0,  128,  130,  130,    0,    0,  128,
-        0,    0,  131,    0,    0,    0,  130,    0,  130,    0,
-      130,    0,  131,  132,  131,  130,  131,  131,    0,  133,
+      116,  113,  382,  115,  115,  380,  375,  114,  370,  114,
+      116,  114,  116,  115,  116,  115,  114,  115,  117,  116,
+      366,  115,  115,  355,  354,  120,  353,  334,  117,  322,
+      117,  117,  117,  120,  321,  320,  121,  117,  314,  121,
+      303,  298,  294,  120,  122,  120,  121,  120,  121,  283,
+      121,  282,  120,  255,  122,  121,  122,  254,  122,  123,
+      123,  249,  245,  122,  244,  243,  239,  227,  221,  123,
+      124,  123,  217,  123,  206,  205,  123,  123,  123,  177,
+      124,  125,  124,  124,  124,  173,  168,  126,  166,  124,
+      156,  125,  151,  125,  148,  125,  138,  126,  127,  126,
 
-      131,  131,    0,  132,    0,  132,    0,  132,    0,  133,
-      134,  133,  132,  133,  135,  133,    0,  132,  133,    0,
-      134,    0,  134,    0,  134,  135,  136,    0,    0,  134,
-        0,  136,    0,    0,    0,  135,  136,  135,  136,  135,
-      136,  137,  138,    0,  135,  136,    0,    0,    0,    0,
-        0,  137,  138,  137,  138,  137,  138,  140,  141,  141,
-      137,  138,  141,    0,  140,    0,    0,  140,  141,  140,
-      141,  140,  141,  144,    0,    0,  140,  141,    0,    0,
-        0,    0,    0,  144,    0,  144,    0,  144,  146,  146,
-      146,  144,  144,  145,  145,  145,  145,  145,  145,  145,
+      125,  126,  133,  125,  128,  119,  126,  118,  127,   96,
+      127,  129,  127,   93,  130,   90,   85,  127,   84,  129,
+       81,  129,   67,  129,  130,  129,  130,  131,  130,   64,
+      129,   61,  130,  130,   60,  132,   57,  131,  134,  131,
+       53,  131,   51,   29,   25,  132,  131,  132,  134,  132,
+      134,  135,  134,  132,  132,   20,  134,  134,   19,   16,
+       15,  135,  136,  135,    0,  135,    0,    0,    0,    0,
+      135,  135,  136,    0,  136,  137,  136,    0,  137,    0,
+        0,  136,  137,    0,    0,  137,    0,  137,    0,  137,
+      139,  139,    0,    0,  137,    0,    0,  140,    0,    0,
 
-      146,  146,  146,  146,  146,  146,  146,  166,  166,  166,
-      166,  166,  166,  166,    0,  169,    0,    0,  169,    0,
-        0,    0,    0,    0,    0,  169,  146,  169,  170,  169,
-        0,  145,    0,  169,  169,    0,  171,    0,  170,  172,
-      170,    0,  170,    0,    0,    0,  171,  170,  171,  172,
-      171,  172,  173,  172,    0,  171,    0,    0,  172,    0,
-      174,    0,  173,  175,  173,  173,  173,  174,    0,    0,
-      174,  173,  174,  175,  174,  175,  176,  175,    0,  174,
-        0,    0,  175,    0,  177,    0,  176,    0,  176,    0,
-      176,    0,  178,  176,  177,  176,  177,    0,  177,    0,
+        0,  139,    0,  139,    0,  139,    0,  140,  141,  140,
+      139,  140,  140,    0,  142,  140,  140,    0,  141,    0,
+      141,    0,  141,    0,  142,  143,  142,  141,  142,  144,
+      142,    0,  141,  142,    0,  143,    0,  143,    0,  143,
+      144,  145,    0,    0,  143,    0,  145,    0,    0,    0,
+      144,  145,  144,  145,  144,  145,  146,  147,    0,  144,
+      145,    0,    0,    0,    0,    0,  146,  147,  146,  147,
+      146,  147,  149,  150,  150,  146,  147,  150,    0,  149,
+        0,    0,  149,  150,  149,  150,  149,  150,  153,    0,
+        0,  149,  150,    0,    0,    0,    0,    0,  153,    0,
 
-      179,    0,  178,  177,  178,    0,  178,  179,  178,    0,
-      179,  178,  179,  180,  179,    0,    0,    0,    0,  179,
-        0,  181,    0,  180,  182,  180,    0,  180,    0,    0,
-      180,  181,  180,  181,  182,  181,  182,    0,  182,    0,
-      181,  182,  182,  182,  183,  183,  184,    0,    0,  184,
-        0,    0,  183,    0,    0,  183,  184,  183,  184,  183,
-      184,  185,    0,    0,  183,  184,    0,  186,    0,    0,
-        0,  185,    0,  185,  185,  185,    0,  186,  187,  186,
-      185,  186,    0,    0,  188,    0,  186,  188,  187,  187,
-      187,    0,  187,    0,  188,  189,  188,  187,  188,    0,
+      153,    0,  153,  155,  155,  155,  153,  153,  154,  154,
+      154,  154,  154,  154,  154,  155,  155,  155,  155,  155,
+      155,  155,    0,    0,  181,  182,    0,  181,    0,    0,
+        0,    0,    0,    0,  181,  182,  181,  182,  181,  182,
+      183,  155,  181,  181,  182,    0,  154,    0,  184,    0,
+      183,  185,  183,    0,  183,    0,    0,    0,  184,  183,
+      184,  185,  184,  185,  185,  185,  186,  184,    0,  187,
+      185,    0,  188,  186,    0,    0,  186,    0,  186,  187,
+      186,  187,  188,  187,  188,  186,  188,  189,  187,  188,
+        0,  188,    0,  190,    0,    0,    0,  189,    0,  189,
 
-        0,  190,    0,  188,  190,  189,    0,  189,  189,  189,
-        0,  190,  191,  190,  189,  190,    0,    0,    0,    0,
-      190,    0,  191,  192,  191,    0,  191,    0,    0,  191,
-        0,  191,    0,  192,  192,  192,  195,  192,    0,    0,
-        0,    0,  192,    0,  196,    0,  195,  197,  195,    0,
-      195,    0,    0,  195,  196,  195,  196,  197,  196,  197,
-      197,  197,  198,  196,    0,  199,  197,    0,  200,    0,
-        0,  200,  198,    0,  198,  199,  198,  199,  200,  199,
-      200,  198,  200,  199,  199,  201,  202,  200,    0,  203,
-        0,    0,  201,    0,    0,    0,  202,    0,  202,  203,
+        0,  189,    0,  190,  191,  190,  189,  190,    0,  190,
+      192,  191,  190,    0,  191,    0,  191,    0,  191,    0,
+      192,  193,  192,  191,  192,    0,    0,  192,    0,  192,
+        0,  193,  194,  193,    0,  193,    0,    0,    0,    0,
+      193,    0,  194,    0,  194,    0,  194,  195,  195,  194,
+      194,  194,    0,    0,  196,  195,    0,  196,  195,    0,
+      195,    0,  195,    0,  196,  197,  196,  195,  196,    0,
+        0,  198,    0,  196,    0,  197,    0,  197,  197,  197,
+        0,  198,  199,  198,  197,  198,    0,    0,  200,    0,
+      198,  200,  199,  199,  199,    0,  199,    0,  200,  201,
 
-      202,  203,  201,  203,  201,  202,  201,  204,  203,    0,
-      206,  201,    0,  206,    0,    0,    0,  204,    0,  204,
-      206,  204,  206,    0,  206,  207,  204,    0,  207,  206,
-        0,  208,    0,    0,    0,  207,    0,  207,  208,  207,
-        0,  208,  210,  208,  207,  208,    0,    0,    0,    0,
-      208,    0,  210,  211,  210,    0,  210,    0,    0,  212,
-      210,  210,    0,  211,    0,  211,    0,  211,    0,  212,
-      213,  212,  211,  212,    0,    0,  212,    0,  212,    0,
-      213,  214,  213,    0,  213,    0,    0,  213,    0,  213,
-        0,  214,  216,  214,    0,  214,    0,  217,  217,    0,
+      200,  199,  200,    0,    0,  202,    0,  200,  202,  201,
+        0,  201,  201,  201,    0,  202,  203,  202,  201,  202,
+        0,    0,    0,    0,  202,    0,  203,  204,  203,    0,
+      203,    0,    0,  203,    0,  203,    0,  204,  204,  204,
+      207,  204,    0,    0,    0,    0,  204,    0,  208,    0,
+      207,  209,  207,    0,  207,    0,    0,  207,  208,  207,
+      208,  209,  208,  209,  209,  209,  210,  208,    0,  211,
+      209,    0,  212,    0,    0,  212,  210,    0,  210,  211,
+      210,  211,  212,  211,  212,  210,  212,  211,  211,  213,
+      214,  212,    0,  215,    0,    0,  213,    0,    0,    0,
 
-      214,  214,  216,    0,  216,    0,  216,    0,  217,  218,
-      217,  216,  217,    0,    0,  219,    0,  217,    0,  218,
-        0,  218,    0,  218,    0,  219,    0,  219,  218,  219,
-      220,  221,    0,  220,  219,    0,    0,    0,  221,    0,
-      220,  221,  220,  221,  220,  221,  222,    0,    0,  220,
-      221,    0,    0,    0,    0,    0,  222,  223,  222,    0,
+      214,    0,  214,  215,  214,  215,  213,  215,  213,  214,
+      213,  216,  215,    0,  218,  213,    0,  218,    0,    0,
+        0,  216,    0,  216,  218,  216,  218,    0,  218,  219,
+      216,    0,  219,  218,    0,  220,    0,    0,    0,  219,
+        0,  219,  220,  219,    0,  220,  222,  220,  219,  220,
+        0,    0,    0,    0,  220,    0,  222,  223,  222,    0,
       222,    0,    0,  224,  222,  222,    0,  223,    0,  223,
-        0,  223,    0,  224,  223,  224,  223,  224,  225,    0,
-      224,  225,  224,    0,  226,    0,    0,  226,  225,    0,
-      225,    0,  225,    0,  226,  228,  226,  225,  226,    0,
+        0,  223,    0,  224,  225,  224,  223,  224,    0,    0,
+      224,    0,  224,    0,  225,  226,  225,    0,  225,    0,
+        0,  225,    0,  225,    0,  226,  228,  226,    0,  226,
 
-        0,    0,    0,  226,    0,  228,  229,  228,  228,  228,
-      228,  230,    0,    0,  228,  228,  229,  230,  229,    0,
-      229,    0,    0,    0,  229,  229,    0,  230,  234,  230,
-        0,  230,    0,    0,  234,    0,  230,    0,  234,    0,
-      234,    0,  234,  236,  236,  236,    0,  234,    0,    0,
-        0,    0,  244,  245,    0,  236,  236,  236,  236,  236,
-      236,  236,  244,  245,  244,  245,  244,  245,  246,  245,
-        0,  244,  245,    0,  247,  246,    0,    0,  246,    0,
-      246,    0,  246,    0,  247,  247,  247,  246,  247,  248,
-      249,    0,    0,  247,    0,    0,    0,    0,    0,  248,
+        0,  229,  229,    0,  226,  226,  228,    0,  228,    0,
+      228,    0,  229,  230,  229,  228,  229,    0,    0,  231,
+        0,  229,    0,  230,    0,  230,    0,  230,    0,  231,
+        0,  231,  230,  231,  232,  233,    0,  232,  231,    0,
+        0,    0,  233,    0,  232,  233,  232,  233,  232,  233,
+      234,    0,    0,  232,  233,    0,    0,    0,    0,    0,
+      234,  235,  234,    0,  234,    0,    0,  236,  234,  234,
+        0,  235,    0,  235,    0,  235,    0,  236,  235,  236,
+      235,  236,  237,    0,  236,  237,  236,    0,  238,    0,
+        0,  238,  237,    0,  237,    0,  237,    0,  238,  240,
 
-      249,  248,  249,  248,  249,  251,  251,  250,  248,  249,
-      250,    0,    0,    0,    0,    0,  251,  250,  251,  250,
-      251,  250,  252,  252,    0,  251,  250,    0,  253,    0,
-        0,    0,  252,    0,  252,  249,  252,    0,  253,  254,
-      253,  252,  253,    0,    0,  253,    0,  253,    0,  254,
-      255,  254,  254,  254,    0,    0,    0,    0,  254,    0,
-      255,    0,  255,    0,  255,  257,  255,  256,  256,  255,
-        0,  258,    0,    0,    0,  257,    0,  257,  256,  257,
-      256,  258,  256,  258,  257,  258,  259,  256,  259,  260,
-      258,  260,  261,    0,    0,  261,  259,    0,  259,  260,
+      238,  237,  238,    0,    0,    0,    0,  238,    0,  240,
+      241,  240,  240,  240,  240,  242,    0,    0,  240,  240,
+      241,  242,  241,    0,  241,    0,    0,    0,  241,  241,
+        0,  242,  246,  242,    0,  242,    0,    0,  246,    0,
+      242,    0,  246,    0,  246,    0,  246,  248,  248,  248,
+        0,  246,    0,    0,    0,    0,  258,  259,    0,  248,
+      248,  248,  248,  248,  248,  248,  258,  259,  258,  259,
+      258,  259,  260,  259,    0,  258,  259,    0,  261,  260,
+        0,    0,  260,    0,  260,    0,  260,    0,  261,  261,
+      261,  260,  261,  262,  263,    0,    0,  261,    0,    0,
 
-      259,  260,  261,  260,  261,  259,  261,  262,  260,    0,
-        0,  261,    0,  263,    0,    0,    0,  262,    0,  262,
-      263,  262,    0,  263,  264,  263,  262,  263,    0,    0,
-        0,    0,  263,    0,  264,  265,  264,    0,  264,    0,
-      264,    0,    0,  264,    0,  265,    0,  265,    0,  265,
-      266,  265,    0,  266,  265,    0,  267,    0,    0,    0,
-      266,    0,  266,    0,  266,    0,  267,  270,  267,  266,
-      267,    0,    0,  271,    0,  267,    0,  270,    0,  270,
-        0,  270,    0,  271,    0,  271,  270,  271,  272,  273,
-        0,  271,  271,    0,    0,  272,    0,    0,  272,  273,
+        0,    0,    0,  262,  263,  262,  263,  262,  263,  265,
+      265,  264,  262,  263,  264,    0,    0,    0,    0,    0,
+      265,  264,  265,  264,  265,  264,  266,  266,    0,  265,
+      264,    0,  267,    0,    0,    0,  266,    0,  266,  263,
+      266,    0,  267,  268,  267,  266,  267,    0,    0,  267,
+        0,  267,    0,  268,  269,  268,  268,  268,    0,    0,
+        0,    0,  268,    0,  269,    0,  269,    0,  269,  271,
+      269,  270,  270,  269,    0,  272,    0,    0,    0,  271,
+        0,  271,  270,  271,  270,  272,  270,  272,  271,  272,
+      273,  270,  273,  274,  272,  274,  275,    0,    0,  275,
 
-      272,  273,  272,  273,  274,  273,    0,  272,  273,  275,
-      275,    0,  270,    0,  274,    0,  274,    0,  274,    0,
-      275,  276,  275,  274,  275,  277,  276,    0,    0,  275,
-        0,  276,    0,  276,  277,  276,    0,  276,    0,    0,
-      276,    0,  278,    0,  277,    0,  277,    0,  277,    0,
-      279,    0,  278,  277,  278,    0,  278,    0,    0,  278,
-      279,  278,  279,    0,  279,  281,  281,    0,  282,  279,
-        0,    0,    0,    0,    0,  281,    0,  281,  282,  281,
-      282,  283,  282,    0,  281,    0,  282,  282,    0,  285,
-      286,  283,  285,  283,  283,  283,    0,    0,    0,  285,
+      273,    0,  273,  274,  273,  274,  275,  274,  275,  273,
+      275,  276,  274,    0,    0,  275,    0,  277,    0,    0,
+        0,  276,    0,  276,  277,  276,    0,  277,  278,  277,
+      276,  277,    0,    0,    0,    0,  277,    0,  278,  279,
+      278,    0,  278,    0,  278,    0,    0,  278,    0,  279,
+        0,  279,    0,  279,  280,  279,    0,  280,  279,    0,
+      281,    0,    0,    0,  280,    0,  280,    0,  280,    0,
+      281,  284,  281,  280,  281,    0,    0,  285,    0,  281,
+        0,  284,    0,  284,    0,  284,    0,  285,    0,  285,
+      284,  285,  286,  287,    0,  285,  285,    0,    0,  286,
 
-      283,  285,    0,  285,  287,  286,    0,  287,  285,    0,
-        0,    0,    0,    0,  287,  286,  287,  286,  287,  286,
-      288,  288,  290,  287,  286,    0,    0,    0,    0,    0,
-        0,  288,  290,  288,  290,  288,  290,  291,    0,    0,
-      288,  290,    0,    0,    0,    0,    0,  291,    0,  291,
-      292,  291,    0,  292,    0,  291,  291,    0,  293,    0,
-      292,  294,  292,    0,  292,    0,    0,    0,  293,  292,
-      293,  294,  293,  294,    0,  294,  296,  293,  295,  295,
-      294,    0,  297,    0,    0,  299,  296,    0,  296,  295,
-      296,  295,  297,  295,  297,  296,  297,  298,  295,    0,
+        0,    0,  286,  287,  286,  287,  286,  287,  288,  287,
+        0,  286,  287,  289,  289,    0,  284,    0,  288,    0,
+      288,    0,  288,  291,  289,    0,  289,  288,  289,  290,
+      289,    0,  291,  289,  290,    0,    0,    0,    0,  290,
+      292,  290,  291,  290,  291,  290,  291,    0,  290,    0,
+      292,  291,  292,  293,  292,    0,    0,  292,    0,  292,
+        0,  295,  295,  293,  296,  293,    0,  293,    0,    0,
+        0,  295,  293,  295,  296,  295,  296,  297,  296,    0,
+      295,    0,  296,  296,    0,  299,  300,  297,  299,  297,
+      297,  297,    0,    0,    0,  299,  297,  299,    0,  299,
 
-      299,  297,    0,  301,    0,    0,    0,  298,    0,  298,
-      299,  298,  299,  301,  299,  301,  298,  301,  302,  299,
-        0,  296,  301,    0,  303,    0,    0,  303,  302,    0,
-      302,    0,  302,    0,  303,  304,  303,  302,  303,    0,
-        0,  305,    0,  303,    0,  304,    0,  304,    0,  304,
-        0,  305,    0,  305,  304,  305,  309,    0,  305,    0,
-      305,    0,    0,    0,    0,    0,  309,    0,  309,    0,
-      309,  304,    0,  314,    0,  309,  310,  310,  310,  310,
-      310,  310,  310,  314,    0,  314,    0,  314,  315,  315,
-        0,  314,  314,    0,    0,    0,    0,  316,  316,  315,
+      301,  300,    0,  301,  299,    0,    0,    0,    0,    0,
+      301,  300,  301,  300,  301,  300,  302,  302,  304,  301,
+      300,    0,    0,    0,    0,    0,    0,  302,  304,  302,
+      304,  302,  304,  305,    0,    0,  302,  304,    0,    0,
+        0,    0,    0,  305,    0,  305,  306,  305,    0,  306,
+        0,  305,  305,    0,  307,    0,  306,  308,  306,    0,
+      306,    0,    0,    0,  307,  306,  307,  308,  307,  308,
+        0,  308,  310,  307,  309,  309,  308,    0,  311,    0,
+        0,  313,  310,    0,  310,  309,  310,  309,  311,  309,
+      311,  310,  311,  312,  309,    0,  313,  311,    0,  315,
 
-        0,  315,    0,  315,  317,  317,    0,  316,  315,  316,
-        0,  316,    0,  318,  310,  317,  316,  317,    0,  317,
-      320,  320,    0,  318,  317,  318,    0,  318,    0,  321,
-      321,  320,  318,  320,    0,  320,    0,    0,    0,  321,
-      320,  321,  322,  321,    0,  322,    0,    0,  321,    0,
-      323,    0,  322,  324,  322,    0,  322,    0,    0,    0,
-      323,  322,  323,  324,  323,  324,    0,  324,  326,  323,
-      325,  325,  324,    0,  327,  326,    0,    0,  326,    0,
-      326,  325,  326,  325,  327,  325,  327,  326,  327,  328,
-      325,    0,  328,  327,    0,  329,  328,  329,    0,  328,
+        0,    0,    0,  312,    0,  312,  313,  312,  313,  315,
+      313,  315,  312,  315,  316,  313,    0,  310,  315,    0,
+      317,    0,    0,  317,  316,    0,  316,    0,  316,    0,
+      317,  318,  317,  316,  317,    0,    0,  319,    0,  317,
+        0,  318,    0,  318,    0,  318,    0,  319,    0,  319,
+      318,  319,  323,    0,  319,    0,  319,    0,    0,    0,
+        0,    0,  323,    0,  323,    0,  323,  318,    0,  329,
+        0,  323,  324,  324,  324,  324,  324,  324,  324,  329,
+        0,  329,    0,  329,  330,  330,    0,  329,  329,    0,
+        0,    0,    0,  331,  331,  330,    0,  330,    0,  330,
 
-        0,  328,    0,  328,    0,  329,    0,  329,  328,  329,
-      330,  331,    0,  330,  329,    0,    0,    0,    0,    0,
-      330,  331,  330,  331,  330,  331,  332,  331,    0,  330,
-      331,    0,    0,    0,    0,    0,  332,    0,  332,    0,
-      332,  333,  333,    0,  332,  332,    0,  334,    0,    0,
-        0,  333,    0,  333,    0,  333,    0,  334,  335,  334,
-      333,  334,    0,    0,  336,  334,  334,    0,  335,    0,
-      335,    0,  335,    0,  336,  335,  336,  335,  336,  337,
-      341,    0,    0,  336,    0,    0,    0,  341,    0,  337,
-      341,  337,  341,  337,  341,    0,    0,  343,  337,  341,
+      332,  332,    0,  331,  330,  331,    0,  331,    0,  333,
+      324,  332,  331,  332,    0,  332,  335,  335,    0,  333,
+      332,  333,    0,  333,    0,  336,  336,  335,  333,  335,
+        0,  335,    0,    0,    0,  336,  335,  336,  337,  336,
+        0,  337,    0,    0,  336,    0,  338,    0,  337,  339,
+      337,    0,  337,    0,    0,    0,  338,  337,  338,  339,
+      338,  339,    0,  339,  341,  338,  340,  340,  339,    0,
+      342,  341,    0,    0,  341,    0,  341,  340,  341,  340,
+      342,  340,  342,  341,  342,  343,  340,    0,  343,  342,
+        0,  344,  343,  344,    0,  343,    0,  343,    0,  343,
 
-      342,  342,    0,  342,    0,    0,    0,  343,    0,  343,
-      342,  343,  342,    0,  342,  343,  343,  345,  344,  342,
-      344,    0,    0,    0,    0,    0,    0,  345,  344,  345,
-      344,  345,  344,    0,  347,  346,  345,  344,  346,    0,
-        0,  349,    0,  348,  347,  346,  347,  346,  347,  346,
-      348,  347,    0,  347,  346,    0,  349,    0,    0,    0,
-      348,    0,  348,    0,  348,    0,  349,  351,  349,  348,
-      349,    0,    0,    0,    0,  349,    0,  351,  352,  351,
-        0,  351,    0,    0,  353,  351,  351,    0,  352,    0,
-      352,    0,  352,    0,  353,  355,  353,  352,  353,    0,
+        0,  344,    0,  344,  343,  344,  345,  346,    0,  345,
+      344,    0,    0,  345,    0,    0,  345,  346,  345,  346,
+      345,  346,  347,  346,    0,  345,  346,    0,    0,    0,
+        0,    0,  347,    0,  347,    0,  347,  348,  348,    0,
+      347,  347,    0,  349,    0,    0,    0,  348,    0,  348,
+        0,  348,    0,  349,  350,  349,  348,  349,    0,    0,
+      351,  349,  349,    0,  350,    0,  350,    0,  350,    0,
+      351,  350,  351,  350,  351,  352,  356,    0,    0,  351,
+        0,    0,    0,  356,    0,  352,  356,  352,  356,  352,
+      356,    0,    0,  358,  352,  356,  357,  357,    0,  357,
 
-        0,    0,    0,  353,    0,  355,  356,  355,    0,  355,
-        0,  355,  357,  356,  355,    0,  356,    0,  356,    0,
-      356,    0,  357,  358,  357,  356,  357,    0,    0,    0,
-        0,  357,    0,  358,    0,  358,  360,  358,    0,  361,
-        0,  358,  358,  360,    0,    0,  360,  362,  360,  361,
-      360,  361,  362,  361,    0,  360,    0,  362,  361,  362,
-      363,  362,    0,    0,    0,    0,  362,    0,    0,    0,
-      363,  365,  363,    0,  363,    0,    0,  367,  365,  363,
-        0,  365,  363,  365,    0,  365,    0,  367,    0,  367,
-      365,  367,  368,  369,    0,  368,  367,    0,    0,    0,
+        0,    0,    0,  358,    0,  358,  357,  358,  357,    0,
+      357,  358,  358,  360,  359,  357,  359,    0,    0,    0,
+        0,    0,    0,  360,  359,  360,  359,  360,  359,  361,
+        0,    0,  360,  359,    0,  362,    0,    0,  362,  361,
+        0,  361,    0,  361,    0,  362,  363,  362,  361,  362,
+      364,    0,    0,  365,  362,    0,  363,  364,  363,    0,
+      363,    0,    0,  363,    0,  363,    0,  364,  365,  364,
+        0,  364,    0,    0,  367,    0,  364,    0,  365,    0,
+      365,    0,  365,    0,  367,  368,  367,  365,  367,    0,
+        0,  369,  367,  367,    0,  368,    0,  368,    0,  368,
 
-        0,    0,  368,  369,  368,  369,  368,  369,  371,  369,
-        0,  368,  369,    0,  379,    0,    0,    0,  371,    0,
-      371,    0,  371,    0,  379,    0,  379,  371,  379,  380,
-      380,  381,  381,  379,    0,    0,    0,    0,    0,  380,
-      382,  380,  381,  380,  381,    0,  381,    0,  380,    0,
-      382,  381,  382,  371,  382,  384,    0,    0,  382,  382,
-        0,  385,    0,    0,    0,  384,    0,  384,    0,  384,
-        0,  385,  386,  385,  384,  385,    0,    0,  387,  385,
-      385,  387,  386,    0,  386,    0,  386,    0,  387,  388,
-      387,  386,  387,    0,    0,  389,  388,  387,    0,  388,
+        0,  369,  371,  369,  368,  369,    0,    0,    0,    0,
+      369,    0,  371,  372,  371,    0,  371,    0,  371,  373,
+      372,  371,    0,  372,    0,  372,    0,  372,    0,  373,
+      374,  373,  372,  373,    0,    0,    0,    0,  373,    0,
+      374,    0,  374,  376,  374,    0,  377,    0,  374,  374,
+      376,    0,    0,  376,  378,  376,  377,  376,  377,  378,
+      377,    0,  376,    0,  378,  377,  378,  379,  378,    0,
+        0,    0,    0,  378,    0,    0,    0,  379,  381,  379,
+        0,  379,    0,    0,  383,  381,  379,    0,  381,  379,
+      381,    0,  381,    0,  383,    0,  383,  381,  383,  384,
 
-        0,  388,    0,  388,    0,  389,  390,  389,  388,  389,
-        0,    0,    0,    0,  389,    0,  390,  391,  390,  391,
-      390,    0,    0,  392,  390,  390,    0,  391,    0,  391,
-        0,  391,    0,  392,    0,  392,  391,  392,    0,    0,
-      393,  392,  392,  393,    0,    0,  394,    0,  394,    0,
-      393,    0,  393,    0,  393,    0,  394,    0,  394,  393,
-      394,  395,  395,  396,    0,  394,    0,    0,    0,    0,
-        0,    0,  395,  396,  395,  396,  395,  396,  397,  398,
-        0,  395,  396,    0,    0,  397,    0,    0,  397,  398,
-      397,  398,  397,  398,  399,    0,  398,  397,  398,  400,
+      385,    0,  384,  383,    0,    0,    0,    0,    0,  384,
+      385,  384,  385,  384,  385,  387,  385,    0,  384,  385,
+        0,  396,    0,    0,    0,  387,    0,  387,    0,  387,
+        0,  396,    0,  396,  387,  396,  397,  397,  398,  398,
+      396,    0,    0,    0,    0,    0,  397,  399,  397,  398,
+      397,  398,    0,  398,    0,  397,    0,  399,  398,  399,
+      387,  399,  401,    0,    0,  399,  399,    0,  402,    0,
+        0,    0,  401,    0,  401,    0,  401,    0,  402,  403,
+      402,  401,  402,    0,    0,  404,  402,  402,  404,  403,
+        0,  403,    0,  403,    0,  404,  405,  404,  403,  404,
 
-      400,  399,    0,    0,  399,    0,  399,    0,  399,    0,
-      400,  404,  400,  399,  400,  404,    0,  405,    0,  400,
-        0,  404,    0,  404,  405,  404,    0,  405,    0,  405,
-      404,  405,  406,  407,  406,    0,  405,    0,    0,    0,
-        0,    0,  406,  407,  406,  407,  406,  407,    0,    0,
-      407,  406,  407,  408,  409,  409,  408,    0,    0,    0,
-        0,    0,    0,  408,  409,  408,  409,  408,  409,  410,
-        0,    0,  408,  409,    0,    0,    0,  411,    0,  410,
-      411,  410,    0,  410,    0,  410,    0,  411,  410,  411,
-      412,  411,    0,    0,    0,    0,  411,    0,  413,    0,
+        0,    0,  406,  405,  404,    0,  405,    0,  405,    0,
+      405,    0,  406,  407,  406,  405,  406,    0,    0,    0,
+        0,  406,    0,  407,  408,  407,  408,  407,    0,    0,
+      409,  407,  407,    0,  408,    0,  408,    0,  408,    0,
+      409,    0,  409,  408,  409,    0,    0,  410,  409,  409,
+      410,    0,    0,  411,    0,  411,    0,  410,    0,  410,
+        0,  410,    0,  411,  412,  411,  410,  411,    0,  413,
+      413,    0,  411,    0,  412,    0,  412,    0,  412,    0,
+      413,  414,  413,  412,  413,    0,    0,  415,    0,  413,
+        0,  414,    0,  414,  415,  414,    0,  415,  416,  415,
 
-      412,  415,  412,    0,  412,  413,    0,  412,  413,  412,
-      413,  415,  413,  415,    0,  415,  418,  413,  416,  416,
-      415,    0,  419,    0,    0,    0,  418,    0,  418,  416,
-      418,  416,  419,  416,  419,  418,  419,  420,  416,    0,
-      421,  419,    0,  421,    0,    0,    0,  420,  423,  420,
-      421,  420,  421,    0,  421,  420,  420,    0,  423,  421,
-      423,    0,  423,  424,  424,    0,  425,  423,  423,  426,
-        0,    0,    0,  424,    0,  424,  425,  424,  425,  426,
-      425,  426,  424,  426,  428,  425,  428,  430,  426,    0,
-      431,    0,    0,    0,  428,    0,  428,  430,  428,  430,
+      414,  415,    0,    0,  417,    0,  415,    0,  416,    0,
+      416,  417,  416,    0,  417,  416,  417,  416,  417,  418,
+      418,  422,    0,  417,    0,  422,    0,    0,    0,    0,
+      418,  422,  418,  422,  418,  422,  423,    0,    0,  418,
+      422,    0,  424,  423,  424,    0,  423,    0,  423,    0,
+      423,    0,  424,  425,  424,  423,  424,    0,    0,  426,
+        0,  424,  426,  425,    0,  425,    0,  425,    0,  426,
+      425,  426,  425,  426,  427,  427,    0,    0,  426,    0,
+      428,  428,    0,    0,  427,    0,  427,    0,  427,    0,
+      428,  429,  428,  427,  428,    0,    0,    0,    0,  428,
 
-      431,  430,  431,  428,  431,  440,  430,  431,  441,  431,
-        0,    0,    0,    0,    0,  440,    0,  440,  441,  440,
-      441,  442,  441,  440,  440,    0,  441,  441,  442,  444,
-        0,  442,    0,  442,    0,  442,    0,    0,    0,  444,
-      442,  444,  445,  444,    0,  445,    0,    0,  444,    0,
-      446,    0,  445,  447,  445,    0,  445,    0,    0,    0,
-      446,  445,  446,  447,  446,  447,  448,  447,    0,  446,
-        0,    0,  447,  448,  449,    0,  448,  450,  448,    0,
-      448,    0,    0,    0,  449,  448,  449,  450,  449,  450,
-      451,  450,    0,  449,    0,    0,  450,  451,  453,    0,
+        0,  429,    0,  429,    0,  429,  430,  429,    0,  430,
+      429,    0,  431,    0,    0,    0,  430,    0,  430,    0,
+      430,    0,  431,  432,  431,  430,  431,    0,    0,  431,
+      432,  431,    0,  432,  434,  432,    0,  432,    0,  435,
+      435,    0,  432,    0,  434,    0,  434,    0,  434,    0,
+      435,  437,  435,  434,  435,    0,    0,  438,    0,  435,
+        0,  437,    0,  437,    0,  437,    0,  438,  439,  438,
+      437,  438,    0,    0,    0,    0,  438,    0,  439,    0,
+      439,  440,  439,    0,  440,    0,  439,  439,    0,  442,
+        0,  440,    0,  440,    0,  440,    0,    0,    0,  442,
 
-      451,  452,  451,  452,  451,    0,    0,    0,  453,  451,
-      453,  452,  453,  452,  454,  452,    0,  453,    0,    0,
-      452,    0,    0,    0,  454,  455,  454,    0,  454,    0,
-        0,    0,  454,  454,    0,  455,  456,  455,    0,  455,
-        0,    0,  457,  455,  455,    0,  456,    0,  456,    0,
-      456,    0,  457,  458,  457,  456,  457,    0,    0,  462,
-        0,  457,    0,  458,    0,  458,  462,  458,    0,  462,
-      463,  462,  458,  462,    0,    0,    0,    0,  462,    0,
-      463,  464,  463,    0,  463,    0,    0,  465,  463,  463,
-        0,  464,    0,  464,    0,  464,    0,  465,  466,  465,
+      440,  442,    0,  442,  443,  443,    0,  444,  442,  442,
+      445,    0,    0,    0,  443,    0,  443,  444,  443,  444,
+      445,  444,  445,  443,  445,  447,  444,  447,  449,  445,
+        0,  450,    0,    0,    0,  447,    0,  447,  449,  447,
+      449,  450,  449,  450,  447,  450,  460,  449,  450,  461,
+      450,    0,    0,    0,    0,    0,  460,    0,  460,  461,
+      460,  461,  462,  461,  460,  460,    0,  461,  461,  462,
+      464,    0,  462,    0,  462,    0,  462,    0,    0,    0,
+      464,  462,  464,  465,  464,    0,  465,    0,    0,  464,
+        0,  466,    0,  465,  467,  465,    0,  465,    0,    0,
 
-      464,  465,    0,    0,  467,    0,  465,  467,  466,    0,
-      466,    0,  466,    0,  467,  466,  467,  466,  467,  468,
-      469,  469,    0,  467,    0,    0,    0,    0,    0,  468,
-      469,  468,  469,  468,  469,  470,  471,    0,  468,  469,
-        0,    0,    0,    0,    0,  470,  471,  470,  471,  470,
-      471,  473,  475,    0,  470,  471,    0,    0,    0,    0,
-        0,  473,  475,  473,  475,  473,  475,    0,    0,  476,
-      473,  475,  477,  476,    0,  478,    0,    0,    0,  476,
-      470,  476,  477,  476,  477,  478,  477,  478,  476,  478,
-      480,  477,    0,  480,  478,    0,  481,    0,    0,  481,
+        0,  466,  465,  466,  467,  466,  467,  468,  467,    0,
+      466,    0,    0,  467,  468,  469,    0,  468,  470,  468,
+        0,  468,    0,    0,    0,  469,  468,  469,  470,  469,
+      470,  471,  470,    0,  469,    0,    0,  470,  471,  473,
+        0,  471,  472,  471,  472,  471,    0,    0,    0,  473,
+      471,  473,  472,  473,  472,  474,  472,    0,  473,    0,
+      474,  472,    0,  475,    0,  474,  476,  474,    0,  474,
+        0,    0,    0,  475,  474,  475,  476,  475,  476,  477,
+      476,  475,  475,    0,  476,  476,    0,  478,    0,  477,
+      479,  477,    0,  477,    0,    0,    0,  478,  477,  478,
 
-      480,    0,  480,    0,  480,    0,  481,    0,  481,  480,
-      481,  483,    0,  494,  483,  481,  485,  485,    0,    0,
-        0,  483,    0,  483,    0,  483,    0,  485,  494,  485,
-      483,  485,    0,    0,  495,    0,  485,    0,  494,    0,
-      494,  495,  494,    0,  495,    0,  495,  494,  495,  496,
-      496,    0,    0,  495,    0,  498,    0,    0,    0,  496,
-        0,  496,    0,  496,    0,  498,  499,  498,  496,  498,
-        0,  498,    0,    0,  498,    0,  499,    0,  499,  500,
-      499,    0,  500,    0,  499,  499,    0,  501,    0,  500,
-      502,  500,    0,  500,    0,    0,    0,  501,  500,  501,
+      479,  478,  479,  483,  479,    0,  478,    0,    0,  479,
+      483,  484,    0,  483,  485,  483,    0,  483,    0,    0,
+        0,  484,  483,  484,  485,  484,  485,  486,  485,  484,
+      484,    0,    0,  485,    0,  487,    0,  486,    0,  486,
+        0,  486,    0,    0,    0,  487,  486,  487,  488,  487,
+        0,  488,  487,    0,  487,    0,  489,    0,  488,  490,
+      488,    0,  488,    0,    0,    0,  489,  488,  489,  490,
+      489,  490,    0,  490,  489,  489,  491,  491,  490,  492,
+        0,    0,  493,    0,    0,    0,  491,    0,  491,  492,
+      491,  492,  493,  492,  493,  491,  493,  495,  492,    0,
 
-      502,  501,  502,  502,  502,  503,  501,    0,  504,  502,
-        0,  504,    0,    0,    0,  503,  505,  503,  504,  503,
-      504,    0,  504,    0,  503,    0,  505,  504,  505,  506,
-      505,    0,  507,    0,    0,  505,  506,    0,    0,  506,
-        0,  506,  507,  506,  507,    0,  507,  512,  506,    0,
-      512,  507,    0,  513,    0,    0,    0,  512,    0,  512,
-        0,  512,    0,  513,  514,  513,  512,  513,    0,    0,
-      515,    0,  513,    0,  514,    0,  514,    0,  514,    0,
-      515,  516,  515,  514,  515,    0,    0,    0,    0,  515,
-        0,  516,  518,  516,    0,  516,  518,    0,  520,  516,
+      497,  493,    0,    0,    0,    0,    0,  495,    0,  495,
+      497,  495,  497,  498,  497,    0,  495,  498,    0,  497,
+        0,  499,    0,  498,  492,  498,    0,  498,    0,  500,
+        0,  499,  498,  499,    0,  499,    0,    0,    0,  500,
+      499,  500,  502,  500,    0,  502,    0,    0,  500,    0,
+      503,    0,  502,  503,  502,    0,  502,    0,    0,  517,
+      503,  502,  503,  505,  503,    0,  505,    0,    0,  503,
+      507,  507,    0,  505,  517,  505,    0,  505,    0,    0,
+        0,  507,  505,  507,  517,  507,  517,  518,  517,    0,
+      507,    0,    0,  517,  518,  519,  519,  518,    0,  518,
 
-      516,    0,  518,    0,  518,  524,  518,    0,  520,  522,
-      520,  518,  520,    0,    0,    0,  522,  520,    0,  522,
-      524,  522,    0,  522,    0,    0,  525,    0,  522,    0,
-      524,    0,  524,    0,  524,    0,  525,  527,  525,  524,
-      525,    0,    0,  529,    0,  525,    0,  527,    0,  527,
-        0,  527,    0,  529,  537,  529,  527,  529,    0,    0,
-        0,    0,  529,    0,  537,  538,  537,    0,  537,    0,
-        0,  537,    0,  537,    0,  538,  539,  538,  538,  538,
-        0,    0,  541,    0,  538,    0,  539,    0,  539,    0,
-      539,    0,  541,  542,  541,  539,  541,    0,    0,    0,
+        0,  518,    0,  521,    0,  519,  518,  519,    0,  519,
+        0,  522,    0,  521,  519,  521,    0,  521,    0,  521,
+        0,  522,  521,  522,  523,  522,    0,  523,    0,  522,
+      522,    0,  524,    0,  523,  525,  523,    0,  523,    0,
+        0,  527,  524,  523,  524,  525,  524,  525,  525,  525,
+      526,  524,    0,  529,  525,    0,  527,    0,    0,    0,
+      526,    0,  526,  529,  526,  529,  527,  529,  527,  526,
+      527,  528,  529,    0,  528,  527,    0,  530,    0,    0,
+        0,  528,    0,  528,  530,  528,    0,  530,  531,  530,
+      528,  530,    0,    0,  536,    0,  530,  536,  531,    0,
 
-        0,  541,    0,  542,  543,  542,  543,  542,    0,    0,
-      542,    0,  542,    0,  543,  544,  543,    0,  543,    0,
-      544,  545,    0,  543,    0,  544,    0,  544,    0,  544,
-        0,  545,    0,  545,  544,  545,  546,  547,  546,    0,
-      545,    0,    0,    0,    0,    0,  546,  547,  546,  547,
-      546,  547,  552,  553,    0,  546,  547,    0,    0,    0,
-      553,    0,  552,  553,  552,  553,  552,  553,  552,  555,
-      558,  552,  553,    0,    0,    0,  555,    0,    0,  555,
-      558,  555,  558,  555,  558,  560,    0,    0,  555,  558,
-        0,  562,    0,    0,    0,  560,    0,  560,  560,  560,
+      531,    0,  531,    0,  536,  537,  536,  531,  536,    0,
+        0,  538,    0,  536,    0,  537,    0,  537,    0,  537,
+        0,  538,  539,  538,  537,  538,    0,    0,  540,    0,
+      538,    0,  539,    0,  539,  540,  539,    0,  540,  541,
+      540,  539,  540,    0,    0,    0,    0,  540,    0,  541,
+      543,  541,    0,  541,  543,    0,  545,  541,  541,    0,
+      543,    0,  543,  549,  543,    0,  545,  547,  545,  543,
+      545,    0,    0,    0,  547,  545,    0,  547,  549,  547,
+        0,  547,    0,    0,  550,    0,  547,    0,  549,    0,
+      549,    0,  549,    0,  550,  552,  550,  549,  550,    0,
 
-        0,  562,  564,  562,  560,  562,    0,    0,    0,  562,
-      562,    0,  564,    0,  564,    0,  564,  570,  570,  570,
-        0,  564,    0,    0,    0,    0,  572,  573,    0,  570,
-      570,  570,  570,  570,  570,  570,  572,  573,  572,  573,
-      572,  573,  574,  575,    0,  572,  573,    0,    0,  572,
-        0,    0,  574,  575,  574,  575,  574,  575,  576,  577,
-        0,  574,  575,    0,    0,    0,    0,    0,  576,  577,
-      576,  577,  576,  577,  578,  579,  577,  576,  577,    0,
-        0,    0,  579,    0,  578,  579,  578,  579,  578,  579,
-      583,    0,    0,  578,  579,    0,    0,    0,  584,    0,
+        0,  554,    0,  550,    0,  552,    0,  552,    0,  552,
+        0,  554,  563,  554,  552,  554,    0,    0,    0,    0,
+      554,    0,  563,  564,  563,    0,  563,    0,    0,  563,
+        0,  563,    0,  564,  565,  564,  564,  564,    0,    0,
+      567,    0,  564,    0,  565,    0,  565,    0,  565,    0,
+      567,  568,  567,  565,  567,    0,    0,    0,    0,  567,
+        0,  568,  569,  568,  569,  568,    0,    0,  568,    0,
+      568,    0,  569,  570,  569,    0,  569,    0,  570,  571,
+        0,  569,    0,  570,    0,  570,    0,  570,    0,  571,
+        0,  571,  570,  571,  572,  572,    0,  573,  571,  573,
 
-      583,    0,  583,    0,  583,    0,  586,    0,  584,  583,
-      584,  584,  584,    0,  589,    0,  586,  584,  586,    0,
-      586,  589,  591,    0,  589,  586,  589,    0,  589,  591,
-      592,    0,  591,  589,  591,    0,  591,  592,    0,    0,
-      592,  591,  592,    0,  592,    0,    0,  601,  602,  592,
-      599,  599,  599,  599,  599,  599,  599,  601,  602,  601,
-      602,  601,  602,  603,    0,    0,  601,  602,    0,    0,
-        0,  604,    0,  603,    0,  603,    0,  603,    0,    0,
-        0,  604,  603,  604,  608,  604,    0,    0,  599,  604,
-      604,    0,  610,    0,  608,  613,  608,    0,  608,  610,
+      574,    0,    0,    0,  572,    0,  572,  573,  572,  573,
+      574,  573,  574,  572,  574,  579,  573,    0,    0,  574,
+        0,    0,    0,  580,    0,  579,    0,  579,    0,  579,
+        0,  579,    0,  580,  579,  580,  580,  580,  581,  583,
+        0,    0,  580,    0,    0,  581,  583,    0,  581,  583,
+      581,  583,  581,  583,  586,    0,    0,  581,  583,    0,
+        0,    0,  588,    0,  586,    0,  586,    0,  586,    0,
+      590,    0,  588,  586,  588,  588,  588,    0,    0,    0,
+      590,  588,  590,  592,  590,    0,    0,    0,  590,  590,
+        0,    0,    0,  592,    0,  592,    0,  592,  598,  598,
 
-        0,    0,  610,  608,  610,  613,  610,  613,  615,  613,
-      615,  610,    0,  613,  613,    0,    0,    0,  615,  616,
-      615,    0,  615,  616,    0,    0,    0,  615,    0,  616,
-        0,  616,    0,  616,  623,  623,  623,    0,  616,    0,
-        0,    0,    0,  624,  625,    0,  623,  623,  623,  623,
-      623,  623,  623,  624,  625,  624,  625,  624,  625,  629,
-        0,  624,  624,  625,    0,  631,    0,  625,    0,  629,
-        0,  629,    0,  629,    0,  631,  634,  631,  629,  631,
-        0,    0,  636,  631,  631,    0,  634,    0,  634,    0,
-      634,    0,  636,  637,  636,  634,  636,    0,    0,  634,
+      598,    0,  592,    0,    0,    0,    0,  601,  602,    0,
+      598,  598,  598,  598,  598,  598,  598,  601,  602,  601,
+      602,  601,  602,  603,  604,    0,  601,  602,    0,    0,
+      601,    0,    0,  603,  604,  603,  604,  603,  604,  605,
+      606,    0,  603,  604,    0,    0,    0,    0,    0,  605,
+      606,  605,  606,  605,  606,  607,    0,  606,  605,  606,
+        0,  608,    0,    0,    0,  607,    0,  607,  607,  607,
+        0,  608,  609,  608,  607,  608,    0,    0,  613,  609,
+      608,    0,  609,    0,  609,    0,  609,    0,  613,  614,
+      613,  609,  613,    0,    0,    0,    0,  613,    0,  614,
 
-      637,  636,    0,  637,    0,  637,  644,  637,  643,  643,
-        0,    0,  637,    0,    0,    0,  644,  648,  644,  643,
-      644,  643,    0,  643,    0,  644,    0,  648,  643,  648,
-        0,  648,  651,    0,    0,  653,  648,    0,  653,    0,
-      648,    0,  651,    0,  651,  653,  651,  653,    0,  653,
-        0,  651,    0,    0,  653,  658,  658,  658,    0,    0,
-        0,    0,    0,    0,  659,  661,    0,  658,  658,  658,
-      658,  658,  658,  658,  659,  661,  659,  661,  659,  661,
-      664,  667,    0,  659,  661,    0,  659,    0,    0,    0,
-      664,  667,  664,  667,  664,  667,  664,  671,    0,  664,
+      615,  614,    0,  614,    0,    0,  617,    0,  614,    0,
+      615,    0,  615,  615,  615,    0,  617,  620,  617,  615,
+      617,    0,    0,  622,  620,  617,    0,  620,    0,  620,
+      622,  620,    0,  622,  623,  622,  620,  622,    0,    0,
+        0,  623,  622,    0,  623,    0,  623,    0,  623,    0,
+        0,  633,  634,  623,  630,  630,  630,  630,  630,  630,
+      630,  633,  634,  633,  634,  633,  634,  635,  636,    0,
+      633,  634,    0,    0,    0,    0,    0,  635,  636,  635,
+      636,  635,  636,  637,    0,    0,  635,  636,    0,    0,
+        0,    0,  630,  637,  641,  637,    0,  637,    0,    0,
 
-      667,    0,    0,    0,    0,    0,    0,  671,    0,  671,
-        0,  671,    0,    0,    0,    0,  671,  675,  675,  675,
-      675,  675,  675,  675,  675,  675,  675,  675,  675,  676,
-      676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
-      676,  677,  677,  677,  677,  677,  677,  677,  677,  677,
-      677,  677,  677,  678,  678,  678,  678,  678,  678,  678,
-      678,  678,  678,  678,  678,  679,  679,  679,  679,  679,
-      679,  679,  679,  679,  679,  679,  679,  680,  680,  680,
-        0,  680,  680,  680,  680,  680,  680,  680,  680,  681,
-      681,    0,    0,  681,    0,  681,  682,    0,  682,  683,
+      642,  637,  637,    0,  641,    0,  641,    0,  641,    0,
+      642,  641,  642,  641,  642,  644,    0,    0,  647,  642,
+        0,  649,  644,  649,    0,  644,    0,  644,  647,  644,
+      647,  649,  647,  649,  644,  649,  647,  647,  650,    0,
+      649,    0,  650,    0,    0,    0,    0,    0,  650,    0,
+      650,    0,  650,  657,  657,  657,    0,  650,    0,    0,
+        0,    0,  659,    0,    0,  657,  657,  657,  657,  657,
+      657,  657,  659,  660,  659,    0,  659,    0,    0,    0,
+      659,  659,    0,  660,  661,  660,    0,  660,    0,    0,
+      665,  660,  660,    0,  661,    0,  661,    0,  661,    0,
 
-      683,    0,  683,  683,  684,  684,    0,  684,  684,  684,
-        0,  684,  684,  684,  684,  684,  685,  685,  685,    0,
-      685,  685,  685,  685,  685,  685,  685,  685,  686,  686,
-      686,  686,  686,  686,  686,  686,    0,  686,  686,  687,
-        0,    0,  687,    0,  687,  687,  687,  687,  687,  687,
-      688,  688,    0,  688,  688,  689,  689,    0,  689,  689,
-      690,  690,    0,  690,  690,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
+      665,  666,  665,  661,  665,    0,    0,  661,    0,  665,
+        0,  666,  668,  666,    0,  666,    0,    0,    0,    0,
+      666,    0,  668,  671,  668,    0,  668,    0,    0,  673,
+      668,  668,    0,  671,    0,  671,    0,  671,    0,  673,
+      674,  673,  671,  673,    0,    0,  671,  674,  673,    0,
+      674,    0,  674,  682,  674,  681,  681,    0,    0,  674,
+        0,    0,    0,  682,  683,  682,  681,  682,  681,  682,
+      681,    0,  682,    0,  683,  681,  683,  687,  683,    0,
+      690,    0,    0,  683,    0,    0,    0,  687,    0,  687,
+      690,  687,  690,    0,  690,  692,  687,    0,  692,  690,
 
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
-      674,  674,  674,  674
+      687,    0,    0,    0,    0,  692,    0,  692,    0,  692,
+      697,  697,  697,    0,  692,    0,    0,    0,    0,  699,
+        0,    0,  697,  697,  697,  697,  697,  697,  697,  699,
+      700,  699,    0,  699,    0,    0,  702,    0,  699,    0,
+      700,  699,  700,  700,  700,    0,  702,  705,  702,  700,
+      702,    0,    0,    0,    0,  702,    0,  705,  709,  705,
+        0,  705,    0,  705,  710,    0,  705,    0,  709,    0,
+      709,    0,  709,    0,  710,  714,  710,  709,  710,    0,
+        0,  717,    0,  710,    0,  714,    0,  714,    0,  714,
+        0,  717,    0,  717,  714,  717,    0,    0,    0,    0,
+
+      717,  721,  721,  721,  721,  721,  721,  721,  721,  721,
+      721,  721,  721,  722,  722,  722,  722,  722,  722,  722,
+      722,  722,  722,  722,  722,  723,  723,  723,  723,  723,
+      723,  723,  723,  723,  723,  723,  723,  724,  724,  724,
+      724,  724,  724,  724,  724,  724,  724,  724,  724,  725,
+      725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
+      725,  726,  726,  726,  726,  726,  726,  726,  726,  726,
+      726,  726,  726,  727,  727,  727,    0,  727,  727,  727,
+      727,  727,  727,  727,  727,  728,  728,    0,    0,  728,
+        0,  728,  729,    0,  729,  730,  730,    0,  730,  730,
+
+      731,  731,    0,  731,  731,  731,    0,  731,  731,  731,
+      731,  731,  732,  732,  732,    0,  732,  732,  732,  732,
+      732,  732,  732,  732,  733,  733,  733,  733,  733,  733,
+      733,  733,    0,  733,  733,  734,    0,    0,  734,  734,
+      734,  734,  734,  734,  734,  734,  735,    0,    0,  735,
+      735,  735,  735,  735,  735,  735,  735,  736,    0,    0,
+      736,    0,  736,  736,  736,  736,  736,  736,  737,  737,
+        0,  737,  737,  738,  738,    0,  738,  738,  739,  739,
+        0,  739,  739,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
+      720,  720
     } ;
 
 extern int yy_flex_debug;
 int yy_flex_debug = 1;
 
-static yyconst short int yy_rule_linenum[123] =
+static yyconst short int yy_rule_linenum[132] =
     {   0,
-      101,  104,  106,  107,  108,  111,  113,  114,  115,  127,
-      134,  141,  147,  156,  164,  172,  173,  175,  194,  200,
-      207,  214,  221,  231,  265,  272,  273,  274,  275,  283,
-      284,  285,  286,  287,  292,  293,  294,  295,  296,  297,
-      298,  299,  300,  301,  302,  311,  312,  313,  314,  315,
-      316,  317,  318,  319,  320,  321,  322,  323,  324,  325,
-      326,  327,  328,  329,  330,  331,  332,  333,  334,  335,
-      336,  337,  338,  339,  340,  341,  342,  343,  344,  345,
-      346,  347,  348,  349,  350,  351,  352,  353,  354,  355,
-      356,  357,  358,  359,  360,  361,  362,  363,  364,  365,
+      103,  106,  108,  109,  110,  113,  115,  116,  117,  129,
+      136,  143,  149,  158,  166,  174,  175,  177,  196,  202,
+      203,  204,  205,  206,  209,  215,  222,  229,  236,  246,
+      280,  287,  288,  289,  290,  298,  299,  300,  301,  302,
+      307,  308,  309,  310,  311,  312,  313,  314,  315,  316,
+      317,  326,  327,  328,  329,  330,  331,  332,  333,  334,
+      335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
+      345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+      355,  356,  357,  358,  359,  360,  361,  362,  363,  364,
+      365,  366,  367,  368,  369,  370,  371,  372,  373,  374,
 
-      366,  367,  372,  373,  378,  379,  380,  383,  389,  396,
-      405,  416,  422,  424,  425,  427,  429,  431,  444,  450,
-      456,  464
+      375,  376,  377,  378,  379,  380,  381,  382,  383,  384,
+      389,  390,  395,  396,  397,  400,  406,  413,  422,  433,
+      439,  441,  442,  444,  446,  448,  461,  467,  473,  480,
+      482
     } ;
 
 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -1722,6 +1819,7 @@
 int asn1p_lex(void);
 void asn1p_lexer_hack_push_opaque_state(void);		/* Used in .y */
 void asn1p_lexer_hack_enable_with_syntax(void);		/* Used in .y */
+void asn1p_lexer_hack_push_encoding_control(void);	/* Used in .y */
 
 #define	YY_FATAL_ERROR(msg)	do {			\
 		fprintf(stderr,				\
@@ -1787,7 +1885,6 @@
 
 #define YY_NEVER_INTERACTIVE 1
 #define YY_NO_INPUT 1
-#define YY_NO_UNPUT 1
 #define YY_STACK_USED 1
 /* Performance penalty is OK */
 /* Controlled from within application */
@@ -1799,11 +1896,13 @@
 
 #define opaque 4
 
-#define with_syntax 5
+#define encoding_control 5
+
+#define with_syntax 6
 
 /* Newline */
 /* White-space */
-#line 1807 "lex.yy.c"
+#line 1906 "asn1p_l.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1954,10 +2053,10 @@
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
 
-#line 99 "asn1p_l.l"
+#line 101 "asn1p_l.l"
 
 
-#line 1961 "lex.yy.c"
+#line 2060 "asn1p_l.c"
 
 	if ( yy_init )
 		{
@@ -2005,14 +2104,14 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 675 )
+				if ( yy_current_state >= 721 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			*yy_state_ptr++ = yy_current_state;
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 4166 );
+		while ( yy_base[yy_current_state] != 4484 );
 
 yy_find_action:
 		yy_current_state = *--yy_state_ptr;
@@ -2049,13 +2148,13 @@
 			{
 			if ( yy_act == 0 )
 				fprintf( stderr, "--scanner backing up\n" );
-			else if ( yy_act < 123 )
+			else if ( yy_act < 132 )
 				fprintf( stderr, "--accepting rule at line %d (\"%s\")\n",
 				         yy_rule_linenum[yy_act], yytext );
-			else if ( yy_act == 123 )
+			else if ( yy_act == 132 )
 				fprintf( stderr, "--accepting default rule (\"%s\")\n",
 				         yytext );
-			else if ( yy_act == 124 )
+			else if ( yy_act == 133 )
 				fprintf( stderr, "--(end of buffer or a NUL)\n" );
 			else
 				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2065,50 +2164,50 @@
 	{ /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 101 "asn1p_l.l"
+#line 103 "asn1p_l.l"
 yy_push_state(dash_comment);
 	YY_BREAK
 
 case 2:
 YY_RULE_SETUP
-#line 104 "asn1p_l.l"
+#line 106 "asn1p_l.l"
 yy_pop_state();
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 106 "asn1p_l.l"
+#line 108 "asn1p_l.l"
 yy_pop_state();	/* End of comment */
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 107 "asn1p_l.l"
+#line 109 "asn1p_l.l"
 /* Eat single dash */
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 108 "asn1p_l.l"
+#line 110 "asn1p_l.l"
 /* Eat */
 	YY_BREAK
 
 case 6:
 YY_RULE_SETUP
-#line 111 "asn1p_l.l"
+#line 113 "asn1p_l.l"
 yy_push_state(cpp_comment);
 	YY_BREAK
 
 case 7:
 YY_RULE_SETUP
-#line 113 "asn1p_l.l"
+#line 115 "asn1p_l.l"
 /* Eat */
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 114 "asn1p_l.l"
+#line 116 "asn1p_l.l"
 yy_pop_state();
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 115 "asn1p_l.l"
+#line 117 "asn1p_l.l"
 /* Eat */
 	YY_BREAK
 
@@ -2121,7 +2220,7 @@
 
 case 10:
 YY_RULE_SETUP
-#line 127 "asn1p_l.l"
+#line 129 "asn1p_l.l"
 {
 			yy_push_state(opaque);
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
@@ -2131,7 +2230,7 @@
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 134 "asn1p_l.l"
+#line 136 "asn1p_l.l"
 {
 			yy_pop_state();
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
@@ -2141,7 +2240,7 @@
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 141 "asn1p_l.l"
+#line 143 "asn1p_l.l"
 {
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
 			asn1p_lval.tv_opaque.len = yyleng;
@@ -2150,7 +2249,7 @@
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 147 "asn1p_l.l"
+#line 149 "asn1p_l.l"
 {
 			fprintf(stderr,
 				"ASN.1 Parser syncronization failure: "
@@ -2162,7 +2261,7 @@
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 156 "asn1p_l.l"
+#line 158 "asn1p_l.l"
 {
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
 			asn1p_lval.tv_opaque.len = yyleng;
@@ -2172,7 +2271,7 @@
 
 case 15:
 YY_RULE_SETUP
-#line 164 "asn1p_l.l"
+#line 166 "asn1p_l.l"
 {
 			asn1p_lval.tv_opaque.buf = 0;
 			asn1p_lval.tv_opaque.len = 0;
@@ -2183,17 +2282,17 @@
 
 case 16:
 YY_RULE_SETUP
-#line 172 "asn1p_l.l"
+#line 174 "asn1p_l.l"
 { QAPPEND(yytext, yyleng-1); }	/* Add a single quote */
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 173 "asn1p_l.l"
+#line 175 "asn1p_l.l"
 { QAPPEND(yytext, yyleng); }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 175 "asn1p_l.l"
+#line 177 "asn1p_l.l"
 {
 			yy_pop_state();
 			/* Do not append last quote:
@@ -2211,27 +2310,64 @@
 		}
 	YY_BREAK
 
+
 case 19:
 YY_RULE_SETUP
-#line 194 "asn1p_l.l"
+#line 196 "asn1p_l.l"
+{
+			const char *s = "ENCODING-CONTROL";
+			const char *p = s + sizeof("ENCODING-CONTROL") - 2;
+			for(; p >= s; p--) unput(*p);
+			yy_pop_state();
+		}
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 202 "asn1p_l.l"
+unput('D'); unput('N'); unput('E'); yy_pop_state();
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 203 "asn1p_l.l"
+
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 204 "asn1p_l.l"
+
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 205 "asn1p_l.l"
+/* Eat everything else */
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 206 "asn1p_l.l"
+
+	YY_BREAK
+
+case 25:
+YY_RULE_SETUP
+#line 209 "asn1p_l.l"
 {
 		/* " \t\r\n" weren't allowed in ASN.1:1990. */
 		asn1p_lval.tv_str = yytext;
 		return TOK_hstring;
 	}
 	YY_BREAK
-case 20:
+case 26:
 YY_RULE_SETUP
-#line 200 "asn1p_l.l"
+#line 215 "asn1p_l.l"
 {
 		/* " \t\r\n" weren't allowed in ASN.1:1990. */
 		asn1p_lval.tv_str = strdup(yytext);
 		return TOK_bstring;
 	}
 	YY_BREAK
-case 21:
+case 27:
 YY_RULE_SETUP
-#line 207 "asn1p_l.l"
+#line 222 "asn1p_l.l"
 {
 		asn1p_lval.a_int = asn1p_atoi(yytext);
 		if(errno == ERANGE)
@@ -2239,9 +2375,9 @@
 		return TOK_number_negative;
 	}
 	YY_BREAK
-case 22:
+case 28:
 YY_RULE_SETUP
-#line 214 "asn1p_l.l"
+#line 229 "asn1p_l.l"
 {
 		asn1p_lval.a_int = asn1p_atoi(yytext);
 		if(errno == ERANGE)
@@ -2249,9 +2385,9 @@
 		return TOK_number;
 	}
 	YY_BREAK
-case 23:
+case 29:
 YY_RULE_SETUP
-#line 221 "asn1p_l.l"
+#line 236 "asn1p_l.l"
 {
 		asn1p_lval.a_int = asn1p_atoi(yytext);
 		if(errno == ERANGE)
@@ -2262,9 +2398,9 @@
 /*
 	 * Tags
 	 */
-case 24:
+case 30:
 YY_RULE_SETUP
-#line 231 "asn1p_l.l"
+#line 246 "asn1p_l.l"
 {
 		char *p;
 		memset(&asn1p_lval.a_tag, 0, sizeof(asn1p_lval.a_tag));
@@ -2299,9 +2435,9 @@
 		return TOK_tag;
 	}
 	YY_BREAK
-case 25:
+case 31:
 YY_RULE_SETUP
-#line 265 "asn1p_l.l"
+#line 280 "asn1p_l.l"
 {
 		fprintf(stderr,
 			"Unsupported tag syntax at line %d: \"%s\"\n",
@@ -2309,24 +2445,24 @@
 		return -1;
 	}
 	YY_BREAK
-case 26:
+case 32:
 YY_RULE_SETUP
-#line 272 "asn1p_l.l"
+#line 287 "asn1p_l.l"
 return TOK_ABSENT;
 	YY_BREAK
-case 27:
+case 33:
 YY_RULE_SETUP
-#line 273 "asn1p_l.l"
+#line 288 "asn1p_l.l"
 return TOK_ABSTRACT_SYNTAX;
 	YY_BREAK
-case 28:
+case 34:
 YY_RULE_SETUP
-#line 274 "asn1p_l.l"
+#line 289 "asn1p_l.l"
 return TOK_ALL;
 	YY_BREAK
-case 29:
+case 35:
 YY_RULE_SETUP
-#line 275 "asn1p_l.l"
+#line 290 "asn1p_l.l"
 {
 				/* Appeared in 1990, removed in 1997 */
 				if(TYPE_LIFETIME(1990, 1997))
@@ -2336,88 +2472,88 @@
 				REJECT;
 			}
 	YY_BREAK
-case 30:
+case 36:
 YY_RULE_SETUP
-#line 283 "asn1p_l.l"
+#line 298 "asn1p_l.l"
 return TOK_APPLICATION;
 	YY_BREAK
-case 31:
+case 37:
 YY_RULE_SETUP
-#line 284 "asn1p_l.l"
+#line 299 "asn1p_l.l"
 return TOK_AUTOMATIC;
 	YY_BREAK
-case 32:
+case 38:
 YY_RULE_SETUP
-#line 285 "asn1p_l.l"
+#line 300 "asn1p_l.l"
 return TOK_BEGIN;
 	YY_BREAK
-case 33:
+case 39:
 YY_RULE_SETUP
-#line 286 "asn1p_l.l"
+#line 301 "asn1p_l.l"
 return TOK_BIT;
 	YY_BREAK
-case 34:
+case 40:
 YY_RULE_SETUP
-#line 287 "asn1p_l.l"
+#line 302 "asn1p_l.l"
 {
 				if(TYPE_LIFETIME(1994, 0))
 					return TOK_BMPString;
 				REJECT;
 			}
 	YY_BREAK
-case 35:
-YY_RULE_SETUP
-#line 292 "asn1p_l.l"
-return TOK_BOOLEAN;
-	YY_BREAK
-case 36:
-YY_RULE_SETUP
-#line 293 "asn1p_l.l"
-return TOK_BY;
-	YY_BREAK
-case 37:
-YY_RULE_SETUP
-#line 294 "asn1p_l.l"
-return TOK_CHARACTER;
-	YY_BREAK
-case 38:
-YY_RULE_SETUP
-#line 295 "asn1p_l.l"
-return TOK_CHOICE;
-	YY_BREAK
-case 39:
-YY_RULE_SETUP
-#line 296 "asn1p_l.l"
-return TOK_CLASS;
-	YY_BREAK
-case 40:
-YY_RULE_SETUP
-#line 297 "asn1p_l.l"
-return TOK_COMPONENT;
-	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 298 "asn1p_l.l"
-return TOK_COMPONENTS;
+#line 307 "asn1p_l.l"
+return TOK_BOOLEAN;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 299 "asn1p_l.l"
-return TOK_CONSTRAINED;
+#line 308 "asn1p_l.l"
+return TOK_BY;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 300 "asn1p_l.l"
-return TOK_CONTAINING;
+#line 309 "asn1p_l.l"
+return TOK_CHARACTER;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 301 "asn1p_l.l"
-return TOK_DEFAULT;
+#line 310 "asn1p_l.l"
+return TOK_CHOICE;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 302 "asn1p_l.l"
+#line 311 "asn1p_l.l"
+return TOK_CLASS;
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 312 "asn1p_l.l"
+return TOK_COMPONENT;
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 313 "asn1p_l.l"
+return TOK_COMPONENTS;
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 314 "asn1p_l.l"
+return TOK_CONSTRAINED;
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 315 "asn1p_l.l"
+return TOK_CONTAINING;
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 316 "asn1p_l.l"
+return TOK_DEFAULT;
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 317 "asn1p_l.l"
 {
 				/* Appeared in 1990, removed in 1997 */
 				if(TYPE_LIFETIME(1990, 1997))
@@ -2428,345 +2564,355 @@
 				REJECT;
 			}
 	YY_BREAK
-case 46:
-YY_RULE_SETUP
-#line 311 "asn1p_l.l"
-return TOK_DEFINITIONS;
-	YY_BREAK
-case 47:
-YY_RULE_SETUP
-#line 312 "asn1p_l.l"
-return TOK_EMBEDDED;
-	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 313 "asn1p_l.l"
-return TOK_ENCODED;
-	YY_BREAK
-case 49:
-YY_RULE_SETUP
-#line 314 "asn1p_l.l"
-return TOK_END;
-	YY_BREAK
-case 50:
-YY_RULE_SETUP
-#line 315 "asn1p_l.l"
-return TOK_ENUMERATED;
-	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 316 "asn1p_l.l"
-return TOK_EXCEPT;
-	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 317 "asn1p_l.l"
-return TOK_EXPLICIT;
+#line 326 "asn1p_l.l"
+return TOK_DEFINITIONS;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 318 "asn1p_l.l"
-return TOK_EXPORTS;
+#line 327 "asn1p_l.l"
+return TOK_EMBEDDED;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 319 "asn1p_l.l"
-return TOK_EXTENSIBILITY;
+#line 328 "asn1p_l.l"
+return TOK_ENCODED;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 320 "asn1p_l.l"
-return TOK_EXTERNAL;
+#line 329 "asn1p_l.l"
+return TOK_ENCODING_CONTROL;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 321 "asn1p_l.l"
-return TOK_FALSE;
+#line 330 "asn1p_l.l"
+return TOK_END;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 322 "asn1p_l.l"
-return TOK_FROM;
+#line 331 "asn1p_l.l"
+return TOK_ENUMERATED;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 323 "asn1p_l.l"
-return TOK_GeneralizedTime;
+#line 332 "asn1p_l.l"
+return TOK_EXCEPT;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 324 "asn1p_l.l"
-return TOK_GeneralString;
+#line 333 "asn1p_l.l"
+return TOK_EXPLICIT;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 325 "asn1p_l.l"
-return TOK_GraphicString;
+#line 334 "asn1p_l.l"
+return TOK_EXPORTS;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 326 "asn1p_l.l"
-return TOK_IA5String;
+#line 335 "asn1p_l.l"
+return TOK_EXTENSIBILITY;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 327 "asn1p_l.l"
-return TOK_IDENTIFIER;
+#line 336 "asn1p_l.l"
+return TOK_EXTERNAL;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 328 "asn1p_l.l"
-return TOK_IMPLICIT;
+#line 337 "asn1p_l.l"
+return TOK_FALSE;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 329 "asn1p_l.l"
-return TOK_IMPLIED;
+#line 338 "asn1p_l.l"
+return TOK_FROM;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 330 "asn1p_l.l"
-return TOK_IMPORTS;
+#line 339 "asn1p_l.l"
+return TOK_GeneralizedTime;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 331 "asn1p_l.l"
-return TOK_INCLUDES;
+#line 340 "asn1p_l.l"
+return TOK_GeneralString;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 332 "asn1p_l.l"
-return TOK_INSTANCE;
+#line 341 "asn1p_l.l"
+return TOK_GraphicString;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 333 "asn1p_l.l"
-return TOK_INTEGER;
+#line 342 "asn1p_l.l"
+return TOK_IA5String;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 334 "asn1p_l.l"
-return TOK_INTERSECTION;
+#line 343 "asn1p_l.l"
+return TOK_IDENTIFIER;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 335 "asn1p_l.l"
-return TOK_ISO646String;
+#line 344 "asn1p_l.l"
+return TOK_IMPLICIT;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 336 "asn1p_l.l"
-return TOK_MAX;
+#line 345 "asn1p_l.l"
+return TOK_IMPLIED;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 337 "asn1p_l.l"
-return TOK_MIN;
+#line 346 "asn1p_l.l"
+return TOK_IMPORTS;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 338 "asn1p_l.l"
-return TOK_MINUS_INFINITY;
+#line 347 "asn1p_l.l"
+return TOK_INCLUDES;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 339 "asn1p_l.l"
-return TOK_NULL;
+#line 348 "asn1p_l.l"
+return TOK_INSTANCE;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 340 "asn1p_l.l"
-return TOK_NumericString;
+#line 349 "asn1p_l.l"
+return TOK_INSTRUCTIONS;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 341 "asn1p_l.l"
-return TOK_OBJECT;
+#line 350 "asn1p_l.l"
+return TOK_INTEGER;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 342 "asn1p_l.l"
-return TOK_ObjectDescriptor;
+#line 351 "asn1p_l.l"
+return TOK_INTERSECTION;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 343 "asn1p_l.l"
-return TOK_OCTET;
+#line 352 "asn1p_l.l"
+return TOK_ISO646String;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 344 "asn1p_l.l"
-return TOK_OF;
+#line 353 "asn1p_l.l"
+return TOK_MAX;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 345 "asn1p_l.l"
-return TOK_OPTIONAL;
+#line 354 "asn1p_l.l"
+return TOK_MIN;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 346 "asn1p_l.l"
-return TOK_PATTERN;
+#line 355 "asn1p_l.l"
+return TOK_MINUS_INFINITY;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 347 "asn1p_l.l"
-return TOK_PDV;
+#line 356 "asn1p_l.l"
+return TOK_NULL;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 348 "asn1p_l.l"
-return TOK_PLUS_INFINITY;
+#line 357 "asn1p_l.l"
+return TOK_NumericString;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 349 "asn1p_l.l"
-return TOK_PRESENT;
+#line 358 "asn1p_l.l"
+return TOK_OBJECT;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 350 "asn1p_l.l"
-return TOK_PrintableString;
+#line 359 "asn1p_l.l"
+return TOK_ObjectDescriptor;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 351 "asn1p_l.l"
-return TOK_PRIVATE;
+#line 360 "asn1p_l.l"
+return TOK_OCTET;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 352 "asn1p_l.l"
-return TOK_REAL;
+#line 361 "asn1p_l.l"
+return TOK_OF;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 353 "asn1p_l.l"
-return TOK_RELATIVE_OID;
+#line 362 "asn1p_l.l"
+return TOK_OPTIONAL;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 354 "asn1p_l.l"
-return TOK_SEQUENCE;
+#line 363 "asn1p_l.l"
+return TOK_PATTERN;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 355 "asn1p_l.l"
-return TOK_SET;
+#line 364 "asn1p_l.l"
+return TOK_PDV;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 356 "asn1p_l.l"
-return TOK_SIZE;
+#line 365 "asn1p_l.l"
+return TOK_PLUS_INFINITY;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 357 "asn1p_l.l"
-return TOK_STRING;
+#line 366 "asn1p_l.l"
+return TOK_PRESENT;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 358 "asn1p_l.l"
-return TOK_SYNTAX;
+#line 367 "asn1p_l.l"
+return TOK_PrintableString;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 359 "asn1p_l.l"
-return TOK_T61String;
+#line 368 "asn1p_l.l"
+return TOK_PRIVATE;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 360 "asn1p_l.l"
-return TOK_TAGS;
+#line 369 "asn1p_l.l"
+return TOK_REAL;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 361 "asn1p_l.l"
-return TOK_TeletexString;
+#line 370 "asn1p_l.l"
+return TOK_RELATIVE_OID;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 362 "asn1p_l.l"
-return TOK_TRUE;
+#line 371 "asn1p_l.l"
+return TOK_SEQUENCE;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 363 "asn1p_l.l"
-return TOK_TYPE_IDENTIFIER;
+#line 372 "asn1p_l.l"
+return TOK_SET;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 364 "asn1p_l.l"
-return TOK_UNION;
+#line 373 "asn1p_l.l"
+return TOK_SIZE;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 365 "asn1p_l.l"
-return TOK_UNIQUE;
+#line 374 "asn1p_l.l"
+return TOK_STRING;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 366 "asn1p_l.l"
-return TOK_UNIVERSAL;
+#line 375 "asn1p_l.l"
+return TOK_SYNTAX;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 367 "asn1p_l.l"
+#line 376 "asn1p_l.l"
+return TOK_T61String;
+	YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 377 "asn1p_l.l"
+return TOK_TAGS;
+	YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 378 "asn1p_l.l"
+return TOK_TeletexString;
+	YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 379 "asn1p_l.l"
+return TOK_TRUE;
+	YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 380 "asn1p_l.l"
+return TOK_TYPE_IDENTIFIER;
+	YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 381 "asn1p_l.l"
+return TOK_UNION;
+	YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 382 "asn1p_l.l"
+return TOK_UNIQUE;
+	YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 383 "asn1p_l.l"
+return TOK_UNIVERSAL;
+	YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 384 "asn1p_l.l"
 {
 				if(TYPE_LIFETIME(1994, 0))
 					return TOK_UniversalString;
 				REJECT;
 			}
 	YY_BREAK
-case 103:
+case 111:
 YY_RULE_SETUP
-#line 372 "asn1p_l.l"
+#line 389 "asn1p_l.l"
 return TOK_UTCTime;
 	YY_BREAK
-case 104:
+case 112:
 YY_RULE_SETUP
-#line 373 "asn1p_l.l"
+#line 390 "asn1p_l.l"
 {
 				if(TYPE_LIFETIME(1994, 0))
 					return TOK_UTF8String;
 				REJECT;
 			}
 	YY_BREAK
-case 105:
+case 113:
 YY_RULE_SETUP
-#line 378 "asn1p_l.l"
+#line 395 "asn1p_l.l"
 return TOK_VideotexString;
 	YY_BREAK
-case 106:
+case 114:
 YY_RULE_SETUP
-#line 379 "asn1p_l.l"
+#line 396 "asn1p_l.l"
 return TOK_VisibleString;
 	YY_BREAK
-case 107:
+case 115:
 YY_RULE_SETUP
-#line 380 "asn1p_l.l"
+#line 397 "asn1p_l.l"
 return TOK_WITH;
 	YY_BREAK
-case 108:
+case 116:
 YY_RULE_SETUP
-#line 383 "asn1p_l.l"
+#line 400 "asn1p_l.l"
 {
 		CHECK_DASHES;
 		asn1p_lval.tv_str = strdup(yytext);
 		return TOK_typefieldreference;
 	}
 	YY_BREAK
-case 109:
+case 117:
 YY_RULE_SETUP
-#line 389 "asn1p_l.l"
+#line 406 "asn1p_l.l"
 {
 		CHECK_DASHES;
 		asn1p_lval.tv_str = strdup(yytext);
 		return TOK_valuefieldreference;
 	}
 	YY_BREAK
-case 110:
+case 118:
 YY_RULE_SETUP
-#line 396 "asn1p_l.l"
+#line 413 "asn1p_l.l"
 {
 		CHECK_DASHES;
 		asn1p_lval.tv_str = strdup(yytext);
@@ -2776,13 +2922,13 @@
 /*
 	 * objectclassreference
 	 */
-case 111:
+case 119:
 YY_RULE_SETUP
-#line 405 "asn1p_l.l"
+#line 422 "asn1p_l.l"
 {
 		CHECK_DASHES;
 		asn1p_lval.tv_str = strdup(yytext);
-		return TOK_objectclassreference;
+		return TOK_capitalreference;
 	}
 	YY_BREAK
 /*
@@ -2790,43 +2936,43 @@
 	 * NOTE: TOK_objectclassreference must be combined
 	 * with this token to produce true typereference.
 	 */
-case 112:
+case 120:
 YY_RULE_SETUP
-#line 416 "asn1p_l.l"
+#line 433 "asn1p_l.l"
 {
 		CHECK_DASHES;
 		asn1p_lval.tv_str = strdup(yytext);
 		return TOK_typereference;
 	}
 	YY_BREAK
-case 113:
+case 121:
 YY_RULE_SETUP
-#line 422 "asn1p_l.l"
+#line 439 "asn1p_l.l"
 return TOK_PPEQ;
 	YY_BREAK
-case 114:
+case 122:
 YY_RULE_SETUP
-#line 424 "asn1p_l.l"
+#line 441 "asn1p_l.l"
 return TOK_ThreeDots;
 	YY_BREAK
-case 115:
+case 123:
 YY_RULE_SETUP
-#line 425 "asn1p_l.l"
+#line 442 "asn1p_l.l"
 return TOK_TwoDots;
 	YY_BREAK
-case 116:
+case 124:
 YY_RULE_SETUP
-#line 427 "asn1p_l.l"
+#line 444 "asn1p_l.l"
 return yytext[0];
 	YY_BREAK
-case 117:
+case 125:
 YY_RULE_SETUP
-#line 429 "asn1p_l.l"
+#line 446 "asn1p_l.l"
 /* Ignore whitespace */
 	YY_BREAK
-case 118:
+case 126:
 YY_RULE_SETUP
-#line 431 "asn1p_l.l"
+#line 448 "asn1p_l.l"
 {
 		if(TYPE_LIFETIME(1994, 0))
 			fprintf(stderr, "ERROR: ");
@@ -2839,36 +2985,41 @@
 	}
 	YY_BREAK
 
-case 119:
+case 127:
 YY_RULE_SETUP
-#line 444 "asn1p_l.l"
+#line 461 "asn1p_l.l"
 {
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
 			asn1p_lval.tv_opaque.len = yyleng;
 			return TOK_opaque;
 			}
 	YY_BREAK
-case 120:
+case 128:
 YY_RULE_SETUP
-#line 450 "asn1p_l.l"
+#line 467 "asn1p_l.l"
 {
 			asn1p_lval.tv_opaque.buf = strdup(yytext);
 			asn1p_lval.tv_opaque.len = yyleng;
 			return TOK_opaque;
 			}
 	YY_BREAK
-case 121:
+case 129:
 YY_RULE_SETUP
-#line 456 "asn1p_l.l"
+#line 473 "asn1p_l.l"
 {
 				yy_pop_state();
 				return '}';
 			}
 	YY_BREAK
 
-case 122:
+case 130:
 YY_RULE_SETUP
-#line 464 "asn1p_l.l"
+#line 480 "asn1p_l.l"
+return yytext[0];	/* Union, Intersection */
+	YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 482 "asn1p_l.l"
 {
 		fprintf(stderr,
 			"Unexpected token at line %d: \"%s\"\n",
@@ -2886,20 +3037,21 @@
 case YY_STATE_EOF(cpp_comment):
 case YY_STATE_EOF(quoted):
 case YY_STATE_EOF(opaque):
+case YY_STATE_EOF(encoding_control):
 case YY_STATE_EOF(with_syntax):
-#line 476 "asn1p_l.l"
+#line 494 "asn1p_l.l"
 {
 		while(YYSTATE != INITIAL)
 			yy_pop_state();
 		yyterminate();
 	}
 	YY_BREAK
-case 123:
+case 132:
 YY_RULE_SETUP
-#line 483 "asn1p_l.l"
+#line 501 "asn1p_l.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2903 "lex.yy.c"
+#line 3055 "asn1p_l.c"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -3186,7 +3338,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 675 )
+			if ( yy_current_state >= 721 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3216,11 +3368,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 675 )
+		if ( yy_current_state >= 721 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 674);
+	yy_is_jam = (yy_current_state == 720);
 	if ( ! yy_is_jam )
 		*yy_state_ptr++ = yy_current_state;
 
@@ -3781,23 +3933,22 @@
 	return 0;
 	}
 #endif
-#line 483 "asn1p_l.l"
+#line 501 "asn1p_l.l"
 
 
 /*
  * Very dirty but wonderful hack allowing to rule states from within .y file.
  */
-void
-asn1p_lexer_hack_push_opaque_state() {
-	yy_push_state(opaque);
-}
+void asn1p_lexer_hack_push_opaque_state() { yy_push_state(opaque); }
 
 /*
  * Another hack which disables recognizing some tokens when inside WITH SYNTAX.
  */
-void
-asn1p_lexer_hack_enable_with_syntax() {
-	yy_push_state(with_syntax);
+void asn1p_lexer_hack_enable_with_syntax() { yy_push_state(with_syntax); }
+
+/* Yet another */
+void asn1p_lexer_hack_push_encoding_control() {
+	yy_push_state(encoding_control);
 }
 
 /*
diff --git a/libasn1parser/asn1p_l.l b/libasn1parser/asn1p_l.l
index 0d86cb7..6a2a0cc 100644
--- a/libasn1parser/asn1p_l.l
+++ b/libasn1parser/asn1p_l.l
@@ -10,6 +10,7 @@
 int asn1p_lex(void);
 void asn1p_lexer_hack_push_opaque_state(void);		/* Used in .y */
 void asn1p_lexer_hack_enable_with_syntax(void);		/* Used in .y */
+void asn1p_lexer_hack_push_encoding_control(void);	/* Used in .y */
 
 #define	YY_FATAL_ERROR(msg)	do {			\
 		fprintf(stderr,				\
@@ -76,7 +77,7 @@
 %}
 
 %option	never-interactive
-%option	noinput nounput
+%option	noinput 
 %option	noyywrap stack
 /* Performance penalty is OK */
 %option yylineno	
@@ -89,6 +90,7 @@
 %x cpp_comment
 %x quoted
 %x opaque
+%x encoding_control
 %x with_syntax
 
 /* Newline */
@@ -190,6 +192,19 @@
 
 	}
 
+<encoding_control>{
+	ENCODING-CONTROL	{
+			const char *s = "ENCODING-CONTROL";
+			const char *p = s + sizeof("ENCODING-CONTROL") - 2;
+			for(; p >= s; p--) unput(*p);
+			yy_pop_state();
+		}
+	END	unput('D'); unput('N'); unput('E'); yy_pop_state();
+	[^{} \t\r\v\f\n]+
+	[[:alnum:]]+
+	.	/* Eat everything else */
+	"\n"
+	}
 
 '[0-9A-F \t\r\v\f\n]+'H {
 		/* " \t\r\n" weren't allowed in ASN.1:1990. */
@@ -311,6 +326,7 @@
 DEFINITIONS		return TOK_DEFINITIONS;
 EMBEDDED		return TOK_EMBEDDED;
 ENCODED			return TOK_ENCODED;
+ENCODING-CONTROL	return TOK_ENCODING_CONTROL;
 END			return TOK_END;
 ENUMERATED		return TOK_ENUMERATED;
 EXCEPT			return TOK_EXCEPT;
@@ -330,6 +346,7 @@
 IMPORTS			return TOK_IMPORTS;
 INCLUDES		return TOK_INCLUDES;
 INSTANCE		return TOK_INSTANCE;
+INSTRUCTIONS		return TOK_INSTRUCTIONS;
 INTEGER			return TOK_INTEGER;
 INTERSECTION		return TOK_INTERSECTION;
 ISO646String		return TOK_ISO646String;
@@ -405,7 +422,7 @@
 [A-Z][A-Z0-9-]*	{
 		CHECK_DASHES;
 		asn1p_lval.tv_str = strdup(yytext);
-		return TOK_objectclassreference;
+		return TOK_capitalreference;
 	}
 
 	/*
@@ -460,6 +477,7 @@
 
 }
 
+[|^]	return yytext[0];	/* Union, Intersection */
 
 <*>.	{
 		fprintf(stderr,
@@ -485,17 +503,16 @@
 /*
  * Very dirty but wonderful hack allowing to rule states from within .y file.
  */
-void
-asn1p_lexer_hack_push_opaque_state() {
-	yy_push_state(opaque);
-}
+void asn1p_lexer_hack_push_opaque_state() { yy_push_state(opaque); }
 
 /*
  * Another hack which disables recognizing some tokens when inside WITH SYNTAX.
  */
-void
-asn1p_lexer_hack_enable_with_syntax() {
-	yy_push_state(with_syntax);
+void asn1p_lexer_hack_enable_with_syntax() { yy_push_state(with_syntax); }
+
+/* Yet another */
+void asn1p_lexer_hack_push_encoding_control() {
+	yy_push_state(encoding_control);
 }
 
 /*
diff --git a/libasn1parser/asn1p_module.h b/libasn1parser/asn1p_module.h
index 906c784..7d8bcc6 100644
--- a/libasn1parser/asn1p_module.h
+++ b/libasn1parser/asn1p_module.h
@@ -9,11 +9,16 @@
  */
 typedef enum asn1p_module_flags {
 	MSF_NOFLAGS,
-	MSF_EXPLICIT_TAGS		= 0x1,
-	MSF_IMPLICIT_TAGS		= 0x2,
-	MSF_AUTOMATIC_TAGS		= 0x4,
-	MSF_EXTENSIBILITY_IMPLIED	= 0x8,
+	MSF_unk_INSTRUCTIONS		= 0x001,
+	MSF_TAG_INSTRUCTIONS		= 0x002,
+	MSF_XER_INSTRUCTIONS		= 0x004,
+	MSF_EXPLICIT_TAGS		= 0x010,
+	MSF_IMPLICIT_TAGS		= 0x020,
+	MSF_AUTOMATIC_TAGS		= 0x040,
+	MSF_EXTENSIBILITY_IMPLIED	= 0x100,
 } asn1p_module_flags_e;
+#define	MSF_MASK_INSTRUCTIONS		0x0f
+#define	MSF_MASK_TAGS			0xf0
 
 /*
  * === EXAMPLE ===
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 68a94fe..9aa7e74 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -20,7 +20,7 @@
 #define	TOK_number	263
 #define	TOK_number_negative	264
 #define	TOK_typereference	265
-#define	TOK_objectclassreference	266
+#define	TOK_capitalreference	266
 #define	TOK_typefieldreference	267
 #define	TOK_valuefieldreference	268
 #define	TOK_ABSENT	269
@@ -46,68 +46,70 @@
 #define	TOK_DEFINED	289
 #define	TOK_EMBEDDED	290
 #define	TOK_ENCODED	291
-#define	TOK_END	292
-#define	TOK_ENUMERATED	293
-#define	TOK_EXPLICIT	294
-#define	TOK_EXPORTS	295
-#define	TOK_EXTENSIBILITY	296
-#define	TOK_EXTERNAL	297
-#define	TOK_FALSE	298
-#define	TOK_FROM	299
-#define	TOK_GeneralizedTime	300
-#define	TOK_GeneralString	301
-#define	TOK_GraphicString	302
-#define	TOK_IA5String	303
-#define	TOK_IDENTIFIER	304
-#define	TOK_IMPLICIT	305
-#define	TOK_IMPLIED	306
-#define	TOK_IMPORTS	307
-#define	TOK_INCLUDES	308
-#define	TOK_INSTANCE	309
-#define	TOK_INTEGER	310
-#define	TOK_ISO646String	311
-#define	TOK_MAX	312
-#define	TOK_MIN	313
-#define	TOK_MINUS_INFINITY	314
-#define	TOK_NULL	315
-#define	TOK_NumericString	316
-#define	TOK_OBJECT	317
-#define	TOK_ObjectDescriptor	318
-#define	TOK_OCTET	319
-#define	TOK_OF	320
-#define	TOK_OPTIONAL	321
-#define	TOK_PATTERN	322
-#define	TOK_PDV	323
-#define	TOK_PLUS_INFINITY	324
-#define	TOK_PRESENT	325
-#define	TOK_PrintableString	326
-#define	TOK_PRIVATE	327
-#define	TOK_REAL	328
-#define	TOK_RELATIVE_OID	329
-#define	TOK_SEQUENCE	330
-#define	TOK_SET	331
-#define	TOK_SIZE	332
-#define	TOK_STRING	333
-#define	TOK_SYNTAX	334
-#define	TOK_T61String	335
-#define	TOK_TAGS	336
-#define	TOK_TeletexString	337
-#define	TOK_TRUE	338
-#define	TOK_TYPE_IDENTIFIER	339
-#define	TOK_UNIQUE	340
-#define	TOK_UNIVERSAL	341
-#define	TOK_UniversalString	342
-#define	TOK_UTCTime	343
-#define	TOK_UTF8String	344
-#define	TOK_VideotexString	345
-#define	TOK_VisibleString	346
-#define	TOK_WITH	347
-#define	TOK_UNION	348
-#define	TOK_INTERSECTION	349
+#define	TOK_ENCODING_CONTROL	292
+#define	TOK_END	293
+#define	TOK_ENUMERATED	294
+#define	TOK_EXPLICIT	295
+#define	TOK_EXPORTS	296
+#define	TOK_EXTENSIBILITY	297
+#define	TOK_EXTERNAL	298
+#define	TOK_FALSE	299
+#define	TOK_FROM	300
+#define	TOK_GeneralizedTime	301
+#define	TOK_GeneralString	302
+#define	TOK_GraphicString	303
+#define	TOK_IA5String	304
+#define	TOK_IDENTIFIER	305
+#define	TOK_IMPLICIT	306
+#define	TOK_IMPLIED	307
+#define	TOK_IMPORTS	308
+#define	TOK_INCLUDES	309
+#define	TOK_INSTANCE	310
+#define	TOK_INSTRUCTIONS	311
+#define	TOK_INTEGER	312
+#define	TOK_ISO646String	313
+#define	TOK_MAX	314
+#define	TOK_MIN	315
+#define	TOK_MINUS_INFINITY	316
+#define	TOK_NULL	317
+#define	TOK_NumericString	318
+#define	TOK_OBJECT	319
+#define	TOK_ObjectDescriptor	320
+#define	TOK_OCTET	321
+#define	TOK_OF	322
+#define	TOK_OPTIONAL	323
+#define	TOK_PATTERN	324
+#define	TOK_PDV	325
+#define	TOK_PLUS_INFINITY	326
+#define	TOK_PRESENT	327
+#define	TOK_PrintableString	328
+#define	TOK_PRIVATE	329
+#define	TOK_REAL	330
+#define	TOK_RELATIVE_OID	331
+#define	TOK_SEQUENCE	332
+#define	TOK_SET	333
+#define	TOK_SIZE	334
+#define	TOK_STRING	335
+#define	TOK_SYNTAX	336
+#define	TOK_T61String	337
+#define	TOK_TAGS	338
+#define	TOK_TeletexString	339
+#define	TOK_TRUE	340
+#define	TOK_TYPE_IDENTIFIER	341
+#define	TOK_UNIQUE	342
+#define	TOK_UNIVERSAL	343
+#define	TOK_UniversalString	344
+#define	TOK_UTCTime	345
+#define	TOK_UTF8String	346
+#define	TOK_VideotexString	347
+#define	TOK_VisibleString	348
+#define	TOK_WITH	349
 #define	TOK_EXCEPT	350
-#define	TOK_TwoDots	351
-#define	TOK_ThreeDots	352
-#define	TOK_tag	353
+#define	TOK_INTERSECTION	351
+#define	TOK_UNION	352
+#define	TOK_TwoDots	353
+#define	TOK_ThreeDots	354
+#define	TOK_tag	355
 
 #line 1 "asn1p_y.y"
 
@@ -127,6 +129,7 @@
 int yyerror(const char *msg);
 void asn1p_lexer_hack_push_opaque_state(void);
 void asn1p_lexer_hack_enable_with_syntax(void);
+void asn1p_lexer_hack_push_encoding_control(void);
 #define	yylineno	asn1p_lineno
 extern int asn1p_lineno;
 
@@ -159,7 +162,7 @@
 	} while(0)
 
 
-#line 57 "asn1p_y.y"
+#line 58 "asn1p_y.y"
 typedef union {
 	asn1p_t			*a_grammar;
 	asn1p_module_flags_e	 a_module_flags;
@@ -202,26 +205,26 @@
 
 
 
-#define	YYFINAL		375
+#define	YYFINAL		381
 #define	YYFLAG		-32768
-#define	YYNTBASE	113
+#define	YYNTBASE	115
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 353 ? yytranslate[x] : 211)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 210)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   109,     2,     2,     2,     2,     2,     2,   104,
-   105,     2,     2,   107,     2,   110,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,   108,   106,   111,
-     2,     2,     2,   112,     2,     2,     2,     2,     2,     2,
+     2,     2,   111,     2,     2,     2,     2,     2,     2,   106,
+   107,     2,     2,   109,     2,   112,     2,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     2,   110,   108,   113,
+     2,     2,     2,   114,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,    96,     2,     2,     2,     2,     2,     2,
+     2,     2,     2,    97,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,   102,    94,   103,     2,     2,     2,     2,     2,
+     2,     2,   104,    99,   105,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -243,140 +246,140 @@
     57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
     67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
     77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-    87,    88,    89,    90,    91,    92,    93,    95,    97,    98,
-    99,   100,   101
+    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+    98,   100,   101,   102,   103
 };
 
 #if YYDEBUG != 0
 static const short yyprhs[] = {     0,
      0,     2,     4,     7,    16,    17,    19,    23,    26,    28,
     31,    33,    38,    40,    41,    43,    45,    48,    51,    54,
-    57,    60,    61,    63,    65,    68,    70,    72,    74,    76,
-    78,    80,    84,    87,    89,    92,    97,    99,   103,   105,
-   107,   111,   115,   118,   120,   124,   126,   128,   135,   137,
-   139,   140,   142,   147,   152,   156,   163,   165,   169,   171,
-   175,   179,   181,   185,   187,   189,   191,   195,   201,   202,
-   204,   206,   210,   213,   217,   222,   223,   225,   226,   233,
-   235,   238,   240,   242,   245,   247,   251,   253,   257,   261,
-   263,   265,   267,   272,   274,   278,   280,   284,   288,   290,
-   294,   296,   300,   302,   304,   306,   308,   313,   314,   318,
-   320,   322,   324,   326,   328,   330,   334,   336,   339,   341,
-   343,   345,   347,   350,   353,   355,   357,   360,   363,   365,
-   367,   369,   371,   374,   376,   379,   381,   383,   385,   387,
-   389,   391,   393,   395,   397,   399,   401,   403,   405,   407,
-   412,   417,   422,   427,   432,   434,   439,   440,   442,   444,
-   446,   448,   450,   452,   457,   459,   462,   466,   468,   472,
-   478,   480,   484,   486,   488,   492,   494,   498,   500,   504,
-   506,   510,   515,   517,   519,   521,   524,   527,   531,   533,
-   535,   537,   539,   541,   543,   545,   547,   549,   555,   557,
-   561,   563,   567,   568,   570,   572,   574,   576,   578,   580,
-   584,   589,   591,   595,   598,   602,   604,   608,   609,   611,
-   613,   616,   618,   620,   621,   625,   628,   632,   634,   638,
-   640,   645,   650,   652,   654,   656,   658,   659,   661,   663,
-   666,   669,   671,   673,   675,   677,   679
+    57,    60,    63,    64,    66,    68,    71,    73,    75,    77,
+    79,    81,    82,    86,    88,    92,    95,    97,   100,   105,
+   107,   111,   113,   115,   119,   123,   126,   128,   132,   134,
+   136,   143,   145,   147,   148,   150,   155,   160,   164,   171,
+   173,   177,   179,   183,   187,   189,   193,   195,   197,   199,
+   203,   209,   210,   212,   214,   218,   221,   225,   230,   231,
+   233,   234,   241,   243,   246,   248,   250,   253,   255,   259,
+   261,   265,   269,   271,   273,   275,   280,   282,   286,   288,
+   292,   296,   298,   302,   304,   308,   310,   312,   314,   316,
+   321,   322,   326,   328,   330,   332,   334,   336,   338,   342,
+   344,   347,   349,   351,   353,   355,   358,   361,   363,   365,
+   368,   371,   373,   375,   377,   379,   382,   384,   387,   389,
+   391,   393,   395,   397,   399,   401,   403,   405,   407,   409,
+   411,   413,   415,   420,   425,   430,   435,   440,   442,   447,
+   449,   451,   453,   455,   457,   458,   460,   465,   469,   474,
+   476,   480,   486,   488,   492,   496,   500,   505,   509,   511,
+   515,   519,   523,   527,   529,   531,   533,   536,   539,   543,
+   545,   547,   549,   551,   553,   555,   557,   563,   565,   569,
+   571,   575,   576,   578,   580,   582,   584,   586,   588,   592,
+   597,   599,   603,   606,   610,   612,   616,   617,   619,   621,
+   624,   626,   628,   629,   633,   636,   640,   642,   646,   648,
+   653,   658,   660,   662,   664,   666,   667,   669,   671,   674,
+   677,   679,   681,   683,   685,   687
 };
 
-static const short yyrhs[] = {   114,
-     0,   115,     0,   114,   115,     0,   207,   116,    34,   120,
-     3,    21,   123,    38,     0,     0,   117,     0,   102,   118,
-   103,     0,   102,   103,     0,   119,     0,   118,   119,     0,
-   209,     0,   209,   104,     9,   105,     0,     9,     0,     0,
-   121,     0,   122,     0,   121,   122,     0,    40,    82,     0,
-    51,    82,     0,    20,    82,     0,    42,    52,     0,     0,
-   124,     0,   125,     0,   124,   125,     0,   126,     0,   131,
-     0,   137,     0,   161,     0,   134,     0,   169,     0,    53,
-   127,   106,     0,    53,    45,     0,   128,     0,   127,   128,
-     0,   129,    45,   207,   116,     0,   130,     0,   129,   107,
-   130,     0,   207,     0,   209,     0,    41,   132,   106,     0,
-    41,    17,   106,     0,    41,   106,     0,   133,     0,   132,
-   107,   133,     0,   207,     0,   209,     0,   207,   135,     3,
-   102,   136,   103,     0,   156,     0,   166,     0,     0,   177,
-     0,   207,     3,   205,    85,     0,   207,     3,   205,   153,
-     0,   207,     3,   143,     0,   207,   102,   138,   103,     3,
-   153,     0,   139,     0,   138,   107,   139,     0,   207,     0,
-   207,   108,   209,     0,   166,   108,   209,     0,   141,     0,
-   140,   107,   141,     0,   155,     0,   209,     0,   152,     0,
-   142,   107,   152,     0,    28,   102,   145,   103,   147,     0,
-     0,    86,     0,   146,     0,   145,   107,   146,     0,   159,
-   197,     0,   159,   153,   144,     0,   159,   159,   197,   144,
-     0,     0,   148,     0,     0,    93,    80,   102,   149,   150,
-   103,     0,   151,     0,   150,   151,     0,     4,     0,   159,
-     0,   210,   153,     0,   154,     0,   155,   171,   197,     0,
-   100,     0,   100,   109,   164,     0,   100,   109,   204,     0,
-   168,     0,   169,     0,   170,     0,   207,   102,   140,   103,
-     0,   156,     0,    55,    66,   156,     0,    11,     0,    11,
-   110,   207,     0,    11,   110,   209,     0,   208,     0,   208,
-   110,   157,     0,   158,     0,   157,   110,   158,     0,   160,
-     0,   160,     0,    13,     0,    14,     0,   209,   135,     3,
-   162,     0,     0,   102,   163,   165,     0,     5,     0,     7,
-     0,     6,     0,   204,     0,   164,     0,   209,     0,   207,
-   110,   209,     0,     4,     0,   165,     4,     0,    24,     0,
-    61,     0,    74,     0,   167,     0,    65,    79,     0,    63,
-    50,     0,    75,     0,    43,     0,    36,    69,     0,    26,
-    79,     0,    89,     0,    46,     0,    56,     0,    39,     0,
-    22,    79,     0,   166,     0,   167,   201,     0,    23,     0,
-    47,     0,    48,     0,    49,     0,    57,     0,    62,     0,
-    72,     0,    81,     0,    83,     0,    88,     0,    90,     0,
-    91,     0,    92,     0,    64,     0,    27,   102,   142,   103,
-     0,    76,   102,   142,   103,     0,    77,   102,   142,   103,
-     0,    76,   171,    66,   155,     0,    77,   171,    66,   155,
-     0,    18,     0,    18,    35,    25,   209,     0,     0,   175,
-     0,    94,     0,    95,     0,    96,     0,    97,     0,    98,
-     0,    78,   104,   177,   105,     0,   176,     0,   175,   176,
-     0,   104,   177,   105,     0,   178,     0,   178,   107,   100,
-     0,   178,   107,   100,   107,   178,     0,   100,     0,   100,
-   107,   178,     0,   179,     0,   180,     0,   179,   172,   180,
-     0,   181,     0,   180,   173,   181,     0,   182,     0,   181,
-   174,   182,     0,   185,     0,   185,   183,   185,     0,   184,
-   104,   177,   105,     0,   191,     0,   186,     0,    99,     0,
-    99,   111,     0,   111,    99,     0,   111,    99,   111,     0,
-    78,     0,    45,     0,   204,     0,   209,     0,     6,     0,
-    59,     0,    58,     0,    44,     0,    84,     0,    93,    30,
-   102,   187,   103,     0,   188,     0,   187,   107,   188,     0,
-   100,     0,   209,   171,   189,     0,     0,   190,     0,    71,
-     0,    15,     0,    67,     0,   192,     0,   193,     0,   102,
-   207,   103,     0,   192,   102,   194,   103,     0,   195,     0,
-   194,   107,   195,     0,   112,   196,     0,   112,   110,   196,
-     0,   209,     0,   196,   110,   209,     0,     0,   198,     0,
-    67,     0,    33,   199,     0,   185,     0,   166,     0,     0,
-   102,   200,   165,     0,   102,   103,     0,   102,   202,   103,
-     0,   203,     0,   202,   107,   203,     0,   209,     0,   209,
-   104,   204,   105,     0,   209,   104,   164,   105,     0,   204,
-     0,   100,     0,     9,     0,    10,     0,     0,   206,     0,
-   101,     0,   101,    51,     0,   101,    40,     0,    11,     0,
-    12,     0,    12,     0,     8,     0,   209,     0,   209,   206,
-     0
+static const short yyrhs[] = {   116,
+     0,   117,     0,   116,   117,     0,   206,   118,    34,   122,
+     3,    21,   125,    39,     0,     0,   119,     0,   104,   120,
+   105,     0,   104,   105,     0,   121,     0,   120,   121,     0,
+   208,     0,   208,   106,     9,   107,     0,     9,     0,     0,
+   123,     0,   124,     0,   123,   124,     0,    41,    84,     0,
+    52,    84,     0,    20,    84,     0,    43,    53,     0,    12,
+    57,     0,     0,   126,     0,   127,     0,   126,   127,     0,
+   129,     0,   134,     0,   140,     0,   164,     0,   137,     0,
+     0,    38,    12,   128,     0,   172,     0,    54,   130,   108,
+     0,    54,    46,     0,   131,     0,   130,   131,     0,   132,
+    46,   206,   118,     0,   133,     0,   132,   109,   133,     0,
+   206,     0,   208,     0,    42,   135,   108,     0,    42,    17,
+   108,     0,    42,   108,     0,   136,     0,   135,   109,   136,
+     0,   206,     0,   208,     0,   206,   138,     3,   104,   139,
+   105,     0,   159,     0,   169,     0,     0,   179,     0,   206,
+     3,   204,    87,     0,   206,     3,   204,   156,     0,   206,
+     3,   146,     0,   206,   104,   141,   105,     3,   156,     0,
+   142,     0,   141,   109,   142,     0,   206,     0,   206,   110,
+   208,     0,   169,   110,   208,     0,   144,     0,   143,   109,
+   144,     0,   158,     0,   208,     0,   155,     0,   145,   109,
+   155,     0,    28,   104,   148,   105,   150,     0,     0,    88,
+     0,   149,     0,   148,   109,   149,     0,   162,   196,     0,
+   162,   156,   147,     0,   162,   162,   196,   147,     0,     0,
+   151,     0,     0,    95,    82,   104,   152,   153,   105,     0,
+   154,     0,   153,   154,     0,     4,     0,   162,     0,   209,
+   156,     0,   157,     0,   158,   177,   196,     0,   102,     0,
+   102,   111,   167,     0,   102,   111,   203,     0,   171,     0,
+   172,     0,   173,     0,   206,   104,   143,   105,     0,   159,
+     0,    56,    68,   159,     0,    11,     0,    11,   112,   206,
+     0,    11,   112,   208,     0,   207,     0,   207,   112,   160,
+     0,   161,     0,   160,   112,   161,     0,   163,     0,   163,
+     0,    13,     0,    14,     0,   208,   138,     3,   165,     0,
+     0,   104,   166,   168,     0,     5,     0,     7,     0,     6,
+     0,   203,     0,   167,     0,   208,     0,   206,   112,   208,
+     0,     4,     0,   168,     4,     0,    24,     0,    63,     0,
+    76,     0,   170,     0,    67,    81,     0,    65,    51,     0,
+    77,     0,    44,     0,    36,    71,     0,    26,    81,     0,
+    91,     0,    47,     0,    58,     0,    40,     0,    22,    81,
+     0,   169,     0,   170,   200,     0,    23,     0,    48,     0,
+    49,     0,    50,     0,    59,     0,    64,     0,    74,     0,
+    83,     0,    85,     0,    90,     0,    92,     0,    93,     0,
+    94,     0,    66,     0,    27,   104,   145,   105,     0,    78,
+   104,   145,   105,     0,    79,   104,   145,   105,     0,    78,
+   177,    68,   158,     0,    79,   177,    68,   158,     0,    18,
+     0,    18,    35,    25,   208,     0,    99,     0,   100,     0,
+    97,     0,    98,     0,    96,     0,     0,   178,     0,    80,
+   106,   179,   107,     0,   106,   179,   107,     0,   178,   106,
+   179,   107,     0,   180,     0,   180,   109,   102,     0,   180,
+   109,   102,   109,   180,     0,   181,     0,   180,   174,   181,
+     0,   180,   175,   181,     0,   181,   176,   181,     0,   183,
+   106,   179,   107,     0,   106,   179,   107,     0,   184,     0,
+   184,   182,   184,     0,    61,   182,   184,     0,   184,   182,
+    60,     0,    61,   182,    60,     0,   190,     0,   185,     0,
+   101,     0,   101,   113,     0,   113,   101,     0,   113,   101,
+   113,     0,    80,     0,    46,     0,   203,     0,   208,     0,
+     6,     0,    45,     0,    86,     0,    95,    30,   104,   186,
+   105,     0,   187,     0,   186,   109,   187,     0,   102,     0,
+   208,   177,   188,     0,     0,   189,     0,    73,     0,    15,
+     0,    69,     0,   191,     0,   192,     0,   104,   206,   105,
+     0,   191,   104,   193,   105,     0,   194,     0,   193,   109,
+   194,     0,   114,   195,     0,   114,   112,   195,     0,   208,
+     0,   195,   112,   208,     0,     0,   197,     0,    69,     0,
+    33,   198,     0,   184,     0,   169,     0,     0,   104,   199,
+   168,     0,   104,   105,     0,   104,   201,   105,     0,   202,
+     0,   201,   109,   202,     0,   208,     0,   208,   106,   203,
+   107,     0,   208,   106,   167,   107,     0,   203,     0,   102,
+     0,     9,     0,    10,     0,     0,   205,     0,   103,     0,
+   103,    52,     0,   103,    41,     0,    11,     0,    12,     0,
+    12,     0,     8,     0,   208,     0,   208,   205,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   297,   303,   309,   325,   350,   352,   355,   359,   364,   371,
-   379,   384,   388,   397,   399,   407,   411,   419,   423,   426,
-   429,   437,   439,   448,   452,   478,   482,   491,   498,   511,
-   522,   535,   542,   547,   553,   559,   568,   574,   580,   587,
-   595,   599,   602,   609,   615,   621,   628,   637,   647,   655,
-   663,   665,   677,   689,   696,   712,   722,   732,   742,   747,
-   754,   764,   770,   776,   780,   792,   798,   804,   814,   816,
-   819,   827,   833,   842,   847,   864,   866,   871,   875,   880,
-   885,   891,   895,   920,   927,   932,   940,   949,   958,   969,
-   973,   979,   987,  1011,  1018,  1032,  1041,  1051,  1061,  1069,
-  1090,  1099,  1108,  1109,  1111,  1118,  1130,  1140,  1142,  1147,
-  1151,  1155,  1159,  1162,  1167,  1179,  1195,  1206,  1220,  1222,
-  1223,  1224,  1225,  1226,  1227,  1228,  1229,  1230,  1231,  1232,
-  1238,  1240,  1241,  1244,  1251,  1263,  1265,  1269,  1273,  1274,
-  1275,  1276,  1277,  1281,  1282,  1283,  1284,  1288,  1289,  1292,
-  1299,  1305,  1311,  1319,  1327,  1333,  1349,  1351,  1354,  1354,
-  1355,  1355,  1356,  1358,  1371,  1374,  1379,  1385,  1389,  1396,
-  1405,  1410,  1419,  1421,  1423,  1428,  1430,  1436,  1438,  1443,
-  1450,  1457,  1465,  1468,  1473,  1475,  1476,  1477,  1480,  1484,
-  1489,  1493,  1504,  1508,  1513,  1518,  1523,  1530,  1536,  1540,
-  1545,  1551,  1563,  1565,  1568,  1572,  1575,  1580,  1584,  1592,
-  1607,  1613,  1620,  1633,  1645,  1660,  1664,  1681,  1683,  1686,
-  1690,  1696,  1699,  1701,  1701,  1721,  1726,  1731,  1737,  1743,
-  1751,  1759,  1767,  1774,  1784,  1789,  1819,  1821,  1824,  1829,
-  1833,  1839,  1844,  1850,  1857,  1864,  1869
+   296,   302,   308,   324,   349,   351,   354,   358,   363,   370,
+   378,   383,   387,   396,   398,   406,   410,   418,   422,   425,
+   428,   432,   452,   454,   462,   466,   498,   502,   511,   518,
+   531,   538,   540,   552,   565,   572,   577,   583,   589,   598,
+   604,   610,   617,   625,   629,   632,   639,   645,   651,   658,
+   667,   677,   685,   693,   695,   707,   719,   726,   742,   752,
+   762,   772,   777,   784,   794,   800,   806,   810,   822,   828,
+   834,   844,   846,   849,   857,   863,   872,   877,   894,   896,
+   901,   905,   910,   915,   921,   925,   950,   957,   962,   970,
+   979,   988,   999,  1003,  1009,  1017,  1041,  1048,  1062,  1071,
+  1081,  1091,  1099,  1120,  1129,  1138,  1139,  1141,  1148,  1160,
+  1170,  1172,  1177,  1181,  1185,  1189,  1192,  1197,  1209,  1225,
+  1236,  1250,  1252,  1253,  1254,  1255,  1256,  1257,  1258,  1259,
+  1260,  1261,  1262,  1268,  1270,  1271,  1274,  1281,  1293,  1295,
+  1299,  1303,  1304,  1305,  1306,  1307,  1311,  1312,  1313,  1314,
+  1318,  1319,  1322,  1329,  1335,  1341,  1349,  1357,  1363,  1379,
+  1379,  1380,  1380,  1381,  1383,  1385,  1388,  1402,  1406,  1411,
+  1415,  1421,  1431,  1435,  1438,  1441,  1446,  1455,  1463,  1469,
+  1476,  1484,  1492,  1501,  1504,  1509,  1511,  1512,  1513,  1516,
+  1520,  1525,  1529,  1540,  1545,  1550,  1557,  1563,  1567,  1572,
+  1578,  1590,  1592,  1595,  1599,  1602,  1607,  1611,  1619,  1634,
+  1640,  1647,  1660,  1672,  1687,  1691,  1708,  1710,  1713,  1717,
+  1723,  1726,  1728,  1728,  1748,  1753,  1758,  1764,  1770,  1778,
+  1786,  1794,  1801,  1811,  1816,  1846,  1848,  1851,  1856,  1860,
+  1866,  1871,  1878,  1885,  1892,  1897
 };
 #endif
 
@@ -385,390 +388,384 @@
 
 static const char * const yytname[] = {   "$","error","$undefined.","TOK_PPEQ",
 "TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
-"TOK_number_negative","TOK_typereference","TOK_objectclassreference","TOK_typefieldreference",
+"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
 "TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
 "TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
 "TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
 "TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
-"TOK_EMBEDDED","TOK_ENCODED","TOK_END","TOK_ENUMERATED","TOK_EXPLICIT","TOK_EXPORTS",
-"TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE","TOK_FROM","TOK_GeneralizedTime",
-"TOK_GeneralString","TOK_GraphicString","TOK_IA5String","TOK_IDENTIFIER","TOK_IMPLICIT",
-"TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE","TOK_INTEGER","TOK_ISO646String",
-"TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY","TOK_NULL","TOK_NumericString","TOK_OBJECT",
-"TOK_ObjectDescriptor","TOK_OCTET","TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV",
-"TOK_PLUS_INFINITY","TOK_PRESENT","TOK_PrintableString","TOK_PRIVATE","TOK_REAL",
-"TOK_RELATIVE_OID","TOK_SEQUENCE","TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX",
-"TOK_T61String","TOK_TAGS","TOK_TeletexString","TOK_TRUE","TOK_TYPE_IDENTIFIER",
-"TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString","TOK_UTCTime","TOK_UTF8String",
-"TOK_VideotexString","TOK_VisibleString","TOK_WITH","'|'","TOK_UNION","'^'",
-"TOK_INTERSECTION","TOK_EXCEPT","TOK_TwoDots","TOK_ThreeDots","TOK_tag","'{'",
-"'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'","ParsedGrammar",
-"ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
+"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
+"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
+"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
+"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
+"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
+"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
+"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
+"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
+"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
+"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
+"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
+"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
+"TOK_tag","'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'",
+"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
 "ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
 "ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
-"ModuleSpecificationBody","ModuleSpecificationElement","ImportsDefinition","ImportsBundleSet",
-"ImportsBundle","ImportsList","ImportsElement","ExportsDefinition","ExportsBody",
-"ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody","DataTypeReference",
-"ParameterArgumentList","ParameterArgumentName","ActualParameterList","ActualParameter",
-"ConstructedDataTypeDefinition","ClassDeclaration","optUnique","ClassFieldList",
-"ClassField","optWithSyntax","WithSyntax","@1","WithSyntaxFormat","WithSyntaxFormatToken",
-"DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException","TypeDeclaration",
-"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
+"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
+"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
+"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
+"DataTypeReference","ParameterArgumentList","ParameterArgumentName","ActualParameterList",
+"ActualParameter","ConstructedDataTypeDefinition","ClassDeclaration","optUnique",
+"ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2","WithSyntaxFormat",
+"WithSyntaxFormatToken","DataTypeMember","ConstrainedTypeDeclaration","ExtensionAndException",
+"TypeDeclaration","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
 "ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue",
-"@2","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
-"BasicType","BasicString","ConstructedType","optConstraints","Union","Intersection",
-"Except","Constraints","SingleConstraint","ConstraintElementSet","ConstraintElement",
-"ConstraintElementUnion","ConstraintElementIntersection","ConstraintElementException",
-"ConstraintSubtypeElement","ConstraintRangeSpec","ConstraintSpec","ConstraintValue",
-"WithComponents","WithComponentsList","WithComponentsElement","optPresenceConstraint",
-"PresenceConstraint","TableConstraint","SimpleTableConstraint","ComponentRelationConstraint",
-"AtNotationList","AtNotationElement","ComponentIdList","optMarker","Marker",
-"DefaultValue","@3","UniverationDefinition","UniverationList","UniverationElement",
-"SignedNumber","optTag","Tag","TypeRefName","ObjectClassReference","Identifier",
-"TaggedIdentifier", NULL
+"@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
+"BasicType","BasicString","ConstructedType","Union","Intersection","Except",
+"optConstraints","SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
+"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
+"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
+"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
+"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition",
+"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName",
+"ObjectClassReference","Identifier","TaggedIdentifier", NULL
 };
 #endif
 
 static const short yyr1[] = {     0,
-   113,   114,   114,   115,   116,   116,   117,   117,   118,   118,
-   119,   119,   119,   120,   120,   121,   121,   122,   122,   122,
-   122,   123,   123,   124,   124,   125,   125,   125,   125,   125,
-   125,   126,   126,   127,   127,   128,   129,   129,   130,   130,
-   131,   131,   131,   132,   132,   133,   133,   134,   135,   135,
-   136,   136,   137,   137,   137,   137,   138,   138,   139,   139,
-   139,   140,   140,   141,   141,   142,   142,   143,   144,   144,
-   145,   145,   146,   146,   146,   147,   147,   149,   148,   150,
-   150,   151,   151,   152,   152,   153,   154,   154,   154,   155,
-   155,   155,   155,   155,   155,   156,   156,   156,   156,   156,
-   157,   157,   158,   159,   160,   160,   161,   163,   162,   162,
-   162,   162,   162,   162,   164,   164,   165,   165,   166,   166,
-   166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
-   167,   167,   167,   168,   168,   169,   169,   169,   169,   169,
-   169,   169,   169,   169,   169,   169,   169,   169,   169,   170,
-   170,   170,   170,   170,   170,   170,   171,   171,   172,   172,
-   173,   173,   174,   175,   175,   175,   176,   177,   177,   177,
-   177,   177,   178,   179,   179,   180,   180,   181,   181,   182,
-   182,   182,   182,   182,   183,   183,   183,   183,   184,   184,
-   185,   185,   185,   185,   185,   185,   185,   186,   187,   187,
-   188,   188,   189,   189,   190,   190,   190,   191,   191,   192,
-   193,   194,   194,   195,   195,   196,   196,   197,   197,   198,
-   198,   199,   199,   200,   199,   201,   201,   202,   202,   203,
-   203,   203,   203,   203,   204,   204,   205,   205,   206,   206,
-   206,   207,   207,   208,   209,   210,   210
+   115,   116,   116,   117,   118,   118,   119,   119,   120,   120,
+   121,   121,   121,   122,   122,   123,   123,   124,   124,   124,
+   124,   124,   125,   125,   126,   126,   127,   127,   127,   127,
+   127,   128,   127,   127,   129,   129,   130,   130,   131,   132,
+   132,   133,   133,   134,   134,   134,   135,   135,   136,   136,
+   137,   138,   138,   139,   139,   140,   140,   140,   140,   141,
+   141,   142,   142,   142,   143,   143,   144,   144,   145,   145,
+   146,   147,   147,   148,   148,   149,   149,   149,   150,   150,
+   152,   151,   153,   153,   154,   154,   155,   155,   156,   157,
+   157,   157,   158,   158,   158,   158,   158,   158,   159,   159,
+   159,   159,   159,   160,   160,   161,   162,   163,   163,   164,
+   166,   165,   165,   165,   165,   165,   165,   167,   167,   168,
+   168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
+   169,   169,   169,   170,   170,   170,   171,   171,   172,   172,
+   172,   172,   172,   172,   172,   172,   172,   172,   172,   172,
+   172,   172,   173,   173,   173,   173,   173,   173,   173,   174,
+   174,   175,   175,   176,   177,   177,   177,   178,   178,   179,
+   179,   179,   180,   180,   180,   180,   181,   181,   181,   181,
+   181,   181,   181,   181,   181,   182,   182,   182,   182,   183,
+   183,   184,   184,   184,   184,   184,   185,   186,   186,   187,
+   187,   188,   188,   189,   189,   189,   190,   190,   191,   192,
+   193,   193,   194,   194,   195,   195,   196,   196,   197,   197,
+   198,   198,   199,   198,   200,   200,   201,   201,   202,   202,
+   202,   202,   202,   203,   203,   204,   204,   205,   205,   205,
+   206,   206,   207,   208,   209,   209
 };
 
 static const short yyr2[] = {     0,
      1,     1,     2,     8,     0,     1,     3,     2,     1,     2,
      1,     4,     1,     0,     1,     1,     2,     2,     2,     2,
-     2,     0,     1,     1,     2,     1,     1,     1,     1,     1,
-     1,     3,     2,     1,     2,     4,     1,     3,     1,     1,
-     3,     3,     2,     1,     3,     1,     1,     6,     1,     1,
-     0,     1,     4,     4,     3,     6,     1,     3,     1,     3,
-     3,     1,     3,     1,     1,     1,     3,     5,     0,     1,
-     1,     3,     2,     3,     4,     0,     1,     0,     6,     1,
-     2,     1,     1,     2,     1,     3,     1,     3,     3,     1,
-     1,     1,     4,     1,     3,     1,     3,     3,     1,     3,
-     1,     3,     1,     1,     1,     1,     4,     0,     3,     1,
-     1,     1,     1,     1,     1,     3,     1,     2,     1,     1,
-     1,     1,     2,     2,     1,     1,     2,     2,     1,     1,
-     1,     1,     2,     1,     2,     1,     1,     1,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
-     4,     4,     4,     4,     1,     4,     0,     1,     1,     1,
-     1,     1,     1,     4,     1,     2,     3,     1,     3,     5,
-     1,     3,     1,     1,     3,     1,     3,     1,     3,     1,
-     3,     4,     1,     1,     1,     2,     2,     3,     1,     1,
-     1,     1,     1,     1,     1,     1,     1,     5,     1,     3,
-     1,     3,     0,     1,     1,     1,     1,     1,     1,     3,
-     4,     1,     3,     2,     3,     1,     3,     0,     1,     1,
-     2,     1,     1,     0,     3,     2,     3,     1,     3,     1,
-     4,     4,     1,     1,     1,     1,     0,     1,     1,     2,
-     2,     1,     1,     1,     1,     1,     2
+     2,     2,     0,     1,     1,     2,     1,     1,     1,     1,
+     1,     0,     3,     1,     3,     2,     1,     2,     4,     1,
+     3,     1,     1,     3,     3,     2,     1,     3,     1,     1,
+     6,     1,     1,     0,     1,     4,     4,     3,     6,     1,
+     3,     1,     3,     3,     1,     3,     1,     1,     1,     3,
+     5,     0,     1,     1,     3,     2,     3,     4,     0,     1,
+     0,     6,     1,     2,     1,     1,     2,     1,     3,     1,
+     3,     3,     1,     1,     1,     4,     1,     3,     1,     3,
+     3,     1,     3,     1,     3,     1,     1,     1,     1,     4,
+     0,     3,     1,     1,     1,     1,     1,     1,     3,     1,
+     2,     1,     1,     1,     1,     2,     2,     1,     1,     2,
+     2,     1,     1,     1,     1,     2,     1,     2,     1,     1,
+     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     4,     4,     4,     4,     4,     1,     4,     1,
+     1,     1,     1,     1,     0,     1,     4,     3,     4,     1,
+     3,     5,     1,     3,     3,     3,     4,     3,     1,     3,
+     3,     3,     3,     1,     1,     1,     2,     2,     3,     1,
+     1,     1,     1,     1,     1,     1,     5,     1,     3,     1,
+     3,     0,     1,     1,     1,     1,     1,     1,     3,     4,
+     1,     3,     2,     3,     1,     3,     0,     1,     1,     2,
+     1,     1,     0,     3,     2,     3,     1,     3,     1,     4,
+     4,     1,     1,     1,     1,     0,     1,     1,     2,     2,
+     1,     1,     1,     1,     1,     2
 };
 
 static const short yydefact[] = {     0,
-   242,   243,     1,     2,     5,     3,     0,     0,     6,   245,
+   241,   242,     1,     2,     5,     3,     0,     0,     6,   244,
     13,     8,     0,     9,    11,    14,     7,    10,     0,     0,
-     0,     0,     0,     0,    15,    16,     0,    20,    18,    21,
-    19,     0,    17,    12,    22,   136,     0,   137,   138,   139,
-     0,   140,   141,   149,   142,   143,   144,   145,   146,   147,
-   148,     0,    23,    24,    26,    27,    30,    28,    29,    31,
-     0,     0,     0,    43,     0,    44,    46,    47,    33,     0,
-    34,     0,    37,    39,    40,     4,    25,   237,    96,   244,
-     0,   119,     0,     0,   132,   126,   130,   131,   120,     0,
-     0,   121,   125,   129,     0,     0,    49,    50,   122,    99,
-     0,    42,    41,     0,    32,    35,     0,     0,     0,   239,
-    55,     0,   238,     0,   133,   128,   127,   124,   123,     0,
-    57,     0,    59,     0,     0,     0,    45,     5,    38,     0,
-   241,   240,    96,   244,   155,     0,     0,   157,   157,    53,
-    54,   157,    94,   134,   122,    90,    91,    92,     0,    97,
-    98,     0,     0,     0,     0,    51,   105,   106,   100,   101,
-   103,   110,   112,   111,   235,   236,   108,   107,   114,   113,
-     0,   115,    36,     0,    71,   218,   104,     0,     0,     0,
-     0,     0,     0,     0,   158,   165,     0,     0,   218,     0,
-   135,     0,     0,    58,    61,    60,   193,   196,   190,   195,
-   194,   189,   197,     0,   171,     0,     0,    52,   168,   173,
-   174,   176,   178,     0,   180,   184,   183,   208,   209,   191,
-   192,     0,     0,     0,    76,     0,     0,   220,    69,   218,
-    73,   219,     0,    87,     0,    66,    85,   246,     0,    95,
-     0,     0,     0,     0,   166,     0,     0,    86,   234,   226,
-     0,   228,   233,   230,     0,    62,    64,    65,    56,     0,
-     0,     0,    48,     0,   159,   160,     0,   161,   162,     0,
-   163,     0,     0,   185,     0,     0,     0,   102,   117,   109,
-   116,     0,    68,    77,    72,   224,   223,   222,   221,    70,
-    74,    69,   156,     0,   150,     0,   247,    84,     0,   151,
-   167,   153,   152,   154,   227,     0,     0,    93,     0,     0,
-   172,   210,   169,   175,   177,   179,     0,   186,   187,   181,
-     0,     0,   212,   118,     0,     0,    75,    88,    89,    67,
-   164,   229,     0,     0,    63,   201,     0,   199,   157,     0,
-   182,   188,     0,   214,   216,   211,     0,    78,   225,   232,
-   231,   198,     0,   203,   170,   215,     0,   213,     0,   200,
-   206,   207,   205,   202,   204,   217,    82,     0,    80,    83,
-    79,    81,     0,     0,     0
+     0,     0,     0,     0,     0,    15,    16,     0,    22,    20,
+    18,    21,    19,     0,    17,    12,    23,   139,     0,     0,
+   140,   141,   142,     0,   143,   144,   152,   145,   146,   147,
+   148,   149,   150,   151,     0,    24,    25,    27,    28,    31,
+    29,    30,    34,     0,     0,    32,     0,    46,     0,    47,
+    49,    50,    36,     0,    37,     0,    40,    42,    43,     4,
+    26,   236,    99,   243,     0,   122,     0,     0,   135,   129,
+   133,   134,   123,     0,     0,   124,   128,   132,     0,     0,
+    52,    53,   125,   102,     0,    33,    45,    44,     0,    35,
+    38,     0,     0,     0,   238,    58,     0,   237,     0,   136,
+   131,   130,   127,   126,     0,    60,     0,    62,     0,     0,
+     0,    48,     5,    41,     0,   240,   239,    99,   243,   158,
+     0,     0,   165,   165,    56,    57,   165,    97,   137,   125,
+    93,    94,    95,     0,   100,   101,     0,     0,     0,     0,
+    54,   108,   109,   103,   104,   106,   113,   115,   114,   234,
+   235,   111,   110,   117,   116,     0,   118,    39,     0,    74,
+   217,   107,     0,     0,     0,     0,     0,     0,     0,   166,
+     0,     0,   217,     0,   138,     0,     0,    61,    64,    63,
+   194,   195,   191,     0,   190,   196,     0,     0,     0,     0,
+    55,   170,   173,     0,   179,   185,   184,   207,   208,   192,
+   193,     0,     0,     0,    79,     0,     0,   219,    72,   217,
+    76,   218,     0,    90,     0,    69,    88,   245,     0,    98,
+     0,     0,     0,     0,     0,     0,     0,    89,   233,   225,
+     0,   227,   232,   229,     0,    65,    67,    68,    59,   186,
+     0,     0,     0,     0,     0,    51,   162,   163,   160,   161,
+     0,     0,     0,   164,     0,     0,     0,     0,   105,   120,
+   112,   119,     0,    71,    80,    75,   223,   222,   221,   220,
+    73,    77,    72,   159,     0,   153,     0,   246,    87,     0,
+   154,   168,   156,     0,   155,   157,   226,     0,     0,    96,
+     0,   187,   188,   183,   181,     0,   209,   178,   171,   174,
+   175,   176,     0,   182,   180,     0,     0,   211,   121,     0,
+     0,    78,    91,    92,    70,   167,   169,   228,     0,     0,
+    66,   189,   200,     0,   198,   165,     0,   177,     0,   213,
+   215,   210,     0,    81,   224,   231,   230,   197,     0,   202,
+   172,   214,     0,   212,     0,   199,   205,   206,   204,   201,
+   203,   216,    85,     0,    83,    86,    82,    84,     0,     0,
+     0
 };
 
-static const short yydefgoto[] = {   373,
-     3,     4,     8,     9,    13,    14,    24,    25,    26,    52,
-    53,    54,    55,    70,    71,    72,    73,    56,    65,    66,
-    57,    96,   207,    58,   120,   121,   255,   256,   235,   111,
-   291,   174,   175,   283,   284,   359,   368,   369,   236,   141,
-   237,   142,   143,   159,   160,   176,   177,    59,   168,   223,
-   169,   280,   144,   145,   146,   147,   148,   184,   267,   270,
-   272,   185,   186,   208,   209,   210,   211,   212,   213,   276,
-   214,   215,   216,   337,   338,   364,   365,   217,   218,   219,
-   322,   323,   344,   231,   232,   289,   326,   191,   251,   252,
-   220,   112,   113,   149,   100,   221,   239
+static const short yydefgoto[] = {   379,
+     3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
+    56,    57,   106,    58,    74,    75,    76,    77,    59,    69,
+    70,    60,   100,   210,    61,   125,   126,   255,   256,   235,
+   116,   292,   179,   180,   284,   285,   365,   374,   375,   236,
+   146,   237,   147,   148,   164,   165,   181,   182,    62,   173,
+   223,   174,   281,   149,   150,   151,   152,   153,   272,   273,
+   275,   189,   190,   211,   212,   213,   262,   214,   215,   216,
+   344,   345,   370,   371,   217,   218,   219,   327,   328,   350,
+   231,   232,   290,   331,   195,   251,   252,   220,   117,   118,
+   154,   104,   221,   239
 };
 
-static const short yypact[] = {    81,
--32768,-32768,    81,-32768,   -45,-32768,    23,    70,-32768,-32768,
--32768,-32768,    47,-32768,    31,   190,-32768,-32768,   132,    61,
-    69,   108,    86,   176,   190,-32768,    76,-32768,-32768,-32768,
--32768,   166,-32768,-32768,   442,-32768,    32,-32768,-32768,-32768,
-   121,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   168,   442,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   179,   732,   103,-32768,    52,-32768,-32768,-32768,-32768,    39,
--32768,    16,-32768,-32768,-32768,-32768,-32768,   -11,   111,-32768,
-   150,-32768,   152,   142,-32768,-32768,-32768,-32768,-32768,   184,
-   159,-32768,-32768,-32768,   748,   240,-32768,-32768,-32768,   135,
-   243,-32768,-32768,   141,-32768,-32768,    81,   141,   145,    60,
--32768,   599,-32768,   141,-32768,-32768,-32768,-32768,-32768,    -1,
--32768,   143,   144,   147,   206,    68,-32768,   -45,-32768,   206,
--32768,-32768,   -42,   148,   221,   161,   198,    40,    53,-32768,
--32768,   -37,-32768,-32768,   163,-32768,-32768,-32768,   164,-32768,
--32768,   264,   748,   261,   261,   155,-32768,-32768,   160,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   162,-32768,-32768,    64,-32768,   524,-32768,   246,    21,   212,
-   169,    21,   155,   208,   171,-32768,    21,   210,     2,    17,
--32768,   383,   674,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   247,   172,    81,   175,-32768,   173,   133,
-   140,   185,-32768,   178,    35,-32768,-32768,   182,-32768,-32768,
--32768,   206,   281,   261,   193,   206,   301,-32768,   202,     2,
--32768,-32768,   261,   181,    66,-32768,-32768,   191,   674,-32768,
-   155,    71,   186,   674,-32768,    89,   674,-32768,-32768,-32768,
-    90,-32768,-32768,   189,    91,-32768,-32768,-32768,-32768,   192,
-   309,   194,-32768,   196,-32768,-32768,   309,-32768,-32768,   309,
--32768,   309,   155,   187,   205,    78,   200,-32768,-32768,   297,
--32768,   225,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   202,-32768,   250,-32768,    21,-32768,-32768,   201,-32768,
--32768,-32768,-32768,-32768,-32768,    56,   250,-32768,   383,    25,
--32768,-32768,   209,   140,   185,-32768,   215,-32768,   211,-32768,
-     6,   101,-32768,-32768,   219,   281,-32768,-32768,-32768,-32768,
--32768,-32768,   223,   224,-32768,-32768,   109,-32768,   -37,   309,
--32768,-32768,   261,   203,-32768,-32768,   200,-32768,   297,-32768,
--32768,-32768,    25,    24,-32768,   203,   261,-32768,   126,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,     9,-32768,-32768,
--32768,-32768,   324,   326,-32768
+static const short yypact[] = {    41,
+-32768,-32768,    41,-32768,   -62,-32768,    10,    54,-32768,-32768,
+-32768,-32768,    20,-32768,   -20,    44,-32768,-32768,    95,    78,
+    72,    83,    45,   112,   187,    44,-32768,    94,-32768,-32768,
+-32768,-32768,-32768,   189,-32768,-32768,   398,-32768,   223,    23,
+-32768,-32768,-32768,    57,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   201,   398,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   194,   696,-32768,   140,-32768,    53,-32768,
+-32768,-32768,-32768,    47,-32768,   -25,-32768,-32768,-32768,-32768,
+-32768,    -8,   138,-32768,   173,-32768,   185,   196,-32768,-32768,
+-32768,-32768,-32768,   209,   188,-32768,-32768,-32768,   713,   265,
+-32768,-32768,-32768,   160,   271,-32768,-32768,-32768,   157,-32768,
+-32768,    41,   157,   174,   108,-32768,   559,-32768,   157,-32768,
+-32768,-32768,-32768,-32768,    90,-32768,   169,   171,   176,   137,
+    71,-32768,   -62,-32768,   137,-32768,-32768,    59,   178,   248,
+   180,   218,    42,    60,-32768,-32768,   -33,-32768,-32768,   183,
+-32768,-32768,-32768,   190,-32768,-32768,   289,   713,   287,   287,
+   133,-32768,-32768,   193,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   203,-32768,-32768,    93,-32768,
+   482,-32768,   272,     9,   170,   200,     9,   133,   231,   202,
+     9,   232,    30,    52,-32768,   337,   636,-32768,-32768,-32768,
+-32768,-32768,-32768,   -69,-32768,-32768,   283,    41,   133,   211,
+-32768,   124,   221,   212,   -69,-32768,-32768,   216,-32768,-32768,
+-32768,   137,   317,   287,   227,   137,   267,-32768,   235,    30,
+-32768,-32768,   287,   213,    98,-32768,-32768,   224,   636,-32768,
+   133,   103,   219,   636,   133,   106,   636,-32768,-32768,-32768,
+   120,-32768,-32768,   222,   122,-32768,-32768,-32768,-32768,   220,
+   228,    84,   233,   226,   229,-32768,-32768,-32768,-32768,-32768,
+   236,   133,   133,-32768,   133,   133,   128,   225,-32768,-32768,
+   331,-32768,   258,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   235,-32768,   234,-32768,     9,-32768,-32768,   239,
+-32768,-32768,-32768,   240,-32768,-32768,-32768,    14,   234,-32768,
+   337,-32768,   237,-32768,-32768,    19,-32768,-32768,   242,-32768,
+-32768,-32768,   247,-32768,-32768,     7,   127,-32768,-32768,   253,
+   317,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   255,   259,
+-32768,-32768,-32768,   142,-32768,   -33,   133,-32768,   287,   256,
+-32768,-32768,   225,-32768,   331,-32768,-32768,-32768,    19,    28,
+   165,   256,   287,-32768,   179,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,    12,-32768,-32768,-32768,-32768,   341,   365,
+-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   327,   204,-32768,-32768,   318,-32768,-32768,   308,-32768,
--32768,   282,-32768,-32768,   268,-32768,   226,-32768,-32768,   235,
--32768,   279,-32768,-32768,-32768,   195,-32768,    33,  -129,-32768,
-    51,-32768,   123,-32768,-32768,-32768,-32768,   -17,    59,  -156,
--32768,  -185,   -52,-32768,   130,  -173,  -109,-32768,-32768,-32768,
-  -209,    30,   -50,   -43,-32768,    46,-32768,  -137,-32768,-32768,
--32768,-32768,   180,  -159,  -246,-32768,    94,    88,    97,-32768,
--32768,  -206,-32768,-32768,    10,-32768,-32768,-32768,-32768,-32768,
--32768,    26,    27,  -141,-32768,-32768,-32768,-32768,-32768,    65,
-  -118,-32768,   134,     1,-32768,    -7,-32768
+-32768,   364,   241,-32768,-32768,   356,-32768,-32768,   344,-32768,
+-32768,   316,-32768,-32768,-32768,   301,-32768,   263,-32768,-32768,
+   269,-32768,   314,-32768,-32768,-32768,   230,-32768,    69,    62,
+-32768,    96,-32768,   156,-32768,-32768,-32768,-32768,    16,    86,
+  -131,-32768,  -193,   -55,-32768,   172,  -174,   -94,-32768,-32768,
+-32768,  -162,    61,   -53,   -51,-32768,    89,-32768,-32768,-32768,
+-32768,  -142,-32768,  -118,    50,   -17,   184,-32768,  -188,-32768,
+-32768,    32,-32768,-32768,-32768,-32768,-32768,-32768,    55,    49,
+  -121,-32768,-32768,-32768,-32768,-32768,    97,  -123,-32768,   181,
+     1,-32768,    -7,-32768
 };
 
 
-#define	YYLAST		837
+#define	YYLAST		804
 
 
 static const short yytable[] = {    15,
-     5,   188,   230,     5,   189,    15,   257,   170,    97,    97,
-    98,    98,   367,    10,   311,   161,   109,    99,    99,   229,
-   288,   157,   158,   243,    10,   165,   166,    62,    10,    68,
-    10,    11,    10,    75,   227,    61,   259,    67,   361,    10,
-   181,    74,     1,     2,   122,    62,    10,   248,    63,     1,
-     2,    99,   242,    61,    10,    11,     7,   246,   302,  -242,
-   107,   304,    75,    10,   165,   166,   183,   114,   228,   320,
-    74,   253,   162,   163,   164,    10,   165,   166,     1,     2,
-    60,   299,   298,   197,   328,    10,   165,   166,   292,   110,
-   362,     1,     2,   355,   363,   123,    68,   333,    60,   131,
-    75,   152,   122,    16,    67,   153,   151,   128,    74,    99,
-   132,   371,   161,   317,   150,   343,   249,   181,   172,   250,
-   234,   198,   108,   257,   336,    12,   171,   240,    10,   367,
-   181,     1,     2,   274,    19,   200,   201,    64,   157,   158,
-    27,   182,    28,   183,   105,   275,   195,   196,    10,    17,
-    29,     1,     2,   123,   187,   249,   183,   103,   104,    30,
-   197,   203,    10,   165,   166,    69,   225,    31,   295,   167,
-   226,   238,   296,   300,   238,   329,   287,   296,    32,   238,
-    34,    78,   254,    99,   258,   370,    35,   253,   334,    79,
-    80,   303,   305,   308,   370,   296,   306,   309,   198,   199,
-    81,   354,    82,   346,    83,    76,   262,   347,   102,    20,
-   117,   352,   200,   201,    84,   353,   281,    85,   157,   158,
-   114,    86,    79,    80,    87,   293,   265,   266,   115,    21,
-   116,    22,   202,   118,    88,   268,   269,   119,   203,    89,
-    23,    90,   124,    91,   125,   126,   130,   204,   156,  -243,
-   154,   155,    92,    93,   205,   178,   206,    10,   165,   166,
-     1,     2,   179,   180,   190,   192,   193,    94,    10,   222,
-   233,   224,   241,   244,   183,   247,   260,   263,   261,   264,
-    95,   273,   271,   277,   279,   282,   172,   290,   238,   294,
-   301,   110,   307,   310,   171,   313,   312,   318,   254,   172,
-   324,   258,   339,   319,   325,   331,   197,   171,    10,   165,
-   166,   321,   357,   345,   197,   340,    10,   165,   166,   341,
-   348,   342,    81,   374,    82,   375,    83,   350,   351,     6,
-    18,   173,    33,   129,    77,   345,    84,   106,   127,    85,
-   101,   335,   327,    86,   198,   339,    87,   194,   285,   366,
-   372,   278,   198,   199,   330,   349,    88,   315,   200,   201,
-   314,    89,   360,    90,   245,    91,   200,   201,   316,   356,
-   332,   297,   358,     0,    92,    93,     0,     0,     0,     0,
-     0,     0,     0,     0,   203,     0,   202,     0,     0,    94,
-    10,     0,   203,   133,   134,     0,     0,     0,     0,     0,
-   135,   204,   286,     0,    81,    36,    82,     0,    83,   136,
-   206,     0,     0,     0,     0,     0,     0,     0,    84,     0,
-     0,    85,     0,     0,     0,    86,     0,     0,    87,    38,
-    39,    40,     0,     0,     0,     0,     0,   137,    88,    42,
-     0,     0,     0,    89,    43,    90,    44,    91,     0,    10,
-     0,     0,     1,     2,    45,     0,    92,    93,   138,   139,
-     0,     0,     0,    46,    36,    47,     0,     0,     0,     0,
-    48,    94,    49,    50,    51,     0,     0,     0,     0,     0,
-     0,     0,    37,     0,     0,     0,     0,     0,    38,    39,
-    40,     0,     0,     0,    41,     0,     0,     0,    42,     0,
-     0,     0,     0,    43,     0,    44,     0,     0,     0,     0,
-     0,     0,     0,    45,     0,     0,     0,     0,     0,     0,
-     0,     0,    46,     0,    47,     0,     0,     0,     0,    48,
-     0,    49,    50,    51,   133,   134,   157,   158,     0,     0,
-     0,   135,     0,     0,     0,    81,    36,    82,     0,    83,
-   136,     0,     0,     0,     0,     0,   227,     0,     0,    84,
-     0,     0,    85,     0,     0,     0,    86,     0,     0,    87,
-    38,    39,    40,     0,     0,     0,     0,     0,   137,    88,
-    42,     0,     0,     0,    89,    43,    90,    44,    91,     0,
-   228,     0,     0,     0,     0,    45,     0,    92,    93,   138,
-   139,     0,     0,     0,    46,     0,    47,     0,     0,   133,
-   134,    48,    94,    49,    50,    51,   135,     0,     0,     0,
-    81,    36,    82,     0,    83,   136,     0,     0,     0,     0,
-     0,     0,     0,     0,    84,     0,     0,    85,     0,     0,
-     0,    86,     0,     0,    87,    38,    39,    40,     0,     0,
-     0,     0,     0,   137,    88,    42,     0,     0,     0,    89,
-    43,    90,    44,    91,     0,     0,     0,     0,     0,     0,
-    45,     0,    92,    93,   138,   139,     0,     0,     0,    46,
-     0,    47,     0,   140,   133,   134,    48,    94,    49,    50,
-    51,   135,     0,     0,     0,    81,    36,    82,     0,    83,
-   136,     0,     0,     0,     0,     0,     0,     0,     0,    84,
-     0,     0,    85,     0,     0,     0,    86,     0,     0,    87,
-    38,    39,    40,     0,     0,     0,     0,     0,   137,    88,
-    42,     0,     0,     0,    89,    43,    90,    44,    91,     0,
-     0,     0,    79,    80,     0,    45,     0,    92,    93,   138,
-   139,     0,     0,    81,    46,    82,    47,    83,     1,     2,
-     0,    48,    94,    49,    50,    51,     0,    84,     0,    81,
-    85,    82,     0,    83,    86,     0,     0,    87,     0,     0,
-     0,     0,     0,    84,     0,     0,    85,    88,     0,     0,
-    86,     0,    89,    87,    90,     0,    91,     0,     0,     0,
-     0,     0,     0,    88,     0,    92,    93,     0,    89,     0,
-    90,     0,    91,     0,     0,     0,     0,     0,     0,     0,
-    94,    92,    93,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    94
+     5,   192,   257,     5,   193,    15,   230,   175,   101,   101,
+   102,   102,   103,   103,    10,   373,    10,    10,    11,   114,
+   112,    10,   170,   171,   162,   163,    10,    10,    11,    65,
+    10,   260,    72,     1,     2,   166,    79,    64,   289,    67,
+    71,     7,   367,   261,    78,   127,   186,   103,    65,   229,
+   303,     1,     2,   306,    10,    20,    64,     1,     2,    10,
+   170,   171,   227,    21,    10,   259,    79,     1,     2,   243,
+   253,   248,   188,   315,    78,   167,   168,   169,    10,   170,
+   171,     1,     2,   113,    22,    19,    23,    16,   325,   201,
+   265,    10,   170,   171,   115,    24,   368,    32,   228,   128,
+   369,    72,    73,    28,   127,    79,   103,   299,   293,    71,
+   234,   156,   133,    78,    12,   249,   377,   257,   349,   155,
+   343,   186,   300,   177,    17,    63,   304,   166,   202,   240,
+    68,   176,   333,   201,    29,    10,   170,   171,   201,   186,
+    10,   170,   171,   314,    63,   187,   339,   188,   136,   162,
+   163,   199,   200,   249,   110,    30,   250,   323,   128,   137,
+   108,   109,  -241,   191,    10,   188,    31,     1,     2,   206,
+   119,   334,   202,   288,   172,   103,   238,   202,   203,   238,
+    83,    84,   373,   238,   253,   340,   254,   324,   258,    34,
+   376,   162,   163,   204,   157,    33,    82,   225,   158,   376,
+    36,   226,   296,   360,    83,    84,   297,   301,   264,    37,
+   305,   297,   205,   206,   297,    85,   282,    86,   206,    87,
+   267,   268,   269,   270,   307,   294,   310,   207,   308,    88,
+   311,   352,   271,    89,    66,   353,   208,    90,   209,    80,
+    91,    10,   170,   171,     1,     2,   358,   107,   242,   119,
+   359,    92,   246,   120,   320,   321,    93,   322,    94,   123,
+    95,   267,   268,   269,   270,   121,   122,   129,   124,    96,
+    97,   130,   201,   131,    10,   170,   171,   135,   159,   161,
+   160,  -242,   183,   184,    98,   185,   194,   177,    85,   238,
+    86,   197,    87,   196,    10,   176,   233,    99,   244,   247,
+   254,   177,    88,   258,   222,   241,    89,   245,   346,   176,
+    90,   202,   263,    91,   224,   266,   274,   276,   351,   278,
+   280,   283,   291,   295,    92,   302,   115,   309,   313,    93,
+   317,    94,   312,    95,   329,   318,   316,   319,   326,   330,
+   380,   351,    96,    97,    10,   336,   337,   138,   139,   342,
+   347,   346,   206,   348,   140,   372,   354,    98,    85,    38,
+    86,   356,    87,   141,   381,   357,     6,   363,    18,    35,
+   287,    81,    88,   178,   111,   134,    89,   132,   105,   341,
+    90,   286,   335,    91,    41,    42,    43,   198,   332,   378,
+   366,   355,   142,   279,    92,    45,   361,   362,   277,    93,
+    46,    94,    47,    95,   338,    10,     0,   364,     1,     2,
+    48,     0,    96,    97,   143,   144,     0,     0,   298,    49,
+    38,    50,     0,     0,     0,     0,    51,    98,    52,    53,
+    54,     0,     0,     0,     0,    39,     0,     0,     0,    40,
+     0,     0,     0,     0,     0,    41,    42,    43,     0,     0,
+     0,    44,     0,     0,     0,     0,    45,     0,     0,     0,
+     0,    46,     0,    47,     0,     0,     0,     0,     0,     0,
+     0,    48,     0,     0,     0,     0,     0,     0,     0,     0,
+    49,     0,    50,     0,     0,     0,     0,    51,     0,    52,
+    53,    54,   138,   139,   162,   163,     0,     0,     0,   140,
+     0,     0,     0,    85,    38,    86,     0,    87,   141,     0,
+     0,     0,     0,     0,   227,     0,     0,    88,     0,     0,
+     0,    89,     0,     0,     0,    90,     0,     0,    91,    41,
+    42,    43,     0,     0,     0,     0,     0,   142,     0,    92,
+    45,     0,     0,     0,    93,    46,    94,    47,    95,     0,
+   228,     0,     0,     0,     0,    48,     0,    96,    97,   143,
+   144,     0,     0,     0,    49,     0,    50,     0,     0,   138,
+   139,    51,    98,    52,    53,    54,   140,     0,     0,     0,
+    85,    38,    86,     0,    87,   141,     0,     0,     0,     0,
+     0,     0,     0,     0,    88,     0,     0,     0,    89,     0,
+     0,     0,    90,     0,     0,    91,    41,    42,    43,     0,
+     0,     0,     0,     0,   142,     0,    92,    45,     0,     0,
+     0,    93,    46,    94,    47,    95,     0,     0,     0,     0,
+     0,     0,    48,     0,    96,    97,   143,   144,     0,     0,
+     0,    49,     0,    50,     0,   145,   138,   139,    51,    98,
+    52,    53,    54,   140,     0,     0,     0,    85,    38,    86,
+     0,    87,   141,     0,     0,     0,     0,     0,     0,     0,
+     0,    88,     0,     0,     0,    89,     0,     0,     0,    90,
+     0,     0,    91,    41,    42,    43,     0,     0,     0,     0,
+     0,   142,     0,    92,    45,     0,     0,     0,    93,    46,
+    94,    47,    95,     0,     0,     0,    83,    84,     0,    48,
+     0,    96,    97,   143,   144,     0,     0,    85,    49,    86,
+    50,    87,     0,     1,     2,    51,    98,    52,    53,    54,
+     0,    88,     0,     0,    85,    89,    86,     0,    87,    90,
+     0,     0,    91,     0,     0,     0,     0,     0,    88,     0,
+     0,     0,    89,    92,     0,     0,    90,     0,    93,    91,
+    94,     0,    95,     0,     0,     0,     0,     0,     0,     0,
+    92,    96,    97,     0,     0,    93,     0,    94,     0,    95,
+     0,     0,     0,     0,     0,     0,    98,     0,    96,    97,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    98
 };
 
 static const short yycheck[] = {     7,
-     0,   139,   176,     3,   142,    13,   192,   126,    61,    62,
-    61,    62,     4,     8,   261,   125,    28,    61,    62,   176,
-   227,    13,    14,   183,     8,     9,    10,    35,     8,    37,
-     8,     9,     8,    41,    33,    35,   193,    37,    15,     8,
-    78,    41,    11,    12,    95,    53,     8,   189,    17,    11,
-    12,    95,   182,    53,     8,     9,   102,   187,   244,   102,
-    45,   247,    70,     8,     9,    10,   104,   110,    67,   276,
-    70,   190,     5,     6,     7,     8,     9,    10,    11,    12,
-    35,   241,   239,     6,   294,     8,     9,    10,   230,   101,
-    67,    11,    12,   340,    71,    95,   104,   307,    53,    40,
-   108,   103,   153,    34,   104,   107,   114,   107,   108,   153,
-    51,   103,   222,   273,   114,   110,   100,    78,   126,   103,
-   100,    44,   107,   309,   100,   103,   126,   180,     8,     4,
-    78,    11,    12,    99,   104,    58,    59,   106,    13,    14,
-     9,   102,    82,   104,   106,   111,   154,   155,     8,   103,
-    82,    11,    12,   153,   102,   100,   104,   106,   107,    52,
-     6,    84,     8,     9,    10,    45,   103,    82,   103,   102,
-   107,   179,   107,   103,   182,   294,   227,   107,     3,   187,
-   105,     3,   190,   227,   192,   359,    21,   306,   307,    11,
-    12,   103,   103,   103,   368,   107,   107,   107,    44,    45,
-    22,   339,    24,   103,    26,    38,   206,   107,   106,    20,
-    69,   103,    58,    59,    36,   107,   224,    39,    13,    14,
-   110,    43,    11,    12,    46,   233,    94,    95,    79,    40,
-    79,    42,    78,    50,    56,    96,    97,    79,    84,    61,
-    51,    63,     3,    65,   110,     3,   102,    93,   102,   102,
-   108,   108,    74,    75,   100,    35,   102,     8,     9,    10,
-    11,    12,   102,    66,   102,   102,     3,    89,     8,   110,
-    25,   110,   104,    66,   104,    66,    30,   103,   107,   107,
-   102,   104,    98,   102,     4,    93,   294,    86,   296,   109,
-   105,   101,   104,   102,   294,   100,   103,   111,   306,   307,
-     4,   309,   310,    99,    80,   105,     6,   307,     8,     9,
-    10,   112,   110,   321,     6,   107,     8,     9,    10,   105,
-   102,   111,    22,     0,    24,     0,    26,   105,   105,     3,
-    13,   128,    25,   108,    53,   343,    36,    70,   104,    39,
-    62,   309,   292,    43,    44,   353,    46,   153,   226,   357,
-   368,   222,    44,    45,   296,   326,    56,   270,    58,    59,
-   267,    61,   353,    63,   185,    65,    58,    59,   272,   343,
-   306,   238,   347,    -1,    74,    75,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    84,    -1,    78,    -1,    -1,    89,
-     8,    -1,    84,    11,    12,    -1,    -1,    -1,    -1,    -1,
-    18,    93,   102,    -1,    22,    23,    24,    -1,    26,    27,
-   102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,    47,
-    48,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,    57,
-    -1,    -1,    -1,    61,    62,    63,    64,    65,    -1,     8,
-    -1,    -1,    11,    12,    72,    -1,    74,    75,    76,    77,
-    -1,    -1,    -1,    81,    23,    83,    -1,    -1,    -1,    -1,
-    88,    89,    90,    91,    92,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    48,
-    49,    -1,    -1,    -1,    53,    -1,    -1,    -1,    57,    -1,
-    -1,    -1,    -1,    62,    -1,    64,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    81,    -1,    83,    -1,    -1,    -1,    -1,    88,
-    -1,    90,    91,    92,    11,    12,    13,    14,    -1,    -1,
-    -1,    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,
-    27,    -1,    -1,    -1,    -1,    -1,    33,    -1,    -1,    36,
-    -1,    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,
-    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,
-    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,    -1,
-    67,    -1,    -1,    -1,    -1,    72,    -1,    74,    75,    76,
-    77,    -1,    -1,    -1,    81,    -1,    83,    -1,    -1,    11,
-    12,    88,    89,    90,    91,    92,    18,    -1,    -1,    -1,
+     0,   144,   196,     3,   147,    13,   181,   131,    64,    65,
+    64,    65,    64,    65,     8,     4,     8,     8,     9,    28,
+    46,     8,     9,    10,    13,    14,     8,     8,     9,    37,
+     8,   101,    40,    11,    12,   130,    44,    37,   227,    17,
+    40,   104,    15,   113,    44,    99,    80,    99,    56,   181,
+   244,    11,    12,   247,     8,    12,    56,    11,    12,     8,
+     9,    10,    33,    20,     8,   197,    74,    11,    12,   188,
+   194,   193,   106,   262,    74,     5,     6,     7,     8,     9,
+    10,    11,    12,   109,    41,   106,    43,    34,   277,     6,
+   209,     8,     9,    10,   103,    52,    69,    53,    69,    99,
+    73,   109,    46,     9,   158,   113,   158,   239,   230,   109,
+   102,   119,   112,   113,   105,   102,   105,   311,   112,   119,
+   102,    80,   241,   131,   105,    37,   245,   222,    45,   185,
+   108,   131,   295,     6,    57,     8,     9,    10,     6,    80,
+     8,     9,    10,    60,    56,   104,   309,   106,    41,    13,
+    14,   159,   160,   102,   108,    84,   105,   276,   158,    52,
+   108,   109,   104,   104,     8,   106,    84,    11,    12,    86,
+   112,   295,    45,   227,   104,   227,   184,    45,    46,   187,
+    11,    12,     4,   191,   308,   309,   194,    60,   196,     3,
+   365,    13,    14,    61,   105,    84,     3,   105,   109,   374,
+   107,   109,   105,   346,    11,    12,   109,   105,   208,    21,
+   105,   109,    80,    86,   109,    22,   224,    24,    86,    26,
+    97,    98,    99,   100,   105,   233,   105,    95,   109,    36,
+   109,   105,   109,    40,    12,   109,   104,    44,   106,    39,
+    47,     8,     9,    10,    11,    12,   105,   108,   187,   112,
+   109,    58,   191,    81,   272,   273,    63,   275,    65,    51,
+    67,    97,    98,    99,   100,    81,    71,     3,    81,    76,
+    77,   112,     6,     3,     8,     9,    10,   104,   110,   104,
+   110,   104,    35,   104,    91,    68,   104,   295,    22,   297,
+    24,     3,    26,   104,     8,   295,    25,   104,    68,    68,
+   308,   309,    36,   311,   112,   106,    40,   106,   316,   309,
+    44,    45,    30,    47,   112,   105,    96,   106,   326,   104,
+     4,    95,    88,   111,    58,   107,   103,   106,   101,    63,
+   105,    65,   113,    67,     4,   107,   104,   102,   114,    82,
+     0,   349,    76,    77,     8,   107,   107,    11,    12,   113,
+   109,   359,    86,   107,    18,   363,   104,    91,    22,    23,
+    24,   107,    26,    27,     0,   107,     3,   112,    13,    26,
+   104,    56,    36,   133,    74,   113,    40,   109,    65,   311,
+    44,   226,   297,    47,    48,    49,    50,   158,   293,   374,
+   359,   331,    56,   222,    58,    59,   347,   349,   215,    63,
+    64,    65,    66,    67,   308,     8,    -1,   353,    11,    12,
+    74,    -1,    76,    77,    78,    79,    -1,    -1,   238,    83,
+    23,    85,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
+    94,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    42,
+    -1,    -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,
+    -1,    54,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    83,    -1,    85,    -1,    -1,    -1,    -1,    90,    -1,    92,
+    93,    94,    11,    12,    13,    14,    -1,    -1,    -1,    18,
+    -1,    -1,    -1,    22,    23,    24,    -1,    26,    27,    -1,
+    -1,    -1,    -1,    -1,    33,    -1,    -1,    36,    -1,    -1,
+    -1,    40,    -1,    -1,    -1,    44,    -1,    -1,    47,    48,
+    49,    50,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,
+    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,    -1,
+    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,    78,
+    79,    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    11,
+    12,    90,    91,    92,    93,    94,    18,    -1,    -1,    -1,
     22,    23,    24,    -1,    26,    27,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,
-    -1,    43,    -1,    -1,    46,    47,    48,    49,    -1,    -1,
-    -1,    -1,    -1,    55,    56,    57,    -1,    -1,    -1,    61,
-    62,    63,    64,    65,    -1,    -1,    -1,    -1,    -1,    -1,
-    72,    -1,    74,    75,    76,    77,    -1,    -1,    -1,    81,
-    -1,    83,    -1,    85,    11,    12,    88,    89,    90,    91,
-    92,    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,
-    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
-    -1,    -1,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,
-    47,    48,    49,    -1,    -1,    -1,    -1,    -1,    55,    56,
-    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,    -1,
-    -1,    -1,    11,    12,    -1,    72,    -1,    74,    75,    76,
-    77,    -1,    -1,    22,    81,    24,    83,    26,    11,    12,
-    -1,    88,    89,    90,    91,    92,    -1,    36,    -1,    22,
-    39,    24,    -1,    26,    43,    -1,    -1,    46,    -1,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    39,    56,    -1,    -1,
-    43,    -1,    61,    46,    63,    -1,    65,    -1,    -1,    -1,
-    -1,    -1,    -1,    56,    -1,    74,    75,    -1,    61,    -1,
-    63,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    89,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    89
+    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    40,    -1,
+    -1,    -1,    44,    -1,    -1,    47,    48,    49,    50,    -1,
+    -1,    -1,    -1,    -1,    56,    -1,    58,    59,    -1,    -1,
+    -1,    63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,
+    -1,    -1,    74,    -1,    76,    77,    78,    79,    -1,    -1,
+    -1,    83,    -1,    85,    -1,    87,    11,    12,    90,    91,
+    92,    93,    94,    18,    -1,    -1,    -1,    22,    23,    24,
+    -1,    26,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    36,    -1,    -1,    -1,    40,    -1,    -1,    -1,    44,
+    -1,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    -1,
+    -1,    56,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
+    65,    66,    67,    -1,    -1,    -1,    11,    12,    -1,    74,
+    -1,    76,    77,    78,    79,    -1,    -1,    22,    83,    24,
+    85,    26,    -1,    11,    12,    90,    91,    92,    93,    94,
+    -1,    36,    -1,    -1,    22,    40,    24,    -1,    26,    44,
+    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    40,    58,    -1,    -1,    44,    -1,    63,    47,
+    65,    -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    58,    76,    77,    -1,    -1,    63,    -1,    65,    -1,    67,
+    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    76,    77,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    91
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -1314,13 +1311,13 @@
   switch (yyn) {
 
 case 1:
-#line 298 "asn1p_y.y"
+#line 297 "asn1p_y.y"
 {
 		*(void **)param = yyvsp[0].a_grammar;
 	;
     break;}
 case 2:
-#line 304 "asn1p_y.y"
+#line 303 "asn1p_y.y"
 {
 		yyval.a_grammar = asn1p_new();
 		checkmem(yyval.a_grammar);
@@ -1328,14 +1325,14 @@
 	;
     break;}
 case 3:
-#line 309 "asn1p_y.y"
+#line 308 "asn1p_y.y"
 {
 		yyval.a_grammar = yyvsp[-1].a_grammar;
 		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
 	;
     break;}
 case 4:
-#line 330 "asn1p_y.y"
+#line 329 "asn1p_y.y"
 {
 
 		if(yyvsp[-1].a_module) {
@@ -1352,27 +1349,27 @@
 	;
     break;}
 case 5:
-#line 351 "asn1p_y.y"
+#line 350 "asn1p_y.y"
 { yyval.a_oid = 0; ;
     break;}
 case 6:
-#line 352 "asn1p_y.y"
+#line 351 "asn1p_y.y"
 { yyval.a_oid = yyvsp[0].a_oid; ;
     break;}
 case 7:
-#line 356 "asn1p_y.y"
+#line 355 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 	;
     break;}
 case 8:
-#line 359 "asn1p_y.y"
+#line 358 "asn1p_y.y"
 {
 		yyval.a_oid = 0;
 	;
     break;}
 case 9:
-#line 365 "asn1p_y.y"
+#line 364 "asn1p_y.y"
 {
 		yyval.a_oid = asn1p_oid_new();
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1381,7 +1378,7 @@
 	;
     break;}
 case 10:
-#line 371 "asn1p_y.y"
+#line 370 "asn1p_y.y"
 {
 		yyval.a_oid = yyvsp[-1].a_oid;
 		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1390,94 +1387,117 @@
 	;
     break;}
 case 11:
-#line 380 "asn1p_y.y"
+#line 379 "asn1p_y.y"
 {					/* iso */
 		yyval.a_oid_arc.name = yyvsp[0].tv_str;
 		yyval.a_oid_arc.number = -1;
 	;
     break;}
 case 12:
-#line 384 "asn1p_y.y"
+#line 383 "asn1p_y.y"
 {		/* iso(1) */
 		yyval.a_oid_arc.name = yyvsp[-3].tv_str;
 		yyval.a_oid_arc.number = yyvsp[-1].a_int;
 	;
     break;}
 case 13:
-#line 388 "asn1p_y.y"
+#line 387 "asn1p_y.y"
 {					/* 1 */
 		yyval.a_oid_arc.name = 0;
 		yyval.a_oid_arc.number = yyvsp[0].a_int;
 	;
     break;}
 case 14:
-#line 398 "asn1p_y.y"
+#line 397 "asn1p_y.y"
 { yyval.a_module_flags = MSF_NOFLAGS; ;
     break;}
 case 15:
-#line 399 "asn1p_y.y"
+#line 398 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 16:
-#line 408 "asn1p_y.y"
+#line 407 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[0].a_module_flags;
 	;
     break;}
 case 17:
-#line 411 "asn1p_y.y"
+#line 410 "asn1p_y.y"
 {
 		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
 	;
     break;}
 case 18:
-#line 420 "asn1p_y.y"
+#line 419 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
 	;
     break;}
 case 19:
-#line 423 "asn1p_y.y"
+#line 422 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
 	;
     break;}
 case 20:
-#line 426 "asn1p_y.y"
+#line 425 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
 	;
     break;}
 case 21:
-#line 429 "asn1p_y.y"
+#line 428 "asn1p_y.y"
 {
 		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
 	;
     break;}
 case 22:
-#line 438 "asn1p_y.y"
-{ yyval.a_module = 0; ;
-    break;}
-case 23:
-#line 439 "asn1p_y.y"
+#line 432 "asn1p_y.y"
 {
-		assert(yyvsp[0].a_module);
-		yyval.a_module = yyvsp[0].a_module;
+		/* X.680Amd1 specifies TAG and XER */
+		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
+		 	yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
+		} else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
+		 	yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
+		} else {
+			fprintf(stderr,
+				"WARNING: %s INSTRUCTIONS at line %d: "
+				"Unrecognized encoding reference\n",
+				yyvsp[-1].tv_str, yylineno);
+		 	yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
+		}
+		free(yyvsp[-1].tv_str);
 	;
     break;}
+case 23:
+#line 453 "asn1p_y.y"
+{ yyval.a_module = 0; ;
+    break;}
 case 24:
-#line 449 "asn1p_y.y"
+#line 454 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
 case 25:
-#line 452 "asn1p_y.y"
+#line 463 "asn1p_y.y"
+{
+		yyval.a_module = yyvsp[0].a_module;
+	;
+    break;}
+case 26:
+#line 466 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 
+		/* Behave well when one of them is skipped. */
+		if(!(yyvsp[-1].a_module)) {
+			if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
+			break;
+		}
+
 #ifdef	MY_IMPORT
 #error	MY_IMPORT DEFINED ELSEWHERE!
 #endif
@@ -1497,14 +1517,14 @@
 
 	;
     break;}
-case 26:
-#line 479 "asn1p_y.y"
+case 27:
+#line 499 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[0].a_module;
 	;
     break;}
-case 27:
-#line 482 "asn1p_y.y"
+case 28:
+#line 502 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
@@ -1515,27 +1535,7 @@
 		}
 	;
     break;}
-case 28:
-#line 491 "asn1p_y.y"
-{
-		yyval.a_module = asn1p_module_new();
-		checkmem(yyval.a_module);
-		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
-		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
-		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
-	;
-    break;}
 case 29:
-#line 498 "asn1p_y.y"
-{
-		yyval.a_module = asn1p_module_new();
-		checkmem(yyval.a_module);
-		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
-		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
-		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
-	;
-    break;}
-case 30:
 #line 511 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
@@ -1545,8 +1545,43 @@
 		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
 	;
     break;}
+case 30:
+#line 518 "asn1p_y.y"
+{
+		yyval.a_module = asn1p_module_new();
+		checkmem(yyval.a_module);
+		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
+		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
+		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
+	;
+    break;}
 case 31:
-#line 522 "asn1p_y.y"
+#line 531 "asn1p_y.y"
+{
+		yyval.a_module = asn1p_module_new();
+		checkmem(yyval.a_module);
+		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
+		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
+		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
+	;
+    break;}
+case 32:
+#line 539 "asn1p_y.y"
+{ asn1p_lexer_hack_push_encoding_control(); ;
+    break;}
+case 33:
+#line 540 "asn1p_y.y"
+{
+		fprintf(stderr,
+			"WARNING: ENCODING-CONTROL %s "
+			"specification at line %d ignored\n",
+			yyvsp[-1].tv_str, yylineno);
+		free(yyvsp[-1].tv_str);
+		yyval.a_module = 0;
+	;
+    break;}
+case 34:
+#line 552 "asn1p_y.y"
 {
 		return yyerror(
 			"Attempt to redefine a standard basic type, "
@@ -1554,35 +1589,35 @@
 			"to older version of ASN.1 standard");
 	;
     break;}
-case 32:
-#line 536 "asn1p_y.y"
+case 35:
+#line 566 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 	;
     break;}
-case 33:
-#line 542 "asn1p_y.y"
+case 36:
+#line 572 "asn1p_y.y"
 {
 		return yyerror("Empty IMPORTS list");
 	;
     break;}
-case 34:
-#line 548 "asn1p_y.y"
+case 37:
+#line 578 "asn1p_y.y"
 {
 		yyval.a_module = asn1p_module_new();
 		checkmem(yyval.a_module);
 		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
 	;
     break;}
-case 35:
-#line 553 "asn1p_y.y"
+case 38:
+#line 583 "asn1p_y.y"
 {
 		yyval.a_module = yyvsp[-1].a_module;
 		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
 	;
     break;}
-case 36:
-#line 560 "asn1p_y.y"
+case 39:
+#line 590 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-3].a_xports;
 		yyval.a_xports->from = yyvsp[-1].tv_str;
@@ -1590,23 +1625,23 @@
 		checkmem(yyval.a_xports);
 	;
     break;}
-case 37:
-#line 569 "asn1p_y.y"
+case 40:
+#line 599 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 38:
-#line 574 "asn1p_y.y"
+case 41:
+#line 604 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 39:
-#line 581 "asn1p_y.y"
+case 42:
+#line 611 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1614,8 +1649,8 @@
 		yyval.a_expr->expr_type = A1TC_REFERENCE;
 	;
     break;}
-case 40:
-#line 587 "asn1p_y.y"
+case 43:
+#line 617 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1623,43 +1658,43 @@
 		yyval.a_expr->expr_type = A1TC_REFERENCE;
 	;
     break;}
-case 41:
-#line 596 "asn1p_y.y"
+case 44:
+#line 626 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-1].a_xports;
 	;
     break;}
-case 42:
-#line 599 "asn1p_y.y"
+case 45:
+#line 629 "asn1p_y.y"
 {
 		yyval.a_xports = 0;
 	;
     break;}
-case 43:
-#line 602 "asn1p_y.y"
+case 46:
+#line 632 "asn1p_y.y"
 {
 		/* Empty EXPORTS clause effectively prohibits export. */
 		yyval.a_xports = asn1p_xports_new();
 		checkmem(yyval.a_xports);
 	;
     break;}
-case 44:
-#line 610 "asn1p_y.y"
+case 47:
+#line 640 "asn1p_y.y"
 {
 		yyval.a_xports = asn1p_xports_new();
 		assert(yyval.a_xports);
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 45:
-#line 615 "asn1p_y.y"
+case 48:
+#line 645 "asn1p_y.y"
 {
 		yyval.a_xports = yyvsp[-2].a_xports;
 		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 46:
-#line 622 "asn1p_y.y"
+case 49:
+#line 652 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1667,8 +1702,8 @@
 		yyval.a_expr->expr_type = A1TC_EXPORTVAR;
 	;
     break;}
-case 47:
-#line 628 "asn1p_y.y"
+case 50:
+#line 658 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1676,8 +1711,8 @@
 		yyval.a_expr->expr_type = A1TC_EXPORTVAR;
 	;
     break;}
-case 48:
-#line 638 "asn1p_y.y"
+case 51:
+#line 668 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-4].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1686,8 +1721,8 @@
 		// take care of optValueSetBody 
 	;
     break;}
-case 49:
-#line 648 "asn1p_y.y"
+case 52:
+#line 678 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1696,8 +1731,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 50:
-#line 655 "asn1p_y.y"
+case 53:
+#line 685 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1705,17 +1740,17 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 51:
-#line 664 "asn1p_y.y"
+case 54:
+#line 694 "asn1p_y.y"
 { ;
     break;}
-case 52:
-#line 665 "asn1p_y.y"
+case 55:
+#line 695 "asn1p_y.y"
 {
 	;
     break;}
-case 53:
-#line 681 "asn1p_y.y"
+case 56:
+#line 711 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1725,8 +1760,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 54:
-#line 689 "asn1p_y.y"
+case 57:
+#line 719 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -1735,8 +1770,8 @@
 		assert(yyval.a_expr->meta_type);
 	;
     break;}
-case 55:
-#line 696 "asn1p_y.y"
+case 58:
+#line 726 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1744,8 +1779,8 @@
 		assert(yyval.a_expr->meta_type == AMT_OBJECT);
 	;
     break;}
-case 56:
-#line 713 "asn1p_y.y"
+case 59:
+#line 743 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1754,8 +1789,8 @@
 		yyval.a_expr->meta_type = AMT_PARAMTYPE;
 	;
     break;}
-case 57:
-#line 723 "asn1p_y.y"
+case 60:
+#line 753 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = asn1p_paramlist_new(yylineno);
@@ -1766,8 +1801,8 @@
 		if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
 	;
     break;}
-case 58:
-#line 732 "asn1p_y.y"
+case 61:
+#line 762 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_plist = yyvsp[-2].a_plist;
@@ -1777,15 +1812,15 @@
 		if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
 	;
     break;}
-case 59:
-#line 743 "asn1p_y.y"
+case 62:
+#line 773 "asn1p_y.y"
 {
 		yyval.a_parg.governor = NULL;
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
-case 60:
-#line 747 "asn1p_y.y"
+case 63:
+#line 777 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1794,8 +1829,8 @@
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
-case 61:
-#line 754 "asn1p_y.y"
+case 64:
+#line 784 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1805,29 +1840,29 @@
 		yyval.a_parg.argument = yyvsp[0].tv_str;
 	;
     break;}
-case 62:
-#line 765 "asn1p_y.y"
+case 65:
+#line 795 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 63:
-#line 770 "asn1p_y.y"
+case 66:
+#line 800 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 64:
-#line 777 "asn1p_y.y"
+case 67:
+#line 807 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 65:
-#line 780 "asn1p_y.y"
+case 68:
+#line 810 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1836,23 +1871,23 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
-case 66:
-#line 793 "asn1p_y.y"
+case 69:
+#line 823 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 67:
-#line 798 "asn1p_y.y"
+case 70:
+#line 828 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 68:
-#line 805 "asn1p_y.y"
+case 71:
+#line 835 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		checkmem(yyval.a_expr);
@@ -1861,16 +1896,16 @@
 		assert(yyval.a_expr->meta_type == AMT_OBJECT);
 	;
     break;}
-case 69:
-#line 815 "asn1p_y.y"
+case 72:
+#line 845 "asn1p_y.y"
 { yyval.a_int = 0; ;
     break;}
-case 70:
-#line 816 "asn1p_y.y"
+case 73:
+#line 846 "asn1p_y.y"
 { yyval.a_int = 1; ;
     break;}
-case 71:
-#line 820 "asn1p_y.y"
+case 74:
+#line 850 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1879,15 +1914,15 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 72:
-#line 827 "asn1p_y.y"
+case 75:
+#line 857 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 73:
-#line 834 "asn1p_y.y"
+case 76:
+#line 864 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -1897,16 +1932,16 @@
 		yyval.a_expr->marker = yyvsp[0].a_marker;
 	;
     break;}
-case 74:
-#line 842 "asn1p_y.y"
+case 77:
+#line 872 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		yyval.a_expr->Identifier = yyvsp[-2].a_refcomp.name;
 		yyval.a_expr->unique = yyvsp[0].a_int;
 	;
     break;}
-case 75:
-#line 847 "asn1p_y.y"
+case 78:
+#line 877 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -1923,48 +1958,48 @@
 		yyval.a_expr->unique = yyvsp[0].a_int;
 	;
     break;}
-case 76:
-#line 865 "asn1p_y.y"
+case 79:
+#line 895 "asn1p_y.y"
 { yyval.a_wsynt = 0; ;
     break;}
-case 77:
-#line 866 "asn1p_y.y"
+case 80:
+#line 896 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[0].a_wsynt;
 	;
     break;}
-case 78:
-#line 873 "asn1p_y.y"
+case 81:
+#line 903 "asn1p_y.y"
 { asn1p_lexer_hack_enable_with_syntax(); ;
     break;}
-case 79:
-#line 875 "asn1p_y.y"
+case 82:
+#line 905 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 	;
     break;}
-case 80:
-#line 881 "asn1p_y.y"
+case 83:
+#line 911 "asn1p_y.y"
 {
 		yyval.a_wsynt = asn1p_wsyntx_new();
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
-case 81:
-#line 885 "asn1p_y.y"
+case 84:
+#line 915 "asn1p_y.y"
 {
 		yyval.a_wsynt = yyvsp[-1].a_wsynt;
 		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
 	;
     break;}
-case 82:
-#line 892 "asn1p_y.y"
+case 85:
+#line 922 "asn1p_y.y"
 {
 		yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 	;
     break;}
-case 83:
-#line 895 "asn1p_y.y"
+case 86:
+#line 925 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -1975,8 +2010,8 @@
 		yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
 	;
     break;}
-case 84:
-#line 921 "asn1p_y.y"
+case 87:
+#line 951 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		assert(yyval.a_expr->Identifier == 0);
@@ -1984,63 +2019,63 @@
 		yyval.a_expr->tag = yyvsp[-1].tv_nametag.tag;
 	;
     break;}
-case 85:
-#line 927 "asn1p_y.y"
+case 88:
+#line 957 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 86:
-#line 933 "asn1p_y.y"
+case 89:
+#line 963 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		yyval.a_expr->constraints = yyvsp[-1].a_constr;
 		yyval.a_expr->marker = yyvsp[0].a_marker;
 	;
     break;}
-case 87:
-#line 941 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 88:
-#line 949 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->value = yyvsp[0].a_value;
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 89:
-#line 958 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->Identifier = strdup("...");
-		yyval.a_expr->value = yyvsp[0].a_value;
-		checkmem(yyval.a_expr->Identifier);
-		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
 case 90:
-#line 970 "asn1p_y.y"
+#line 971 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 91:
+#line 979 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->value = yyvsp[0].a_value;
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 92:
+#line 988 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->Identifier = strdup("...");
+		yyval.a_expr->value = yyvsp[0].a_value;
+		checkmem(yyval.a_expr->Identifier);
+		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
+		yyval.a_expr->meta_type = AMT_TYPE;
+	;
+    break;}
+case 93:
+#line 1000 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 	;
     break;}
-case 91:
-#line 973 "asn1p_y.y"
+case 94:
+#line 1003 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2048,16 +2083,16 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 92:
-#line 979 "asn1p_y.y"
+case 95:
+#line 1009 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[0].a_expr;
 		checkmem(yyval.a_expr);
 		assert(yyval.a_expr->meta_type);
 	;
     break;}
-case 93:
-#line 987 "asn1p_y.y"
+case 96:
+#line 1017 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = yyvsp[-1].a_expr;
@@ -2073,8 +2108,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 94:
-#line 1011 "asn1p_y.y"
+case 97:
+#line 1041 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2083,8 +2118,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 95:
-#line 1018 "asn1p_y.y"
+case 98:
+#line 1048 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2093,8 +2128,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 96:
-#line 1033 "asn1p_y.y"
+case 99:
+#line 1063 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2104,8 +2139,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 97:
-#line 1041 "asn1p_y.y"
+case 100:
+#line 1071 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2117,8 +2152,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 98:
-#line 1051 "asn1p_y.y"
+case 101:
+#line 1081 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2130,8 +2165,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 99:
-#line 1061 "asn1p_y.y"
+case 102:
+#line 1091 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2141,8 +2176,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 100:
-#line 1069 "asn1p_y.y"
+case 103:
+#line 1099 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -2163,8 +2198,8 @@
 		}
 	;
     break;}
-case 101:
-#line 1091 "asn1p_y.y"
+case 104:
+#line 1121 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2174,8 +2209,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 102:
-#line 1099 "asn1p_y.y"
+case 105:
+#line 1129 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -2184,22 +2219,22 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 105:
-#line 1113 "asn1p_y.y"
+case 108:
+#line 1143 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 106:
-#line 1118 "asn1p_y.y"
+case 109:
+#line 1148 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 107:
-#line 1131 "asn1p_y.y"
+case 110:
+#line 1161 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -2208,53 +2243,53 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 108:
-#line 1141 "asn1p_y.y"
+case 111:
+#line 1171 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 109:
-#line 1142 "asn1p_y.y"
+case 112:
+#line 1172 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_UNPARSED;
 	;
     break;}
-case 110:
-#line 1147 "asn1p_y.y"
+case 113:
+#line 1177 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 111:
-#line 1151 "asn1p_y.y"
+case 114:
+#line 1181 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 112:
-#line 1155 "asn1p_y.y"
+case 115:
+#line 1185 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
-case 113:
-#line 1159 "asn1p_y.y"
+case 116:
+#line 1189 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 114:
-#line 1162 "asn1p_y.y"
+case 117:
+#line 1192 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 115:
-#line 1168 "asn1p_y.y"
+case 118:
+#line 1198 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2267,8 +2302,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 116:
-#line 1179 "asn1p_y.y"
+case 119:
+#line 1209 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2284,8 +2319,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 117:
-#line 1196 "asn1p_y.y"
+case 120:
+#line 1226 "asn1p_y.y"
 {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -2297,8 +2332,8 @@
 		free(yyvsp[0].tv_opaque.buf);
 	;
     break;}
-case 118:
-#line 1206 "asn1p_y.y"
+case 121:
+#line 1236 "asn1p_y.y"
 {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -2312,68 +2347,68 @@
 		yyval.tv_opaque.len = newsize;
 	;
     break;}
-case 119:
-#line 1221 "asn1p_y.y"
+case 122:
+#line 1251 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BOOLEAN; ;
     break;}
-case 120:
-#line 1222 "asn1p_y.y"
+case 123:
+#line 1252 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_NULL; ;
     break;}
-case 121:
-#line 1223 "asn1p_y.y"
+case 124:
+#line 1253 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_REAL; ;
     break;}
-case 122:
-#line 1224 "asn1p_y.y"
+case 125:
+#line 1254 "asn1p_y.y"
 { yyval.a_type = yyvsp[0].a_type; ;
     break;}
-case 123:
-#line 1225 "asn1p_y.y"
+case 126:
+#line 1255 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OCTET_STRING; ;
     break;}
-case 124:
-#line 1226 "asn1p_y.y"
+case 127:
+#line 1256 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
     break;}
-case 125:
-#line 1227 "asn1p_y.y"
+case 128:
+#line 1257 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
     break;}
-case 126:
-#line 1228 "asn1p_y.y"
+case 129:
+#line 1258 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EXTERNAL; ;
     break;}
-case 127:
-#line 1229 "asn1p_y.y"
+case 130:
+#line 1259 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
     break;}
-case 128:
-#line 1230 "asn1p_y.y"
+case 131:
+#line 1260 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
     break;}
-case 129:
-#line 1231 "asn1p_y.y"
+case 132:
+#line 1261 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_UTCTime; ;
     break;}
-case 130:
-#line 1232 "asn1p_y.y"
+case 133:
+#line 1262 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_GeneralizedTime; ;
     break;}
-case 131:
-#line 1239 "asn1p_y.y"
+case 134:
+#line 1269 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_INTEGER; ;
     break;}
-case 132:
-#line 1240 "asn1p_y.y"
+case 135:
+#line 1270 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_ENUMERATED; ;
     break;}
-case 133:
-#line 1241 "asn1p_y.y"
+case 136:
+#line 1271 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BIT_STRING; ;
     break;}
-case 134:
-#line 1245 "asn1p_y.y"
+case 137:
+#line 1275 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2381,8 +2416,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 135:
-#line 1251 "asn1p_y.y"
+case 138:
+#line 1281 "asn1p_y.y"
 {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -2394,76 +2429,76 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 136:
-#line 1264 "asn1p_y.y"
+case 139:
+#line 1294 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_BMPString; ;
     break;}
-case 137:
-#line 1265 "asn1p_y.y"
+case 140:
+#line 1295 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GeneralString;
 		return yyerror("GeneralString is not supported");
 	;
     break;}
-case 138:
-#line 1269 "asn1p_y.y"
+case 141:
+#line 1299 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GraphicString;
 		return yyerror("GraphicString is not supported");
 	;
     break;}
-case 139:
-#line 1273 "asn1p_y.y"
+case 142:
+#line 1303 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_IA5String; ;
     break;}
-case 140:
-#line 1274 "asn1p_y.y"
+case 143:
+#line 1304 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ISO646String; ;
     break;}
-case 141:
-#line 1275 "asn1p_y.y"
+case 144:
+#line 1305 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_NumericString; ;
     break;}
-case 142:
-#line 1276 "asn1p_y.y"
+case 145:
+#line 1306 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_PrintableString; ;
     break;}
-case 143:
-#line 1277 "asn1p_y.y"
+case 146:
+#line 1307 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_T61String;
 		return yyerror("T61String not implemented yet");
 	;
     break;}
-case 144:
-#line 1281 "asn1p_y.y"
+case 147:
+#line 1311 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_TeletexString; ;
     break;}
-case 145:
-#line 1282 "asn1p_y.y"
+case 148:
+#line 1312 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UniversalString; ;
     break;}
-case 146:
-#line 1283 "asn1p_y.y"
+case 149:
+#line 1313 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UTF8String; ;
     break;}
-case 147:
-#line 1284 "asn1p_y.y"
+case 150:
+#line 1314 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_VideotexString;
 		return yyerror("VideotexString is no longer supported");
 	;
     break;}
-case 148:
-#line 1288 "asn1p_y.y"
+case 151:
+#line 1318 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_VisibleString; ;
     break;}
-case 149:
-#line 1289 "asn1p_y.y"
+case 152:
+#line 1319 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ObjectDescriptor; ;
     break;}
-case 150:
-#line 1293 "asn1p_y.y"
+case 153:
+#line 1323 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2471,8 +2506,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 151:
-#line 1299 "asn1p_y.y"
+case 154:
+#line 1329 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2480,8 +2515,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 152:
-#line 1305 "asn1p_y.y"
+case 155:
+#line 1335 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2489,8 +2524,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 153:
-#line 1311 "asn1p_y.y"
+case 156:
+#line 1341 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2500,8 +2535,8 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 154:
-#line 1319 "asn1p_y.y"
+case 157:
+#line 1349 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2511,8 +2546,8 @@
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 155:
-#line 1327 "asn1p_y.y"
+case 158:
+#line 1357 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -2520,8 +2555,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 156:
-#line 1333 "asn1p_y.y"
+case 159:
+#line 1363 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
@@ -2534,20 +2569,22 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 157:
-#line 1350 "asn1p_y.y"
+case 165:
+#line 1384 "asn1p_y.y"
 { yyval.a_constr = 0; ;
     break;}
-case 158:
-#line 1351 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
+case 166:
+#line 1385 "asn1p_y.y"
+{
+		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
+	;
     break;}
-case 164:
-#line 1359 "asn1p_y.y"
+case 167:
+#line 1388 "asn1p_y.y"
 {
 		/*
 		 * This is a special case, for compatibility purposes.
-		 * It goes without parenthesis.
+		 * It goes without parentheses.
 		 */
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2557,125 +2594,70 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 165:
-#line 1371 "asn1p_y.y"
-{
-		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
-	;
-    break;}
-case 166:
-#line 1374 "asn1p_y.y"
-{
-		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-1].a_constr, yyvsp[0].a_constr);
-	;
-    break;}
-case 167:
-#line 1380 "asn1p_y.y"
+case 168:
+#line 1403 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	;
     break;}
-case 168:
-#line 1386 "asn1p_y.y"
+case 169:
+#line 1406 "asn1p_y.y"
+{
+		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
+	;
+    break;}
+case 170:
+#line 1412 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 169:
-#line 1389 "asn1p_y.y"
+case 171:
+#line 1415 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 170:
-#line 1396 "asn1p_y.y"
+case 172:
+#line 1421 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
 		ct = yyval.a_constr;
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
 	;
     break;}
-case 171:
-#line 1405 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = ACT_EL_EXT;
-	;
-    break;}
-case 172:
-#line 1410 "asn1p_y.y"
-{
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
-	;
-    break;}
 case 173:
-#line 1419 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
+#line 1432 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
     break;}
 case 174:
-#line 1422 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
-    break;}
-case 175:
-#line 1423 "asn1p_y.y"
+#line 1435 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 176:
-#line 1429 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
-    break;}
-case 177:
-#line 1431 "asn1p_y.y"
+case 175:
+#line 1438 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 178:
-#line 1437 "asn1p_y.y"
-{ yyval.a_constr = yyvsp[0].a_constr; ;
-    break;}
-case 179:
-#line 1438 "asn1p_y.y"
+case 176:
+#line 1441 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 180:
-#line 1444 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = ACT_EL_VALUE;
-		yyval.a_constr->value = yyvsp[0].a_value;
-	;
-    break;}
-case 181:
-#line 1450 "asn1p_y.y"
-{
-		yyval.a_constr = asn1p_constraint_new(yylineno);
-		checkmem(yyval.a_constr);
-		yyval.a_constr->type = yyvsp[-1].a_ctype;
-		yyval.a_constr->range_start = yyvsp[-2].a_value;
-		yyval.a_constr->range_stop = yyvsp[0].a_value;
-	;
-    break;}
-case 182:
-#line 1457 "asn1p_y.y"
+case 177:
+#line 1447 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2685,54 +2667,118 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 183:
-#line 1465 "asn1p_y.y"
+case 178:
+#line 1455 "asn1p_y.y"
 {
-		yyval.a_constr = yyvsp[0].a_constr;
+		int ret;
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = ACT_CA_SET;
+		ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
+		checkmem(ret == 0);
+	;
+    break;}
+case 179:
+#line 1463 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = ACT_EL_VALUE;
+		yyval.a_constr->value = yyvsp[0].a_value;
+	;
+    break;}
+case 180:
+#line 1469 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
+	;
+    break;}
+case 181:
+#line 1476 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = yyvsp[0].a_value;
+		yyval.a_constr->range_start->type = ATV_MIN;
+	;
+    break;}
+case 182:
+#line 1484 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = yyvsp[-2].a_value;
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_stop->type = ATV_MAX;
+	;
+    break;}
+case 183:
+#line 1492 "asn1p_y.y"
+{
+		yyval.a_constr = asn1p_constraint_new(yylineno);
+		checkmem(yyval.a_constr);
+		yyval.a_constr->type = yyvsp[-1].a_ctype;
+		yyval.a_constr->range_start = asn1p_value_fromint(-123);
+		yyval.a_constr->range_stop = asn1p_value_fromint(321);
+		yyval.a_constr->range_start->type = ATV_MIN;
+		yyval.a_constr->range_stop->type = ATV_MAX;
 	;
     break;}
 case 184:
-#line 1468 "asn1p_y.y"
+#line 1501 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 185:
-#line 1474 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RANGE; ;
+#line 1504 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
     break;}
 case 186:
-#line 1475 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_RLRANGE; ;
+#line 1510 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RANGE; ;
     break;}
 case 187:
-#line 1476 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_LLRANGE; ;
+#line 1511 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_RLRANGE; ;
     break;}
 case 188:
-#line 1477 "asn1p_y.y"
-{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+#line 1512 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_LLRANGE; ;
     break;}
 case 189:
-#line 1481 "asn1p_y.y"
+#line 1513 "asn1p_y.y"
+{ yyval.a_ctype = ACT_EL_ULRANGE; ;
+    break;}
+case 190:
+#line 1517 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_SIZE;
 	;
     break;}
-case 190:
-#line 1484 "asn1p_y.y"
+case 191:
+#line 1520 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_FROM;
 	;
     break;}
-case 191:
-#line 1490 "asn1p_y.y"
+case 192:
+#line 1526 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
-case 192:
-#line 1493 "asn1p_y.y"
+case 193:
+#line 1529 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2745,73 +2791,57 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 193:
-#line 1504 "asn1p_y.y"
+case 194:
+#line 1540 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
-case 194:
-#line 1508 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(123);
-		checkmem(yyval.a_value);
-		yyval.a_value->type = ATV_MIN;
-	;
-    break;}
 case 195:
-#line 1513 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(321);
-		checkmem(yyval.a_value);
-		yyval.a_value->type = ATV_MAX;
-	;
-    break;}
-case 196:
-#line 1518 "asn1p_y.y"
+#line 1545 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 197:
-#line 1523 "asn1p_y.y"
+case 196:
+#line 1550 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 198:
-#line 1531 "asn1p_y.y"
+case 197:
+#line 1558 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	;
     break;}
-case 199:
-#line 1537 "asn1p_y.y"
+case 198:
+#line 1564 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
-case 200:
-#line 1540 "asn1p_y.y"
+case 199:
+#line 1567 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
-case 201:
-#line 1546 "asn1p_y.y"
+case 200:
+#line 1573 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
 		yyval.a_constr->type = ACT_EL_EXT;
 	;
     break;}
-case 202:
-#line 1551 "asn1p_y.y"
+case 201:
+#line 1578 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2820,46 +2850,46 @@
 		yyval.a_constr->presence = yyvsp[0].a_pres;
 	;
     break;}
-case 203:
-#line 1564 "asn1p_y.y"
+case 202:
+#line 1591 "asn1p_y.y"
 { yyval.a_pres = ACPRES_DEFAULT; ;
     break;}
-case 204:
-#line 1565 "asn1p_y.y"
+case 203:
+#line 1592 "asn1p_y.y"
 { yyval.a_pres = yyvsp[0].a_pres; ;
     break;}
-case 205:
-#line 1569 "asn1p_y.y"
+case 204:
+#line 1596 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_PRESENT;
 	;
     break;}
-case 206:
-#line 1572 "asn1p_y.y"
+case 205:
+#line 1599 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_ABSENT;
 	;
     break;}
-case 207:
-#line 1575 "asn1p_y.y"
+case 206:
+#line 1602 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	;
     break;}
+case 207:
+#line 1608 "asn1p_y.y"
+{
+		yyval.a_constr = yyvsp[0].a_constr;
+	;
+    break;}
 case 208:
-#line 1581 "asn1p_y.y"
+#line 1611 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 209:
-#line 1584 "asn1p_y.y"
-{
-		yyval.a_constr = yyvsp[0].a_constr;
-	;
-    break;}
-case 210:
-#line 1593 "asn1p_y.y"
+#line 1620 "asn1p_y.y"
 {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -2873,14 +2903,14 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
 	;
     break;}
-case 211:
-#line 1608 "asn1p_y.y"
+case 210:
+#line 1635 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
-case 212:
-#line 1614 "asn1p_y.y"
+case 211:
+#line 1641 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2888,8 +2918,8 @@
 		yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
 	;
     break;}
-case 213:
-#line 1620 "asn1p_y.y"
+case 212:
+#line 1647 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2899,8 +2929,8 @@
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
 	;
     break;}
-case 214:
-#line 1634 "asn1p_y.y"
+case 213:
+#line 1661 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -2913,8 +2943,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 215:
-#line 1645 "asn1p_y.y"
+case 214:
+#line 1672 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -2928,14 +2958,14 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 216:
-#line 1661 "asn1p_y.y"
+case 215:
+#line 1688 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
-case 217:
-#line 1664 "asn1p_y.y"
+case 216:
+#line 1691 "asn1p_y.y"
 {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -2946,76 +2976,76 @@
 		yyval.tv_str[l1 + 1 + l3] = '\0';
 	;
     break;}
-case 218:
-#line 1682 "asn1p_y.y"
+case 217:
+#line 1709 "asn1p_y.y"
 { yyval.a_marker = EM_NOMARK; ;
     break;}
-case 219:
-#line 1683 "asn1p_y.y"
+case 218:
+#line 1710 "asn1p_y.y"
 { yyval.a_marker = yyvsp[0].a_marker; ;
     break;}
-case 220:
-#line 1687 "asn1p_y.y"
+case 219:
+#line 1714 "asn1p_y.y"
 {
 		yyval.a_marker = EM_OPTIONAL;
 	;
     break;}
-case 221:
-#line 1690 "asn1p_y.y"
+case 220:
+#line 1717 "asn1p_y.y"
 {
 		yyval.a_marker = EM_DEFAULT;
 		/* FIXME: store DefaultValue somewhere */
 	;
     break;}
+case 221:
+#line 1724 "asn1p_y.y"
+{
+	;
+    break;}
 case 222:
-#line 1697 "asn1p_y.y"
+#line 1726 "asn1p_y.y"
 {
 	;
     break;}
 case 223:
-#line 1699 "asn1p_y.y"
-{
-	;
-    break;}
-case 224:
-#line 1701 "asn1p_y.y"
+#line 1728 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 225:
-#line 1701 "asn1p_y.y"
+case 224:
+#line 1728 "asn1p_y.y"
 {
 	;
     break;}
-case 226:
-#line 1722 "asn1p_y.y"
+case 225:
+#line 1749 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 	;
     break;}
-case 227:
-#line 1726 "asn1p_y.y"
+case 226:
+#line 1753 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	;
     break;}
-case 228:
-#line 1732 "asn1p_y.y"
+case 227:
+#line 1759 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 229:
-#line 1737 "asn1p_y.y"
+case 228:
+#line 1764 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		TQ_ADD(&(yyval.a_expr->members), yyvsp[0].a_expr, next);
 	;
     break;}
-case 230:
-#line 1744 "asn1p_y.y"
+case 229:
+#line 1771 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3024,8 +3054,19 @@
 		yyval.a_expr->Identifier = yyvsp[0].tv_str;
 	;
     break;}
+case 230:
+#line 1778 "asn1p_y.y"
+{
+		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
+		checkmem(yyval.a_expr);
+		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
+		yyval.a_expr->meta_type = AMT_VALUE;
+		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
+		yyval.a_expr->value = yyvsp[-1].a_value;
+	;
+    break;}
 case 231:
-#line 1751 "asn1p_y.y"
+#line 1786 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3036,18 +3077,7 @@
 	;
     break;}
 case 232:
-#line 1759 "asn1p_y.y"
-{
-		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
-		yyval.a_expr->meta_type = AMT_VALUE;
-		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
-		yyval.a_expr->value = yyvsp[-1].a_value;
-	;
-    break;}
-case 233:
-#line 1767 "asn1p_y.y"
+#line 1794 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3056,8 +3086,8 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 234:
-#line 1774 "asn1p_y.y"
+case 233:
+#line 1801 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(asn1p_lineno);
 		checkmem(yyval.a_expr);
@@ -3067,86 +3097,86 @@
 		yyval.a_expr->meta_type = AMT_VALUE;
 	;
     break;}
+case 234:
+#line 1812 "asn1p_y.y"
+{
+		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
+		checkmem(yyval.a_value);
+	;
+    break;}
 case 235:
-#line 1785 "asn1p_y.y"
+#line 1816 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
 	;
     break;}
 case 236:
-#line 1789 "asn1p_y.y"
-{
-		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
-		checkmem(yyval.a_value);
-	;
-    break;}
-case 237:
-#line 1820 "asn1p_y.y"
+#line 1847 "asn1p_y.y"
 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
     break;}
-case 238:
-#line 1821 "asn1p_y.y"
+case 237:
+#line 1848 "asn1p_y.y"
 { yyval.a_tag = yyvsp[0].a_tag; ;
     break;}
-case 239:
-#line 1825 "asn1p_y.y"
+case 238:
+#line 1852 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[0].a_tag;
 		yyval.a_tag.tag_mode = TM_DEFAULT;
 	;
     break;}
-case 240:
-#line 1829 "asn1p_y.y"
+case 239:
+#line 1856 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = TM_IMPLICIT;
 	;
     break;}
-case 241:
-#line 1833 "asn1p_y.y"
+case 240:
+#line 1860 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = TM_EXPLICIT;
 	;
     break;}
+case 241:
+#line 1867 "asn1p_y.y"
+{
+		checkmem(yyvsp[0].tv_str);
+		yyval.tv_str = yyvsp[0].tv_str;
+	;
+    break;}
 case 242:
-#line 1840 "asn1p_y.y"
+#line 1871 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 243:
-#line 1844 "asn1p_y.y"
+#line 1879 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 244:
-#line 1851 "asn1p_y.y"
+#line 1886 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 245:
-#line 1858 "asn1p_y.y"
-{
-		checkmem(yyvsp[0].tv_str);
-		yyval.tv_str = yyvsp[0].tv_str;
-	;
-    break;}
-case 246:
-#line 1865 "asn1p_y.y"
+#line 1893 "asn1p_y.y"
 {
 		memset(&yyval.tv_nametag, 0, sizeof(yyval.tv_nametag));
 		yyval.tv_nametag.name = yyvsp[0].tv_str;
 	;
     break;}
-case 247:
-#line 1869 "asn1p_y.y"
+case 246:
+#line 1897 "asn1p_y.y"
 {
 		yyval.tv_nametag.name = yyvsp[-1].tv_str;
 		yyval.tv_nametag.tag = yyvsp[0].a_tag;
@@ -3374,7 +3404,7 @@
     }
   return 1;
 }
-#line 1876 "asn1p_y.y"
+#line 1904 "asn1p_y.y"
 
 
 
diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h
index 61679e3..375b845 100644
--- a/libasn1parser/asn1p_y.h
+++ b/libasn1parser/asn1p_y.h
@@ -39,7 +39,7 @@
 #define	TOK_number	263
 #define	TOK_number_negative	264
 #define	TOK_typereference	265
-#define	TOK_objectclassreference	266
+#define	TOK_capitalreference	266
 #define	TOK_typefieldreference	267
 #define	TOK_valuefieldreference	268
 #define	TOK_ABSENT	269
@@ -65,68 +65,70 @@
 #define	TOK_DEFINED	289
 #define	TOK_EMBEDDED	290
 #define	TOK_ENCODED	291
-#define	TOK_END	292
-#define	TOK_ENUMERATED	293
-#define	TOK_EXPLICIT	294
-#define	TOK_EXPORTS	295
-#define	TOK_EXTENSIBILITY	296
-#define	TOK_EXTERNAL	297
-#define	TOK_FALSE	298
-#define	TOK_FROM	299
-#define	TOK_GeneralizedTime	300
-#define	TOK_GeneralString	301
-#define	TOK_GraphicString	302
-#define	TOK_IA5String	303
-#define	TOK_IDENTIFIER	304
-#define	TOK_IMPLICIT	305
-#define	TOK_IMPLIED	306
-#define	TOK_IMPORTS	307
-#define	TOK_INCLUDES	308
-#define	TOK_INSTANCE	309
-#define	TOK_INTEGER	310
-#define	TOK_ISO646String	311
-#define	TOK_MAX	312
-#define	TOK_MIN	313
-#define	TOK_MINUS_INFINITY	314
-#define	TOK_NULL	315
-#define	TOK_NumericString	316
-#define	TOK_OBJECT	317
-#define	TOK_ObjectDescriptor	318
-#define	TOK_OCTET	319
-#define	TOK_OF	320
-#define	TOK_OPTIONAL	321
-#define	TOK_PATTERN	322
-#define	TOK_PDV	323
-#define	TOK_PLUS_INFINITY	324
-#define	TOK_PRESENT	325
-#define	TOK_PrintableString	326
-#define	TOK_PRIVATE	327
-#define	TOK_REAL	328
-#define	TOK_RELATIVE_OID	329
-#define	TOK_SEQUENCE	330
-#define	TOK_SET	331
-#define	TOK_SIZE	332
-#define	TOK_STRING	333
-#define	TOK_SYNTAX	334
-#define	TOK_T61String	335
-#define	TOK_TAGS	336
-#define	TOK_TeletexString	337
-#define	TOK_TRUE	338
-#define	TOK_TYPE_IDENTIFIER	339
-#define	TOK_UNIQUE	340
-#define	TOK_UNIVERSAL	341
-#define	TOK_UniversalString	342
-#define	TOK_UTCTime	343
-#define	TOK_UTF8String	344
-#define	TOK_VideotexString	345
-#define	TOK_VisibleString	346
-#define	TOK_WITH	347
-#define	TOK_UNION	348
-#define	TOK_INTERSECTION	349
+#define	TOK_ENCODING_CONTROL	292
+#define	TOK_END	293
+#define	TOK_ENUMERATED	294
+#define	TOK_EXPLICIT	295
+#define	TOK_EXPORTS	296
+#define	TOK_EXTENSIBILITY	297
+#define	TOK_EXTERNAL	298
+#define	TOK_FALSE	299
+#define	TOK_FROM	300
+#define	TOK_GeneralizedTime	301
+#define	TOK_GeneralString	302
+#define	TOK_GraphicString	303
+#define	TOK_IA5String	304
+#define	TOK_IDENTIFIER	305
+#define	TOK_IMPLICIT	306
+#define	TOK_IMPLIED	307
+#define	TOK_IMPORTS	308
+#define	TOK_INCLUDES	309
+#define	TOK_INSTANCE	310
+#define	TOK_INSTRUCTIONS	311
+#define	TOK_INTEGER	312
+#define	TOK_ISO646String	313
+#define	TOK_MAX	314
+#define	TOK_MIN	315
+#define	TOK_MINUS_INFINITY	316
+#define	TOK_NULL	317
+#define	TOK_NumericString	318
+#define	TOK_OBJECT	319
+#define	TOK_ObjectDescriptor	320
+#define	TOK_OCTET	321
+#define	TOK_OF	322
+#define	TOK_OPTIONAL	323
+#define	TOK_PATTERN	324
+#define	TOK_PDV	325
+#define	TOK_PLUS_INFINITY	326
+#define	TOK_PRESENT	327
+#define	TOK_PrintableString	328
+#define	TOK_PRIVATE	329
+#define	TOK_REAL	330
+#define	TOK_RELATIVE_OID	331
+#define	TOK_SEQUENCE	332
+#define	TOK_SET	333
+#define	TOK_SIZE	334
+#define	TOK_STRING	335
+#define	TOK_SYNTAX	336
+#define	TOK_T61String	337
+#define	TOK_TAGS	338
+#define	TOK_TeletexString	339
+#define	TOK_TRUE	340
+#define	TOK_TYPE_IDENTIFIER	341
+#define	TOK_UNIQUE	342
+#define	TOK_UNIVERSAL	343
+#define	TOK_UniversalString	344
+#define	TOK_UTCTime	345
+#define	TOK_UTF8String	346
+#define	TOK_VideotexString	347
+#define	TOK_VisibleString	348
+#define	TOK_WITH	349
 #define	TOK_EXCEPT	350
-#define	TOK_TwoDots	351
-#define	TOK_ThreeDots	352
-#define	TOK_tag	353
+#define	TOK_INTERSECTION	351
+#define	TOK_UNION	352
+#define	TOK_TwoDots	353
+#define	TOK_ThreeDots	354
+#define	TOK_tag	355
 
 
 extern YYSTYPE asn1p_lval;
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 7b2c136..452086f 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -15,6 +15,7 @@
 int yyerror(const char *msg);
 void asn1p_lexer_hack_push_opaque_state(void);
 void asn1p_lexer_hack_enable_with_syntax(void);
+void asn1p_lexer_hack_push_encoding_control(void);
 #define	yylineno	asn1p_lineno
 extern int asn1p_lineno;
 
@@ -99,7 +100,7 @@
 %token	<a_int>		TOK_number
 %token	<a_int>		TOK_number_negative
 %token	<tv_str>	TOK_typereference
-%token	<tv_str>	TOK_objectclassreference	/* "CLASS1" */
+%token	<tv_str>	TOK_capitalreference		/* "CLASS1" */
 %token	<tv_str>	TOK_typefieldreference		/* "&Pork" */
 %token	<tv_str>	TOK_valuefieldreference		/* "&id" */
 
@@ -129,6 +130,7 @@
 %token			TOK_DEFINED
 %token			TOK_EMBEDDED
 %token			TOK_ENCODED
+%token			TOK_ENCODING_CONTROL
 %token			TOK_END
 %token			TOK_ENUMERATED
 %token			TOK_EXPLICIT
@@ -147,6 +149,7 @@
 %token			TOK_IMPORTS
 %token			TOK_INCLUDES
 %token			TOK_INSTANCE
+%token			TOK_INSTRUCTIONS
 %token			TOK_INTEGER
 %token			TOK_ISO646String
 %token			TOK_MAX
@@ -186,9 +189,9 @@
 %token			TOK_VisibleString
 %token			TOK_WITH
 
-%left			'|' TOK_UNION
-%left			'^' TOK_INTERSECTION
 %left			TOK_EXCEPT
+%left			'^' TOK_INTERSECTION
+%left			'|' TOK_UNION
 
 /* Misc tags */
 %token			TOK_TwoDots		/* .. */
@@ -262,14 +265,10 @@
 %type	<a_tag>			Tag		/* [UNIVERSAL 0] IMPLICIT */
 %type	<a_tag>			optTag		/* [UNIVERSAL 0] IMPLICIT */
 %type	<a_constr>		optConstraints
-%type	<a_constr>		Constraints
-%type	<a_constr>		SingleConstraint	/* (SIZE(2)) */
-%type	<a_constr>		ConstraintElementSet	/* 1..2,...,3 */
+%type	<a_constr>		SetOfConstraints
+%type	<a_constr>		ElementSetSpecs		/* 1..2,...,3 */
+%type	<a_constr>		ElementSetSpec		/* 1..2,...,3 */
 %type	<a_constr>		ConstraintSubtypeElement /* 1..2 */
-%type	<a_constr>		ConstraintElementIntersection
-%type	<a_constr>		ConstraintElementException
-%type	<a_constr>		ConstraintElementUnion
-%type	<a_constr>		ConstraintElement
 %type	<a_constr>		SimpleTableConstraint
 %type	<a_constr>		TableConstraint
 %type	<a_constr>		WithComponents
@@ -429,6 +428,22 @@
 	| TOK_EXTENSIBILITY TOK_IMPLIED {
 		$$ = MSF_EXTENSIBILITY_IMPLIED;
 	}
+	/* EncodingReferenceDefault */
+	| TOK_capitalreference TOK_INSTRUCTIONS {
+		/* X.680Amd1 specifies TAG and XER */
+		if(strcmp($1, "TAG") == 0) {
+		 	$$ = MSF_TAG_INSTRUCTIONS;
+		} else if(strcmp($1, "XER") == 0) {
+		 	$$ = MSF_XER_INSTRUCTIONS;
+		} else {
+			fprintf(stderr,
+				"WARNING: %s INSTRUCTIONS at line %d: "
+				"Unrecognized encoding reference\n",
+				$1, yylineno);
+		 	$$ = MSF_unk_INSTRUCTIONS;
+		}
+		free($1);
+	}
 	;
 
 /*
@@ -437,7 +452,6 @@
 optModuleSpecificationBody:
 	{ $$ = 0; }
 	| ModuleSpecificationBody {
-		assert($1);
 		$$ = $1;
 	}
 	;
@@ -452,6 +466,12 @@
 	| ModuleSpecificationBody ModuleSpecificationElement {
 		$$ = $1;
 
+		/* Behave well when one of them is skipped. */
+		if(!($1)) {
+			if($2) $$ = $2;
+			break;
+		}
+
 #ifdef	MY_IMPORT
 #error	MY_IMPORT DEFINED ELSEWHERE!
 #endif
@@ -515,6 +535,16 @@
 		assert($1->meta_type != AMT_INVALID);
 		TQ_ADD(&($$->members), $1, next);
 	}
+	| TOK_ENCODING_CONTROL TOK_capitalreference 
+		{ asn1p_lexer_hack_push_encoding_control(); }
+			{
+		fprintf(stderr,
+			"WARNING: ENCODING-CONTROL %s "
+			"specification at line %d ignored\n",
+			$2, yylineno);
+		free($2);
+		$$ = 0;
+	}
 
 	/*
 	 * Erroneous attemps
@@ -662,7 +692,7 @@
 
 optValueSetBody:
 	{ }
-	| ConstraintElementSet {
+	| ElementSetSpecs {
 	}
 	;
 
@@ -1346,20 +1376,19 @@
 /*
  * Data type constraints.
  */
-optConstraints:
-	{ $$ = 0; }
-	| Constraints { $$ = $1; }
-	;
-
 Union:		'|' | TOK_UNION;
 Intersection:	'^' | TOK_INTERSECTION;
 Except:		      TOK_EXCEPT;
 
-Constraints:
-	TOK_SIZE '('  ConstraintElementSet ')' {
+optConstraints:
+	{ $$ = 0; }
+	| SetOfConstraints {
+		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0);
+	}
+	| TOK_SIZE '('  ElementSetSpecs ')' {
 		/*
 		 * This is a special case, for compatibility purposes.
-		 * It goes without parenthesis.
+		 * It goes without parentheses.
 		 */
 		int ret;
 		$$ = asn1p_constraint_new(yylineno);
@@ -1368,80 +1397,70 @@
 		ret = asn1p_constraint_insert($$, $3);
 		checkmem(ret == 0);
 	}
-	| SingleConstraint {
-		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, 0);
-	}
-	| Constraints SingleConstraint {
-		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $2);
-	}
 	;
 
-SingleConstraint:
-	'(' ConstraintElementSet ')' {
+SetOfConstraints:
+	'(' ElementSetSpecs ')' {
 		$$ = $2;
 	}
+	| SetOfConstraints '(' ElementSetSpecs ')' {
+		CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $3);
+	}
 	;
 
-ConstraintElementSet:
-	ConstraintElement {
+ElementSetSpecs:
+	ElementSetSpec {
 		$$ = $1;
 	}
-	| ConstraintElement ',' TOK_ThreeDots {
+	| ElementSetSpec ',' TOK_ThreeDots {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
 	}
-	| ConstraintElement ',' TOK_ThreeDots ',' ConstraintElement {
+	| ElementSetSpec ',' TOK_ThreeDots ',' ElementSetSpec {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
 		ct->type = ACT_EL_EXT;
 		CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
 		ct = $$;
 		CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $5);
 	}
-	| TOK_ThreeDots {
-		$$ = asn1p_constraint_new(yylineno);
-		checkmem($$);
-		$$->type = ACT_EL_EXT;
-	}
-	| TOK_ThreeDots ',' ConstraintElement {
-		asn1p_constraint_t *ct;
-		ct = asn1p_constraint_new(yylineno);
-		checkmem(ct);
-		ct->type = ACT_EL_EXT;
-		CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $3);
-	}
 	;
 
-ConstraintElement: ConstraintElementUnion { $$ = $1; } ;
-
-ConstraintElementUnion:
-	ConstraintElementIntersection { $$ = $1; }
-	| ConstraintElementUnion Union ConstraintElementIntersection {
+ElementSetSpec:
+	ConstraintSubtypeElement {
+		$$ = $1;
+	}
+	| ElementSetSpec Union ConstraintSubtypeElement {
 		CONSTRAINT_INSERT($$, ACT_CA_UNI, $1, $3);
 	}
-	;
-
-ConstraintElementIntersection:
-	ConstraintElementException { $$ = $1; }
-	| ConstraintElementIntersection Intersection
-		ConstraintElementException {
+	| ElementSetSpec Intersection ConstraintSubtypeElement {
 		CONSTRAINT_INSERT($$, ACT_CA_INT, $1, $3);
 	}
-	;
-
-ConstraintElementException:
-	ConstraintSubtypeElement { $$ = $1; }
-	| ConstraintElementException Except ConstraintSubtypeElement {
+	| ConstraintSubtypeElement Except ConstraintSubtypeElement {
 		CONSTRAINT_INSERT($$, ACT_CA_EXC, $1, $3);
 	}
 	;
 
 ConstraintSubtypeElement:
-	ConstraintValue {
+	ConstraintSpec '(' ElementSetSpecs ')' {
+		int ret;
+		$$ = asn1p_constraint_new(yylineno);
+		checkmem($$);
+		$$->type = $1;
+		ret = asn1p_constraint_insert($$, $3);
+		checkmem(ret == 0);
+	}
+	| '(' ElementSetSpecs ')' {
+		int ret;
+		$$ = asn1p_constraint_new(yylineno);
+		checkmem($$);
+		$$->type = ACT_CA_SET;
+		ret = asn1p_constraint_insert($$, $2);
+		checkmem(ret == 0);
+	}
+	| ConstraintValue {
 		$$ = asn1p_constraint_new(yylineno);
 		checkmem($$);
 		$$->type = ACT_EL_VALUE;
@@ -1454,13 +1473,30 @@
 		$$->range_start = $1;
 		$$->range_stop = $3;
 	}
-	| ConstraintSpec '(' ConstraintElementSet ')' {
-		int ret;
+	| TOK_MIN ConstraintRangeSpec ConstraintValue {
 		$$ = asn1p_constraint_new(yylineno);
 		checkmem($$);
-		$$->type = $1;
-		ret = asn1p_constraint_insert($$, $3);
-		checkmem(ret == 0);
+		$$->type = $2;
+		$$->range_start = asn1p_value_fromint(-123);
+		$$->range_stop = $3;
+		$$->range_start->type = ATV_MIN;
+	}
+	| ConstraintValue ConstraintRangeSpec TOK_MAX {
+		$$ = asn1p_constraint_new(yylineno);
+		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);
+		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;
 	}
 	| TableConstraint {
 		$$ = $1;
@@ -1505,16 +1541,7 @@
 		$$ = asn1p_value_frombuf($1.buf, $1.len, 0);
 		checkmem($$);
 	}
-	| TOK_MIN {
-		$$ = asn1p_value_fromint(123);
-		checkmem($$);
-		$$->type = ATV_MIN;
-	}
-	| TOK_MAX {
-		$$ = asn1p_value_fromint(321);
-		checkmem($$);
-		$$->type = ATV_MAX;
-	}
+
 	| TOK_FALSE {
 		$$ = asn1p_value_fromint(0);
 		checkmem($$);
@@ -1841,14 +1868,15 @@
 		checkmem($1);
 		$$ = $1;
 	}
-	| TOK_objectclassreference {
+	| TOK_capitalreference {
 		checkmem($1);
 		$$ = $1;
 	}
 	;
 
+
 ObjectClassReference:
-	TOK_objectclassreference {
+	TOK_capitalreference {
 		checkmem($1);
 		$$ = $1;
 	}