diff options
Diffstat (limited to 'contrib/perl5/x2p')
-rwxr-xr-x | contrib/perl5/x2p/Makefile.SH | 7 | ||||
-rw-r--r-- | contrib/perl5/x2p/a2p.c | 3862 | ||||
-rw-r--r-- | contrib/perl5/x2p/a2p.h | 59 | ||||
-rw-r--r-- | contrib/perl5/x2p/a2p.pod | 19 | ||||
-rw-r--r-- | contrib/perl5/x2p/a2p.y | 11 | ||||
-rw-r--r-- | contrib/perl5/x2p/a2py.c | 13 | ||||
-rwxr-xr-x | contrib/perl5/x2p/cflags.SH | 4 | ||||
-rw-r--r-- | contrib/perl5/x2p/find2perl.PL | 1178 | ||||
-rw-r--r-- | contrib/perl5/x2p/hash.c | 7 | ||||
-rw-r--r-- | contrib/perl5/x2p/hash.h | 18 | ||||
-rw-r--r-- | contrib/perl5/x2p/s2p.PL | 14 | ||||
-rw-r--r-- | contrib/perl5/x2p/str.h | 44 | ||||
-rw-r--r-- | contrib/perl5/x2p/util.c | 3 | ||||
-rw-r--r-- | contrib/perl5/x2p/util.h | 28 | ||||
-rw-r--r-- | contrib/perl5/x2p/walk.c | 24 |
15 files changed, 2831 insertions, 2460 deletions
diff --git a/contrib/perl5/x2p/Makefile.SH b/contrib/perl5/x2p/Makefile.SH index 1f92d5d..8ed7d31 100755 --- a/contrib/perl5/x2p/Makefile.SH +++ b/contrib/perl5/x2p/Makefile.SH @@ -1,4 +1,4 @@ -case $CONFIG in +case $CONFIGDOTSH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; @@ -85,6 +85,7 @@ pl = find2perl.PL s2p.PL plextract = find2perl s2p plexe = find2perl.exe s2p.exe plc = find2perl.c s2p.c +plm = a2p.loadmap addedbyconf = $(shextract) $(plextract) @@ -119,6 +120,8 @@ run_byacc: FORCE rm -f a2p.c mv y.tab.c a2p.c +FORCE: + # We don't want to regenerate a2p.c, but it might appear out-of-date # after a patch is applied or a new distribution is made. a2p.c: a2p.y @@ -129,7 +132,7 @@ a2p$(OBJ_EXT): a2p.c a2py.c a2p.h EXTERN.h util.h INTERN.h \ $(CCCMD) $(LARGE) a2p.c clean: - rm -f a2p *$(OBJ_EXT) $(plexe) $(plc) + rm -f a2p *$(OBJ_EXT) $(plexe) $(plc) $(plm) realclean: clean rm -f *.orig core $(addedbyconf) all malloc.c diff --git a/contrib/perl5/x2p/a2p.c b/contrib/perl5/x2p/a2p.c index e79e156..b512cf9 100644 --- a/contrib/perl5/x2p/a2p.c +++ b/contrib/perl5/x2p/a2p.c @@ -32,1788 +32,1858 @@ int ends = Nullop; #define GRGR 265 #define PRINT 266 #define PRINTF 267 -#define SPRINTF 268 -#define SPLIT 269 -#define IF 270 -#define ELSE 271 -#define WHILE 272 -#define FOR 273 -#define IN 274 -#define EXIT 275 -#define NEXT 276 -#define BREAK 277 -#define CONTINUE 278 -#define RET 279 -#define GETLINE 280 -#define DO 281 -#define SUB 282 -#define GSUB 283 -#define MATCH 284 -#define FUNCTION 285 -#define USERFUN 286 -#define DELETE 287 -#define ASGNOP 288 -#define OROR 289 -#define ANDAND 290 -#define NUMBER 291 -#define VAR 292 -#define SUBSTR 293 -#define INDEX 294 -#define MATCHOP 295 -#define RELOP 296 -#define OR 297 -#define STRING 298 -#define UMINUS 299 -#define NOT 300 -#define INCR 301 -#define DECR 302 -#define FIELD 303 -#define VFIELD 304 +#define SPRINTF_OLD 268 +#define SPRINTF_NEW 269 +#define SPLIT 270 +#define IF 271 +#define ELSE 272 +#define WHILE 273 +#define FOR 274 +#define IN 275 +#define EXIT 276 +#define NEXT 277 +#define BREAK 278 +#define CONTINUE 279 +#define RET 280 +#define GETLINE 281 +#define DO 282 +#define SUB 283 +#define GSUB 284 +#define MATCH 285 +#define FUNCTION 286 +#define USERFUN 287 +#define DELETE 288 +#define ASGNOP 289 +#define OROR 290 +#define ANDAND 291 +#define NUMBER 292 +#define VAR 293 +#define SUBSTR 294 +#define INDEX 295 +#define MATCHOP 296 +#define RELOP 297 +#define OR 298 +#define STRING 299 +#define UMINUS 300 +#define NOT 301 +#define INCR 302 +#define DECR 303 +#define FIELD 304 +#define VFIELD 305 #define YYERRCODE 256 short yylhs[] = { -1, 0, 3, 6, 6, 2, 2, 7, 7, 7, 7, 7, 7, 9, 8, 8, 11, 11, 11, 11, 11, 15, 15, 15, 15, 14, 14, 14, 14, 13, 13, - 13, 13, 12, 12, 12, 12, 16, 16, 16, 16, + 13, 13, 12, 12, 12, 12, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 17, 17, 17, 17, 10, 10, 10, 18, 18, - 18, 1, 1, 19, 19, 19, 19, 4, 4, 20, - 20, 21, 21, 21, 21, 5, 5, 22, 22, 22, - 22, 25, 25, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 26, 26, 26, 24, - 24, 24, 24, 24, 24, 24, 24, + 16, 16, 16, 16, 17, 17, 17, 17, 10, 10, + 10, 19, 19, 19, 1, 1, 20, 20, 20, 20, + 4, 4, 21, 21, 22, 22, 22, 22, 5, 5, + 23, 23, 23, 23, 26, 26, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 27, + 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, }; short yylen[] = { 2, 2, 6, 5, 2, 3, 0, 1, 5, 10, 4, 1, 1, 1, 1, 3, 1, 1, 1, 1, 5, 3, 4, 4, 2, 3, 3, 3, 3, 3, 3, - 1, 3, 1, 2, 5, 3, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, - 2, 2, 3, 1, 2, 3, 4, 3, 4, 1, - 3, 4, 4, 4, 2, 8, 6, 8, 8, 6, - 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, - 8, 1, 4, 1, 2, 1, 1, 0, 4, 4, - 3, 2, 0, 1, 1, 1, 1, 2, 0, 1, - 1, 2, 2, 2, 2, 2, 0, 3, 2, 2, - 1, 1, 0, 1, 4, 2, 4, 2, 1, 1, - 1, 2, 1, 1, 2, 5, 1, 1, 1, 6, - 9, 6, 7, 10, 9, 6, 5, + 1, 3, 1, 2, 5, 3, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 2, 2, + 2, 2, 2, 2, 3, 1, 2, 3, 4, 3, + 4, 1, 3, 4, 4, 4, 4, 2, 8, 6, + 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, + 8, 8, 8, 8, 1, 4, 1, 2, 1, 1, + 0, 4, 4, 3, 2, 0, 1, 1, 1, 1, + 2, 0, 1, 1, 2, 2, 2, 2, 2, 0, + 3, 2, 2, 1, 1, 0, 1, 4, 2, 4, + 2, 1, 1, 1, 2, 1, 1, 2, 5, 1, + 1, 1, 6, 9, 6, 7, 10, 9, 6, 5, }; -short yydefred[] = { 93, - 0, 0, 95, 96, 97, 94, 0, 92, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 38, 0, 0, 0, 39, 0, 0, 0, 0, - 0, 84, 0, 99, 0, 11, 0, 93, 0, 0, - 0, 17, 18, 19, 0, 0, 99, 99, 0, 0, - 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, - 49, 50, 0, 0, 0, 0, 0, 0, 4, 0, - 99, 0, 99, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 48, 0, 0, 61, 0, 0, 0, 0, 0, - 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 100, 101, 0, 98, 53, - 32, 28, 21, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 62, 63, 91, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 64, - 83, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 120, 119, 123, 0, 99, 0, 99, 10, 99, 0, - 106, 0, 111, 0, 0, 0, 22, 0, 59, 93, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, - 8, 0, 0, 0, 70, 0, 75, 0, 74, 0, - 77, 0, 76, 0, 72, 73, 0, 67, 0, 71, - 128, 127, 129, 0, 0, 0, 0, 0, 112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 99, 99, - 99, 0, 0, 0, 99, 69, 68, 79, 78, 81, - 80, 0, 66, 0, 0, 0, 0, 0, 0, 126, - 0, 0, 0, 132, 136, 0, 0, 0, 9, 99, - 99, 0, 133, 0, 0, 99, 131, 135, 0, 134, +short yydefred[] = { 96, + 0, 0, 98, 99, 100, 97, 0, 95, 0, 0, + 31, 0, 0, 38, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 41, 0, 0, 0, + 0, 0, 87, 0, 102, 0, 11, 0, 96, 0, + 0, 0, 17, 18, 19, 0, 0, 0, 102, 102, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 51, + 52, 0, 0, 0, 0, 0, 0, 4, 0, 102, + 0, 102, 102, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 50, 0, 68, 0, 0, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 103, 104, 0, 101, 55, 32, + 28, 21, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 102, 102, 0, 0, 64, + 65, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 66, 86, 0, 0, 102, 0, 0, 0, 0, + 0, 0, 123, 122, 126, 0, 102, 0, 102, 10, + 102, 0, 109, 0, 114, 0, 0, 0, 22, 0, + 61, 94, 0, 0, 96, 3, 0, 0, 0, 0, + 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, + 102, 102, 102, 8, 0, 0, 0, 0, 0, 73, + 0, 78, 0, 77, 0, 80, 0, 79, 0, 75, + 76, 0, 70, 0, 74, 131, 130, 132, 0, 0, + 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, + 0, 0, 0, 102, 102, 102, 0, 0, 0, 102, + 72, 71, 82, 81, 84, 83, 0, 69, 0, 0, + 0, 0, 0, 0, 129, 0, 0, 0, 135, 139, + 0, 0, 0, 9, 102, 102, 0, 136, 0, 0, + 102, 134, 138, 0, 137, }; short yydgoto[] = { 1, - 2, 7, 36, 74, 128, 37, 38, 39, 168, 52, - 75, 190, 42, 43, 44, 45, 46, 54, 8, 129, - 230, 191, 192, 193, 260, 254, + 2, 7, 37, 73, 127, 38, 39, 40, 170, 103, + 74, 192, 43, 44, 45, 46, 47, 48, 105, 8, + 128, 233, 193, 194, 195, 265, 259, }; short yysindex[] = { 0, - 0, -50, 0, 0, 0, 0, 4775, 0, -91, -38, - 0, 34, 41, 7201, 42, 6, 46, 48, 50, -184, - 70, 0, 16, 77, 80, 0, 7255, 7255, 5051, -220, - -220, 0, 7255, 0, 5051, 0, -140, 0, 5, -13, - 5693, 0, 0, 0, -32, -233, 0, 0, 4619, 7201, - 5962, 0, 6006, 79, 7255, 7255, 71, 6890, 6936, 7255, - 87, 7201, 7201, 7255, 7255, 5051, -42, -244, -42, 0, - 0, 0, 20, -183, -41, 89, 92, 93, 0, -50, - 0, 7255, 0, 0, 5051, 7255, 6990, 7255, 7255, 7255, - -32, -157, 7255, 7255, 7255, 7255, 7255, 7255, -144, 5051, - 0, 0, -183, -183, 0, 3590, 96, 5962, 5577, 10, - 0, 0, 6049, 1522, 7255, 94, 6107, 95, 6153, 6195, - 7201, 99, 51, 6238, 6281, 0, 0, 4886, 0, 0, - 0, 0, 0, -183, 6323, 1605, 1605, -60, 6380, 0, - 1522, 1522, 1522, 1522, 0, -7, -7, -42, -42, -42, - -42, -220, -60, 4931, 4977, 0, 0, 0, 6425, 6425, - -151, 1522, 7255, 7255, 7255, 7255, 7052, 102, 0, 0, - 0, 7255, 7255, 0, 7201, 7201, 115, 119, 121, 7255, - 0, 0, 0, 7255, 0, -130, 0, 0, 0, 7112, - 0, 18, 0, 5242, 7255, -126, 0, 7255, 0, 0, - 0, 7112, 7112, 32, 2427, 2474, 5735, 5779, 126, 6470, - 0, 5842, 6513, -183, -33, -33, 5051, 5051, 5428, 7112, - 7112, 4046, 81, -183, -183, 0, 0, 0, 0, 0, - 0, 7112, 7112, -50, 0, 7158, 0, 7255, 0, 7255, - 0, 7255, 0, 7255, 0, 0, -96, 0, 7255, 0, - 0, 0, 0, 7255, 7255, -39, -37, 6555, 0, 116, - -95, 7201, 5287, -183, -183, -183, -183, -183, 135, 6612, - 6657, 6702, 6745, 6787, 0, 6844, 7112, 7112, 0, 0, - 0, 5908, 144, 97, 0, 0, 0, 0, 0, 0, - 0, -183, 0, 4046, 4046, 4046, 5428, -51, 5051, 0, - -183, 5332, -85, 0, 0, 146, 5428, -35, 0, 0, - 0, 147, 0, 4046, 4046, 0, 0, 0, 4046, 0, + 0, -52, 0, 0, 0, 0, 2796, 0, -90, -86, + 0, 17, 25, 0, 38, 44, -57, 45, 47, 48, + -219, 49, 0, -1, 51, 52, 0, 7708, 7708, 6350, + -238, -238, 0, 7708, 0, 6350, 0, -165, 0, -21, + -12, 5968, 0, 0, 0, -32, -253, 7759, 0, 0, + 7372, 7759, 7759, 7708, 7708, 46, 7419, 7473, 7708, 65, + 7759, 7759, 7708, 7708, 6350, -54, -228, -54, 0, 0, + 0, -5, -185, -41, 71, 76, 80, 0, -52, 0, + 7708, 0, 0, 6350, 7708, 7528, 7708, 7708, 7708, -32, + -171, 7708, 7708, 7708, 7708, 7708, 7708, -152, 6350, 0, + 0, 6397, 0, 6481, 86, -185, -185, 0, 6528, 90, + 91, 6583, 184, 7708, 89, 6630, 93, 6673, 6716, 7759, + 94, 41, 6761, 6816, 0, 0, 5228, 0, 0, 0, + 0, 0, -185, 6863, 6015, 6015, -49, 6906, 0, 184, + 184, 184, 184, 0, -8, -8, -54, -54, -54, -54, + -238, -49, 6397, 5924, 28, 0, 0, 5320, 5411, 0, + 0, 0, -154, 184, 7708, 7708, 7708, 7708, 7575, 100, + 0, 0, 0, 7708, 7708, 0, 7759, 7759, 104, 105, + 117, 7708, 0, 0, 0, 7708, 0, -151, 0, 0, + 0, 7618, 0, -43, 0, 5495, 7708, -129, 0, 7708, + 0, 0, 3816, 3816, 0, 0, 29, 6062, 6119, 6203, + 6248, 122, 6949, 0, 6295, 6994, -185, -45, -45, 6350, + 6350, 4306, 7618, 7618, 4429, 81, -185, -185, 0, 0, + 0, 0, 0, 0, 7618, 7618, 7618, 7618, -52, 0, + 7665, 0, 7708, 0, 7708, 0, 7708, 0, 7708, 0, + 0, -96, 0, 7708, 0, 0, 0, 0, 7708, 7708, + -39, -37, 7049, 0, 108, -97, 7759, 5586, -185, -185, + -185, -185, -185, 136, 7096, 7139, 7182, 7227, 7282, 0, + 7329, 7618, 7618, 0, 0, 0, 3890, 138, 88, 0, + 0, 0, 0, 0, 0, 0, -185, 0, 4429, 4429, + 4429, 4306, -51, 6350, 0, -185, 5678, -89, 0, 0, + 141, 4306, -35, 0, 0, 0, 143, 0, 4429, 4429, + 0, 0, 0, 4429, 0, }; short yyrindex[] = { 0, - 0, 2000, 0, 0, 0, 0, 189, 0, 0, 0, - 0, 56, 0, 3312, 0, 2591, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2138, 0, 1930, 1209, - 3755, 0, 0, 0, 1818, 1394, 0, 0, 0, 151, - 0, 0, 3707, 111, 0, 0, 381, 0, 0, 0, - 0, 151, 100, 0, 0, 0, 564, 834, 889, 0, - 0, 0, 436, 5378, 0, -49, -46, -43, 0, 2195, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2084, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5378, 5378, 0, 0, 0, 0, -22, 0, - 0, 0, 0, 2639, 0, 0, 0, 0, 0, 0, - 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5378, 0, 0, 0, 1872, 0, 0, - 2878, 2923, 2968, 3037, 0, 1719, 1770, 943, 1016, 1286, - 1340, 2536, 1664, 0, 0, 0, 0, 0, 0, 0, - 0, 3245, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 67, 67, 0, 0, 0, -34, - 0, 0, 0, 12, 0, 0, 0, 0, 0, 101, - 0, 0, 0, 0, 0, 491, 0, 0, 0, 0, - 0, 3360, 3432, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4091, 104, 172, 0, 0, 136, 241, - 247, 0, 0, 5378, 4146, 0, 0, 0, 0, 0, - 0, 3520, 3640, 2266, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, - 0, 100, 0, 4220, 4411, 4485, 4530, 4576, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 357, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5378, 0, 0, 0, 0, 153, 0, 0, 0, - 4841, 0, 5643, 0, 0, 0, 153, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2452, 0, 0, 0, 0, 185, 0, 0, 0, + 0, 56, 0, 0, 111, 0, 2886, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2279, 0, 2328, + 2048, 4023, 0, 0, 0, 2120, 1671, 3590, 0, 0, + 0, 145, 145, 0, 0, 382, 0, 0, 0, 0, + 145, 95, 0, 0, 0, 818, 872, 946, 0, 0, + 0, 437, 5769, 0, -16, -10, 18, 0, 2511, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2170, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3951, 492, 5769, 5769, 0, 0, 0, + 0, 0, 2934, 0, 0, 0, 0, 0, 0, 145, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5769, 0, 0, 0, 2221, 0, 0, 2982, + 3222, 3267, 3312, 0, 1781, 1854, 1217, 1271, 1325, 1400, + 2619, 1726, 0, -23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3381, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, + 0, 171, 0, 0, 0, 174, 0, 0, 0, 0, + 0, 242, 0, 0, 0, 0, 0, 763, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4508, 248, 297, 0, + 0, 128, 350, 358, 0, 0, 5769, 4604, 0, 0, + 0, 0, 0, 0, 3657, 3705, 3760, 3866, 2561, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 0, 95, 0, 4695, 4779, + 4870, 4962, 5053, 0, 0, 0, 0, 0, 0, 0, + 0, 398, 431, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5769, 0, 0, 0, + 0, 149, 0, 0, 0, 5137, 0, 5853, 0, 0, + 0, 149, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; short yygindex[] = { 0, - -15, 0, 0, 3236, -67, 0, 0, 0, 0, -29, - 171, 4012, -19, 4, 14, 7669, 7480, -4, 0, 0, - 0, -113, -201, 0, -232, -18, + -30, 0, 0, 4250, -24, 0, 0, 0, 0, 397, + 24, 4208, -17, -15, -13, 7990, 4404, 0, -82, 0, + 0, 0, -173, -192, 0, -277, -28, }; -#define YYTABLESIZE 7947 -short yytable[] = { 130, - 82, 279, 82, 280, 97, 313, 121, 307, 6, 95, - 93, 82, 94, 17, 96, 76, 18, 259, 16, 19, - 107, 82, 80, 82, 121, 82, 275, 82, 252, 97, - 85, 47, 122, 123, 95, 154, 155, 82, 77, 96, - 82, 82, 82, 82, 82, 82, 110, 82, 78, 82, - 158, 98, 124, 112, 100, 60, 101, 102, 82, 82, - 82, 98, 82, 82, 306, 56, 194, 101, 102, 99, - 124, 23, 235, 49, 312, 236, 229, 126, 127, 99, - 50, 55, 32, 33, 48, 58, 98, 59, 76, 60, - 253, 169, 60, 82, 82, 259, 60, 60, 60, 60, - 60, 61, 60, 110, 99, 259, 63, 88, 261, 62, - 87, 77, 82, 60, 60, 60, 64, 60, 60, 65, - 79, 78, 112, 82, 82, 88, 121, 81, 88, 131, - 115, 99, 132, 133, 145, 152, 157, 163, 165, 170, - 204, 114, 211, 171, 116, 215, 216, 87, 60, 60, - 87, 87, 87, 87, 217, 87, 263, 87, 218, 114, - 219, 223, 116, 84, 126, 127, 245, 60, 87, 87, - 87, 262, 87, 87, 282, 286, 283, 40, 60, 60, - 303, 304, 305, 299, 234, 310, 311, 316, 1, 300, - 88, 88, 88, 113, 113, 114, 0, 255, 0, 70, - 317, 318, 0, 87, 87, 320, 0, 0, 0, 3, - 4, 5, 118, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 302, 121, 121, 121, 83, 84, - 118, 251, 284, 87, 87, 0, 0, 83, 84, 17, - 17, 92, 18, 18, 0, 19, 19, 83, 84, 83, - 84, 83, 84, 83, 84, 138, 0, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 16, 16, 82, 82, - 153, 124, 124, 124, 82, 83, 84, 226, 227, 228, - 82, 122, 82, 82, 82, 82, 82, 125, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 23, 82, 122, - 82, 82, 82, 82, 82, 125, 196, 197, 32, 33, - 0, 0, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 0, 0, 60, 60, 0, 88, 88, 88, 60, - 0, 88, 0, 0, 0, 60, 115, 60, 60, 60, - 60, 60, 0, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 0, 60, 115, 60, 60, 60, 60, 60, - 114, 114, 114, 116, 116, 116, 0, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 0, 0, 87, 87, - 55, 0, 0, 0, 87, 0, 0, 256, 257, 0, - 87, 0, 87, 87, 87, 87, 87, 117, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 0, 87, 0, - 87, 87, 87, 87, 87, 117, 0, 55, 0, 0, - 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, - 0, 118, 118, 118, 0, 85, 0, 0, 55, 55, - 0, 0, 55, 55, 0, 0, 0, 0, 0, 0, - 0, 0, 298, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, - 0, 0, 85, 55, 55, 85, 85, 85, 85, 85, - 85, 0, 85, 0, 0, 0, 0, 0, 0, 0, - 23, 0, 55, 85, 85, 85, 0, 85, 85, 0, - 122, 122, 122, 55, 55, 0, 125, 125, 125, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 23, 85, 85, - 23, 23, 23, 23, 23, 23, 0, 23, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, - 23, 0, 23, 23, 0, 115, 115, 115, 85, 85, - 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 23, 52, 52, 52, 52, 52, 52, 0, - 52, 0, 0, 23, 23, 0, 117, 117, 117, 0, - 0, 52, 52, 52, 0, 52, 52, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 0, 0, 55, 55, - 0, 0, 0, 0, 55, 0, 52, 0, 0, 0, - 55, 0, 55, 55, 55, 55, 55, 0, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 0, 55, 0, - 55, 55, 55, 55, 55, 0, 52, 52, 0, 0, - 0, 0, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 0, 0, 85, 85, 0, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 85, 0, 85, 85, 85, - 85, 85, 0, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 0, 85, 0, 85, 85, 85, 85, 85, - 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 0, 0, 23, 23, - 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, - 23, 0, 23, 23, 23, 23, 23, 0, 23, 23, - 0, 23, 23, 23, 23, 23, 23, 0, 23, 0, - 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, - 0, 52, 52, 37, 0, 0, 0, 52, 0, 0, - 0, 0, 0, 52, 0, 52, 52, 52, 52, 52, - 0, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 0, 52, 0, 52, 52, 52, 52, 52, 0, 0, - 37, 0, 0, 37, 37, 37, 37, 37, 37, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 51, 0, - 0, 37, 37, 37, 0, 37, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 37, 37, 51, 51, - 51, 51, 51, 51, 0, 51, 0, 0, 0, 0, - 0, 0, 42, 0, 0, 37, 51, 51, 51, 0, - 51, 51, 0, 0, 0, 0, 37, 37, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, - 0, 51, 42, 42, 42, 42, 42, 42, 0, 42, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 42, 42, 42, 0, 42, 42, 0, 0, 0, 0, - 0, 51, 51, 0, 0, 43, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 43, 0, 0, 43, 43, 43, 43, 43, - 43, 0, 43, 0, 0, 42, 42, 0, 0, 0, - 0, 0, 0, 43, 43, 43, 0, 43, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, - 0, 37, 37, 0, 0, 0, 0, 37, 43, 0, - 0, 0, 0, 37, 0, 37, 37, 37, 37, 37, - 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 0, 37, 0, 37, 0, 0, 37, 37, 43, 43, - 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 0, 0, 51, 51, 0, 0, - 0, 0, 51, 0, 0, 0, 0, 0, 51, 0, - 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 0, 51, 0, 51, 51, - 51, 51, 51, 0, 0, 0, 0, 0, 0, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 14, 0, - 42, 42, 0, 0, 0, 0, 42, 0, 0, 0, - 0, 0, 42, 0, 42, 42, 42, 42, 42, 0, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, - 42, 0, 42, 42, 42, 42, 42, 0, 14, 0, - 0, 14, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, - 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 0, 0, 43, 43, 44, 0, 0, 0, 43, - 0, 0, 0, 0, 0, 43, 0, 43, 43, 43, - 43, 43, 0, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 0, 43, 0, 43, 43, 43, 43, 43, - 0, 0, 44, 0, 0, 44, 44, 44, 44, 44, - 44, 14, 44, 0, 0, 0, 0, 0, 0, 45, - 0, 0, 0, 44, 44, 44, 0, 44, 44, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 45, 0, 44, 45, - 45, 45, 45, 45, 45, 0, 45, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 0, 45, 45, 45, - 0, 45, 45, 0, 0, 0, 0, 0, 44, 44, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 0, 45, 37, 37, 37, 37, 37, 37, 0, - 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 37, 37, 0, 37, 37, 0, 0, 0, - 0, 0, 45, 45, 0, 14, 14, 14, 14, 14, - 14, 14, 14, 0, 0, 0, 14, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 37, 14, 0, - 14, 14, 14, 14, 14, 0, 0, 0, 0, 14, - 14, 14, 14, 0, 0, 37, 14, 0, 14, 14, - 14, 14, 14, 0, 0, 0, 37, 37, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 0, 0, 44, 44, 0, 0, 0, 0, 44, - 0, 66, 0, 0, 27, 44, 28, 44, 44, 44, - 44, 44, 0, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 0, 44, 0, 44, 44, 44, 44, 44, - 0, 0, 0, 0, 0, 0, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 0, 0, 45, 45, 0, - 0, 0, 0, 45, 0, 0, 0, 0, 0, 45, - 0, 45, 45, 45, 45, 45, 0, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 0, 45, 0, 45, - 45, 45, 45, 45, 35, 0, 0, 27, 0, 28, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, - 0, 37, 37, 36, 0, 0, 0, 37, 0, 0, - 0, 0, 0, 37, 0, 37, 37, 37, 37, 37, - 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, - 0, 37, 0, 37, 0, 0, 37, 37, 0, 0, - 36, 0, 0, 36, 36, 36, 36, 36, 36, 0, - 36, 0, 0, 0, 0, 0, 0, 0, 40, 0, - 0, 36, 36, 36, 0, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 36, 40, 40, - 0, 40, 40, 40, 0, 0, 0, 0, 0, 41, - 0, 0, 0, 0, 0, 36, 40, 40, 40, 0, - 40, 40, 0, 0, 12, 13, 36, 36, 0, 14, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 17, 18, 19, 0, 21, 0, 41, - 41, 40, 41, 41, 41, 0, 0, 33, 0, 26, - 0, 0, 30, 31, 32, 33, 0, 41, 41, 41, - 0, 41, 41, 0, 0, 0, 0, 0, 0, 0, - 0, 40, 40, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 33, 0, - 0, 33, 41, 11, 0, 126, 127, 12, 13, 0, - 0, 15, 14, 15, 0, 33, 33, 33, 0, 33, - 33, 0, 0, 0, 16, 0, 17, 18, 19, 0, - 21, 0, 41, 41, 0, 22, 23, 24, 25, 0, - 0, 0, 26, 0, 29, 30, 31, 32, 33, 0, - 33, 15, 0, 0, 15, 0, 15, 0, 0, 0, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 7, - 15, 36, 36, 0, 0, 0, 0, 36, 0, 0, - 33, 33, 0, 36, 0, 36, 36, 36, 36, 36, - 0, 36, 0, 0, 36, 36, 36, 36, 36, 36, - 0, 36, 0, 36, 36, 36, 36, 36, 0, 7, - 0, 0, 7, 0, 7, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 0, 0, 40, 40, 7, 0, - 0, 0, 40, 0, 15, 0, 0, 0, 40, 6, - 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 0, 40, 0, 40, 40, - 40, 40, 40, 0, 0, 0, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 0, 0, 41, 41, 6, - 0, 0, 6, 41, 6, 0, 0, 0, 0, 41, - 0, 41, 41, 41, 41, 41, 0, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 0, 41, 0, 41, - 41, 41, 41, 41, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 34, 0, 33, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 33, 0, 33, - 33, 33, 33, 33, 0, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 0, 33, 0, 33, 33, 33, - 33, 33, 6, 34, 34, 0, 0, 34, 15, 15, - 15, 15, 15, 15, 15, 15, 0, 12, 0, 15, - 15, 34, 34, 34, 0, 34, 34, 0, 0, 0, - 0, 15, 0, 15, 15, 15, 15, 15, 0, 0, - 0, 0, 15, 15, 15, 15, 0, 0, 0, 15, - 0, 15, 15, 15, 15, 15, 34, 12, 0, 0, - 12, 0, 12, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 5, 0, 12, 7, 7, 0, - 0, 0, 0, 0, 0, 0, 34, 34, 0, 7, - 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 7, 7, 7, 7, 0, 0, 0, 7, 0, 7, - 7, 7, 7, 7, 5, 0, 0, 5, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 6, 6, 0, - 12, 0, 6, 6, 0, 2, 0, 6, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 6, 6, 6, 6, 6, 0, 0, 0, 0, - 6, 6, 6, 6, 0, 0, 0, 6, 0, 6, - 6, 6, 6, 6, 0, 2, 0, 0, 2, 0, - 2, 0, 0, 0, 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, +#define YYTABLESIZE 8273 +short yytable[] = { 129, + 85, 284, 55, 285, 96, 318, 6, 312, 79, 94, + 92, 81, 93, 81, 95, 232, 257, 16, 75, 155, + 76, 81, 77, 81, 311, 81, 280, 81, 96, 264, + 41, 84, 49, 94, 317, 99, 50, 85, 95, 97, + 85, 85, 85, 85, 85, 85, 17, 85, 100, 101, + 81, 266, 18, 69, 24, 62, 51, 98, 85, 85, + 85, 97, 85, 85, 52, 33, 34, 60, 202, 240, + 155, 157, 241, 100, 101, 125, 126, 53, 258, 98, + 19, 158, 159, 54, 57, 97, 58, 59, 61, 62, + 63, 64, 62, 85, 85, 78, 62, 62, 62, 62, + 62, 80, 62, 98, 120, 114, 98, 137, 196, 264, + 37, 130, 85, 62, 62, 62, 131, 62, 62, 264, + 132, 144, 152, 85, 85, 308, 309, 310, 151, 157, + 161, 162, 165, 173, 172, 75, 167, 76, 207, 77, + 214, 226, 91, 220, 221, 322, 323, 37, 62, 62, + 325, 37, 37, 37, 37, 37, 222, 37, 198, 199, + 91, 83, 250, 91, 125, 126, 287, 62, 37, 37, + 37, 267, 37, 37, 239, 288, 291, 304, 62, 62, + 305, 316, 315, 321, 1, 91, 116, 91, 117, 116, + 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 268, 37, 37, 0, 0, 3, 4, 5, + 0, 124, 0, 0, 127, 0, 229, 230, 231, 256, + 0, 0, 37, 65, 0, 91, 28, 0, 29, 124, + 0, 0, 127, 37, 37, 24, 0, 0, 82, 83, + 82, 83, 91, 261, 262, 0, 33, 34, 82, 83, + 82, 83, 82, 83, 82, 83, 0, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 16, 16, 85, 85, + 85, 0, 307, 17, 17, 85, 0, 82, 83, 18, + 18, 85, 117, 85, 85, 85, 85, 85, 119, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 0, 85, + 117, 85, 85, 85, 85, 85, 119, 19, 19, 0, + 303, 0, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 0, 0, 62, 62, 62, 0, 313, 0, 0, + 62, 0, 0, 0, 0, 0, 62, 121, 62, 62, + 62, 62, 62, 0, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 0, 62, 121, 62, 62, 62, 62, + 62, 91, 91, 91, 0, 0, 91, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 0, 0, 37, 37, + 37, 57, 0, 0, 0, 37, 0, 0, 0, 0, + 125, 37, 0, 37, 37, 37, 37, 37, 128, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 125, 37, + 0, 37, 37, 37, 37, 37, 128, 0, 57, 0, + 0, 57, 57, 57, 57, 57, 57, 0, 57, 0, + 124, 124, 124, 127, 127, 127, 88, 0, 118, 57, + 57, 0, 0, 57, 57, 0, 12, 13, 110, 111, + 0, 14, 15, 16, 0, 0, 118, 121, 122, 0, + 0, 0, 0, 0, 17, 0, 18, 19, 20, 0, + 22, 120, 0, 88, 57, 57, 88, 88, 88, 88, + 88, 88, 27, 88, 0, 31, 32, 33, 34, 120, + 0, 90, 0, 57, 88, 88, 88, 0, 88, 88, + 0, 117, 117, 117, 57, 57, 0, 119, 119, 119, + 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 88, + 88, 90, 90, 90, 90, 0, 90, 0, 90, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 90, 90, 0, 90, 90, 0, 121, 121, 121, 88, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 90, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 0, 0, 0, 0, 0, 125, + 125, 125, 0, 0, 90, 90, 0, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 0, 0, 57, + 57, 57, 0, 0, 0, 0, 57, 118, 118, 118, + 0, 0, 57, 289, 57, 57, 57, 57, 57, 0, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 0, + 57, 0, 57, 57, 57, 57, 57, 0, 0, 0, + 120, 120, 120, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 0, 0, 88, 88, 88, 0, 0, 0, + 0, 88, 0, 0, 0, 0, 0, 88, 0, 88, + 88, 88, 88, 88, 0, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 0, 88, 0, 88, 88, 88, + 88, 88, 0, 0, 0, 0, 0, 0, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 0, 0, 90, + 90, 90, 23, 0, 0, 0, 90, 0, 0, 0, + 0, 0, 90, 0, 90, 90, 90, 90, 90, 0, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 0, + 90, 0, 90, 90, 90, 90, 90, 0, 0, 23, + 0, 0, 23, 23, 23, 23, 23, 23, 0, 23, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, + 23, 23, 23, 0, 23, 23, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 23, 23, 54, 54, 54, + 54, 54, 54, 0, 54, 0, 0, 0, 0, 0, + 0, 39, 0, 0, 23, 54, 54, 54, 0, 54, + 54, 0, 0, 0, 0, 23, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, + 54, 39, 39, 39, 39, 39, 39, 0, 39, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, + 39, 39, 0, 39, 39, 0, 0, 0, 0, 0, + 54, 54, 0, 0, 0, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 39, 39, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 39, 0, 53, 53, 53, 53, 53, + 53, 0, 53, 0, 39, 39, 0, 0, 0, 0, + 0, 0, 0, 53, 53, 53, 0, 53, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, + 23, 23, 23, 0, 0, 0, 0, 23, 53, 0, + 0, 0, 0, 23, 0, 23, 23, 23, 23, 23, + 0, 23, 23, 0, 23, 23, 23, 23, 23, 23, + 0, 23, 0, 23, 23, 23, 23, 23, 53, 53, + 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 0, 0, 54, 54, 54, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 54, 0, + 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 0, 54, 0, 54, 54, + 54, 54, 54, 0, 0, 0, 0, 0, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 0, 0, 39, + 39, 39, 0, 0, 0, 0, 39, 0, 0, 0, + 0, 0, 39, 0, 39, 39, 39, 39, 39, 0, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, + 39, 0, 39, 0, 0, 39, 39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 0, 0, 53, 53, 53, 44, 0, 0, 0, + 53, 0, 0, 0, 0, 0, 53, 0, 53, 53, + 53, 53, 53, 0, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 0, 53, 0, 53, 53, 53, 53, + 53, 0, 0, 44, 0, 0, 44, 44, 44, 44, + 44, 44, 0, 44, 0, 0, 0, 0, 0, 0, + 45, 0, 0, 0, 44, 44, 44, 0, 44, 44, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 45, 0, 44, + 45, 45, 45, 45, 45, 45, 0, 45, 0, 0, + 0, 0, 0, 0, 46, 0, 0, 0, 45, 45, + 45, 0, 45, 45, 0, 0, 0, 0, 0, 44, + 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 46, 0, 45, 46, 46, 46, 46, 46, 46, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 46, 46, 46, 0, 46, 46, 0, 0, + 0, 0, 0, 45, 45, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 0, 0, 47, + 47, 47, 47, 47, 47, 0, 47, 46, 46, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, + 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 0, 0, 44, 44, 44, 0, 0, 0, + 0, 44, 47, 0, 0, 0, 0, 44, 0, 44, + 44, 44, 44, 44, 0, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 0, 44, 0, 44, 44, 44, + 44, 44, 47, 47, 0, 0, 0, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 0, 0, 45, 45, + 45, 0, 0, 0, 0, 45, 0, 0, 0, 0, + 0, 45, 0, 45, 45, 45, 45, 45, 0, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 0, 45, + 0, 45, 45, 45, 45, 45, 0, 0, 0, 0, + 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 0, 0, 46, 46, 46, 0, 0, 0, 0, 46, + 0, 0, 0, 0, 0, 46, 0, 46, 46, 46, + 46, 46, 0, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 0, 46, 0, 46, 46, 46, 46, 46, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0, 0, 47, 47, 47, + 39, 0, 0, 0, 47, 0, 0, 0, 0, 0, + 47, 0, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, + 47, 47, 47, 47, 47, 0, 0, 39, 0, 0, + 39, 39, 39, 39, 39, 39, 0, 39, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 0, 39, 39, + 39, 0, 39, 39, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36, 39, 39, 36, 36, 36, 36, 36, + 36, 0, 36, 0, 0, 0, 0, 0, 0, 0, + 42, 0, 39, 36, 36, 36, 0, 36, 0, 0, + 0, 0, 0, 39, 39, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 36, + 42, 42, 0, 42, 42, 42, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 42, 42, + 42, 0, 42, 42, 0, 0, 0, 0, 36, 36, + 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 43, 43, 0, 43, 43, 43, 0, + 0, 0, 0, 42, 42, 0, 0, 0, 0, 0, + 0, 43, 43, 43, 0, 43, 43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 0, 0, 39, 39, + 39, 0, 0, 0, 0, 39, 43, 0, 0, 0, + 0, 39, 0, 39, 39, 39, 39, 39, 0, 0, + 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, + 0, 39, 0, 0, 39, 39, 43, 43, 0, 0, + 0, 0, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 0, 0, 36, 36, 36, 0, 0, 0, 0, + 36, 0, 0, 0, 0, 0, 36, 0, 36, 36, + 36, 36, 36, 0, 36, 0, 0, 36, 36, 36, + 36, 36, 36, 0, 36, 0, 36, 36, 36, 36, + 36, 0, 0, 0, 0, 0, 0, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 0, 14, 42, 42, + 42, 0, 0, 0, 0, 42, 0, 0, 0, 0, + 0, 42, 0, 42, 42, 42, 42, 42, 0, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 0, 42, + 0, 42, 42, 42, 42, 42, 0, 14, 0, 0, + 14, 0, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 33, + 0, 43, 43, 43, 0, 0, 0, 0, 43, 0, + 0, 0, 0, 0, 43, 0, 43, 43, 43, 43, + 43, 0, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 0, 43, 0, 43, 43, 43, 43, 43, 33, + 33, 0, 0, 33, 0, 0, 0, 0, 0, 34, + 14, 0, 0, 0, 0, 0, 0, 33, 33, 33, + 0, 33, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, + 34, 0, 33, 34, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 34, 34, 34, 0, 34, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 0, 34, 34, 34, 34, 34, - 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 0, 34, 0, 34, 34, 34, 34, 34, 2, 0, - 0, 0, 0, 0, 12, 12, 12, 12, 0, 12, - 12, 12, 0, 0, 0, 12, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 0, 12, - 12, 12, 12, 12, 0, 0, 0, 0, 12, 12, - 12, 12, 0, 0, 0, 12, 0, 12, 12, 12, - 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 5, 5, 0, 0, 0, 5, 5, 0, - 0, 0, 5, 5, 0, 0, 66, 237, 0, 27, - 238, 28, 0, 0, 5, 0, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 5, 5, 5, 5, 86, - 0, 0, 5, 0, 5, 5, 5, 5, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 66, 239, 0, 27, 240, 28, 0, - 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, - 0, 0, 0, 2, 2, 58, 86, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, - 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, - 0, 0, 58, 0, 0, 58, 58, 58, 58, 58, - 58, 0, 58, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 58, 58, 58, 0, 58, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 58, 58, - 54, 54, 54, 54, 54, 54, 0, 54, 56, 0, - 0, 0, 0, 0, 0, 0, 0, 58, 54, 54, - 0, 0, 54, 54, 0, 0, 0, 0, 58, 58, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 0, 0, 0, 56, - 56, 0, 56, 54, 54, 56, 0, 0, 0, 12, - 13, 0, 0, 0, 14, 15, 56, 56, 56, 0, - 56, 56, 54, 0, 0, 0, 16, 0, 17, 18, - 19, 0, 21, 54, 54, 0, 0, 22, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 30, 31, 32, - 33, 56, 56, 0, 0, 0, 12, 13, 0, 0, - 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, - 56, 0, 0, 16, 0, 17, 18, 19, 0, 21, - 0, 56, 56, 0, 22, 23, 24, 25, 0, 0, - 0, 26, 0, 0, 30, 31, 32, 33, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 0, 0, 58, 58, 0, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 58, 0, 58, 58, 58, - 58, 58, 0, 58, 58, 58, 58, 0, 58, 58, - 58, 58, 0, 58, 0, 58, 58, 58, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, - 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, - 54, 0, 54, 54, 54, 54, 54, 29, 54, 54, - 54, 54, 0, 54, 54, 54, 54, 0, 54, 0, - 54, 54, 54, 0, 0, 56, 56, 56, 56, 56, - 56, 0, 0, 56, 0, 0, 0, 0, 0, 0, - 0, 0, 56, 0, 29, 0, 0, 0, 29, 29, - 0, 29, 25, 56, 29, 0, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 29, 29, 29, 56, 29, - 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 0, 0, 0, 25, 25, 0, 25, 27, 0, 25, - 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, - 25, 25, 25, 0, 25, 25, 0, 0, 0, 29, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 29, 0, 0, 27, 0, 0, 0, 27, 27, - 0, 27, 0, 0, 27, 25, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 27, 27, 0, 27, - 27, 0, 0, 0, 25, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 26, 0, 0, 0, 26, 26, 27, - 26, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 27, 27, 0, 0, 26, 26, 26, 0, 26, 26, - 0, 0, 0, 0, 0, 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, 0, 0, 29, 29, 29, 29, 29, 29, - 0, 0, 29, 0, 0, 0, 0, 0, 26, 0, - 0, 29, 0, 0, 0, 0, 0, 0, 0, 26, - 26, 0, 29, 0, 0, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 0, 0, 0, 29, 0, 25, - 25, 25, 25, 25, 25, 0, 0, 25, 0, 0, - 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 33, 33, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 34, 15, 0, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 34, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, + 14, 14, 0, 0, 0, 14, 14, 14, 12, 0, + 0, 12, 0, 12, 0, 0, 0, 7, 14, 0, + 14, 14, 14, 14, 14, 0, 0, 12, 0, 14, + 14, 14, 14, 15, 0, 0, 14, 0, 14, 14, + 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 7, 0, 7, 0, 0, 0, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 0, 7, 33, 33, 33, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 33, 12, 33, 33, 33, 33, 33, 0, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 0, 33, 0, + 33, 33, 33, 33, 33, 0, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 0, 0, 34, 34, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 34, 6, 34, 34, 34, 34, 34, 0, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 0, 34, 0, + 34, 34, 34, 34, 34, 0, 0, 15, 15, 15, + 15, 15, 15, 15, 15, 0, 0, 0, 15, 15, + 15, 6, 0, 0, 6, 0, 6, 0, 0, 0, + 0, 15, 0, 15, 15, 15, 15, 15, 0, 0, + 5, 0, 15, 15, 15, 15, 0, 0, 0, 15, + 0, 15, 15, 15, 15, 15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 12, 12, 12, 0, + 12, 12, 12, 0, 0, 0, 12, 12, 12, 0, + 5, 0, 0, 5, 0, 5, 0, 0, 0, 12, + 2, 12, 12, 12, 12, 12, 0, 0, 0, 0, + 12, 12, 12, 12, 6, 0, 0, 12, 0, 12, + 12, 12, 12, 12, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 0, 0, + 2, 0, 0, 2, 0, 2, 0, 0, 7, 0, + 7, 7, 7, 7, 7, 0, 0, 0, 60, 7, + 7, 7, 7, 0, 0, 0, 7, 0, 7, 7, + 7, 7, 7, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 60, 0, 0, 60, 60, + 60, 60, 60, 60, 0, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 60, 60, 60, 0, + 60, 60, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, + 6, 60, 60, 0, 6, 6, 0, 0, 0, 6, + 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 60, 0, 6, 0, 6, 6, 6, 6, 6, 0, + 0, 60, 60, 6, 6, 6, 6, 0, 0, 0, + 6, 0, 6, 6, 6, 6, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, + 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 5, 5, 5, 5, 5, 0, 0, + 0, 0, 5, 5, 5, 5, 0, 0, 0, 5, + 0, 5, 5, 5, 5, 5, 0, 2, 2, 2, + 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, + 2, 0, 0, 0, 0, 36, 0, 0, 28, 0, + 29, 2, 0, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, + 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 0, 56, 60, 60, 60, 0, + 0, 0, 0, 60, 0, 0, 0, 0, 0, 60, + 0, 60, 60, 60, 60, 60, 0, 60, 60, 60, + 60, 0, 60, 60, 60, 60, 0, 60, 35, 60, + 60, 60, 56, 0, 0, 56, 56, 56, 56, 56, + 56, 0, 56, 58, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 56, 56, 0, 0, 56, 56, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 58, 0, 0, 0, 58, 58, 0, 58, 56, 56, + 58, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 58, 58, 58, 0, 58, 58, 56, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, + 0, 0, 29, 29, 0, 29, 58, 58, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, + 29, 29, 0, 29, 29, 58, 0, 0, 0, 0, + 0, 0, 9, 10, 11, 0, 58, 58, 12, 13, + 0, 0, 0, 14, 15, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 29, 17, 0, 18, 19, + 20, 21, 22, 0, 0, 0, 0, 23, 24, 25, + 26, 0, 0, 29, 27, 0, 30, 31, 32, 33, + 34, 0, 0, 0, 29, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 0, 0, 56, 56, 56, 0, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 56, 0, 56, 56, + 56, 56, 56, 0, 56, 56, 56, 56, 0, 56, + 56, 56, 56, 0, 56, 0, 56, 56, 56, 0, + 58, 58, 58, 58, 58, 58, 0, 0, 58, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, + 0, 25, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 0, 0, 0, 58, 0, 0, 0, 29, 29, + 29, 29, 29, 29, 0, 0, 29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 29, 0, 25, 0, + 0, 0, 25, 25, 0, 25, 27, 29, 25, 0, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 25, + 25, 25, 29, 25, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 0, 0, 0, 27, 27, 0, + 27, 26, 0, 27, 25, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 27, 27, 0, 27, 27, + 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 25, 0, 0, 26, 0, + 0, 0, 26, 26, 0, 26, 0, 0, 26, 27, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 26, + 26, 26, 0, 26, 26, 0, 0, 0, 27, 0, + 59, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 26, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, + 0, 59, 59, 26, 59, 0, 0, 59, 0, 0, + 0, 0, 0, 0, 26, 26, 0, 0, 59, 59, + 59, 0, 59, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 59, 59, 0, 0, 0, 25, 25, + 25, 25, 25, 25, 0, 0, 25, 0, 0, 0, + 0, 0, 59, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 59, 59, 0, 0, 25, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, - 0, 0, 25, 0, 27, 27, 27, 27, 27, 27, - 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 0, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 25, 27, 27, 27, 27, 27, 27, 0, + 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 0, 0, 0, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 103, 104, 0, 57, 57, 0, 57, 0, - 0, 57, 0, 26, 26, 26, 26, 26, 26, 0, - 0, 26, 57, 57, 57, 0, 57, 57, 0, 0, - 26, 88, 0, 0, 0, 0, 134, 0, 136, 137, - 0, 26, 0, 0, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 0, 0, 0, 26, 57, 57, 0, - 0, 0, 0, 0, 0, 0, 159, 160, 88, 0, - 0, 0, 88, 88, 0, 88, 57, 0, 88, 89, - 0, 0, 0, 0, 0, 0, 0, 57, 57, 88, - 88, 88, 0, 88, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, - 89, 89, 0, 89, 88, 88, 89, 0, 0, 214, + 27, 27, 27, 27, 0, 0, 0, 27, 26, 26, + 26, 26, 26, 26, 0, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 91, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, + 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, + 91, 91, 0, 91, 0, 0, 91, 59, 59, 59, + 59, 59, 59, 0, 0, 59, 0, 91, 91, 91, + 0, 91, 91, 0, 0, 59, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 59, 0, 0, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, + 0, 59, 91, 91, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 0, 0, 0, 20, 20, 0, + 20, 91, 0, 20, 35, 0, 0, 0, 0, 0, + 0, 0, 91, 91, 20, 20, 20, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 0, 0, 0, 35, 35, 0, 35, 20, + 20, 35, 0, 0, 0, 0, 0, 0, 0, 92, + 0, 0, 35, 35, 35, 0, 35, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 92, 35, 35, 0, + 92, 92, 0, 92, 0, 0, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35, 92, 92, 92, + 0, 92, 0, 0, 0, 0, 0, 35, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 91, 91, 91, + 91, 91, 92, 92, 91, 65, 0, 0, 28, 0, + 29, 0, 0, 0, 91, 93, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 91, 0, 0, 91, 91, + 91, 0, 92, 92, 0, 91, 91, 0, 0, 0, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 93, 0, 0, 0, 93, 93, 0, 93, + 0, 0, 93, 20, 20, 20, 20, 20, 20, 0, + 0, 20, 0, 93, 93, 93, 0, 93, 0, 36, + 0, 20, 28, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 20, 0, 0, 20, 20, 20, 302, 0, + 89, 0, 20, 20, 0, 0, 0, 20, 93, 93, + 0, 35, 35, 35, 35, 35, 35, 0, 0, 35, + 0, 0, 0, 0, 0, 0, 0, 93, 0, 35, + 0, 0, 0, 0, 0, 0, 0, 89, 93, 93, + 35, 89, 89, 35, 35, 35, 0, 89, 0, 0, + 35, 35, 0, 0, 0, 35, 0, 0, 89, 89, + 89, 0, 89, 0, 0, 0, 92, 92, 92, 92, + 92, 92, 16, 0, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 89, 89, 92, 0, 0, 92, 92, + 92, 0, 0, 0, 0, 92, 92, 0, 0, 16, + 92, 0, 89, 16, 16, 0, 16, 0, 0, 16, + 0, 0, 0, 89, 89, 0, 125, 126, 12, 13, + 16, 16, 0, 14, 15, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 0, 18, 19, + 20, 0, 22, 0, 0, 0, 0, 23, 24, 25, + 26, 0, 0, 0, 27, 16, 16, 31, 32, 33, + 34, 0, 93, 93, 93, 93, 93, 93, 0, 0, + 93, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 93, 0, 0, 0, 0, 16, 16, 0, 11, 0, + 0, 93, 12, 13, 93, 93, 93, 14, 15, 16, + 0, 93, 93, 0, 0, 0, 93, 0, 0, 0, + 17, 0, 18, 19, 20, 0, 22, 0, 0, 0, + 0, 23, 24, 25, 26, 0, 0, 0, 27, 0, + 30, 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, - 222, 89, 224, 88, 225, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 88, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, - 0, 0, 89, 89, 0, 0, 0, 0, 0, 0, - 0, 264, 265, 266, 267, 268, 0, 0, 90, 0, - 0, 89, 90, 90, 0, 90, 0, 0, 90, 0, - 0, 0, 89, 89, 0, 0, 0, 0, 0, 90, - 90, 90, 0, 90, 0, 0, 0, 0, 0, 0, - 0, 57, 57, 57, 57, 57, 57, 0, 0, 57, - 292, 0, 0, 0, 294, 295, 296, 0, 57, 20, - 301, 0, 0, 0, 90, 90, 0, 0, 0, 57, - 0, 0, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 0, 0, 90, 57, 314, 315, 0, 0, 0, - 0, 319, 0, 0, 90, 90, 20, 0, 0, 0, - 20, 20, 0, 20, 0, 0, 20, 0, 88, 88, - 88, 88, 88, 88, 0, 0, 88, 20, 20, 20, - 0, 20, 0, 0, 0, 88, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 88, 0, 0, 88, - 88, 88, 0, 0, 0, 0, 88, 88, 0, 0, - 0, 88, 20, 20, 0, 0, 89, 89, 89, 89, - 89, 89, 0, 0, 89, 0, 0, 0, 0, 66, - 156, 20, 27, 89, 28, 0, 0, 0, 0, 35, - 0, 0, 20, 20, 89, 0, 0, 89, 89, 89, - 0, 0, 86, 0, 89, 89, 0, 0, 0, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, - 35, 35, 0, 35, 0, 0, 35, 0, 90, 90, - 90, 90, 90, 90, 0, 0, 90, 35, 35, 35, - 0, 35, 0, 0, 0, 90, 86, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 0, 0, 90, - 90, 90, 0, 0, 0, 0, 90, 90, 0, 0, - 0, 90, 35, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 0, 86, 86, 0, - 0, 35, 0, 86, 16, 0, 0, 0, 0, 0, - 0, 0, 35, 35, 86, 86, 86, 0, 86, 0, - 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, - 20, 20, 0, 0, 20, 0, 0, 0, 0, 0, - 0, 16, 0, 20, 0, 16, 16, 0, 16, 86, - 86, 16, 0, 0, 20, 0, 0, 20, 20, 20, - 0, 0, 16, 16, 20, 20, 0, 0, 86, 20, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, - 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, - 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, - 0, 17, 18, 19, 0, 21, 0, 16, 16, 0, - 22, 23, 24, 25, 0, 0, 0, 26, 0, 0, - 30, 31, 32, 33, 0, 0, 35, 35, 35, 35, - 35, 35, 0, 0, 35, 0, 0, 0, 0, 0, - 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 0, 35, 35, 35, - 0, 0, 0, 0, 35, 35, 0, 0, 0, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 86, 86, 86, 86, 86, 86, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 86, 0, 0, 86, 86, 86, 0, 0, 0, - 0, 86, 86, 0, 0, 0, 86, 0, 0, 0, - 0, 16, 16, 16, 16, 16, 16, 0, 41, 16, - 0, 0, 0, 0, 0, 53, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 41, 0, 16, 16, 16, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, - 106, 53, 109, 0, 0, 0, 113, 114, 0, 117, - 119, 120, 0, 53, 53, 124, 125, 41, 0, 0, - 0, 0, 0, 0, 0, 66, 0, 0, 27, 0, - 28, 0, 0, 135, 0, 0, 41, 139, 141, 142, - 143, 144, 0, 0, 189, 0, 0, 0, 0, 0, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, - 110, 0, 53, 110, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 41, 110, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, - 202, 203, 0, 0, 205, 206, 207, 208, 210, 0, - 0, 0, 0, 212, 213, 109, 53, 53, 109, 0, - 109, 220, 0, 0, 0, 221, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 232, 0, 0, 233, - 0, 0, 0, 110, 0, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 41, - 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 270, 0, 271, - 0, 272, 0, 273, 0, 274, 0, 0, 0, 103, - 276, 0, 103, 0, 103, 277, 278, 0, 109, 0, - 109, 0, 0, 53, 0, 0, 0, 0, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 126, 127, 12, 13, - 41, 175, 176, 14, 15, 177, 0, 178, 179, 0, - 180, 181, 182, 183, 184, 16, 185, 17, 18, 19, - 0, 21, 186, 0, 0, 0, 22, 23, 24, 25, - 0, 0, 103, 26, 103, 0, 30, 31, 32, 33, - 110, 0, 0, 110, 110, 0, 110, 110, 110, 110, - 110, 110, 110, 110, 0, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 0, 110, 110, 0, 0, - 0, 110, 110, 110, 110, 0, 0, 0, 110, 0, - 0, 110, 110, 110, 110, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 109, 0, 0, 109, 109, - 0, 109, 109, 109, 109, 109, 109, 109, 109, 0, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 0, 109, 109, 0, 0, 0, 109, 109, 109, 109, - 0, 0, 0, 109, 0, 0, 109, 109, 109, 109, - 104, 0, 0, 104, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, - 0, 0, 103, 103, 0, 103, 103, 103, 103, 103, - 103, 103, 103, 0, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 0, 103, 103, 0, 0, 0, - 103, 103, 103, 103, 0, 0, 0, 103, 0, 0, - 103, 103, 103, 103, 105, 0, 0, 105, 0, 105, - 0, 0, 0, 104, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, - 0, 0, 102, 0, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 105, 0, 105, - 0, 0, 0, 0, 0, 108, 0, 0, 108, 0, - 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 102, 0, 102, 0, 0, 0, 66, 105, - 0, 27, 0, 28, 0, 0, 0, 0, 0, 0, - 104, 0, 0, 104, 104, 0, 104, 104, 104, 104, - 104, 104, 104, 104, 0, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 0, 104, 104, 108, 0, - 108, 104, 104, 104, 104, 0, 0, 0, 104, 0, - 0, 104, 104, 104, 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 105, 0, 0, 105, 105, 0, - 105, 105, 105, 105, 105, 105, 105, 105, 0, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, - 105, 105, 0, 0, 0, 105, 105, 105, 105, 0, - 0, 0, 105, 0, 0, 105, 105, 105, 105, 102, - 0, 0, 102, 102, 0, 102, 102, 102, 102, 102, - 102, 102, 102, 0, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 35, 102, 102, 27, 0, 28, - 102, 102, 102, 102, 0, 0, 0, 102, 0, 0, - 102, 102, 102, 102, 0, 108, 0, 0, 108, 108, - 0, 108, 108, 108, 108, 108, 108, 108, 108, 0, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 0, 108, 108, 0, 0, 0, 108, 108, 108, 108, - 0, 0, 0, 108, 0, 0, 108, 108, 108, 108, - 137, 12, 13, 137, 0, 137, 14, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 34, 16, 137, - 17, 18, 19, 0, 21, 0, 0, 0, 0, 22, - 23, 24, 25, 0, 0, 0, 26, 0, 0, 30, - 31, 32, 33, 0, 0, 66, 0, 0, 27, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 137, 0, 137, 0, 0, 0, 0, - 66, 0, 0, 27, 0, 28, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, - 188, 0, 0, 0, 0, 0, 66, 0, 0, 27, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 10, 11, 0, 189, 0, 12, 13, 0, - 0, 0, 14, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 187, 16, 200, 17, 18, 19, 20, - 21, 0, 0, 0, 0, 22, 23, 24, 25, 0, - 0, 0, 26, 0, 29, 30, 31, 32, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 0, 27, 0, 28, 0, 0, 0, 187, - 137, 201, 0, 137, 137, 0, 137, 137, 137, 137, - 137, 137, 137, 137, 0, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 0, 137, 137, 0, 0, - 0, 137, 137, 137, 137, 0, 0, 0, 137, 0, - 0, 137, 137, 137, 137, 174, 0, 0, 12, 13, - 0, 175, 176, 14, 15, 177, 0, 178, 179, 0, - 180, 181, 182, 183, 184, 16, 185, 17, 18, 19, - 0, 21, 186, 0, 0, 0, 22, 23, 24, 25, - 0, 0, 0, 26, 0, 0, 30, 31, 32, 33, - 174, 0, 0, 12, 13, 0, 175, 176, 14, 15, - 177, 0, 178, 179, 0, 180, 181, 182, 183, 184, - 16, 185, 17, 18, 19, 0, 21, 186, 0, 0, - 0, 22, 23, 24, 25, 0, 0, 0, 26, 0, - 0, 30, 31, 32, 33, 0, 174, 0, 0, 12, - 13, 0, 175, 176, 14, 15, 177, 0, 178, 179, - 0, 180, 181, 182, 183, 184, 16, 185, 17, 18, - 19, 0, 21, 186, 0, 0, 0, 22, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 30, 31, 32, - 33, 66, 0, 0, 27, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 0, 0, 0, 0, 0, 0, 11, - 0, 0, 0, 12, 13, 0, 0, 0, 14, 15, - 0, 0, 0, 0, 0, 0, 66, 0, 0, 27, - 16, 28, 17, 18, 19, 0, 21, 0, 0, 0, - 0, 22, 23, 24, 25, 189, 0, 0, 26, 0, - 29, 30, 31, 32, 33, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 0, 231, 0, 0, 0, - 0, 66, 0, 0, 27, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, - 0, 285, 0, 0, 0, 0, 0, 107, 0, 0, - 107, 0, 107, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 0, 309, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, - 27, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107, 174, 107, 0, 12, 13, 0, 175, 176, 14, - 15, 177, 0, 178, 179, 0, 180, 181, 182, 183, - 184, 16, 185, 17, 18, 19, 0, 21, 186, 0, - 0, 0, 22, 23, 24, 25, 0, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 174, 0, 0, 12, - 13, 0, 175, 176, 14, 15, 177, 0, 178, 179, - 0, 180, 181, 182, 183, 184, 16, 185, 17, 18, - 19, 0, 21, 186, 0, 0, 0, 22, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 30, 31, 32, - 33, 174, 0, 0, 12, 13, 0, 175, 176, 14, - 15, 177, 0, 178, 179, 0, 180, 181, 182, 183, - 184, 16, 185, 17, 18, 19, 66, 21, 186, 27, - 111, 28, 22, 23, 24, 25, 0, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 89, 107, 90, 86, - 107, 107, 0, 107, 107, 107, 107, 107, 0, 107, - 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 0, 107, 107, 0, 0, 0, 107, 107, - 107, 107, 0, 0, 0, 107, 0, 0, 107, 107, - 107, 107, 130, 0, 0, 130, 0, 130, 0, 0, - 12, 13, 0, 175, 176, 14, 15, 0, 0, 0, - 0, 130, 180, 181, 182, 183, 184, 16, 0, 17, - 18, 19, 0, 21, 186, 0, 0, 0, 22, 23, - 24, 25, 0, 0, 0, 26, 0, 0, 30, 31, - 32, 33, 66, 0, 0, 27, 0, 28, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 90, 86, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 130, 0, 130, 0, 0, - 0, 0, 0, 0, 66, 241, 0, 27, 242, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 243, - 0, 27, 244, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, - 13, 86, 0, 0, 14, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 17, 18, - 19, 0, 21, 0, 0, 0, 0, 22, 23, 24, - 25, 87, 88, 0, 26, 0, 0, 30, 31, 32, - 33, 66, 248, 0, 27, 249, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 130, 0, 86, 130, 130, 0, 130, 130, - 130, 130, 130, 0, 130, 130, 0, 130, 130, 130, - 130, 130, 130, 130, 130, 130, 130, 0, 130, 130, - 0, 0, 0, 130, 130, 130, 130, 0, 0, 0, - 130, 0, 0, 130, 130, 130, 130, 35, 0, 0, - 27, 0, 28, 0, 0, 12, 13, 0, 0, 0, - 14, 15, 0, 0, 0, 0, 297, 0, 0, 0, - 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, - 0, 0, 0, 22, 23, 24, 25, 87, 88, 0, - 26, 0, 0, 30, 31, 32, 33, 12, 13, 0, - 0, 108, 14, 15, 27, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, - 21, 0, 0, 0, 0, 22, 23, 24, 25, 0, - 0, 0, 26, 0, 0, 30, 31, 32, 33, 0, - 0, 12, 13, 0, 0, 66, 14, 15, 27, 111, - 28, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 17, 18, 19, 0, 21, 0, 0, 0, 86, 22, - 23, 24, 25, 0, 0, 0, 26, 0, 0, 30, - 31, 32, 33, 0, 0, 0, 0, 0, 66, 0, - 0, 27, 161, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 13, 0, 0, 0, 14, - 15, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, - 0, 0, 22, 23, 24, 25, 0, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 66, 0, 0, 27, - 164, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 86, - 12, 13, 0, 0, 0, 14, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, - 18, 19, 66, 21, 0, 27, 166, 28, 22, 23, - 24, 25, 0, 0, 0, 26, 0, 29, 30, 31, - 32, 33, 0, 0, 0, 86, 0, 0, 0, 0, - 11, 0, 0, 0, 12, 13, 0, 0, 0, 14, - 15, 0, 0, 0, 66, 0, 0, 27, 167, 28, - 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, - 0, 0, 22, 23, 24, 25, 0, 86, 0, 26, - 0, 29, 30, 31, 32, 33, 0, 0, 12, 13, - 0, 0, 0, 14, 15, 0, 0, 66, 0, 0, - 27, 172, 28, 0, 0, 16, 0, 17, 18, 19, - 0, 21, 0, 0, 0, 0, 22, 23, 24, 25, - 86, 0, 0, 26, 0, 0, 30, 31, 32, 33, - 0, 12, 13, 0, 0, 0, 14, 15, 0, 0, - 66, 0, 0, 27, 173, 28, 0, 0, 16, 0, - 17, 18, 19, 0, 21, 0, 0, 0, 0, 22, - 23, 24, 25, 86, 0, 0, 26, 0, 0, 30, - 31, 32, 33, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66, 0, 0, 27, 0, 28, 0, 12, - 13, 0, 0, 0, 14, 15, 0, 0, 0, 0, - 195, 0, 0, 0, 0, 86, 16, 0, 17, 18, - 19, 0, 21, 0, 0, 0, 0, 22, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 30, 31, 32, - 33, 0, 0, 0, 0, 12, 13, 0, 0, 66, - 14, 15, 27, 0, 28, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 17, 18, 19, 198, 21, 0, - 0, 0, 86, 22, 23, 24, 25, 0, 0, 0, - 26, 0, 0, 30, 31, 32, 33, 12, 13, 0, - 0, 0, 14, 15, 66, 0, 0, 27, 0, 28, - 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, - 21, 0, 0, 0, 0, 22, 23, 24, 25, 0, - 0, 0, 26, 0, 0, 30, 31, 32, 33, 0, - 12, 13, 0, 0, 0, 14, 15, 0, 0, 66, - 246, 0, 27, 0, 28, 0, 0, 16, 0, 17, - 18, 19, 0, 21, 0, 0, 0, 0, 22, 23, - 24, 25, 86, 0, 0, 26, 0, 0, 30, 31, - 32, 33, 0, 12, 13, 0, 0, 0, 14, 15, - 0, 0, 66, 250, 0, 27, 0, 28, 0, 0, - 16, 0, 17, 18, 19, 0, 21, 0, 0, 0, - 0, 22, 23, 24, 25, 86, 0, 0, 26, 0, - 0, 30, 31, 32, 33, 12, 13, 0, 0, 0, - 14, 15, 0, 0, 66, 281, 0, 27, 0, 28, - 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, - 0, 0, 0, 22, 23, 24, 25, 86, 0, 0, - 26, 0, 0, 30, 31, 32, 33, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, - 0, 66, 287, 0, 27, 0, 28, 0, 0, 16, - 0, 17, 18, 19, 0, 21, 0, 0, 0, 0, - 22, 23, 24, 25, 86, 0, 0, 26, 0, 0, - 30, 31, 32, 33, 0, 126, 127, 12, 13, 0, - 0, 0, 14, 15, 0, 0, 66, 288, 0, 27, - 0, 28, 0, 0, 16, 0, 17, 18, 19, 0, - 21, 0, 0, 0, 0, 22, 23, 24, 25, 86, - 0, 0, 26, 0, 0, 30, 31, 32, 33, 0, - 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, - 0, 66, 289, 0, 27, 0, 28, 0, 0, 16, - 0, 17, 18, 19, 0, 21, 0, 0, 0, 0, - 22, 23, 24, 25, 86, 0, 0, 26, 0, 0, - 30, 31, 32, 33, 0, 12, 13, 0, 0, 0, - 14, 15, 0, 0, 66, 290, 0, 27, 0, 28, - 0, 0, 16, 0, 17, 18, 19, 0, 21, 0, - 0, 0, 0, 22, 23, 24, 25, 86, 0, 0, - 26, 0, 0, 30, 31, 32, 33, 12, 13, 0, - 0, 0, 14, 15, 0, 0, 66, 291, 0, 27, - 0, 28, 0, 0, 16, 0, 17, 18, 19, 0, - 21, 0, 0, 0, 0, 22, 23, 24, 25, 86, - 0, 0, 26, 0, 0, 30, 31, 32, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 89, 89, 0, 42, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 42, 0, 89, + 89, 89, 0, 42, 0, 0, 89, 89, 0, 0, + 0, 89, 0, 0, 0, 104, 0, 0, 109, 104, + 104, 112, 113, 0, 116, 118, 119, 0, 104, 104, + 123, 124, 42, 0, 0, 0, 0, 0, 0, 16, + 16, 16, 16, 16, 16, 0, 0, 16, 134, 0, + 0, 42, 138, 140, 141, 142, 143, 16, 106, 107, + 0, 0, 0, 0, 0, 0, 42, 0, 16, 154, + 0, 16, 16, 16, 0, 0, 0, 0, 0, 0, + 0, 164, 0, 16, 0, 0, 0, 104, 0, 133, + 0, 135, 136, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 42, 42, 0, 65, 0, 0, 28, 0, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 208, 209, 210, 211, 213, 0, 0, 0, + 0, 215, 216, 0, 104, 104, 0, 0, 0, 223, + 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 235, 203, 204, 236, 0, 0, + 237, 238, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 0, 0, 0, 0, 217, 0, 42, 42, 263, + 0, 67, 67, 0, 70, 71, 225, 67, 227, 0, + 228, 0, 0, 0, 0, 67, 0, 0, 275, 0, + 276, 0, 277, 0, 278, 0, 279, 0, 0, 0, + 0, 281, 0, 252, 0, 0, 282, 283, 65, 0, + 0, 28, 0, 29, 104, 0, 0, 0, 269, 270, + 271, 272, 273, 0, 0, 0, 0, 191, 0, 0, + 0, 0, 0, 0, 42, 67, 67, 67, 67, 67, + 67, 0, 0, 0, 0, 0, 0, 67, 0, 0, + 0, 42, 67, 0, 0, 67, 67, 0, 0, 67, + 0, 67, 67, 0, 0, 0, 67, 67, 0, 297, + 0, 0, 0, 299, 300, 301, 0, 67, 0, 306, + 0, 67, 0, 67, 67, 67, 67, 113, 0, 0, + 113, 189, 113, 0, 201, 0, 0, 67, 0, 0, + 0, 0, 0, 0, 319, 320, 113, 67, 12, 13, + 324, 177, 178, 14, 15, 16, 0, 0, 0, 0, + 0, 182, 183, 184, 185, 186, 17, 0, 18, 19, + 20, 0, 22, 188, 0, 67, 0, 23, 24, 25, + 26, 0, 0, 0, 27, 0, 0, 31, 32, 33, + 34, 67, 67, 67, 67, 0, 67, 0, 67, 67, + 0, 0, 0, 0, 0, 0, 67, 67, 0, 0, + 113, 0, 113, 0, 0, 0, 0, 0, 67, 67, + 67, 67, 0, 112, 0, 0, 112, 0, 112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 112, 0, 0, 0, 67, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 67, + 67, 67, 67, 0, 67, 67, 67, 0, 176, 125, + 126, 12, 13, 0, 177, 178, 14, 15, 16, 179, + 0, 180, 181, 0, 182, 183, 184, 185, 186, 17, + 187, 18, 19, 20, 0, 22, 188, 0, 0, 0, + 23, 24, 25, 26, 0, 0, 112, 27, 112, 0, + 31, 32, 33, 34, 106, 0, 0, 106, 0, 106, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, + 113, 113, 0, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 0, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 0, 113, 113, 0, 0, 0, 113, + 113, 113, 113, 0, 0, 0, 113, 0, 0, 113, + 113, 113, 113, 0, 0, 0, 0, 106, 107, 106, + 0, 107, 0, 107, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 0, 0, 112, 112, 0, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 0, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 0, + 112, 112, 0, 0, 0, 112, 112, 112, 112, 0, + 0, 107, 112, 107, 0, 112, 112, 112, 112, 108, + 0, 0, 108, 0, 108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 106, 0, 0, 106, 106, 0, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 0, 106, 106, 0, 0, 0, 106, 106, 106, 106, + 0, 0, 108, 106, 108, 0, 106, 106, 106, 106, + 0, 105, 0, 0, 105, 0, 105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, + 0, 107, 107, 0, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, + 107, 107, 107, 107, 0, 0, 0, 107, 0, 0, + 107, 107, 107, 107, 105, 0, 105, 0, 0, 0, + 0, 0, 111, 0, 0, 111, 0, 111, 0, 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, 108, + 0, 0, 108, 108, 0, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 0, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 0, 108, 108, 0, 0, + 0, 108, 108, 108, 108, 0, 0, 0, 108, 0, + 0, 108, 108, 108, 108, 111, 140, 111, 0, 140, + 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 105, 105, 0, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 0, 105, 105, + 0, 0, 0, 105, 105, 105, 105, 0, 0, 140, + 105, 140, 0, 105, 105, 105, 105, 65, 0, 0, + 28, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 111, 0, 0, 111, 111, 0, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, + 111, 0, 0, 0, 111, 111, 111, 111, 0, 0, + 189, 111, 190, 0, 111, 111, 111, 111, 0, 65, + 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 140, 0, 0, 140, + 140, 0, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 0, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 0, 140, 140, 0, 0, 0, 140, 140, + 140, 140, 0, 0, 0, 140, 0, 0, 140, 140, + 140, 140, 189, 0, 205, 0, 0, 0, 0, 0, + 65, 0, 0, 28, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, + 12, 13, 0, 177, 178, 14, 15, 16, 179, 0, + 180, 181, 0, 182, 183, 184, 185, 186, 17, 187, + 18, 19, 20, 0, 22, 188, 0, 0, 0, 23, + 24, 25, 26, 0, 0, 0, 27, 0, 0, 31, + 32, 33, 34, 189, 65, 206, 0, 28, 0, 29, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 12, 13, 0, 177, 178, 14, 15, 16, + 179, 0, 180, 181, 0, 182, 183, 184, 185, 186, + 17, 187, 18, 19, 20, 0, 22, 188, 0, 0, + 0, 23, 24, 25, 26, 0, 0, 189, 27, 234, + 0, 31, 32, 33, 34, 65, 0, 0, 28, 0, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 176, 0, 0, 12, 13, 0, 177, 178, 14, 15, + 16, 179, 0, 180, 181, 0, 182, 183, 184, 185, + 186, 17, 187, 18, 19, 20, 0, 22, 188, 0, + 0, 0, 23, 24, 25, 26, 0, 0, 189, 27, + 290, 0, 31, 32, 33, 34, 0, 65, 0, 0, + 28, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 176, 0, 0, 12, 13, 0, + 177, 178, 14, 15, 16, 179, 0, 180, 181, 0, + 182, 183, 184, 185, 186, 17, 187, 18, 19, 20, + 0, 22, 188, 0, 0, 0, 23, 24, 25, 26, + 0, 0, 0, 27, 0, 0, 31, 32, 33, 34, + 189, 0, 314, 0, 0, 0, 0, 0, 110, 0, + 0, 110, 0, 110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 176, 0, 0, 12, 13, + 0, 177, 178, 14, 15, 16, 179, 0, 180, 181, + 0, 182, 183, 184, 185, 186, 17, 187, 18, 19, + 20, 0, 22, 188, 0, 0, 0, 23, 24, 25, + 26, 0, 0, 0, 27, 0, 0, 31, 32, 33, + 34, 110, 133, 110, 0, 133, 0, 133, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, + 12, 13, 0, 177, 178, 14, 15, 16, 179, 0, + 180, 181, 0, 182, 183, 184, 185, 186, 17, 187, + 18, 19, 20, 65, 22, 188, 28, 156, 29, 23, + 24, 25, 26, 0, 0, 133, 27, 133, 0, 31, + 32, 33, 34, 88, 0, 89, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, + 28, 0, 29, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 110, 89, + 85, 110, 110, 0, 110, 110, 110, 110, 110, 110, + 0, 110, 110, 0, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 36, 110, 110, 28, 0, 29, + 110, 110, 110, 110, 0, 0, 0, 110, 0, 0, + 110, 110, 110, 110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 242, 0, 28, 243, 29, 0, 0, 0, + 0, 0, 133, 0, 0, 133, 133, 0, 133, 133, + 133, 133, 133, 133, 85, 133, 133, 0, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 0, 133, + 133, 0, 0, 0, 133, 133, 133, 133, 0, 0, + 0, 133, 0, 0, 133, 133, 133, 133, 65, 244, + 0, 28, 245, 29, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 0, 0, 0, 12, 13, 0, 0, + 0, 14, 15, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 18, 19, 20, 0, + 22, 0, 0, 0, 0, 23, 24, 25, 26, 86, + 87, 0, 27, 0, 0, 31, 32, 33, 34, 0, + 12, 13, 0, 0, 0, 14, 15, 16, 0, 0, + 0, 0, 65, 246, 0, 28, 247, 29, 17, 0, + 18, 19, 20, 0, 22, 0, 0, 0, 0, 23, + 24, 25, 26, 86, 87, 85, 27, 0, 0, 31, + 32, 33, 34, 11, 0, 125, 126, 12, 13, 0, + 0, 0, 14, 15, 16, 0, 0, 65, 248, 0, + 28, 249, 29, 0, 0, 17, 0, 18, 19, 20, + 0, 22, 0, 0, 0, 0, 23, 24, 25, 26, + 85, 0, 0, 27, 0, 30, 31, 32, 33, 34, 0, 0, 0, 0, 12, 13, 0, 0, 0, 14, - 15, 0, 0, 66, 293, 0, 27, 0, 28, 0, - 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, - 0, 0, 22, 23, 24, 25, 86, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 0, 0, 0, 12, - 13, 0, 0, 0, 14, 15, 0, 0, 0, 66, - 0, 0, 27, 0, 28, 0, 16, 0, 17, 18, - 19, 0, 21, 0, 0, 0, 0, 22, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 30, 31, 32, - 33, 0, 0, 0, 12, 13, 0, 0, 0, 14, - 15, 0, 0, 0, 0, 66, 0, 0, 27, 0, - 28, 16, 0, 17, 18, 19, 0, 21, 0, 0, - 0, 0, 22, 23, 24, 25, 0, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 0, 12, 13, 0, - 0, 0, 14, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 17, 18, 19, 66, - 21, 0, 27, 0, 28, 22, 23, 24, 25, 0, - 0, 0, 26, 0, 0, 30, 31, 32, 33, 12, - 13, 0, 0, 0, 14, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 17, 18, - 19, 0, 21, 0, 0, 0, 0, 22, 23, 24, - 25, 0, 0, 0, 26, 0, 0, 30, 31, 32, - 33, 66, 0, 0, 27, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 13, 0, 0, - 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 17, 18, 19, 0, 21, - 0, 0, 0, 0, 22, 23, 24, 25, 0, 0, - 0, 26, 0, 0, 30, 31, 32, 33, 116, 0, - 0, 66, 12, 13, 27, 0, 28, 14, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 17, 18, 19, 86, 21, 0, 0, 0, 0, - 22, 23, 24, 25, 0, 0, 0, 26, 0, 0, - 30, 31, 32, 33, 118, 0, 0, 66, 12, 13, - 27, 0, 28, 14, 15, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 17, 18, 19, - 0, 21, 0, 0, 0, 0, 22, 23, 24, 25, - 0, 0, 0, 26, 0, 0, 30, 31, 32, 33, - 51, 0, 0, 27, 0, 28, 0, 0, 140, 0, - 0, 0, 12, 13, 0, 0, 0, 14, 15, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 17, 18, 19, 0, 21, 0, 0, 0, 0, - 22, 23, 24, 25, 0, 0, 0, 26, 0, 0, - 30, 31, 32, 33, 66, 0, 0, 27, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 209, 0, 0, 0, 12, 13, 0, 0, 0, 14, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, - 0, 0, 22, 23, 24, 25, 0, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 16, 0, 0, 65, 253, 0, 28, 254, 29, + 0, 0, 17, 0, 18, 19, 20, 0, 22, 0, + 0, 0, 0, 23, 24, 25, 26, 85, 0, 0, + 27, 0, 0, 31, 32, 33, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 15, 16, 36, + 0, 0, 28, 0, 29, 0, 0, 0, 0, 17, + 0, 18, 19, 20, 0, 22, 0, 0, 0, 0, + 23, 24, 25, 26, 0, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 153, 0, 0, 28, + 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, + 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 0, 18, 19, 20, 0, 22, + 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, + 0, 27, 0, 0, 31, 32, 33, 34, 0, 0, + 12, 13, 0, 0, 0, 14, 15, 16, 0, 0, + 65, 0, 0, 28, 156, 29, 0, 0, 17, 0, + 18, 19, 20, 0, 22, 0, 0, 0, 0, 23, + 24, 25, 26, 85, 0, 0, 27, 0, 0, 31, + 32, 33, 34, 0, 0, 0, 0, 12, 13, 0, + 0, 0, 14, 15, 16, 0, 0, 65, 160, 0, + 28, 0, 29, 0, 0, 17, 0, 18, 19, 20, + 0, 22, 0, 0, 0, 0, 23, 24, 25, 26, + 85, 0, 0, 27, 0, 0, 31, 32, 33, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 16, + 0, 0, 65, 0, 0, 28, 163, 29, 0, 0, + 17, 0, 18, 19, 20, 0, 22, 0, 0, 0, + 0, 23, 24, 25, 26, 85, 0, 0, 27, 0, + 30, 31, 32, 33, 34, 11, 0, 0, 0, 12, + 13, 0, 0, 0, 14, 15, 16, 0, 0, 65, + 0, 0, 28, 166, 29, 0, 0, 17, 0, 18, + 19, 20, 0, 22, 0, 0, 0, 0, 23, 24, + 25, 26, 85, 0, 0, 27, 0, 30, 31, 32, + 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 0, 0, 28, 168, 29, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, + 0, 0, 0, 12, 13, 0, 0, 0, 14, 15, + 16, 0, 0, 0, 0, 65, 0, 0, 28, 169, + 29, 17, 0, 18, 19, 20, 0, 22, 0, 0, + 0, 0, 23, 24, 25, 26, 0, 0, 85, 27, + 0, 0, 31, 32, 33, 34, 0, 0, 0, 0, + 12, 13, 0, 0, 0, 14, 15, 16, 0, 0, + 65, 0, 0, 28, 174, 29, 0, 0, 17, 0, + 18, 19, 20, 0, 22, 0, 0, 0, 0, 23, + 24, 25, 26, 85, 0, 0, 27, 0, 0, 31, + 32, 33, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, + 14, 15, 16, 0, 0, 65, 0, 0, 28, 175, + 29, 0, 0, 17, 0, 18, 19, 20, 0, 22, + 0, 0, 0, 0, 23, 24, 25, 26, 85, 0, + 0, 27, 0, 0, 31, 32, 33, 34, 0, 0, + 0, 0, 12, 13, 0, 0, 0, 14, 15, 16, + 0, 0, 65, 0, 0, 28, 0, 29, 0, 0, + 17, 0, 18, 19, 20, 0, 22, 0, 0, 0, + 197, 23, 24, 25, 26, 85, 0, 0, 27, 0, + 0, 31, 32, 33, 34, 12, 13, 0, 0, 0, + 14, 15, 16, 0, 0, 65, 0, 0, 28, 0, + 29, 0, 0, 17, 0, 18, 19, 20, 0, 22, + 0, 0, 0, 200, 23, 24, 25, 26, 85, 0, + 0, 27, 0, 0, 31, 32, 33, 34, 12, 13, + 0, 0, 0, 14, 15, 16, 0, 0, 65, 251, + 0, 28, 0, 29, 0, 0, 17, 0, 18, 19, + 20, 0, 22, 0, 0, 0, 0, 23, 24, 25, + 26, 85, 0, 0, 27, 0, 0, 31, 32, 33, + 34, 0, 0, 12, 13, 0, 0, 0, 14, 15, + 16, 0, 0, 65, 255, 0, 28, 0, 29, 0, + 0, 17, 0, 18, 19, 20, 0, 22, 0, 0, + 0, 0, 23, 24, 25, 26, 85, 0, 0, 27, + 0, 0, 31, 32, 33, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, + 0, 0, 0, 14, 15, 16, 0, 0, 65, 286, + 0, 28, 0, 29, 0, 0, 17, 0, 18, 19, + 20, 0, 22, 0, 0, 0, 0, 23, 24, 25, + 26, 85, 0, 0, 27, 0, 0, 31, 32, 33, + 34, 0, 0, 0, 0, 12, 13, 0, 0, 0, + 14, 15, 16, 0, 0, 65, 292, 0, 28, 0, + 29, 0, 0, 17, 0, 18, 19, 20, 0, 22, + 0, 0, 0, 0, 23, 24, 25, 26, 85, 0, + 0, 27, 0, 0, 31, 32, 33, 34, 12, 13, + 0, 0, 0, 14, 15, 16, 0, 0, 65, 293, + 0, 28, 0, 29, 0, 0, 17, 0, 18, 19, + 20, 0, 22, 0, 0, 0, 0, 23, 24, 25, + 26, 85, 0, 0, 27, 0, 0, 31, 32, 33, + 34, 12, 13, 0, 0, 0, 14, 15, 16, 0, + 0, 65, 294, 0, 28, 0, 29, 0, 0, 17, + 0, 18, 19, 20, 0, 22, 0, 0, 0, 0, + 23, 24, 25, 26, 85, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 0, 0, 12, 13, 0, 0, + 0, 14, 15, 16, 0, 0, 65, 295, 0, 28, + 0, 29, 0, 0, 17, 0, 18, 19, 20, 0, + 22, 0, 0, 0, 0, 23, 24, 25, 26, 85, + 0, 0, 27, 0, 0, 31, 32, 33, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 15, 16, 0, + 0, 65, 296, 0, 28, 0, 29, 0, 0, 17, + 0, 18, 19, 20, 0, 22, 0, 0, 0, 0, + 23, 24, 25, 26, 85, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 0, 0, 0, 0, 12, 13, + 0, 0, 0, 14, 15, 16, 0, 0, 65, 298, + 0, 28, 0, 29, 0, 0, 17, 0, 18, 19, + 20, 0, 22, 0, 0, 0, 0, 23, 24, 25, + 26, 85, 0, 0, 27, 0, 0, 31, 32, 33, + 34, 12, 13, 0, 0, 0, 14, 15, 16, 0, + 0, 65, 108, 0, 28, 0, 29, 0, 0, 17, + 0, 18, 19, 20, 0, 22, 0, 0, 0, 0, + 23, 24, 25, 26, 0, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 12, 13, 0, 0, 0, 14, + 15, 16, 0, 0, 0, 0, 0, 0, 65, 0, + 0, 28, 17, 29, 18, 19, 20, 0, 22, 0, + 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, + 27, 0, 0, 31, 32, 33, 34, 0, 0, 12, + 13, 0, 0, 0, 14, 15, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 0, 18, + 19, 20, 65, 22, 0, 28, 0, 29, 23, 24, + 25, 26, 0, 0, 0, 27, 0, 0, 31, 32, + 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 14, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 17, 18, 19, 0, 21, 0, 0, - 0, 0, 22, 23, 24, 25, 0, 0, 0, 26, - 0, 0, 30, 31, 32, 33, 269, 0, 0, 0, - 12, 13, 0, 0, 0, 14, 15, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, - 18, 19, 0, 21, 0, 0, 0, 0, 22, 23, - 24, 25, 0, 0, 0, 26, 0, 0, 30, 31, - 32, 33, 0, 12, 13, 0, 0, 0, 14, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 17, 18, 19, 0, 21, 0, 0, 0, - 0, 22, 23, 24, 25, 57, 0, 0, 26, 0, - 0, 30, 31, 32, 33, 0, 68, 68, 0, 71, - 72, 0, 68, 0, 0, 0, 0, 12, 13, 0, - 68, 0, 14, 15, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 0, 16, 0, 17, 18, 19, 0, - 21, 0, 0, 0, 0, 22, 23, 24, 25, 0, - 0, 0, 26, 0, 0, 30, 31, 32, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 68, 68, 68, 68, 68, 0, 0, - 0, 0, 0, 0, 0, 68, 0, 0, 68, 0, - 0, 0, 68, 68, 0, 0, 68, 0, 68, 68, - 0, 0, 0, 68, 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 0, 0, 0, 68, 0, - 68, 68, 68, 68, 0, 0, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 68, 68, 0, 68, 68, 68, 68, 0, 68, - 0, 68, 68, 0, 0, 67, 69, 0, 0, 68, - 68, 73, 0, 0, 0, 0, 0, 0, 0, 91, - 0, 68, 68, 0, 0, 0, 0, 0, 0, 0, - 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, - 68, 68, 68, 68, 0, 68, 68, 68, 0, 0, - 0, 146, 147, 148, 149, 150, 151, 0, 0, 0, - 0, 0, 0, 0, 91, 0, 0, 91, 0, 0, - 0, 91, 91, 0, 0, 91, 0, 91, 91, 0, - 0, 0, 91, 91, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 0, 0, 0, 91, 0, 91, - 91, 91, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 91, 0, 91, 91, 91, 91, 0, 91, 0, - 91, 91, 0, 0, 0, 0, 0, 0, 91, 91, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 91, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, - 91, 91, 91, 0, 91, 91, 91, + 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 18, 19, 20, 65, 22, 0, + 28, 0, 29, 23, 24, 25, 26, 0, 0, 0, + 27, 0, 0, 31, 32, 33, 34, 0, 0, 0, + 0, 12, 13, 0, 0, 0, 14, 15, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 18, 19, 20, 65, 22, 0, 28, 0, 29, + 23, 24, 25, 26, 0, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 12, 13, 0, 0, 0, 14, + 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 18, 19, 20, 65, 22, 0, + 28, 0, 29, 23, 24, 25, 26, 0, 0, 0, + 27, 0, 0, 31, 32, 33, 34, 115, 0, 0, + 85, 12, 13, 0, 0, 0, 14, 15, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 18, 19, 20, 65, 22, 0, 28, 0, 29, + 23, 24, 25, 26, 0, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, + 0, 117, 0, 0, 0, 12, 13, 0, 0, 0, + 14, 15, 16, 0, 0, 0, 0, 65, 0, 0, + 28, 0, 29, 17, 0, 18, 19, 20, 0, 22, + 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, + 0, 27, 0, 0, 31, 32, 33, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, + 12, 13, 0, 0, 0, 14, 15, 16, 102, 0, + 0, 28, 0, 29, 0, 0, 0, 0, 17, 0, + 18, 19, 20, 0, 22, 0, 0, 0, 0, 23, + 24, 25, 26, 0, 0, 0, 27, 0, 0, 31, + 32, 33, 34, 212, 0, 0, 0, 12, 13, 0, + 0, 0, 14, 15, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 18, 19, 20, + 0, 22, 0, 0, 0, 0, 23, 24, 25, 26, + 0, 0, 0, 27, 0, 0, 31, 32, 33, 34, + 12, 13, 0, 0, 0, 14, 15, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 18, 19, 20, 0, 22, 0, 0, 0, 0, 23, + 24, 25, 26, 0, 0, 0, 27, 0, 0, 31, + 32, 33, 34, 274, 0, 0, 0, 12, 13, 0, + 0, 0, 14, 15, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 18, 19, 20, + 0, 22, 0, 0, 0, 0, 23, 24, 25, 26, + 0, 0, 0, 27, 0, 0, 31, 32, 33, 34, + 12, 13, 0, 0, 0, 14, 15, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, + 18, 19, 20, 0, 22, 0, 0, 0, 0, 23, + 24, 25, 26, 0, 0, 0, 27, 0, 0, 31, + 32, 33, 34, 0, 0, 0, 0, 66, 68, 0, + 0, 12, 13, 72, 0, 0, 14, 15, 16, 0, + 0, 90, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 18, 19, 20, 0, 22, 0, 0, 0, 0, + 23, 24, 25, 26, 0, 0, 0, 27, 0, 0, + 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 145, 146, 147, 148, 149, 150, 0, 0, 0, + 0, 0, 0, 90, 0, 0, 0, 0, 90, 0, + 0, 90, 90, 0, 0, 90, 0, 90, 90, 0, + 0, 0, 90, 90, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 0, 0, 0, 90, 0, 90, + 90, 90, 90, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 90, 90, + 90, 0, 90, 0, 90, 90, 0, 0, 0, 0, + 0, 0, 90, 90, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 90, 90, 90, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 90, 90, 90, 90, 0, + 90, 90, 90, }; short yycheck[] = { 41, - 0, 41, 63, 41, 37, 41, 41, 59, 59, 42, - 43, 63, 45, 63, 47, 35, 63, 219, 41, 63, - 50, 63, 38, 63, 59, 63, 123, 63, 62, 37, - 44, 123, 62, 63, 42, 103, 104, 37, 35, 47, - 40, 41, 42, 43, 44, 45, 51, 47, 35, 63, - 41, 94, 41, 44, 288, 0, 301, 302, 58, 59, - 60, 94, 62, 63, 297, 60, 134, 301, 302, 112, - 59, 292, 41, 40, 307, 44, 59, 261, 262, 112, - 40, 40, 303, 304, 123, 40, 94, 40, 108, 40, - 124, 121, 37, 93, 94, 297, 41, 42, 43, 44, - 45, 286, 47, 108, 112, 307, 91, 41, 222, 40, - 0, 108, 112, 58, 59, 60, 40, 62, 63, 40, - 261, 108, 44, 123, 124, 59, 40, 123, 62, 41, - 60, 112, 41, 41, 292, 280, 41, 44, 44, 41, - 292, 41, 41, 93, 41, 175, 176, 37, 93, 94, - 40, 41, 42, 43, 40, 45, 224, 47, 40, 59, - 40, 292, 59, 290, 261, 262, 41, 112, 58, 59, - 60, 91, 62, 63, 59, 41, 272, 7, 123, 124, - 294, 295, 296, 40, 200, 271, 41, 41, 0, 93, - 124, 41, 93, 41, 59, 59, -1, 216, -1, 29, - 314, 315, -1, 93, 94, 319, -1, -1, -1, 260, - 261, 262, 41, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 112, -1, 292, 260, 261, 262, 289, 290, - 59, 265, 262, 123, 124, -1, -1, 289, 290, 289, - 290, 274, 289, 290, -1, 289, 290, 289, 290, 289, - 290, 289, 290, 289, 290, 85, -1, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 289, 290, 268, 269, - 100, 260, 261, 262, 274, 289, 290, 260, 261, 262, - 280, 41, 282, 283, 284, 285, 286, 41, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 292, 298, 59, - 300, 301, 302, 303, 304, 59, 136, 137, 303, 304, - -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, - 265, -1, -1, 268, 269, -1, 260, 261, 262, 274, - -1, 265, -1, -1, -1, 280, 41, 282, 283, 284, - 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, - 295, 296, -1, 298, 59, 300, 301, 302, 303, 304, - 260, 261, 262, 260, 261, 262, -1, 257, 258, 259, - 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, - 0, -1, -1, -1, 274, -1, -1, 217, 218, -1, - 280, -1, 282, 283, 284, 285, 286, 41, 288, 289, - 290, 291, 292, 293, 294, 295, 296, -1, 298, -1, - 300, 301, 302, 303, 304, 59, -1, 37, -1, -1, - 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, - -1, 260, 261, 262, -1, 0, -1, -1, 58, 59, - -1, -1, 62, 63, -1, -1, -1, -1, -1, -1, - -1, -1, 282, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 299, - -1, -1, 37, 93, 94, 40, 41, 42, 43, 44, - 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, - 0, -1, 112, 58, 59, 60, -1, 62, 63, -1, - 260, 261, 262, 123, 124, -1, 260, 261, 262, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 37, 93, 94, - 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, - 60, -1, 62, 63, -1, 260, 261, 262, 123, 124, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 93, 94, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, -1, 112, 40, 41, 42, 43, 44, 45, -1, - 47, -1, -1, 123, 124, -1, 260, 261, 262, -1, - -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, - -1, -1, -1, -1, 274, -1, 93, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, -1, 288, 289, - 290, 291, 292, 293, 294, 295, 296, -1, 298, -1, - 300, 301, 302, 303, 304, -1, 123, 124, -1, -1, - -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, - 265, -1, -1, 268, 269, -1, -1, -1, -1, 274, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, - 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 0, 41, 60, 41, 37, 41, 59, 59, 39, 42, + 43, 63, 45, 63, 47, 59, 62, 41, 36, 102, + 36, 63, 36, 63, 302, 63, 123, 63, 37, 222, + 7, 44, 123, 42, 312, 289, 123, 37, 47, 94, + 40, 41, 42, 43, 44, 45, 63, 47, 302, 303, + 63, 225, 63, 30, 293, 0, 40, 112, 58, 59, + 60, 94, 62, 63, 40, 304, 305, 287, 41, 41, + 153, 44, 44, 302, 303, 261, 262, 40, 124, 112, + 63, 106, 107, 40, 40, 94, 40, 40, 40, 91, + 40, 40, 37, 93, 94, 261, 41, 42, 43, 44, + 45, 123, 47, 112, 40, 60, 112, 84, 133, 302, + 0, 41, 112, 58, 59, 60, 41, 62, 63, 312, + 41, 293, 99, 123, 124, 299, 300, 301, 281, 44, + 41, 41, 44, 93, 41, 153, 44, 153, 293, 153, + 41, 293, 41, 40, 40, 319, 320, 37, 93, 94, + 324, 41, 42, 43, 44, 45, 40, 47, 135, 136, + 59, 291, 41, 62, 261, 262, 59, 112, 58, 59, + 60, 91, 62, 63, 205, 273, 41, 40, 123, 124, + 93, 41, 272, 41, 0, 41, 59, 93, 59, 41, + 219, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 227, 93, 94, -1, -1, 260, 261, 262, + -1, 41, -1, -1, 41, -1, 260, 261, 262, 265, + -1, -1, 112, 40, -1, 124, 43, -1, 45, 59, + -1, -1, 59, 123, 124, 293, -1, -1, 290, 291, + 290, 291, 275, 220, 221, -1, 304, 305, 290, 291, + 290, 291, 290, 291, 290, 291, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 290, 291, 268, 269, + 270, -1, 297, 290, 291, 275, -1, 290, 291, 290, + 291, 281, 41, 283, 284, 285, 286, 287, 41, 289, + 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, + 59, 301, 302, 303, 304, 305, 59, 290, 291, -1, + 287, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, 269, 270, -1, 304, -1, -1, + 275, -1, -1, -1, -1, -1, 281, 41, 283, 284, + 285, 286, 287, -1, 289, 290, 291, 292, 293, 294, + 295, 296, 297, -1, 299, 59, 301, 302, 303, 304, + 305, 260, 261, 262, -1, -1, 265, 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, - -1, -1, -1, -1, 274, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, -1, 288, 289, - -1, 291, 292, 293, 294, 295, 296, -1, 298, -1, - 300, 301, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, - -1, 268, 269, 0, -1, -1, -1, 274, -1, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, 288, 289, 290, 291, 292, 293, 294, 295, 296, - -1, 298, -1, 300, 301, 302, 303, 304, -1, -1, - 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, - 47, -1, -1, -1, -1, -1, -1, -1, 0, -1, - -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 270, 0, -1, -1, -1, 275, -1, -1, -1, -1, + 41, 281, -1, 283, 284, 285, 286, 287, 41, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 59, 299, + -1, 301, 302, 303, 304, 305, 59, -1, 37, -1, + -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, + 260, 261, 262, 260, 261, 262, 0, -1, 41, 58, + 59, -1, -1, 62, 63, -1, 263, 264, 52, 53, + -1, 268, 269, 270, -1, -1, 59, 61, 62, -1, + -1, -1, -1, -1, 281, -1, 283, 284, 285, -1, + 287, 41, -1, 37, 93, 94, 40, 41, 42, 43, + 44, 45, 299, 47, -1, 302, 303, 304, 305, 59, + -1, 0, -1, 112, 58, 59, 60, -1, 62, 63, + -1, 260, 261, 262, 123, 124, -1, 260, 261, 262, + -1, -1, -1, -1, -1, -1, 120, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 37, 93, + 94, 40, 41, 42, 43, -1, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, -1, 62, 63, -1, 260, 261, 262, 123, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 177, 178, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, 94, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 112, -1, -1, -1, -1, -1, 260, + 261, 262, -1, -1, 123, 124, -1, 260, 261, 262, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, + 269, 270, -1, -1, -1, -1, 275, 260, 261, 262, + -1, -1, 281, 267, 283, 284, 285, 286, 287, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, + 299, -1, 301, 302, 303, 304, 305, -1, -1, -1, + 260, 261, 262, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, -1, 268, 269, 270, -1, -1, -1, + -1, 275, -1, -1, -1, -1, -1, 281, -1, 283, + 284, 285, 286, 287, -1, 289, 290, 291, 292, 293, + 294, 295, 296, 297, -1, 299, -1, 301, 302, 303, + 304, 305, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, + 269, 270, 0, -1, -1, -1, 275, -1, -1, -1, + -1, -1, 281, -1, 283, 284, 285, 286, 287, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, + 299, -1, 301, 302, 303, 304, 305, -1, -1, 37, + -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + 58, 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 37, 93, 94, 40, 41, - 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, - -1, -1, 0, -1, -1, 112, 58, 59, 60, -1, - 62, 63, -1, -1, -1, -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - -1, 93, 40, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, 37, 93, 94, 40, 41, 42, + 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, + -1, 0, -1, -1, 112, 58, 59, 60, -1, 62, + 63, -1, -1, -1, -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 59, 60, -1, 62, 63, -1, -1, -1, -1, - -1, 123, 124, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, + 93, 40, 41, 42, 43, 44, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, + 123, 124, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, - 45, -1, 47, -1, -1, 123, 124, -1, -1, -1, + -1, -1, 37, 112, -1, 40, 41, 42, 43, 44, + 45, -1, 47, -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, -1, 62, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, + 268, 269, 270, -1, -1, -1, -1, 275, 93, -1, + -1, -1, -1, 281, -1, 283, 284, 285, 286, 287, + -1, 289, 290, -1, 292, 293, 294, 295, 296, 297, + -1, 299, -1, 301, 302, 303, 304, 305, 123, 124, + -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, + 263, 264, 265, -1, -1, 268, 269, 270, -1, -1, + -1, -1, 275, -1, -1, -1, -1, -1, 281, -1, + 283, 284, 285, 286, 287, -1, 289, 290, 291, 292, + 293, 294, 295, 296, 297, -1, 299, -1, 301, 302, + 303, 304, 305, -1, -1, -1, -1, -1, 257, 258, + 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, + 269, 270, -1, -1, -1, -1, 275, -1, -1, -1, + -1, -1, 281, -1, 283, 284, 285, 286, 287, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, + 299, -1, 301, -1, -1, 304, 305, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, - -1, 268, 269, -1, -1, -1, -1, 274, 93, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, 288, 289, 290, 291, 292, 293, 294, 295, 296, - -1, 298, -1, 300, -1, -1, 303, 304, 123, 124, - -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, - 262, 263, 264, 265, -1, -1, 268, 269, -1, -1, - -1, -1, 274, -1, -1, -1, -1, -1, 280, -1, - 282, 283, 284, 285, 286, -1, 288, 289, 290, 291, - 292, 293, 294, 295, 296, -1, 298, -1, 300, 301, - 302, 303, 304, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 0, -1, - 268, 269, -1, -1, -1, -1, 274, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, 285, 286, -1, - 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, - 298, -1, 300, 301, 302, 303, 304, -1, 40, -1, - -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, - 265, -1, -1, 268, 269, 0, -1, -1, -1, 274, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, - 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, - -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, - 45, 123, 47, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, 58, 59, 60, -1, 62, 63, -1, + 265, -1, -1, 268, 269, 270, 0, -1, -1, -1, + 275, -1, -1, -1, -1, -1, 281, -1, 283, 284, + 285, 286, 287, -1, 289, 290, 291, 292, 293, 294, + 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, + 305, -1, -1, 37, -1, -1, 40, 41, 42, 43, + 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 37, -1, 93, 40, - 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, 58, 59, 60, - -1, 62, 63, -1, -1, -1, -1, -1, 123, 124, + -1, -1, -1, -1, -1, -1, -1, 37, -1, 93, + 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, 58, 59, + 60, -1, 62, 63, -1, -1, -1, -1, -1, 123, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, -1, 93, 40, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 58, 59, 60, -1, 62, 63, -1, -1, + -1, -1, -1, 123, 124, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, -1, 93, 40, 41, 42, 43, 44, 45, -1, - 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, - -1, -1, 123, 124, -1, 257, 258, 259, 260, 261, - 262, 263, 264, -1, -1, -1, 268, 269, -1, -1, - -1, -1, -1, -1, -1, -1, 93, 94, 280, -1, - 282, 283, 284, 285, 286, -1, -1, -1, -1, 291, - 292, 293, 294, -1, -1, 112, 298, -1, 300, 301, - 302, 303, 304, -1, -1, -1, 123, 124, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 37, -1, -1, 40, + 41, 42, 43, 44, 45, -1, 47, 123, 124, -1, + -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, + -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, + 264, 265, -1, -1, 268, 269, 270, -1, -1, -1, + -1, 275, 93, -1, -1, -1, -1, 281, -1, 283, + 284, 285, 286, 287, -1, 289, 290, 291, 292, 293, + 294, 295, 296, 297, -1, 299, -1, 301, 302, 303, + 304, 305, 123, 124, -1, -1, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, + 270, -1, -1, -1, -1, 275, -1, -1, -1, -1, + -1, 281, -1, 283, 284, 285, 286, 287, -1, 289, + 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, + -1, 301, 302, 303, 304, 305, -1, -1, -1, -1, + -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, + -1, -1, 268, 269, 270, -1, -1, -1, -1, 275, + -1, -1, -1, -1, -1, 281, -1, 283, 284, 285, + 286, 287, -1, 289, 290, 291, 292, 293, 294, 295, + 296, 297, -1, 299, -1, 301, 302, 303, 304, 305, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, - 265, -1, -1, 268, 269, -1, -1, -1, -1, 274, - -1, 40, -1, -1, 43, 280, 45, 282, 283, 284, - 285, 286, -1, 288, 289, 290, 291, 292, 293, 294, - 295, 296, -1, 298, -1, 300, 301, 302, 303, 304, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - 261, 262, 263, 264, 265, -1, -1, 268, 269, -1, - -1, -1, -1, 274, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, 288, 289, 290, - 291, 292, 293, 294, 295, 296, -1, 298, -1, 300, - 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, - 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, - -1, 268, 269, 0, -1, -1, -1, 274, -1, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, - -1, 298, -1, 300, -1, -1, 303, 304, -1, -1, - 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, - 47, -1, -1, -1, -1, -1, -1, -1, 0, -1, - -1, 58, 59, 60, -1, 62, -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, 93, 94, 40, 41, - -1, 43, 44, 45, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, 112, 58, 59, 60, -1, - 62, 63, -1, -1, 263, 264, 123, 124, -1, 268, - 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 280, -1, 282, 283, 284, -1, 286, -1, 40, - 41, 93, 43, 44, 45, -1, -1, 0, -1, 298, - -1, -1, 301, 302, 303, 304, -1, 58, 59, 60, - -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, - -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 40, 41, -1, - -1, 44, 93, 259, -1, 261, 262, 263, 264, -1, - -1, 0, 268, 269, -1, 58, 59, 60, -1, 62, - 63, -1, -1, -1, 280, -1, 282, 283, 284, -1, - 286, -1, 123, 124, -1, 291, 292, 293, 294, -1, - -1, -1, 298, -1, 300, 301, 302, 303, 304, -1, - 93, 40, -1, -1, 43, -1, 45, -1, -1, -1, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 0, - 59, 268, 269, -1, -1, -1, -1, 274, -1, -1, - 123, 124, -1, 280, -1, 282, 283, 284, 285, 286, - -1, 288, -1, -1, 291, 292, 293, 294, 295, 296, - -1, 298, -1, 300, 301, 302, 303, 304, -1, 40, - -1, -1, 43, -1, 45, 257, 258, 259, 260, 261, - 262, 263, 264, 265, -1, -1, 268, 269, 59, -1, - -1, -1, 274, -1, 123, -1, -1, -1, 280, 0, - 282, 283, 284, 285, 286, -1, 288, 289, 290, 291, - 292, 293, 294, 295, 296, -1, 298, -1, 300, 301, - 302, 303, 304, -1, -1, -1, 257, 258, 259, 260, - 261, 262, 263, 264, 265, -1, -1, 268, 269, 40, - -1, -1, 43, 274, 45, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, 288, 289, 290, - 291, 292, 293, 294, 295, 296, -1, 298, -1, 300, - 301, 302, 303, 304, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 0, -1, 268, 269, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, 288, 289, 290, 291, 292, - 293, 294, 295, 296, -1, 298, -1, 300, 301, 302, - 303, 304, 123, 40, 41, -1, -1, 44, 257, 258, - 259, 260, 261, 262, 263, 264, -1, 0, -1, 268, - 269, 58, 59, 60, -1, 62, 63, -1, -1, -1, - -1, 280, -1, 282, 283, 284, 285, 286, -1, -1, - -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, - -1, 300, 301, 302, 303, 304, 93, 40, -1, -1, - 43, -1, 45, -1, -1, -1, 257, 258, 259, 260, - 261, 262, 263, 264, 0, -1, 59, 268, 269, -1, - -1, -1, -1, -1, -1, -1, 123, 124, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, - 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, -1, - 123, -1, 263, 264, -1, 0, -1, 268, 269, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 285, 286, -1, -1, -1, -1, - 291, 292, 293, 294, -1, -1, -1, 298, -1, 300, - 301, 302, 303, 304, -1, 40, -1, -1, 43, -1, - 45, -1, -1, -1, -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, - 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, - -1, 268, 269, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 280, -1, 282, 283, 284, 285, 286, - -1, 288, 289, 290, 291, 292, 293, 294, 295, 296, - -1, 298, -1, 300, 301, 302, 303, 304, 123, -1, - -1, -1, -1, -1, 257, 258, 259, 260, -1, 262, - 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 285, 286, -1, -1, -1, -1, 291, 292, - 293, 294, -1, -1, -1, 298, -1, 300, 301, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, -1, -1, -1, 263, 264, -1, - -1, -1, 268, 269, -1, -1, 40, 41, -1, 43, - 44, 45, -1, -1, 280, -1, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 63, - -1, -1, 298, -1, 300, 301, 302, 303, 304, -1, + 261, 262, 263, 264, 265, -1, -1, 268, 269, 270, + 0, -1, -1, -1, 275, -1, -1, -1, -1, -1, + 281, -1, 283, 284, 285, 286, 287, -1, 289, 290, + 291, 292, 293, 294, 295, 296, 297, -1, 299, -1, + 301, 302, 303, 304, 305, -1, -1, 37, -1, -1, + 40, 41, 42, 43, 44, 45, -1, 47, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, 58, 59, + 60, -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 40, 41, -1, 43, 44, 45, -1, - -1, -1, 257, 258, 259, -1, -1, -1, 263, 264, - -1, -1, -1, 268, 269, 0, 63, -1, -1, -1, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, -1, -1, -1, 291, 292, 293, 294, - -1, -1, -1, 298, -1, 300, 301, 302, 303, 304, - -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, - 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, 93, 94, 40, 41, 42, 43, 44, + 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, + 0, -1, 112, 58, 59, 60, -1, 62, -1, -1, + -1, -1, -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 37, 93, 94, - 40, 41, 42, 43, 44, 45, -1, 47, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, 94, + 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, 58, 59, - -1, -1, 62, 63, -1, -1, -1, -1, 123, 124, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 37, -1, -1, -1, 41, - 42, -1, 44, 93, 94, 47, -1, -1, -1, 263, - 264, -1, -1, -1, 268, 269, 58, 59, 60, -1, - 62, 63, 112, -1, -1, -1, 280, -1, 282, 283, - 284, -1, 286, 123, 124, -1, -1, 291, 292, 293, - 294, -1, -1, -1, 298, -1, -1, 301, 302, 303, - 304, 93, 94, -1, -1, -1, 263, 264, -1, -1, - -1, 268, 269, -1, -1, -1, -1, -1, -1, -1, - 112, -1, -1, 280, -1, 282, 283, 284, -1, 286, - -1, 123, 124, -1, 291, 292, 293, 294, -1, -1, - -1, 298, -1, -1, 301, 302, 303, 304, -1, -1, + 60, -1, 62, 63, -1, -1, -1, -1, 123, 124, + -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, - 265, -1, -1, 268, 269, -1, -1, -1, -1, 274, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - 285, 286, -1, 288, 289, 290, 291, -1, 293, 294, - 295, 296, -1, 298, -1, 300, 301, 302, -1, -1, + -1, -1, -1, 93, -1, -1, -1, -1, -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, 123, 124, -1, -1, -1, -1, -1, + -1, 58, 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, -1, -1, 268, 269, - -1, -1, -1, -1, 274, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, 285, 286, 0, 288, 289, - 290, 291, -1, 293, 294, 295, 296, -1, 298, -1, - 300, 301, 302, -1, -1, 257, 258, 259, 260, 261, - 262, -1, -1, 265, -1, -1, -1, -1, -1, -1, - -1, -1, 274, -1, 37, -1, -1, -1, 41, 42, - -1, 44, 0, 285, 47, -1, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 58, 59, 60, 300, 62, - 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, - -1, -1, -1, 41, 42, -1, 44, 0, -1, 47, - 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, - 58, 59, 60, -1, 62, 63, -1, -1, -1, 112, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 123, 124, -1, -1, 37, -1, -1, -1, 41, 42, - -1, 44, -1, -1, 47, 93, 94, -1, -1, -1, - -1, -1, -1, -1, -1, 58, 59, 60, -1, 62, - 63, -1, -1, -1, 112, -1, 0, -1, -1, -1, - -1, -1, -1, -1, -1, 123, 124, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37, -1, -1, -1, 41, 42, 112, - 44, -1, -1, 47, -1, -1, -1, -1, -1, -1, - 123, 124, -1, -1, 58, 59, 60, -1, 62, 63, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - 94, -1, -1, -1, 257, 258, 259, 260, 261, 262, - -1, -1, 265, -1, -1, -1, -1, -1, 112, -1, - -1, 274, -1, -1, -1, -1, -1, -1, -1, 123, - 124, -1, 285, -1, -1, 288, 289, 290, 291, 292, - 293, 294, 295, 296, -1, -1, -1, 300, -1, 257, - 258, 259, 260, 261, 262, -1, -1, 265, -1, -1, - -1, -1, -1, -1, -1, -1, 274, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 285, -1, -1, - 288, 289, 290, 291, 292, 293, 294, 295, 296, -1, - -1, -1, 300, -1, 257, 258, 259, 260, 261, 262, - -1, -1, 265, -1, -1, -1, -1, -1, -1, -1, - -1, 274, -1, -1, 0, -1, -1, -1, -1, -1, - -1, -1, 285, -1, -1, 288, 289, 290, 291, 292, - 293, 294, 295, 296, -1, -1, -1, 300, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 37, 47, 48, -1, 41, 42, -1, 44, -1, - -1, 47, -1, 257, 258, 259, 260, 261, 262, -1, - -1, 265, 58, 59, 60, -1, 62, 63, -1, -1, - 274, 0, -1, -1, -1, -1, 81, -1, 83, 84, - -1, 285, -1, -1, 288, 289, 290, 291, 292, 293, - 294, 295, 296, -1, -1, -1, 300, 93, 94, -1, - -1, -1, -1, -1, -1, -1, 111, 112, 37, -1, - -1, -1, 41, 42, -1, 44, 112, -1, 47, 0, - -1, -1, -1, -1, -1, -1, -1, 123, 124, 58, - 59, 60, -1, 62, 63, -1, -1, -1, -1, -1, + 270, -1, -1, -1, -1, 275, 93, -1, -1, -1, + -1, 281, -1, 283, 284, 285, 286, 287, -1, -1, + 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, + -1, 301, -1, -1, 304, 305, 123, 124, -1, -1, + -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, 269, 270, -1, -1, -1, -1, + 275, -1, -1, -1, -1, -1, 281, -1, 283, 284, + 285, 286, 287, -1, 289, -1, -1, 292, 293, 294, + 295, 296, 297, -1, 299, -1, 301, 302, 303, 304, + 305, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, 262, 263, 264, 265, -1, 0, 268, 269, + 270, -1, -1, -1, -1, 275, -1, -1, -1, -1, + -1, 281, -1, 283, 284, 285, 286, 287, -1, 289, + 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, + -1, 301, 302, 303, 304, 305, -1, 40, -1, -1, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 0, + -1, 268, 269, 270, -1, -1, -1, -1, 275, -1, + -1, -1, -1, -1, 281, -1, 283, 284, 285, 286, + 287, -1, 289, 290, 291, 292, 293, 294, 295, 296, + 297, -1, 299, -1, 301, 302, 303, 304, 305, 40, + 41, -1, -1, 44, -1, -1, -1, -1, -1, 0, + 123, -1, -1, -1, -1, -1, -1, 58, 59, 60, + -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, + 41, -1, 93, 44, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, 58, 59, 60, + -1, 62, 63, -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, + 40, -1, 93, 43, -1, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 123, 124, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, + 263, 264, -1, -1, -1, 268, 269, 270, 40, -1, + -1, 43, -1, 45, -1, -1, -1, 0, 281, -1, + 283, 284, 285, 286, 287, -1, -1, 59, -1, 292, + 293, 294, 295, 123, -1, -1, 299, -1, 301, 302, + 303, 304, 305, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, + 43, -1, 45, -1, -1, -1, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, 59, 268, 269, 270, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 123, 283, 284, 285, 286, 287, -1, 289, 290, + 291, 292, 293, 294, 295, 296, 297, -1, 299, -1, + 301, 302, 303, 304, 305, -1, 257, 258, 259, 260, + 261, 262, 263, 264, 265, -1, -1, 268, 269, 270, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 0, 283, 284, 285, 286, 287, -1, 289, 290, + 291, 292, 293, 294, 295, 296, 297, -1, 299, -1, + 301, 302, 303, 304, 305, -1, -1, 257, 258, 259, + 260, 261, 262, 263, 264, -1, -1, -1, 268, 269, + 270, 40, -1, -1, 43, -1, 45, -1, -1, -1, + -1, 281, -1, 283, 284, 285, 286, 287, -1, -1, + 0, -1, 292, 293, 294, 295, -1, -1, -1, 299, + -1, 301, 302, 303, 304, 305, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + 262, 263, 264, -1, -1, -1, 268, 269, 270, -1, + 40, -1, -1, 43, -1, 45, -1, -1, -1, 281, + 0, 283, 284, 285, 286, 287, -1, -1, -1, -1, + 292, 293, 294, 295, 123, -1, -1, 299, -1, 301, + 302, 303, 304, 305, 257, 258, 259, 260, 261, 262, + 263, 264, -1, -1, -1, 268, 269, 270, -1, -1, + 40, -1, -1, 43, -1, 45, -1, -1, 281, -1, + 283, 284, 285, 286, 287, -1, -1, -1, 0, 292, + 293, 294, 295, -1, -1, -1, 299, -1, 301, 302, + 303, 304, 305, 123, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 37, -1, -1, 40, 41, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, 59, 60, -1, + 62, 63, -1, 123, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 93, 94, -1, 263, 264, -1, -1, -1, 268, + 269, 270, -1, -1, -1, -1, -1, -1, -1, -1, + 112, -1, 281, -1, 283, 284, 285, 286, 287, -1, + -1, 123, 124, 292, 293, 294, 295, -1, -1, -1, + 299, -1, 301, 302, 303, 304, 305, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + -1, -1, -1, 263, 264, -1, -1, -1, 268, 269, + 270, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 281, -1, 283, 284, 285, 286, 287, -1, -1, + -1, -1, 292, 293, 294, 295, -1, -1, -1, 299, + -1, 301, 302, 303, 304, 305, -1, 257, 258, 259, + -1, -1, -1, 263, 264, -1, -1, -1, 268, 269, + 270, -1, -1, -1, -1, 40, -1, -1, 43, -1, + 45, 281, -1, 283, 284, 285, 286, 287, -1, -1, + -1, -1, 292, 293, 294, 295, -1, -1, -1, 299, + -1, 301, 302, 303, 304, 305, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, + 262, 263, 264, 265, -1, 0, 268, 269, 270, -1, + -1, -1, -1, 275, -1, -1, -1, -1, -1, 281, + -1, 283, 284, 285, 286, 287, -1, 289, 290, 291, + 292, -1, 294, 295, 296, 297, -1, 299, 123, 301, + 302, 303, 37, -1, -1, 40, 41, 42, 43, 44, + 45, -1, 47, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -1, -1, 62, 63, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 37, -1, -1, -1, 41, 42, -1, 44, 93, 94, + 47, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 58, 59, 60, -1, 62, 63, 112, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 123, 124, + -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, + -1, -1, 41, 42, -1, 44, 93, 94, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, -1, 62, 63, 112, -1, -1, -1, -1, + -1, -1, 257, 258, 259, -1, 123, 124, 263, 264, + -1, -1, -1, 268, 269, 270, -1, -1, -1, -1, + -1, -1, -1, -1, 93, 94, 281, -1, 283, 284, + 285, 286, 287, -1, -1, -1, -1, 292, 293, 294, + 295, -1, -1, 112, 299, -1, 301, 302, 303, 304, + 305, -1, -1, -1, 123, 124, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, - 41, 42, -1, 44, 93, 94, 47, -1, -1, 174, - -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, - 185, 62, 187, 112, 189, -1, -1, -1, -1, -1, - -1, 0, -1, -1, 123, 124, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 211, -1, -1, -1, - -1, -1, 93, 94, -1, -1, -1, -1, -1, -1, - -1, 226, 227, 228, 229, 230, -1, -1, 37, -1, - -1, 112, 41, 42, -1, 44, -1, -1, 47, -1, - -1, -1, 123, 124, -1, -1, -1, -1, -1, 58, - 59, 60, -1, 62, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, 261, 262, -1, -1, 265, - 275, -1, -1, -1, 279, 280, 281, -1, 274, 0, - 285, -1, -1, -1, 93, 94, -1, -1, -1, 285, - -1, -1, 288, 289, 290, 291, 292, 293, 294, 295, - 296, -1, -1, 112, 300, 310, 311, -1, -1, -1, - -1, 316, -1, -1, 123, 124, 37, -1, -1, -1, - 41, 42, -1, 44, -1, -1, 47, -1, 257, 258, - 259, 260, 261, 262, -1, -1, 265, 58, 59, 60, - -1, 62, -1, -1, -1, 274, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 285, -1, -1, 288, - 289, 290, -1, -1, -1, -1, 295, 296, -1, -1, - -1, 300, 93, 94, -1, -1, 257, 258, 259, 260, - 261, 262, -1, -1, 265, -1, -1, -1, -1, 40, - 41, 112, 43, 274, 45, -1, -1, -1, -1, 0, - -1, -1, 123, 124, 285, -1, -1, 288, 289, 290, - -1, -1, 63, -1, 295, 296, -1, -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, + 265, -1, -1, 268, 269, 270, -1, -1, -1, -1, + 275, -1, -1, -1, -1, -1, 281, -1, 283, 284, + 285, 286, 287, -1, 289, 290, 291, 292, -1, 294, + 295, 296, 297, -1, 299, -1, 301, 302, 303, -1, + 257, 258, 259, 260, 261, 262, -1, -1, 265, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 275, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, + -1, 0, 289, 290, 291, 292, 293, 294, 295, 296, + 297, -1, -1, -1, 301, -1, -1, -1, 257, 258, + 259, 260, 261, 262, -1, -1, 265, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 275, -1, 37, -1, + -1, -1, 41, 42, -1, 44, 0, 286, 47, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 58, + 59, 60, 301, 62, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37, -1, -1, -1, 41, 42, -1, + 44, 0, -1, 47, 93, 94, -1, -1, -1, -1, + -1, -1, -1, -1, 58, 59, 60, -1, 62, 63, + -1, -1, -1, 112, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 123, 124, -1, -1, 37, -1, + -1, -1, 41, 42, -1, 44, -1, -1, 47, 93, + 94, -1, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 60, -1, 62, 63, -1, -1, -1, 112, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, 123, + 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, 94, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, + -1, 41, 42, 112, 44, -1, -1, 47, -1, -1, + -1, -1, -1, -1, 123, 124, -1, -1, 58, 59, + 60, -1, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, 94, -1, -1, -1, 257, 258, + 259, 260, 261, 262, -1, -1, 265, -1, -1, -1, + -1, -1, 112, -1, -1, -1, 275, -1, -1, -1, + -1, -1, -1, 123, 124, -1, -1, 286, -1, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, + -1, -1, 301, 257, 258, 259, 260, 261, 262, -1, + -1, 265, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 275, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 286, -1, -1, 289, 290, 291, 292, 293, + 294, 295, 296, 297, -1, -1, -1, 301, 257, 258, + 259, 260, 261, 262, -1, -1, 265, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 275, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, 286, -1, -1, + 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, + -1, -1, 301, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, - 41, 42, -1, 44, -1, -1, 47, -1, 257, 258, - 259, 260, 261, 262, -1, -1, 265, 58, 59, 60, - -1, 62, -1, -1, -1, 274, 0, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 285, -1, -1, 288, - 289, 290, -1, -1, -1, -1, 295, 296, -1, -1, - -1, 300, 93, 94, -1, -1, -1, -1, -1, -1, + 41, 42, -1, 44, -1, -1, 47, 257, 258, 259, + 260, 261, 262, -1, -1, 265, -1, 58, 59, 60, + -1, 62, 63, -1, -1, 275, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 286, -1, -1, 289, + 290, 291, 292, 293, 294, 295, 296, 297, -1, -1, + -1, 301, 93, 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, 41, 42, -1, - -1, 112, -1, 47, 0, -1, -1, -1, -1, -1, + 44, 112, -1, 47, 0, -1, -1, -1, -1, -1, -1, -1, 123, 124, 58, 59, 60, -1, 62, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - 261, 262, -1, -1, 265, -1, -1, -1, -1, -1, - -1, 37, -1, 274, -1, 41, 42, -1, 44, 93, - 94, 47, -1, -1, 285, -1, -1, 288, 289, 290, - -1, -1, 58, 59, 295, 296, -1, -1, 112, 300, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, -1, -1, -1, 41, 42, -1, 44, 93, + 94, 47, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, 58, 59, 60, -1, 62, -1, 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, 94, -1, - -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, - -1, -1, -1, -1, -1, -1, 112, -1, -1, 280, - -1, 282, 283, 284, -1, 286, -1, 123, 124, -1, - 291, 292, 293, 294, -1, -1, -1, 298, -1, -1, - 301, 302, 303, 304, -1, -1, 257, 258, 259, 260, - 261, 262, -1, -1, 265, -1, -1, -1, -1, -1, - -1, -1, -1, 274, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 285, -1, -1, 288, 289, 290, - -1, -1, -1, -1, 295, 296, -1, -1, -1, 300, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 259, 260, 261, 262, -1, - -1, 265, -1, -1, -1, -1, -1, -1, -1, -1, - 274, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 285, -1, -1, 288, 289, 290, -1, -1, -1, - -1, 295, 296, -1, -1, -1, 300, -1, -1, -1, - -1, 257, 258, 259, 260, 261, 262, -1, 7, 265, - -1, -1, -1, -1, -1, 14, -1, -1, 274, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 285, - 29, -1, 288, 289, 290, -1, 35, -1, -1, -1, - -1, -1, -1, -1, 300, -1, -1, -1, -1, -1, - 49, 50, 51, -1, -1, -1, 55, 56, -1, 58, - 59, 60, -1, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, - 45, -1, -1, 82, -1, -1, 85, 86, 87, 88, - 89, 90, -1, -1, 59, -1, -1, -1, -1, -1, - -1, 100, -1, -1, -1, -1, -1, -1, -1, 108, - -1, -1, -1, -1, -1, -1, 115, -1, -1, -1, - 40, -1, 121, 43, -1, 45, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 136, 137, 59, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - 159, 160, -1, -1, 163, 164, 165, 166, 167, -1, - -1, -1, -1, 172, 173, 40, 175, 176, 43, -1, - 45, 180, -1, -1, -1, 184, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, 195, -1, -1, 198, - -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 217, 218, - 219, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 236, -1, 238, - -1, 240, -1, 242, -1, 244, -1, -1, -1, 40, - 249, -1, 43, -1, 45, 254, 255, -1, 123, -1, - 125, -1, -1, 262, -1, -1, -1, -1, 59, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 282, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 260, 261, 262, 263, 264, - 299, 266, 267, 268, 269, 270, -1, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, -1, 291, 292, 293, 294, - -1, -1, 123, 298, 125, -1, 301, 302, 303, 304, - 260, -1, -1, 263, 264, -1, 266, 267, 268, 269, - 270, 271, 272, 273, -1, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - -1, 291, 292, 293, 294, -1, -1, -1, 298, -1, - -1, 301, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 260, -1, -1, 263, 264, - -1, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, -1, 291, 292, 293, 294, - -1, -1, -1, 298, -1, -1, 301, 302, 303, 304, - 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, 37, 93, 94, -1, + 41, 42, -1, 44, -1, -1, 47, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 112, 58, 59, 60, + -1, 62, -1, -1, -1, -1, -1, 123, 124, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, + 261, 262, 93, 94, 265, 40, -1, -1, 43, -1, + 45, -1, -1, -1, 275, 0, -1, -1, -1, -1, + -1, 112, -1, -1, -1, 286, -1, -1, 289, 290, + 291, -1, 123, 124, -1, 296, 297, -1, -1, -1, + 301, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 37, -1, -1, -1, 41, 42, -1, 44, + -1, -1, 47, 257, 258, 259, 260, 261, 262, -1, + -1, 265, -1, 58, 59, 60, -1, 62, -1, 40, + -1, 275, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, 286, -1, -1, 289, 290, 291, 59, -1, + 0, -1, 296, 297, -1, -1, -1, 301, 93, 94, + -1, 257, 258, 259, 260, 261, 262, -1, -1, 265, + -1, -1, -1, -1, -1, -1, -1, 112, -1, 275, + -1, -1, -1, -1, -1, -1, -1, 37, 123, 124, + 286, 41, 42, 289, 290, 291, -1, 47, -1, -1, + 296, 297, -1, -1, -1, 301, -1, -1, 58, 59, + 60, -1, 62, -1, -1, -1, 257, 258, 259, 260, + 261, 262, 0, -1, 265, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 275, -1, -1, -1, -1, -1, + -1, -1, -1, 93, 94, 286, -1, -1, 289, 290, + 291, -1, -1, -1, -1, 296, 297, -1, -1, 37, + 301, -1, 112, 41, 42, -1, 44, -1, -1, 47, + -1, -1, -1, 123, 124, -1, 261, 262, 263, 264, + 58, 59, -1, 268, 269, 270, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 281, -1, 283, 284, + 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, + 295, -1, -1, -1, 299, 93, 94, 302, 303, 304, + 305, -1, 257, 258, 259, 260, 261, 262, -1, -1, + 265, -1, -1, -1, 112, -1, -1, -1, -1, -1, + 275, -1, -1, -1, -1, 123, 124, -1, 259, -1, + -1, 286, 263, 264, 289, 290, 291, 268, 269, 270, + -1, 296, 297, -1, -1, -1, 301, -1, -1, -1, + 281, -1, 283, 284, 285, -1, 287, -1, -1, -1, + -1, 292, 293, 294, 295, -1, -1, -1, 299, -1, + 301, 302, 303, 304, 305, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, 261, 262, -1, 7, 265, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 275, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 286, 30, -1, 289, + 290, 291, -1, 36, -1, -1, 296, 297, -1, -1, + -1, 301, -1, -1, -1, 48, -1, -1, 51, 52, + 53, 54, 55, -1, 57, 58, 59, -1, 61, 62, + 63, 64, 65, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, 261, 262, -1, -1, 265, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 275, 49, 50, + -1, -1, -1, -1, -1, -1, 99, -1, 286, 102, + -1, 289, 290, 291, -1, -1, -1, -1, -1, -1, + -1, 114, -1, 301, -1, -1, -1, 120, -1, 80, + -1, 82, 83, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 135, 136, -1, 40, -1, -1, 43, -1, + 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 153, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 165, 166, 167, 168, 169, -1, -1, -1, + -1, 174, 175, -1, 177, 178, -1, -1, -1, 182, + -1, -1, -1, 186, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 197, 156, 157, 200, -1, -1, + 203, 204, -1, -1, -1, -1, -1, -1, -1, -1, + 17, -1, -1, -1, -1, 176, -1, 220, 221, 222, + -1, 28, 29, -1, 31, 32, 187, 34, 189, -1, + 191, -1, -1, -1, -1, 42, -1, -1, 241, -1, + 243, -1, 245, -1, 247, -1, 249, -1, -1, -1, + -1, 254, -1, 214, -1, -1, 259, 260, 40, -1, + -1, 43, -1, 45, 267, -1, -1, -1, 229, 230, + 231, 232, 233, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, 287, 92, 93, 94, 95, 96, + 97, -1, -1, -1, -1, -1, -1, 104, -1, -1, + -1, 304, 109, -1, -1, 112, 113, -1, -1, 116, + -1, 118, 119, -1, -1, -1, 123, 124, -1, 280, + -1, -1, -1, 284, 285, 286, -1, 134, -1, 290, + -1, 138, -1, 140, 141, 142, 143, 40, -1, -1, + 43, 123, 45, -1, 151, -1, -1, 154, -1, -1, + -1, -1, -1, -1, 315, 316, 59, 164, 263, 264, + 321, 266, 267, 268, 269, 270, -1, -1, -1, -1, + -1, 276, 277, 278, 279, 280, 281, -1, 283, 284, + 285, -1, 287, 288, -1, 192, -1, 292, 293, 294, + 295, -1, -1, -1, 299, -1, -1, 302, 303, 304, + 305, 208, 209, 210, 211, -1, 213, -1, 215, 216, + -1, -1, -1, -1, -1, -1, 223, 224, -1, -1, + 123, -1, 125, -1, -1, -1, -1, -1, 235, 236, + 237, 238, -1, 40, -1, -1, 43, -1, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, -1, 263, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 275, 276, + 277, 278, 279, -1, 281, 282, 283, -1, 260, 261, + 262, 263, 264, -1, 266, 267, 268, 269, 270, 271, + -1, 273, 274, -1, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, -1, + 292, 293, 294, 295, -1, -1, 123, 299, 125, -1, + 302, 303, 304, 305, 40, -1, -1, 43, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, + 263, 264, -1, 266, 267, 268, 269, 270, 271, 272, + 273, 274, -1, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, -1, 292, + 293, 294, 295, -1, -1, -1, 299, -1, -1, 302, + 303, 304, 305, -1, -1, -1, -1, 123, 40, 125, + -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 260, -1, -1, 263, 264, -1, 266, + 267, 268, 269, 270, 271, 272, 273, 274, -1, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, + 287, 288, -1, -1, -1, 292, 293, 294, 295, -1, + -1, 123, 299, 125, -1, 302, 303, 304, 305, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, 287, 288, -1, -1, -1, 292, 293, 294, 295, + -1, -1, 123, 299, 125, -1, 302, 303, 304, 305, + -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, + -1, 263, 264, -1, 266, 267, 268, 269, 270, 271, + 272, 273, 274, -1, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, -1, 287, 288, -1, -1, -1, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, 123, -1, 125, -1, -1, -1, + -1, -1, 40, -1, -1, 43, -1, 45, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, - 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, -1, 286, 287, -1, -1, -1, - 291, 292, 293, 294, -1, -1, -1, 298, -1, -1, - 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, - -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + 271, 272, 273, 274, -1, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, + -1, 292, 293, 294, 295, -1, -1, -1, 299, -1, + -1, 302, 303, 304, 305, 123, 40, 125, -1, 43, + -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, -1, -1, 263, 264, -1, 266, 267, 268, + 269, 270, 271, 272, 273, 274, -1, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, + -1, -1, -1, 292, 293, 294, 295, -1, -1, 123, + 299, 125, -1, 302, 303, 304, 305, 40, -1, -1, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 260, -1, -1, 263, 264, -1, 266, 267, + 268, 269, 270, 271, 272, 273, 274, -1, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, -1, 292, 293, 294, 295, -1, -1, + 123, 299, 125, -1, 302, 303, 304, 305, -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 123, -1, 125, - -1, -1, -1, -1, -1, 40, -1, -1, 43, -1, - 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 260, -1, -1, 263, + 264, -1, 266, 267, 268, 269, 270, 271, 272, 273, + 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, -1, 287, 288, -1, -1, -1, 292, 293, + 294, 295, -1, -1, -1, 299, -1, -1, 302, 303, + 304, 305, 123, -1, 125, -1, -1, -1, -1, -1, + 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 123, -1, 125, -1, -1, -1, 40, 41, - -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, - 260, -1, -1, 263, 264, -1, 266, 267, 268, 269, - 270, 271, 272, 273, -1, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, -1, 286, 287, 123, -1, - 125, 291, 292, 293, 294, -1, -1, -1, 298, -1, - -1, 301, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, + 263, 264, -1, 266, 267, 268, 269, 270, 271, -1, + 273, 274, -1, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, -1, 287, 288, -1, -1, -1, 292, + 293, 294, 295, -1, -1, -1, 299, -1, -1, 302, + 303, 304, 305, 123, 40, 125, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 260, -1, -1, 263, 264, -1, - 266, 267, 268, 269, 270, 271, 272, 273, -1, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, - 286, 287, -1, -1, -1, 291, 292, 293, 294, -1, - -1, -1, 298, -1, -1, 301, 302, 303, 304, 260, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, 263, 264, -1, 266, 267, 268, 269, 270, - 271, 272, 273, -1, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 40, 286, 287, 43, -1, 45, - 291, 292, 293, 294, -1, -1, -1, 298, -1, -1, - 301, 302, 303, 304, -1, 260, -1, -1, 263, 264, - -1, 266, 267, 268, 269, 270, 271, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, -1, 291, 292, 293, 294, - -1, -1, -1, 298, -1, -1, 301, 302, 303, 304, - 40, 263, 264, 43, -1, 45, 268, 269, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 123, 280, 59, - 282, 283, 284, -1, 286, -1, -1, -1, -1, 291, - 292, 293, 294, -1, -1, -1, 298, -1, -1, 301, - 302, 303, 304, -1, -1, 40, -1, -1, 43, -1, + 271, -1, 273, 274, -1, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, -1, 287, 288, -1, -1, + -1, 292, 293, 294, 295, -1, -1, 123, 299, 125, + -1, 302, 303, 304, 305, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, - 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, - 125, -1, -1, -1, -1, -1, 40, -1, -1, 43, - -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, -1, 59, -1, 263, 264, -1, - -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 123, 280, 125, 282, 283, 284, 285, - 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, - -1, -1, 298, -1, 300, 301, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 40, -1, -1, 43, -1, 45, -1, -1, -1, 123, - 260, 125, -1, 263, 264, -1, 266, 267, 268, 269, - 270, 271, 272, 273, -1, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - -1, 291, 292, 293, 294, -1, -1, -1, 298, -1, - -1, 301, 302, 303, 304, 260, -1, -1, 263, 264, - -1, 266, 267, 268, 269, 270, -1, 272, 273, -1, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - -1, 286, 287, -1, -1, -1, 291, 292, 293, 294, - -1, -1, -1, 298, -1, -1, 301, 302, 303, 304, 260, -1, -1, 263, 264, -1, 266, 267, 268, 269, - 270, -1, 272, 273, -1, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, -1, 286, 287, -1, -1, - -1, 291, 292, 293, 294, -1, -1, -1, 298, -1, - -1, 301, 302, 303, 304, -1, 260, -1, -1, 263, - 264, -1, 266, 267, 268, 269, 270, -1, 272, 273, - -1, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, -1, 291, 292, 293, - 294, -1, -1, -1, 298, -1, -1, 301, 302, 303, - 304, 40, -1, -1, 43, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, -1, -1, -1, -1, -1, 259, - -1, -1, -1, 263, 264, -1, -1, -1, 268, 269, - -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, - 280, 45, 282, 283, 284, -1, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 59, -1, -1, 298, -1, - 300, 301, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, - -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 123, - -1, 125, -1, -1, -1, -1, -1, 40, -1, -1, + 270, 271, -1, 273, 274, -1, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, -1, 287, 288, -1, + -1, -1, 292, 293, 294, 295, -1, -1, 123, 299, + 125, -1, 302, 303, 304, 305, -1, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, - 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 260, -1, -1, 263, 264, -1, + 266, 267, 268, 269, 270, 271, -1, 273, 274, -1, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + -1, 287, 288, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, 299, -1, -1, 302, 303, 304, 305, + 123, -1, 125, -1, -1, -1, -1, -1, 40, -1, + -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, -1, 263, 264, + -1, 266, 267, 268, 269, 270, 271, -1, 273, 274, + -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, -1, 287, 288, -1, -1, -1, 292, 293, 294, + 295, -1, -1, -1, 299, -1, -1, 302, 303, 304, + 305, 123, 40, 125, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 123, 260, 125, -1, 263, 264, -1, 266, 267, 268, - 269, 270, -1, 272, 273, -1, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, -1, 286, 287, -1, - -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, - -1, -1, 301, 302, 303, 304, 260, -1, -1, 263, - 264, -1, 266, 267, 268, 269, 270, -1, 272, 273, - -1, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, -1, 286, 287, -1, -1, -1, 291, 292, 293, - 294, -1, -1, -1, 298, -1, -1, 301, 302, 303, - 304, 260, -1, -1, 263, 264, -1, 266, 267, 268, - 269, 270, -1, 272, 273, -1, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 40, 286, 287, 43, - 44, 45, 291, 292, 293, 294, -1, -1, -1, 298, - -1, -1, 301, 302, 303, 304, 60, 260, 62, 63, - 263, 264, -1, 266, 267, 268, 269, 270, -1, 272, - 273, -1, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, -1, 286, 287, -1, -1, -1, 291, 292, - 293, 294, -1, -1, -1, 298, -1, -1, 301, 302, - 303, 304, 40, -1, -1, 43, -1, 45, -1, -1, - 263, 264, -1, 266, 267, 268, 269, -1, -1, -1, - -1, 59, 275, 276, 277, 278, 279, 280, -1, 282, - 283, 284, -1, 286, 287, -1, -1, -1, 291, 292, - 293, 294, -1, -1, -1, 298, -1, -1, 301, 302, - 303, 304, 40, -1, -1, 43, -1, 45, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 60, -1, 62, 63, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 123, -1, 125, -1, -1, - -1, -1, -1, -1, 40, 41, -1, 43, 44, 45, - -1, -1, -1, -1, -1, -1, -1, -1, -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, 40, 41, - -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 263, - 264, 63, -1, -1, 268, 269, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, - 284, -1, 286, -1, -1, -1, -1, 291, 292, 293, - 294, 295, 296, -1, 298, -1, -1, 301, 302, 303, - 304, 40, 41, -1, 43, 44, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 260, -1, 63, 263, 264, -1, 266, 267, - 268, 269, 270, -1, 272, 273, -1, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, -1, 286, 287, - -1, -1, -1, 291, 292, 293, 294, -1, -1, -1, - 298, -1, -1, 301, 302, 303, 304, 40, -1, -1, - 43, -1, 45, -1, -1, 263, 264, -1, -1, -1, - 268, 269, -1, -1, -1, -1, 59, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 295, 296, -1, - 298, -1, -1, 301, 302, 303, 304, 263, 264, -1, - -1, 40, 268, 269, 43, -1, 45, -1, -1, -1, - -1, -1, -1, -1, 280, -1, 282, 283, 284, -1, - 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, - -1, -1, 298, -1, -1, 301, 302, 303, 304, -1, - -1, 263, 264, -1, -1, 40, 268, 269, 43, 44, - 45, -1, -1, -1, -1, -1, -1, -1, 280, -1, - 282, 283, 284, -1, 286, -1, -1, -1, 63, 291, - 292, 293, 294, -1, -1, -1, 298, -1, -1, 301, - 302, 303, 304, -1, -1, -1, -1, -1, 40, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, + 263, 264, -1, 266, 267, 268, 269, 270, 271, -1, + 273, 274, -1, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 40, 287, 288, 43, 44, 45, 292, + 293, 294, 295, -1, -1, 123, 299, 125, -1, 302, + 303, 304, 305, 60, -1, 62, 63, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, + 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 60, 260, 62, + 63, 263, 264, -1, 266, 267, 268, 269, 270, 271, + -1, 273, 274, -1, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 40, 287, 288, 43, -1, 45, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, -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, 41, -1, 43, 44, 45, -1, -1, -1, + -1, -1, 260, -1, -1, 263, 264, -1, 266, 267, + 268, 269, 270, 271, 63, 273, 274, -1, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, + 288, -1, -1, -1, 292, 293, 294, 295, -1, -1, + -1, 299, -1, -1, 302, 303, 304, 305, 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 263, 264, -1, -1, -1, 268, - 269, 63, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, - -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, - -1, -1, 301, 302, 303, 304, 40, -1, -1, 43, - 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 259, -1, -1, 63, - 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, 40, 286, -1, 43, 44, 45, 291, 292, - 293, 294, -1, -1, -1, 298, -1, 300, 301, 302, - 303, 304, -1, -1, -1, 63, -1, -1, -1, -1, - 259, -1, -1, -1, 263, 264, -1, -1, -1, 268, - 269, -1, -1, -1, 40, -1, -1, 43, 44, 45, - -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, - -1, -1, 291, 292, 293, 294, -1, 63, -1, 298, - -1, 300, 301, 302, 303, 304, -1, -1, 263, 264, - -1, -1, -1, 268, 269, -1, -1, 40, -1, -1, - 43, 44, 45, -1, -1, 280, -1, 282, 283, 284, - -1, 286, -1, -1, -1, -1, 291, 292, 293, 294, - 63, -1, -1, 298, -1, -1, 301, 302, 303, 304, - -1, 263, 264, -1, -1, -1, 268, 269, -1, -1, - 40, -1, -1, 43, 44, 45, -1, -1, 280, -1, - 282, 283, 284, -1, 286, -1, -1, -1, -1, 291, - 292, 293, 294, 63, -1, -1, 298, -1, -1, 301, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 40, -1, -1, 43, -1, 45, -1, 263, - 264, -1, -1, -1, 268, 269, -1, -1, -1, -1, - 58, -1, -1, -1, -1, 63, 280, -1, 282, 283, - 284, -1, 286, -1, -1, -1, -1, 291, 292, 293, - 294, -1, -1, -1, 298, -1, -1, 301, 302, 303, - 304, -1, -1, -1, -1, 263, 264, -1, -1, 40, - 268, 269, 43, -1, 45, -1, -1, -1, -1, -1, - -1, -1, 280, -1, 282, 283, 284, 58, 286, -1, - -1, -1, 63, 291, 292, 293, 294, -1, -1, -1, - 298, -1, -1, 301, 302, 303, 304, 263, 264, -1, - -1, -1, 268, 269, 40, -1, -1, 43, -1, 45, - -1, -1, -1, -1, 280, -1, 282, 283, 284, -1, - 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, - -1, -1, 298, -1, -1, 301, 302, 303, 304, -1, - 263, 264, -1, -1, -1, 268, 269, -1, -1, 40, - 41, -1, 43, -1, 45, -1, -1, 280, -1, 282, - 283, 284, -1, 286, -1, -1, -1, -1, 291, 292, - 293, 294, 63, -1, -1, 298, -1, -1, 301, 302, - 303, 304, -1, 263, 264, -1, -1, -1, 268, 269, - -1, -1, 40, 41, -1, 43, -1, 45, -1, -1, - 280, -1, 282, 283, 284, -1, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 63, -1, -1, 298, -1, - -1, 301, 302, 303, 304, 263, 264, -1, -1, -1, - 268, 269, -1, -1, 40, 41, -1, 43, -1, 45, - -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 63, -1, -1, - 298, -1, -1, 301, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, - -1, 40, 41, -1, 43, -1, 45, -1, -1, 280, - -1, 282, 283, 284, -1, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 63, -1, -1, 298, -1, -1, - 301, 302, 303, 304, -1, 261, 262, 263, 264, -1, - -1, -1, 268, 269, -1, -1, 40, 41, -1, 43, - -1, 45, -1, -1, 280, -1, 282, 283, 284, -1, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 63, - -1, -1, 298, -1, -1, 301, 302, 303, 304, -1, - -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, - -1, 40, 41, -1, 43, -1, 45, -1, -1, 280, - -1, 282, 283, 284, -1, 286, -1, -1, -1, -1, - 291, 292, 293, 294, 63, -1, -1, 298, -1, -1, - 301, 302, 303, 304, -1, 263, 264, -1, -1, -1, - 268, 269, -1, -1, 40, 41, -1, 43, -1, 45, - -1, -1, 280, -1, 282, 283, 284, -1, 286, -1, - -1, -1, -1, 291, 292, 293, 294, 63, -1, -1, - 298, -1, -1, 301, 302, 303, 304, 263, 264, -1, - -1, -1, 268, 269, -1, -1, 40, 41, -1, 43, - -1, 45, -1, -1, 280, -1, 282, 283, 284, -1, - 286, -1, -1, -1, -1, 291, 292, 293, 294, 63, - -1, -1, 298, -1, -1, 301, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 63, -1, -1, -1, -1, 263, 264, -1, -1, + -1, 268, 269, 270, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 281, -1, 283, 284, 285, -1, + 287, -1, -1, -1, -1, 292, 293, 294, 295, 296, + 297, -1, 299, -1, -1, 302, 303, 304, 305, -1, + 263, 264, -1, -1, -1, 268, 269, 270, -1, -1, + -1, -1, 40, 41, -1, 43, 44, 45, 281, -1, + 283, 284, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, 296, 297, 63, 299, -1, -1, 302, + 303, 304, 305, 259, -1, 261, 262, 263, 264, -1, + -1, -1, 268, 269, 270, -1, -1, 40, 41, -1, + 43, 44, 45, -1, -1, 281, -1, 283, 284, 285, + -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, + 63, -1, -1, 299, -1, 301, 302, 303, 304, 305, -1, -1, -1, -1, 263, 264, -1, -1, -1, 268, - 269, -1, -1, 40, 41, -1, 43, -1, 45, -1, - -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, - -1, -1, 291, 292, 293, 294, 63, -1, -1, 298, - -1, -1, 301, 302, 303, 304, -1, -1, -1, 263, - 264, -1, -1, -1, 268, 269, -1, -1, -1, 40, - -1, -1, 43, -1, 45, -1, 280, -1, 282, 283, - 284, -1, 286, -1, -1, -1, -1, 291, 292, 293, - 294, -1, -1, -1, 298, -1, -1, 301, 302, 303, - 304, -1, -1, -1, 263, 264, -1, -1, -1, 268, - 269, -1, -1, -1, -1, 40, -1, -1, 43, -1, - 45, 280, -1, 282, 283, 284, -1, 286, -1, -1, - -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, - -1, -1, 301, 302, 303, 304, -1, 263, 264, -1, - -1, -1, 268, 269, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 280, -1, 282, 283, 284, 40, - 286, -1, 43, -1, 45, 291, 292, 293, 294, -1, - -1, -1, 298, -1, -1, 301, 302, 303, 304, 263, - 264, -1, -1, -1, 268, 269, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 280, -1, 282, 283, - 284, -1, 286, -1, -1, -1, -1, 291, 292, 293, - 294, -1, -1, -1, 298, -1, -1, 301, 302, 303, - 304, 40, -1, -1, 43, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 263, 264, -1, -1, - -1, 268, 269, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 280, -1, 282, 283, 284, -1, 286, - -1, -1, -1, -1, 291, 292, 293, 294, -1, -1, - -1, 298, -1, -1, 301, 302, 303, 304, 259, -1, - -1, 40, 263, 264, 43, -1, 45, 268, 269, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, 63, 286, -1, -1, -1, -1, - 291, 292, 293, 294, -1, -1, -1, 298, -1, -1, - 301, 302, 303, 304, 259, -1, -1, 40, 263, 264, - 43, -1, 45, 268, 269, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 280, -1, 282, 283, 284, - -1, 286, -1, -1, -1, -1, 291, 292, 293, 294, - -1, -1, -1, 298, -1, -1, 301, 302, 303, 304, - 40, -1, -1, 43, -1, 45, -1, -1, 259, -1, - -1, -1, 263, 264, -1, -1, -1, 268, 269, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 280, - -1, 282, 283, 284, -1, 286, -1, -1, -1, -1, - 291, 292, 293, 294, -1, -1, -1, 298, -1, -1, - 301, 302, 303, 304, 40, -1, -1, 43, -1, 45, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 259, -1, -1, -1, 263, 264, -1, -1, -1, 268, - 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, - -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, - -1, -1, 301, 302, 303, 304, -1, -1, -1, -1, + 269, 270, -1, -1, 40, 41, -1, 43, 44, 45, + -1, -1, 281, -1, 283, 284, 285, -1, 287, -1, + -1, -1, -1, 292, 293, 294, 295, 63, -1, -1, + 299, -1, -1, 302, 303, 304, 305, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 263, 264, -1, -1, -1, 268, 269, 270, 40, + -1, -1, 43, -1, 45, -1, -1, -1, -1, 281, + -1, 283, 284, 285, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, + -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 263, 264, -1, -1, -1, + 268, 269, 270, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 281, -1, 283, 284, 285, -1, 287, + -1, -1, -1, -1, 292, 293, 294, 295, -1, -1, + -1, 299, -1, -1, 302, 303, 304, 305, -1, -1, + 263, 264, -1, -1, -1, 268, 269, 270, -1, -1, + 40, -1, -1, 43, 44, 45, -1, -1, 281, -1, + 283, 284, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, 63, -1, -1, 299, -1, -1, 302, + 303, 304, 305, -1, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, 270, -1, -1, 40, 41, -1, + 43, -1, 45, -1, -1, 281, -1, 283, 284, 285, + -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, + 63, -1, -1, 299, -1, -1, 302, 303, 304, 305, + -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, 270, + -1, -1, 40, -1, -1, 43, 44, 45, -1, -1, + 281, -1, 283, 284, 285, -1, 287, -1, -1, -1, + -1, 292, 293, 294, 295, 63, -1, -1, 299, -1, + 301, 302, 303, 304, 305, 259, -1, -1, -1, 263, + 264, -1, -1, -1, 268, 269, 270, -1, -1, 40, + -1, -1, 43, 44, 45, -1, -1, 281, -1, 283, + 284, 285, -1, 287, -1, -1, -1, -1, 292, 293, + 294, 295, 63, -1, -1, 299, -1, 301, 302, 303, + 304, 305, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 40, -1, -1, 43, 44, 45, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 63, -1, -1, -1, -1, + -1, -1, -1, 263, 264, -1, -1, -1, 268, 269, + 270, -1, -1, -1, -1, 40, -1, -1, 43, 44, + 45, 281, -1, 283, 284, 285, -1, 287, -1, -1, + -1, -1, 292, 293, 294, 295, -1, -1, 63, 299, + -1, -1, 302, 303, 304, 305, -1, -1, -1, -1, + 263, 264, -1, -1, -1, 268, 269, 270, -1, -1, + 40, -1, -1, 43, 44, 45, -1, -1, 281, -1, + 283, 284, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, 63, -1, -1, 299, -1, -1, 302, + 303, 304, 305, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 263, 264, -1, -1, -1, + 268, 269, 270, -1, -1, 40, -1, -1, 43, 44, + 45, -1, -1, 281, -1, 283, 284, 285, -1, 287, + -1, -1, -1, -1, 292, 293, 294, 295, 63, -1, + -1, 299, -1, -1, 302, 303, 304, 305, -1, -1, + -1, -1, 263, 264, -1, -1, -1, 268, 269, 270, + -1, -1, 40, -1, -1, 43, -1, 45, -1, -1, + 281, -1, 283, 284, 285, -1, 287, -1, -1, -1, + 58, 292, 293, 294, 295, 63, -1, -1, 299, -1, + -1, 302, 303, 304, 305, 263, 264, -1, -1, -1, + 268, 269, 270, -1, -1, 40, -1, -1, 43, -1, + 45, -1, -1, 281, -1, 283, 284, 285, -1, 287, + -1, -1, -1, 58, 292, 293, 294, 295, 63, -1, + -1, 299, -1, -1, 302, 303, 304, 305, 263, 264, + -1, -1, -1, 268, 269, 270, -1, -1, 40, 41, + -1, 43, -1, 45, -1, -1, 281, -1, 283, 284, + 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, + 295, 63, -1, -1, 299, -1, -1, 302, 303, 304, + 305, -1, -1, 263, 264, -1, -1, -1, 268, 269, + 270, -1, -1, 40, 41, -1, 43, -1, 45, -1, + -1, 281, -1, 283, 284, 285, -1, 287, -1, -1, + -1, -1, 292, 293, 294, 295, 63, -1, -1, 299, + -1, -1, 302, 303, 304, 305, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 263, 264, + -1, -1, -1, 268, 269, 270, -1, -1, 40, 41, + -1, 43, -1, 45, -1, -1, 281, -1, 283, 284, + 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, + 295, 63, -1, -1, 299, -1, -1, 302, 303, 304, + 305, -1, -1, -1, -1, 263, 264, -1, -1, -1, + 268, 269, 270, -1, -1, 40, 41, -1, 43, -1, + 45, -1, -1, 281, -1, 283, 284, 285, -1, 287, + -1, -1, -1, -1, 292, 293, 294, 295, 63, -1, + -1, 299, -1, -1, 302, 303, 304, 305, 263, 264, + -1, -1, -1, 268, 269, 270, -1, -1, 40, 41, + -1, 43, -1, 45, -1, -1, 281, -1, 283, 284, + 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, + 295, 63, -1, -1, 299, -1, -1, 302, 303, 304, + 305, 263, 264, -1, -1, -1, 268, 269, 270, -1, + -1, 40, 41, -1, 43, -1, 45, -1, -1, 281, + -1, 283, 284, 285, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, 63, -1, -1, 299, -1, -1, + 302, 303, 304, 305, -1, -1, 263, 264, -1, -1, + -1, 268, 269, 270, -1, -1, 40, 41, -1, 43, + -1, 45, -1, -1, 281, -1, 283, 284, 285, -1, + 287, -1, -1, -1, -1, 292, 293, 294, 295, 63, + -1, -1, 299, -1, -1, 302, 303, 304, 305, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 263, 264, -1, -1, -1, 268, 269, 270, -1, + -1, 40, 41, -1, 43, -1, 45, -1, -1, 281, + -1, 283, 284, 285, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, 63, -1, -1, 299, -1, -1, + 302, 303, 304, 305, -1, -1, -1, -1, 263, 264, + -1, -1, -1, 268, 269, 270, -1, -1, 40, 41, + -1, 43, -1, 45, -1, -1, 281, -1, 283, 284, + 285, -1, 287, -1, -1, -1, -1, 292, 293, 294, + 295, 63, -1, -1, 299, -1, -1, 302, 303, 304, + 305, 263, 264, -1, -1, -1, 268, 269, 270, -1, + -1, 40, 41, -1, 43, -1, 45, -1, -1, 281, + -1, 283, 284, 285, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, 263, 264, -1, -1, -1, 268, + 269, 270, -1, -1, -1, -1, -1, -1, 40, -1, + -1, 43, 281, 45, 283, 284, 285, -1, 287, -1, + -1, -1, -1, 292, 293, 294, 295, -1, -1, -1, + 299, -1, -1, 302, 303, 304, 305, -1, -1, 263, + 264, -1, -1, -1, 268, 269, 270, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 281, -1, 283, + 284, 285, 40, 287, -1, 43, -1, 45, 292, 293, + 294, 295, -1, -1, -1, 299, -1, -1, 302, 303, + 304, 305, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 263, 264, -1, -1, -1, 268, - 269, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 280, -1, 282, 283, 284, -1, 286, -1, -1, - -1, -1, 291, 292, 293, 294, -1, -1, -1, 298, - -1, -1, 301, 302, 303, 304, 259, -1, -1, -1, - 263, 264, -1, -1, -1, 268, 269, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 280, -1, 282, - 283, 284, -1, 286, -1, -1, -1, -1, 291, 292, - 293, 294, -1, -1, -1, 298, -1, -1, 301, 302, - 303, 304, -1, 263, 264, -1, -1, -1, 268, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, -1, 282, 283, 284, -1, 286, -1, -1, -1, - -1, 291, 292, 293, 294, 16, -1, -1, 298, -1, - -1, 301, 302, 303, 304, -1, 27, 28, -1, 30, - 31, -1, 33, -1, -1, -1, -1, 263, 264, -1, - 41, -1, 268, 269, -1, -1, -1, -1, -1, -1, - -1, -1, 53, -1, 280, -1, 282, 283, 284, -1, - 286, -1, -1, -1, -1, 291, 292, 293, 294, -1, - -1, -1, 298, -1, -1, 301, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 94, 95, 96, 97, 98, -1, -1, - -1, -1, -1, -1, -1, 106, -1, -1, 109, -1, - -1, -1, 113, 114, -1, -1, 117, -1, 119, 120, - -1, -1, -1, 124, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 135, -1, -1, -1, 139, -1, - 141, 142, 143, 144, -1, -1, -1, -1, -1, -1, - -1, 152, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 162, -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, 190, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 202, 203, -1, 205, 206, 207, 208, -1, 210, - -1, 212, 213, -1, -1, 27, 28, -1, -1, 220, - 221, 33, -1, -1, -1, -1, -1, -1, -1, 41, - -1, 232, 233, -1, -1, -1, -1, -1, -1, -1, - -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 258, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 270, - 271, 272, 273, 274, -1, 276, 277, 278, -1, -1, - -1, 93, 94, 95, 96, 97, 98, -1, -1, -1, - -1, -1, -1, -1, 106, -1, -1, 109, -1, -1, - -1, 113, 114, -1, -1, 117, -1, 119, 120, -1, - -1, -1, 124, 125, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 135, -1, -1, -1, 139, -1, 141, - 142, 143, 144, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 162, -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, 190, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 202, 203, -1, 205, 206, 207, 208, -1, 210, -1, - 212, 213, -1, -1, -1, -1, -1, -1, 220, 221, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 232, 233, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 258, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 270, 271, - 272, 273, 274, -1, 276, 277, 278, + 269, 270, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 281, -1, 283, 284, 285, 40, 287, -1, + 43, -1, 45, 292, 293, 294, 295, -1, -1, -1, + 299, -1, -1, 302, 303, 304, 305, -1, -1, -1, + -1, 263, 264, -1, -1, -1, 268, 269, 270, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 281, + -1, 283, 284, 285, 40, 287, -1, 43, -1, 45, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, 263, 264, -1, -1, -1, 268, + 269, 270, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 281, -1, 283, 284, 285, 40, 287, -1, + 43, -1, 45, 292, 293, 294, 295, -1, -1, -1, + 299, -1, -1, 302, 303, 304, 305, 259, -1, -1, + 63, 263, 264, -1, -1, -1, 268, 269, 270, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 281, + -1, 283, 284, 285, 40, 287, -1, 43, -1, 45, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, -1, -1, -1, -1, -1, -1, + -1, 259, -1, -1, -1, 263, 264, -1, -1, -1, + 268, 269, 270, -1, -1, -1, -1, 40, -1, -1, + 43, -1, 45, 281, -1, 283, 284, 285, -1, 287, + -1, -1, -1, -1, 292, 293, 294, 295, -1, -1, + -1, 299, -1, -1, 302, 303, 304, 305, -1, -1, + -1, -1, -1, -1, -1, -1, 259, -1, -1, -1, + 263, 264, -1, -1, -1, 268, 269, 270, 40, -1, + -1, 43, -1, 45, -1, -1, -1, -1, 281, -1, + 283, 284, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, -1, -1, -1, 299, -1, -1, 302, + 303, 304, 305, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, 270, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 281, -1, 283, 284, 285, + -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, 299, -1, -1, 302, 303, 304, 305, + 263, 264, -1, -1, -1, 268, 269, 270, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 281, -1, + 283, 284, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, -1, -1, -1, 299, -1, -1, 302, + 303, 304, 305, 259, -1, -1, -1, 263, 264, -1, + -1, -1, 268, 269, 270, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 281, -1, 283, 284, 285, + -1, 287, -1, -1, -1, -1, 292, 293, 294, 295, + -1, -1, -1, 299, -1, -1, 302, 303, 304, 305, + 263, 264, -1, -1, -1, 268, 269, 270, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 281, -1, + 283, 284, 285, -1, 287, -1, -1, -1, -1, 292, + 293, 294, 295, -1, -1, -1, 299, -1, -1, 302, + 303, 304, 305, -1, -1, -1, -1, 28, 29, -1, + -1, 263, 264, 34, -1, -1, 268, 269, 270, -1, + -1, 42, -1, -1, -1, -1, -1, -1, -1, 281, + -1, 283, 284, 285, -1, 287, -1, -1, -1, -1, + 292, 293, 294, 295, -1, -1, -1, 299, -1, -1, + 302, 303, 304, 305, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 92, 93, 94, 95, 96, 97, -1, -1, -1, + -1, -1, -1, 104, -1, -1, -1, -1, 109, -1, + -1, 112, 113, -1, -1, 116, -1, 118, 119, -1, + -1, -1, 123, 124, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 134, -1, -1, -1, 138, -1, 140, + 141, 142, 143, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 154, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 164, -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, 192, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 208, 209, 210, + 211, -1, 213, -1, 215, 216, -1, -1, -1, -1, + -1, -1, 223, 224, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 235, 236, 237, 238, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 263, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 275, 276, 277, 278, 279, -1, + 281, 282, 283, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 304 +#define YYMAXTOKEN 305 #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, @@ -1824,11 +1894,11 @@ char *yyname[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"BEGIN","END","REGEX","SEMINEW", -"NEWLINE","COMMENT","FUN1","FUNN","GRGR","PRINT","PRINTF","SPRINTF","SPLIT", -"IF","ELSE","WHILE","FOR","IN","EXIT","NEXT","BREAK","CONTINUE","RET","GETLINE", -"DO","SUB","GSUB","MATCH","FUNCTION","USERFUN","DELETE","ASGNOP","OROR", -"ANDAND","NUMBER","VAR","SUBSTR","INDEX","MATCHOP","RELOP","OR","STRING", -"UMINUS","NOT","INCR","DECR","FIELD","VFIELD", +"NEWLINE","COMMENT","FUN1","FUNN","GRGR","PRINT","PRINTF","SPRINTF_OLD", +"SPRINTF_NEW","SPLIT","IF","ELSE","WHILE","FOR","IN","EXIT","NEXT","BREAK", +"CONTINUE","RET","GETLINE","DO","SUB","GSUB","MATCH","FUNCTION","USERFUN", +"DELETE","ASGNOP","OROR","ANDAND","NUMBER","VAR","SUBSTR","INDEX","MATCHOP", +"RELOP","OR","STRING","UMINUS","NOT","INCR","DECR","FIELD","VFIELD", }; char *yyrule[] = { "$accept : program", @@ -1868,6 +1938,8 @@ char *yyrule[] = { "expr : expr term", "expr : expr '?' expr ':' expr", "expr : variable ASGNOP cond", +"sprintf : SPRINTF_NEW", +"sprintf : SPRINTF_OLD", "term : variable", "term : NUMBER", "term : STRING", @@ -1896,7 +1968,8 @@ char *yyrule[] = { "term : FUN1 '(' expr ')'", "term : FUNN '(' expr_list ')'", "term : USERFUN '(' expr_list ')'", -"term : SPRINTF expr_list", +"term : SPRINTF_NEW '(' expr_list ')'", +"term : sprintf expr_list", "term : SUBSTR '(' expr ',' expr ',' expr ')'", "term : SUBSTR '(' expr ',' expr ')'", "term : SPLIT '(' expr ',' VAR ',' expr ')'", @@ -1999,12 +2072,12 @@ YYSTYPE yylval; short yyss[YYSTACKSIZE]; YYSTYPE yyvs[YYSTACKSIZE]; #define yystacksize YYSTACKSIZE -#line 396 "a2p.y" +#line 401 "a2p.y" -int yyparse _((void)); +int yyparse (void); #include "a2py.c" -#line 2008 "y.tab.c" +#line 2081 "y.tab.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab @@ -2017,7 +2090,6 @@ yyparse() #ifndef __cplusplus extern char *getenv(); #endif - if (yys = getenv("YYDEBUG")) { yyn = *yys; @@ -2272,407 +2344,411 @@ case 36: lval_field = TRUE; } break; -case 37: -#line 148 "a2p.y" +case 39: +#line 151 "a2p.y" { yyval = yyvsp[0]; } break; -case 38: -#line 150 "a2p.y" +case 40: +#line 153 "a2p.y" { yyval = oper1(ONUM,yyvsp[0]); } break; -case 39: -#line 152 "a2p.y" +case 41: +#line 155 "a2p.y" { yyval = oper1(OSTR,yyvsp[0]); } break; -case 40: -#line 154 "a2p.y" +case 42: +#line 157 "a2p.y" { yyval = oper2(OADD,yyvsp[-2],yyvsp[0]); } break; -case 41: -#line 156 "a2p.y" +case 43: +#line 159 "a2p.y" { yyval = oper2(OSUBTRACT,yyvsp[-2],yyvsp[0]); } break; -case 42: -#line 158 "a2p.y" +case 44: +#line 161 "a2p.y" { yyval = oper2(OMULT,yyvsp[-2],yyvsp[0]); } break; -case 43: -#line 160 "a2p.y" +case 45: +#line 163 "a2p.y" { yyval = oper2(ODIV,yyvsp[-2],yyvsp[0]); } break; -case 44: -#line 162 "a2p.y" +case 46: +#line 165 "a2p.y" { yyval = oper2(OMOD,yyvsp[-2],yyvsp[0]); } break; -case 45: -#line 164 "a2p.y" +case 47: +#line 167 "a2p.y" { yyval = oper2(OPOW,yyvsp[-2],yyvsp[0]); } break; -case 46: -#line 166 "a2p.y" +case 48: +#line 169 "a2p.y" { yyval = oper2(ODEFINED,aryrefarg(yyvsp[0]),yyvsp[-2]); } break; -case 47: -#line 168 "a2p.y" +case 49: +#line 171 "a2p.y" { yyval = oper1(OPOSTINCR,yyvsp[-1]); } break; -case 48: -#line 170 "a2p.y" +case 50: +#line 173 "a2p.y" { yyval = oper1(OPOSTDECR,yyvsp[-1]); } break; -case 49: -#line 172 "a2p.y" +case 51: +#line 175 "a2p.y" { yyval = oper1(OPREINCR,yyvsp[0]); } break; -case 50: -#line 174 "a2p.y" +case 52: +#line 177 "a2p.y" { yyval = oper1(OPREDECR,yyvsp[0]); } break; -case 51: -#line 176 "a2p.y" +case 53: +#line 179 "a2p.y" { yyval = oper1(OUMINUS,yyvsp[0]); } break; -case 52: -#line 178 "a2p.y" +case 54: +#line 181 "a2p.y" { yyval = oper1(OUPLUS,yyvsp[0]); } break; -case 53: -#line 180 "a2p.y" +case 55: +#line 183 "a2p.y" { yyval = oper1(OPAREN,yyvsp[-1]); } break; -case 54: -#line 182 "a2p.y" +case 56: +#line 185 "a2p.y" { yyval = oper0(OGETLINE); } break; -case 55: -#line 184 "a2p.y" +case 57: +#line 187 "a2p.y" { yyval = oper1(OGETLINE,yyvsp[0]); } break; -case 56: -#line 186 "a2p.y" +case 58: +#line 189 "a2p.y" { yyval = oper3(OGETLINE,Nullop,string("<",1),yyvsp[0]); if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break; -case 57: -#line 189 "a2p.y" +case 59: +#line 192 "a2p.y" { yyval = oper3(OGETLINE,yyvsp[-2],string("<",1),yyvsp[0]); if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break; -case 58: -#line 192 "a2p.y" +case 60: +#line 195 "a2p.y" { yyval = oper3(OGETLINE,Nullop,string("|",1),yyvsp[-2]); if (ops[yyvsp[-2]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break; -case 59: -#line 195 "a2p.y" +case 61: +#line 198 "a2p.y" { yyval = oper3(OGETLINE,yyvsp[0],string("|",1),yyvsp[-3]); if (ops[yyvsp[-3]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break; -case 60: -#line 198 "a2p.y" +case 62: +#line 201 "a2p.y" { yyval = oper0(yyvsp[0]); need_entire = do_chop = TRUE; } break; -case 61: -#line 200 "a2p.y" +case 63: +#line 203 "a2p.y" { yyval = oper1(yyvsp[-2],Nullop); need_entire = do_chop = TRUE; } break; -case 62: -#line 202 "a2p.y" +case 64: +#line 205 "a2p.y" { yyval = oper1(yyvsp[-3],yyvsp[-1]); } break; -case 63: -#line 204 "a2p.y" +case 65: +#line 207 "a2p.y" { yyval = oper1(yyvsp[-3],yyvsp[-1]); } break; -case 64: -#line 206 "a2p.y" +case 66: +#line 209 "a2p.y" { yyval = oper2(OUSERFUN,yyvsp[-3],yyvsp[-1]); } break; -case 65: -#line 208 "a2p.y" +case 67: +#line 211 "a2p.y" +{ yyval = oper1(OSPRINTF,yyvsp[-1]); } +break; +case 68: +#line 213 "a2p.y" { yyval = oper1(OSPRINTF,yyvsp[0]); } break; -case 66: -#line 210 "a2p.y" +case 69: +#line 215 "a2p.y" { yyval = oper3(OSUBSTR,yyvsp[-5],yyvsp[-3],yyvsp[-1]); } break; -case 67: -#line 212 "a2p.y" +case 70: +#line 217 "a2p.y" { yyval = oper2(OSUBSTR,yyvsp[-3],yyvsp[-1]); } break; -case 68: -#line 214 "a2p.y" +case 71: +#line 219 "a2p.y" { yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),yyvsp[-1]); } break; -case 69: -#line 216 "a2p.y" +case 72: +#line 221 "a2p.y" { yyval = oper3(OSPLIT,yyvsp[-5],aryrefarg(numary(yyvsp[-3])),oper1(OREGEX,yyvsp[-1]));} break; -case 70: -#line 218 "a2p.y" +case 73: +#line 223 "a2p.y" { yyval = oper2(OSPLIT,yyvsp[-3],aryrefarg(numary(yyvsp[-1]))); } break; -case 71: -#line 220 "a2p.y" +case 74: +#line 225 "a2p.y" { yyval = oper2(OINDEX,yyvsp[-3],yyvsp[-1]); } break; -case 72: -#line 222 "a2p.y" +case 75: +#line 227 "a2p.y" { yyval = oper2(OMATCH,yyvsp[-3],oper1(OREGEX,yyvsp[-1])); } break; -case 73: -#line 224 "a2p.y" +case 76: +#line 229 "a2p.y" { yyval = oper2(OMATCH,yyvsp[-3],yyvsp[-1]); } break; -case 74: -#line 226 "a2p.y" +case 77: +#line 231 "a2p.y" { yyval = oper2(OSUB,yyvsp[-3],yyvsp[-1]); } break; -case 75: -#line 228 "a2p.y" +case 78: +#line 233 "a2p.y" { yyval = oper2(OSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); } break; -case 76: -#line 230 "a2p.y" +case 79: +#line 235 "a2p.y" { yyval = oper2(OGSUB,yyvsp[-3],yyvsp[-1]); } break; -case 77: -#line 232 "a2p.y" +case 80: +#line 237 "a2p.y" { yyval = oper2(OGSUB,oper1(OREGEX,yyvsp[-3]),yyvsp[-1]); } break; -case 78: -#line 234 "a2p.y" +case 81: +#line 239 "a2p.y" { yyval = oper3(OSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); } break; -case 79: -#line 236 "a2p.y" +case 82: +#line 241 "a2p.y" { yyval = oper3(OSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); } break; -case 80: -#line 238 "a2p.y" +case 83: +#line 243 "a2p.y" { yyval = oper3(OGSUB,yyvsp[-5],yyvsp[-3],yyvsp[-1]); } break; -case 81: -#line 240 "a2p.y" +case 84: +#line 245 "a2p.y" { yyval = oper3(OGSUB,oper1(OREGEX,yyvsp[-5]),yyvsp[-3],yyvsp[-1]); } break; -case 82: -#line 244 "a2p.y" +case 85: +#line 249 "a2p.y" { yyval = oper1(OVAR,yyvsp[0]); } break; -case 83: -#line 246 "a2p.y" +case 86: +#line 251 "a2p.y" { yyval = oper2(OVAR,aryrefarg(yyvsp[-3]),yyvsp[-1]); } break; -case 84: -#line 248 "a2p.y" +case 87: +#line 253 "a2p.y" { yyval = oper1(OFLD,yyvsp[0]); } break; -case 85: -#line 250 "a2p.y" +case 88: +#line 255 "a2p.y" { yyval = oper1(OVFLD,yyvsp[0]); } break; -case 88: -#line 257 "a2p.y" +case 91: +#line 262 "a2p.y" { yyval = Nullop; } break; -case 89: -#line 261 "a2p.y" +case 92: +#line 266 "a2p.y" { yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); } break; -case 90: -#line 263 "a2p.y" +case 93: +#line 268 "a2p.y" { yyval = oper3(OCOMMA,yyvsp[-3],yyvsp[-1],yyvsp[0]); } break; -case 91: -#line 265 "a2p.y" +case 94: +#line 270 "a2p.y" { yyval = yyvsp[-1]; } break; -case 92: -#line 269 "a2p.y" +case 95: +#line 274 "a2p.y" { yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); } break; -case 93: -#line 271 "a2p.y" +case 96: +#line 276 "a2p.y" { yyval = Nullop; } break; -case 94: -#line 275 "a2p.y" +case 97: +#line 280 "a2p.y" { yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); } break; -case 95: -#line 277 "a2p.y" +case 98: +#line 282 "a2p.y" { yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); } break; -case 96: -#line 279 "a2p.y" +case 99: +#line 284 "a2p.y" { yyval = oper0(ONEWLINE); } break; -case 97: -#line 281 "a2p.y" +case 100: +#line 286 "a2p.y" { yyval = oper1(OCOMMENT,yyvsp[0]); } break; -case 98: -#line 285 "a2p.y" +case 101: +#line 290 "a2p.y" { yyval = oper2(OJUNK,yyvsp[-1],yyvsp[0]); } break; -case 99: -#line 287 "a2p.y" +case 102: +#line 292 "a2p.y" { yyval = Nullop; } break; -case 100: -#line 291 "a2p.y" +case 103: +#line 296 "a2p.y" { yyval = oper0(ONEWLINE); } break; -case 101: -#line 293 "a2p.y" +case 104: +#line 298 "a2p.y" { yyval = oper1(OCOMMENT,yyvsp[0]); } break; -case 102: -#line 298 "a2p.y" +case 105: +#line 303 "a2p.y" { yyval = oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0]); } break; -case 103: -#line 300 "a2p.y" +case 106: +#line 305 "a2p.y" { yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); } break; -case 104: -#line 302 "a2p.y" +case 107: +#line 307 "a2p.y" { yyval = oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0]); } break; -case 105: -#line 304 "a2p.y" +case 108: +#line 309 "a2p.y" { yyval = oper2(OJUNK,oper1(OSCOMMENT,yyvsp[-1]),yyvsp[0]); } break; -case 106: -#line 308 "a2p.y" +case 109: +#line 313 "a2p.y" { yyval = oper2(OSTATES,yyvsp[-1],yyvsp[0]); } break; -case 107: -#line 310 "a2p.y" +case 110: +#line 315 "a2p.y" { yyval = Nullop; } break; -case 108: -#line 315 "a2p.y" +case 111: +#line 320 "a2p.y" { yyval = oper2(OJUNK,oper2(OSTATE,yyvsp[-2],yyvsp[-1]),yyvsp[0]); } break; -case 109: -#line 317 "a2p.y" +case 112: +#line 322 "a2p.y" { yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),yyvsp[0])); } break; -case 110: -#line 319 "a2p.y" +case 113: +#line 324 "a2p.y" { yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),yyvsp[0])); } break; -case 113: -#line 325 "a2p.y" +case 116: +#line 330 "a2p.y" { yyval = Nullop; } break; -case 115: -#line 331 "a2p.y" +case 118: +#line 336 "a2p.y" { yyval = oper3(OPRINT,yyvsp[-2],yyvsp[-1],yyvsp[0]); do_opens = TRUE; saw_ORS = saw_OFS = TRUE; if (!yyvsp[-2]) need_entire = TRUE; if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break; -case 116: -#line 337 "a2p.y" +case 119: +#line 342 "a2p.y" { yyval = oper1(OPRINT,yyvsp[0]); if (!yyvsp[0]) need_entire = TRUE; saw_ORS = saw_OFS = TRUE; } break; -case 117: -#line 342 "a2p.y" +case 120: +#line 347 "a2p.y" { yyval = oper3(OPRINTF,yyvsp[-2],yyvsp[-1],yyvsp[0]); do_opens = TRUE; if (!yyvsp[-2]) need_entire = TRUE; if (ops[yyvsp[0]].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break; -case 118: -#line 347 "a2p.y" +case 121: +#line 352 "a2p.y" { yyval = oper1(OPRINTF,yyvsp[0]); if (!yyvsp[0]) need_entire = TRUE; } break; -case 119: -#line 351 "a2p.y" +case 122: +#line 356 "a2p.y" { yyval = oper0(OBREAK); } break; -case 120: -#line 353 "a2p.y" +case 123: +#line 358 "a2p.y" { yyval = oper0(ONEXT); } break; -case 121: -#line 355 "a2p.y" +case 124: +#line 360 "a2p.y" { yyval = oper0(OEXIT); } break; -case 122: -#line 357 "a2p.y" +case 125: +#line 362 "a2p.y" { yyval = oper1(OEXIT,yyvsp[0]); } break; -case 123: -#line 359 "a2p.y" +case 126: +#line 364 "a2p.y" { yyval = oper0(OCONTINUE); } break; -case 124: -#line 361 "a2p.y" +case 127: +#line 366 "a2p.y" { yyval = oper0(ORETURN); } break; -case 125: -#line 363 "a2p.y" +case 128: +#line 368 "a2p.y" { yyval = oper1(ORETURN,yyvsp[0]); } break; -case 126: -#line 365 "a2p.y" +case 129: +#line 370 "a2p.y" { yyval = oper2(ODELETE,aryrefarg(yyvsp[-3]),yyvsp[-1]); } break; -case 127: -#line 369 "a2p.y" +case 130: +#line 374 "a2p.y" { yyval = oper1(OREDIR,string(">",1)); } break; -case 128: -#line 371 "a2p.y" +case 131: +#line 376 "a2p.y" { yyval = oper1(OREDIR,string(">>",2)); } break; -case 129: -#line 373 "a2p.y" +case 132: +#line 378 "a2p.y" { yyval = oper1(OREDIR,string("|",1)); } break; -case 130: -#line 378 "a2p.y" +case 133: +#line 383 "a2p.y" { yyval = oper2(OIF,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } break; -case 131: -#line 380 "a2p.y" +case 134: +#line 385 "a2p.y" { yyval = oper3(OIF,yyvsp[-6],bl(yyvsp[-3],yyvsp[-4]),bl(yyvsp[0],yyvsp[-1])); } break; -case 132: -#line 382 "a2p.y" +case 135: +#line 387 "a2p.y" { yyval = oper2(OWHILE,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } break; -case 133: -#line 384 "a2p.y" +case 136: +#line 389 "a2p.y" { yyval = oper2(ODO,bl(yyvsp[-4],yyvsp[-5]),yyvsp[-1]); } break; -case 134: -#line 386 "a2p.y" +case 137: +#line 391 "a2p.y" { yyval = oper4(OFOR,yyvsp[-7],yyvsp[-5],yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } break; -case 135: -#line 388 "a2p.y" +case 138: +#line 393 "a2p.y" { yyval = oper4(OFOR,yyvsp[-6],string("",0),yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } break; -case 136: -#line 390 "a2p.y" +case 139: +#line 395 "a2p.y" { yyval = oper2(OFORIN,yyvsp[-3],bl(yyvsp[0],yyvsp[-1])); } break; -case 137: -#line 392 "a2p.y" +case 140: +#line 397 "a2p.y" { yyval = oper3(OBLOCK,oper2(OJUNK,yyvsp[-3],yyvsp[-2]),Nullop,yyvsp[0]); } break; -#line 2674 "y.tab.c" +#line 2751 "y.tab.c" } yyssp -= yym; yystate = *yyssp; diff --git a/contrib/perl5/x2p/a2p.h b/contrib/perl5/x2p/a2p.h index 8053046..3b0338c 100644 --- a/contrib/perl5/x2p/a2p.h +++ b/contrib/perl5/x2p/a2p.h @@ -73,13 +73,11 @@ #define MEM_SIZE Size_t -#ifdef STANDARD_C -# include <stdlib.h> -#else - Malloc_t malloc _((MEM_SIZE nbytes)); - Malloc_t calloc _((MEM_SIZE elements, MEM_SIZE size)); - Malloc_t realloc _((Malloc_t where, MEM_SIZE nbytes)); - Free_t free _((Malloc_t where)); +#ifndef STANDARD_C + Malloc_t malloc (MEM_SIZE nbytes); + Malloc_t calloc (MEM_SIZE elements, MEM_SIZE size); + Malloc_t realloc (Malloc_t where, MEM_SIZE nbytes); + Free_t free (Malloc_t where); #endif #if defined(I_STRING) || defined(__cplusplus) @@ -138,8 +136,13 @@ /* All of these are in stdlib.h or time.h for ANSI C */ Time_t time(); struct tm *gmtime(), *localtime(); +#if defined(OEMVS) || defined(__OPEN_VM) +char *(strchr)(), *(strrchr)(); +char *(strcpy)(), *(strcat)(); +#else char *strchr(), *strrchr(); char *strcpy(), *strcat(); +#endif #endif /* ! STANDARD_C */ #ifdef VMS @@ -374,27 +377,27 @@ EXT STR *Str; #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len) /* Prototypes for things in a2p.c */ -int aryrefarg _(( int arg )); -int bl _(( int arg, int maybe )); -void dump _(( int branch )); -int fixfargs _(( int name, int arg, int prevargs )); -int fixrargs _(( char *name, int arg, int prevargs )); -void fixup _(( STR *str )); -int numary _(( int arg )); -int oper0 _(( int type )); -int oper1 _(( int type, int arg1 )); -int oper2 _(( int type, int arg1, int arg2 )); -int oper3 _(( int type, int arg1, int arg2, int arg3 )); -int oper4 _(( int type, int arg1, int arg2, int arg3, int arg4 )); -int oper5 _(( int type, int arg1, int arg2, int arg3, int arg4, int arg5 )); -void putlines _(( STR *str )); -void putone _(( void )); -int rememberargs _(( int arg )); -char * scannum _(( char *s )); -char * scanpat _(( char *s )); -int string _(( char *ptr, int len )); -void yyerror _(( char *s )); -int yylex _(( void )); +int aryrefarg ( int arg ); +int bl ( int arg, int maybe ); +void dump ( int branch ); +int fixfargs ( int name, int arg, int prevargs ); +int fixrargs ( char *name, int arg, int prevargs ); +void fixup ( STR *str ); +int numary ( int arg ); +int oper0 ( int type ); +int oper1 ( int type, int arg1 ); +int oper2 ( int type, int arg1, int arg2 ); +int oper3 ( int type, int arg1, int arg2, int arg3 ); +int oper4 ( int type, int arg1, int arg2, int arg3, int arg4 ); +int oper5 ( int type, int arg1, int arg2, int arg3, int arg4, int arg5 ); +void putlines ( STR *str ); +void putone ( void ); +int rememberargs ( int arg ); +char * scannum ( char *s ); +char * scanpat ( char *s ); +int string ( char *ptr, int len ); +void yyerror ( char *s ); +int yylex ( void ); EXT int line INIT(0); diff --git a/contrib/perl5/x2p/a2p.pod b/contrib/perl5/x2p/a2p.pod index fa726fb..f6395a4 100644 --- a/contrib/perl5/x2p/a2p.pod +++ b/contrib/perl5/x2p/a2p.pod @@ -43,10 +43,25 @@ causes a2p to assume that input will always have that many fields. =item B<-o> -tells a2p to use old awk behavior. For now, the only difference is -that old awk always has a line loop, even if there are no line +tells a2p to use old awk behavior. The only current differences are: + +=over 5 + +=item + +Old awk always has a line loop, even if there are no line actions, whereas new awk does not. +=item + +In old awk, sprintf is extremely greedy about its arguments. +For example, given the statement + + print sprintf(some_args), extra_args; + +old awk considers I<extra_args> to be arguments to C<sprintf>; new awk +considers them arguments to C<print>. + =back =head2 "Considerations" diff --git a/contrib/perl5/x2p/a2p.y b/contrib/perl5/x2p/a2p.y index 2d3f239..da9b628 100644 --- a/contrib/perl5/x2p/a2p.y +++ b/contrib/perl5/x2p/a2p.y @@ -21,7 +21,7 @@ int ends = Nullop; %token REGEX %token SEMINEW NEWLINE COMMENT %token FUN1 FUNN GRGR -%token PRINT PRINTF SPRINTF SPLIT +%token PRINT PRINTF SPRINTF_OLD SPRINTF_NEW SPLIT %token IF ELSE WHILE FOR IN %token EXIT NEXT BREAK CONTINUE RET %token GETLINE DO SUB GSUB MATCH @@ -144,6 +144,9 @@ expr : term } ; +sprintf : SPRINTF_NEW + | SPRINTF_OLD ; + term : variable { $$ = $1; } | NUMBER @@ -204,7 +207,9 @@ term : variable { $$ = oper1($1,$3); } | USERFUN '(' expr_list ')' { $$ = oper2(OUSERFUN,$1,$3); } - | SPRINTF expr_list + | SPRINTF_NEW '(' expr_list ')' + { $$ = oper1(OSPRINTF,$3); } + | sprintf expr_list { $$ = oper1(OSPRINTF,$2); } | SUBSTR '(' expr ',' expr ',' expr ')' { $$ = oper3(OSUBSTR,$3,$5,$7); } @@ -394,6 +399,6 @@ compound %% -int yyparse _((void)); +int yyparse (void); #include "a2py.c" diff --git a/contrib/perl5/x2p/a2py.c b/contrib/perl5/x2p/a2py.c index 8a6155f..3976c86 100644 --- a/contrib/perl5/x2p/a2py.c +++ b/contrib/perl5/x2p/a2py.c @@ -35,7 +35,7 @@ static void usage(void); static void usage() { - printf("\nThis is the AWK to PERL translator, version 5.0, patchlevel %d\n", PATCHLEVEL); + printf("\nThis is the AWK to PERL translator, revision %d.0, version %d\n", PERL_REVISION, PERL_VERSION); printf("\nUsage: %s [-D<number>] [-F<char>] [-n<fieldlist>] [-<number>] filename\n", myname); printf("\n -D<number> sets debugging flags." "\n -F<character> the awk script to translate is always invoked with" @@ -705,8 +705,15 @@ yylex(void) } if (strEQ(d,"sub")) XTERM(SUB); - if (strEQ(d,"sprintf")) - XTERM(SPRINTF); + if (strEQ(d,"sprintf")) { + /* In old awk, { print sprintf("str%sg"),"in" } prints + * "string"; in new awk, "in" is not considered an argument to + * sprintf, so the statement breaks. To support both, the + * grammar treats arguments to SPRINTF_OLD like old awk, + * SPRINTF_NEW like new. Here we return the appropriate one. + */ + XTERM(old_awk ? SPRINTF_OLD : SPRINTF_NEW); + } if (strEQ(d,"sqrt")) { yylval = OSQRT; XTERM(FUN1); diff --git a/contrib/perl5/x2p/cflags.SH b/contrib/perl5/x2p/cflags.SH index 62bd11c..b5ef917 100755 --- a/contrib/perl5/x2p/cflags.SH +++ b/contrib/perl5/x2p/cflags.SH @@ -1,4 +1,4 @@ -case $CONFIG in +case $CONFIGDOTSH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; @@ -57,7 +57,7 @@ case $# in 0) set *.c; echo "The current C flags are:" ;; esac -set `echo "$* " | sed -e 's/\.[oc] / /g' -e 's/\.obj / /g'` +set `echo "$* " | sed -e 's/\.[oc] / /g' -e 's/\.obj / /g' -e "s/\\$obj_ext / /g"` for file do diff --git a/contrib/perl5/x2p/find2perl.PL b/contrib/perl5/x2p/find2perl.PL index f82b660..25d0135 100644 --- a/contrib/perl5/x2p/find2perl.PL +++ b/contrib/perl5/x2p/find2perl.PL @@ -29,539 +29,602 @@ print OUT <<"!GROK!THIS!"; $Config{startperl} eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}' if \$running_under_some_shell; -\$startperl = "$Config{startperl}"; -\$perlpath = "$Config{perlpath}"; +my \$perlpath = "$Config{perlpath}"; !GROK!THIS! # In the following, perl variables are not expanded during extraction. print OUT <<'!NO!SUBS!'; +use strict; +use vars qw/$statdone/; +my $startperl = "#! $perlpath -w"; -# +# # Modified September 26, 1993 to provide proper handling of years after 1999 # Tom Link <tml+@pitt.edu> # University of Pittsburgh -# +# # Modified April 7, 1998 with nasty hacks to implement the troublesome -follow # Billy Constantine <wdconsta@cs.adelaide.edu.au> <billy@smug.adelaide.edu.au> # University of Adelaide, Adelaide, South Australia -# +# +# Modified 1999-06-10, 1999-07-07 to migrate to cleaner perl5 usage +# Ken Pizzini <ken@halcyon.com> +# +# Modified 2000-01-28 to use the 'follow' option of File::Find +my @roots = (); while ($ARGV[0] =~ /^[^-!(]/) { push(@roots, shift); } @roots = ('.') unless @roots; -for (@roots) { $_ = "e($_); } -$roots = join(',', @roots); - -$indent = 1; -$stat = 'lstat'; -$decl = ''; +for (@roots) { $_ = "e($_) } +my $roots = join(', ', @roots); + +my $find = "find"; +my $indent_depth = 1; +my $stat = 'lstat'; +my $decl = ''; +my $flushall = ''; +my $initfile = ''; +my $initnewer = ''; +my $out = ''; +my %init = (); +my ($follow_in_effect,$Skip_And) = (0,0); while (@ARGV) { $_ = shift; s/^-// || /^[()!]/ || die "Unrecognized switch: $_\n"; if ($_ eq '(') { - $out .= &tab . "(\n"; - $indent++; - next; - } - elsif ($_ eq ')') { - $indent--; - $out .= &tab . ")"; - } - elsif ($_ eq 'follow') { - $stat = 'stat'; - $decl = '%already_seen = ();'; - $out .= &tab . '(not $already_seen{"$dev,$ino"}) &&'; - $out .= "\n" . &tab . '(($already_seen{"$dev,$ino"} = !(-d _)) || 1)'; - } - elsif ($_ eq '!') { - $out .= &tab . "!"; - next; - } - elsif ($_ eq 'name') { - $out .= &tab; - $pat = &fileglob_to_re(shift); - $out .= '/' . $pat . "/"; - } - elsif ($_ eq 'perm') { - $onum = shift; - die "Malformed -perm argument: $onum\n" unless $onum =~ /^-?[0-7]+$/; - if ($onum =~ s/^-//) { - $onum = '0' . sprintf("%o", oct($onum) & 017777); # s/b 07777 ? - $out .= &tab . "((\$mode & $onum) == $onum)"; - } - else { - $onum = '0' . $onum unless $onum =~ /^0/; - $out .= &tab . "((\$mode & 0777) == $onum)"; - } - } - elsif ($_ eq 'type') { - ($filetest = shift) =~ tr/s/S/; - $out .= &tab . "-$filetest _"; - } - elsif ($_ eq 'print') { - $out .= &tab . 'print("$name\n")'; - } - elsif ($_ eq 'print0') { - $out .= &tab . 'print("$name\0")'; - } - elsif ($_ eq 'fstype') { - $out .= &tab; - $type = shift; - if ($type eq 'nfs') - { $out .= '($dev < 0)'; } - else - { $out .= '($dev >= 0)'; } - } - elsif ($_ eq 'user') { - $uname = shift; - $out .= &tab . "(\$uid == \$uid{'$uname'})"; - $inituser++; - } - elsif ($_ eq 'group') { - $gname = shift; - $out .= &tab . "(\$gid == \$gid{'$gname'})"; - $initgroup++; - } - elsif ($_ eq 'nouser') { - $out .= &tab . '!defined $uid{$uid}'; - $inituser++; - } - elsif ($_ eq 'nogroup') { - $out .= &tab . '!defined $gid{$gid}'; - $initgroup++; - } - elsif ($_ eq 'links') { - $out .= &tab . '($nlink ' . &n(shift); - } - elsif ($_ eq 'inum') { - $out .= &tab . '($ino ' . &n(shift); - } - elsif ($_ eq 'size') { - $out .= &tab . '(int(((-s _) + 511) / 512) ' . &n(shift); - } - elsif ($_ eq 'atime') { - $out .= &tab . '(int(-A _) ' . &n(shift); - } - elsif ($_ eq 'mtime') { - $out .= &tab . '(int(-M _) ' . &n(shift); - } - elsif ($_ eq 'ctime') { - $out .= &tab . '(int(-C _) ' . &n(shift); - } - elsif ($_ eq 'exec') { - for (@cmd = (); @ARGV && $ARGV[0] ne ';'; push(@cmd,shift)) { } - shift; - $_ = "@cmd"; - if (m#^(/bin/)?rm -f {}$#) { - if (!@ARGV) { - $out .= &tab . 'unlink($_)'; - } - else { - $out .= &tab . '(unlink($_) || 1)'; - } - } - elsif (m#^(/bin/)?rm {}$#) { - $out .= &tab . '(unlink($_) || warn "$name: $!\n")'; - } - else { - for (@cmd) { s/'/\\'/g; } - $" = "','"; - $out .= &tab . "&exec(0, '@cmd')"; - $" = ' '; - $initexec++; - } - } - elsif ($_ eq 'ok') { - for (@cmd = (); @ARGV && $ARGV[0] ne ';'; push(@cmd,shift)) { } - shift; - for (@cmd) { s/'/\\'/g; } - $" = "','"; - $out .= &tab . "&exec(1, '@cmd')"; - $" = ' '; - $initexec++; - } - elsif ($_ eq 'prune') { - $out .= &tab . '($prune = 1)'; - } - elsif ($_ eq 'xdev') { - $out .= &tab . '!($prune |= ($dev != $topdev))'; - } - elsif ($_ eq 'newer') { - $out .= &tab; - $file = shift; - $newername = 'AGE_OF' . $file; - $newername =~ s/[^\w]/_/g; - $newername = "\$$newername"; - $out .= "(-M _ < $newername)"; - $initnewer .= "$newername = -M " . "e($file) . ";\n"; - } - elsif ($_ eq 'eval') { - $prog = "e(shift); - $out .= &tab . "eval $prog"; - } - elsif ($_ eq 'depth') { - $depth++; - next; - } - elsif ($_ eq 'ls') { - $out .= &tab . "&ls"; - $initls++; - } - elsif ($_ eq 'tar') { - $out .= &tab; - die "-tar must have a filename argument\n" unless @ARGV; - $file = shift; - $fh = 'FH' . $file; - $fh =~ s/[^\w]/_/g; - $out .= "&tar($fh)"; - $file = '>' . $file; - $initfile .= "open($fh, " . "e($file) . - qq{) || die "Can't open $fh: \$!\\n";\n}; - $inittar++; - $flushall = "\n&tflushall;\n"; - } - elsif (/^n?cpio$/) { - $depth++; - $out .= &tab; - die "-$_ must have a filename argument\n" unless @ARGV; - $file = shift; - $fh = 'FH' . $file; - $fh =~ s/[^\w]/_/g; - $out .= "&cpio('" . substr($_,0,1) . "', $fh)"; - $file = '>' . $file; - $initfile .= "open($fh, " . "e($file) . - qq{) || die "Can't open $fh: \$!\\n";\n}; - $initcpio++; - $flushall = "\n&flushall;\n"; - } - else { - die "Unrecognized switch: -$_\n"; + $out .= &tab . "(\n"; + $indent_depth++; + next; + } elsif ($_ eq ')') { + --$indent_depth; + $out .= &tab . ")"; + } elsif ($_ eq 'follow') { + $follow_in_effect= 1; + $stat = 'stat'; + $Skip_And= 1; + } elsif ($_ eq '!') { + $out .= &tab . "!"; + next; + } elsif ($_ eq 'name') { + $out .= &tab . '/' . &fileglob_to_re(shift) . "/s"; + } elsif ($_ eq 'perm') { + my $onum = shift; + $onum =~ /^-?[0-7]+$/ + || die "Malformed -perm argument: $onum\n"; + $out .= &tab; + if ($onum =~ s/^-//) { + $onum = sprintf("0%o", oct($onum) & 07777); + $out .= "((\$mode & $onum) == $onum)"; + } else { + $onum =~ s/^0*/0/; + $out .= "((\$mode & 0777) == $onum)"; + } + } elsif ($_ eq 'type') { + (my $filetest = shift) =~ tr/s/S/; + $out .= &tab . "-$filetest _"; + } elsif ($_ eq 'print') { + $out .= &tab . 'print("$name\n")'; + } elsif ($_ eq 'print0') { + $out .= &tab . 'print("$name\0")'; + } elsif ($_ eq 'fstype') { + my $type = shift; + $out .= &tab; + if ($type eq 'nfs') { + $out .= '($dev < 0)'; + } else { + $out .= '($dev >= 0)'; #XXX + } + } elsif ($_ eq 'user') { + my $uname = shift; + $out .= &tab . "(\$uid == \$uid{'$uname'})"; + $init{user} = 1; + } elsif ($_ eq 'group') { + my $gname = shift; + $out .= &tab . "(\$gid == \$gid{'$gname'})"; + $init{group} = 1; + } elsif ($_ eq 'nouser') { + $out .= &tab . '!exists $uid{$uid}'; + $init{user} = 1; + } elsif ($_ eq 'nogroup') { + $out .= &tab . '!exists $gid{$gid}'; + $init{group} = 1; + } elsif ($_ eq 'links') { + $out .= &tab . &n('$nlink', shift); + } elsif ($_ eq 'inum') { + $out .= &tab . &n('$ino', shift); + } elsif ($_ eq 'size') { + $_ = shift; + my $n = 'int(((-s _) + 511) / 512)'; + if (s/c\z//) { + $n = 'int(-s _)'; + } elsif (s/k\z//) { + $n = 'int(((-s _) + 1023) / 1024)'; + } + $out .= &tab . &n($n, $_); + } elsif ($_ eq 'atime') { + $out .= &tab . &n('int(-A _)', shift); + } elsif ($_ eq 'mtime') { + $out .= &tab . &n('int(-M _)', shift); + } elsif ($_ eq 'ctime') { + $out .= &tab . &n('int(-C _)', shift); + } elsif ($_ eq 'exec') { + my @cmd = (); + while (@ARGV && $ARGV[0] ne ';') + { push(@cmd, shift) } + shift; + $out .= &tab; + if ($cmd[0] =~m#^(?:(?:/usr)?/bin/)?rm$# + && $cmd[$#cmd] eq '{}' + && (@cmd == 2 || (@cmd == 3 && $cmd[1] eq '-f'))) { + if (@cmd == 2) { + $out .= '(unlink($_) || warn "$name: $!\n")'; + } elsif (!@ARGV) { + $out .= 'unlink($_)'; + } else { + $out .= '(unlink($_) || 1)'; + } + } else { + for (@cmd) + { s/'/\\'/g } + { local $" = "','"; $out .= "&doexec(0, '@cmd')"; } + $init{doexec} = 1; + } + } elsif ($_ eq 'ok') { + my @cmd = (); + while (@ARGV && $ARGV[0] ne ';') + { push(@cmd, shift) } + shift; + $out .= &tab; + for (@cmd) + { s/'/\\'/g } + { local $" = "','"; $out .= "&doexec(0, '@cmd')"; } + $init{doexec} = 1; + } elsif ($_ eq 'prune') { + $out .= &tab . '($File::Find::prune = 1)'; + } elsif ($_ eq 'xdev') { + $out .= &tab . '!($File::Find::prune |= ($dev != $File::Find::topdev))' +; + } elsif ($_ eq 'newer') { + my $file = shift; + my $newername = 'AGE_OF' . $file; + $newername =~ s/\W/_/g; + $newername = '$' . $newername; + $out .= &tab . "(-M _ < $newername)"; + $initnewer .= "my $newername = -M " . "e($file) . ";\n"; + } elsif ($_ eq 'eval') { + my $prog = shift; + $prog =~ s/'/\\'/g; + $out .= &tab . "eval {$prog}"; + } elsif ($_ eq 'depth') { + $find = 'finddepth'; + next; + } elsif ($_ eq 'ls') { + $out .= &tab . "&ls"; + $init{ls} = 1; + } elsif ($_ eq 'tar') { + die "-tar must have a filename argument\n" unless @ARGV; + my $file = shift; + my $fh = 'FH' . $file; + $fh =~ s/\W/_/g; + $out .= &tab . "&tar(*$fh, \$name)"; + $flushall .= "&tflushall;\n"; + $initfile .= "open($fh, " . "e('> ' . $file) . + qq{) || die "Can't open $fh: \$!\\n";\n}; + $init{tar} = 1; + } elsif (/^(n?)cpio\z/) { + die "-$_ must have a filename argument\n" unless @ARGV; + my $file = shift; + my $fh = 'FH' . $file; + $fh =~ s/\W/_/g; + $out .= &tab . "&cpio(*$fh, \$name, '$1')"; + $find = 'finddepth'; + $flushall .= "&cflushall;\n"; + $initfile .= "open($fh, " . "e('> ' . $file) . + qq{) || die "Can't open $fh: \$!\\n";\n}; + $init{cpio} = 1; + } else { + die "Unrecognized switch: -$_\n"; } + if (@ARGV) { - if ($ARGV[0] eq '-o') { - { local($statdone) = 1; $out .= "\n" . &tab . "||\n"; } - $statdone = 0 if $indent == 1 && $delayedstat; - $saw_or++; - shift; - } - else { - $out .= " &&" unless $ARGV[0] eq ')'; - $out .= "\n"; - shift if $ARGV[0] eq '-a'; - } + if ($ARGV[0] eq '-o') { + { local($statdone) = 1; $out .= "\n" . &tab . "||\n"; } + $statdone = 0 if $indent_depth == 1 && exists $init{delayedstat}; + $init{saw_or} = 1; + shift; + } else { + $out .= " &&" unless $Skip_And || $ARGV[0] eq ')'; + $out .= "\n"; + shift if $ARGV[0] eq '-a'; + } } } + print <<"END"; $startperl eval 'exec $perlpath -S \$0 \${1+"\$@"}' - if \$running_under_some_shell; + if 0; #\$running_under_some_shell + +use strict; +use File::Find (); + +# Set the variable \$File::Find::dont_use_nlink if you're using AFS, +# since AFS cheats. + +# for the convenience of &wanted calls, including -eval statements: +use vars qw/*name *dir *prune/; +*name = *File::Find::name; +*dir = *File::Find::dir; +*prune = *File::Find::prune; END -if ($initls) { + +if (exists $init{ls}) { print <<'END'; -@rwx = ('---','--x','-w-','-wx','r--','r-x','rw-','rwx'); -@moname = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); +my @rwx = qw(--- --x -w- -wx r-- r-x rw- rwx); +my @moname = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); END } -if ($inituser || $initls) { - print 'while (($name, $pw, $uid) = getpwent) {', "\n"; - print ' $uid{$name} = $uid{$uid} = $uid;', "\n" if $inituser; - print ' $user{$uid} = $name unless $user{$uid};', "\n" if $initls; +if (exists $init{user} || exists $init{ls} || exists $init{tar}) { + print "my (%uid, %user);\n"; + print "while (my (\$name, \$pw, \$uid) = getpwent) {\n"; + print ' $uid{$name} = $uid{$uid} = $uid;', "\n" + if exists $init{user}; + print ' $user{$uid} = $name unless exists $user{$uid};', "\n" + if exists $init{ls} || exists $init{tar}; print "}\n\n"; } -if ($initgroup || $initls) { - print 'while (($name, $pw, $gid) = getgrent) {', "\n"; - print ' $gid{$name} = $gid{$gid} = $gid;', "\n" if $initgroup; - print ' $group{$gid} = $name unless $group{$gid};', "\n" if $initls; +if (exists $init{group} || exists $init{ls} || exists $init{tar}) { + print "my (%gid, %group);\n"; + print "while (my (\$name, \$pw, \$gid) = getgrent) {\n"; + print ' $gid{$name} = $gid{$gid} = $gid;', "\n" + if exists $init{group}; + print ' $group{$gid} = $name unless exists $group{$gid};', "\n" + if exists $init{ls} || exists $init{tar}; print "}\n\n"; } -print $initnewer, "\n" if $initnewer; +print $initnewer, "\n" if $initnewer ne ''; +print $initfile, "\n" if $initfile ne ''; +$flushall .= "exit;\n"; +if (exists $init{declarestat}) { + $out = <<'END' . $out; + my ($dev,$ino,$mode,$nlink,$uid,$gid); -print $initfile, "\n" if $initfile; +END +} -$find = $depth ? "finddepth" : "find"; +if ( $follow_in_effect ) { +$out =~ s/lstat\(\$_\)/lstat(_)/; print <<"END"; -require "$find.pl"; - +$decl # Traverse desired filesystems +File::Find::$find( {wanted => \\&wanted, follow => 1}, $roots); +$flushall +sub wanted { +$out; +} + +END +} else { +print <<"END"; $decl -&$find($roots); +# Traverse desired filesystems +File::Find::$find({wanted => \\&wanted}, $roots); $flushall -exit; + sub wanted { $out; } END +} -if ($initexec) { +if (exists $init{doexec}) { print <<'END'; -sub exec { - local($ok, @cmd) = @_; - foreach $word (@cmd) { - $word =~ s#{}#$name#g; - } + +BEGIN { + require Cwd; + my $cwd = Cwd::cwd(); +} + +sub doexec { + my $ok = shift; + for my $word (@_) + { $word =~ s#{}#$name#g } if ($ok) { - local($old) = select(STDOUT); - $| = 1; - print "@cmd"; - select($old); - return 0 unless <STDIN> =~ /^y/; - } - chdir $cwd; # sigh - system @cmd; - chdir $dir; + my $old = select(STDOUT); + $| = 1; + print "@_"; + select($old); + return 0 unless <STDIN> =~ /^y/; + } + chdir $cwd; #sigh + system @_; + chdir $File::Find::dir; return !$?; } END } -if ($initls) { - print <<"INTERP", <<'END'; -sub ls { - (\$dev,\$ino,\$mode,\$nlink,\$uid,\$gid,\$rdev,\$sizemm, - \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat\(_\); -INTERP - - $pname = $name; +if (exists $init{ls}) { + print <<'INTRO', <<"SUB", <<'END'; - if (defined $blocks) { - $blocks = int(($blocks + 1) / 2); - } - else { - $blocks = int(($size + 1023) / 1024); - } +sub sizemm { + my $rdev = shift; + sprintf("%3d, %3d", ($rdev >> 8) & 0xff, $rdev & 0xff); +} - if (-f _) { $perms = '-'; } - elsif (-d _) { $perms = 'd'; } - elsif (-c _) { $perms = 'c'; $sizemm = &sizemm; } - elsif (-b _) { $perms = 'b'; $sizemm = &sizemm; } - elsif (-p _) { $perms = 'p'; } - elsif (-S _) { $perms = 's'; } - else { $perms = 'l'; $pname .= ' -> ' . readlink($_); } - - $tmpmode = $mode; - $tmp = $rwx[$tmpmode & 7]; - $tmpmode >>= 3; - $tmp = $rwx[$tmpmode & 7] . $tmp; - $tmpmode >>= 3; - $tmp = $rwx[$tmpmode & 7] . $tmp; - substr($tmp,2,1) =~ tr/-x/Ss/ if -u _; - substr($tmp,5,1) =~ tr/-x/Ss/ if -g _; - substr($tmp,8,1) =~ tr/-x/Tt/ if -k _; - $perms .= $tmp; - - $user = $user{$uid} || $uid; - $group = $group{$gid} || $gid; - - ($sec,$min,$hour,$mday,$mon,$year) = localtime($mtime); - $moname = $moname[$mon]; +sub ls { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, +INTRO + \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat(_); +SUB + my $pname = $name; + + $blocks + or $blocks = int(($size + 1023) / 1024); + + my $perms = $rwx[$mode & 7]; + $mode >>= 3; + $perms = $rwx[$mode & 7] . $perms; + $mode >>= 3; + $perms = $rwx[$mode & 7] . $perms; + substr($perms, 2, 1) =~ tr/-x/Ss/ if -u _; + substr($perms, 5, 1) =~ tr/-x/Ss/ if -g _; + substr($perms, 8, 1) =~ tr/-x/Tt/ if -k _; + if (-f _) { $perms = '-' . $perms; } + elsif (-d _) { $perms = 'd' . $perms; } + elsif (-l _) { $perms = 'l' . $perms; $pname .= ' -> ' . readlink($_); } + elsif (-c _) { $perms = 'c' . $perms; $size = sizemm($rdev); } + elsif (-b _) { $perms = 'b' . $perms; $size = sizemm($rdev); } + elsif (-p _) { $perms = 'p' . $perms; } + elsif (-S _) { $perms = 's' . $perms; } + else { $perms = '?' . $perms; } + + my $user = $user{$uid} || $uid; + my $group = $group{$gid} || $gid; + + my ($sec,$min,$hour,$mday,$mon,$timeyear) = localtime($mtime); if (-M _ > 365.25 / 2) { - $timeyear = $year + 1900; - } - else { - $timeyear = sprintf("%02d:%02d", $hour, $min); - } - - printf "%5lu %4ld %-10s %2d %-8s %-8s %8s %s %2d %5s %s\n", - $ino, - $blocks, - $perms, - $nlink, - $user, - $group, - $sizemm, - $moname, - $mday, - $timeyear, - $pname; + $timeyear += 1900; + } else { + $timeyear = sprintf("%02d:%02d", $hour, $min); + } + + printf "%5lu %4ld %-10s %3d %-8s %-8s %8s %s %2d %5s %s\n", + $ino, + $blocks, + $perms, + $nlink, + $user, + $group, + $size, + $moname[$mon], + $mday, + $timeyear, + $pname; 1; } -sub sizemm { - sprintf("%3d, %3d", ($rdev >> 8) & 255, $rdev & 255); +END +} + + +if (exists $init{cpio} || exists $init{tar}) { +print <<'END'; + +my %blocks = (); + +sub flush { + my ($fh, $varref, $blksz) = @_; + + while (length($$varref) >= $blksz) { + no strict qw/refs/; + syswrite($fh, $$varref, $blksz); + substr($$varref, 0, $blksz) = ''; + ++$blocks{$fh}; + } } END } -if ($initcpio) { -print <<'START', <<"INTERP", <<'END'; -sub cpio { - local($nc,$fh) = @_; - local($text); - if ($name eq 'TRAILER!!!') { - $text = ''; - $size = 0; - } - else { -START - (\$dev,\$ino,\$mode,\$nlink,\$uid,\$gid,\$rdev,\$size, - \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat\(_\); -INTERP - if (-f _) { - open(IN, "./$_\0") || do { - warn "Couldn't open $name: $!\n"; - return; - }; - } - else { - $text = readlink($_); - $size = 0 unless defined $text; - } - } +if (exists $init{cpio}) { + print <<'INTRO', <<"SUB", <<'END'; + +my %cpout = (); +my %nc = (); - ($nm = $name) =~ s#^\./##; +sub cpio { + my ($fh, $fname, $nc) = @_; + my $text = ''; + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks); + local (*IN); + + if ( ! defined $fname ) { + $fname = 'TRAILER!!!'; + ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) = (0) x 13; + } else { + ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, +INTRO + \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat(_); +SUB + if (-f _) { + open(IN, "./$_\0") || do { + warn "Couldn't open $fname: $!\n"; + return; + } + } else { + $text = readlink($_); + $size = 0 unless defined $text; + } + } + + $fname =~ s#^\./##; $nc{$fh} = $nc; if ($nc eq 'n') { - $cpout{$fh} .= - sprintf("%06o%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo%s\0", - 070707, - $dev & 0777777, - $ino & 0777777, - $mode & 0777777, - $uid & 0777777, - $gid & 0777777, - $nlink & 0777777, - $rdev & 0177777, - $mtime, - length($nm)+1, - $size, - $nm); + $cpout{$fh} .= + sprintf("%06o%06o%06o%06o%06o%06o%06o%06o%011lo%06o%011lo%s\0", + 070707, + $dev & 0777777, + $ino & 0777777, + $mode & 0777777, + $uid & 0777777, + $gid & 0777777, + $nlink & 0777777, + $rdev & 0177777, + $mtime, + length($fname)+1, + $size, + $fname); + } else { + $cpout{$fh} .= "\0" if length($cpout{$fh}) & 1; + $cpout{$fh} .= pack("SSSSSSSSLSLa*", + 070707, $dev, $ino, $mode, $uid, $gid, $nlink, $rdev, $mtime, + length($fname)+1, $size, + $fname . (length($fname) & 1 ? "\0" : "\0\0")); } - else { - $cpout{$fh} .= "\0" if length($cpout{$fh}) & 1; - $cpout{$fh} .= pack("SSSSSSSSLSLa*", - 070707, $dev, $ino, $mode, $uid, $gid, $nlink, $rdev, $mtime, - length($nm)+1, $size, $nm . (length($nm) & 1 ? "\0" : "\0\0")); - } - if ($text ne '') { - $cpout{$fh} .= $text; - } - elsif ($size) { - &flush($fh) while ($l = length($cpout{$fh})) >= 5120; - while (sysread(IN, $cpout{$fh}, 5120 - $l, $l)) { - &flush($fh); - $l = length($cpout{$fh}); - } - } - close IN; -} -sub flush { - local($fh) = @_; - - while (length($cpout{$fh}) >= 5120) { - syswrite($fh,$cpout{$fh},5120); - ++$blocks{$fh}; - substr($cpout{$fh}, 0, 5120) = ''; + if ($text ne '') { + $cpout{$fh} .= $text; + } elsif ($size) { + my $l; + flush($fh, \$cpout{$fh}, 5120) + while ($l = length($cpout{$fh})) >= 5120; + while (sysread(IN, $cpout{$fh}, 5120 - $l, $l)) { + flush($fh, \$cpout{$fh}, 5120); + $l = length($cpout{$fh}); + } + close IN; } } -sub flushall { - $name = 'TRAILER!!!'; - foreach $fh (keys %cpout) { - &cpio($nc{$fh},$fh); - $cpout{$fh} .= "0" x (5120 - length($cpout{$fh})); - &flush($fh); - print $blocks{$fh} * 10, " blocks\n"; +sub cflushall { + for my $fh (keys %cpout) { + &cpio($fh, undef, $nc{$fh}); + $cpout{$fh} .= "0" x (5120 - length($cpout{$fh})); + flush($fh, \$cpout{$fh}, 5120); + print $blocks{$fh} * 10, " blocks\n"; } } END } -if ($inittar) { -print <<'START', <<"INTERP", <<'END'; +if (exists $init{tar}) { + print <<'INTRO', <<"SUB", <<'END'; + +my %tarout = (); +my %linkseen = (); + sub tar { - local($fh) = @_; - local($linkname,$header,$l,$slop); - local($linkflag) = "\0"; - -START - (\$dev,\$ino,\$mode,\$nlink,\$uid,\$gid,\$rdev,\$size, - \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat\(_\); -INTERP - $nm = $name; - if ($nlink > 1) { - if ($linkname = $linkseen{$fh,$dev,$ino}) { - $linkflag = 1; - } - else { - $linkseen{$fh,$dev,$ino} = $nm; - } - } - if (-f _) { - open(IN, "./$_\0") || do { - warn "Couldn't open $name: $!\n"; - return; - }; - $size = 0 if $linkflag ne "\0"; - } - else { - $linkname = readlink($_); - $linkflag = 2 if defined $linkname; - $nm .= '/' if -d _; - $size = 0; - } + my ($fh, $fname) = @_; + my $prefix = ''; + my $typeflag = '0'; + my $linkname; + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, +INTRO + \$atime,\$mtime,\$ctime,\$blksize,\$blocks) = $stat(_); +SUB + local (*IN); - $header = pack("a100a8a8a8a12a12a8a1a100", - $nm, - sprintf("%6o ", $mode & 0777), - sprintf("%6o ", $uid & 0777777), - sprintf("%6o ", $gid & 0777777), - sprintf("%11o ", $size), - sprintf("%11o ", $mtime), - " ", - $linkflag, - $linkname); - $l = length($header) % 512; - substr($header, 148, 6) = sprintf("%6o", unpack("%16C*", $header)); - substr($header, 154, 1) = "\0"; # blech + if ($nlink > 1) { + if ($linkname = $linkseen{$fh, $dev, $ino}) { + if (length($linkname) > 100) { + warn "$0: omitting file with linkname ", + "too long for tar output: $linkname\n"; + return; + } + $typeflag = '1'; + $size = 0; + } else { + $linkseen{$fh, $dev, $ino} = $fname; + } + } + if ($typeflag eq '0') { + if (-f _) { + open(IN, "./$_\0") || do { + warn "Couldn't open $fname: $!\n"; + return; + } + } else { + $linkname = readlink($_); + if (defined $linkname) { $typeflag = '2' } + elsif (-c _) { $typeflag = '3' } + elsif (-b _) { $typeflag = '4' } + elsif (-d _) { $typeflag = '5' } + elsif (-p _) { $typeflag = '6' } + } + } + + if (length($fname) > 100) { + ($prefix, $fname) = ($fname =~ m#\A(.*?)/(.{,100})\Z(?!\n)#); + if (!defined($fname) || length($prefix) > 155) { + warn "$0: omitting file with name too long for tar output: ", + $fname, "\n"; + return; + } + } + + $size = 0 if $typeflag ne '0'; + my $header = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155", + $fname, + sprintf("%7o ", $mode & 0777), + sprintf("%7o ", $uid & 0777777), + sprintf("%7o ", $gid & 0777777), + sprintf("%11o ", $size), + sprintf("%11o ", $mtime), + ' 'x8, + $typeflag, + defined $linkname ? $linkname : '', + "ustar\0", + "00", + $user{$uid}, + $group{$gid}, + ($rdev >> 8) & 0xff, + $rdev & 0xff, + $prefix, + ); + substr($header, 148, 8) = sprintf("%7o ", unpack("%16C*", $header)); + my $l = length($header) % 512; $tarout{$fh} .= $header; $tarout{$fh} .= "\0" x (512 - $l) if $l; - if ($size) { - &tflush($fh) while ($l = length($tarout{$fh})) >= 10240; - while (sysread(IN, $tarout{$fh}, 10240 - $l, $l)) { - $slop = length($tarout{$fh}) % 512; - $tarout{$fh} .= "\0" x (512 - $slop) if $slop; - &tflush($fh); - $l = length($tarout{$fh}); - } - } - close IN; -} - -sub tflush { - local($fh) = @_; - while (length($tarout{$fh}) >= 10240) { - syswrite($fh,$tarout{$fh},10240); - ++$blocks{$fh}; - substr($tarout{$fh}, 0, 10240) = ''; + if ($size) { + flush($fh, \$tarout{$fh}, 10240) + while ($l = length($tarout{$fh})) >= 10240; + while (sysread(IN, $tarout{$fh}, 10240 - $l, $l)) { + my $slop = length($tarout{$fh}) % 512; + $tarout{$fh} .= "\0" x (512 - $slop) if $slop; + flush($fh, \$tarout{$fh}, 10240); + $l = length($tarout{$fh}); + } + close IN; } } sub tflushall { - local($len); - - foreach $fh (keys %tarout) { - $len = 10240 - length($tarout{$fh}); - $len += 10240 if $len < 1024; - $tarout{$fh} .= "\0" x $len; - &tflush($fh); + my $len; + for my $fh (keys %tarout) { + $len = 10240 - length($tarout{$fh}); + $len += 10240 if $len < 1024; + $tarout{$fh} .= "\0" x $len; + flush($fh, \$tarout{$fh}, 10240); } } @@ -573,52 +636,245 @@ exit; ############################################################################ sub tab { - local($tabstring); + my $tabstring; - $tabstring = "\t" x ($indent / 2) . ' ' x ($indent % 2 * 4); + $tabstring = "\t" x ($indent_depth/2) . ' ' x ($indent_depth%2 * 4); if (!$statdone) { - if ($_ =~ /^(name|print|prune|exec|ok|\(|\))/) { - $delayedstat++; - } - else { - if ($saw_or) { - $tabstring .= <<"ENDOFSTAT" . $tabstring; -(\$nlink || ((\$dev,\$ino,\$mode,\$nlink,\$uid,\$gid) = $stat\(\$_\))) && -ENDOFSTAT - } - else { - $tabstring .= <<"ENDOFSTAT" . $tabstring; -((\$dev,\$ino,\$mode,\$nlink,\$uid,\$gid) = $stat\(\$_\)) && -ENDOFSTAT - } - $statdone = 1; - } + if ($_ =~ /^(?:name|print|prune|exec|ok|\(|\))/) { + $init{delayedstat} = 1; + } else { + my $statcall = '(($dev,$ino,$mode,$nlink,$uid,$gid) = ' + . $stat . '($_))'; + if (exists $init{saw_or}) { + $tabstring .= "(\$nlink || $statcall) &&\n" . $tabstring; + } else { + $tabstring .= "$statcall &&\n" . $tabstring; + } + $statdone = 1; + $init{declarestat} = 1; + } } $tabstring =~ s/^\s+/ / if $out =~ /!$/; $tabstring; } sub fileglob_to_re { - local($tmp) = @_; - - $tmp =~ s#([./^\$()])#\\$1#g; - $tmp =~ s/([?*])/.$1/g; - "^$tmp\$"; + my $x = shift; + $x =~ s#([./^\$()])#\\$1#g; + $x =~ s#([?*])#.$1#g; + "^$x\\z"; } sub n { - local($n) = @_; - + my ($pre, $n) = @_; $n =~ s/^-/< / || $n =~ s/^\+/> / || $n =~ s/^/== /; $n =~ s/ 0*(\d)/ $1/; - $n . ')'; + "($pre $n)"; } sub quote { - local($string) = @_; - $string =~ s/'/\\'/; + my $string = shift; + $string =~ s/'/\\'/g; "'$string'"; } + +__END__ + +=head1 NAME + +find2perl - translate find command lines to Perl code + +=head1 SYNOPSIS + + find2perl [paths] [predicates] | perl + +=head1 DESCRIPTION + +find2perl is a little translator to convert find command lines to +equivalent Perl code. The resulting code is typically faster than +running find itself. + +"paths" are a set of paths where find2perl will start its searches and +"predicates" are taken from the following list. + +=over 4 + +=item C<! PREDICATE> + +Negate the sense of the following predicate. The C<!> must be passed as +a distinct argument, so it may need to be surrounded by whitespace and/or +quoted from interpretation by the shell using a backslash (just as with +using C<find(1)>). + +=item C<( PREDICATES )> + +Group the given PREDICATES. The parentheses must be passed as distinct +arguments, so they may need to be surrounded by whitespace and/or +quoted from interpretation by the shell using a backslash (just as with +using C<find(1)>). + +=item C<PREDICATE1 PREDICATE2> + +True if _both_ PREDICATE1 and PREDICATE2 are true; PREDICATE2 is not +evaluated if PREDICATE1 is false. + +=item C<PREDICATE1 -o PREDICATE2> + +True if either one of PREDICATE1 or PREDICATE2 is true; PREDICATE2 is +not evaluated if PREDICATE1 is true. + +=item C<-follow> + +Follow (dereference) symlinks. The checking of file attributes depends +on the position of the C<-follow> option. If it precedes the file +check option, an C<stat> is done which means the file check applies to the +file the symbolic link is pointing to. If C<-follow> option follows the +file check option, this now applies to the symbolic link itself, i.e. +an C<lstat> is done. + +=item C<-depth> + +Change directory traversal algorithm from breadth-first to depth-first. + +=item C<-prune> + +Do not descend into the directory currently matched. + +=item C<-xdev> + +Do not traverse mount points (prunes search at mount-point directories). + +=item C<-name GLOB> + +File name matches specified GLOB wildcard pattern. GLOB may need to be +quoted to avoid interpretation by the shell (just as with using +C<find(1)>). + +=item C<-perm PERM> + +Low-order 9 bits of permission match octal value PERM. + +=item C<-perm -PERM> + +The bits specified in PERM are all set in file's permissions. + +=item C<-type X> + +The file's type matches perl's C<-X> operator. + +=item C<-fstype TYPE> + +Filesystem of current path is of type TYPE (only NFS/non-NFS distinction +is implemented). + +=item C<-user USER> + +True if USER is owner of file. + +=item C<-group GROUP> + +True if file's group is GROUP. + +=item C<-nouser> + +True if file's owner is not in password database. + +=item C<-nogroup> + +True if file's group is not in group database. + +=item C<-inum INUM> + +True file's inode number is INUM. + +=item C<-links N> + +True if (hard) link count of file matches N (see below). + +=item C<-size N> + +True if file's size matches N (see below) N is normally counted in +512-byte blocks, but a suffix of "c" specifies that size should be +counted in characters (bytes) and a suffix of "k" specifes that +size should be counted in 1024-byte blocks. + +=item C<-atime N> + +True if last-access time of file matches N (measured in days) (see +below). + +=item C<-ctime N> + +True if last-changed time of file's inode matches N (measured in days, +see below). + +=item C<-mtime N> + +True if last-modified time of file matches N (measured in days, see below). + +=item C<-newer FILE> + +True if last-modified time of file matches N. + +=item C<-print> + +Print out path of file (always true). + +=item C<-print0> + +Like -print, but terminates with \0 instead of \n. + +=item C<-exec OPTIONS ;> + +exec() the arguments in OPTIONS in a subprocess; any occurence of {} in +OPTIONS will first be substituted with the path of the current +file. Note that the command "rm" has been special-cased to use perl's +unlink() function instead (as an optimization). The C<;> must be passed as +a distinct argument, so it may need to be surrounded by whitespace and/or +quoted from interpretation by the shell using a backslash (just as with +using C<find(1)>). + +=item C<-ok OPTIONS ;> + +Like -exec, but first prompts user; if user's response does not begin +with a y, skip the exec. The C<;> must be passed as +a distinct argument, so it may need to be surrounded by whitespace and/or +quoted from interpretation by the shell using a backslash (just as with +using C<find(1)>). + +=item C<-eval EXPR> + +Has the perl script eval() the EXPR. + +=item C<-ls> + +Simulates C<-exec ls -dils {} ;> + +=item C<-tar FILE> + +Adds current output to tar-format FILE. + +=item C<-cpio FILE> + +Adds current output to old-style cpio-format FILE. + +=item C<-ncpio FILE> + +Adds current output to "new"-style cpio-format FILE. + +=back + +Predicates which take a numeric argument N can come in three forms: + + * N is prefixed with a +: match values greater than N + * N is prefixed with a -: match values less than N + * N is not prefixed with either + or -: match only values equal to N + +=head1 SEE ALSO + +find + +=cut !NO!SUBS! close OUT or die "Can't close $file: $!"; diff --git a/contrib/perl5/x2p/hash.c b/contrib/perl5/x2p/hash.c index f11f7df..77b9ad8 100644 --- a/contrib/perl5/x2p/hash.c +++ b/contrib/perl5/x2p/hash.c @@ -89,9 +89,7 @@ hstore(register HASH *tb, char *key, STR *val) #ifdef NOTUSED bool -hdelete(tb,key) -register HASH *tb; -char *key; +hdelete(register HASH *tb, char *key) { register char *s; register int i; @@ -178,8 +176,7 @@ hnew(void) } #ifdef NOTUSED -hshow(tb) -register HASH *tb; +hshow(register HASH *tb) { fprintf(stderr,"%5d %4d (%2d%%)\n", tb->tbl_max+1, diff --git a/contrib/perl5/x2p/hash.h b/contrib/perl5/x2p/hash.h index 9dc64a1..377bfd2 100644 --- a/contrib/perl5/x2p/hash.h +++ b/contrib/perl5/x2p/hash.h @@ -41,12 +41,12 @@ struct htbl { HENT *tbl_eiter; /* current entry of iterator */ }; -bool hdelete _((HASH *tb, char *key)); -STR * hfetch _(( HASH *tb, char *key )); -int hiterinit _(( HASH *tb )); -char * hiterkey _(( HENT *entry )); -HENT * hiternext _(( HASH *tb )); -STR * hiterval _(( HENT *entry )); -HASH * hnew _(( void )); -void hsplit _(( HASH *tb )); -bool hstore _(( HASH *tb, char *key, STR *val )); +bool hdelete (HASH *tb, char *key); +STR * hfetch ( HASH *tb, char *key ); +int hiterinit ( HASH *tb ); +char * hiterkey ( HENT *entry ); +HENT * hiternext ( HASH *tb ); +STR * hiterval ( HENT *entry ); +HASH * hnew ( void ); +void hsplit ( HASH *tb ); +bool hstore ( HASH *tb, char *key, STR *val ); diff --git a/contrib/perl5/x2p/s2p.PL b/contrib/perl5/x2p/s2p.PL index 463465d..4f7bf8c 100644 --- a/contrib/perl5/x2p/s2p.PL +++ b/contrib/perl5/x2p/s2p.PL @@ -51,7 +51,7 @@ B<s2p [options] filename> =head1 DESCRIPTION -I<S2p> takes a sed script specified on the command line (or from +I<s2p> takes a sed script specified on the command line (or from standard input) and produces a comparable I<perl> script on the standard output. @@ -93,7 +93,7 @@ $\ and chop. =head1 ENVIRONMENT -S2p uses no environment variables. +s2p uses no environment variables. =head1 AUTHOR @@ -104,7 +104,7 @@ Larry Wall E<lt>F<larry@wall.org>E<gt> =head1 SEE ALSO perl The perl compiler/interpreter - + a2p awk to perl translator =head1 DIAGNOSTICS @@ -339,11 +339,11 @@ if ($appendseen || $tseen || !$assumen) { : if ($atext) { chop $atext; print $atext; $atext = ''; } : #endif EOT +} print BODY &q(<<'EOT'); : } EOT -} unless ($debug) { @@ -552,6 +552,11 @@ EOT substr($_,$i-1,1) = '$'; } } + elsif ($c eq '@') { + substr($_, $i, 0) = '\\'; + $i++; + $len++; + } elsif ($c eq '&' && $repl) { substr($_, $i, 0) = '$'; $i++; @@ -797,6 +802,7 @@ sub fetchpat { } } $addr =~ s/\t/\\t/g; + $addr =~ s/\@/\\@/g; &simplify($addr); $addr; } diff --git a/contrib/perl5/x2p/str.h b/contrib/perl5/x2p/str.h index 3deaaec..a7eec88 100644 --- a/contrib/perl5/x2p/str.h +++ b/contrib/perl5/x2p/str.h @@ -29,25 +29,25 @@ struct string { EXT STR **tmps_list; EXT long tmps_max INIT(-1); -double str_2num _(( STR *str )); -char * str_2ptr _(( STR *str )); -char * str_append_till _(( STR *str, char *from, int delim, char *keeplist )); -void str_cat _(( STR *str, char *ptr )); -void str_chop _(( STR *str, char *ptr )); -void str_dec _(( STR *str )); -void str_free _(( STR *str )); -char * str_gets _(( STR *str, FILE *fp )); -void str_grow _(( STR *str, int len )); -void str_inc _(( STR *str )); -int str_len _(( STR *str )); -STR * str_make _(( char *s )); -STR * str_mortal _(( STR *oldstr )); -void str_ncat _(( STR *str, char *ptr, int len )); -STR * str_new _(( int len )); -STR * str_nmake _(( double n )); -void str_nset _(( STR *str, char *ptr, int len )); -void str_numset _(( STR *str, double num )); -void str_replace _(( STR *str, STR *nstr )); -void str_scat _(( STR *dstr, STR *sstr )); -void str_set _(( STR *str, char *ptr )); -void str_sset _(( STR *dstr, STR *sstr )); +double str_2num ( STR *str ); +char * str_2ptr ( STR *str ); +char * str_append_till ( STR *str, char *from, int delim, char *keeplist ); +void str_cat ( STR *str, char *ptr ); +void str_chop ( STR *str, char *ptr ); +void str_dec ( STR *str ); +void str_free ( STR *str ); +char * str_gets ( STR *str, FILE *fp ); +void str_grow ( STR *str, int len ); +void str_inc ( STR *str ); +int str_len ( STR *str ); +STR * str_make ( char *s ); +STR * str_mortal ( STR *oldstr ); +void str_ncat ( STR *str, char *ptr, int len ); +STR * str_new ( int len ); +STR * str_nmake ( double n ); +void str_nset ( STR *str, char *ptr, int len ); +void str_numset ( STR *str, double num ); +void str_replace ( STR *str, STR *nstr ); +void str_scat ( STR *dstr, STR *sstr ); +void str_set ( STR *str, char *ptr ); +void str_sset ( STR *dstr, STR *sstr ); diff --git a/contrib/perl5/x2p/util.c b/contrib/perl5/x2p/util.c index 364dfe9..d43a1eb 100644 --- a/contrib/perl5/x2p/util.c +++ b/contrib/perl5/x2p/util.c @@ -203,6 +203,9 @@ fatal(char *pat,...) exit(1); } +#if defined(__APPLE_CC__) +__private_extern__ /* warn() conflicts with libc */ +#endif void warn(char *pat,...) { diff --git a/contrib/perl5/x2p/util.h b/contrib/perl5/x2p/util.h index aa31bea..34138c7 100644 --- a/contrib/perl5/x2p/util.h +++ b/contrib/perl5/x2p/util.h @@ -22,18 +22,18 @@ char *getwd(); int makedir(); -char * cpy2 _(( char *to, char *from, int delim )); -char * cpytill _(( char *to, char *from, int delim )); -void growstr _(( char **strptr, int *curlen, int newlen )); -char * instr _(( char *big, char *little )); -char * safecpy _(( char *to, char *from, int len )); -char * savestr _(( char *str )); -void croak _(( char *pat, ... )); -void fatal _(( char *pat, ... )); -void warn _(( char *pat, ... )); -int prewalk _(( int numit, int level, int node, int *numericptr )); +char * cpy2 ( char *to, char *from, int delim ); +char * cpytill ( char *to, char *from, int delim ); +void growstr ( char **strptr, int *curlen, int newlen ); +char * instr ( char *big, char *little ); +char * safecpy ( char *to, char *from, int len ); +char * savestr ( char *str ); +void croak ( char *pat, ... ); +void fatal ( char *pat, ... ); +void warn ( char *pat, ... ); +int prewalk ( int numit, int level, int node, int *numericptr ); -Malloc_t safemalloc _((MEM_SIZE nbytes)); -Malloc_t safecalloc _((MEM_SIZE elements, MEM_SIZE size)); -Malloc_t saferealloc _((Malloc_t where, MEM_SIZE nbytes)); -Free_t safefree _((Malloc_t where)); +Malloc_t safemalloc (MEM_SIZE nbytes); +Malloc_t safecalloc (MEM_SIZE elements, MEM_SIZE size); +Malloc_t saferealloc (Malloc_t where, MEM_SIZE nbytes); +Free_t safefree (Malloc_t where); diff --git a/contrib/perl5/x2p/walk.c b/contrib/perl5/x2p/walk.c index 24b86aa..3344688 100644 --- a/contrib/perl5/x2p/walk.c +++ b/contrib/perl5/x2p/walk.c @@ -26,14 +26,14 @@ char *limit; STR *subs; STR *curargs = Nullstr; -static void addsemi _(( STR *str )); -static void emit_split _(( STR *str, int level )); -static void fixtab _(( STR *str, int lvl )); -static void numericize _(( int node )); -static void tab _(( STR *str, int lvl )); +static void addsemi ( STR *str ); +static void emit_split ( STR *str, int level ); +static void fixtab ( STR *str, int lvl ); +static void numericize ( int node ); +static void tab ( STR *str, int lvl ); -int prewalk _(( int numit, int level, int node, int *numericptr )); -STR * walk _(( int useval, int level, int node, int *numericptr, int minprec )); +int prewalk ( int numit, int level, int node, int *numericptr ); +STR * walk ( int useval, int level, int node, int *numericptr, int minprec ); STR * @@ -863,7 +863,7 @@ sub Pick {\n\ str_scat(tmp3str,tmp2str); str_cat(tmp3str,").'\"') =~ s/&/\\$&/g, "); str_set(tmp2str,"eval $s_"); - s = (*s == 'g' ? "ge" : "e"); + s = (char*)(*s == 'g' ? "ge" : "e"); i++; } type = ops[ops[node+1].ival].ival; @@ -1219,7 +1219,7 @@ sub Pick {\n\ } tmpstr = walk(1+(type==OPRINT),level,ops[node+1].ival,&numarg,P_MIN); if (!*tmpstr->str_ptr && lval_field) { - t = saw_OFS ? "$," : "' '"; + t = (char*)(saw_OFS ? "$," : "' '"); if (split_to_array) { sprintf(tokenbuf,"join(%s,@Fld)",t); str_cat(tmpstr,tokenbuf); @@ -1292,10 +1292,10 @@ sub Pick {\n\ if (len > 0) tmpstr = walk(1,level,ops[node+1].ival,&numarg,P_MIN); else - tmpstr = str_new(0);; + tmpstr = str_new(0); if (!tmpstr->str_ptr || !*tmpstr->str_ptr) { if (lval_field) { - t = saw_OFS ? "$," : "' '"; + t = (char*)(saw_OFS ? "$," : "' '"); if (split_to_array) { sprintf(tokenbuf,"join(%s,@Fld)",t); str_cat(tmpstr,tokenbuf); @@ -1417,7 +1417,7 @@ sub Pick {\n\ str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,P_MIN)); str_free(fstr); if (str->str_ptr[str->str_cur - 1] == '\n') - --str->str_cur;; + --str->str_cur; str_cat(str," while ("); str_scat(str,fstr=walk(0,level,ops[node+2].ival,&numarg,P_MIN)); str_free(fstr); |