diff options
-rwxr-xr-x | x2p/Makefile.SH | 45 | ||||
-rw-r--r-- | x2p/a2p.c | 2670 | ||||
-rw-r--r-- | x2p/a2p.h | 61 | ||||
-rw-r--r-- | x2p/a2py.c | 1 | ||||
-rw-r--r-- | x2p/handy.h | 146 | ||||
-rw-r--r-- | x2p/hash.c | 7 | ||||
-rw-r--r-- | x2p/hash.h | 17 | ||||
-rw-r--r-- | x2p/str.c | 14 | ||||
-rw-r--r-- | x2p/str.h | 28 | ||||
-rw-r--r-- | x2p/util.c | 11 | ||||
-rw-r--r-- | x2p/util.h | 32 | ||||
-rw-r--r-- | x2p/walk.c | 21 |
12 files changed, 2984 insertions, 69 deletions
diff --git a/x2p/Makefile.SH b/x2p/Makefile.SH index 5b8041c78b..52a44b5b59 100755 --- a/x2p/Makefile.SH +++ b/x2p/Makefile.SH @@ -17,6 +17,11 @@ case "$0" in */*) cd `expr X$0 : 'X\(.*\)/'` ;; esac +: Configure sets byacc=byacc if byacc is not found. We reset it to '' +case "$byacc" in +'byacc') byacc='';; +esac + echo "Extracting x2p/Makefile (with variable substitutions)" rm -f Makefile cat >Makefile <<!GROK!THIS! @@ -25,7 +30,7 @@ cat >Makefile <<!GROK!THIS! # $Log: Makefile.SH,v $ CC = $cc -YACC = $yacc +BYACC = $byacc mansrc = $mansrc manext = $manext LDFLAGS = $ldflags @@ -72,19 +77,45 @@ all: $(public) $(private) $(util) a2p: $(obj) a2p.o $(CC) $(LDFLAGS) $(obj) a2p.o $(libs) -o a2p -a2p.c: a2p.y - @ echo Expect many shift/reduce and reduce/reduce conflicts... - $(YACC) a2p.y - mv y.tab.c a2p.c +!NO!SUBS! + +: Only print out the rules for running byacc if the user _has_ byacc. +: Otherwise, comment them out. Users who really know what they are +: doing can uncomment them and run yacc or bison or whatever. +: Configure sets byacc=byacc if byacc is not found. +case "$byacc" in +'') + comment1='#' + comment2='' ;; +*) comment1='' + comment2='#' ;; +esac + +$spitshell >>Makefile <<!GROK!THIS! + +# I now supply a2p.c with the kits, so the following section is +# commented out if you don't have byacc. + +${comment1}a2p.c: a2p.y +${comment1} @ echo Expect many shift/reduce and reduce/reduce conflicts +${comment1} \$(BYACC) a2p.y +${comment1} mv y.tab.c a2p.c + +# This version is used if you do not have byacc. +${comment2}a2p.c: a2p.y +${comment2} touch a2p.c + +!GROK!THIS! +cat >>Makefile <<'!NO!SUBS!' a2p.o: a2p.c a2py.c a2p.h EXTERN.h util.h INTERN.h handy.h ../config.h str.h hash.h $(CCCMD) $(LARGE) a2p.c clean: - rm -f a2p *.o a2p.c + rm -f a2p *.o realclean: clean - rm -f *.orig */*.orig core $(addedbyconf) a2p.c all malloc.c + rm -f *.orig core $(addedbyconf) all malloc.c rm -f Makefile cflags find2perl s2p makefile makefile.old # The following lint has practically everything turned on. Unfortunately, diff --git a/x2p/a2p.c b/x2p/a2p.c new file mode 100644 index 0000000000..35948e21e7 --- /dev/null +++ b/x2p/a2p.c @@ -0,0 +1,2670 @@ +#ifndef lint +static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; +#endif +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define yyclearin (yychar=(-1)) +#define yyerrok (yyerrflag=0) +#define YYRECOVERING (yyerrflag!=0) +#define YYPREFIX "yy" +#line 2 "a2p.y" +/* $RCSfile: a2p.y,v $$Revision: 4.1 $$Date: 92/08/07 18:29:12 $ + * + * Copyright (c) 1991, Larry Wall + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + * $Log: a2p.y,v $ + */ + +#include "INTERN.h" +#include "a2p.h" + +int root; +int begins = Nullop; +int ends = Nullop; + +#line 30 "y.tab.c" +#define BEGIN 257 +#define END 258 +#define REGEX 259 +#define SEMINEW 260 +#define NEWLINE 261 +#define COMMENT 262 +#define FUN1 263 +#define FUNN 264 +#define GRGR 265 +#define PRINT 266 +#define PRINTF 267 +#define SPRINTF 268 +#define SPLIT 269 +#define IF 270 +#define ELSE 271 +#define WHILE 272 +#define FOR 273 +#define IN 274 +#define EXIT 275 +#define NEXT 276 +#define BREAK 277 +#define CONTINUE 278 +#define RET 279 +#define GETLINE 280 +#define DO 281 +#define SUB 282 +#define GSUB 283 +#define MATCH 284 +#define FUNCTION 285 +#define USERFUN 286 +#define DELETE 287 +#define ASGNOP 288 +#define OROR 289 +#define ANDAND 290 +#define NUMBER 291 +#define VAR 292 +#define SUBSTR 293 +#define INDEX 294 +#define MATCHOP 295 +#define RELOP 296 +#define OR 297 +#define STRING 298 +#define UMINUS 299 +#define NOT 300 +#define INCR 301 +#define DECR 302 +#define FIELD 303 +#define VFIELD 304 +#define YYERRCODE 256 +short yylhs[] = { -1, + 0, 3, 6, 6, 2, 2, 7, 7, 7, 7, + 7, 7, 9, 8, 8, 11, 11, 11, 11, 11, + 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, + 13, 13, 12, 12, 12, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 17, 17, 17, 17, 10, 10, 10, 18, 18, + 18, 1, 1, 19, 19, 19, 19, 4, 4, 20, + 20, 21, 21, 21, 21, 5, 5, 22, 22, 22, + 22, 25, 25, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 26, 26, 26, 24, + 24, 24, 24, 24, 24, 24, 24, +}; +short yylen[] = { 2, + 2, 6, 5, 2, 3, 0, 1, 5, 10, 4, + 1, 1, 1, 1, 3, 1, 1, 1, 1, 5, + 3, 4, 4, 2, 3, 3, 3, 3, 3, 3, + 1, 3, 1, 2, 3, 1, 1, 1, 3, 3, + 3, 3, 3, 3, 3, 5, 2, 2, 2, 2, + 2, 2, 3, 1, 2, 3, 4, 3, 4, 1, + 3, 4, 4, 4, 2, 8, 6, 8, 8, 6, + 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, + 8, 1, 4, 1, 2, 1, 1, 0, 4, 4, + 3, 2, 0, 1, 1, 1, 1, 2, 0, 1, + 1, 2, 2, 2, 2, 2, 0, 3, 2, 2, + 1, 1, 0, 1, 4, 2, 4, 2, 1, 1, + 1, 2, 1, 1, 2, 5, 1, 1, 1, 6, + 9, 6, 7, 10, 9, 6, 5, +}; +short yydefred[] = { 93, + 0, 0, 95, 96, 97, 94, 0, 92, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 84, 0, 99, 0, 11, 0, 93, 0, 0, + 0, 17, 18, 19, 0, 0, 99, 99, 0, 0, + 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 49, + 50, 0, 0, 0, 0, 0, 0, 4, 0, 99, + 0, 99, 99, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 48, + 0, 0, 61, 0, 0, 0, 0, 99, 99, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 100, 101, 0, 98, 53, 32, 28, 21, + 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, + 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 62, 63, 91, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 13, 64, 83, 0, 0, 99, + 0, 0, 0, 0, 0, 0, 120, 119, 123, 0, + 99, 0, 99, 10, 99, 0, 106, 0, 111, 0, + 0, 0, 22, 59, 93, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 99, 99, 99, 99, 99, 8, 0, 0, 70, 0, + 75, 0, 74, 0, 77, 0, 76, 0, 72, 73, + 0, 67, 0, 71, 128, 127, 129, 0, 0, 0, + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, + 0, 0, 99, 99, 99, 0, 0, 0, 99, 69, + 68, 79, 78, 81, 80, 0, 66, 0, 0, 0, + 0, 0, 0, 126, 0, 0, 0, 132, 136, 0, + 0, 0, 9, 99, 99, 0, 133, 0, 0, 99, + 131, 135, 0, 134, +}; +short yydgoto[] = { 1, + 2, 7, 36, 73, 125, 37, 38, 39, 164, 52, + 53, 41, 42, 43, 44, 45, 46, 55, 8, 126, + 225, 187, 188, 189, 254, 248, +}; +short yysindex[] = { 0, + 0, -48, 0, 0, 0, 0, 6619, 0, -121, -110, + 0, -4, 32, 4183, 38, 30, 51, 64, 68, -260, + 70, 0, -61, 82, 83, 0, 4448, 4448, 4448, -183, + -183, 0, 4448, 0, 4448, 0, -188, 0, 3, 22, + 6884, 0, 0, 0, 34, -213, 0, 0, 2061, 4183, + 4183, 0, -49, 5612, 85, 4448, 4448, 14, 4713, 6753, + 4448, 87, 4183, 4183, 4448, 4448, -77, -77, 0, 0, + 0, 18, -192, -36, 91, 92, 95, 0, -48, 0, + 4448, 0, 0, 4448, 6980, 4448, 4448, 4448, 34, -154, + 4448, 4448, 4448, 4448, 4448, 4448, -135, 4448, 0, 0, + -192, -192, 0, 5658, 106, 5612, 11, 0, 0, 5704, + 186, 4448, 113, 5751, 115, 5805, 5885, 4183, 114, 67, + 5931, 5978, 0, 0, 4572, 0, 0, 0, 0, 0, + -192, 6032, 1964, 1964, -49, 0, 3230, 186, 186, 186, + 0, 97, 97, -77, -77, -77, -77, -183, -49, 4665, + 4765, 0, 0, 0, 1964, 1964, -131, 186, 4448, 4448, + 4448, 4448, 7026, 121, 0, 0, 0, 4448, 4448, 0, + 4183, 4183, 124, 125, 132, 4448, 0, 0, 0, 4448, + 0, -117, 0, 0, 0, 6884, 0, -44, 0, 4837, + 4448, -114, 0, 0, 0, 0, 6884, 6884, 13, 3635, + 5295, 5367, 5506, 137, 6078, 0, 5560, 6243, -192, -59, + -59, 4448, 4448, 5241, 6884, 6884, 3701, 93, -192, -192, + 0, 0, 0, 0, 0, 0, 6884, -48, 0, 7084, + 0, 4448, 0, 4448, 0, 4448, 0, 4448, 0, 0, + -119, 0, 4448, 0, 0, 0, 0, 4448, 4448, -34, + -16, 6343, 0, 123, -89, 4183, 4930, -192, -192, -192, + -192, -192, 144, 6389, 6435, 6508, 6554, 6700, 0, 6819, + 6884, 6884, 0, 0, 0, 6930, 146, 94, 0, 0, + 0, 0, 0, 0, 0, -192, 0, 3701, 3701, 3701, + 5241, -53, 4448, 0, -192, 5030, -83, 0, 0, 148, + 5241, -13, 0, 0, 0, 149, 0, 3701, 3701, 0, + 0, 0, 3701, 0, +}; +short yyrindex[] = { 0, + 0, 2015, 0, 0, 0, 0, 192, 0, 0, 0, + 0, 56, 0, 3424, 0, 2619, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2147, 0, 2195, 1676, + 3509, 0, 0, 0, 1782, 1340, 0, 0, 0, 152, + 0, 0, 0, 3829, 111, 0, 0, 381, 0, 0, + 0, 0, 152, 101, 0, 0, 564, 834, 0, 0, + 0, 436, 5102, 0, -47, 39, 42, 0, 2245, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1830, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5102, 5102, 0, 72, 0, 17, 0, 0, 0, 72, + 2718, 0, 74, 72, 74, 72, 72, 152, 0, 0, + 72, 72, 0, 0, 0, 0, 0, 0, 0, 0, + 5102, 72, 0, 0, 1882, 0, 3464, 3057, 3097, 3145, + 0, 1468, 1734, 888, 942, 1016, 1286, 2564, 1395, 0, + 0, 0, 0, 0, 0, 0, 0, 3185, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 538, 538, 0, 0, 0, 122, 0, 0, 0, 241, + 0, 0, 0, 0, 0, -41, 0, 0, 0, 0, + 0, 491, 0, 0, 0, 0, 3549, 3594, 0, 72, + 72, 72, 72, 74, 72, 0, 72, 72, 3866, 296, + 357, 0, 0, 136, -10, 169, 0, 0, 5102, 3970, + 0, 0, 0, 0, 0, 0, 3784, 2294, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -51, 0, 0, 0, 101, 0, 4038, 4135, 4235, + 4307, 4400, 74, 72, 72, 72, 72, 72, 0, 72, + 507, 553, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5102, 0, 0, 0, 0, + 155, 0, 0, 0, 4500, 0, 5195, 0, 0, 0, + 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, +}; +short yygindex[] = { 0, + -18, 0, 0, 7251, -19, 0, 0, 0, 0, -31, + 33, 2875, -14, -12, 16, 7373, 76, 147, 0, 0, + 0, 231, -205, 0, -267, -9, +}; +#define YYTABLESIZE 7645 +short yytable[] = { 114, + 82, 47, 246, 269, 127, 301, 273, 114, 253, 81, + 6, 16, 48, 81, 224, 17, 96, 114, 105, 79, + 75, 16, 76, 300, 274, 62, 81, 307, 81, 64, + 122, 119, 120, 306, 97, 49, 75, 82, 76, 40, + 82, 82, 82, 82, 82, 82, 81, 82, 122, 81, + 77, 154, 16, 229, 109, 60, 230, 16, 82, 82, + 82, 69, 82, 82, 247, 84, 77, 74, 123, 124, + 95, 50, 78, 112, 98, 93, 91, 56, 92, 16, + 94, 150, 151, 74, 81, 253, 165, 99, 100, 57, + 59, 58, 60, 82, 82, 253, 60, 60, 60, 60, + 60, 18, 60, 60, 19, 70, 71, 61, 23, 63, + 87, 190, 82, 60, 60, 60, 135, 60, 60, 32, + 33, 65, 66, 82, 82, 80, 118, 96, 109, 97, + 149, 128, 129, 95, 16, 130, 31, 141, 93, 210, + 211, 123, 124, 94, 148, 97, 153, 87, 60, 60, + 87, 87, 87, 87, 166, 87, 159, 87, 161, 167, + 199, 206, 121, 212, 213, 192, 193, 60, 87, 87, + 87, 214, 87, 87, 218, 83, 228, 239, 60, 60, + 121, 276, 277, 256, 280, 293, 294, 304, 305, 310, + 96, 1, 88, 88, 113, 113, 0, 107, 0, 257, + 0, 249, 0, 87, 87, 245, 0, 0, 97, 125, + 0, 3, 4, 5, 0, 221, 222, 223, 114, 114, + 114, 0, 87, 194, 278, 35, 0, 125, 27, 0, + 28, 16, 0, 87, 87, 82, 83, 16, 16, 82, + 83, 17, 17, 0, 250, 251, 0, 16, 16, 122, + 122, 122, 82, 83, 82, 83, 0, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 296, 0, 82, 82, + 0, 0, 82, 83, 82, 82, 83, 0, 16, 16, + 82, 124, 82, 82, 82, 82, 82, 0, 82, 82, + 82, 82, 82, 82, 82, 82, 82, 0, 82, 124, + 82, 82, 82, 82, 82, 16, 16, 90, 292, 0, + 82, 83, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 23, 0, 60, 60, 302, 0, 18, 18, 60, + 19, 19, 32, 33, 0, 60, 116, 60, 60, 60, + 60, 60, 0, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 0, 60, 116, 60, 60, 60, 60, 60, + 16, 16, 31, 31, 0, 0, 0, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 0, 0, 87, 87, + 55, 121, 121, 121, 87, 0, 0, 0, 0, 0, + 87, 0, 87, 87, 87, 87, 87, 118, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 0, 87, 0, + 87, 87, 87, 87, 87, 118, 0, 55, 0, 0, + 55, 55, 55, 55, 55, 55, 0, 55, 125, 125, + 125, 0, 0, 0, 0, 85, 0, 0, 55, 55, + 0, 0, 55, 55, 11, 0, 0, 255, 12, 13, + 0, 0, 0, 14, 15, 0, 0, 16, 16, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 18, 19, + 0, 21, 85, 55, 55, 33, 85, 85, 85, 85, + 85, 0, 85, 26, 0, 29, 30, 31, 32, 33, + 23, 0, 55, 85, 85, 33, 0, 33, 33, 0, + 124, 124, 124, 55, 55, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 297, 298, + 299, 0, 0, 0, 0, 0, 0, 23, 85, 85, + 23, 23, 23, 23, 23, 23, 0, 23, 311, 312, + 0, 0, 0, 314, 0, 0, 0, 115, 23, 23, + 23, 0, 23, 23, 0, 116, 116, 116, 85, 85, + 0, 0, 0, 52, 0, 115, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, + 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 117, 0, 0, 88, 0, 0, 88, + 52, 0, 23, 33, 52, 52, 52, 52, 52, 0, + 52, 117, 0, 23, 23, 16, 118, 118, 118, 0, + 0, 52, 52, 33, 0, 33, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, + 0, 0, 0, 0, 55, 0, 52, 0, 0, 0, + 55, 88, 55, 55, 55, 55, 55, 0, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 0, 55, 0, + 55, 55, 55, 55, 55, 0, 52, 52, 0, 0, + 0, 0, 85, 85, 33, 85, 85, 85, 33, 33, + 85, 0, 0, 33, 33, 0, 0, 0, 0, 85, + 0, 0, 0, 0, 0, 33, 0, 33, 33, 33, + 85, 33, 0, 85, 33, 33, 33, 33, 33, 33, + 33, 33, 0, 33, 0, 33, 33, 33, 33, 33, + 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 0, 0, 23, 23, + 0, 0, 0, 0, 23, 0, 115, 115, 115, 0, + 23, 0, 23, 23, 23, 23, 23, 0, 23, 23, + 0, 23, 23, 23, 23, 23, 23, 0, 23, 0, + 23, 23, 23, 23, 23, 16, 16, 88, 88, 88, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 117, 117, 0, 0, 0, 0, 0, + 52, 52, 33, 52, 52, 52, 33, 33, 52, 0, + 0, 33, 33, 51, 0, 0, 0, 52, 0, 0, + 0, 16, 16, 33, 0, 33, 33, 33, 52, 33, + 0, 52, 33, 33, 33, 33, 33, 33, 33, 33, + 0, 33, 0, 33, 33, 33, 33, 33, 0, 0, + 51, 0, 0, 33, 51, 51, 51, 51, 51, 0, + 51, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 51, 51, 33, 0, 33, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 0, 51, 33, 41, 41, + 41, 41, 41, 0, 41, 0, 0, 0, 0, 0, + 0, 42, 0, 0, 0, 41, 41, 33, 0, 33, + 33, 0, 0, 0, 0, 0, 51, 51, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, + 41, 33, 42, 42, 42, 42, 42, 0, 42, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, + 42, 33, 0, 33, 33, 0, 0, 0, 0, 0, + 41, 41, 0, 0, 0, 43, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 0, 0, 33, 43, 43, 43, 43, + 43, 0, 43, 0, 42, 42, 0, 0, 0, 0, + 0, 0, 0, 43, 43, 33, 0, 33, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 51, 33, 51, 51, 51, 33, 33, 51, 0, + 0, 33, 33, 0, 0, 0, 0, 51, 43, 0, + 0, 0, 0, 33, 0, 33, 33, 33, 51, 33, + 0, 51, 33, 33, 33, 33, 33, 33, 33, 33, + 0, 33, 0, 33, 33, 33, 33, 33, 43, 43, + 0, 0, 0, 0, 41, 41, 33, 41, 41, 41, + 33, 33, 41, 0, 0, 33, 33, 0, 0, 0, + 0, 41, 0, 0, 0, 0, 0, 33, 0, 33, + 33, 33, 41, 33, 0, 41, 33, 33, 33, 33, + 33, 33, 33, 33, 0, 33, 0, 33, 33, 33, + 33, 33, 0, 0, 0, 0, 0, 0, 42, 42, + 33, 42, 42, 42, 33, 33, 42, 0, 0, 33, + 33, 0, 0, 0, 0, 42, 0, 0, 0, 0, + 0, 33, 0, 33, 33, 33, 42, 33, 0, 42, + 33, 33, 33, 33, 33, 33, 33, 33, 0, 33, + 0, 33, 33, 33, 33, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 43, 33, 43, 43, 43, 33, 33, + 43, 0, 0, 33, 33, 44, 0, 0, 0, 43, + 0, 0, 0, 0, 0, 33, 0, 33, 33, 33, + 43, 33, 0, 43, 33, 33, 33, 33, 33, 33, + 33, 33, 0, 33, 0, 33, 33, 33, 33, 33, + 0, 0, 44, 0, 0, 33, 44, 44, 44, 44, + 44, 0, 44, 0, 0, 0, 0, 0, 0, 36, + 0, 0, 0, 44, 44, 33, 0, 33, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 44, 36, + 36, 36, 36, 36, 36, 0, 36, 0, 0, 0, + 0, 0, 0, 0, 35, 0, 0, 36, 36, 36, + 0, 36, 36, 0, 0, 0, 0, 0, 44, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 36, 36, 35, 35, 35, 35, 35, 35, + 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 35, 35, 35, 0, 35, 0, 0, 0, + 0, 0, 36, 36, 0, 0, 0, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 33, 39, 0, + 39, 39, 39, 0, 0, 0, 0, 35, 35, 0, + 0, 0, 0, 0, 0, 39, 39, 33, 0, 33, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 44, 44, 33, 44, 44, 44, 33, 33, + 44, 0, 0, 33, 33, 0, 0, 0, 0, 44, + 39, 0, 0, 0, 0, 33, 0, 33, 33, 33, + 44, 33, 0, 44, 33, 33, 33, 33, 33, 33, + 33, 33, 0, 33, 0, 33, 33, 33, 33, 33, + 39, 39, 0, 0, 0, 0, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 0, 0, 36, 36, 0, + 0, 0, 0, 36, 0, 0, 0, 0, 0, 36, + 0, 36, 36, 36, 36, 36, 0, 0, 36, 36, + 36, 36, 36, 36, 36, 36, 0, 36, 0, 36, + 0, 0, 36, 36, 0, 0, 0, 0, 0, 0, + 0, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 0, 0, 35, 35, 0, 0, 0, 0, 35, 0, + 0, 0, 0, 0, 35, 14, 35, 35, 35, 35, + 35, 0, 35, 0, 0, 35, 35, 35, 35, 35, + 35, 0, 35, 0, 35, 35, 35, 35, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 0, 14, 0, + 14, 0, 0, 0, 39, 39, 33, 39, 39, 39, + 33, 33, 39, 40, 14, 33, 33, 0, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 33, 0, 33, + 33, 33, 39, 33, 0, 39, 33, 33, 33, 33, + 33, 33, 33, 33, 0, 33, 0, 33, 33, 33, + 33, 33, 0, 33, 40, 0, 40, 40, 40, 0, + 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 40, 40, 33, 0, 33, 33, 0, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 33, 33, 0, 0, 33, 40, 0, 0, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 33, 33, 0, 33, 33, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, + 34, 0, 0, 34, 33, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 0, 0, 34, 34, 33, + 0, 33, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 34, 0, 15, 0, 15, 0, 0, 0, + 0, 0, 14, 14, 14, 14, 14, 14, 14, 14, + 15, 0, 0, 14, 14, 0, 0, 0, 0, 0, + 0, 0, 34, 34, 0, 14, 0, 14, 14, 14, + 14, 14, 0, 0, 0, 0, 14, 14, 14, 14, + 0, 0, 0, 14, 0, 14, 14, 14, 14, 14, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 33, 40, 40, 40, 33, 33, 40, 0, + 0, 33, 33, 35, 15, 0, 27, 40, 28, 0, + 0, 0, 0, 33, 6, 33, 33, 33, 40, 33, + 0, 40, 33, 33, 33, 33, 33, 33, 33, 33, + 0, 33, 0, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 0, 0, 33, + 33, 0, 0, 0, 6, 0, 0, 6, 0, 6, + 0, 33, 0, 33, 33, 33, 33, 33, 0, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 0, 33, + 0, 33, 33, 33, 33, 33, 34, 34, 33, 34, + 34, 34, 33, 33, 34, 0, 0, 33, 33, 0, + 35, 103, 0, 27, 0, 28, 0, 0, 0, 33, + 0, 33, 33, 33, 34, 33, 0, 34, 33, 33, + 33, 33, 33, 33, 33, 33, 0, 33, 0, 33, + 33, 33, 33, 33, 0, 0, 0, 6, 15, 15, + 15, 15, 15, 15, 15, 15, 12, 0, 0, 15, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 15, 15, 15, 15, 15, 0, 0, + 0, 0, 15, 15, 15, 15, 0, 0, 0, 15, + 0, 15, 15, 15, 15, 15, 12, 0, 0, 12, + 0, 12, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 123, 124, 12, 13, 0, 0, + 0, 14, 15, 0, 7, 0, 0, 7, 0, 7, + 0, 0, 0, 16, 5, 17, 18, 19, 0, 21, + 0, 0, 0, 7, 22, 23, 24, 25, 0, 0, + 0, 26, 0, 29, 30, 31, 32, 33, 0, 12, + 0, 6, 6, 6, 0, 0, 0, 6, 6, 0, + 0, 0, 6, 6, 5, 0, 0, 5, 0, 5, + 0, 0, 0, 2, 6, 0, 6, 6, 6, 6, + 6, 0, 0, 0, 0, 6, 6, 6, 6, 0, + 0, 0, 6, 0, 6, 6, 6, 6, 6, 11, + 0, 0, 0, 12, 13, 0, 0, 0, 14, 15, + 0, 0, 0, 2, 0, 0, 2, 0, 2, 0, + 16, 0, 17, 18, 19, 0, 21, 0, 0, 0, + 0, 22, 23, 24, 25, 0, 0, 0, 26, 0, + 29, 30, 31, 32, 33, 0, 0, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 12, 12, 12, 0, 12, 12, + 12, 0, 0, 0, 12, 12, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 0, 12, 12, + 12, 12, 12, 0, 0, 0, 0, 12, 12, 12, + 12, 0, 0, 0, 12, 0, 12, 12, 12, 12, + 12, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 7, 7, 7, 0, + 0, 0, 7, 0, 7, 7, 7, 7, 7, 0, + 0, 5, 5, 5, 0, 0, 0, 5, 5, 0, + 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 0, 5, 5, 5, 5, + 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, + 0, 0, 5, 0, 5, 5, 5, 5, 5, 0, + 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, + 0, 2, 2, 58, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, + 0, 2, 0, 2, 2, 2, 2, 2, 0, 0, + 58, 0, 0, 58, 58, 58, 58, 58, 58, 0, + 58, 0, 0, 0, 0, 0, 0, 0, 54, 0, + 0, 58, 58, 58, 0, 58, 58, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 58, 58, 54, 54, + 54, 54, 54, 54, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 58, 54, 54, 0, 0, + 54, 54, 0, 0, 0, 0, 58, 58, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 54, 0, 0, 0, 0, 56, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 54, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 0, 0, 56, 56, + 0, 56, 0, 0, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 56, 56, 56, 0, 56, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 56, 0, 0, 0, 0, 0, 0, 0, 0, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 56, + 0, 58, 58, 0, 0, 0, 0, 58, 0, 0, + 56, 56, 0, 58, 0, 58, 58, 58, 58, 58, + 0, 58, 58, 58, 58, 0, 58, 58, 58, 58, + 0, 58, 0, 58, 58, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 0, 0, 54, 54, 54, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, + 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, + 0, 54, 54, 54, 54, 0, 54, 0, 54, 54, + 54, 0, 0, 104, 54, 106, 0, 0, 0, 0, + 110, 111, 0, 114, 116, 117, 0, 54, 54, 121, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 132, 0, 0, 0, 137, + 138, 139, 140, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 56, 0, 56, 56, 56, + 0, 0, 56, 0, 0, 0, 158, 0, 0, 0, + 0, 56, 54, 0, 0, 0, 0, 0, 0, 186, + 0, 0, 56, 0, 0, 56, 16, 16, 56, 56, + 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 186, 0, 0, 0, 197, + 198, 0, 0, 200, 201, 202, 203, 205, 0, 0, + 0, 0, 207, 208, 0, 54, 54, 0, 0, 0, + 215, 0, 0, 0, 216, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 186, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, + 0, 186, 0, 25, 0, 0, 27, 25, 25, 0, + 25, 0, 0, 25, 264, 0, 265, 0, 266, 0, + 267, 0, 268, 0, 25, 25, 25, 270, 25, 16, + 0, 0, 271, 272, 0, 0, 0, 0, 0, 0, + 54, 186, 0, 27, 0, 0, 0, 27, 27, 0, + 27, 0, 0, 27, 26, 0, 0, 0, 0, 25, + 25, 0, 0, 0, 27, 27, 27, 0, 27, 16, + 0, 0, 186, 186, 186, 186, 0, 0, 25, 0, + 186, 0, 0, 0, 0, 186, 0, 0, 0, 25, + 25, 26, 186, 186, 57, 26, 26, 186, 26, 27, + 27, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 26, 26, 0, 26, 16, 27, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 27, 57, 0, 0, 0, 57, 57, 0, 57, 0, + 0, 57, 0, 0, 0, 0, 0, 26, 26, 0, + 0, 0, 57, 57, 57, 0, 57, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 26, 35, + 0, 0, 27, 0, 28, 0, 0, 57, 57, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, + 0, 88, 0, 0, 0, 0, 57, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 57, 57, 0, + 0, 0, 0, 25, 25, 0, 25, 25, 25, 0, + 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 0, 0, 25, 16, 16, 25, 25, 25, + 25, 25, 25, 27, 27, 0, 27, 27, 27, 0, + 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 0, 0, 27, 16, 16, 27, 27, 27, + 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 26, 0, 26, 26, 26, 0, 0, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, + 0, 0, 0, 88, 0, 0, 0, 0, 0, 26, + 0, 0, 26, 16, 16, 26, 26, 26, 26, 26, + 26, 57, 57, 0, 57, 57, 57, 0, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, + 88, 0, 0, 29, 88, 88, 0, 88, 0, 57, + 88, 0, 57, 16, 16, 57, 57, 57, 57, 57, + 57, 88, 88, 88, 0, 88, 88, 0, 11, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, + 29, 0, 0, 0, 29, 29, 0, 29, 16, 16, + 29, 17, 18, 19, 0, 21, 88, 88, 0, 0, + 0, 29, 29, 0, 0, 86, 16, 26, 0, 29, + 30, 31, 32, 33, 0, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 88, 88, 89, 16, + 16, 0, 16, 0, 0, 16, 29, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, + 0, 16, 0, 0, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89, 29, 29, 0, 89, + 89, 0, 89, 90, 0, 89, 0, 0, 0, 0, + 0, 16, 16, 0, 0, 0, 89, 89, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 16, 16, 0, 90, 90, 0, 90, 0, 0, + 90, 89, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 90, 0, 0, 0, 16, 0, 0, 0, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 89, 0, 35, 231, 0, 27, 232, 28, + 88, 88, 0, 88, 88, 88, 90, 90, 88, 0, + 0, 0, 0, 0, 87, 0, 88, 88, 0, 0, + 0, 0, 0, 0, 0, 90, 0, 0, 88, 0, + 0, 88, 88, 88, 0, 0, 90, 90, 88, 88, + 29, 29, 0, 29, 29, 29, 0, 0, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, + 35, 0, 0, 27, 0, 28, 0, 0, 29, 0, + 0, 29, 16, 16, 29, 29, 29, 29, 29, 185, + 0, 0, 0, 0, 0, 16, 16, 0, 16, 16, + 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 16, 16, 16, 0, + 0, 0, 0, 0, 0, 89, 89, 0, 89, 89, + 89, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 20, 0, 89, 183, 20, 20, 0, 20, 86, 0, + 20, 0, 0, 89, 0, 0, 89, 16, 16, 0, + 0, 20, 20, 0, 0, 0, 16, 0, 0, 0, + 90, 90, 0, 90, 90, 90, 0, 0, 90, 0, + 0, 0, 0, 0, 0, 86, 0, 90, 0, 86, + 86, 0, 0, 0, 0, 86, 20, 20, 90, 0, + 0, 90, 16, 16, 0, 0, 86, 86, 0, 0, + 0, 16, 0, 11, 0, 20, 0, 12, 13, 0, + 0, 0, 14, 15, 0, 110, 20, 20, 110, 0, + 110, 0, 0, 0, 16, 0, 17, 18, 19, 0, + 21, 86, 86, 0, 110, 22, 23, 24, 25, 85, + 86, 0, 26, 0, 29, 30, 31, 32, 33, 0, + 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 86, 0, 0, 0, 0, 0, 0, 11, + 170, 123, 124, 12, 13, 0, 171, 172, 14, 15, + 173, 0, 174, 175, 0, 176, 177, 178, 179, 180, + 16, 181, 17, 18, 19, 0, 21, 182, 110, 0, + 110, 22, 23, 24, 25, 0, 0, 0, 26, 0, + 29, 30, 31, 32, 33, 0, 0, 0, 0, 109, + 0, 0, 109, 0, 109, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 20, 20, 0, 20, 20, 20, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, + 0, 20, 16, 16, 0, 0, 0, 103, 0, 0, + 103, 0, 103, 0, 0, 86, 86, 0, 86, 86, + 86, 0, 109, 86, 109, 0, 103, 0, 0, 0, + 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 86, 0, 0, 86, 16, 16, 0, + 0, 0, 0, 0, 110, 110, 0, 0, 110, 110, + 0, 110, 110, 110, 110, 110, 110, 110, 110, 0, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 0, 110, 110, 0, 0, 0, 110, 110, 110, 110, + 103, 0, 103, 110, 0, 110, 110, 110, 110, 110, + 0, 0, 0, 0, 104, 0, 0, 104, 0, 104, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 0, 0, 27, 0, 28, 109, 109, + 0, 0, 109, 109, 0, 109, 109, 109, 109, 109, + 109, 109, 109, 0, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 0, 109, 109, 104, 0, 104, + 109, 109, 109, 109, 0, 0, 0, 109, 0, 109, + 109, 109, 109, 109, 105, 0, 0, 105, 0, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 103, 103, 0, 0, + 103, 103, 0, 103, 103, 103, 103, 103, 103, 103, + 103, 0, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 0, 103, 103, 0, 0, 0, 103, 103, + 103, 103, 0, 0, 0, 103, 0, 103, 103, 103, + 103, 103, 0, 0, 0, 0, 102, 0, 0, 102, + 0, 102, 0, 0, 0, 0, 0, 105, 0, 105, + 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 104, 104, 0, 0, 104, 104, 0, + 104, 104, 104, 104, 104, 104, 104, 104, 0, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, + 104, 104, 0, 0, 0, 104, 104, 104, 104, 102, + 0, 102, 104, 0, 104, 104, 104, 104, 104, 108, + 0, 11, 108, 0, 108, 12, 13, 0, 0, 0, + 14, 15, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, + 0, 0, 0, 22, 23, 24, 25, 0, 0, 0, + 26, 0, 29, 30, 31, 32, 33, 35, 0, 0, + 27, 0, 28, 105, 105, 0, 0, 105, 105, 0, + 105, 105, 105, 105, 105, 105, 105, 105, 0, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, + 105, 105, 108, 0, 108, 105, 105, 105, 105, 0, + 0, 0, 105, 0, 105, 105, 105, 105, 105, 137, + 0, 0, 137, 0, 137, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, + 0, 0, 0, 0, 0, 102, 102, 0, 0, 102, + 102, 0, 102, 102, 102, 102, 102, 102, 102, 102, + 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 0, 102, 102, 0, 0, 0, 102, 102, 102, + 102, 0, 0, 0, 102, 0, 102, 102, 102, 102, + 102, 35, 0, 0, 27, 0, 28, 0, 0, 0, + 0, 0, 137, 0, 137, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, + 0, 0, 108, 108, 0, 108, 108, 108, 108, 108, + 108, 108, 108, 0, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 0, 108, 108, 0, 0, 0, + 108, 108, 108, 108, 183, 0, 184, 108, 0, 108, + 108, 108, 108, 108, 35, 0, 11, 27, 0, 28, + 12, 13, 0, 0, 0, 14, 15, 0, 0, 0, + 0, 0, 0, 185, 0, 0, 0, 16, 0, 17, + 18, 19, 0, 21, 0, 0, 0, 0, 22, 23, + 24, 25, 0, 0, 0, 26, 0, 29, 30, 31, + 32, 33, 35, 0, 0, 27, 0, 28, 137, 137, + 0, 0, 137, 137, 0, 137, 137, 137, 137, 137, + 137, 137, 137, 0, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 0, 137, 137, 183, 0, 195, + 137, 137, 137, 137, 0, 0, 0, 137, 0, 137, + 137, 137, 137, 137, 35, 0, 0, 27, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, + 11, 170, 0, 0, 12, 13, 0, 171, 172, 14, + 15, 173, 0, 174, 175, 0, 176, 177, 178, 179, + 180, 16, 181, 17, 18, 19, 0, 21, 182, 0, + 0, 0, 22, 23, 24, 25, 0, 0, 0, 26, + 0, 29, 30, 31, 32, 33, 35, 0, 0, 27, + 0, 28, 0, 0, 0, 0, 0, 183, 0, 196, + 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 11, 170, 0, 0, 12, 13, 0, + 171, 172, 14, 15, 173, 0, 174, 175, 0, 176, + 177, 178, 179, 180, 16, 181, 17, 18, 19, 0, + 21, 182, 0, 0, 0, 22, 23, 24, 25, 183, + 0, 226, 26, 0, 29, 30, 31, 32, 33, 35, + 0, 113, 27, 0, 28, 12, 13, 0, 0, 0, + 14, 15, 0, 0, 0, 0, 0, 0, 185, 0, + 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, + 0, 0, 0, 22, 23, 24, 25, 0, 0, 0, + 26, 0, 29, 30, 31, 32, 33, 0, 0, 0, + 0, 0, 0, 11, 170, 0, 0, 12, 13, 0, + 171, 172, 14, 15, 173, 0, 174, 175, 0, 176, + 177, 178, 179, 180, 16, 181, 17, 18, 19, 0, + 21, 182, 183, 0, 279, 22, 23, 24, 25, 0, + 0, 0, 26, 0, 29, 30, 31, 32, 33, 35, + 0, 0, 27, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, + 0, 0, 0, 0, 0, 11, 170, 0, 0, 12, + 13, 0, 171, 172, 14, 15, 173, 0, 174, 175, + 0, 176, 177, 178, 179, 180, 16, 181, 17, 18, + 19, 0, 21, 182, 0, 0, 0, 22, 23, 24, + 25, 0, 0, 0, 26, 0, 29, 30, 31, 32, + 33, 107, 0, 0, 107, 0, 107, 0, 0, 0, + 0, 0, 183, 0, 303, 0, 0, 0, 0, 0, + 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11, 170, + 0, 0, 12, 13, 0, 171, 172, 14, 15, 173, + 0, 174, 175, 0, 176, 177, 178, 179, 180, 16, + 181, 17, 18, 19, 0, 21, 182, 0, 0, 0, + 22, 23, 24, 25, 107, 0, 107, 26, 0, 29, + 30, 31, 32, 33, 130, 0, 0, 130, 0, 130, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 27, 0, 28, 0, 0, 11, 170, + 0, 0, 12, 13, 0, 171, 172, 14, 15, 173, + 0, 174, 175, 0, 176, 177, 178, 179, 180, 16, + 181, 17, 18, 19, 0, 21, 182, 130, 0, 130, + 22, 23, 24, 25, 0, 0, 0, 26, 0, 29, + 30, 31, 32, 33, 35, 233, 0, 27, 234, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, + 107, 107, 0, 0, 107, 107, 0, 107, 107, 107, + 107, 107, 0, 107, 107, 0, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 0, 107, 107, 0, + 0, 0, 107, 107, 107, 107, 0, 0, 0, 107, + 0, 107, 107, 107, 107, 107, 35, 235, 0, 27, + 236, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 87, 0, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 130, 130, 0, 0, 130, 130, 0, + 130, 130, 130, 130, 130, 0, 130, 130, 0, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 0, + 130, 130, 0, 0, 0, 130, 130, 130, 130, 0, + 0, 0, 130, 0, 130, 130, 130, 130, 130, 11, + 0, 0, 0, 12, 13, 0, 171, 172, 14, 15, + 0, 0, 0, 0, 0, 176, 177, 178, 179, 180, + 16, 0, 17, 18, 19, 0, 21, 182, 0, 0, + 0, 22, 23, 24, 25, 0, 0, 0, 26, 0, + 29, 30, 31, 32, 33, 35, 237, 0, 27, 238, + 28, 0, 0, 11, 0, 0, 0, 12, 13, 0, + 0, 0, 14, 15, 0, 87, 0, 88, 0, 0, + 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, + 21, 0, 0, 0, 0, 22, 23, 24, 25, 85, + 86, 0, 26, 0, 29, 30, 31, 32, 33, 35, + 242, 0, 27, 243, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, + 0, 88, 0, 0, 0, 11, 0, 0, 0, 12, + 13, 0, 0, 0, 14, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 17, 18, + 19, 35, 21, 0, 27, 108, 28, 22, 23, 24, + 25, 85, 86, 0, 26, 0, 29, 30, 31, 32, + 33, 87, 0, 88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 152, 0, + 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 35, 0, 0, 27, 157, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 87, 11, 88, 0, 0, 12, 13, + 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 18, 19, + 35, 21, 0, 27, 160, 28, 22, 23, 24, 25, + 85, 86, 0, 26, 0, 29, 30, 31, 32, 33, + 87, 0, 88, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 17, 18, 19, 35, 21, 0, 27, 162, 28, + 22, 23, 24, 25, 85, 86, 0, 26, 0, 29, + 30, 31, 32, 33, 87, 0, 88, 0, 0, 0, + 11, 0, 0, 0, 12, 13, 0, 0, 0, 14, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, + 0, 0, 22, 23, 24, 25, 85, 86, 0, 26, + 0, 29, 30, 31, 32, 33, 11, 0, 0, 0, + 12, 13, 0, 0, 35, 14, 15, 27, 163, 28, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, + 18, 19, 0, 21, 87, 0, 88, 0, 22, 23, + 24, 25, 85, 86, 0, 26, 0, 29, 30, 31, + 32, 33, 11, 0, 0, 0, 12, 13, 0, 0, + 35, 14, 15, 27, 168, 28, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 17, 18, 19, 0, 21, + 87, 0, 88, 0, 22, 23, 24, 25, 85, 86, + 0, 26, 0, 29, 30, 31, 32, 33, 0, 11, + 0, 0, 0, 12, 13, 0, 0, 35, 14, 15, + 27, 169, 28, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 17, 18, 19, 0, 21, 87, 0, 88, + 0, 22, 23, 24, 25, 85, 86, 0, 26, 0, + 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, + 0, 0, 0, 11, 0, 0, 0, 12, 13, 0, + 0, 35, 14, 15, 27, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 17, 18, 19, 191, + 21, 87, 0, 88, 0, 22, 23, 24, 25, 85, + 86, 0, 26, 0, 29, 30, 31, 32, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 240, 0, + 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, + 0, 0, 0, 11, 0, 0, 0, 12, 13, 0, + 0, 0, 14, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, + 21, 0, 0, 0, 0, 22, 23, 24, 25, 85, + 86, 0, 26, 0, 29, 30, 31, 32, 33, 11, + 0, 0, 0, 12, 13, 0, 0, 0, 14, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 17, 18, 19, 0, 21, 0, 0, 0, + 0, 22, 23, 24, 25, 85, 86, 0, 26, 0, + 29, 30, 31, 32, 33, 0, 11, 0, 0, 0, + 12, 13, 0, 0, 0, 14, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, + 18, 19, 0, 21, 0, 0, 0, 0, 22, 23, + 24, 25, 85, 86, 0, 26, 0, 29, 30, 31, + 32, 33, 35, 244, 0, 27, 0, 28, 0, 0, + 11, 0, 0, 0, 12, 13, 0, 0, 0, 14, + 15, 0, 87, 0, 88, 0, 0, 0, 0, 0, + 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, + 0, 0, 22, 23, 24, 25, 85, 86, 0, 26, + 0, 29, 30, 31, 32, 33, 11, 0, 0, 0, + 12, 13, 0, 0, 0, 14, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, + 18, 19, 0, 21, 0, 0, 0, 0, 22, 23, + 24, 25, 85, 86, 0, 26, 0, 29, 30, 31, + 32, 33, 35, 275, 0, 27, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 87, 0, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 281, + 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 35, 282, 0, 27, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 0, 88, 0, 0, 0, + 0, 11, 0, 0, 0, 12, 13, 0, 0, 0, + 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, + 0, 0, 0, 22, 23, 24, 25, 85, 86, 0, + 26, 0, 29, 30, 31, 32, 33, 35, 283, 0, + 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 87, 0, 88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 35, 284, 0, 27, 0, 28, 0, + 0, 11, 0, 0, 0, 12, 13, 0, 0, 0, + 14, 15, 0, 87, 0, 88, 0, 0, 0, 0, + 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, + 0, 0, 0, 22, 23, 24, 25, 85, 86, 0, + 26, 0, 29, 30, 31, 32, 33, 11, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 15, 35, 0, + 0, 27, 0, 28, 0, 0, 0, 0, 16, 0, + 17, 18, 19, 0, 21, 0, 0, 0, 0, 22, + 23, 24, 25, 85, 86, 0, 26, 0, 29, 30, + 31, 32, 33, 11, 0, 0, 0, 12, 13, 0, + 0, 0, 14, 15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, + 21, 0, 0, 0, 0, 22, 23, 24, 25, 85, + 86, 0, 26, 0, 29, 30, 31, 32, 33, 35, + 285, 34, 27, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, + 0, 88, 0, 0, 0, 0, 11, 0, 0, 0, + 12, 13, 0, 0, 0, 14, 15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, + 18, 19, 35, 21, 0, 27, 0, 28, 22, 23, + 24, 25, 85, 86, 0, 26, 0, 29, 30, 31, + 32, 33, 11, 0, 0, 0, 12, 13, 0, 0, + 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 17, 18, 19, 0, 21, + 0, 0, 0, 0, 22, 23, 24, 25, 85, 86, + 0, 26, 0, 29, 30, 31, 32, 33, 35, 287, + 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 10, 11, 87, 0, + 88, 12, 13, 0, 0, 0, 14, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 17, 18, 19, 20, 21, 0, 0, 0, 0, 22, + 23, 24, 25, 0, 0, 0, 26, 0, 29, 30, + 31, 32, 33, 35, 0, 0, 27, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 87, 0, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 35, + 0, 0, 27, 0, 28, 0, 0, 0, 0, 16, + 0, 17, 18, 19, 0, 21, 0, 0, 291, 0, + 22, 23, 24, 25, 85, 86, 0, 26, 0, 29, + 30, 31, 32, 33, 0, 0, 0, 0, 0, 0, + 0, 115, 0, 0, 0, 12, 13, 0, 0, 35, + 14, 15, 27, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, + 0, 0, 0, 22, 23, 24, 25, 0, 0, 0, + 26, 0, 29, 30, 31, 32, 33, 0, 0, 0, + 0, 0, 0, 0, 0, 35, 0, 0, 27, 0, + 28, 0, 0, 0, 0, 0, 0, 11, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 17, 18, 19, 0, 21, 0, 0, 0, 0, 22, + 23, 24, 25, 85, 86, 0, 26, 0, 29, 30, + 31, 32, 33, 35, 0, 0, 27, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 12, 13, 0, 0, + 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 17, 18, 19, 0, 21, + 0, 0, 0, 0, 22, 23, 24, 25, 85, 86, + 0, 26, 0, 29, 30, 31, 32, 33, 11, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 17, 18, 19, 0, 21, 0, 0, 0, 0, + 22, 23, 24, 25, 0, 0, 0, 26, 0, 29, + 30, 31, 32, 33, 0, 0, 0, 0, 136, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 17, 18, 19, 0, 21, 0, 0, 0, 0, + 22, 23, 24, 25, 0, 0, 0, 26, 0, 29, + 30, 31, 32, 33, 204, 0, 0, 0, 12, 13, + 0, 0, 0, 14, 15, 0, 0, 101, 102, 0, + 0, 0, 0, 0, 0, 16, 0, 17, 18, 19, + 0, 21, 0, 0, 0, 0, 22, 23, 24, 25, + 0, 0, 0, 26, 0, 29, 30, 31, 32, 33, + 131, 0, 133, 134, 0, 0, 0, 0, 0, 0, + 0, 0, 263, 0, 0, 0, 12, 13, 0, 0, + 0, 14, 15, 0, 0, 0, 0, 0, 155, 156, + 0, 0, 0, 16, 0, 17, 18, 19, 0, 21, + 0, 0, 0, 0, 22, 23, 24, 25, 0, 0, + 0, 26, 0, 29, 30, 31, 32, 33, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, + 68, 0, 0, 0, 0, 72, 0, 0, 0, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 209, 0, 0, 0, 0, 0, 89, 0, 0, 0, + 0, 217, 0, 219, 0, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, + 0, 0, 0, 142, 143, 144, 145, 146, 147, 0, + 0, 258, 259, 260, 261, 262, 89, 0, 89, 0, + 0, 0, 89, 89, 0, 0, 89, 0, 89, 89, + 0, 0, 0, 89, 89, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 0, 0, 0, 0, 89, + 89, 89, 89, 0, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 288, 289, 290, 0, 0, 0, 295, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 308, 309, 0, 0, 89, 0, + 313, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 89, 0, 89, 89, 89, 89, 0, 89, 0, 89, + 89, 0, 0, 0, 0, 0, 0, 89, 89, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 89, 89, 89, + 89, 0, 89, 89, 89, +}; +short yycheck[] = { 41, + 0, 123, 62, 123, 41, 59, 41, 59, 214, 63, + 59, 63, 123, 63, 59, 63, 94, 59, 50, 38, + 35, 63, 35, 291, 41, 286, 63, 41, 63, 91, + 41, 63, 64, 301, 112, 40, 51, 37, 51, 7, + 40, 41, 42, 43, 44, 45, 63, 47, 59, 63, + 35, 41, 63, 41, 44, 0, 44, 41, 58, 59, + 60, 29, 62, 63, 124, 44, 51, 35, 261, 262, + 37, 40, 261, 60, 288, 42, 43, 40, 45, 63, + 47, 101, 102, 51, 63, 291, 118, 301, 302, 60, + 40, 16, 37, 93, 94, 301, 41, 42, 43, 44, + 45, 63, 47, 40, 63, 30, 31, 40, 292, 40, + 0, 131, 112, 58, 59, 60, 84, 62, 63, 303, + 304, 40, 40, 123, 124, 123, 40, 94, 44, 112, + 98, 41, 41, 37, 63, 41, 63, 292, 42, 171, + 172, 261, 262, 47, 280, 112, 41, 37, 93, 94, + 40, 41, 42, 43, 41, 45, 44, 47, 44, 93, + 292, 41, 41, 40, 40, 133, 134, 112, 58, 59, + 60, 40, 62, 63, 292, 290, 195, 41, 123, 124, + 59, 59, 272, 91, 41, 40, 93, 271, 41, 41, + 94, 0, 41, 93, 59, 41, -1, 51, -1, 219, + -1, 211, -1, 93, 94, 265, -1, -1, 112, 41, + -1, 260, 261, 262, -1, 260, 261, 262, 260, 261, + 262, -1, 112, 148, 256, 40, -1, 59, 43, -1, + 45, 63, -1, 123, 124, 289, 290, 289, 290, 289, + 290, 289, 290, -1, 212, 213, -1, 289, 290, 260, + 261, 262, 289, 290, 289, 290, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 286, -1, 268, 269, + -1, -1, 289, 290, 274, 289, 290, -1, 289, 290, + 280, 41, 282, 283, 284, 285, 286, -1, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, 298, 59, + 300, 301, 302, 303, 304, 289, 290, 274, 276, -1, + 289, 290, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 292, -1, 268, 269, 293, -1, 289, 290, 274, + 289, 290, 303, 304, -1, 280, 41, 282, 283, 284, + 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, 298, 59, 300, 301, 302, 303, 304, + 289, 290, 289, 290, -1, -1, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, + 0, 260, 261, 262, 274, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, 285, 286, 41, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, 298, -1, + 300, 301, 302, 303, 304, 59, -1, 37, -1, -1, + 40, 41, 42, 43, 44, 45, -1, 47, 260, 261, + 262, -1, -1, -1, -1, 0, -1, -1, 58, 59, + -1, -1, 62, 63, 259, -1, -1, 217, 263, 264, + -1, -1, -1, 268, 269, -1, -1, 289, 290, -1, + -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, + -1, 286, 37, 93, 94, 40, 41, 42, 43, 44, + 45, -1, 47, 298, -1, 300, 301, 302, 303, 304, + 0, -1, 112, 58, 59, 60, -1, 62, 63, -1, + 260, 261, 262, 123, 124, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 288, 289, + 290, -1, -1, -1, -1, -1, -1, 37, 93, 94, + 40, 41, 42, 43, 44, 45, -1, 47, 308, 309, + -1, -1, -1, 313, -1, -1, -1, 41, 58, 59, + 60, -1, 62, 63, -1, 260, 261, 262, 123, 124, + -1, -1, -1, 0, -1, 59, -1, -1, -1, 63, + -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, + -1, -1, -1, 93, 94, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, -1, 59, -1, -1, 62, + 37, -1, 112, 40, 41, 42, 43, 44, 45, -1, + 47, 59, -1, 123, 124, 63, 260, 261, 262, -1, + -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, + -1, -1, -1, -1, 274, -1, 93, -1, -1, -1, + 280, 124, 282, 283, 284, 285, 286, -1, 288, 289, + 290, 291, 292, 293, 294, 295, 296, -1, 298, -1, + 300, 301, 302, 303, 304, -1, 123, 124, -1, -1, + -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, 269, -1, -1, -1, -1, 274, + -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, + 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, + -1, -1, -1, -1, 274, -1, 260, 261, 262, -1, + 280, -1, 282, 283, 284, 285, 286, -1, 288, 289, + -1, 291, 292, 293, 294, 295, 296, -1, 298, -1, + 300, 301, 302, 303, 304, 289, 290, 260, 261, 262, + -1, -1, 265, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 260, 261, 262, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, + -1, 268, 269, 0, -1, -1, -1, 274, -1, -1, + -1, 289, 290, 280, -1, 282, 283, 284, 285, 286, + -1, 288, 289, 290, 291, 292, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, 303, 304, -1, -1, + 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, + 47, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37, -1, 93, 40, 41, 42, + 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, 58, 59, 60, -1, 62, + 63, -1, -1, -1, -1, -1, 123, 124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, + 93, 40, 41, 42, 43, 44, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, + 123, 124, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, + 45, -1, 47, -1, 123, 124, -1, -1, -1, -1, + -1, -1, -1, 58, 59, 60, -1, 62, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, + -1, 268, 269, -1, -1, -1, -1, 274, 93, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, 288, 289, 290, 291, 292, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, 303, 304, 123, 124, + -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, + 263, 264, 265, -1, -1, 268, 269, -1, -1, -1, + -1, 274, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, + 303, 304, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, + 269, -1, -1, -1, -1, 274, -1, -1, -1, -1, + -1, 280, -1, 282, 283, 284, 285, 286, -1, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, 298, + -1, 300, 301, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, 269, 0, -1, -1, -1, 274, + -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, + 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, + -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, + 45, -1, 47, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, 58, 59, 60, -1, 62, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 37, -1, 93, 40, + 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, 58, 59, 60, + -1, 62, 63, -1, -1, -1, -1, -1, 123, 124, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 93, 94, 40, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 112, 58, 59, 60, -1, 62, -1, -1, -1, + -1, -1, 123, 124, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, 94, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 112, 40, 41, -1, + 43, 44, 45, -1, -1, -1, -1, 123, 124, -1, + -1, -1, -1, -1, -1, 58, 59, 60, -1, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, 269, -1, -1, -1, -1, 274, + 93, -1, -1, -1, -1, 280, -1, 282, 283, 284, + 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, + 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, + 123, 124, -1, -1, -1, -1, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, -1, 268, 269, -1, + -1, -1, -1, 274, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, -1, 289, 290, + 291, 292, 293, 294, 295, 296, -1, 298, -1, 300, + -1, -1, 303, 304, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, -1, 268, 269, -1, -1, -1, -1, 274, -1, + -1, -1, -1, -1, 280, 0, 282, 283, 284, 285, + 286, -1, 288, -1, -1, 291, 292, 293, 294, 295, + 296, -1, 298, -1, 300, 301, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, + 45, -1, -1, -1, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 0, 59, 268, 269, -1, -1, -1, + -1, 274, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, + 303, 304, -1, 40, 41, -1, 43, 44, 45, -1, + -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, 60, -1, 62, 63, -1, 123, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 40, 41, -1, -1, 44, 93, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 123, 124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, + 41, -1, -1, 44, 93, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, -1, 58, 59, 60, + -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 123, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 40, 93, -1, 43, -1, 45, -1, -1, -1, + -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 59, -1, -1, 268, 269, -1, -1, -1, -1, -1, + -1, -1, 123, 124, -1, 280, -1, 282, 283, 284, + 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, + -1, -1, -1, 298, -1, 300, 301, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, + -1, 268, 269, 40, 123, -1, 43, 274, 45, -1, + -1, -1, -1, 280, 0, 282, 283, 284, 285, 286, + -1, 288, 289, 290, 291, 292, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, 303, 304, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, + 269, -1, -1, -1, 40, -1, -1, 43, -1, 45, + -1, 280, -1, 282, 283, 284, 285, 286, -1, 288, + 289, 290, 291, 292, 293, 294, 295, 296, -1, 298, + -1, 300, 301, 302, 303, 304, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, -1, 268, 269, -1, + 40, 41, -1, 43, -1, 45, -1, -1, -1, 280, + -1, 282, 283, 284, 285, 286, -1, 288, 289, 290, + 291, 292, 293, 294, 295, 296, -1, 298, -1, 300, + 301, 302, 303, 304, -1, -1, -1, 123, 257, 258, + 259, 260, 261, 262, 263, 264, 0, -1, -1, 268, + 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, + -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, + -1, 300, 301, 302, 303, 304, 40, -1, -1, 43, + -1, 45, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 259, -1, 261, 262, 263, 264, -1, -1, + -1, 268, 269, -1, 40, -1, -1, 43, -1, 45, + -1, -1, -1, 280, 0, 282, 283, 284, -1, 286, + -1, -1, -1, 59, 291, 292, 293, 294, -1, -1, + -1, 298, -1, 300, 301, 302, 303, 304, -1, 123, + -1, 257, 258, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, 40, -1, -1, 43, -1, 45, + -1, -1, -1, 0, 280, -1, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, + -1, -1, 298, -1, 300, 301, 302, 303, 304, 259, + -1, -1, -1, 263, 264, -1, -1, -1, 268, 269, + -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, + 280, -1, 282, 283, 284, -1, 286, -1, -1, -1, + -1, 291, 292, 293, 294, -1, -1, -1, 298, -1, + 300, 301, 302, 303, 304, -1, -1, 123, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, 262, 263, + 264, -1, -1, -1, 268, 269, 123, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 285, 286, -1, -1, -1, -1, 291, 292, 293, + 294, -1, -1, -1, 298, -1, 300, 301, 302, 303, + 304, 257, 258, 259, 260, 261, 262, 263, 264, -1, + -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, + -1, -1, 298, -1, 300, 301, 302, 303, 304, -1, + -1, 257, 258, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, 285, + 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, + -1, -1, 298, -1, 300, 301, 302, 303, 304, -1, + 257, 258, 259, -1, -1, -1, 263, 264, -1, -1, + -1, 268, 269, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, + -1, -1, -1, -1, 291, 292, 293, 294, -1, -1, + -1, 298, -1, 300, 301, 302, 303, 304, -1, -1, + 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, + 47, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 37, 93, 94, 40, 41, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 112, 58, 59, -1, -1, + 62, 63, -1, -1, -1, -1, 123, 124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, 94, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 37, -1, -1, -1, 41, 42, + -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, 60, -1, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 112, + -1, 268, 269, -1, -1, -1, -1, 274, -1, -1, + 123, 124, -1, 280, -1, 282, 283, 284, 285, 286, + -1, 288, 289, 290, 291, -1, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, -1, 268, 269, 14, -1, + -1, -1, 274, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, 285, 286, -1, 288, 289, 290, 291, + -1, 293, 294, 295, 296, -1, 298, -1, 300, 301, + 302, -1, -1, 49, 50, 51, -1, -1, -1, -1, + 56, 57, -1, 59, 60, 61, -1, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, -1, 85, + 86, 87, 88, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, -1, 260, 261, 262, + -1, -1, 265, -1, -1, -1, 112, -1, -1, -1, + -1, 274, 118, -1, -1, -1, -1, -1, -1, 125, + -1, -1, 285, -1, -1, 288, 289, 290, 291, 292, + 293, 294, 295, 296, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 150, 151, -1, -1, -1, 155, + 156, -1, -1, 159, 160, 161, 162, 163, -1, -1, + -1, -1, 168, 169, -1, 171, 172, -1, -1, -1, + 176, -1, -1, -1, 180, -1, 0, -1, -1, -1, + -1, -1, -1, -1, 190, 191, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 214, -1, + -1, 217, -1, 37, -1, -1, 0, 41, 42, -1, + 44, -1, -1, 47, 230, -1, 232, -1, 234, -1, + 236, -1, 238, -1, 58, 59, 60, 243, 62, 63, + -1, -1, 248, 249, -1, -1, -1, -1, -1, -1, + 256, 257, -1, 37, -1, -1, -1, 41, 42, -1, + 44, -1, -1, 47, 0, -1, -1, -1, -1, 93, + 94, -1, -1, -1, 58, 59, 60, -1, 62, 63, + -1, -1, 288, 289, 290, 291, -1, -1, 112, -1, + 296, -1, -1, -1, -1, 301, -1, -1, -1, 123, + 124, 37, 308, 309, 0, 41, 42, 313, 44, 93, + 94, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 58, 59, 60, -1, 62, 63, 112, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 123, + 124, 37, -1, -1, -1, 41, 42, -1, 44, -1, + -1, 47, -1, -1, -1, -1, -1, 93, 94, -1, + -1, -1, 58, 59, 60, -1, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, 112, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 123, 124, 40, + -1, -1, 43, -1, 45, -1, -1, 93, 94, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, + -1, 62, -1, -1, -1, -1, 112, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 123, 124, -1, + -1, -1, -1, 257, 258, -1, 260, 261, 262, -1, + -1, 265, -1, -1, -1, -1, -1, -1, -1, -1, + 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 285, -1, -1, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 257, 258, -1, 260, 261, 262, -1, + -1, 265, -1, -1, -1, -1, -1, -1, -1, -1, + 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 285, -1, -1, 288, 289, 290, 291, 292, 293, + 294, 295, 296, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, -1, 260, 261, 262, -1, -1, 265, + -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, 285, + -1, -1, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 257, 258, -1, 260, 261, 262, -1, -1, 265, + -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, + 37, -1, -1, 0, 41, 42, -1, 44, -1, 285, + 47, -1, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 58, 59, 60, -1, 62, 63, -1, 259, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, + 37, -1, -1, -1, 41, 42, -1, 44, 0, 280, + 47, 282, 283, 284, -1, 286, 93, 94, -1, -1, + -1, 58, 59, -1, -1, 296, 63, 298, -1, 300, + 301, 302, 303, 304, -1, 112, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 37, 123, 124, 0, 41, + 42, -1, 44, -1, -1, 47, 93, 94, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, 112, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 37, 123, 124, -1, 41, + 42, -1, 44, 0, -1, 47, -1, -1, -1, -1, + -1, 93, 94, -1, -1, -1, 58, 59, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 37, 123, 124, -1, 41, 42, -1, 44, -1, -1, + 47, 93, 94, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 123, 124, -1, 40, 41, -1, 43, 44, 45, + 257, 258, -1, 260, 261, 262, 93, 94, 265, -1, + -1, -1, -1, -1, 60, -1, 62, 274, -1, -1, + -1, -1, -1, -1, -1, 112, -1, -1, 285, -1, + -1, 288, 289, 290, -1, -1, 123, 124, 295, 296, + 257, 258, -1, 260, 261, 262, -1, -1, 265, -1, + -1, -1, -1, -1, -1, -1, -1, 274, -1, -1, + 40, -1, -1, 43, -1, 45, -1, -1, 285, -1, + -1, 288, 289, 290, 291, 292, 293, 294, 295, 59, + -1, -1, -1, -1, -1, 257, 258, -1, 260, 261, + 262, -1, -1, 265, -1, -1, -1, -1, -1, -1, + -1, -1, 274, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 285, -1, -1, 288, 289, 290, -1, + -1, -1, -1, -1, -1, 257, 258, -1, 260, 261, + 262, -1, -1, 265, -1, -1, -1, -1, -1, -1, + 37, -1, 274, 123, 41, 42, -1, 44, 0, -1, + 47, -1, -1, 285, -1, -1, 288, 289, 290, -1, + -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, + 257, 258, -1, 260, 261, 262, -1, -1, 265, -1, + -1, -1, -1, -1, -1, 37, -1, 274, -1, 41, + 42, -1, -1, -1, -1, 47, 93, 94, 285, -1, + -1, 288, 289, 290, -1, -1, 58, 59, -1, -1, + -1, 63, -1, 259, -1, 112, -1, 263, 264, -1, + -1, -1, 268, 269, -1, 40, 123, 124, 43, -1, + 45, -1, -1, -1, 280, -1, 282, 283, 284, -1, + 286, 93, 94, -1, 59, 291, 292, 293, 294, 295, + 296, -1, 298, -1, 300, 301, 302, 303, 304, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 123, 124, -1, -1, -1, -1, -1, -1, 259, + 260, 261, 262, 263, 264, -1, 266, 267, 268, 269, + 270, -1, 272, 273, -1, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, -1, 286, 287, 123, -1, + 125, 291, 292, 293, 294, -1, -1, -1, 298, -1, + 300, 301, 302, 303, 304, -1, -1, -1, -1, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, -1, 260, 261, 262, -1, -1, 265, -1, + -1, -1, -1, -1, -1, -1, -1, 274, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 285, -1, + -1, 288, 289, 290, -1, -1, -1, 40, -1, -1, + 43, -1, 45, -1, -1, 257, 258, -1, 260, 261, + 262, -1, 123, 265, 125, -1, 59, -1, -1, -1, + -1, -1, 274, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 285, -1, -1, 288, 289, 290, -1, + -1, -1, -1, -1, 259, 260, -1, -1, 263, 264, + -1, 266, 267, 268, 269, 270, 271, 272, 273, -1, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + -1, 286, 287, -1, -1, -1, 291, 292, 293, 294, + 123, -1, 125, 298, -1, 300, 301, 302, 303, 304, + -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 40, -1, -1, 43, -1, 45, 259, 260, + -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, -1, 286, 287, 123, -1, 125, + 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, + 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, 259, 260, -1, -1, + 263, 264, -1, 266, 267, 268, 269, 270, 271, 272, + 273, -1, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, -1, 286, 287, -1, -1, -1, 291, 292, + 293, 294, -1, -1, -1, 298, -1, 300, 301, 302, + 303, 304, -1, -1, -1, -1, 40, -1, -1, 43, + -1, 45, -1, -1, -1, -1, -1, 123, -1, 125, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 259, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, + 286, 287, -1, -1, -1, 291, 292, 293, 294, 123, + -1, 125, 298, -1, 300, 301, 302, 303, 304, 40, + -1, 259, 43, -1, 45, 263, 264, -1, -1, -1, + 268, 269, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, + -1, -1, -1, 291, 292, 293, 294, -1, -1, -1, + 298, -1, 300, 301, 302, 303, 304, 40, -1, -1, + 43, -1, 45, 259, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, + 286, 287, 123, -1, 125, 291, 292, 293, 294, -1, + -1, -1, 298, -1, 300, 301, 302, 303, 304, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, 259, 260, -1, -1, 263, + 264, -1, 266, 267, 268, 269, 270, 271, 272, 273, + -1, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, -1, 286, 287, -1, -1, -1, 291, 292, 293, + 294, -1, -1, -1, 298, -1, 300, 301, 302, 303, + 304, 40, -1, -1, 43, -1, 45, -1, -1, -1, + -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 259, 260, + -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, -1, 286, 287, -1, -1, -1, + 291, 292, 293, 294, 123, -1, 125, 298, -1, 300, + 301, 302, 303, 304, 40, -1, 259, 43, -1, 45, + 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, 280, -1, 282, + 283, 284, -1, 286, -1, -1, -1, -1, 291, 292, + 293, 294, -1, -1, -1, 298, -1, 300, 301, 302, + 303, 304, 40, -1, -1, 43, -1, 45, 259, 260, + -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, + 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, -1, 286, 287, 123, -1, 125, + 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, + 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + 259, 260, -1, -1, 263, 264, -1, 266, 267, 268, + 269, 270, -1, 272, 273, -1, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, + -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, + -1, 300, 301, 302, 303, 304, 40, -1, -1, 43, + -1, 45, -1, -1, -1, -1, -1, 123, -1, 125, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 259, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, -1, 272, 273, -1, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, + 286, 287, -1, -1, -1, 291, 292, 293, 294, 123, + -1, 125, 298, -1, 300, 301, 302, 303, 304, 40, + -1, 259, 43, -1, 45, 263, 264, -1, -1, -1, + 268, 269, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, + -1, -1, -1, 291, 292, 293, 294, -1, -1, -1, + 298, -1, 300, 301, 302, 303, 304, -1, -1, -1, + -1, -1, -1, 259, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, -1, 272, 273, -1, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, + 286, 287, 123, -1, 125, 291, 292, 293, 294, -1, + -1, -1, 298, -1, 300, 301, 302, 303, 304, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, 259, 260, -1, -1, 263, + 264, -1, 266, 267, 268, 269, 270, -1, 272, 273, + -1, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, -1, 286, 287, -1, -1, -1, 291, 292, 293, + 294, -1, -1, -1, 298, -1, 300, 301, 302, 303, + 304, 40, -1, -1, 43, -1, 45, -1, -1, -1, + -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 259, 260, + -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, + -1, 272, 273, -1, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, -1, 286, 287, -1, -1, -1, + 291, 292, 293, 294, 123, -1, 125, 298, -1, 300, + 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 40, -1, -1, 43, -1, 45, -1, -1, 259, 260, + -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, + -1, 272, 273, -1, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, -1, 286, 287, 123, -1, 125, + 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, + 301, 302, 303, 304, 40, 41, -1, 43, 44, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 60, -1, 62, -1, -1, -1, + 259, 260, -1, -1, 263, 264, -1, 266, 267, 268, + 269, 270, -1, 272, 273, -1, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, + -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, + -1, 300, 301, 302, 303, 304, 40, 41, -1, 43, + 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 259, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, -1, 272, 273, -1, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, + 286, 287, -1, -1, -1, 291, 292, 293, 294, -1, + -1, -1, 298, -1, 300, 301, 302, 303, 304, 259, + -1, -1, -1, 263, 264, -1, 266, 267, 268, 269, + -1, -1, -1, -1, -1, 275, 276, 277, 278, 279, + 280, -1, 282, 283, 284, -1, 286, 287, -1, -1, + -1, 291, 292, 293, 294, -1, -1, -1, 298, -1, + 300, 301, 302, 303, 304, 40, 41, -1, 43, 44, + 45, -1, -1, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, -1, 60, -1, 62, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, -1, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, -1, 298, -1, 300, 301, 302, 303, 304, 40, + 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, + -1, 62, -1, -1, -1, 259, -1, -1, -1, 263, + 264, -1, -1, -1, 268, 269, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, + 284, 40, 286, -1, 43, 44, 45, 291, 292, 293, + 294, 295, 296, -1, 298, -1, 300, 301, 302, 303, + 304, 60, -1, 62, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 40, 41, -1, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 60, -1, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 40, -1, -1, 43, 44, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 60, 259, 62, -1, -1, 263, 264, + -1, -1, -1, 268, 269, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, + 40, 286, -1, 43, 44, 45, 291, 292, 293, 294, + 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, + 60, -1, 62, -1, -1, -1, -1, -1, 259, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, 40, 286, -1, 43, 44, 45, + 291, 292, 293, 294, 295, 296, -1, 298, -1, 300, + 301, 302, 303, 304, 60, -1, 62, -1, -1, -1, + 259, -1, -1, -1, 263, 264, -1, -1, -1, 268, + 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, + -1, -1, 291, 292, 293, 294, 295, 296, -1, 298, + -1, 300, 301, 302, 303, 304, 259, -1, -1, -1, + 263, 264, -1, -1, 40, 268, 269, 43, 44, 45, + -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, -1, 286, 60, -1, 62, -1, 291, 292, + 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, + 303, 304, 259, -1, -1, -1, 263, 264, -1, -1, + 40, 268, 269, 43, 44, 45, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, -1, 286, + 60, -1, 62, -1, 291, 292, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, 303, 304, -1, 259, + -1, -1, -1, 263, 264, -1, -1, 40, 268, 269, + 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, -1, 286, 60, -1, 62, + -1, 291, 292, 293, 294, 295, 296, -1, 298, -1, + 300, 301, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, 259, -1, -1, -1, 263, 264, -1, + -1, 40, 268, 269, 43, -1, 45, -1, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, 58, + 286, 60, -1, 62, -1, 291, 292, 293, 294, 295, + 296, -1, 298, -1, 300, 301, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, 40, 41, -1, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 60, -1, 62, + -1, -1, -1, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, -1, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, -1, 298, -1, 300, 301, 302, 303, 304, 259, + -1, -1, -1, 263, 264, -1, -1, -1, 268, 269, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 280, -1, 282, 283, 284, -1, 286, -1, -1, -1, + -1, 291, 292, 293, 294, 295, 296, -1, 298, -1, + 300, 301, 302, 303, 304, -1, 259, -1, -1, -1, + 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, -1, 286, -1, -1, -1, -1, 291, 292, + 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, + 303, 304, 40, 41, -1, 43, -1, 45, -1, -1, + 259, -1, -1, -1, 263, 264, -1, -1, -1, 268, + 269, -1, 60, -1, 62, -1, -1, -1, -1, -1, + -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, + -1, -1, 291, 292, 293, 294, 295, 296, -1, 298, + -1, 300, 301, 302, 303, 304, 259, -1, -1, -1, + 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, -1, 286, -1, -1, -1, -1, 291, 292, + 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, + 303, 304, 40, 41, -1, 43, -1, 45, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 60, -1, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, 41, + -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 60, -1, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, 41, -1, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 60, -1, 62, -1, -1, -1, + -1, 259, -1, -1, -1, 263, 264, -1, -1, -1, + 268, 269, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, + -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, + 298, -1, 300, 301, 302, 303, 304, 40, 41, -1, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 60, -1, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 40, 41, -1, 43, -1, 45, -1, + -1, 259, -1, -1, -1, 263, 264, -1, -1, -1, + 268, 269, -1, 60, -1, 62, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, + -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, + 298, -1, 300, 301, 302, 303, 304, 259, -1, -1, + -1, 263, 264, -1, -1, -1, 268, 269, 40, -1, + -1, 43, -1, 45, -1, -1, -1, -1, 280, -1, + 282, 283, 284, -1, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, 298, -1, 300, 301, + 302, 303, 304, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 280, -1, 282, 283, 284, -1, + 286, -1, -1, -1, -1, 291, 292, 293, 294, 295, + 296, -1, 298, -1, 300, 301, 302, 303, 304, 40, + 41, 123, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, + -1, 62, -1, -1, -1, -1, 259, -1, -1, -1, + 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, + 283, 284, 40, 286, -1, 43, -1, 45, 291, 292, + 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, + 303, 304, 259, -1, -1, -1, 263, 264, -1, -1, + -1, 268, 269, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, -1, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, 303, 304, 40, 41, + -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 60, -1, + 62, 263, 264, -1, -1, -1, 268, 269, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, + 292, 293, 294, -1, -1, -1, 298, -1, 300, 301, + 302, 303, 304, 40, -1, -1, 43, -1, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 60, -1, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, 280, + -1, 282, 283, 284, -1, 286, -1, -1, 59, -1, + 291, 292, 293, 294, 295, 296, -1, 298, -1, 300, + 301, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, 259, -1, -1, -1, 263, 264, -1, -1, 40, + 268, 269, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, + -1, -1, -1, 291, 292, 293, 294, -1, -1, -1, + 298, -1, 300, 301, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, + 45, -1, -1, -1, -1, -1, -1, 259, -1, -1, + -1, 263, 264, -1, -1, -1, 268, 269, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 280, -1, + 282, 283, 284, -1, 286, -1, -1, -1, -1, 291, + 292, 293, 294, 295, 296, -1, 298, -1, 300, 301, + 302, 303, 304, 40, -1, -1, 43, -1, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 259, -1, -1, -1, 263, 264, -1, -1, + -1, 268, 269, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 280, -1, 282, 283, 284, -1, 286, + -1, -1, -1, -1, 291, 292, 293, 294, 295, 296, + -1, 298, -1, 300, 301, 302, 303, 304, 259, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, -1, 286, -1, -1, -1, -1, + 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, + 301, 302, 303, 304, -1, -1, -1, -1, 259, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, + -1, 282, 283, 284, -1, 286, -1, -1, -1, -1, + 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, + 301, 302, 303, 304, 259, -1, -1, -1, 263, 264, + -1, -1, -1, 268, 269, -1, -1, 47, 48, -1, + -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, + -1, 286, -1, -1, -1, -1, 291, 292, 293, 294, + -1, -1, -1, 298, -1, 300, 301, 302, 303, 304, + 80, -1, 82, 83, -1, -1, -1, -1, -1, -1, + -1, -1, 259, -1, -1, -1, 263, 264, -1, -1, + -1, 268, 269, -1, -1, -1, -1, -1, 108, 109, + -1, -1, -1, 280, -1, 282, 283, 284, -1, 286, + -1, -1, -1, -1, 291, 292, 293, 294, -1, -1, + -1, 298, -1, 300, 301, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, + 28, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, + 170, -1, -1, -1, -1, -1, 54, -1, -1, -1, + -1, 181, -1, 183, -1, 185, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 206, -1, -1, -1, + -1, -1, -1, 91, 92, 93, 94, 95, 96, -1, + -1, 221, 222, 223, 224, 225, 104, -1, 106, -1, + -1, -1, 110, 111, -1, -1, 114, -1, 116, 117, + -1, -1, -1, 121, 122, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 132, -1, -1, -1, -1, 137, + 138, 139, 140, -1, -1, -1, -1, -1, -1, 269, + -1, -1, -1, 273, 274, 275, -1, -1, -1, 279, + 158, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 304, 305, -1, -1, 186, -1, + 310, -1, -1, -1, -1, -1, -1, -1, -1, 197, + 198, -1, 200, 201, 202, 203, -1, 205, -1, 207, + 208, -1, -1, -1, -1, -1, -1, 215, 216, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 227, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 252, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 264, 265, 266, 267, + 268, -1, 270, 271, 272, +}; +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 304 +#if YYDEBUG +char *yyname[] = { +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, +"':'","';'","'<'",0,"'>'","'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,"'['",0,"']'","'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'p'",0,0,0,0,0,0,0, +0,0,0,"'{'","'|'","'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"BEGIN","END","REGEX","SEMINEW", +"NEWLINE","COMMENT","FUN1","FUNN","GRGR","PRINT","PRINTF","SPRINTF","SPLIT", +"IF","ELSE","WHILE","FOR","IN","EXIT","NEXT","BREAK","CONTINUE","RET","GETLINE", +"DO","SUB","GSUB","MATCH","FUNCTION","USERFUN","DELETE","ASGNOP","OROR", +"ANDAND","NUMBER","VAR","SUBSTR","INDEX","MATCHOP","RELOP","OR","STRING", +"UMINUS","NOT","INCR","DECR","FIELD","VFIELD", +}; +char *yyrule[] = { +"$accept : program", +"program : junk hunks", +"begin : BEGIN '{' maybe states '}' junk", +"end : END '{' maybe states '}'", +"end : end NEWLINE", +"hunks : hunks hunk junk", +"hunks :", +"hunk : patpat", +"hunk : patpat '{' maybe states '}'", +"hunk : FUNCTION USERFUN '(' arg_list ')' maybe '{' maybe states '}'", +"hunk : '{' maybe states '}'", +"hunk : begin", +"hunk : end", +"arg_list : expr_list", +"patpat : cond", +"patpat : cond ',' cond", +"cond : expr", +"cond : match", +"cond : rel", +"cond : compound_cond", +"cond : cond '?' expr ':' expr", +"compound_cond : '(' compound_cond ')'", +"compound_cond : cond ANDAND maybe cond", +"compound_cond : cond OROR maybe cond", +"compound_cond : NOT cond", +"rel : expr RELOP expr", +"rel : expr '>' expr", +"rel : expr '<' expr", +"rel : '(' rel ')'", +"match : expr MATCHOP expr", +"match : expr MATCHOP REGEX", +"match : REGEX", +"match : '(' match ')'", +"expr : term", +"expr : expr term", +"expr : variable ASGNOP cond", +"term : variable", +"term : NUMBER", +"term : STRING", +"term : term '+' term", +"term : term '-' term", +"term : term '*' term", +"term : term '/' term", +"term : term '%' term", +"term : term '^' term", +"term : term IN VAR", +"term : cond '?' expr ':' expr", +"term : variable INCR", +"term : variable DECR", +"term : INCR variable", +"term : DECR variable", +"term : '-' term", +"term : '+' term", +"term : '(' cond ')'", +"term : GETLINE", +"term : GETLINE variable", +"term : GETLINE '<' expr", +"term : GETLINE variable '<' expr", +"term : term 'p' GETLINE", +"term : term 'p' GETLINE variable", +"term : FUN1", +"term : FUN1 '(' ')'", +"term : FUN1 '(' expr ')'", +"term : FUNN '(' expr_list ')'", +"term : USERFUN '(' expr_list ')'", +"term : SPRINTF expr_list", +"term : SUBSTR '(' expr ',' expr ',' expr ')'", +"term : SUBSTR '(' expr ',' expr ')'", +"term : SPLIT '(' expr ',' VAR ',' expr ')'", +"term : SPLIT '(' expr ',' VAR ',' REGEX ')'", +"term : SPLIT '(' expr ',' VAR ')'", +"term : INDEX '(' expr ',' expr ')'", +"term : MATCH '(' expr ',' REGEX ')'", +"term : MATCH '(' expr ',' expr ')'", +"term : SUB '(' expr ',' expr ')'", +"term : SUB '(' REGEX ',' expr ')'", +"term : GSUB '(' expr ',' expr ')'", +"term : GSUB '(' REGEX ',' expr ')'", +"term : SUB '(' expr ',' expr ',' expr ')'", +"term : SUB '(' REGEX ',' expr ',' expr ')'", +"term : GSUB '(' expr ',' expr ',' expr ')'", +"term : GSUB '(' REGEX ',' expr ',' expr ')'", +"variable : VAR", +"variable : VAR '[' expr_list ']'", +"variable : FIELD", +"variable : VFIELD term", +"expr_list : expr", +"expr_list : clist", +"expr_list :", +"clist : expr ',' maybe expr", +"clist : clist ',' maybe expr", +"clist : '(' clist ')'", +"junk : junk hunksep", +"junk :", +"hunksep : ';'", +"hunksep : SEMINEW", +"hunksep : NEWLINE", +"hunksep : COMMENT", +"maybe : maybe nlstuff", +"maybe :", +"nlstuff : NEWLINE", +"nlstuff : COMMENT", +"separator : ';' maybe", +"separator : SEMINEW maybe", +"separator : NEWLINE maybe", +"separator : COMMENT maybe", +"states : states statement", +"states :", +"statement : simple separator maybe", +"statement : ';' maybe", +"statement : SEMINEW maybe", +"statement : compound", +"simpnull : simple", +"simpnull :", +"simple : expr", +"simple : PRINT expr_list redir expr", +"simple : PRINT expr_list", +"simple : PRINTF expr_list redir expr", +"simple : PRINTF expr_list", +"simple : BREAK", +"simple : NEXT", +"simple : EXIT", +"simple : EXIT expr", +"simple : CONTINUE", +"simple : RET", +"simple : RET expr", +"simple : DELETE VAR '[' expr_list ']'", +"redir : '>'", +"redir : GRGR", +"redir : '|'", +"compound : IF '(' cond ')' maybe statement", +"compound : IF '(' cond ')' maybe statement ELSE maybe statement", +"compound : WHILE '(' cond ')' maybe statement", +"compound : DO maybe statement WHILE '(' cond ')'", +"compound : FOR '(' simpnull ';' cond ';' simpnull ')' maybe statement", +"compound : FOR '(' simpnull ';' ';' simpnull ')' maybe statement", +"compound : FOR '(' expr ')' maybe statement", +"compound : '{' maybe states '}' maybe", +}; +#endif +#ifndef YYSTYPE +typedef int YYSTYPE; +#endif +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 500 +#define YYMAXDEPTH 500 +#endif +#endif +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; +YYSTYPE *yyvsp; +YYSTYPE yyval; +YYSTYPE yylval; +short yyss[YYSTACKSIZE]; +YYSTYPE yyvs[YYSTACKSIZE]; +#define yystacksize YYSTACKSIZE +#line 396 "a2p.y" +#include "a2py.c" +#line 1948 "y.tab.c" +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab +int +yyparse() +{ + register int yym, yyn, yystate; +#if YYDEBUG + register char *yys; + extern char *getenv(); + + if (yys = getenv("YYDEBUG")) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = (-1); + + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; + +yyloop: + if (yyn = yydefred[yystate]) goto yyreduce; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + yychar = (-1); + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; +#ifdef lint + goto yynewerror; +#endif +yynewerror: + yyerror("syntax error"); +#ifdef lint + goto yyerrlab; +#endif +yyerrlab: + ++yynerrs; +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); +#endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yyssp); +#endif + if (yyssp <= yyss) goto yyabort; + --yyssp; + --yyvsp; + } + } + } + else + { + if (yychar == 0) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = (-1); + goto yyloop; + } +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + yyval = yyvsp[1-yym]; + switch (yyn) + { +case 1: +#line 51 "a2p.y" +{ root = oper4(OPROG,yyvsp[-1],begins,yyvsp[0],ends); } +break; +case 2: +#line 55 "a2p.y" +{ begins = oper4(OJUNK,begins,yyvsp[-3],yyvsp[-2],yyvsp[0]); in_begin = FALSE; + yyval = Nullop; } +break; +case 3: +#line 60 "a2p.y" +{ ends = oper3(OJUNK,ends,yyvsp[-2],yyvsp[-1]); yyval = Nullop; } +break; +case 4: +#line 62 "a2p.y" +{ yyval = yyvsp[-1]; } +break; +case 5: +#line 66 "a2p.y" +{ yyval = oper3(OHUNKS,yyvsp[-2],yyvsp[-1],yyvsp[0]); } +break; +case 6: +#line 68 "a2p.y" +{ yyval = Nullop; } +break; +case 7: +#line 72 "a2p.y" +{ yyval = oper1(OHUNK,yyvsp[0]); need_entire = TRUE; } +break; +case 8: +#line 74 "a2p.y" +{ yyval = oper2(OHUNK,yyvsp[-4],oper2(OJUNK,yyvsp[-2],yyvsp[-1])); } +break; +case 9: +#line 76 "a2p.y" +{ fixfargs(yyvsp[-8],yyvsp[-6],0); yyval = oper5(OUSERDEF,yyvsp[-8],yyvsp[-6],yyvsp[-4],yyvsp[-2],yyvsp[-1]); } +break; +case 10: +#line 78 "a2p.y" +{ yyval = oper2(OHUNK,Nullop,oper2(OJUNK,yyvsp[-2],yyvsp[-1])); } +break; +case 13: +#line 84 "a2p.y" +{ yyval = rememberargs(yyval); } +break; +case 14: +#line 88 "a2p.y" +{ yyval = oper1(OPAT,yyvsp[0]); } +break; +case 15: +#line 90 "a2p.y" +{ yyval = oper2(ORANGE,yyvsp[-2],yyvsp[0]); } +break; +case 20: +#line 98 "a2p.y" +{ yyval = oper3(OCOND,yyvsp[-4],yyvsp[-2],yyvsp[0]); } +break; +case 21: +#line 103 "a2p.y" +{ yyval = oper1(OCPAREN,yyvsp[-1]); } +break; +case 22: +#line 105 "a2p.y" +{ yyval = oper3(OCANDAND,yyvsp[-3],yyvsp[-1],yyvsp[0]); } +break; +case 23: +#line 107 "a2p.y" +{ yyval = oper3(OCOROR,yyvsp[-3],yyvsp[-1],yyvsp[0]); } +break; +case 24: +#line 109 "a2p.y" +{ yyval = oper1(OCNOT,yyvsp[0]); } +break; +case 25: +#line 113 "a2p.y" +{ yyval = oper3(ORELOP,yyvsp[-1],yyvsp[-2],yyvsp[0]); } +break; +case 26: +#line 115 "a2p.y" +{ yyval = oper3(ORELOP,string(">",1),yyvsp[-2],yyvsp[0]); } +break; +case 27: +#line 117 "a2p.y" +{ yyval = oper3(ORELOP,string("<",1),yyvsp[-2],yyvsp[0]); } +break; +case 28: +#line 119 "a2p.y" +{ yyval = oper1(ORPAREN,yyvsp[-1]); } +break; +case 29: +#line 123 "a2p.y" +{ yyval = oper3(OMATCHOP,yyvsp[-1],yyvsp[-2],yyvsp[0]); } +break; +case 30: +#line 125 "a2p.y" +{ yyval = oper3(OMATCHOP,yyvsp[-1],yyvsp[-2],oper1(OREGEX,yyvsp[0])); } +break; +case 31: +#line 127 "a2p.y" +{ yyval = oper1(OREGEX,yyvsp[0]); } +break; +case 32: +#line 129 "a2p.y" +{ yyval = oper1(OMPAREN,yyvsp[-1]); } +break; +case 33: +#line 133 "a2p.y" +{ yyval = yyvsp[0]; } +break; +case 34: +#line 135 "a2p.y" +{ yyval = oper2(OCONCAT,yyvsp[-1],yyvsp[0]); } +break; +case 35: +#line 137 "a2p.y" +{ yyval = oper3(OASSIGN,yyvsp[-1],yyvsp[-2],yyvsp[0]); + if ((ops[yyvsp[-2]].ival & 255) == OFLD) + lval_field = TRUE; + if ((ops[yyvsp[-2]].ival & 255) == OVFLD) + lval_field = TRUE; + } +break; +case 36: +#line 146 "a2p.y" +{ yyval = yyvsp[0]; } +break; +case 37: +#line 148 "a2p.y" +{ yyval = oper1(ONUM,yyvsp[0]); } +break; +case 38: +#line 150 "a2p.y" +{ yyval = oper1(OSTR,yyvsp[0]); } +break; +case 39: +#line 152 "a2p.y" +{ yyval = oper2(OADD,yyvsp[-2],yyvsp[0]); } +break; +case 40: +#line 154 "a2p.y" +{ yyval = oper2(OSUBTRACT,yyvsp[-2],yyvsp[0]); } +break; +case 41: +#line 156 "a2p.y" +{ yyval = oper2(OMULT,yyvsp[-2],yyvsp[0]); } +break; +case 42: +#line 158 "a2p.y" +{ yyval = oper2(ODIV,yyvsp[-2],yyvsp[0]); } +break; +case 43: +#line 160 "a2p.y" +{ yyval = oper2(OMOD,yyvsp[-2],yyvsp[0]); } +break; +case 44: +#line 162 "a2p.y" +{ yyval = oper2(OPOW,yyvsp[-2],yyvsp[0]); } +break; +case 45: +#line 164 "a2p.y" +{ yyval = oper2(ODEFINED,aryrefarg(yyvsp[0]),yyvsp[-2]); } +break; +case 46: +#line 166 "a2p.y" +{ yyval = oper3(OCOND,yyvsp[-4],yyvsp[-2],yyvsp[0]); } +break; +case 47: +#line 168 "a2p.y" +{ yyval = oper1(OPOSTINCR,yyvsp[-1]); } +break; +case 48: +#line 170 "a2p.y" +{ yyval = oper1(OPOSTDECR,yyvsp[-1]); } +break; +case 49: +#line 172 "a2p.y" +{ yyval = oper1(OPREINCR,yyvsp[0]); } +break; +case 50: +#line 174 "a2p.y" +{ yyval = oper1(OPREDECR,yyvsp[0]); } +break; +case 51: +#line 176 "a2p.y" +{ yyval = oper1(OUMINUS,yyvsp[0]); } +break; +case 52: +#line 178 "a2p.y" +{ yyval = oper1(OUPLUS,yyvsp[0]); } +break; +case 53: +#line 180 "a2p.y" +{ yyval = oper1(OPAREN,yyvsp[-1]); } +break; +case 54: +#line 182 "a2p.y" +{ yyval = oper0(OGETLINE); } +break; +case 55: +#line 184 "a2p.y" +{ yyval = oper1(OGETLINE,yyvsp[0]); } +break; +case 56: +#line 186 "a2p.y" +{ yyval = oper3(OGETLINE,Nullop,string("<",1),yyvsp[0]); + if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } +break; +case 57: +#line 189 "a2p.y" +{ yyval = oper3(OGETLINE,yyvsp[-2],string("<",1),yyvsp[0]); + if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } +break; +case 58: +#line 192 "a2p.y" +{ yyval = oper3(OGETLINE,Nullop,string("|",1),yyvsp[-2]); + if (ops[yyvsp[-2]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } +break; +case 59: +#line 195 "a2p.y" +{ yyval = oper3(OGETLINE,yyvsp[0],string("|",1),yyvsp[-3]); + if (ops[yyvsp[-3]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } +break; +case 60: +#line 198 "a2p.y" +{ yyval = oper0(yyvsp[0]); need_entire = do_chop = TRUE; } +break; +case 61: +#line 200 "a2p.y" +{ yyval = oper1(yyvsp[-2],Nullop); need_entire = do_chop = TRUE; } +break; +case 62: +#line 202 "a2p.y" +{ yyval = oper1(yyvsp[-3],yyvsp[-1]); } +break; +case 63: +#line 204 "a2p.y" +{ yyval = oper1(yyvsp[-3],yyvsp[-1]); } +break; +case 64: +#line 206 "a2p.y" +{ yyval = oper2(OUSERFUN,yyvsp[-3],yyvsp[-1]); } +break; +case 65: +#line 208 "a2p.y" +{ yyval = oper1(OSPRINTF,yyvsp[0]); } +break; +case 66: +#line 210 "a2p.y" +{ yyval = oper3(OSUBSTR,yyvsp[-5],yyvsp[-3],yyvsp[-1]); } +break; +case 67: +#line 212 "a2p.y" +{ yyval = oper2(OSUBSTR,yyvsp[-3],yyvsp[-1]); } +break; +case 68: +#line 214 "a2p.y" +{ yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),yyvsp[-1]); } +break; +case 69: +#line 216 "a2p.y" +{ yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),oper1(OREGEX,yyvsp[-1]));} +break; +case 70: +#line 218 "a2p.y" +{ yyval = oper2(OSPLIT,yyvsp[-3],aryrefarg(numary(yyvsp[-1]))); } +break; +case 71: +#line 220 "a2p.y" +{ yyval = oper2(OINDEX,yyvsp[-3],yyvsp[-1]); } +break; +case 72: +#line 222 "a2p.y" +{ yyval = oper2(OMATCH,yyvsp[-3],oper1(OREGEX,yyvsp[-1])); } +break; +case 73: +#line 224 "a2p.y" +{ yyval = oper2(OMATCH,yyvsp[-3],yyvsp[-1]); } +break; +case 74: +#line 226 "a2p.y" +{ yyval = oper2(OSUB,yyvsp[-3],yyvsp[-1]); } +break; +case 75: +#line 228 "a2p.y" +{ yyval = oper2(OSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); } +break; +case 76: +#line 230 "a2p.y" +{ yyval = oper2(OGSUB,yyvsp[-3],yyvsp[-1]); } +break; +case 77: +#line 232 "a2p.y" +{ yyval = oper2(OGSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); } +break; +case 78: +#line 234 "a2p.y" +{ yyval = oper3(OSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); } +break; +case 79: +#line 236 "a2p.y" +{ yyval = oper3(OSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); } +break; +case 80: +#line 238 "a2p.y" +{ yyval = oper3(OGSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); } +break; +case 81: +#line 240 "a2p.y" +{ yyval = oper3(OGSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); } +break; +case 82: +#line 244 "a2p.y" +{ yyval = oper1(OVAR,yyvsp[0]); } +break; +case 83: +#line 246 "a2p.y" +{ yyval = oper2(OVAR,aryrefarg(yyvsp[-3]),yyvsp[-1]); } +break; +case 84: +#line 248 "a2p.y" +{ yyval = oper1(OFLD,yyvsp[0]); } +break; +case 85: +#line 250 "a2p.y" +{ yyval = oper1(OVFLD,yyvsp[0]); } +break; +case 88: +#line 257 "a2p.y" +{ yyval = Nullop; } +break; +case 89: +#line 261 "a2p.y" +{ yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); } +break; +case 90: +#line 263 "a2p.y" +{ yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); } +break; +case 91: +#line 265 "a2p.y" +{ yyval = yyvsp[-1]; } +break; +case 92: +#line 269 "a2p.y" +{ yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); } +break; +case 93: +#line 271 "a2p.y" +{ yyval = Nullop; } +break; +case 94: +#line 275 "a2p.y" +{ yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); } +break; +case 95: +#line 277 "a2p.y" +{ yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); } +break; +case 96: +#line 279 "a2p.y" +{ yyval = oper0(ONEWLINE); } +break; +case 97: +#line 281 "a2p.y" +{ yyval = oper1(OCOMMENT,yyvsp[0]); } +break; +case 98: +#line 285 "a2p.y" +{ yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); } +break; +case 99: +#line 287 "a2p.y" +{ yyval = Nullop; } +break; +case 100: +#line 291 "a2p.y" +{ yyval = oper0(ONEWLINE); } +break; +case 101: +#line 293 "a2p.y" +{ yyval = oper1(OCOMMENT,yyvsp[0]); } +break; +case 102: +#line 298 "a2p.y" +{ yyval = oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0]); } +break; +case 103: +#line 300 "a2p.y" +{ yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); } +break; +case 104: +#line 302 "a2p.y" +{ yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); } +break; +case 105: +#line 304 "a2p.y" +{ yyval = oper2(OJUNK,oper1(OSCOMMENT,yyvsp[-1]),yyvsp[0]); } +break; +case 106: +#line 308 "a2p.y" +{ yyval = oper2(OSTATES,yyvsp[-1],yyvsp[0]); } +break; +case 107: +#line 310 "a2p.y" +{ yyval = Nullop; } +break; +case 108: +#line 315 "a2p.y" +{ yyval = oper2(OJUNK,oper2(OSTATE,yyvsp[-2],yyvsp[-1]),yyvsp[0]); } +break; +case 109: +#line 317 "a2p.y" +{ yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0])); } +break; +case 110: +#line 319 "a2p.y" +{ yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0])); } +break; +case 113: +#line 325 "a2p.y" +{ yyval = Nullop; } +break; +case 115: +#line 331 "a2p.y" +{ yyval = oper3(OPRINT,yyvsp[-2],yyvsp[-1],yyvsp[0]); + do_opens = TRUE; + saw_ORS = saw_OFS = TRUE; + if (!yyvsp[-2]) need_entire = TRUE; + if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } +break; +case 116: +#line 337 "a2p.y" +{ yyval = oper1(OPRINT,yyvsp[0]); + if (!yyvsp[0]) need_entire = TRUE; + saw_ORS = saw_OFS = TRUE; + } +break; +case 117: +#line 342 "a2p.y" +{ yyval = oper3(OPRINTF,yyvsp[-2],yyvsp[-1],yyvsp[0]); + do_opens = TRUE; + if (!yyvsp[-2]) need_entire = TRUE; + if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } +break; +case 118: +#line 347 "a2p.y" +{ yyval = oper1(OPRINTF,yyvsp[0]); + if (!yyvsp[0]) need_entire = TRUE; + } +break; +case 119: +#line 351 "a2p.y" +{ yyval = oper0(OBREAK); } +break; +case 120: +#line 353 "a2p.y" +{ yyval = oper0(ONEXT); } +break; +case 121: +#line 355 "a2p.y" +{ yyval = oper0(OEXIT); } +break; +case 122: +#line 357 "a2p.y" +{ yyval = oper1(OEXIT,yyvsp[0]); } +break; +case 123: +#line 359 "a2p.y" +{ yyval = oper0(OCONTINUE); } +break; +case 124: +#line 361 "a2p.y" +{ yyval = oper0(ORETURN); } +break; +case 125: +#line 363 "a2p.y" +{ yyval = oper1(ORETURN,yyvsp[0]); } +break; +case 126: +#line 365 "a2p.y" +{ yyval = oper2(ODELETE,aryrefarg(yyvsp[-3]),yyvsp[-1]); } +break; +case 127: +#line 369 "a2p.y" +{ yyval = oper1(OREDIR,string(">",1)); } +break; +case 128: +#line 371 "a2p.y" +{ yyval = oper1(OREDIR,string(">>",2)); } +break; +case 129: +#line 373 "a2p.y" +{ yyval = oper1(OREDIR,string("|",1)); } +break; +case 130: +#line 378 "a2p.y" +{ yyval = oper2(OIF,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } +break; +case 131: +#line 380 "a2p.y" +{ yyval = oper3(OIF,yyvsp[-6],bl(yyvsp[-3],yyvsp[-4]),bl(yyvsp[0],yyvsp[-1])); } +break; +case 132: +#line 382 "a2p.y" +{ yyval = oper2(OWHILE,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } +break; +case 133: +#line 384 "a2p.y" +{ yyval = oper2(ODO,bl(yyvsp[-4],yyvsp[-5]),yyvsp[-1]); } +break; +case 134: +#line 386 "a2p.y" +{ yyval = oper4(OFOR,yyvsp[-7],yyvsp[-5],yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } +break; +case 135: +#line 388 "a2p.y" +{ yyval = oper4(OFOR,yyvsp[-6],string("",0),yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } +break; +case 136: +#line 390 "a2p.y" +{ yyval = oper2(OFORIN,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } +break; +case 137: +#line 392 "a2p.y" +{ yyval = oper3(OBLOCK,oper2(OJUNK,yyvsp[-3],yyvsp[-2]),Nullop,yyvsp[0]); } +break; +#line 2615 "y.tab.c" + } + yyssp -= yym; + yystate = *yyssp; + yyvsp -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yyssp = YYFINAL; + *++yyvsp = yyval; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == 0) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yyssp, yystate); +#endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate; + *++yyvsp = yyval; + goto yyloop; +yyoverflow: + yyerror("yacc stack overflow"); +yyabort: + return (1); +yyaccept: + return (0); +} @@ -18,6 +18,35 @@ # define bzero(s,l) memset(s,0,l) #endif +/* Use all the "standard" definitions? */ +#if defined(STANDARD_C) && defined(I_STDLIB) +# include <stdlib.h> +#endif /* STANDARD_C */ +#include <stdio.h> + +#ifdef I_MATH +#include <math.h> +#endif + +#ifdef USE_NEXT_CTYPE +#include <appkit/NXCType.h> +#else +#include <ctype.h> +#endif + +#define MEM_SIZE Size_t + +#if defined(I_STRING) || defined(__cplusplus) +# include <string.h> +#else +# include <strings.h> +#endif + +#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr) +#define strchr index +#define strrchr rindex +#endif + #include "handy.h" #define Nullop 0 @@ -220,15 +249,13 @@ union u_ops { #endif /* 80286 hack */ EXT union u_ops ops[OPSMAX]; -#include <stdio.h> -#include <ctype.h> - typedef struct string STR; typedef struct htbl HASH; #include "str.h" #include "hash.h" + /* A string is TRUE if not "" or "0". */ #define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1]))) EXT char *Yes INIT("1"); @@ -243,12 +270,28 @@ EXT STR *Str; #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len) -STR *str_new(); - -char *scanpat(); -char *scannum(); - -void str_free(); +/* Prototypes for things in a2p.c */ +int aryrefarg _(( int arg )); +int bl _(( int arg, int maybe )); +int dump _(( int branch )); +int fixfargs _(( int name, int arg, int prevargs )); +int fixrargs _(( char *name, int arg, int prevargs )); +int fixup _(( STR *str )); +int numary _(( int arg )); +int oper0 _(( int type )); +int oper1 _(( int type, int arg1 )); +int oper2 _(( int type, int arg1, int arg2 )); +int oper3 _(( int type, int arg1, int arg2, int arg3 )); +int oper4 _(( int type, int arg1, int arg2, int arg3, int arg4 )); +int oper5 _(( int type, int arg1, int arg2, int arg3, int arg4, int arg5 )); +int putlines _(( STR *str )); +int putone _(( void )); +int rememberargs _(( int arg )); +char * scannum _(( char *s )); +char * scanpat _(( char *s )); +int string _(( char *ptr, int len )); +int yyerror _(( char *s )); +int yylex _(( void )); EXT int line INIT(0); diff --git a/x2p/a2py.c b/x2p/a2py.c index 59c22414a5..f1bc18ebe5 100644 --- a/x2p/a2py.c +++ b/x2p/a2py.c @@ -41,7 +41,6 @@ register char **argv; register char **env; { register STR *str; - register char *s; int i; STR *tmpstr; diff --git a/x2p/handy.h b/x2p/handy.h index 8995b2448b..160d83927c 100644 --- a/x2p/handy.h +++ b/x2p/handy.h @@ -1,18 +1,34 @@ -/* $RCSfile: handy.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:19 $ +/* handy.h * - * Copyright (c) 1991, Larry Wall + * Copyright (c) 1991-1994, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * - * $Log: handy.h,v $ */ -#define Null(type) ((type)0) +#if !defined(__STDC__) +#ifdef NULL +#undef NULL +#endif +#ifndef I286 +# define NULL 0 +#else +# define NULL 0L +#endif +#endif + +#define Null(type) ((type)NULL) #define Nullch Null(char*) #define Nullfp Null(FILE*) +#define Nullsv Null(SV*) +#ifdef UTS +#define bool int +#else #define bool char +#endif + #ifdef TRUE #undef TRUE #endif @@ -22,6 +38,20 @@ #define TRUE (1) #define FALSE (0) +typedef char I8; +typedef unsigned char U8; + +typedef short I16; +typedef unsigned short U16; + +#if BYTEORDER > 0x4321 + typedef int I32; + typedef unsigned int U32; +#else + typedef long I32; + typedef unsigned long U32; +#endif + #define Ctl(ch) (ch & 037) #define strNE(s1,s2) (strcmp(s1,s2)) @@ -32,3 +62,111 @@ #define strGE(s1,s2) (strcmp(s1,s2) >= 0) #define strnNE(s1,s2,l) (strncmp(s1,s2,l)) #define strnEQ(s1,s2,l) (!strncmp(s1,s2,l)) + +#ifdef HAS_SETLOCALE /* XXX Is there a better test for this? */ +# ifndef CTYPE256 +# define CTYPE256 +# endif +#endif + +#ifdef USE_NEXT_CTYPE +#define isALNUM(c) (NXIsAlpha((unsigned int)c) || NXIsDigit((unsigned int)c) || c == '_') +#define isIDFIRST(c) (NXIsAlpha((unsigned int)c) || c == '_') +#define isALPHA(c) NXIsAlpha((unsigned int)c) +#define isSPACE(c) NXIsSpace((unsigned int)c) +#define isDIGIT(c) NXIsDigit((unsigned int)c) +#define isUPPER(c) NXIsUpper((unsigned int)c) +#define isLOWER(c) NXIsLower((unsigned int)c) +#define toUPPER(c) NXToUpper((unsigned int)c) +#define toLOWER(c) NXToLower((unsigned int)c) +#else /* USE_NEXT_CTYPE */ +#if defined(CTYPE256) || (!defined(isascii) && !defined(HAS_ISASCII)) +#define isALNUM(c) (isalpha((unsigned char)(c)) || isdigit((unsigned char)(c)) || c == '_') +#define isIDFIRST(c) (isalpha((unsigned char)(c)) || (c) == '_') +#define isALPHA(c) isalpha((unsigned char)(c)) +#define isSPACE(c) isspace((unsigned char)(c)) +#define isDIGIT(c) isdigit((unsigned char)(c)) +#define isUPPER(c) isupper((unsigned char)(c)) +#define isLOWER(c) islower((unsigned char)(c)) +#define toUPPER(c) toupper((unsigned char)(c)) +#define toLOWER(c) tolower((unsigned char)(c)) +#else +#define isALNUM(c) (isascii(c) && (isalpha(c) || isdigit(c) || c == '_')) +#define isIDFIRST(c) (isascii(c) && (isalpha(c) || (c) == '_')) +#define isALPHA(c) (isascii(c) && isalpha(c)) +#define isSPACE(c) (isascii(c) && isspace(c)) +#define isDIGIT(c) (isascii(c) && isdigit(c)) +#define isUPPER(c) (isascii(c) && isupper(c)) +#define isLOWER(c) (isascii(c) && islower(c)) +#define toUPPER(c) toupper(c) +#define toLOWER(c) tolower(c) +#endif +#endif /* USE_NEXT_CTYPE */ + +/* Line numbers are unsigned, 16 bits. */ +typedef U16 line_t; +#ifdef lint +#define NOLINE ((line_t)0) +#else +#define NOLINE ((line_t) 65535) +#endif + +#ifndef lint +#ifndef LEAKTEST +#ifndef safemalloc +char *safemalloc _((MEM_SIZE)); +char *saferealloc _((char *, MEM_SIZE)); +void safefree _((char *)); +#endif +#ifndef MSDOS +#define New(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n) * sizeof(t)))) +#define Newc(x,v,n,t,c) (v = (c*)safemalloc((MEM_SIZE)((n) * sizeof(t)))) +#define Newz(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n) * sizeof(t)))), \ + memzero((char*)(v), (n) * sizeof(t)) +#define Renew(v,n,t) (v = (t*)saferealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t)))) +#define Renewc(v,n,t,c) (v = (c*)saferealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t)))) +#else +#define New(x,v,n,t) (v = (t*)safemalloc(((unsigned long)(n) * sizeof(t)))) +#define Newc(x,v,n,t,c) (v = (c*)safemalloc(((unsigned long)(n) * sizeof(t)))) +#define Newz(x,v,n,t) (v = (t*)safemalloc(((unsigned long)(n) * sizeof(t)))), \ + memzero((char*)(v), (n) * sizeof(t)) +#define Renew(v,n,t) (v = (t*)saferealloc((char*)(v),((unsigned long)(n)*sizeof(t)))) +#define Renewc(v,n,t,c) (v = (c*)saferealloc((char*)(v),((unsigned long)(n)*sizeof(t)))) +#endif /* MSDOS */ +#define Safefree(d) safefree((char*)d) +#define NEWSV(x,len) newSV(len) +#else /* LEAKTEST */ +char *safexmalloc(); +char *safexrealloc(); +void safexfree(); +#define New(x,v,n,t) (v = (t*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t)))) +#define Newc(x,v,n,t,c) (v = (c*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t)))) +#define Newz(x,v,n,t) (v = (t*)safexmalloc(x,(MEM_SIZE)((n) * sizeof(t)))), \ + memzero((char*)(v), (n) * sizeof(t)) +#define Renew(v,n,t) (v = (t*)safexrealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t)))) +#define Renewc(v,n,t,c) (v = (c*)safexrealloc((char*)(v),(MEM_SIZE)((n)*sizeof(t)))) +#define Safefree(d) safexfree((char*)d) +#define NEWSV(x,len) newSV(x,len) +#define MAXXCOUNT 1200 +long xcount[MAXXCOUNT]; +long lastxcount[MAXXCOUNT]; +#endif /* LEAKTEST */ +#define Move(s,d,n,t) (void)memmove((char*)(d),(char*)(s), (n) * sizeof(t)) +#define Copy(s,d,n,t) (void)memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) +#define Zero(d,n,t) (void)memzero((char*)(d), (n) * sizeof(t)) +#else /* lint */ +#define New(x,v,n,s) (v = Null(s *)) +#define Newc(x,v,n,s,c) (v = Null(s *)) +#define Newz(x,v,n,s) (v = Null(s *)) +#define Renew(v,n,s) (v = Null(s *)) +#define Move(s,d,n,t) +#define Copy(s,d,n,t) +#define Zero(d,n,t) +#define Safefree(d) d = d +#endif /* lint */ + +#ifdef USE_STRUCT_COPY +#define StructCopy(s,d,t) *((t*)(d)) = *((t*)(s)) +#else +#define StructCopy(s,d,t) Copy(s,d,1,t) +#endif diff --git a/x2p/hash.c b/x2p/hash.c index b910af603e..58236f49e4 100644 --- a/x2p/hash.c +++ b/x2p/hash.c @@ -10,9 +10,8 @@ #include <stdio.h> #include "EXTERN.h" -#include "handy.h" -#include "util.h" #include "a2p.h" +#include "util.h" STR * hfetch(tb,key) @@ -71,7 +70,7 @@ STR *val; if (strNE(entry->hent_key,key)) /* is this it? */ continue; /*NOSTRICT*/ - safefree((char*)entry->hent_val); + Safefree(entry->hent_val); entry->hent_val = val; return TRUE; } @@ -133,6 +132,7 @@ char *key; } #endif +void hsplit(tb) HASH *tb; { @@ -194,6 +194,7 @@ register HASH *tb; } #endif +int hiterinit(tb) register HASH *tb; { diff --git a/x2p/hash.h b/x2p/hash.h index 5685e53259..f61a29f4e6 100644 --- a/x2p/hash.h +++ b/x2p/hash.h @@ -41,11 +41,12 @@ struct htbl { HENT *tbl_eiter; /* current entry of iterator */ }; -STR *hfetch(); -bool hstore(); -bool hdelete(); -HASH *hnew(); -int hiterinit(); -HENT *hiternext(); -char *hiterkey(); -STR *hiterval(); +bool hdelete _((HASH *tb, char *key)); +STR * hfetch _(( HASH *tb, char *key )); +int hiterinit _(( HASH *tb )); +char * hiterkey _(( HENT *entry )); +HENT * hiternext _(( HASH *tb )); +STR * hiterval _(( HENT *entry )); +HASH * hnew _(( void )); +void hsplit _(( HASH *tb )); +bool hstore _(( HASH *tb, char *key, STR *val )); @@ -8,11 +8,11 @@ * $Log: str.c,v $ */ -#include "handy.h" #include "EXTERN.h" -#include "util.h" #include "a2p.h" +#include "util.h" +void str_numset(str,num) register STR *str; double num; @@ -64,6 +64,7 @@ register STR *str; return str->str_nval; } +void str_sset(dstr,sstr) STR *dstr; register STR *sstr; @@ -78,6 +79,7 @@ register STR *sstr; str_nset(dstr,"",0); } +void str_nset(str,ptr,len) register STR *str; register char *ptr; @@ -91,6 +93,7 @@ register int len; str->str_pok = 1; /* validate pointer */ } +void str_set(str,ptr) register STR *str; register char *ptr; @@ -107,6 +110,7 @@ register char *ptr; str->str_pok = 1; /* validate pointer */ } +void str_chop(str,ptr) /* like set but assuming ptr is in str */ register STR *str; register char *ptr; @@ -119,6 +123,7 @@ register char *ptr; str->str_pok = 1; /* validate pointer */ } +void str_ncat(str,ptr,len) register STR *str; register char *ptr; @@ -134,6 +139,7 @@ register int len; str->str_pok = 1; /* validate pointer */ } +void str_scat(dstr,sstr) STR *dstr; register STR *sstr; @@ -144,6 +150,7 @@ register STR *sstr; str_ncat(dstr,sstr->str_ptr,sstr->str_cur); } +void str_cat(str,ptr) register STR *str; register char *ptr; @@ -236,7 +243,7 @@ str_replace(str,nstr) register STR *str; register STR *nstr; { - safefree(str->str_ptr); + Safefree(str->str_ptr); str->str_ptr = nstr->str_ptr; str->str_len = nstr->str_len; str->str_cur = nstr->str_cur; @@ -261,6 +268,7 @@ register STR *str; freestrroot = str; } +int str_len(str) register STR *str; { @@ -29,9 +29,25 @@ struct string { EXT STR **tmps_list; EXT long tmps_max INIT(-1); -char *str_2ptr(); -double str_2num(); -STR *str_mortal(); -STR *str_make(); -STR *str_nmake(); -char *str_gets(); +double str_2num _(( STR *str )); +char * str_2ptr _(( STR *str )); +char * str_append_till _(( STR *str, char *from, int delim, char *keeplist )); +void str_cat _(( STR *str, char *ptr )); +void str_chop _(( STR *str, char *ptr )); +void str_dec _(( STR *str )); +void str_free _(( STR *str )); +char * str_gets _(( STR *str, FILE *fp )); +void str_grow _(( STR *str, int len )); +void str_inc _(( STR *str )); +int str_len _(( STR *str )); +STR * str_make _(( char *s )); +STR * str_mortal _(( STR *oldstr )); +void str_ncat _(( STR *str, char *ptr, int len )); +STR * str_new _(( int len )); +STR * str_nmake _(( double n )); +void str_nset _(( STR *str, char *ptr, int len )); +void str_numset _(( STR *str, double num )); +void str_replace _(( STR *str, STR *nstr )); +void str_scat _(( STR *dstr, STR *sstr )); +void str_set _(( STR *str, char *ptr )); +void str_sset _(( STR *dstr, STR *sstr )); diff --git a/x2p/util.c b/x2p/util.c index 79cba699df..225812add1 100644 --- a/x2p/util.c +++ b/x2p/util.c @@ -8,16 +8,12 @@ * $Log: util.c,v $ */ -#include <stdio.h> - -#include "handy.h" #include "EXTERN.h" #include "a2p.h" #include "INTERN.h" #include "util.h" #define FLUSH -#define MEM_SIZE unsigned int static char nomem[] = "Out of memory!\n"; @@ -73,6 +69,7 @@ MEM_SIZE size; /* safe version of free */ +void safefree(where) char *where; { @@ -192,24 +189,30 @@ int newlen; } /*VARARGS1*/ +int croak(pat,a1,a2,a3,a4) char *pat; +int a1,a2,a3,a4; { fprintf(stderr,pat,a1,a2,a3,a4); exit(1); } /*VARARGS1*/ +int fatal(pat,a1,a2,a3,a4) char *pat; +int a1,a2,a3,a4; { fprintf(stderr,pat,a1,a2,a3,a4); exit(1); } /*VARARGS1*/ +void warn(pat,a1,a2,a3,a4) char *pat; +int a1,a2,a3,a4; { fprintf(stderr,pat,a1,a2,a3,a4); } diff --git a/x2p/util.h b/x2p/util.h index eeb128ba2c..ef1cd04d04 100644 --- a/x2p/util.h +++ b/x2p/util.h @@ -15,27 +15,21 @@ #define MD_DIR 0 #define MD_FILE 1 -void util_init(); -int doshell(); -char *safemalloc(); -char *saferealloc(); -char *safecpy(); -char *safecat(); -char *cpytill(); -char *cpy2(); -char *instr(); #ifdef SETUIDGID int eaccess(); #endif + char *getwd(); -void cat(); -void prexit(); -char *get_a_line(); -char *savestr(); int makedir(); -void setenv(); -int envix(); -void notincl(); -char *getval(); -void growstr(); -void setdef(); + +char * cpy2 _(( char *to, char *from, int delim )); +char * cpytill _(( char *to, char *from, int delim )); +int croak _(( char *pat, int a1, int a2, int a3, int a4 )); +int envix _(( char *nam )); +void growstr _(( char **strptr, int *curlen, int newlen )); +char * instr _(( char *big, char *little )); +int Myfatal (); +char * safecpy _(( char *to, char *from, int len )); +char * savestr _(( char *str )); +void setenv _(( char *nam, char *val )); +void warn (); diff --git a/x2p/walk.c b/x2p/walk.c index 26e89ae5bd..e4cca450ee 100644 --- a/x2p/walk.c +++ b/x2p/walk.c @@ -8,10 +8,9 @@ * $Log: walk.c,v $ */ -#include "handy.h" #include "EXTERN.h" -#include "util.h" #include "a2p.h" +#include "util.h" bool exitval = FALSE; bool realexit = FALSE; @@ -27,6 +26,15 @@ char *limit; STR *subs; STR *curargs = Nullstr; +void addsemi _(( STR *str )); +void emit_split _(( STR *str, int level )); +void fixtab _(( STR *str, int lvl )); +void numericize _(( int node )); +int prewalk _(( int numit, int level, int node, int *numericptr )); +void tab _(( STR *str, int lvl )); +STR * walk _(( int useval, int level, int node, int *numericptr, int minprec )); + + STR * walk(useval,level,node,numericptr,minprec) int useval; @@ -1547,6 +1555,7 @@ sub Pick {\n\ return str; } +void tab(str,lvl) register STR *str; register int lvl; @@ -1559,6 +1568,7 @@ register int lvl; str_cat(str," "); } +void fixtab(str,lvl) register STR *str; register int lvl; @@ -1578,6 +1588,7 @@ register int lvl; tab(str,lvl); } +void addsemi(str) register STR *str; { @@ -1590,6 +1601,7 @@ register STR *str; str_cat(str,";"); } +void emit_split(str,level) register STR *str; int level; @@ -1624,6 +1636,7 @@ int level; tab(str,level); } +int prewalk(numit,level,node,numericptr) int numit; int level; @@ -1633,8 +1646,6 @@ int *numericptr; register int len; register int type; register int i; - char *t; - char *d, *s; int numarg; int numeric = FALSE; STR *tmpstr; @@ -2046,12 +2057,12 @@ int *numericptr; return 1; } +void numericize(node) register int node; { register int len; register int type; - register int i; STR *tmpstr; STR *tmp2str; int numarg; |