#include #ifndef lint #if 0 static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #else __IDSTRING(yyrcsid, "$NetBSD: skeleton.c,v 1.14 1997/10/20 03:41:16 lukem Exp $"); #endif #endif #include #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYLEX yylex() #define YYEMPTY -1 #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" #line 26 "awkgram.y" #include #include #include "awk.h" void checkdup(Node *list, Cell *item); int yywrap(void) { return(1); } Node *beginloc = 0; Node *endloc = 0; int infunc = 0; /* = 1 if in arglist or body of func */ int inloop = 0; /* = 1 if in while, for, do */ char *curfname = 0; /* current function name */ Node *arglist = 0; /* list of args for current function */ #line 41 "awkgram.y" typedef union { Node *p; Cell *cp; int i; char *s; } YYSTYPE; #line 41 "y.tab.c" #define FIRSTTOKEN 257 #define PROGRAM 258 #define PASTAT 259 #define PASTAT2 260 #define XBEGIN 261 #define XEND 262 #define NL 263 #define ARRAY 264 #define MATCH 265 #define NOTMATCH 266 #define MATCHOP 267 #define FINAL 268 #define DOT 269 #define ALL 270 #define CCL 271 #define NCCL 272 #define CHAR 273 #define OR 274 #define STAR 275 #define QUEST 276 #define PLUS 277 #define EMPTYRE 278 #define AND 279 #define BOR 280 #define APPEND 281 #define EQ 282 #define GE 283 #define GT 284 #define LE 285 #define LT 286 #define NE 287 #define IN 288 #define ARG 289 #define BLTIN 290 #define BREAK 291 #define CLOSE 292 #define CONTINUE 293 #define DELETE 294 #define DO 295 #define EXIT 296 #define FOR 297 #define FUNC 298 #define SUB 299 #define GSUB 300 #define IF 301 #define INDEX 302 #define LSUBSTR 303 #define MATCHFCN 304 #define NEXT 305 #define NEXTFILE 306 #define ADD 307 #define MINUS 308 #define MULT 309 #define DIVIDE 310 #define MOD 311 #define ASSIGN 312 #define ASGNOP 313 #define ADDEQ 314 #define SUBEQ 315 #define MULTEQ 316 #define DIVEQ 317 #define MODEQ 318 #define POWEQ 319 #define PRINT 320 #define PRINTF 321 #define SPRINTF 322 #define ELSE 323 #define INTEST 324 #define CONDEXPR 325 #define POSTINCR 326 #define PREINCR 327 #define POSTDECR 328 #define PREDECR 329 #define VAR 330 #define IVAR 331 #define VARNF 332 #define CALL 333 #define NUMBER 334 #define STRING 335 #define REGEXPR 336 #define GETLINE 337 #define RETURN 338 #define SPLIT 339 #define SUBSTR 340 #define WHILE 341 #define CAT 342 #define NOT 343 #define UMINUS 344 #define POWER 345 #define DECR 346 #define INCR 347 #define INDIRECT 348 #define LASTTOKEN 349 #define YYERRCODE 256 short yylhs[] = { -1, 0, 0, 36, 36, 37, 37, 33, 33, 26, 26, 24, 24, 40, 22, 41, 22, 42, 22, 20, 20, 23, 30, 30, 34, 34, 35, 35, 29, 29, 15, 15, 1, 1, 10, 11, 11, 11, 11, 11, 11, 11, 43, 11, 12, 12, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 5, 5, 7, 7, 7, 39, 39, 28, 28, 28, 28, 31, 31, 9, 9, 44, 13, 32, 32, 14, 14, 14, 14, 14, 14, 14, 14, 27, 27, 16, 16, 45, 46, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 16, 16, 17, 17, 38, 38, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 18, 18, 18, 18, 21, 21, 21, 19, 19, 19, 25, }; short yylen[] = { 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 12, 0, 10, 0, 8, 1, 1, 4, 1, 2, 1, 2, 0, 1, 0, 1, 0, 1, 1, 3, 1, 1, 4, 3, 6, 3, 4, 4, 0, 9, 1, 3, 1, 3, 3, 5, 3, 3, 3, 3, 3, 5, 2, 1, 1, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 2, 1, 1, 3, 3, 1, 3, 0, 1, 3, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 0, 4, 1, 2, 4, 4, 4, 2, 5, 2, 1, 1, 1, 2, 2, 2, 0, 0, 9, 3, 2, 1, 4, 2, 3, 2, 2, 3, 2, 2, 0, 3, 2, 1, 2, 1, 1, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 4, 1, 3, 4, 2, 2, 2, 2, 2, 4, 3, 2, 1, 6, 6, 3, 6, 6, 1, 8, 8, 6, 4, 1, 6, 6, 8, 8, 8, 6, 1, 1, 4, 1, 2, 0, 1, 3, 1, 1, 1, 4, }; short yydefred[] = { 0, 2, 87, 88, 0, 1, 0, 0, 89, 90, 0, 0, 22, 0, 95, 182, 0, 0, 0, 130, 131, 0, 0, 0, 181, 176, 183, 0, 161, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 44, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 148, 149, 177, 0, 0, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 106, 23, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 85, 86, 0, 0, 0, 0, 128, 0, 116, 0, 125, 0, 0, 0, 0, 0, 0, 7, 158, 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 71, 0, 4, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 24, 0, 127, 0, 109, 0, 110, 0, 0, 115, 0, 0, 120, 121, 0, 123, 0, 124, 39, 129, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 40, 41, 8, 0, 0, 0, 96, 143, 0, 179, 0, 0, 0, 165, 146, 0, 0, 0, 73, 0, 0, 0, 36, 175, 25, 108, 0, 114, 31, 0, 0, 0, 122, 0, 11, 0, 126, 112, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 117, 0, 92, 0, 0, 0, 52, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 180, 156, 157, 160, 159, 164, 0, 172, 0, 38, 103, 0, 0, 0, 0, 0, 0, 0, 168, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 162, 163, 171, 0, 0, 0, 0, 170, 169, 43, 0, 0, 18, 0, 0, 0, 113, 16, 0, 0, 14, }; short yydgoto[] = { 4, 5, 122, 208, 53, 209, 143, 210, 40, 41, 42, 43, 44, 45, 123, 245, 124, 125, 46, 47, 62, 226, 126, 127, 251, 128, 129, 186, 6, 7, 130, 255, 273, 224, 187, 184, 91, 92, 49, 131, 364, 359, 350, 308, 54, 205, 290, 203, }; short yysindex[] = { -56, 0, 0, 0, 0, 0, -48, 8245, 0, 0, -101, -101, 0, 9019, 0, 0, 15, 9347, -249, 0, 0, 25, 27, 39, 0, 0, 0, 48, 0, 0, 109, 52, 66, 9347, 9347, 9038, 128, 128, 9347, 7871, -37, 0, -4, 0, -25, 0, -184, -67, 4704, 74, 4704, 4704, 6570, 105, -239, 8458, 9019, 9347, -37, -130, 0, 0, 120, 9019, 9019, 9019, 8510, 9347, -141, 9019, 9019, -180, -180, -180, 0, 0, 0, 0, -168, 9019, 0, 0, 9019, 9019, 9019, 9019, 9019, 9019, -274, 9019, -37, 8570, 8622, 9099, 9347, 9347, 9347, 9347, 9347, 9019, 4704, 8245, 9019, 0, 0, 9019, 0, 0, -91, -23, -23, -274, 0, 8382, 137, 141, -23, -23, 0, 0, 8382, 147, 7871, -23, 0, 4765, 0, 5721, 0, -58, 4704, 9151, 9019, 4827, 5094, 0, 0, 8695, -66, 8695, 174, 0, 7871, 115, 7051, -96, 7137, 7137, 117, 0, 123, -37, 9347, 7137, 7137, 128, 2208, 0, 2208, 2208, 2208, 2208, 2208, 2208, 0, 7233, 0, 8193, 0, 1353, 9347, -180, -35, -35, -180, -180, -180, -101, 5154, 0, 7871, -16, 0, -13, 0, -91, 0, -13, 0, 161, 6656, 0, 6229, 9019, 0, 0, 6656, 0, 9019, 0, 0, 0, -88, 5721, 0, 5721, 5214, 9019, 8307, 221, -85, -37, 0, -18, 7137, 221, 0, 0, 0, 7871, -274, 7871, 0, 0, 8695, 0, 130, 8695, 8695, 0, 0, -37, 33, 8695, 0, 9019, -37, 4704, 0, 0, 0, 0, 9019, 0, 0, 212, -87, 7304, 0, 7304, 0, 5274, 0, 0, 0, 14, 132, 9216, -274, 9216, -37, 8768, 8828, 8880, 9347, 9347, 9347, 9216, 8695, 8695, 0, 7871, 0, 76, -202, 7390, 256, 7461, 261, 195, 6823, 7871, 5541, -7, -9, -274, 76, 76, 0, 0, -30, 0, 65, 9019, 2208, 0, 0, 3456, 8958, 6317, 8307, -37, -37, -37, 8307, 6909, 6980, 0, -101, 0, 0, 0, 0, 0, 0, 8695, 0, 8695, 0, 0, -91, 9019, 304, 320, -274, 229, 9216, 0, 53, 0, 53, 4704, 7557, 321, 7643, 6229, 7714, 76, 9019, 0, 65, 8307, 325, 339, 5601, 0, 0, 0, 304, -91, 5721, 7785, 0, 0, 0, 76, 6229, 0, -23, 5721, 304, 0, 0, 76, 5721, 0, }; short yyrindex[] = { 2901, 0, 0, 0, 0, 0, 2995, 382, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3261, 0, 0, 0, 0, 0, 0, 0, 0, 63, 2636, 0, 2782, 0, 2901, 0, 1665, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2018, 1571, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 495, 583, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, 0, 0, 0, 0, 0, 4376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, 0, 0, 0, 0, 5988, 0, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 323, 0, 0, 0, 0, 0, 2283, 0, 0, 0, 3348, 151, 0, 645, 1139, 2345, 3323, 3410, 3439, 0, 0, 0, 3855, 0, 57, 0, 989, 1836, 1930, 1077, 1171, 1483, 2834, 0, 0, 96, 0, 0, 4314, 0, 4376, 0, 4498, 0, -8, 0, 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5661, 0, 0, 0, 0, 0, -12, 134, 41, 8042, 0, 4229, 0, 7967, 0, 0, 0, 355, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2371, 0, 0, 0, 0, 2465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, 0, 0, 0, 4643, 0, 0, 0, 0, 8124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 269, 0, 0, 7967, 0, 7967, 0, 0, 144, 0, 0, 9277, 0, 6048, 6108, 0, 0, 0, 0, 170, 0, 449, 0, 0, 0, 535, 795, 46, 50, 54, 80, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7967, 0, 363, 0, 6168, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 0, 5782, 0, 0, 0, 0, 0, 6435, 363, 0, 0, 0, 0, 0, 0, 6495, 0, 0, }; short yygindex[] = { 0, 0, 4176, -191, -182, 0, 37, 0, 3893, -14, 311, 315, 0, -49, -138, -304, 400, 23, 3676, -26, 0, 0, 0, 0, 0, 0, 0, -97, 0, 381, 7, 0, 237, 356, -28, -116, 369, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 9695 short yytable[] = { 97, 174, 97, 3, 105, 96, 94, 96, 95, 105, 93, 9, 93, 188, 48, 15, 191, 50, 51, 194, 195, 74, 12, 197, 105, 256, 199, 105, 135, 80, 157, 348, 80, 104, 3, 82, 185, 135, 174, 264, 99, 174, 174, 174, 174, 174, 174, 80, 174, 100, 320, 104, 360, 82, 244, 55, 24, 61, 26, 174, 174, 218, 164, 34, 174, 63, 294, 64, 297, 241, 298, 299, 300, 133, 134, 46, 304, 239, 46, 65, 183, 60, 102, 215, 61, 189, 319, 81, 66, 144, 81, 99, 69, 243, 174, 100, 59, 140, 61, 248, 102, 61, 148, 150, 61, 81, 70, 34, 48, 99, 34, 325, 80, 100, 132, 61, 61, 212, 82, 12, 61, 101, 34, 178, 174, 174, 144, 46, 309, 102, 144, 144, 144, 144, 144, 341, 144, 59, 47, 101, 59, 47, 181, 59, 60, 152, 138, 144, 144, 135, 61, 70, 144, 206, 59, 59, 223, 183, 229, 135, 145, 135, 103, 104, 230, 98, 246, 135, 321, 155, 81, 272, 182, 292, 135, 83, 135, 192, 276, 278, 61, 193, 144, 154, 237, 60, 34, 198, 60, 59, 47, 60, 70, 83, 270, 70, 265, 244, 70, 266, 1, 285, 60, 60, 335, 204, 279, 2, 295, 70, 70, 84, 144, 144, 70, 8, 103, 104, 244, 59, 154, 222, 220, 154, 154, 154, 154, 154, 154, 84, 154, 105, 296, 356, 225, 250, 314, 60, 2, 135, 182, 154, 154, 212, 70, 212, 154, 212, 212, 212, 240, 80, 242, 212, 182, 104, 183, 82, 83, 322, 282, 361, 174, 174, 174, 135, 333, 60, 174, 80, 340, 284, 80, 135, 70, 82, 154, 291, 82, 283, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 183, 174, 84, 267, 218, 311, 339, 174, 174, 174, 313, 174, 102, 174, 154, 154, 98, 81, 98, 323, 212, 99, 174, 331, 218, 100, 61, 61, 61, 183, 15, 174, 34, 34, 34, 81, 103, 104, 81, 174, 174, 174, 174, 174, 174, 61, 174, 307, 174, 174, 15, 101, 174, 272, 174, 174, 174, 174, 144, 144, 144, 324, 344, 61, 144, 59, 59, 59, 338, 34, 346, 24, 178, 26, 352, 178, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 353, 144, 32, 24, 25, 26, 33, 144, 144, 144, 30, 144, 42, 144, 59, 67, 78, 83, 15, 78, 79, 38, 144, 79, 30, 60, 60, 60, 137, 139, 177, 144, 70, 70, 70, 83, 179, 15, 83, 144, 144, 144, 144, 144, 144, 101, 144, 0, 144, 144, 70, 70, 144, 84, 144, 144, 144, 144, 0, 24, 25, 26, 60, 0, 154, 154, 154, 0, 0, 70, 154, 84, 0, 0, 84, 0, 0, 38, 24, 25, 26, 0, 154, 154, 154, 154, 154, 154, 154, 0, 154, 154, 154, 154, 0, 154, 38, 0, 0, 0, 0, 154, 154, 154, 286, 154, 287, 154, 70, 0, 53, 0, 0, 53, 0, 140, 154, 0, 0, 0, 0, 0, 227, 228, 0, 154, 0, 53, 53, 232, 233, 0, 53, 154, 154, 154, 154, 154, 154, 0, 154, 0, 154, 154, 0, 201, 154, 202, 154, 154, 154, 154, 140, 201, 201, 140, 140, 140, 140, 140, 140, 0, 140, 0, 0, 0, 0, 0, 0, 48, 0, 0, 48, 140, 140, 0, 0, 0, 140, 337, 0, 0, 0, 0, 0, 263, 48, 48, 0, 49, 268, 269, 49, 53, 0, 0, 51, 261, 201, 51, 0, 0, 274, 139, 0, 355, 49, 49, 140, 0, 0, 0, 0, 51, 51, 0, 0, 363, 51, 0, 0, 0, 0, 252, 262, 253, 201, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 140, 140, 139, 0, 0, 139, 139, 139, 139, 139, 139, 0, 139, 0, 48, 0, 0, 315, 317, 0, 0, 0, 0, 139, 139, 0, 0, 63, 139, 0, 0, 0, 0, 289, 49, 0, 0, 0, 0, 0, 0, 51, 0, 328, 330, 261, 0, 0, 261, 261, 261, 261, 0, 0, 0, 261, 0, 0, 139, 141, 0, 0, 0, 139, 201, 0, 0, 0, 63, 0, 0, 63, 262, 0, 63, 262, 262, 262, 262, 0, 0, 0, 262, 0, 0, 63, 63, 0, 139, 139, 63, 0, 261, 0, 53, 0, 141, 0, 0, 141, 141, 141, 141, 141, 141, 0, 141, 0, 0, 0, 53, 53, 53, 0, 0, 53, 0, 141, 141, 262, 63, 0, 141, 0, 0, 0, 201, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 140, 140, 140, 362, 0, 0, 140, 0, 365, 0, 0, 0, 63, 0, 141, 48, 0, 0, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 53, 140, 0, 48, 0, 49, 48, 140, 140, 140, 0, 140, 51, 140, 141, 141, 0, 0, 0, 0, 0, 0, 140, 49, 0, 0, 49, 0, 51, 51, 51, 140, 0, 51, 0, 0, 0, 0, 0, 140, 140, 140, 140, 140, 140, 0, 140, 0, 140, 140, 50, 0, 140, 50, 0, 140, 140, 140, 139, 139, 139, 0, 0, 0, 139, 0, 0, 50, 50, 0, 0, 0, 50, 0, 0, 0, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, 139, 0, 0, 0, 0, 0, 139, 139, 139, 0, 139, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 139, 63, 63, 63, 0, 0, 0, 0, 139, 139, 139, 139, 139, 139, 50, 139, 0, 139, 139, 63, 63, 139, 0, 0, 139, 139, 139, 0, 0, 0, 0, 0, 0, 141, 141, 141, 0, 0, 63, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 0, 141, 0, 0, 0, 0, 0, 141, 141, 141, 0, 141, 0, 141, 63, 0, 0, 0, 0, 0, 0, 136, 141, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 141, 141, 141, 0, 141, 0, 141, 141, 0, 0, 141, 0, 0, 141, 141, 141, 136, 0, 0, 136, 136, 136, 136, 136, 136, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 0, 0, 0, 136, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 135, 0, 50, 0, 0, 136, 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, 136, 136, 135, 0, 0, 135, 135, 135, 135, 135, 135, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 0, 0, 64, 135, 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, 135, 137, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 0, 135, 135, 64, 0, 0, 0, 0, 0, 137, 0, 0, 137, 137, 137, 137, 137, 137, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 0, 64, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 0, 0, 0, 136, 0, 0, 0, 0, 0, 64, 0, 137, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 0, 136, 0, 0, 0, 0, 0, 136, 136, 136, 0, 136, 0, 136, 137, 137, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 0, 136, 0, 136, 136, 0, 0, 136, 0, 0, 136, 136, 136, 135, 135, 135, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 0, 135, 0, 0, 0, 0, 0, 135, 135, 135, 0, 135, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, 56, 0, 0, 33, 0, 34, 135, 64, 64, 64, 0, 0, 0, 0, 135, 135, 135, 135, 135, 135, 0, 135, 0, 135, 135, 64, 64, 135, 0, 0, 135, 135, 135, 0, 0, 0, 0, 0, 0, 137, 137, 137, 0, 0, 64, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 137, 0, 0, 0, 0, 0, 137, 137, 137, 0, 137, 0, 137, 64, 78, 0, 0, 0, 0, 0, 138, 137, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 0, 137, 0, 137, 137, 0, 0, 137, 0, 0, 137, 137, 137, 138, 0, 0, 138, 138, 138, 138, 138, 138, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 138, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 138, 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, 138, 138, 173, 0, 0, 173, 173, 173, 173, 173, 173, 0, 173, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 0, 80, 0, 173, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 173, 173, 57, 0, 0, 36, 37, 38, 173, 0, 0, 173, 173, 173, 173, 173, 173, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 138, 0, 0, 0, 0, 0, 138, 138, 138, 0, 138, 0, 138, 173, 173, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, 138, 138, 0, 138, 0, 138, 138, 0, 0, 138, 0, 0, 138, 138, 138, 173, 173, 173, 0, 133, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 0, 173, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 0, 173, 133, 133, 0, 133, 133, 133, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 173, 133, 133, 0, 0, 0, 133, 0, 173, 173, 173, 173, 173, 173, 0, 173, 0, 173, 173, 0, 0, 173, 0, 173, 0, 0, 173, 0, 0, 0, 0, 0, 0, 173, 173, 173, 133, 134, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 0, 173, 173, 173, 173, 173, 173, 173, 173, 173, 0, 173, 0, 133, 133, 0, 0, 173, 173, 173, 0, 173, 0, 173, 134, 134, 0, 134, 134, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 134, 134, 0, 0, 0, 134, 0, 173, 173, 173, 173, 173, 173, 0, 173, 0, 173, 173, 0, 0, 173, 0, 173, 0, 0, 173, 0, 0, 0, 0, 147, 0, 0, 0, 0, 134, 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, 134, 134, 0, 0, 0, 147, 147, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 147, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 0, 133, 0, 0, 0, 0, 0, 133, 133, 133, 0, 133, 0, 133, 147, 147, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 133, 133, 133, 0, 133, 0, 133, 133, 0, 0, 133, 0, 0, 133, 133, 133, 0, 0, 0, 0, 0, 0, 134, 134, 134, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 0, 134, 0, 0, 0, 0, 0, 134, 134, 134, 0, 134, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 56, 0, 0, 33, 134, 34, 0, 0, 0, 0, 0, 0, 134, 134, 134, 134, 134, 134, 0, 134, 0, 134, 134, 0, 0, 134, 0, 0, 134, 134, 134, 147, 147, 147, 0, 153, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 147, 0, 0, 0, 0, 0, 147, 147, 147, 0, 147, 0, 147, 153, 153, 0, 0, 153, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 147, 153, 153, 0, 0, 65, 153, 0, 147, 147, 147, 147, 147, 147, 0, 147, 0, 147, 147, 0, 0, 147, 0, 0, 147, 147, 147, 0, 0, 0, 0, 152, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 65, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 65, 0, 153, 153, 65, 0, 0, 152, 152, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 0, 0, 0, 152, 0, 0, 0, 65, 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, 152, 132, 0, 0, 65, 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, 152, 152, 0, 15, 16, 0, 17, 0, 0, 0, 0, 132, 132, 19, 20, 132, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 0, 0, 0, 132, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 153, 153, 153, 31, 32, 0, 153, 57, 0, 0, 36, 37, 38, 0, 132, 0, 0, 0, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 0, 153, 0, 0, 0, 0, 0, 153, 153, 153, 0, 153, 0, 153, 132, 132, 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, 153, 65, 65, 65, 0, 0, 0, 0, 153, 153, 153, 153, 153, 153, 0, 153, 0, 153, 153, 65, 65, 153, 0, 0, 153, 153, 153, 152, 152, 152, 0, 77, 0, 152, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, 152, 0, 0, 0, 0, 0, 152, 152, 152, 0, 152, 0, 152, 77, 77, 0, 0, 77, 0, 65, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 152, 77, 77, 0, 0, 0, 77, 0, 152, 152, 152, 152, 152, 152, 0, 152, 0, 152, 152, 0, 0, 152, 0, 0, 152, 152, 152, 0, 0, 0, 0, 0, 0, 132, 132, 132, 77, 75, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 0, 132, 0, 77, 77, 0, 0, 132, 132, 132, 0, 132, 0, 132, 75, 75, 0, 0, 75, 0, 0, 0, 132, 0, 0, 0, 35, 0, 0, 0, 0, 132, 75, 75, 0, 0, 0, 75, 0, 132, 132, 132, 132, 132, 132, 0, 132, 0, 132, 132, 0, 0, 132, 0, 0, 132, 132, 132, 0, 0, 0, 0, 0, 0, 0, 0, 35, 75, 0, 35, 0, 35, 0, 35, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 37, 0, 37, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 77, 77, 77, 0, 28, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 77, 0, 0, 0, 0, 0, 77, 77, 77, 0, 77, 0, 77, 28, 0, 0, 28, 0, 28, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 0, 77, 0, 77, 77, 0, 0, 77, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 29, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 75, 0, 28, 0, 0, 0, 75, 75, 75, 0, 75, 0, 75, 29, 0, 0, 29, 0, 29, 0, 29, 35, 35, 35, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 75, 75, 75, 0, 75, 0, 75, 75, 35, 35, 75, 35, 0, 75, 75, 75, 0, 35, 35, 35, 0, 35, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 29, 35, 0, 35, 35, 37, 37, 35, 37, 0, 35, 35, 35, 0, 37, 37, 37, 0, 37, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 28, 28, 37, 37, 37, 37, 37, 37, 0, 37, 0, 37, 37, 0, 0, 37, 0, 0, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 28, 28, 0, 28, 0, 0, 0, 0, 0, 28, 28, 28, 0, 28, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 28, 28, 28, 28, 28, 28, 0, 28, 0, 28, 28, 0, 0, 28, 0, 0, 28, 28, 28, 0, 0, 0, 0, 0, 0, 29, 29, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 29, 0, 29, 0, 0, 0, 0, 0, 29, 29, 29, 0, 29, 155, 29, 0, 155, 155, 155, 155, 155, 155, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 155, 155, 0, 0, 66, 155, 29, 29, 29, 29, 29, 29, 0, 29, 0, 29, 29, 0, 0, 29, 0, 0, 29, 29, 29, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 66, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 0, 155, 155, 66, 0, 74, 74, 0, 74, 74, 74, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 74, 0, 0, 67, 74, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 74, 0, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 67, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, 0, 74, 74, 67, 0, 0, 0, 0, 0, 0, 68, 0, 0, 68, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 68, 68, 33, 0, 34, 68, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 259, 0, 0, 155, 155, 155, 0, 0, 0, 155, 0, 0, 0, 68, 67, 0, 0, 0, 0, 0, 0, 155, 155, 155, 155, 155, 155, 155, 0, 155, 155, 0, 155, 0, 155, 0, 0, 0, 0, 0, 155, 155, 155, 68, 155, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 155, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 155, 155, 155, 0, 155, 0, 155, 155, 66, 66, 155, 0, 155, 155, 155, 74, 74, 74, 0, 0, 0, 74, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 74, 74, 0, 74, 74, 74, 74, 74, 74, 74, 0, 74, 0, 74, 0, 0, 0, 0, 0, 74, 74, 74, 0, 74, 0, 74, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 74, 74, 74, 0, 74, 0, 74, 74, 67, 67, 74, 0, 59, 74, 74, 0, 0, 0, 0, 68, 68, 68, 0, 0, 0, 68, 0, 67, 59, 59, 59, 75, 76, 59, 59, 0, 0, 68, 68, 0, 0, 0, 257, 0, 0, 0, 0, 59, 0, 0, 0, 0, 59, 0, 80, 81, 68, 0, 0, 0, 0, 0, 59, 258, 15, 16, 67, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 59, 59, 59, 59, 59, 59, 0, 68, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 59, 57, 0, 0, 36, 37, 38, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 59, 0, 59, 59, 0, 0, 0, 0, 59, 59, 59, 234, 59, 0, 59, 59, 59, 59, 59, 59, 0, 59, 0, 59, 0, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 62, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 59, 62, 59, 0, 62, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 62, 62, 0, 0, 0, 62, 0, 0, 0, 0, 59, 0, 59, 71, 72, 73, 0, 0, 77, 90, 213, 0, 213, 0, 213, 213, 213, 59, 59, 59, 213, 0, 90, 0, 59, 62, 0, 73, 59, 0, 59, 0, 0, 59, 59, 0, 0, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 59, 59, 59, 59, 0, 62, 0, 59, 59, 59, 0, 0, 0, 171, 172, 173, 174, 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 342, 0, 343, 0, 59, 0, 59, 0, 59, 0, 0, 90, 0, 59, 0, 0, 0, 0, 0, 0, 211, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 90, 0, 90, 0, 90, 90, 0, 0, 0, 0, 231, 90, 90, 0, 90, 0, 90, 90, 90, 90, 90, 90, 0, 90, 0, 90, 0, 90, 236, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 174, 90, 0, 174, 0, 174, 174, 90, 174, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 260, 0, 0, 174, 0, 0, 90, 174, 0, 0, 0, 90, 0, 90, 0, 62, 62, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 62, 0, 0, 0, 0, 90, 0, 90, 0, 0, 0, 0, 0, 0, 0, 211, 0, 211, 62, 211, 211, 211, 301, 302, 303, 211, 0, 0, 0, 90, 0, 0, 0, 90, 174, 90, 0, 0, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 260, 0, 52, 260, 260, 260, 260, 0, 0, 0, 260, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 90, 0, 90, 0, 90, 0, 142, 144, 0, 260, 0, 0, 0, 0, 146, 147, 142, 142, 0, 90, 153, 154, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 158, 159, 160, 161, 162, 163, 0, 165, 173, 167, 169, 173, 173, 173, 173, 173, 173, 39, 173, 39, 180, 0, 0, 142, 0, 0, 0, 0, 0, 173, 173, 190, 0, 0, 173, 0, 0, 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 174, 219, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 174, 174, 0, 174, 174, 174, 174, 174, 174, 0, 174, 174, 0, 174, 0, 0, 0, 0, 0, 0, 174, 174, 0, 174, 0, 174, 0, 0, 0, 173, 27, 27, 0, 27, 174, 27, 0, 27, 0, 0, 0, 0, 0, 174, 0, 247, 0, 0, 0, 27, 249, 174, 174, 174, 174, 174, 174, 0, 174, 52, 174, 174, 0, 0, 174, 0, 174, 174, 174, 174, 0, 0, 0, 0, 0, 0, 271, 0, 0, 275, 277, 0, 0, 0, 0, 280, 0, 281, 0, 0, 0, 0, 26, 0, 142, 26, 0, 26, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 0, 27, 0, 0, 0, 0, 305, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 173, 334, 0, 0, 173, 336, 0, 26, 0, 26, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 0, 173, 351, 0, 0, 173, 173, 173, 0, 173, 0, 0, 0, 0, 0, 0, 173, 173, 0, 173, 0, 173, 0, 0, 0, 0, 107, 0, 0, 107, 0, 107, 0, 107, 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, 0, 107, 0, 173, 173, 173, 173, 173, 173, 0, 173, 0, 173, 173, 27, 0, 173, 0, 173, 0, 0, 173, 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, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 27, 27, 27, 107, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 0, 27, 0, 0, 27, 27, 27, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 0, 26, 26, 26, 119, 0, 0, 119, 0, 119, 0, 119, 0, 0, 0, 0, 0, 26, 26, 26, 26, 0, 0, 119, 0, 0, 0, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 0, 26, 0, 0, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 119, 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 107, 0, 107, 107, 107, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 107, 107, 107, 107, 0, 0, 108, 0, 0, 12, 107, 107, 107, 107, 107, 107, 0, 107, 107, 107, 107, 107, 0, 107, 0, 0, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 12, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 119, 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, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 119, 119, 119, 119, 0, 119, 119, 119, 12, 0, 216, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 119, 119, 119, 119, 107, 0, 0, 0, 0, 0, 119, 119, 119, 119, 119, 119, 0, 119, 119, 119, 119, 119, 0, 119, 0, 0, 119, 119, 119, 0, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 118, 119, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 0, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 118, 119, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 0, 0, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 118, 119, 23, 0, 0, 0, 108, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 12, 0, 217, 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, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 12, 0, 238, 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, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 12, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 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, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 12, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 118, 119, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 118, 119, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 118, 119, 23, 288, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 118, 119, 23, 0, 0, 0, 108, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 12, 0, 318, 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, 118, 0, 0, 118, 0, 118, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 12, 0, 354, 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, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 118, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 0, 26, 0, 26, 0, 26, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 12, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 118, 119, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 118, 119, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, 118, 0, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 118, 118, 118, 0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, 118, 118, 0, 118, 0, 0, 118, 118, 118, 15, 16, 109, 17, 110, 111, 112, 113, 114, 0, 19, 20, 115, 21, 0, 22, 116, 117, 111, 0, 0, 111, 0, 111, 0, 111, 0, 0, 26, 0, 0, 118, 119, 23, 0, 0, 0, 111, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 120, 31, 32, 121, 0, 35, 0, 0, 36, 37, 38, 0, 26, 26, 0, 26, 0, 26, 0, 0, 0, 0, 26, 26, 0, 26, 0, 26, 0, 21, 0, 0, 21, 0, 21, 0, 21, 0, 0, 0, 0, 0, 0, 26, 26, 26, 0, 0, 21, 0, 0, 0, 111, 26, 26, 26, 26, 26, 26, 0, 26, 0, 26, 26, 0, 0, 26, 0, 0, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 184, 0, 184, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 21, 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, 17, 0, 0, 17, 0, 17, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 111, 17, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 111, 111, 111, 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 111, 111, 0, 111, 0, 0, 111, 111, 111, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 21, 21, 21, 21, 0, 21, 21, 21, 0, 0, 56, 0, 0, 33, 0, 34, 0, 184, 0, 0, 0, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 0, 21, 21, 21, 21, 21, 0, 21, 0, 0, 21, 21, 21, 184, 184, 184, 184, 184, 184, 184, 184, 184, 0, 184, 184, 184, 184, 0, 184, 184, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 184, 184, 184, 0, 0, 0, 0, 0, 0, 0, 184, 184, 184, 184, 184, 184, 0, 184, 184, 184, 184, 184, 0, 184, 0, 0, 184, 184, 184, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 0, 17, 17, 17, 15, 0, 0, 15, 0, 15, 0, 15, 0, 0, 106, 0, 0, 17, 17, 17, 0, 0, 0, 15, 0, 0, 0, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 0, 17, 0, 0, 17, 17, 17, 0, 15, 16, 0, 17, 0, 111, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 13, 0, 0, 13, 0, 13, 0, 13, 0, 0, 0, 0, 0, 0, 118, 119, 23, 0, 0, 13, 0, 0, 0, 15, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 258, 15, 16, 0, 17, 56, 136, 0, 33, 135, 34, 19, 20, 13, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 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, 15, 0, 0, 78, 0, 56, 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 89, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 0, 15, 0, 78, 15, 15, 15, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 13, 0, 13, 13, 13, 13, 13, 79, 13, 0, 0, 13, 13, 13, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 56, 316, 0, 33, 135, 34, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 182, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 78, 17, 56, 327, 0, 33, 135, 34, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 329, 0, 33, 135, 34, 0, 0, 0, 0, 0, 0, 0, 78, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 56, 136, 0, 33, 0, 34, 0, 0, 0, 0, 0, 80, 81, 78, 82, 83, 84, 85, 86, 87, 88, 15, 16, 89, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 78, 79, 56, 0, 0, 33, 135, 34, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 89, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 79, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 80, 81, 78, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 56, 0, 0, 33, 0, 34, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 235, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 79, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 56, 272, 0, 33, 0, 34, 19, 20, 0, 21, 0, 22, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 78, 17, 56, 310, 0, 33, 0, 34, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 56, 312, 0, 33, 0, 34, 0, 0, 0, 0, 0, 80, 81, 78, 82, 83, 84, 85, 86, 87, 88, 15, 16, 89, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 79, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 80, 81, 78, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 56, 345, 0, 33, 0, 34, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 78, 17, 56, 347, 0, 33, 0, 34, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 79, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 56, 0, 0, 33, 0, 34, 19, 20, 0, 21, 0, 22, 0, 78, 0, 0, 0, 0, 0, 349, 0, 0, 0, 89, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 56, 358, 0, 33, 0, 34, 0, 0, 0, 0, 0, 80, 81, 78, 82, 83, 84, 85, 86, 87, 88, 15, 16, 89, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 78, 79, 56, 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 89, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 79, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 80, 81, 78, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 93, 0, 0, 93, 0, 93, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 79, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 0, 0, 0, 0, 58, 58, 19, 20, 58, 21, 0, 22, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 58, 58, 0, 0, 0, 58, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 56, 56, 58, 0, 56, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 56, 56, 0, 0, 0, 56, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 93, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 93, 93, 56, 93, 93, 93, 93, 93, 93, 93, 93, 93, 0, 93, 0, 0, 0, 0, 0, 0, 93, 93, 0, 93, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 93, 34, 0, 14, 0, 0, 0, 0, 93, 93, 93, 93, 93, 93, 0, 93, 58, 93, 93, 0, 58, 93, 0, 0, 93, 93, 93, 0, 78, 0, 0, 0, 58, 58, 58, 0, 0, 58, 0, 0, 0, 58, 58, 58, 0, 58, 0, 0, 0, 0, 0, 0, 58, 58, 0, 58, 0, 58, 56, 0, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 12, 0, 259, 0, 58, 58, 58, 58, 58, 58, 0, 58, 0, 58, 58, 0, 0, 58, 0, 56, 58, 58, 58, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 0, 0, 56, 0, 0, 0, 56, 56, 56, 0, 56, 0, 0, 0, 0, 0, 13, 56, 56, 33, 56, 34, 56, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, 79, 56, 0, 56, 56, 0, 0, 56, 0, 0, 56, 56, 56, 0, 0, 82, 83, 84, 85, 86, 87, 88, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 13, 141, 0, 33, 0, 34, 0, 14, 10, 11, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 15, 16, 57, 17, 0, 36, 37, 38, 0, 18, 19, 20, 0, 21, 0, 22, 13, 149, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 257, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 80, 81, 35, 0, 0, 36, 37, 38, 0, 258, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 13, 22, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 182, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 13, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 15, 16, 35, 17, 0, 36, 37, 38, 0, 293, 19, 20, 33, 21, 34, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 166, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 15, 16, 0, 17, 0, 0, 0, 0, 0, 293, 19, 20, 33, 21, 34, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 15, 16, 35, 17, 0, 36, 37, 38, 0, 293, 19, 20, 33, 21, 34, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 218, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 56, 22, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 166, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 13, 17, 0, 33, 0, 34, 0, 14, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 56, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 0, 23, 168, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 56, 0, 0, 33, 218, 34, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 15, 16, 35, 17, 0, 36, 37, 38, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 207, 0, 0, 33, 0, 34, 0, 14, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 257, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 15, 16, 0, 17, 0, 0, 0, 0, 0, 293, 19, 20, 33, 21, 34, 22, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 26, 19, 20, 26, 21, 26, 22, 26, 0, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 23, 22, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 23, 0, 35, 0, 0, 36, 37, 38, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 56, 15, 16, 33, 17, 34, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 15, 16, 57, 17, 0, 36, 37, 38, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 0, 0, 0, 0, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 35, 0, 0, 36, 37, 38, 0, 26, 26, 0, 26, 0, 0, 0, 0, 0, 0, 26, 26, 0, 26, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 0, 26, 0, 26, 26, 0, 0, 26, 0, 0, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 0, 17, 0, 0, 0, 0, 0, 0, 19, 20, 0, 21, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 0, 30, 0, 31, 32, 0, 0, 57, 0, 0, 36, 37, 38, }; short yycheck[] = { 37, 0, 37, 59, 91, 42, 43, 42, 45, 41, 47, 59, 47, 110, 7, 289, 113, 10, 11, 116, 117, 35, 123, 120, 91, 207, 123, 59, 44, 41, 79, 335, 44, 41, 59, 41, 59, 44, 37, 124, 44, 40, 41, 42, 43, 44, 45, 59, 47, 42, 59, 59, 356, 59, 192, 40, 330, 0, 332, 58, 59, 263, 88, 0, 63, 40, 257, 40, 259, 185, 261, 262, 263, 50, 51, 41, 267, 93, 44, 40, 108, 330, 41, 132, 333, 111, 93, 41, 40, 0, 44, 41, 40, 190, 93, 41, 0, 336, 41, 196, 59, 44, 65, 66, 47, 59, 40, 44, 101, 59, 47, 293, 124, 59, 40, 58, 59, 131, 124, 123, 63, 41, 59, 100, 123, 124, 37, 93, 330, 313, 41, 42, 43, 44, 45, 326, 47, 41, 41, 59, 44, 44, 105, 47, 0, 286, 41, 58, 59, 44, 93, 0, 63, 130, 58, 59, 41, 185, 41, 44, 40, 44, 346, 347, 41, 345, 192, 44, 284, 337, 124, 41, 263, 41, 44, 41, 44, 40, 227, 228, 123, 40, 93, 0, 177, 41, 123, 40, 44, 93, 93, 47, 41, 59, 220, 44, 281, 335, 47, 284, 256, 288, 58, 59, 320, 263, 232, 263, 257, 58, 59, 41, 123, 124, 63, 263, 346, 347, 356, 123, 37, 47, 288, 40, 41, 42, 43, 44, 45, 59, 47, 263, 258, 349, 330, 323, 41, 93, 263, 44, 263, 58, 59, 257, 93, 259, 63, 261, 262, 263, 263, 263, 91, 267, 263, 263, 284, 263, 124, 285, 237, 358, 261, 262, 263, 44, 315, 123, 267, 281, 41, 59, 284, 44, 123, 281, 93, 263, 284, 242, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 320, 292, 124, 313, 263, 41, 324, 298, 299, 300, 41, 302, 263, 304, 123, 124, 345, 263, 345, 341, 326, 263, 313, 308, 263, 263, 261, 262, 263, 349, 289, 322, 261, 262, 263, 281, 346, 347, 284, 330, 331, 332, 333, 334, 335, 280, 337, 263, 339, 340, 289, 263, 343, 41, 345, 346, 347, 348, 261, 262, 263, 288, 331, 298, 267, 261, 262, 263, 40, 298, 41, 330, 41, 332, 41, 44, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 41, 292, 0, 330, 331, 332, 0, 298, 299, 300, 59, 302, 123, 304, 298, 286, 41, 263, 289, 44, 41, 348, 313, 44, 41, 261, 262, 263, 52, 53, 99, 322, 261, 262, 263, 281, 101, 289, 284, 330, 331, 332, 333, 334, 335, 44, 337, -1, 339, 340, 279, 280, 343, 263, 345, 346, 347, 348, -1, 330, 331, 332, 298, -1, 261, 262, 263, -1, -1, 298, 267, 281, -1, -1, 284, -1, -1, 348, 330, 331, 332, -1, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, -1, 292, 348, -1, -1, -1, -1, 298, 299, 300, 247, 302, 249, 304, 337, -1, 41, -1, -1, 44, -1, 0, 313, -1, -1, -1, -1, -1, 146, 147, -1, 322, -1, 58, 59, 153, 154, -1, 63, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, 125, 343, 127, 345, 346, 347, 348, 37, 133, 134, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, 58, 59, -1, -1, -1, 63, 322, -1, -1, -1, -1, -1, 209, 58, 59, -1, 41, 214, 215, 44, 124, -1, -1, 41, 208, 178, 44, -1, -1, 226, 0, -1, 348, 58, 59, 93, -1, -1, -1, -1, 58, 59, -1, -1, 360, 63, -1, -1, -1, -1, 203, 208, 205, 206, -1, -1, -1, -1, -1, 256, -1, -1, -1, -1, -1, 123, 124, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, 124, -1, -1, 279, 280, -1, -1, -1, -1, 58, 59, -1, -1, 0, 63, -1, -1, -1, -1, 251, 124, -1, -1, -1, -1, -1, -1, 124, -1, 305, 306, 294, -1, -1, 297, 298, 299, 300, -1, -1, -1, 304, -1, -1, 93, 0, -1, -1, -1, 325, 282, -1, -1, -1, 41, -1, -1, 44, 294, -1, 47, 297, 298, 299, 300, -1, -1, -1, 304, -1, -1, 58, 59, -1, 123, 124, 63, -1, 341, -1, 263, -1, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, 279, 280, 281, -1, -1, 284, -1, 58, 59, 341, 93, -1, 63, -1, -1, -1, 344, -1, -1, -1, -1, -1, 350, -1, -1, -1, -1, -1, 261, 262, 263, 359, -1, -1, 267, -1, 364, -1, -1, -1, 123, -1, 93, 263, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 337, 292, -1, 281, -1, 263, 284, 298, 299, 300, -1, 302, 263, 304, 123, 124, -1, -1, -1, -1, -1, -1, 313, 281, -1, -1, 284, -1, 279, 280, 281, 322, -1, 284, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 41, -1, 343, 44, -1, 346, 347, 348, 261, 262, 263, -1, -1, -1, 267, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, 261, 262, 263, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, 124, 337, -1, 339, 340, 279, 280, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, 298, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 337, -1, -1, -1, -1, -1, -1, 0, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, 263, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, 281, 0, -1, 284, -1, -1, 93, -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, 123, 124, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, 0, 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, 0, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, 123, 124, 63, -1, -1, -1, -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, 93, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, 123, -1, 93, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 123, 124, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, 40, -1, -1, 43, -1, 45, 322, 261, 262, 263, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 279, 280, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, 298, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 337, 124, -1, -1, -1, -1, -1, 0, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 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, 0, -1, -1, -1, -1, 93, -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, 123, 124, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, 279, -1, 63, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, 93, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 123, 124, 343, -1, -1, 346, 347, 348, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 123, 124, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 261, 262, 263, -1, 0, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, 41, -1, 43, 44, 45, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, 58, 59, -1, -1, -1, 63, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, 345, -1, -1, 348, -1, -1, -1, -1, -1, -1, 261, 262, 263, 93, 0, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, 123, 124, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, 58, 59, -1, -1, -1, 63, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, 345, -1, -1, 348, -1, -1, -1, -1, 0, -1, -1, -1, -1, 93, -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, 123, 124, -1, -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 123, 124, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, 40, -1, -1, 43, 322, 45, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 261, 262, 263, -1, 0, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, 41, -1, -1, 44, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, 58, 59, -1, -1, 0, 63, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, 0, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, 123, 124, 63, -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, 93, -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, 0, -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, 123, 124, -1, 289, 290, -1, 292, -1, -1, -1, -1, 40, 41, 299, 300, 44, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, 261, 262, 263, 339, 340, -1, 267, 343, -1, -1, 346, 347, 348, -1, 93, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 123, 124, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, 261, 262, 263, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 279, 280, 343, -1, -1, 346, 347, 348, 261, 262, 263, -1, 0, -1, 267, -1, -1, -1, -1, 298, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, 41, -1, -1, 44, -1, 337, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, 58, 59, -1, -1, -1, 63, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 261, 262, 263, 93, 0, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, 123, 124, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, 41, -1, -1, 44, -1, -1, -1, 313, -1, -1, -1, 0, -1, -1, -1, -1, 322, 58, 59, -1, -1, -1, 63, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, 40, 93, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, 59, -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, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 261, 262, 263, -1, 0, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, 0, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, 123, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, 40, -1, -1, 43, -1, 45, -1, 47, 261, 262, 263, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 261, 262, 263, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, 123, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, 261, 262, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 261, 262, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, 37, 304, -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, 58, 59, -1, -1, 0, 63, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, 123, 124, 63, -1, 40, 41, -1, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, 0, 63, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, 93, -1, -1, -1, -1, 123, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, 123, 124, 63, -1, -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, 58, 59, 43, -1, 45, 63, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, 63, -1, -1, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, 93, 123, -1, -1, -1, -1, -1, -1, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, 123, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, 261, 262, 263, -1, -1, -1, -1, -1, -1, -1, 333, 334, 335, -1, 337, -1, 339, 340, 279, 280, 343, -1, 345, 346, 347, 261, 262, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, 298, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, -1, 290, -1, 292, -1, -1, -1, -1, -1, 298, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, 337, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, 261, 262, 263, -1, -1, -1, -1, -1, -1, -1, 333, 334, 335, -1, 337, -1, 339, 340, 279, 280, 343, -1, 17, 346, 347, -1, -1, -1, -1, 261, 262, 263, -1, -1, -1, 30, -1, 298, 33, 34, 35, 36, 37, 38, 39, -1, -1, 279, 280, -1, -1, -1, 267, -1, -1, -1, -1, 52, -1, -1, -1, -1, 57, -1, 279, 280, 298, -1, -1, -1, -1, -1, 67, 288, 289, 290, 337, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, 96, 97, 98, -1, 337, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, 122, 343, -1, -1, 346, 347, 348, -1, -1, 131, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 142, -1, 144, -1, 146, 147, -1, -1, -1, -1, 152, 153, 154, 155, 156, -1, 158, 159, 160, 161, 162, 163, -1, 165, -1, 167, -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, 0, 180, -1, -1, -1, -1, -1, -1, -1, -1, -1, 190, -1, -1, -1, -1, -1, 196, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 208, -1, -1, -1, -1, -1, 214, -1, -1, -1, -1, 219, 41, 221, -1, 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, 17, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, 247, -1, 249, 33, 34, 35, -1, -1, 38, 39, 257, -1, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, 52, -1, 271, 93, -1, 57, 275, -1, 277, -1, -1, 280, 281, -1, -1, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 294, -1, -1, 297, 298, 299, 300, -1, 123, -1, 304, 305, 306, -1, -1, -1, 93, 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 326, -1, 328, -1, 330, -1, 332, -1, 334, -1, 336, -1, -1, 122, -1, 341, -1, -1, -1, -1, -1, -1, 131, -1, -1, 351, -1, -1, -1, -1, -1, -1, -1, 142, -1, 144, -1, 146, 147, -1, -1, -1, -1, 152, 153, 154, -1, 156, -1, 158, 159, 160, 161, 162, 163, -1, 165, -1, 167, -1, 169, 170, -1, -1, -1, -1, -1, -1, -1, -1, -1, 180, -1, -1, -1, -1, -1, -1, -1, -1, 37, 190, -1, 40, -1, 42, 43, 196, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 208, -1, -1, 59, -1, -1, 214, 63, -1, -1, -1, 219, -1, 221, -1, 261, 262, 263, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, -1, -1, -1, 247, -1, 249, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, 298, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, 271, -1, -1, -1, 275, 124, 277, -1, -1, 280, 281, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, 294, -1, 13, 297, 298, 299, 300, -1, -1, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 326, -1, -1, -1, -1, -1, 332, -1, 334, -1, 336, -1, 55, 56, -1, 341, -1, -1, -1, -1, 63, 64, 65, 66, -1, 351, 69, 70, -1, -1, -1, -1, -1, -1, -1, -1, 79, -1, -1, 82, 83, 84, 85, 86, 87, -1, 89, 37, 91, 92, 40, 41, 42, 43, 44, 45, 99, 47, 101, 102, -1, -1, 105, -1, -1, -1, -1, -1, 58, 59, 113, -1, -1, 63, -1, -1, -1, 120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 132, -1, -1, -1, 267, 137, -1, 139, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, 124, 40, 41, -1, 43, 313, 45, -1, 47, -1, -1, -1, -1, -1, 322, -1, 193, -1, -1, -1, 59, 198, 330, 331, 332, 333, 334, 335, -1, 337, 207, 339, 340, -1, -1, 343, -1, 345, 346, 347, 348, -1, -1, -1, -1, -1, -1, 224, -1, -1, 227, 228, -1, -1, -1, -1, 233, -1, 235, -1, -1, -1, -1, 40, -1, 242, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, 123, -1, 125, -1, -1, -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 293, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 315, 263, 317, -1, -1, 267, 321, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, 279, 280, 281, -1, -1, 284, 338, -1, -1, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, 59, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 256, -1, 343, -1, 345, -1, -1, 348, -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, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, 320, 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, 320, 321, 322, 323, -1, -1, 59, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -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, 47, -1, -1, 256, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, 320, 321, 322, 323, -1, -1, 59, -1, -1, 123, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -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, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, 256, -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, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 320, 321, 322, 323, 263, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, 320, 321, 322, -1, -1, -1, 59, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -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, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, 125, -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, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, 125, -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, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -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, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 123, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, 263, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, 320, 321, 322, -1, -1, -1, 59, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -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, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, 125, -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, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, 125, -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, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -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, 41, -1, 43, -1, 45, -1, 47, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 123, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, 256, -1, -1, 320, 321, 322, -1, -1, -1, 59, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -1, 289, 290, -1, 292, -1, 294, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, 320, 321, 322, -1, -1, 59, -1, -1, -1, 123, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -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, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -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, 47, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 123, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, 40, -1, -1, 43, -1, 45, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, 256, -1, -1, 320, 321, 322, -1, -1, -1, 59, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, -1, 346, 347, 348, -1, 289, 290, -1, 292, -1, 294, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, 320, 321, 322, -1, -1, 59, -1, -1, -1, 123, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, -1, 288, 289, 290, -1, 292, 40, 41, -1, 43, 44, 45, 299, 300, 123, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -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, 256, -1, -1, 124, -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 63, -1, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, -1, 343, -1, 124, 346, 347, 348, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, -1, 304, 305, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 320, 321, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, 267, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, 41, -1, 43, 44, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 263, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, 124, 292, 40, 41, -1, 43, 44, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 267, 40, 41, -1, 43, -1, 45, -1, -1, -1, -1, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, 63, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, 124, 267, 40, -1, -1, 43, 44, 45, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, 63, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 267, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, -1, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 267, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, 41, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, 124, 292, 40, 41, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 267, 40, 41, -1, 43, -1, 45, -1, -1, -1, -1, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, 63, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 267, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, 41, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, 124, 292, 40, 41, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 267, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, -1, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, 124, -1, -1, -1, -1, -1, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 267, 40, 41, -1, 43, -1, 45, -1, -1, -1, -1, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, 63, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, 124, 267, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, 63, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 267, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, -1, -1, 43, -1, 45, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 267, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, 40, 41, 299, 300, 44, 302, -1, 304, -1, 124, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, 40, 41, 124, -1, 44, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 63, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, 267, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, 279, 280, 124, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, 322, 45, -1, 47, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 263, 339, 340, -1, 267, 343, -1, -1, 346, 347, 348, -1, 124, -1, -1, -1, 279, 280, 281, -1, -1, 284, -1, -1, -1, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, 123, -1, 63, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, 263, 346, 347, 348, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 279, 280, 281, -1, -1, 284, -1, -1, -1, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 40, 299, 300, 43, 302, 45, 304, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, 267, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, 282, 283, 284, 285, 286, 287, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, 40, 41, -1, 43, -1, 45, -1, 47, 261, 262, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, 298, 299, 300, -1, 302, -1, 304, 40, 41, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 267, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 279, 280, 343, -1, -1, 346, 347, 348, -1, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, 40, 304, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, 263, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, 40, 299, 300, 43, 302, 45, 304, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, 263, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 289, 290, -1, 292, -1, -1, -1, -1, -1, 40, 299, 300, 43, 302, 45, 304, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, 263, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, 40, 299, 300, 43, 302, 45, 304, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, 263, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, 40, 304, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, 263, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, 290, 40, 292, -1, 43, -1, 45, -1, 47, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, -1, 322, 263, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, 263, 45, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, 45, -1, 47, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, 267, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 288, 289, 290, -1, 292, -1, -1, -1, -1, -1, 40, 299, 300, 43, 302, 45, 304, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, 40, 299, 300, 43, 302, 45, 304, 47, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, 322, 304, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 322, -1, 343, -1, -1, 346, 347, 348, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, 40, 289, 290, 43, 292, 45, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, 289, 290, 343, 292, -1, 346, 347, 348, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 289, 290, -1, 292, -1, -1, -1, -1, -1, -1, 299, 300, -1, 302, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, 332, 333, 334, 335, -1, 337, -1, 339, 340, -1, -1, 343, -1, -1, 346, 347, 348, }; #define YYFINAL 4 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 349 #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,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,0,0,0,0,"FIRSTTOKEN","PROGRAM","PASTAT","PASTAT2", "XBEGIN","XEND","NL","ARRAY","MATCH","NOTMATCH","MATCHOP","FINAL","DOT","ALL", "CCL","NCCL","CHAR","OR","STAR","QUEST","PLUS","EMPTYRE","AND","BOR","APPEND", "EQ","GE","GT","LE","LT","NE","IN","ARG","BLTIN","BREAK","CLOSE","CONTINUE", "DELETE","DO","EXIT","FOR","FUNC","SUB","GSUB","IF","INDEX","LSUBSTR", "MATCHFCN","NEXT","NEXTFILE","ADD","MINUS","MULT","DIVIDE","MOD","ASSIGN", "ASGNOP","ADDEQ","SUBEQ","MULTEQ","DIVEQ","MODEQ","POWEQ","PRINT","PRINTF", "SPRINTF","ELSE","INTEST","CONDEXPR","POSTINCR","PREINCR","POSTDECR","PREDECR", "VAR","IVAR","VARNF","CALL","NUMBER","STRING","REGEXPR","GETLINE","RETURN", "SPLIT","SUBSTR","WHILE","CAT","NOT","UMINUS","POWER","DECR","INCR","INDIRECT", "LASTTOKEN", }; char *yyrule[] = { "$accept : program", "program : pas", "program : error", "and : AND", "and : and NL", "bor : BOR", "bor : bor NL", "comma : ','", "comma : comma NL", "do : DO", "do : do NL", "else : ELSE", "else : else NL", "$$1 :", "for : FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen $$1 stmt", "$$2 :", "for : FOR '(' opt_simple_stmt ';' ';' opt_nl opt_simple_stmt rparen $$2 stmt", "$$3 :", "for : FOR '(' varname IN varname rparen $$3 stmt", "funcname : VAR", "funcname : CALL", "if : IF '(' pattern rparen", "lbrace : '{'", "lbrace : lbrace NL", "nl : NL", "nl : nl NL", "opt_nl :", "opt_nl : nl", "opt_pst :", "opt_pst : pst", "opt_simple_stmt :", "opt_simple_stmt : simple_stmt", "pas : opt_pst", "pas : opt_pst pa_stats opt_pst", "pa_pat : pattern", "pa_stat : pa_pat", "pa_stat : pa_pat lbrace stmtlist '}'", "pa_stat : pa_pat ',' pa_pat", "pa_stat : pa_pat ',' pa_pat lbrace stmtlist '}'", "pa_stat : lbrace stmtlist '}'", "pa_stat : XBEGIN lbrace stmtlist '}'", "pa_stat : XEND lbrace stmtlist '}'", "$$4 :", "pa_stat : FUNC funcname '(' varlist rparen $$4 lbrace stmtlist '}'", "pa_stats : pa_stat", "pa_stats : pa_stats opt_pst pa_stat", "patlist : pattern", "patlist : patlist comma pattern", "ppattern : var ASGNOP ppattern", "ppattern : ppattern '?' ppattern ':' ppattern", "ppattern : ppattern bor ppattern", "ppattern : ppattern and ppattern", "ppattern : ppattern MATCHOP reg_expr", "ppattern : ppattern MATCHOP ppattern", "ppattern : ppattern IN varname", "ppattern : '(' plist ')' IN varname", "ppattern : ppattern term", "ppattern : re", "ppattern : term", "pattern : var ASGNOP pattern", "pattern : pattern '?' pattern ':' pattern", "pattern : pattern bor pattern", "pattern : pattern and pattern", "pattern : pattern EQ pattern", "pattern : pattern GE pattern", "pattern : pattern GT pattern", "pattern : pattern LE pattern", "pattern : pattern LT pattern", "pattern : pattern NE pattern", "pattern : pattern MATCHOP reg_expr", "pattern : pattern MATCHOP pattern", "pattern : pattern IN varname", "pattern : '(' plist ')' IN varname", "pattern : pattern '|' GETLINE var", "pattern : pattern '|' GETLINE", "pattern : pattern term", "pattern : re", "pattern : term", "plist : pattern comma pattern", "plist : plist comma pattern", "pplist : ppattern", "pplist : pplist comma ppattern", "prarg :", "prarg : pplist", "prarg : '(' plist ')'", "print : PRINT", "print : PRINTF", "pst : NL", "pst : ';'", "pst : pst NL", "pst : pst ';'", "rbrace : '}'", "rbrace : rbrace NL", "re : reg_expr", "re : NOT re", "$$5 :", "reg_expr : '/' $$5 REGEXPR '/'", "rparen : ')'", "rparen : rparen NL", "simple_stmt : print prarg '|' term", "simple_stmt : print prarg APPEND term", "simple_stmt : print prarg GT term", "simple_stmt : print prarg", "simple_stmt : DELETE varname '[' patlist ']'", "simple_stmt : DELETE varname", "simple_stmt : pattern", "simple_stmt : error", "st : nl", "st : ';' opt_nl", "stmt : BREAK st", "stmt : CONTINUE st", "$$6 :", "$$7 :", "stmt : do $$6 stmt $$7 WHILE '(' pattern ')' st", "stmt : EXIT pattern st", "stmt : EXIT st", "stmt : for", "stmt : if stmt else stmt", "stmt : if stmt", "stmt : lbrace stmtlist rbrace", "stmt : NEXT st", "stmt : NEXTFILE st", "stmt : RETURN pattern st", "stmt : RETURN st", "stmt : simple_stmt st", "$$8 :", "stmt : while $$8 stmt", "stmt : ';' opt_nl", "stmtlist : stmt", "stmtlist : stmtlist stmt", "subop : SUB", "subop : GSUB", "term : term '/' ASGNOP term", "term : term '+' term", "term : term '-' term", "term : term '*' term", "term : term '/' term", "term : term '%' term", "term : term POWER term", "term : '-' term", "term : '+' term", "term : NOT term", "term : BLTIN '(' ')'", "term : BLTIN '(' patlist ')'", "term : BLTIN", "term : CALL '(' ')'", "term : CALL '(' patlist ')'", "term : CLOSE term", "term : DECR var", "term : INCR var", "term : var DECR", "term : var INCR", "term : GETLINE var LT term", "term : GETLINE LT term", "term : GETLINE var", "term : GETLINE", "term : INDEX '(' pattern comma pattern ')'", "term : INDEX '(' pattern comma reg_expr ')'", "term : '(' pattern ')'", "term : MATCHFCN '(' pattern comma reg_expr ')'", "term : MATCHFCN '(' pattern comma pattern ')'", "term : NUMBER", "term : SPLIT '(' pattern comma varname comma pattern ')'", "term : SPLIT '(' pattern comma varname comma reg_expr ')'", "term : SPLIT '(' pattern comma varname ')'", "term : SPRINTF '(' patlist ')'", "term : STRING", "term : subop '(' reg_expr comma pattern ')'", "term : subop '(' pattern comma pattern ')'", "term : subop '(' reg_expr comma pattern comma var ')'", "term : subop '(' pattern comma pattern comma var ')'", "term : SUBSTR '(' pattern comma pattern comma pattern ')'", "term : SUBSTR '(' pattern comma pattern ')'", "term : var", "var : varname", "var : varname '[' patlist ']'", "var : IVAR", "var : INDIRECT term", "varlist :", "varlist : VAR", "varlist : varlist comma VAR", "varname : VAR", "varname : ARG", "varname : VARNF", "while : WHILE '(' pattern rparen", }; #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 10000 #define YYMAXDEPTH 10000 #endif #endif #define YYINITSTACKSIZE 200 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; #line 446 "awkgram.y" void setfname(Cell *p) { if (isarr(p)) SYNTAX("%s is an array, not a function", p->nval); else if (isfcn(p)) SYNTAX("you can't define function %s more than once", p->nval); curfname = p->nval; } int constnode(Node *p) { return isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON; } char *strnode(Node *p) { return ((Cell *)(p->narg[0]))->sval; } Node *notnull(Node *n) { switch (n->nobj) { case LE: case LT: case EQ: case NE: case GT: case GE: case BOR: case AND: case NOT: return n; default: return op2(NE, n, nullnode); } } void checkdup(Node *vl, Cell *cp) /* check if name already in list */ { char *s = cp->nval; for ( ; vl; vl = vl->nnext) { if (strcmp(s, ((Cell *)(vl->narg[0]))->nval) == 0) { SYNTAX("duplicate argument %s", s); break; } } } #line 2534 "y.tab.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ int yyparse __P((void)); static int yygrowstack __P((void)); static int yygrowstack() { int newsize, i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; if ((newss = (short *)realloc(yyss, newsize * sizeof *newss)) == NULL) return -1; yyss = newss; yyssp = newss + i; if ((newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs)) == NULL) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse() { int yym, yyn, yystate; #if YYDEBUG char *yys; if ((yys = getenv("YYDEBUG")) != NULL) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) 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 >= yysslim && yygrowstack()) { 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; goto yynewerror; yynewerror: yyerror("syntax error"); goto yyerrlab; 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 >= yysslim && yygrowstack()) { 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 98 "awkgram.y" { if (errorflag==0) winner = (Node *)stat3(PROGRAM, beginloc, yyvsp[0].p, endloc); } break; case 2: #line 100 "awkgram.y" { yyclearin; bracecheck(); SYNTAX("bailing out"); } break; case 13: #line 124 "awkgram.y" {inloop++;} break; case 14: #line 125 "awkgram.y" { --inloop; yyval.p = stat4(FOR, yyvsp[-9].p, notnull(yyvsp[-6].p), yyvsp[-3].p, yyvsp[0].p); } break; case 15: #line 126 "awkgram.y" {inloop++;} break; case 16: #line 127 "awkgram.y" { --inloop; yyval.p = stat4(FOR, yyvsp[-7].p, NIL, yyvsp[-3].p, yyvsp[0].p); } break; case 17: #line 128 "awkgram.y" {inloop++;} break; case 18: #line 129 "awkgram.y" { --inloop; yyval.p = stat3(IN, yyvsp[-5].p, makearr(yyvsp[-3].p), yyvsp[0].p); } break; case 19: #line 133 "awkgram.y" { setfname(yyvsp[0].cp); } break; case 20: #line 134 "awkgram.y" { setfname(yyvsp[0].cp); } break; case 21: #line 138 "awkgram.y" { yyval.p = notnull(yyvsp[-1].p); } break; case 26: #line 150 "awkgram.y" { yyval.i = 0; } break; case 28: #line 155 "awkgram.y" { yyval.i = 0; } break; case 30: #line 161 "awkgram.y" { yyval.p = 0; } break; case 32: #line 166 "awkgram.y" { yyval.p = 0; } break; case 33: #line 167 "awkgram.y" { yyval.p = yyvsp[-1].p; } break; case 34: #line 171 "awkgram.y" { yyval.p = notnull(yyvsp[0].p); } break; case 35: #line 175 "awkgram.y" { yyval.p = stat2(PASTAT, yyvsp[0].p, stat2(PRINT, rectonode(), NIL)); } break; case 36: #line 176 "awkgram.y" { yyval.p = stat2(PASTAT, yyvsp[-3].p, yyvsp[-1].p); } break; case 37: #line 177 "awkgram.y" { yyval.p = pa2stat(yyvsp[-2].p, yyvsp[0].p, stat2(PRINT, rectonode(), NIL)); } break; case 38: #line 178 "awkgram.y" { yyval.p = pa2stat(yyvsp[-5].p, yyvsp[-3].p, yyvsp[-1].p); } break; case 39: #line 179 "awkgram.y" { yyval.p = stat2(PASTAT, NIL, yyvsp[-1].p); } break; case 40: #line 181 "awkgram.y" { beginloc = linkum(beginloc, yyvsp[-1].p); yyval.p = 0; } break; case 41: #line 183 "awkgram.y" { endloc = linkum(endloc, yyvsp[-1].p); yyval.p = 0; } break; case 42: #line 184 "awkgram.y" {infunc++;} break; case 43: #line 185 "awkgram.y" { infunc--; curfname=0; defn((Cell *)yyvsp[-7].p, yyvsp[-5].p, yyvsp[-1].p); yyval.p = 0; } break; case 45: #line 190 "awkgram.y" { yyval.p = linkum(yyvsp[-2].p, yyvsp[0].p); } break; case 47: #line 195 "awkgram.y" { yyval.p = linkum(yyvsp[-2].p, yyvsp[0].p); } break; case 48: #line 199 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 49: #line 201 "awkgram.y" { yyval.p = op3(CONDEXPR, notnull(yyvsp[-4].p), yyvsp[-2].p, yyvsp[0].p); } break; case 50: #line 203 "awkgram.y" { yyval.p = op2(BOR, notnull(yyvsp[-2].p), notnull(yyvsp[0].p)); } break; case 51: #line 205 "awkgram.y" { yyval.p = op2(AND, notnull(yyvsp[-2].p), notnull(yyvsp[0].p)); } break; case 52: #line 206 "awkgram.y" { yyval.p = op3(yyvsp[-1].i, NIL, yyvsp[-2].p, (Node*)makedfa(yyvsp[0].s, 0)); } break; case 53: #line 208 "awkgram.y" { if (constnode(yyvsp[0].p)) yyval.p = op3(yyvsp[-1].i, NIL, yyvsp[-2].p, (Node*)makedfa(strnode(yyvsp[0].p), 0)); else yyval.p = op3(yyvsp[-1].i, (Node *)1, yyvsp[-2].p, yyvsp[0].p); } break; case 54: #line 212 "awkgram.y" { yyval.p = op2(INTEST, yyvsp[-2].p, makearr(yyvsp[0].p)); } break; case 55: #line 213 "awkgram.y" { yyval.p = op2(INTEST, yyvsp[-3].p, makearr(yyvsp[0].p)); } break; case 56: #line 214 "awkgram.y" { yyval.p = op2(CAT, yyvsp[-1].p, yyvsp[0].p); } break; case 59: #line 220 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 60: #line 222 "awkgram.y" { yyval.p = op3(CONDEXPR, notnull(yyvsp[-4].p), yyvsp[-2].p, yyvsp[0].p); } break; case 61: #line 224 "awkgram.y" { yyval.p = op2(BOR, notnull(yyvsp[-2].p), notnull(yyvsp[0].p)); } break; case 62: #line 226 "awkgram.y" { yyval.p = op2(AND, notnull(yyvsp[-2].p), notnull(yyvsp[0].p)); } break; case 63: #line 227 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 64: #line 228 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 65: #line 229 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 66: #line 230 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 67: #line 231 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 68: #line 232 "awkgram.y" { yyval.p = op2(yyvsp[-1].i, yyvsp[-2].p, yyvsp[0].p); } break; case 69: #line 233 "awkgram.y" { yyval.p = op3(yyvsp[-1].i, NIL, yyvsp[-2].p, (Node*)makedfa(yyvsp[0].s, 0)); } break; case 70: #line 235 "awkgram.y" { if (constnode(yyvsp[0].p)) yyval.p = op3(yyvsp[-1].i, NIL, yyvsp[-2].p, (Node*)makedfa(strnode(yyvsp[0].p), 0)); else yyval.p = op3(yyvsp[-1].i, (Node *)1, yyvsp[-2].p, yyvsp[0].p); } break; case 71: #line 239 "awkgram.y" { yyval.p = op2(INTEST, yyvsp[-2].p, makearr(yyvsp[0].p)); } break; case 72: #line 240 "awkgram.y" { yyval.p = op2(INTEST, yyvsp[-3].p, makearr(yyvsp[0].p)); } break; case 73: #line 241 "awkgram.y" { if (safe) SYNTAX("cmd | getline is unsafe"); else yyval.p = op3(GETLINE, yyvsp[0].p, itonp(yyvsp[-2].i), yyvsp[-3].p); } break; case 74: #line 244 "awkgram.y" { if (safe) SYNTAX("cmd | getline is unsafe"); else yyval.p = op3(GETLINE, (Node*)0, itonp(yyvsp[-1].i), yyvsp[-2].p); } break; case 75: #line 247 "awkgram.y" { yyval.p = op2(CAT, yyvsp[-1].p, yyvsp[0].p); } break; case 78: #line 253 "awkgram.y" { yyval.p = linkum(yyvsp[-2].p, yyvsp[0].p); } break; case 79: #line 254 "awkgram.y" { yyval.p = linkum(yyvsp[-2].p, yyvsp[0].p); } break; case 81: #line 259 "awkgram.y" { yyval.p = linkum(yyvsp[-2].p, yyvsp[0].p); } break; case 82: #line 263 "awkgram.y" { yyval.p = rectonode(); } break; case 84: #line 265 "awkgram.y" { yyval.p = yyvsp[-1].p; } break; case 93: #line 282 "awkgram.y" { yyval.p = op3(MATCH, NIL, rectonode(), (Node*)makedfa(yyvsp[0].s, 0)); } break; case 94: #line 283 "awkgram.y" { yyval.p = op1(NOT, notnull(yyvsp[0].p)); } break; case 95: #line 287 "awkgram.y" {startreg();} break; case 96: #line 287 "awkgram.y" { yyval.s = yyvsp[-1].s; } break; case 99: #line 295 "awkgram.y" { if (safe) SYNTAX("print | is unsafe"); else yyval.p = stat3(yyvsp[-3].i, yyvsp[-2].p, itonp(yyvsp[-1].i), yyvsp[0].p); } break; case 100: #line 298 "awkgram.y" { if (safe) SYNTAX("print >> is unsafe"); else yyval.p = stat3(yyvsp[-3].i, yyvsp[-2].p, itonp(yyvsp[-1].i), yyvsp[0].p); } break; case 101: #line 301 "awkgram.y" { if (safe) SYNTAX("print > is unsafe"); else yyval.p = stat3(yyvsp[-3].i, yyvsp[-2].p, itonp(yyvsp[-1].i), yyvsp[0].p); } break; case 102: #line 304 "awkgram.y" { yyval.p = stat3(yyvsp[-1].i, yyvsp[0].p, NIL, NIL); } break; case 103: #line 305 "awkgram.y" { yyval.p = stat2(DELETE, makearr(yyvsp[-3].p), yyvsp[-1].p); } break; case 104: #line 306 "awkgram.y" { yyval.p = stat2(DELETE, makearr(yyvsp[0].p), 0); } break; case 105: #line 307 "awkgram.y" { yyval.p = exptostat(yyvsp[0].p); } break; case 106: #line 308 "awkgram.y" { yyclearin; SYNTAX("illegal statement"); } break; case 109: #line 317 "awkgram.y" { if (!inloop) SYNTAX("break illegal outside of loops"); yyval.p = stat1(BREAK, NIL); } break; case 110: #line 319 "awkgram.y" { if (!inloop) SYNTAX("continue illegal outside of loops"); yyval.p = stat1(CONTINUE, NIL); } break; case 111: #line 321 "awkgram.y" {inloop++;} break; case 112: #line 321 "awkgram.y" {--inloop;} break; case 113: #line 322 "awkgram.y" { yyval.p = stat2(DO, yyvsp[-6].p, notnull(yyvsp[-2].p)); } break; case 114: #line 323 "awkgram.y" { yyval.p = stat1(EXIT, yyvsp[-1].p); } break; case 115: #line 324 "awkgram.y" { yyval.p = stat1(EXIT, NIL); } break; case 117: #line 326 "awkgram.y" { yyval.p = stat3(IF, yyvsp[-3].p, yyvsp[-2].p, yyvsp[0].p); } break; case 118: #line 327 "awkgram.y" { yyval.p = stat3(IF, yyvsp[-1].p, yyvsp[0].p, NIL); } break; case 119: #line 328 "awkgram.y" { yyval.p = yyvsp[-1].p; } break; case 120: #line 329 "awkgram.y" { if (infunc) SYNTAX("next is illegal inside a function"); yyval.p = stat1(NEXT, NIL); } break; case 121: #line 332 "awkgram.y" { if (infunc) SYNTAX("nextfile is illegal inside a function"); yyval.p = stat1(NEXTFILE, NIL); } break; case 122: #line 335 "awkgram.y" { yyval.p = stat1(RETURN, yyvsp[-1].p); } break; case 123: #line 336 "awkgram.y" { yyval.p = stat1(RETURN, NIL); } break; case 125: #line 338 "awkgram.y" {inloop++;} break; case 126: #line 338 "awkgram.y" { --inloop; yyval.p = stat2(WHILE, yyvsp[-2].p, yyvsp[0].p); } break; case 127: #line 339 "awkgram.y" { yyval.p = 0; } break; case 129: #line 344 "awkgram.y" { yyval.p = linkum(yyvsp[-1].p, yyvsp[0].p); } break; case 132: #line 352 "awkgram.y" { yyval.p = op2(DIVEQ, yyvsp[-3].p, yyvsp[0].p); } break; case 133: #line 353 "awkgram.y" { yyval.p = op2(ADD, yyvsp[-2].p, yyvsp[0].p); } break; case 134: #line 354 "awkgram.y" { yyval.p = op2(MINUS, yyvsp[-2].p, yyvsp[0].p); } break; case 135: #line 355 "awkgram.y" { yyval.p = op2(MULT, yyvsp[-2].p, yyvsp[0].p); } break; case 136: #line 356 "awkgram.y" { yyval.p = op2(DIVIDE, yyvsp[-2].p, yyvsp[0].p); } break; case 137: #line 357 "awkgram.y" { yyval.p = op2(MOD, yyvsp[-2].p, yyvsp[0].p); } break; case 138: #line 358 "awkgram.y" { yyval.p = op2(POWER, yyvsp[-2].p, yyvsp[0].p); } break; case 139: #line 359 "awkgram.y" { yyval.p = op1(UMINUS, yyvsp[0].p); } break; case 140: #line 360 "awkgram.y" { yyval.p = yyvsp[0].p; } break; case 141: #line 361 "awkgram.y" { yyval.p = op1(NOT, notnull(yyvsp[0].p)); } break; case 142: #line 362 "awkgram.y" { yyval.p = op2(BLTIN, itonp(yyvsp[-2].i), rectonode()); } break; case 143: #line 363 "awkgram.y" { yyval.p = op2(BLTIN, itonp(yyvsp[-3].i), yyvsp[-1].p); } break; case 144: #line 364 "awkgram.y" { yyval.p = op2(BLTIN, itonp(yyvsp[0].i), rectonode()); } break; case 145: #line 365 "awkgram.y" { yyval.p = op2(CALL, celltonode(yyvsp[-2].cp,CVAR), NIL); } break; case 146: #line 366 "awkgram.y" { yyval.p = op2(CALL, celltonode(yyvsp[-3].cp,CVAR), yyvsp[-1].p); } break; case 147: #line 367 "awkgram.y" { yyval.p = op1(CLOSE, yyvsp[0].p); } break; case 148: #line 368 "awkgram.y" { yyval.p = op1(PREDECR, yyvsp[0].p); } break; case 149: #line 369 "awkgram.y" { yyval.p = op1(PREINCR, yyvsp[0].p); } break; case 150: #line 370 "awkgram.y" { yyval.p = op1(POSTDECR, yyvsp[-1].p); } break; case 151: #line 371 "awkgram.y" { yyval.p = op1(POSTINCR, yyvsp[-1].p); } break; case 152: #line 372 "awkgram.y" { yyval.p = op3(GETLINE, yyvsp[-2].p, itonp(yyvsp[-1].i), yyvsp[0].p); } break; case 153: #line 373 "awkgram.y" { yyval.p = op3(GETLINE, NIL, itonp(yyvsp[-1].i), yyvsp[0].p); } break; case 154: #line 374 "awkgram.y" { yyval.p = op3(GETLINE, yyvsp[0].p, NIL, NIL); } break; case 155: #line 375 "awkgram.y" { yyval.p = op3(GETLINE, NIL, NIL, NIL); } break; case 156: #line 377 "awkgram.y" { yyval.p = op2(INDEX, yyvsp[-3].p, yyvsp[-1].p); } break; case 157: #line 379 "awkgram.y" { SYNTAX("index() doesn't permit regular expressions"); yyval.p = op2(INDEX, yyvsp[-3].p, (Node*)yyvsp[-1].s); } break; case 158: #line 381 "awkgram.y" { yyval.p = yyvsp[-1].p; } break; case 159: #line 383 "awkgram.y" { yyval.p = op3(MATCHFCN, NIL, yyvsp[-3].p, (Node*)makedfa(yyvsp[-1].s, 1)); } break; case 160: #line 385 "awkgram.y" { if (constnode(yyvsp[-1].p)) yyval.p = op3(MATCHFCN, NIL, yyvsp[-3].p, (Node*)makedfa(strnode(yyvsp[-1].p), 1)); else yyval.p = op3(MATCHFCN, (Node *)1, yyvsp[-3].p, yyvsp[-1].p); } break; case 161: #line 389 "awkgram.y" { yyval.p = celltonode(yyvsp[0].cp, CCON); } break; case 162: #line 391 "awkgram.y" { yyval.p = op4(SPLIT, yyvsp[-5].p, makearr(yyvsp[-3].p), yyvsp[-1].p, (Node*)STRING); } break; case 163: #line 393 "awkgram.y" { yyval.p = op4(SPLIT, yyvsp[-5].p, makearr(yyvsp[-3].p), (Node*)makedfa(yyvsp[-1].s, 1), (Node *)REGEXPR); } break; case 164: #line 395 "awkgram.y" { yyval.p = op4(SPLIT, yyvsp[-3].p, makearr(yyvsp[-1].p), NIL, (Node*)STRING); } break; case 165: #line 396 "awkgram.y" { yyval.p = op1(yyvsp[-3].i, yyvsp[-1].p); } break; case 166: #line 397 "awkgram.y" { yyval.p = celltonode(yyvsp[0].cp, CCON); } break; case 167: #line 399 "awkgram.y" { yyval.p = op4(yyvsp[-5].i, NIL, (Node*)makedfa(yyvsp[-3].s, 1), yyvsp[-1].p, rectonode()); } break; case 168: #line 401 "awkgram.y" { if (constnode(yyvsp[-3].p)) yyval.p = op4(yyvsp[-5].i, NIL, (Node*)makedfa(strnode(yyvsp[-3].p), 1), yyvsp[-1].p, rectonode()); else yyval.p = op4(yyvsp[-5].i, (Node *)1, yyvsp[-3].p, yyvsp[-1].p, rectonode()); } break; case 169: #line 406 "awkgram.y" { yyval.p = op4(yyvsp[-7].i, NIL, (Node*)makedfa(yyvsp[-5].s, 1), yyvsp[-3].p, yyvsp[-1].p); } break; case 170: #line 408 "awkgram.y" { if (constnode(yyvsp[-5].p)) yyval.p = op4(yyvsp[-7].i, NIL, (Node*)makedfa(strnode(yyvsp[-5].p), 1), yyvsp[-3].p, yyvsp[-1].p); else yyval.p = op4(yyvsp[-7].i, (Node *)1, yyvsp[-5].p, yyvsp[-3].p, yyvsp[-1].p); } break; case 171: #line 413 "awkgram.y" { yyval.p = op3(SUBSTR, yyvsp[-5].p, yyvsp[-3].p, yyvsp[-1].p); } break; case 172: #line 415 "awkgram.y" { yyval.p = op3(SUBSTR, yyvsp[-3].p, yyvsp[-1].p, NIL); } break; case 175: #line 421 "awkgram.y" { yyval.p = op2(ARRAY, makearr(yyvsp[-3].p), yyvsp[-1].p); } break; case 176: #line 422 "awkgram.y" { yyval.p = op1(INDIRECT, celltonode(yyvsp[0].cp, CVAR)); } break; case 177: #line 423 "awkgram.y" { yyval.p = op1(INDIRECT, yyvsp[0].p); } break; case 178: #line 427 "awkgram.y" { arglist = yyval.p = 0; } break; case 179: #line 428 "awkgram.y" { arglist = yyval.p = celltonode(yyvsp[0].cp,CVAR); } break; case 180: #line 429 "awkgram.y" { checkdup(yyvsp[-2].p, yyvsp[0].cp); arglist = yyval.p = linkum(yyvsp[-2].p,celltonode(yyvsp[0].cp,CVAR)); } break; case 181: #line 435 "awkgram.y" { yyval.p = celltonode(yyvsp[0].cp, CVAR); } break; case 182: #line 436 "awkgram.y" { yyval.p = op1(ARG, itonp(yyvsp[0].i)); } break; case 183: #line 437 "awkgram.y" { yyval.p = op1(VARNF, (Node *) yyvsp[0].cp); } break; case 184: #line 442 "awkgram.y" { yyval.p = notnull(yyvsp[-1].p); } break; #line 3295 "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 >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }