diff --git a/libasn1parser/Makefile.in b/libasn1parser/Makefile.in index 375d37e2..4af09101 100644 --- a/libasn1parser/Makefile.in +++ b/libasn1parser/Makefile.in @@ -546,9 +546,9 @@ distclean-generic: 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 faec6f2e..26f920f4 100644 --- a/libasn1parser/asn1p_constr.c +++ b/libasn1parser/asn1p_constr.c @@ -108,3 +108,42 @@ asn1p_constraint_insert(asn1p_constraint_t *into, asn1p_constraint_t *what) { 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 19099b2f..d3756780 100644 --- a/libasn1parser/asn1p_constr.h +++ b/libasn1parser/asn1p_constr.h @@ -59,6 +59,8 @@ typedef struct asn1p_constraint_s { 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 23ab4cb3..be9da773 100644 --- a/libasn1parser/asn1p_expr.c +++ b/libasn1parser/asn1p_expr.c @@ -57,6 +57,7 @@ asn1p_expr_clone(asn1p_expr_t *expr) { 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_expr_free(asn1p_expr_t *expr) { 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 331285c7..ef1941b7 100644 --- a/libasn1parser/asn1p_expr.h +++ b/libasn1parser/asn1p_expr.h @@ -124,6 +124,12 @@ typedef struct asn1p_expr_s { */ 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 bbddbcc0..f40f7a38 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 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); *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 @@ static yyconst int yy_meta[79] = 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 @@ static yyconst short int yy_chk[4245] = 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 @@ char *yytext; 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 @@ static asn1_integer_t asn1p_atoi(char *ptr); /* errno is either 0 or ERANGE */ #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 @@ static asn1_integer_t asn1p_atoi(char *ptr); /* errno is either 0 or ERANGE */ #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 @@ YY_DECL 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 @@ yy_match: 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 @@ do_action: /* This label is used only to access EOF actions. */ { 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 @@ do_action: /* This label is used only to access EOF actions. */ { /* 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 @@ YY_RULE_SETUP 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_RULE_SETUP 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_RULE_SETUP 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_RULE_SETUP 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_RULE_SETUP 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP 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_RULE_SETUP } 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP /* * 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP 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 @@ YY_RULE_SETUP /* * 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 @@ YY_RULE_SETUP * 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_RULE_SETUP } 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(dash_comment): 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 @@ static yy_state_type yy_get_previous_state() 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 @@ yy_state_type yy_current_state; 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 @@ int main() 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 0d86cb74..6a2a0cc7 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 @@ static asn1_integer_t asn1p_atoi(char *ptr); /* errno is either 0 or ERANGE */ %} %option never-interactive -%option noinput nounput +%option noinput %option noyywrap stack /* Performance penalty is OK */ %option yylineno @@ -89,6 +90,7 @@ static asn1_integer_t asn1p_atoi(char *ptr); /* errno is either 0 or ERANGE */ %x cpp_comment %x quoted %x opaque +%x encoding_control %x with_syntax /* Newline */ @@ -190,6 +192,19 @@ WSP [\t\r\v\f\n ] } +{ + 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 @@ DEFINED { 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 @@ IMPLIED return TOK_IMPLIED; 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 @@ WITH return TOK_WITH; [A-Z][A-Z0-9-]* { CHECK_DASHES; asn1p_lval.tv_str = strdup(yytext); - return TOK_objectclassreference; + return TOK_capitalreference; } /* @@ -460,6 +477,7 @@ WITH return TOK_WITH; } +[|^] return yytext[0]; /* Union, Intersection */ <*>. { fprintf(stderr, @@ -485,17 +503,16 @@ WITH return TOK_WITH; /* * 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 906c784a..7d8bcc62 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 68a94fea..9aa7e749 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 yylex(void); 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 @@ static asn1p_value_t * } 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 @@ typedef union { -#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 @@ static const char yytranslate[] = { 0, 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 short yyrline[] = { 0, 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 @@ yyreduce: 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 @@ case 2: ; 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 @@ case 4: ; 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 @@ case 9: ; 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 @@ case 10: ; 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 @@ case 25: ; 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,28 +1535,18 @@ case 27: } ; 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(); + 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 518 "asn1p_y.y" { yyval.a_module = asn1p_module_new(); checkmem(yyval.a_module); @@ -1546,7 +1556,32 @@ case 30: ; 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 @@ case 31: "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 @@ case 36: 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 @@ case 39: 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 @@ case 40: 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 @@ case 46: 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 @@ case 47: 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 @@ case 48: // 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 @@ case 49: 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 @@ case 50: 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 @@ case 53: 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 @@ case 54: 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 @@ case 55: 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 @@ case 56: 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 @@ case 57: 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 @@ case 58: 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 @@ case 60: 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 @@ case 61: 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 @@ case 65: 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 @@ case 68: 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 @@ case 71: 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 @@ case 73: 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 @@ case 75: 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 @@ case 83: 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 @@ case 84: 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 @@ case 91: 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 @@ case 93: 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 @@ case 94: 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 @@ case 95: 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 @@ case 96: 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 @@ case 97: 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 @@ case 98: 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 @@ case 99: 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 @@ case 100: } ; 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 @@ case 101: 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 @@ case 102: 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 @@ case 107: 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 @@ case 115: 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 @@ case 116: 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 @@ case 117: 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 @@ case 118: 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 @@ case 134: 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 @@ case 135: 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 @@ case 150: 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 @@ case 151: 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 @@ case 152: 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 @@ case 153: 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 @@ case 154: 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 @@ case 155: 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 @@ case 156: 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 @@ case 164: 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 @@ case 182: 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 @@ case 192: 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 @@ case 202: 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 @@ case 210: 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 @@ case 212: 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 @@ case 213: 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 @@ case 214: 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 @@ case 215: 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 @@ case 217: 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 @@ case 230: 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 @@ case 231: ; 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 @@ case 233: 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 @@ case 234: 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 @@ yyerrhandle: } 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 61679e3d..375b845f 100644 --- a/libasn1parser/asn1p_y.h +++ b/libasn1parser/asn1p_y.h @@ -39,7 +39,7 @@ typedef union { #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 @@ typedef union { #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 7b2c1366..452086f5 100644 --- a/libasn1parser/asn1p_y.y +++ b/libasn1parser/asn1p_y.y @@ -15,6 +15,7 @@ int yylex(void); 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 @@ static asn1p_value_t * %token TOK_number %token TOK_number_negative %token TOK_typereference -%token TOK_objectclassreference /* "CLASS1" */ +%token TOK_capitalreference /* "CLASS1" */ %token TOK_typefieldreference /* "&Pork" */ %token TOK_valuefieldreference /* "&id" */ @@ -129,6 +130,7 @@ static asn1p_value_t * %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 @@ static asn1p_value_t * %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 @@ static asn1p_value_t * %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 @@ static asn1p_value_t * %type Tag /* [UNIVERSAL 0] IMPLICIT */ %type optTag /* [UNIVERSAL 0] IMPLICIT */ %type optConstraints -%type Constraints -%type SingleConstraint /* (SIZE(2)) */ -%type ConstraintElementSet /* 1..2,...,3 */ +%type SetOfConstraints +%type ElementSetSpecs /* 1..2,...,3 */ +%type ElementSetSpec /* 1..2,...,3 */ %type ConstraintSubtypeElement /* 1..2 */ -%type ConstraintElementIntersection -%type ConstraintElementException -%type ConstraintElementUnion -%type ConstraintElement %type SimpleTableConstraint %type TableConstraint %type WithComponents @@ -429,6 +428,22 @@ ModuleSpecificationFlag: | 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 @@ ModuleSpecificationFlag: optModuleSpecificationBody: { $$ = 0; } | ModuleSpecificationBody { - assert($1); $$ = $1; } ; @@ -452,6 +466,12 @@ ModuleSpecificationBody: | 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 @@ ModuleSpecificationElement: 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 @@ DefinedTypeRef: optValueSetBody: { } - | ConstraintElementSet { + | ElementSetSpecs { } ; @@ -1346,20 +1376,19 @@ ConstructedType: /* * 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 @@ Constraints: 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 @@ ConstraintSubtypeElement: $$->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 @@ ConstraintValue: $$ = 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 @@ TypeRefName: checkmem($1); $$ = $1; } - | TOK_objectclassreference { + | TOK_capitalreference { checkmem($1); $$ = $1; } ; + ObjectClassReference: - TOK_objectclassreference { + TOK_capitalreference { checkmem($1); $$ = $1; }