diff options
Diffstat (limited to 'src/preproc/pic/pic.cc')
-rwxr-xr-x | src/preproc/pic/pic.cc | 5220 |
1 files changed, 5220 insertions, 0 deletions
diff --git a/src/preproc/pic/pic.cc b/src/preproc/pic/pic.cc new file mode 100755 index 000000000..42d1480d9 --- /dev/null +++ b/src/preproc/pic/pic.cc @@ -0,0 +1,5220 @@ +#ifndef lint +/*static char yysccsid[] = "from: @(#)yaccpar 1.9 (Berkeley) 02/21/93";*/ +static char yyrcsid[] = "$Id$"; +#endif +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define yyclearin (yychar=(-1)) +#define yyerrok (yyerrflag=0) +#define YYRECOVERING (yyerrflag!=0) +#define YYPREFIX "yy" +#line 20 "/home/cjk/groff/pic/pic.y" +#include "pic.h" +#include "ptable.h" +#include "object.h" + +extern int delim_flag; +extern void do_copy(const char *); +extern void copy_rest_thru(const char *, const char *); +extern void copy_file_thru(const char *, const char *, const char *); +extern void push_body(const char *); +extern void do_for(char *var, double from, double to, + int by_is_multiplicative, double by, char *body); +extern void do_lookahead(); + +#ifndef HAVE_FMOD +extern "C" { + double fmod(double, double); +} +#endif + +#undef rand +#undef srand +extern "C" { + int rand(); + void srand(unsigned int); +} + +/* Maximum number of characters produced by printf("%g") */ +#define GDIGITS 14 + +int yylex(); +void yyerror(const char *); + +void reset(const char *nm); +void reset_all(); + +place *lookup_label(const char *); +void define_label(const char *label, const place *pl); + +direction current_direction; +position current_position; + +implement_ptable(place) + +PTABLE(place) top_table; + +PTABLE(place) *current_table = &top_table; +saved_state *current_saved_state = 0; + +object_list olist; + +const char *ordinal_postfix(int n); +const char *object_type_name(object_type type); +char *format_number(const char *form, double n); +char *do_sprintf(const char *form, const double *v, int nv); + +#line 78 "/home/cjk/groff/pic/pic.y" +typedef union { + char *str; + int n; + double x; + struct { double x, y; } pair; + struct { double x; char *body; } if_data; + struct { char *str; const char *filename; int lineno; } lstr; + struct { double *v; int nv; int maxv; } dv; + struct { double val; int is_multiplicative; } by; + place pl; + object *obj; + corner crn; + path *pth; + object_spec *spec; + saved_state *pstate; + graphics_state state; + object_type obtype; +} YYSTYPE; +#line 88 "y.tab.c" +#define LABEL 257 +#define VARIABLE 258 +#define NUMBER 259 +#define TEXT 260 +#define COMMAND_LINE 261 +#define DELIMITED 262 +#define ORDINAL 263 +#define TH 264 +#define LEFT_ARROW_HEAD 265 +#define RIGHT_ARROW_HEAD 266 +#define DOUBLE_ARROW_HEAD 267 +#define LAST 268 +#define UP 269 +#define DOWN 270 +#define LEFT 271 +#define RIGHT 272 +#define BOX 273 +#define CIRCLE 274 +#define ELLIPSE 275 +#define ARC 276 +#define LINE 277 +#define ARROW 278 +#define MOVE 279 +#define SPLINE 280 +#define HEIGHT 281 +#define RADIUS 282 +#define WIDTH 283 +#define DIAMETER 284 +#define FROM 285 +#define TO 286 +#define AT 287 +#define WITH 288 +#define BY 289 +#define THEN 290 +#define DOTTED 291 +#define DASHED 292 +#define CHOP 293 +#define SAME 294 +#define INVISIBLE 295 +#define LJUST 296 +#define RJUST 297 +#define ABOVE 298 +#define BELOW 299 +#define OF 300 +#define THE 301 +#define WAY 302 +#define BETWEEN 303 +#define AND 304 +#define HERE 305 +#define DOT_N 306 +#define DOT_E 307 +#define DOT_W 308 +#define DOT_S 309 +#define DOT_NE 310 +#define DOT_SE 311 +#define DOT_NW 312 +#define DOT_SW 313 +#define DOT_C 314 +#define DOT_START 315 +#define DOT_END 316 +#define DOT_X 317 +#define DOT_Y 318 +#define DOT_HT 319 +#define DOT_WID 320 +#define DOT_RAD 321 +#define SIN 322 +#define COS 323 +#define ATAN2 324 +#define LOG 325 +#define EXP 326 +#define SQRT 327 +#define K_MAX 328 +#define K_MIN 329 +#define INT 330 +#define RAND 331 +#define SRAND 332 +#define COPY 333 +#define THRU 334 +#define TOP 335 +#define BOTTOM 336 +#define UPPER 337 +#define LOWER 338 +#define SH 339 +#define PRINT 340 +#define CW 341 +#define CCW 342 +#define FOR 343 +#define DO 344 +#define IF 345 +#define ELSE 346 +#define ANDAND 347 +#define OROR 348 +#define NOTEQUAL 349 +#define EQUALEQUAL 350 +#define LESSEQUAL 351 +#define GREATEREQUAL 352 +#define LEFT_CORNER 353 +#define RIGHT_CORNER 354 +#define CENTER 355 +#define END 356 +#define START 357 +#define RESET 358 +#define UNTIL 359 +#define PLOT 360 +#define THICKNESS 361 +#define FILL 362 +#define ALIGNED 363 +#define SPRINTF 364 +#define COMMAND 365 +#define DEFINE 366 +#define UNDEF 367 +#define YYERRCODE 256 +short yylhs[] = { -1, + 0, 0, 16, 17, 17, 28, 28, 29, 29, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 31, 30, + 30, 32, 33, 30, 34, 35, 30, 36, 30, 30, + 37, 30, 30, 30, 38, 38, 38, 26, 26, 27, + 27, 27, 39, 7, 23, 23, 2, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 15, 15, 15, 15, 40, 42, 15, 15, 41, 41, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 43, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 25, 25, 24, 24, 19, 19, + 6, 6, 6, 6, 6, 6, 44, 44, 5, 5, + 13, 13, 13, 13, 13, 14, 14, 14, 22, 22, + 21, 21, 8, 8, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 11, 11, 12, 12, 12, 10, 10, + 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, +}; +short yylen[] = { 2, + 1, 1, 3, 1, 3, 0, 1, 1, 2, 3, + 4, 1, 1, 1, 1, 1, 2, 2, 0, 3, + 2, 0, 0, 7, 0, 0, 6, 0, 10, 1, + 0, 4, 1, 1, 2, 2, 3, 1, 2, 1, + 1, 1, 0, 5, 0, 2, 1, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 0, 2, 3, + 1, 4, 4, 4, 0, 0, 6, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 3, 0, 4, 3, 3, 3, 3, 2, 2, 3, + 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, + 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 2, 1, 5, 0, 3, 1, 1, + 1, 3, 3, 5, 5, 6, 1, 4, 3, 3, + 1, 2, 2, 3, 1, 1, 1, 3, 1, 3, + 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 2, 3, 1, 1, 2, 1, 5, + 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, + 3, 3, 3, 3, 3, 2, 3, 4, 4, 6, + 4, 4, 4, 6, 6, 4, 4, 3, 4, 3, + 3, 3, 3, 3, 3, 3, 3, 2, +}; +short yydefred[] = { 0, + 8, 0, 2, 0, 0, 0, 0, 125, 16, 12, + 13, 14, 15, 71, 72, 73, 74, 75, 76, 77, + 78, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 65, 82, 0, 4, 0, 0, 79, 68, 0, 9, + 0, 0, 0, 0, 25, 0, 146, 203, 204, 149, + 151, 188, 189, 145, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 186, 187, 0, 0, + 194, 195, 200, 202, 201, 0, 0, 0, 0, 0, + 131, 129, 147, 0, 0, 0, 0, 0, 0, 41, + 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 31, 3, 0, 113, + 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 102, 0, 0, 0, 111, + 112, 119, 120, 121, 122, 116, 117, 0, 0, 124, + 0, 118, 36, 0, 0, 10, 0, 22, 0, 20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 190, 192, 196, 198, 191, 193, 197, 199, 0, + 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 205, 206, 207, 208, + 209, 0, 142, 0, 0, 163, 155, 156, 157, 158, + 159, 160, 161, 0, 154, 152, 153, 39, 0, 0, + 57, 0, 0, 0, 43, 0, 0, 0, 0, 81, + 127, 0, 0, 0, 0, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 166, 100, 0, 169, 0, 0, 101, + 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 62, 0, 11, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 217, + 140, 0, 150, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 148, 132, 133, 162, 0, 0, 53, 0, + 0, 0, 0, 0, 51, 0, 0, 50, 49, 0, + 66, 83, 32, 174, 0, 0, 0, 0, 164, 0, + 168, 0, 0, 23, 0, 218, 219, 0, 221, 222, + 223, 0, 0, 226, 227, 229, 0, 0, 0, 0, + 0, 44, 0, 126, 0, 0, 173, 172, 0, 165, + 0, 0, 27, 0, 0, 0, 134, 138, 0, 0, + 0, 0, 70, 67, 171, 0, 24, 46, 220, 224, + 225, 136, 0, 0, 170, 0, 0, 28, 0, 0, + 29, +}; +short yydgoto[] = { 2, + 106, 181, 108, 404, 91, 92, 33, 93, 94, 265, + 266, 267, 109, 96, 34, 3, 35, 36, 97, 225, + 98, 99, 383, 340, 110, 101, 102, 243, 5, 38, + 46, 286, 381, 159, 355, 410, 245, 39, 333, 115, + 394, 375, 116, 204, +}; +short yysindex[] = { -44, + 0, 0, 0,11792, -40, -37, -14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -246, 0,10742, -229,10874, -218,11317, 6,10742, + 0, 0, -296, 0, -44,10435, 0, 0, -39, 0, + -44,10874, 13, -280, 0, -195, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 45, 47, 54, 76, 87, + 92, 109, 120, 142, 146, 158, 0, 0, -262, -219, + 0, 0, 0, 0, 0,10985,10874,11317,11317, 350, + 0, 0, 0, -76, -162, 1981, 18, -35, 734, 0, +10742, 0, 139,10874,10874, 1064, -153, -269, -162, -156, + 0, 623, -59,10742, -44, -44, 0, 0,11764, 0, + 0, 0,11649,11649,11649,11649,11317,11317,11317,11317, +11428,11428,11428, 1994,11538, 0,11649,11649,11649, 0, + 0, 0, 0, 0, 0, 0, 0,11317,11649, 0, + 1477, 0, 0, -55,10076, 0,10874, 0, -48, 0, +10874,10874,10874,10874,10874,10874,10874,10874,10874,10574, +10874, 0, 0, 0, 0, 0, 0, 0, 0, 1517, + 166, 174, 97, -46, 127, 127, -79, 0,11317,11317, +11317,11317,11317,11317,11317,11428,11317,11317,11317,11317, +11317,11317,11317,11428, -7, 180, 0, 0, 0, 0, + 0, -29, 0,11538,11538, 0, 0, 0, 0, 0, + 0, 0, 0, 136, 0, 0, 0, 0,11317, 127, + 0,10874,10874,11317, 0,10874,10874, -252, -252, 0, + 0, 106,11792, 141, -26, 0, 1477, 1477, 1477, 1477, + 1477, 1477, 1477, 1477, 350, 18, 18, 18, 1649, 1192, + -35, 1649, -8, 0, 0, 1661, 0,11095, 266, 0, + 1477, 1477, 1477, 1477, 1477, 0, -37, -14, 0, 0, + 0, -162, 0, 18, 0, -16, 0, 210, 212, 211, + 216, 218, 228, 232, 233, 231, 0, 238, 239, 0, + 0,11428, 0, -15, 1414, 1484, 595, 595, 507, 507, + 1477, 190, 251, 507, -19, -19, 127, 127, 127, 127, + -42, 180, 0, 0, 0, 0, -11, 1414, 0, 1505, + -57, 507, 30, 1414, 0, 1505, -57, 0, 0, 28, + 0, 0, 0, 0, -35, 1649, 1649, 254, 0, 43, + 0, 634, 174, 0, -52, 0, 0,10874, 0, 0, + 0,10874,10874, 0, 0, 0, 14, -1,11428,11428, +11317, 0,11317, 0,11792, 1649, 0, 0, 1649, 0, + -52, 52, 0, 273, 274, 280, 0, 0, -21, 18, + 1075, 1477, 0, 0, 0, 281, 0, 0, 0, 0, + 0, 0,11207, -20, 0,11317, 1477, 0, 1477, 71, + 0, +}; +short yyrindex[] = { 202, + 0, 0, 0, 332, 93, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 58, 0, 161, 60, 0, 0, 70, 0, +10326, 0, 0, 204, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8870, + 0, 0, 0, 0, 4424, 8570, 8999, 0, 0, 0, + 376, 0, 0, 0, 0, 1390, 0, 2313, 0, 0, + 0, 9969, 0, 465,11903,11903, 0, 0, 206, 0, + 0, 0, 9151, 9360, 9110, 9239, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9460, 9545, 9669, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9786, 0, + 4973, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 293, + 0, 261, 0, 0, 455, 563, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 223, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5273, 5381, 5681, 5789, + 6089, 6197, 6497, 6605, 0, 6905, 7013, 7313, 0, 0, + 0, 0, 0, 0, 0, 8656, 0, 0, 0, 0, + 7421, 7721, 7829, 8129, 8237, 0, 9547, 2399, 2602, 3043, + 37, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3983, 4091, 3209, 3542, 2219, 2327, + 4865, 8699, 0, 2660, 1778, 1886, 896, 1004, 1337, 1445, + 0, 3650, 0, 0, 0, 0, 0, 27, 0, 230, + 466, 2768, 0, 95, 0, 908, 1015, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 293, 0, 0, 468, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, + 468, 0, 0, 0, 0, 0, 0, 0, 0, 4532, + -9, 32, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 34, 0, + 0, +}; +short yygindex[] = { 0, + -24, 919, -89, 0, -69, 188, 0, 0, 768, 0, + 0, 327, 187, -83, -117, -18, 0, 0, 2276, -64, + 0, 0, -23, 0, 9, 314, -71, 7, 322, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, +}; +#define YYTABLESIZE 12268 +short yytable[] = { 90, + 214, 246, 215, 112, 154, 90, 4, 8, 172, 173, + 206, 151, 37, 44, 1, 231, 182, 202, 40, 87, + 41, 214, 200, 215, 34, 202, 236, 201, 103, 228, + 200, 198, 100, 199, 227, 201, 63, 283, 100, 111, + 402, 118, 228, 43, 152, 113, 42, 155, 234, 117, + 197, 176, 177, 158, 387, 224, 214, 30, 215, 61, + 214, 180, 215, 185, 186, 270, 160, 236, 374, 33, + 236, 373, 128, 157, 203, 128, 90, 236, 237, 129, + 230, 129, 203, 34, 161, 236, 162, 45, 87, 90, + 174, 175, 7, 163, 52, 63, 242, 244, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 255, 255, 100, + 269, 29, 271, 272, 273, 164, 30, 34, 61, 236, + 240, 322, 100, 274, 275, 7, 165, 37, 33, 63, + 255, 166, 7, 178, 179, 52, 235, 7, 52, 214, + 302, 215, 329, 331, 324, 325, 335, 337, 167, 34, + 30, 236, 61, 52, 207, 208, 209, 210, 211, 168, + 6, 63, 33, 37, 305, 306, 307, 308, 309, 310, + 311, 312, 314, 315, 316, 317, 318, 319, 320, 255, + 47, 169, 30, 7, 61, 170, 50, 52, 7, 269, + 269, 51, 238, 239, 33, 346, 347, 171, 353, 229, + 241, 6, 276, 21, 327, 7, 300, 328, 330, 332, + 95, 334, 336, 287, 301, 7, 95, 303, 153, 52, + 203, 304, 238, 205, 216, 212, 202, 323, 326, 237, + 341, 200, 198, 342, 199, 343, 201, 217, 218, 219, + 220, 221, 222, 352, 223, 354, 338, 339, 349, 47, + 356, 37, 357, 6, 358, 50, 359, 393, 360, 238, + 51, 370, 21, 238, 238, 238, 238, 238, 361, 238, + 237, 364, 95, 237, 371, 362, 363, 255, 365, 366, + 376, 238, 238, 203, 238, 6, 368, 95, 237, 236, + 236, 372, 6, 214, 369, 215, 21, 379, 7, 380, + 95, 388, 202, 131, 131, 131, 382, 200, 198, 195, + 199, 398, 201, 399, 400, 238, 236, 95, 95, 95, + 401, 405, 237, 408, 6, 234, 236, 197, 21, 236, + 7, 1, 411, 47, 58, 189, 190, 191, 192, 193, + 194, 282, 281, 114, 255, 255, 391, 238, 392, 7, + 7, 7, 7, 7, 237, 7, 119, 397, 52, 203, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 236, 236, 18, 59, 60, 407, 0, + 0, 409, 95, 37, 52, 0, 202, 0, 0, 0, + 95, 200, 198, 195, 199, 0, 201, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 196, + 64, 197, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, + 7, 7, 7, 0, 18, 7, 0, 7, 0, 0, + 0, 52, 52, 203, 0, 7, 7, 7, 7, 7, + 7, 0, 7, 130, 216, 130, 7, 7, 6, 6, + 0, 6, 6, 0, 17, 56, 0, 45, 18, 64, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 0, 69, 0, 0, 238, 216, 95, 187, + 0, 216, 188, 237, 216, 216, 216, 216, 216, 216, + 18, 216, 0, 64, 0, 0, 56, 0, 0, 56, + 0, 0, 238, 216, 216, 0, 216, 0, 0, 237, + 0, 0, 238, 17, 56, 238, 45, 0, 0, 237, + 0, 0, 237, 0, 6, 64, 0, 0, 0, 0, + 6, 6, 69, 202, 6, 0, 6, 216, 200, 198, + 216, 199, 0, 201, 0, 95, 95, 17, 56, 6, + 45, 6, 238, 0, 0, 6, 6, 0, 0, 238, + 238, 238, 238, 238, 238, 0, 69, 237, 0, 216, + 0, 0, 0, 0, 0, 344, 0, 0, 348, 17, + 56, 0, 45, 0, 0, 238, 0, 0, 0, 238, + 203, 0, 238, 238, 238, 238, 238, 238, 69, 238, + 0, 0, 189, 190, 191, 192, 193, 194, 0, 0, + 0, 238, 238, 0, 238, 0, 0, 0, 0, 0, + 0, 202, 0, 0, 0, 0, 200, 198, 0, 199, + 0, 201, 0, 0, 0, 0, 0, 0, 0, 187, + 0, 0, 188, 0, 234, 238, 197, 0, 238, 202, + 0, 0, 0, 0, 200, 198, 0, 199, 0, 201, + 202, 0, 377, 378, 0, 200, 198, 195, 199, 0, + 201, 0, 234, 0, 197, 0, 0, 238, 203, 0, + 0, 0, 0, 234, 0, 197, 189, 190, 191, 192, + 193, 194, 395, 0, 0, 396, 0, 0, 0, 0, + 0, 216, 216, 216, 216, 0, 203, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 203, 0, 56, + 0, 0, 0, 0, 0, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 56, 0, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 0, 0, 0, 0, 0, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 0, 0, 216, + 216, 216, 216, 0, 0, 216, 216, 0, 216, 0, + 0, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 0, 56, 0, 216, 216, 216, 216, 238, + 238, 238, 238, 0, 224, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, + 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 213, 0, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 0, + 0, 0, 8, 0, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 212, 0, 238, 238, 238, + 238, 264, 0, 238, 238, 0, 238, 55, 0, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 0, 0, 0, 238, 238, 238, 238, 0, 212, 0, + 0, 0, 212, 0, 0, 212, 212, 212, 212, 212, + 212, 0, 212, 0, 107, 193, 194, 0, 55, 0, + 0, 55, 0, 0, 212, 212, 0, 212, 0, 0, + 156, 0, 0, 0, 0, 0, 55, 0, 0, 189, + 190, 191, 192, 193, 194, 0, 0, 0, 0, 0, + 232, 233, 191, 192, 193, 194, 29, 0, 212, 0, + 0, 212, 0, 216, 0, 0, 0, 0, 0, 0, + 55, 226, 0, 213, 0, 184, 217, 218, 219, 220, + 221, 222, 0, 223, 54, 0, 0, 0, 0, 0, + 212, 0, 0, 0, 0, 0, 264, 0, 0, 264, + 0, 0, 55, 351, 0, 0, 213, 0, 0, 0, + 213, 0, 0, 213, 213, 213, 213, 213, 213, 0, + 213, 0, 0, 0, 0, 54, 0, 0, 54, 0, + 0, 0, 213, 213, 0, 213, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 285, 0, 0, 0, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 298, 299, + 0, 0, 0, 0, 0, 0, 213, 0, 0, 213, + 202, 0, 0, 0, 0, 200, 198, 54, 199, 0, + 201, 202, 0, 264, 264, 0, 200, 198, 0, 199, + 0, 201, 0, 234, 0, 197, 0, 0, 213, 0, + 0, 0, 0, 0, 234, 0, 197, 0, 0, 54, + 0, 0, 0, 264, 0, 0, 264, 0, 0, 0, + 0, 0, 212, 212, 212, 212, 0, 203, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 203, 0, + 0, 55, 0, 0, 0, 0, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 0, 55, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, + 212, 212, 212, 212, 0, 0, 212, 212, 0, 212, + 0, 0, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 0, 0, 55, 212, 212, 212, 212, + 213, 213, 213, 213, 0, 0, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 384, 0, 54, 0, + 385, 386, 224, 0, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 54, 0, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 0, 0, 0, 0, 0, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 214, 0, 213, 213, + 213, 213, 0, 0, 213, 213, 0, 213, 0, 0, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 0, 54, 403, 213, 213, 213, 213, 0, 214, + 0, 0, 0, 214, 0, 0, 214, 214, 214, 214, + 214, 214, 0, 214, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 214, 214, 0, 214, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 232, 233, 191, 192, 193, 194, 0, 0, 0, 0, + 0, 189, 190, 191, 192, 193, 194, 0, 0, 214, + 47, 0, 214, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 0, 0, 47, 0, + 202, 216, 0, 0, 0, 200, 198, 0, 199, 345, + 201, 214, 0, 0, 217, 218, 219, 220, 221, 222, + 0, 223, 0, 234, 0, 197, 0, 215, 0, 0, + 0, 215, 47, 0, 215, 215, 215, 215, 215, 215, + 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 215, 215, 0, 215, 203, 0, 0, + 0, 0, 0, 202, 47, 0, 0, 0, 200, 198, + 202, 199, 0, 201, 0, 200, 198, 0, 199, 0, + 201, 0, 0, 0, 0, 0, 234, 215, 197, 0, + 215, 202, 0, 234, 0, 197, 200, 198, 0, 199, + 0, 201, 0, 202, 0, 0, 0, 0, 200, 198, + 195, 199, 0, 201, 234, 0, 197, 0, 0, 215, + 203, 0, 0, 0, 0, 0, 196, 203, 197, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 214, 214, 214, 214, 0, 203, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 0, + 203, 0, 0, 0, 0, 0, 0, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 0, 0, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 47, 0, 0, 0, 0, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 0, + 0, 214, 214, 214, 214, 0, 0, 214, 214, 47, + 214, 0, 0, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 263, 0, 0, 214, 214, 214, + 214, 215, 215, 215, 215, 0, 350, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 0, 0, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 0, 191, 192, 193, 194, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 210, 0, 215, + 215, 215, 215, 0, 0, 215, 215, 0, 215, 0, + 0, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 0, 0, 0, 215, 215, 215, 215, 0, + 210, 0, 0, 0, 0, 0, 187, 210, 210, 188, + 210, 210, 210, 189, 190, 191, 192, 193, 194, 0, + 189, 0, 191, 192, 193, 194, 210, 210, 0, 210, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 232, 0, 191, 192, 193, 194, 0, 0, 0, + 0, 0, 0, 232, 233, 191, 192, 193, 194, 0, + 210, 0, 0, 210, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 211, 52, + 53, 0, 0, 0, 0, 211, 211, 0, 211, 211, + 211, 52, 53, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 211, 211, 0, 211, 0, 0, + 0, 0, 0, 0, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 0, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 0, 211, 0, + 0, 211, 0, 77, 78, 79, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 78, 79, 80, 0, + 0, 81, 82, 83, 84, 85, 0, 0, 0, 0, + 211, 0, 0, 81, 82, 83, 84, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 0, 0, 0, + 0, 0, 0, 262, 210, 210, 210, 210, 0, 263, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 0, 0, 0, 0, 0, 0, 0, 0, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 0, 0, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 0, 0, 0, 0, 0, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 0, 0, 210, 210, 210, 210, 0, 0, 210, 210, + 0, 210, 0, 0, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 0, 0, 0, 210, 210, + 210, 210, 211, 211, 211, 211, 0, 0, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 0, 0, + 0, 0, 0, 0, 0, 0, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 0, 0, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 0, 0, 0, 0, 0, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 231, 0, + 211, 211, 211, 211, 0, 0, 211, 211, 0, 211, + 0, 0, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 0, 0, 0, 211, 211, 211, 211, + 259, 231, 0, 0, 0, 0, 260, 0, 231, 231, + 0, 261, 231, 0, 52, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 231, 231, 0, + 231, 0, 0, 0, 0, 0, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 0, 0, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 231, 48, 0, 231, 77, 78, 79, 80, 0, + 0, 0, 0, 0, 0, 0, 233, 0, 77, 78, + 79, 80, 0, 81, 82, 83, 84, 85, 0, 0, + 0, 0, 0, 231, 0, 0, 81, 82, 83, 84, + 85, 0, 0, 48, 0, 0, 48, 0, 0, 233, + 0, 183, 0, 0, 0, 0, 233, 233, 0, 0, + 233, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 233, 233, 0, 233, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 256, 257, 258, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, + 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, + 284, 0, 0, 0, 0, 203, 0, 48, 0, 0, + 203, 203, 203, 203, 0, 203, 0, 0, 0, 0, + 0, 233, 0, 0, 0, 0, 0, 0, 203, 0, + 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 0, 0, 0, 231, 231, 231, 231, 321, + 0, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 0, 203, 0, 0, 0, 0, 0, 0, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 0, + 0, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 0, 0, 0, 0, 0, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 0, 0, 231, 231, 231, 231, 0, 0, 231, + 231, 0, 231, 0, 0, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 48, 367, 0, 231, + 231, 231, 231, 233, 233, 233, 233, 0, 0, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 0, + 0, 14, 48, 0, 0, 0, 0, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 0, 0, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 0, 389, 390, 0, 0, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 232, + 14, 233, 233, 233, 233, 0, 0, 233, 233, 0, + 233, 0, 0, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 0, 0, 0, 233, 233, 233, + 233, 0, 232, 0, 14, 0, 0, 188, 203, 232, + 232, 203, 0, 232, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 232, 232, + 0, 232, 0, 0, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 203, 203, 203, 203, + 203, 0, 232, 0, 0, 232, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 230, 230, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 230, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, + 230, 0, 0, 230, 188, 0, 0, 0, 0, 188, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 232, 232, 232, 232, + 0, 0, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 0, 0, 0, 0, 0, 0, 0, 0, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 0, 0, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 0, 0, 0, 0, + 0, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 0, 0, 232, 232, 232, 232, 0, 0, + 232, 232, 0, 232, 0, 0, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 0, 0, 0, + 232, 232, 232, 232, 230, 230, 230, 230, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 0, 0, 15, 0, 0, 0, 0, 0, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 0, 0, 0, 0, 0, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 143, 15, 230, 230, 230, 230, 0, 0, 230, 230, + 0, 230, 0, 0, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 0, 0, 0, 230, 230, + 230, 230, 0, 143, 0, 15, 0, 0, 189, 0, + 143, 143, 0, 143, 143, 143, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, + 0, 0, 143, 0, 0, 0, 0, 15, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 143, 0, 0, 143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 235, 0, 0, 0, 0, 0, 0, 235, 235, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, + 0, 235, 0, 0, 235, 189, 0, 0, 0, 0, + 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, + 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 143, 143, 143, + 143, 0, 0, 143, 0, 143, 143, 143, 143, 143, + 143, 143, 143, 0, 0, 0, 0, 0, 0, 0, + 0, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 0, 0, 0, 0, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 0, 0, 143, 143, 143, 143, 0, + 0, 143, 143, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 143, 143, 143, 143, 143, 0, 0, + 0, 143, 143, 143, 143, 235, 235, 235, 235, 0, + 0, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 0, 0, 0, 0, 0, 0, 0, 0, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 0, + 0, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 0, 0, 0, 0, 0, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 234, 0, 235, 235, 235, 235, 0, 0, 235, + 235, 0, 235, 0, 0, 235, 235, 235, 235, 0, + 0, 235, 235, 235, 235, 235, 0, 0, 0, 235, + 235, 235, 235, 0, 234, 0, 0, 0, 0, 0, + 0, 234, 234, 0, 0, 234, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 0, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 0, 0, 0, 0, 144, + 144, 0, 144, 144, 144, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, + 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 144, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 234, 234, + 234, 234, 0, 0, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 0, 0, 0, 0, 0, 0, + 0, 0, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 0, 0, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 0, 0, + 0, 0, 0, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 0, 0, 234, 234, 234, 234, + 0, 0, 234, 234, 0, 234, 0, 0, 234, 234, + 234, 234, 0, 0, 234, 234, 234, 234, 234, 0, + 0, 0, 234, 234, 234, 234, 144, 144, 144, 144, + 0, 0, 144, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, + 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 236, 0, 144, 144, 144, 144, 0, 0, + 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 144, 144, 144, 144, 0, 0, 0, + 144, 144, 144, 144, 0, 236, 0, 0, 0, 0, + 0, 0, 236, 236, 0, 0, 236, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 236, 0, 0, 236, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 0, 0, 0, 0, + 237, 237, 0, 0, 237, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, + 236, 236, 236, 0, 0, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, + 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 0, 0, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, + 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 0, 0, 236, 236, 236, + 236, 0, 0, 236, 236, 0, 236, 0, 0, 236, + 236, 0, 0, 0, 0, 236, 236, 236, 236, 236, + 0, 0, 0, 236, 236, 236, 236, 237, 237, 237, + 237, 0, 0, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 0, 0, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, + 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 130, 0, 237, 237, 237, 237, 0, + 0, 237, 237, 0, 237, 0, 0, 0, 237, 0, + 0, 0, 0, 237, 237, 237, 237, 237, 0, 0, + 0, 237, 237, 237, 237, 0, 130, 0, 0, 0, + 0, 0, 0, 130, 130, 0, 130, 130, 130, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 0, 0, 130, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 0, 0, 130, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, + 0, 135, 135, 0, 0, 135, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 0, 0, 135, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 130, 130, 130, 130, 0, 0, 130, 0, 130, 130, + 130, 130, 130, 130, 130, 130, 0, 0, 0, 0, + 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 0, 0, 0, 0, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 0, 0, 0, 0, 0, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 0, 0, 130, 130, + 130, 130, 0, 0, 130, 130, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 130, 130, 130, + 130, 0, 0, 0, 130, 130, 130, 130, 135, 135, + 135, 135, 0, 0, 135, 0, 135, 135, 135, 135, + 135, 135, 135, 135, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 0, 0, 0, 0, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 0, 0, + 0, 0, 0, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 139, 0, 135, 135, 135, 135, + 0, 0, 135, 135, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 135, 135, 135, 135, 0, + 0, 0, 135, 135, 135, 135, 0, 139, 0, 0, + 0, 0, 0, 0, 139, 139, 0, 0, 139, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, + 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 0, 0, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 139, 139, 139, 139, 0, 0, 139, 0, 139, + 139, 139, 139, 139, 139, 139, 139, 0, 0, 0, + 0, 0, 0, 0, 0, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 0, 0, 0, 0, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 0, 0, 0, 0, 0, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 0, 0, 139, + 139, 139, 139, 0, 0, 139, 139, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 139, 139, 139, + 139, 139, 0, 0, 0, 139, 139, 139, 139, 88, + 88, 88, 88, 0, 0, 88, 0, 88, 88, 88, + 88, 88, 88, 88, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 90, 0, 0, 0, 0, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 0, + 0, 0, 0, 0, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 90, 0, 88, 88, 88, + 88, 0, 90, 88, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 88, 88, 88, 88, + 0, 90, 0, 88, 88, 88, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 0, 0, 90, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92, 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, 92, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 90, 90, 90, 0, 0, 90, 0, 90, 90, 90, + 90, 90, 90, 90, 90, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 0, 0, 0, 0, 0, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 0, + 0, 0, 0, 0, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 0, 0, 90, 90, 90, + 90, 0, 0, 90, 90, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, + 0, 0, 0, 90, 90, 90, 90, 92, 92, 92, + 92, 0, 0, 92, 0, 92, 92, 92, 92, 92, + 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 96, 0, 0, 0, 0, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 0, 0, 0, + 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 96, 0, 92, 92, 92, 92, 0, + 96, 92, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 92, 92, 92, 92, 0, 96, + 0, 92, 92, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 0, 0, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 0, 0, 94, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 96, 96, + 96, 0, 0, 96, 0, 96, 96, 96, 96, 96, + 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 0, 0, 0, 0, 0, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, + 0, 0, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 0, 0, 96, 96, 96, 96, 0, + 0, 96, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 96, 96, 96, 96, 0, 0, + 0, 96, 96, 96, 96, 94, 94, 94, 94, 0, + 0, 94, 0, 94, 94, 94, 94, 94, 94, 94, + 94, 0, 0, 0, 0, 0, 0, 0, 0, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 84, 0, + 0, 0, 0, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 0, 0, 0, 0, 0, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 84, 0, 94, 94, 94, 94, 0, 84, 94, + 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 94, 94, 94, 94, 0, 84, 0, 94, + 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 84, 0, 0, 84, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 0, 0, 0, 0, 0, 0, 85, 0, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 84, 84, 84, 0, + 0, 84, 0, 84, 84, 84, 84, 84, 84, 84, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, + 0, 0, 0, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 0, 0, 0, 0, 0, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 0, 0, 84, 84, 84, 84, 0, 0, 84, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 84, 84, 84, 84, 84, 0, 0, 0, 84, + 84, 84, 84, 85, 85, 85, 85, 0, 0, 85, + 0, 85, 85, 85, 85, 85, 85, 85, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 86, 0, 0, 0, + 0, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 0, 0, 0, 0, 0, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, + 0, 85, 85, 85, 85, 0, 86, 85, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 85, 85, 85, 85, 0, 86, 0, 85, 85, 85, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, + 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 87, 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, 87, 0, 0, + 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, + 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, 0, 0, 86, + 0, 86, 86, 86, 86, 86, 86, 86, 86, 0, + 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, + 0, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 0, 0, 0, 0, 0, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 0, + 0, 86, 86, 86, 86, 0, 0, 86, 86, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, + 86, 86, 86, 86, 0, 0, 0, 86, 86, 86, + 86, 87, 87, 87, 87, 0, 0, 87, 0, 87, + 87, 87, 87, 87, 87, 87, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 97, 0, 0, 0, 0, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 0, 0, 0, 0, 0, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 97, 0, 87, + 87, 87, 87, 0, 97, 87, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, + 87, 87, 0, 97, 0, 87, 87, 87, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, + 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 98, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 97, 97, 97, 0, 0, 97, 0, 97, + 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 0, 0, 0, 0, 0, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 0, 0, 0, 0, 0, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 0, 0, 97, + 97, 97, 97, 0, 0, 97, 97, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, + 97, 97, 0, 0, 0, 97, 97, 97, 97, 98, + 98, 98, 98, 0, 0, 98, 0, 98, 98, 98, + 98, 98, 98, 98, 98, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 99, 0, 0, 0, 0, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 0, + 0, 0, 0, 0, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 99, 0, 98, 98, 98, + 98, 0, 99, 98, 98, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 98, 98, 98, 98, + 0, 99, 0, 98, 98, 98, 98, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 99, 0, 0, 99, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, + 0, 0, 0, 104, 0, 0, 104, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 99, 99, 99, 0, 0, 99, 0, 99, 99, 99, + 99, 99, 99, 99, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 0, 0, 0, 0, 0, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 0, + 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 0, 0, 99, 99, 99, + 99, 0, 0, 99, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, + 0, 0, 0, 99, 99, 99, 99, 104, 104, 104, + 104, 0, 0, 104, 0, 104, 104, 104, 104, 104, + 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 106, 0, 0, 0, 0, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, + 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 106, 0, 104, 104, 104, 104, 0, + 106, 104, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 104, 104, 104, 104, 104, 0, 106, + 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, 106, 0, 0, 106, 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, 106, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 110, 0, 0, 0, 0, 0, 0, 110, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 110, 0, 0, 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, 0, 110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, + 106, 0, 0, 106, 0, 106, 106, 106, 106, 106, + 106, 106, 106, 0, 0, 0, 0, 0, 0, 0, + 0, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 0, 0, 0, 0, 0, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, + 0, 0, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 0, 0, 106, 106, 106, 106, 0, + 0, 106, 106, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 106, 106, 106, 106, 106, 0, 0, + 0, 106, 106, 106, 106, 110, 110, 110, 110, 0, + 0, 110, 0, 110, 110, 110, 110, 110, 110, 110, + 110, 0, 0, 0, 0, 0, 0, 0, 0, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 123, 0, + 0, 0, 0, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 0, 0, 0, 0, 0, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 123, 0, 110, 110, 110, 110, 0, 123, 110, + 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 110, 110, 110, 110, 110, 0, 123, 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, + 0, 123, 0, 0, 123, 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, 123, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 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, 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, 123, 123, 123, 123, 0, + 0, 123, 0, 123, 123, 123, 123, 123, 123, 123, + 123, 0, 0, 0, 0, 0, 0, 0, 0, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, + 0, 0, 0, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 0, 0, 0, 0, 0, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 0, 0, 123, 123, 123, 123, 0, 0, 123, + 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 123, 123, 123, 123, 123, 0, 0, 0, 123, + 123, 123, 123, 108, 108, 108, 108, 0, 0, 108, + 0, 108, 108, 108, 108, 108, 108, 108, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, + 0, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 0, 0, 0, 0, 0, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 141, + 0, 108, 108, 108, 108, 0, 0, 108, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 108, 108, 108, 108, 0, 0, 0, 108, 108, 108, + 108, 0, 141, 0, 0, 0, 0, 0, 0, 141, + 141, 0, 141, 141, 141, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, + 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, + 0, 0, 141, 0, 0, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 167, 0, + 0, 0, 0, 0, 141, 167, 167, 0, 230, 167, + 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 230, 230, + 0, 0, 230, 0, 0, 0, 0, 0, 167, 0, + 0, 167, 0, 0, 0, 0, 0, 230, 230, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 141, 141, 141, 141, + 0, 0, 141, 0, 141, 141, 141, 141, 141, 141, + 141, 141, 0, 0, 0, 0, 0, 0, 0, 0, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 40, + 0, 0, 0, 141, 141, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 40, 0, 0, 0, 0, 0, 0, 40, + 141, 141, 167, 167, 167, 167, 0, 0, 167, 0, + 167, 167, 167, 167, 167, 167, 0, 0, 40, 0, + 141, 141, 141, 141, 0, 0, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 230, 230, 230, 230, 0, + 167, 230, 40, 0, 0, 40, 230, 0, 0, 230, + 230, 0, 0, 0, 0, 0, 0, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 0, 0, + 0, 0, 0, 0, 40, 0, 167, 167, 42, 0, + 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 0, 167, 167, 167, 167, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 42, 0, 230, 230, 230, 230, 0, 42, 0, + 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 0, 42, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42, 0, 0, 42, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 42, 0, 0, 40, 40, 40, 40, + 0, 0, 40, 0, 0, 0, 0, 40, 0, 0, + 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, + 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 95, 0, 40, 40, 40, 40, 0, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 40, 40, 40, 40, 0, 0, 0, + 0, 0, 0, 40, 95, 0, 0, 0, 93, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 42, 42, 42, 0, + 0, 42, 0, 0, 0, 0, 42, 0, 0, 42, + 42, 0, 0, 0, 0, 89, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, + 0, 0, 0, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 0, 0, 0, 0, 0, + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 93, 0, 42, 42, 42, 42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42, 42, 42, 42, 42, 0, 0, 0, 91, + 0, 0, 42, 93, 0, 0, 0, 0, 0, 95, + 0, 0, 0, 0, 95, 95, 95, 0, 95, 95, + 95, 95, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 188, + 89, 0, 0, 0, 0, 89, 89, 89, 91, 89, + 89, 89, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 95, 95, 91, 0, 0, 0, 0, 0, 0, 103, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 95, 95, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, + 0, 89, 89, 0, 0, 0, 0, 0, 93, 0, + 0, 0, 0, 93, 93, 93, 0, 93, 93, 93, + 93, 89, 89, 89, 89, 0, 0, 0, 103, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 189, 0, + 0, 0, 0, 0, 105, 0, 146, 0, 0, 0, + 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 93, 0, 0, 0, 103, 0, 0, 0, 0, 146, + 0, 146, 146, 0, 0, 0, 0, 0, 0, 93, + 93, 93, 93, 105, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, + 0, 0, 0, 0, 91, 91, 91, 0, 91, 91, + 91, 91, 0, 0, 0, 0, 0, 105, 0, 146, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 109, 105, + 0, 146, 0, 0, 0, 0, 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, 91, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 91, 91, 91, 91, 103, 103, 103, 109, 103, 103, + 103, 103, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, + 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, + 103, 103, 0, 0, 105, 0, 0, 0, 0, 105, + 105, 105, 0, 105, 105, 105, 105, 146, 146, 0, + 103, 103, 103, 103, 0, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 107, 0, 0, 0, 0, 0, + 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, + 0, 146, 146, 146, 146, 105, 105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, + 146, 146, 146, 146, 0, 105, 105, 105, 105, 0, + 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, + 0, 0, 0, 109, 109, 109, 0, 109, 109, 109, + 109, 0, 0, 0, 0, 0, 0, 0, 0, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 0, 0, 0, 0, 0, 0, 80, 109, + 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 0, 109, + 109, 109, 109, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, + 107, 107, 107, 0, 107, 107, 107, 107, 0, 0, + 0, 80, 0, 0, 80, 0, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, + 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, + 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 107, 107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 80, 80, 0, 0, + 0, 80, 0, 80, 80, 80, 80, 80, 80, 80, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, + 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 0, 0, 80, 80, 80, 80, 0, 0, 80, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 80, 80, 80, 80, 0, 0, 0, 80, + 80, 80, 277, 278, 49, 8, 9, 0, 50, 0, + 0, 0, 0, 51, 10, 11, 279, 280, 14, 15, + 16, 17, 18, 19, 20, 21, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 0, 0, 0, 0, 0, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 22, 0, + 77, 78, 79, 80, 23, 24, 6, 0, 25, 0, + 26, 6, 0, 0, 0, 0, 0, 0, 81, 82, + 83, 84, 85, 27, 0, 28, 0, 0, 0, 29, + 30, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, + 0, 0, 0, 0, 104, 0, 0, 0, 0, 88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 6, 0, 6, 0, + 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 105, 0, 0, 0, + 0, 0, 0, 104, 297, 0, 0, 0, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, + 6, 6, 6, 6, 6, 6, 0, 0, 6, 87, + 6, 0, 0, 0, 0, 0, 0, 0, 6, 6, + 6, 6, 6, 6, 0, 6, 0, 0, 0, 6, + 6, 47, 48, 49, 8, 0, 0, 50, 0, 120, + 121, 122, 51, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 0, 0, 0, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 0, 0, 0, 0, 0, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 0, 0, 0, 0, 0, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 0, 0, 77, + 78, 79, 80, 0, 89, 146, 147, 0, 0, 0, + 0, 86, 0, 0, 0, 0, 88, 81, 82, 83, + 84, 85, 0, 0, 0, 148, 149, 150, 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, + 47, 48, 49, 8, 0, 0, 50, 87, 0, 0, + 0, 51, 0, 0, 52, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 0, 0, 0, 0, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 105, 0, 77, 78, + 79, 80, 0, 104, 0, 0, 0, 0, 88, 0, + 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, + 85, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 87, + 0, 0, 0, 0, 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, 48, + 49, 8, 0, 0, 50, 0, 0, 0, 0, 51, + 0, 0, 52, 53, 0, 0, 0, 105, 0, 0, + 0, 0, 0, 0, 86, 0, 0, 0, 0, 88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 0, 0, + 0, 0, 0, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 0, 0, 77, 78, 79, 80, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 81, 82, 83, 84, 85, 0, + 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 47, 48, 49, 8, 268, 0, 50, 0, 0, 88, + 0, 51, 0, 0, 52, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 87, 0, 0, 0, 0, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 0, 0, 77, 78, + 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, + 85, 0, 0, 0, 0, 0, 0, 29, 0, 89, + 0, 47, 48, 49, 8, 0, 104, 50, 406, 0, + 0, 88, 51, 0, 0, 52, 53, 0, 0, 0, + 0, 0, 0, 0, 0, 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, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 0, 87, 0, 0, 0, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 0, 0, 77, + 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, + 84, 85, 0, 0, 0, 0, 0, 0, 29, 89, + 0, 47, 48, 49, 8, 0, 104, 50, 0, 0, + 0, 88, 51, 0, 0, 52, 53, 0, 0, 0, + 0, 0, 0, 0, 0, 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, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 0, 87, 0, 0, 0, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 0, 0, 77, + 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, + 84, 85, 0, 0, 0, 0, 0, 0, 29, 0, + 89, 0, 0, 47, 48, 49, 0, 86, 0, 50, + 0, 0, 88, 0, 51, 0, 0, 52, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 87, 0, 0, 0, 0, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 0, + 0, 77, 78, 79, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, + 82, 83, 84, 85, 0, 0, 0, 0, 0, 0, + 89, 0, 0, 47, 48, 49, 0, 268, 0, 50, + 0, 0, 88, 0, 51, 0, 0, 52, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 87, 0, 0, 0, 0, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 0, + 0, 77, 78, 79, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, + 82, 83, 84, 85, 0, 0, 0, 0, 0, 0, + 0, 89, 0, 0, 47, 48, 49, 0, 104, 0, + 50, 0, 0, 88, 0, 51, 0, 0, 52, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 87, 0, 0, 0, 0, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 0, 0, 77, 78, 79, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 82, 83, 84, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 48, 49, 0, 0, 0, + 50, 0, 0, 0, 0, 51, 0, 0, 52, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 32, 0, 0, 0, 0, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 0, 0, 77, 78, 79, 80, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 31, 0, 0, 0, + 81, 82, 83, 84, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 47, 48, 49, 0, 0, + 0, 50, 0, 0, 31, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 0, 0, 0, 0, 0, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 0, 0, 77, 78, 79, 80, 0, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 81, 82, 83, 84, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 7, 0, 8, 9, 6, 0, 0, 0, 0, + 0, 0, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 0, 0, 0, 0, 6, 7, + 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 23, 24, 0, 0, 25, 0, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 0, 28, 22, 0, 0, 29, 30, 0, + 23, 24, 0, 0, 25, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 0, 28, 0, 0, 0, 29, 30, 0, 0, 6, + 6, 0, 6, 6, 0, 0, 0, 0, 0, 0, + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 0, 0, 0, 0, + 0, 6, 6, 0, 0, 6, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 0, 6, 0, 0, 0, 6, 6, +}; +short yycheck[] = { 24, + 43, 119, 45, 28, 44, 30, 0, 260, 271, 272, + 94, 36, 4, 260, 59, 105, 86, 37, 59, 96, + 58, 43, 42, 45, 0, 37, 0, 47, 258, 101, + 42, 43, 24, 45, 99, 47, 0, 155, 30, 258, + 62, 35, 114, 58, 36, 40, 61, 41, 60, 346, + 62, 271, 272, 334, 41, 91, 43, 0, 45, 0, + 43, 86, 45, 88, 89, 135, 262, 41, 41, 0, + 44, 44, 41, 61, 94, 44, 101, 347, 348, 43, + 105, 45, 94, 59, 40, 59, 40, 334, 96, 114, + 353, 354, 0, 40, 0, 59, 115, 116, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 101, + 135, 364, 137, 138, 139, 40, 59, 93, 59, 93, + 112, 205, 114, 148, 149, 33, 40, 119, 59, 93, + 155, 40, 40, 353, 354, 41, 290, 45, 44, 43, + 44, 45, 232, 233, 214, 215, 236, 237, 40, 125, + 93, 125, 93, 59, 317, 318, 319, 320, 321, 40, + 0, 125, 93, 155, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 257, 40, 125, 91, 125, 40, 263, 93, 96, 214, + 215, 268, 349, 350, 125, 260, 261, 40, 268, 61, + 260, 0, 258, 0, 229, 0, 41, 232, 233, 234, + 24, 236, 237, 262, 41, 123, 30, 264, 258, 125, + 94, 301, 0, 300, 260, 46, 37, 257, 93, 0, + 125, 42, 43, 93, 45, 262, 47, 273, 274, 275, + 276, 277, 278, 268, 280, 262, 238, 239, 257, 257, + 41, 243, 41, 93, 44, 263, 41, 375, 41, 37, + 268, 304, 59, 41, 42, 43, 44, 45, 41, 47, + 41, 41, 86, 44, 286, 44, 44, 302, 41, 41, + 345, 59, 60, 94, 62, 125, 302, 101, 59, 347, + 264, 262, 91, 43, 44, 45, 93, 44, 93, 257, + 114, 303, 37, 43, 44, 45, 359, 42, 43, 44, + 45, 260, 47, 41, 41, 93, 290, 131, 132, 133, + 41, 41, 93, 344, 123, 60, 300, 62, 125, 303, + 125, 0, 262, 41, 344, 347, 348, 349, 350, 351, + 352, 155, 155, 30, 369, 370, 371, 125, 373, 257, + 258, 259, 260, 261, 125, 263, 35, 381, 264, 94, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 347, 348, 0, 344, 344, 403, -1, + -1, 406, 196, 375, 290, -1, 37, -1, -1, -1, + 204, 42, 43, 44, 45, -1, 47, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 60, + 0, 62, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, -1, 335, 336, 337, + 338, 339, 340, -1, 59, 343, -1, 345, -1, -1, + -1, 347, 348, 94, -1, 353, 354, 355, 356, 357, + 358, -1, 360, 43, 0, 45, 364, 365, 257, 258, + -1, 260, 261, -1, 0, 0, -1, 0, 93, 59, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, -1, 0, -1, -1, 264, 33, 302, 300, + -1, 37, 303, 264, 40, 41, 42, 43, 44, 45, + 125, 47, -1, 93, -1, -1, 41, -1, -1, 44, + -1, -1, 290, 59, 60, -1, 62, -1, -1, 290, + -1, -1, 300, 59, 59, 303, 59, -1, -1, 300, + -1, -1, 303, -1, 333, 125, -1, -1, -1, -1, + 339, 340, 59, 37, 343, -1, 345, 93, 42, 43, + 96, 45, -1, 47, -1, 369, 370, 93, 93, 358, + 93, 360, 0, -1, -1, 364, 365, -1, -1, 347, + 348, 349, 350, 351, 352, -1, 93, 348, -1, 125, + -1, -1, -1, -1, -1, 259, -1, -1, 262, 125, + 125, -1, 125, -1, -1, 33, -1, -1, -1, 37, + 94, -1, 40, 41, 42, 43, 44, 45, 125, 47, + -1, -1, 347, 348, 349, 350, 351, 352, -1, -1, + -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, + -1, 37, -1, -1, -1, -1, 42, 43, -1, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, 300, + -1, -1, 303, -1, 60, 93, 62, -1, 96, 37, + -1, -1, -1, -1, 42, 43, -1, 45, -1, 47, + 37, -1, 346, 347, -1, 42, 43, 44, 45, -1, + 47, -1, 60, -1, 62, -1, -1, 125, 94, -1, + -1, -1, -1, 60, -1, 62, 347, 348, 349, 350, + 351, 352, 376, -1, -1, 379, -1, -1, -1, -1, + -1, 257, 258, 259, 260, -1, 94, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 94, -1, 264, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 290, -1, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, 337, 338, -1, -1, 341, 342, -1, 344, -1, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, 348, -1, 361, 362, 363, 364, 257, + 258, 259, 260, -1, 91, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 96, -1, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, 260, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 0, -1, 335, 336, 337, + 338, 134, -1, 341, 342, -1, 344, 0, -1, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, -1, -1, 361, 362, 363, 364, -1, 33, -1, + -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, + 45, -1, 47, -1, 26, 351, 352, -1, 41, -1, + -1, 44, -1, -1, 59, 60, -1, 62, -1, -1, + 42, -1, -1, -1, -1, -1, 59, -1, -1, 347, + 348, 349, 350, 351, 352, -1, -1, -1, -1, -1, + 347, 348, 349, 350, 351, 352, 364, -1, 93, -1, + -1, 96, -1, 260, -1, -1, -1, -1, -1, -1, + 93, 268, -1, 0, -1, 87, 273, 274, 275, 276, + 277, 278, -1, 280, 0, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, 259, -1, -1, 262, + -1, -1, 125, 266, -1, -1, 33, -1, -1, -1, + 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, + 47, -1, -1, -1, -1, 41, -1, -1, 44, -1, + -1, -1, 59, 60, -1, 62, -1, -1, -1, -1, + -1, -1, -1, 59, -1, 157, -1, -1, -1, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, + 37, -1, -1, -1, -1, 42, 43, 93, 45, -1, + 47, 37, -1, 346, 347, -1, 42, 43, -1, 45, + -1, 47, -1, 60, -1, 62, -1, -1, 125, -1, + -1, -1, -1, -1, 60, -1, 62, -1, -1, 125, + -1, -1, -1, 376, -1, -1, 379, -1, -1, -1, + -1, -1, 257, 258, 259, 260, -1, 94, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 94, -1, + -1, 264, -1, -1, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, -1, 290, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, -1, -1, + 335, 336, 337, 338, -1, -1, 341, 342, -1, 344, + -1, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, -1, -1, 348, 361, 362, 363, 364, + 257, 258, 259, 260, -1, -1, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 358, -1, 264, -1, + 362, 363, 91, -1, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 290, -1, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 0, -1, 335, 336, + 337, 338, -1, -1, 341, 342, -1, 344, -1, -1, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, 348, 289, 361, 362, 363, 364, -1, 33, + -1, -1, -1, 37, -1, -1, 40, 41, 42, 43, + 44, 45, -1, 47, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 347, 348, 349, 350, 351, 352, -1, -1, -1, -1, + -1, 347, 348, 349, 350, 351, 352, -1, -1, 93, + 41, -1, 96, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, 59, -1, + 37, 260, -1, -1, -1, 42, 43, -1, 45, 268, + 47, 125, -1, -1, 273, 274, 275, 276, 277, 278, + -1, 280, -1, 60, -1, 62, -1, 33, -1, -1, + -1, 37, 93, -1, 40, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, -1, 62, 94, -1, -1, + -1, -1, -1, 37, 125, -1, -1, -1, 42, 43, + 37, 45, -1, 47, -1, 42, 43, -1, 45, -1, + 47, -1, -1, -1, -1, -1, 60, 93, 62, -1, + 96, 37, -1, 60, -1, 62, 42, 43, -1, 45, + -1, 47, -1, 37, -1, -1, -1, -1, 42, 43, + 44, 45, -1, 47, 60, -1, 62, -1, -1, 125, + 94, -1, -1, -1, -1, -1, 60, 94, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, 94, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, + 94, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, -1, -1, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 264, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, + -1, 335, 336, 337, 338, -1, -1, 341, 342, 290, + 344, -1, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 46, -1, -1, 361, 362, 363, + 364, 257, 258, 259, 260, -1, 46, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, -1, -1, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, 349, 350, 351, 352, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 0, -1, 335, + 336, 337, 338, -1, -1, 341, 342, -1, 344, -1, + -1, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, -1, -1, -1, 361, 362, 363, 364, -1, + 33, -1, -1, -1, -1, -1, 300, 40, 41, 303, + 43, 44, 45, 347, 348, 349, 350, 351, 352, -1, + 347, -1, 349, 350, 351, 352, 59, 60, -1, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 347, -1, 349, 350, 351, 352, -1, -1, -1, + -1, -1, -1, 347, 348, 349, 350, 351, 352, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, 271, + 272, -1, -1, -1, -1, 40, 41, -1, 43, 44, + 45, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, 60, -1, 62, -1, -1, + -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, 93, -1, + -1, 96, -1, 335, 336, 337, 338, -1, -1, -1, + -1, -1, -1, -1, -1, 335, 336, 337, 338, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, -1, + 125, -1, -1, 353, 354, 355, 356, 357, -1, -1, + -1, -1, -1, -1, -1, -1, 46, -1, -1, -1, + -1, -1, -1, 40, 257, 258, 259, 260, -1, 46, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, -1, -1, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + -1, -1, 335, 336, 337, 338, -1, -1, 341, 342, + -1, 344, -1, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, -1, -1, 361, 362, + 363, 364, 257, 258, 259, 260, -1, -1, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, + -1, -1, -1, -1, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, -1, -1, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 0, -1, + 335, 336, 337, 338, -1, -1, 341, 342, -1, 344, + -1, -1, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, -1, -1, -1, 361, 362, 363, 364, + 257, 33, -1, -1, -1, -1, 263, -1, 40, 41, + -1, 268, 44, -1, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, 60, -1, + 62, -1, -1, -1, -1, -1, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, 93, 0, -1, 96, 335, 336, 337, 338, -1, + -1, -1, -1, -1, -1, -1, 0, -1, 335, 336, + 337, 338, -1, 353, 354, 355, 356, 357, -1, -1, + -1, -1, -1, 125, -1, -1, 353, 354, 355, 356, + 357, -1, -1, 41, -1, -1, 44, -1, -1, 33, + -1, 86, -1, -1, -1, -1, 40, 41, -1, -1, + 44, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, 131, 132, 133, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + 155, -1, -1, -1, -1, 37, -1, 125, -1, -1, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, 60, -1, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 196, -1, -1, -1, 257, 258, 259, 260, 204, + -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, -1, 94, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, -1, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, 335, 336, 337, 338, -1, -1, 341, + 342, -1, 344, -1, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 264, 302, -1, 361, + 362, 363, 364, 257, 258, 259, 260, -1, -1, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, 0, 290, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, -1, -1, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, 369, 370, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 0, + 59, 335, 336, 337, 338, -1, -1, 341, 342, -1, + 344, -1, -1, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, -1, -1, 361, 362, 363, + 364, -1, 33, -1, 93, -1, -1, 96, 300, 40, + 41, 303, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, + -1, 62, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 347, 348, 349, 350, 351, + 352, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 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, 257, -1, + 93, -1, -1, 96, 263, -1, -1, -1, -1, 268, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, 300, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, + -1, -1, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + -1, -1, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, -1, -1, 335, 336, 337, 338, -1, -1, + 341, 342, -1, 344, -1, -1, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, -1, -1, + 361, 362, 363, 364, 257, 258, 259, 260, -1, -1, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + -1, -1, 0, -1, -1, -1, -1, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, -1, -1, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 0, 59, 335, 336, 337, 338, -1, -1, 341, 342, + -1, 344, -1, -1, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, -1, -1, -1, 361, 362, + 363, 364, -1, 33, -1, 93, -1, -1, 96, -1, + 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, 62, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + -1, 93, -1, -1, 96, 263, -1, -1, -1, -1, + 268, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, 300, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, -1, -1, 335, 336, 337, 338, -1, + -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 353, 354, 355, 356, 357, -1, -1, + -1, 361, 362, 363, 364, 257, 258, 259, 260, -1, + -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, -1, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 0, -1, 335, 336, 337, 338, -1, -1, 341, + 342, -1, 344, -1, -1, 347, 348, 349, 350, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, 361, + 362, 363, 364, -1, 33, -1, -1, -1, -1, -1, + -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -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, 59, -1, + -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, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, -1, -1, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, -1, -1, 335, 336, 337, 338, + -1, -1, 341, 342, -1, 344, -1, -1, 347, 348, + 349, 350, -1, -1, 353, 354, 355, 356, 357, -1, + -1, -1, 361, 362, 363, 364, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 0, -1, 335, 336, 337, 338, -1, -1, + 341, 342, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 353, 354, 355, 356, 357, -1, -1, -1, + 361, 362, 363, 364, -1, 33, -1, -1, -1, -1, + -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, -1, -1, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, -1, -1, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, 335, 336, 337, + 338, -1, -1, 341, 342, -1, 344, -1, -1, 347, + 348, -1, -1, -1, -1, 353, 354, 355, 356, 357, + -1, -1, -1, 361, 362, 363, 364, 257, 258, 259, + 260, -1, -1, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, -1, -1, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 0, -1, 335, 336, 337, 338, -1, + -1, 341, 342, -1, 344, -1, -1, -1, 348, -1, + -1, -1, -1, 353, 354, 355, 356, 357, -1, -1, + -1, 361, 362, 363, 364, -1, 33, -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, 59, -1, -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, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, + -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -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, -1, -1, 96, -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, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, -1, -1, -1, -1, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, -1, -1, 335, 336, + 337, 338, -1, -1, 341, 342, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 353, 354, 355, 356, + 357, -1, -1, -1, 361, 362, 363, 364, 257, 258, + 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, + 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, -1, -1, -1, -1, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 0, -1, 335, 336, 337, 338, + -1, -1, 341, 342, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 353, 354, 355, 356, 357, -1, + -1, -1, 361, 362, 363, 364, -1, 33, -1, -1, + -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -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, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, -1, -1, -1, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, 337, 338, -1, -1, 341, 342, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 353, 354, 355, + 356, 357, -1, -1, -1, 361, 362, 363, 364, 257, + 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 0, -1, -1, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 33, -1, 335, 336, 337, + 338, -1, 40, 341, 342, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 353, 354, 355, 356, 357, + -1, 59, -1, 361, 362, 363, 364, -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, -1, -1, 96, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, -1, -1, -1, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, 335, 336, 337, + 338, -1, -1, 341, 342, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 353, 354, 355, 356, 357, + -1, -1, -1, 361, 362, 363, 364, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 0, -1, -1, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 33, -1, 335, 336, 337, 338, -1, + 40, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 353, 354, 355, 356, 357, -1, 59, + -1, 361, 362, 363, 364, -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, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, -1, -1, 335, 336, 337, 338, -1, + -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 353, 354, 355, 356, 357, -1, -1, + -1, 361, 362, 363, 364, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 0, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 33, -1, 335, 336, 337, 338, -1, 40, 341, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, 59, -1, 361, + 362, 363, 364, -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, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, 335, 336, 337, 338, -1, -1, 341, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, 361, + 362, 363, 364, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 0, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 33, + -1, 335, 336, 337, 338, -1, 40, 341, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, + 354, 355, 356, 357, -1, 59, -1, 361, 362, 363, + 364, -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, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -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, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, + -1, 335, 336, 337, 338, -1, -1, 341, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, + 354, 355, 356, 357, -1, -1, -1, 361, 362, 363, + 364, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 0, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 33, -1, 335, + 336, 337, 338, -1, 40, 341, 342, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 353, 354, 355, + 356, 357, -1, 59, -1, 361, 362, 363, 364, -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, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -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, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, 337, 338, -1, -1, 341, 342, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 353, 354, 355, + 356, 357, -1, -1, -1, 361, 362, 363, 364, 257, + 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 0, -1, -1, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 33, -1, 335, 336, 337, + 338, -1, 40, 341, 342, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 353, 354, 355, 356, 357, + -1, 59, -1, 361, 362, 363, 364, -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, -1, -1, 96, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, -1, -1, -1, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, -1, -1, 335, 336, 337, + 338, -1, -1, 341, 342, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 353, 354, 355, 356, 357, + -1, -1, -1, 361, 362, 363, 364, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 0, -1, -1, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 33, -1, 335, 336, 337, 338, -1, + 40, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 353, 354, 355, 356, 357, -1, 59, + -1, 361, 362, 363, 364, -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, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, -1, -1, 335, 336, 337, 338, -1, + -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 353, 354, 355, 356, 357, -1, -1, + -1, 361, 362, 363, 364, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 0, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 33, -1, 335, 336, 337, 338, -1, 40, 341, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, 59, -1, 361, + 362, 363, 364, -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, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -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, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, 335, 336, 337, 338, -1, -1, 341, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, 361, + 362, 363, 364, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 0, + -1, 335, 336, 337, 338, -1, -1, 341, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, + 354, 355, 356, 357, -1, -1, -1, 361, 362, 363, + 364, -1, 33, -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, 59, -1, + -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, 0, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, 125, 40, 41, -1, 0, 44, + 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, 33, -1, -1, -1, -1, -1, -1, 40, 41, + -1, -1, 44, -1, -1, -1, -1, -1, 93, -1, + -1, 96, -1, -1, -1, -1, -1, 59, 60, -1, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, 96, -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, 125, -1, -1, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 0, + -1, -1, -1, 304, 305, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 33, -1, -1, -1, -1, -1, -1, 40, + 341, 342, 257, 258, 259, 260, -1, -1, 263, -1, + 265, 266, 267, 268, 269, 270, -1, -1, 59, -1, + 361, 362, 363, 364, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 257, 258, 259, 260, -1, + 305, 263, 93, -1, -1, 96, 268, -1, -1, 271, + 272, -1, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, -1, -1, + -1, -1, -1, -1, 125, -1, 341, 342, 0, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, 361, 362, 363, 364, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 33, -1, 335, 336, 337, 338, -1, 40, -1, + -1, -1, -1, -1, -1, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, -1, 59, -1, -1, + -1, -1, 364, -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, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, 257, 258, 259, 260, + -1, -1, 263, -1, -1, -1, -1, 268, -1, -1, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 93, -1, 335, 336, 337, 338, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 353, 354, 355, 356, 357, -1, -1, -1, + -1, -1, -1, 364, 125, -1, -1, -1, 0, -1, + -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, + 272, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 93, -1, 335, 336, 337, 338, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, 0, + -1, -1, 364, 125, -1, -1, -1, -1, -1, 260, + -1, -1, -1, -1, 265, 266, 267, -1, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 260, -1, -1, -1, -1, 265, 266, 267, 59, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 341, 342, 93, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 361, 362, 363, 364, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, 341, 342, -1, -1, -1, -1, -1, 260, -1, + -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, + 272, 361, 362, 363, 364, -1, -1, -1, 59, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, -1, + -1, -1, -1, -1, 0, -1, 0, -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, -1, -1, -1, -1, -1, -1, -1, 341, + 342, -1, -1, -1, 125, -1, -1, -1, -1, 43, + -1, 45, 46, -1, -1, -1, -1, -1, -1, 361, + 362, 363, 364, 59, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + -1, -1, -1, -1, 265, 266, 267, -1, 269, 270, + 271, 272, -1, -1, -1, -1, -1, 93, -1, 93, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 125, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 341, 342, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, + 361, 362, 363, 364, 265, 266, 267, 59, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + 341, 342, -1, -1, 260, -1, -1, -1, -1, 265, + 266, 267, -1, 269, 270, 271, 272, 271, 272, -1, + 361, 362, 363, 364, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 59, -1, -1, -1, -1, -1, + -1, -1, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, 335, 336, 337, 338, 341, 342, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, + 354, 355, 356, 357, -1, 361, 362, 363, 364, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, + -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, 341, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, 361, + 362, 363, 364, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, + 265, 266, 267, -1, 269, 270, 271, 272, -1, -1, + -1, 93, -1, -1, 96, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, + 45, -1, -1, -1, -1, -1, 341, 342, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 361, 362, 363, 364, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, + -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 123, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, -1, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, 335, 336, 337, 338, -1, -1, 341, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, 361, + 362, 363, 257, 258, 259, 260, 261, -1, 263, -1, + -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, + 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, -1, + 335, 336, 337, 338, 339, 340, 91, -1, 343, -1, + 345, 96, -1, -1, -1, -1, -1, -1, 353, 354, + 355, 356, 357, 358, -1, 360, -1, -1, -1, 364, + 365, -1, -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, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -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, -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, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, 261, -1, 263, -1, + -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 33, -1, -1, -1, + -1, -1, -1, 40, 41, -1, -1, -1, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, -1, + 335, 336, 337, 338, 339, 340, -1, -1, 343, 96, + 345, -1, -1, -1, -1, -1, -1, -1, 353, 354, + 355, 356, 357, 358, -1, 360, -1, -1, -1, 364, + 365, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, 337, 338, -1, 33, 341, 342, -1, -1, -1, + -1, 40, -1, -1, -1, -1, 45, 353, 354, 355, + 356, 357, -1, -1, -1, 361, 362, 363, 364, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, -1, -1, 263, 96, -1, -1, + -1, 268, -1, -1, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 33, -1, 335, 336, + 337, 338, -1, 40, -1, -1, -1, -1, 45, -1, + -1, -1, -1, -1, -1, -1, 353, 354, 355, 356, + 357, -1, -1, -1, -1, -1, -1, 364, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, + -1, -1, 271, 272, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -1, 45, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, -1, -1, 335, 336, 337, 338, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 353, 354, 355, 356, 357, -1, + -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + 257, 258, 259, 260, 40, -1, 263, -1, -1, 45, + -1, 268, -1, -1, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 96, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, -1, -1, 335, 336, + 337, 338, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 353, 354, 355, 356, + 357, -1, -1, -1, -1, -1, -1, 364, -1, 33, + -1, 257, 258, 259, 260, -1, 40, 263, 42, -1, + -1, 45, 268, -1, -1, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, 96, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, 337, 338, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 353, 354, 355, + 356, 357, -1, -1, -1, -1, -1, -1, 364, 33, + -1, 257, 258, 259, 260, -1, 40, 263, -1, -1, + -1, 45, 268, -1, -1, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, 96, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, -1, -1, 335, + 336, 337, 338, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 353, 354, 355, + 356, 357, -1, -1, -1, -1, -1, -1, 364, -1, + 33, -1, -1, 257, 258, 259, -1, 40, -1, 263, + -1, -1, 45, -1, 268, -1, -1, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 96, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, + -1, 335, 336, 337, 338, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, + 354, 355, 356, 357, -1, -1, -1, -1, -1, -1, + 33, -1, -1, 257, 258, 259, -1, 40, -1, 263, + -1, -1, 45, -1, 268, -1, -1, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 96, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, -1, + -1, 335, 336, 337, 338, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 353, + 354, 355, 356, 357, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, 257, 258, 259, -1, 40, -1, + 263, -1, -1, 45, -1, 268, -1, -1, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 96, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + -1, -1, 335, 336, 337, 338, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 353, 354, 355, 356, 357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, -1, -1, -1, + 263, -1, -1, -1, -1, 268, -1, -1, 271, 272, + -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, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 91, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + -1, -1, 335, 336, 337, 338, -1, -1, -1, -1, + -1, -1, 91, -1, -1, -1, 123, -1, -1, -1, + 353, 354, 355, 356, 357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, -1, -1, + -1, 263, -1, -1, 123, -1, 268, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, -1, 335, 336, 337, 338, -1, -1, -1, + -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, + -1, 353, 354, 355, 356, 357, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, -1, 260, 261, 123, -1, -1, -1, -1, + -1, -1, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, -1, -1, -1, -1, 257, 258, + -1, 260, 261, -1, -1, -1, -1, -1, -1, -1, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, -1, + -1, -1, 339, 340, -1, -1, 343, -1, 345, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 358, -1, 360, 333, -1, -1, 364, 365, -1, + 339, 340, -1, -1, 343, -1, 345, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 358, + -1, 360, -1, -1, -1, 364, 365, -1, -1, 257, + 258, -1, 260, 261, -1, -1, -1, -1, -1, -1, + -1, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 333, -1, -1, -1, -1, + -1, 339, 340, -1, -1, 343, -1, 345, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 358, -1, 360, -1, -1, -1, 364, 365, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 367 +#if YYDEBUG +char *yyname[] = { +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0, +0,0,0,0,0,"':'","';'","'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,"'['",0,"']'","'^'",0,"'`'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"LABEL","VARIABLE","NUMBER", +"TEXT","COMMAND_LINE","DELIMITED","ORDINAL","TH","LEFT_ARROW_HEAD", +"RIGHT_ARROW_HEAD","DOUBLE_ARROW_HEAD","LAST","UP","DOWN","LEFT","RIGHT","BOX", +"CIRCLE","ELLIPSE","ARC","LINE","ARROW","MOVE","SPLINE","HEIGHT","RADIUS", +"WIDTH","DIAMETER","FROM","TO","AT","WITH","BY","THEN","DOTTED","DASHED","CHOP", +"SAME","INVISIBLE","LJUST","RJUST","ABOVE","BELOW","OF","THE","WAY","BETWEEN", +"AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S","DOT_NE","DOT_SE","DOT_NW", +"DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X","DOT_Y","DOT_HT","DOT_WID", +"DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT","K_MAX","K_MIN","INT","RAND", +"SRAND","COPY","THRU","TOP","BOTTOM","UPPER","LOWER","SH","PRINT","CW","CCW", +"FOR","DO","IF","ELSE","ANDAND","OROR","NOTEQUAL","EQUALEQUAL","LESSEQUAL", +"GREATEREQUAL","LEFT_CORNER","RIGHT_CORNER","CENTER","END","START","RESET", +"UNTIL","PLOT","THICKNESS","FILL","ALIGNED","SPRINTF","COMMAND","DEFINE", +"UNDEF", +}; +char *yyrule[] = { +"$accept : top", +"top : optional_separator", +"top : element_list", +"element_list : optional_separator middle_element_list optional_separator", +"middle_element_list : element", +"middle_element_list : middle_element_list separator element", +"optional_separator :", +"optional_separator : separator", +"separator : ';'", +"separator : separator ';'", +"placeless_element : VARIABLE '=' any_expr", +"placeless_element : VARIABLE ':' '=' any_expr", +"placeless_element : UP", +"placeless_element : DOWN", +"placeless_element : LEFT", +"placeless_element : RIGHT", +"placeless_element : COMMAND_LINE", +"placeless_element : COMMAND print_args", +"placeless_element : PRINT print_args", +"$$1 :", +"placeless_element : SH $$1 DELIMITED", +"placeless_element : COPY TEXT", +"$$2 :", +"$$3 :", +"placeless_element : COPY TEXT THRU $$2 DELIMITED $$3 until", +"$$4 :", +"$$5 :", +"placeless_element : COPY THRU $$4 DELIMITED $$5 until", +"$$6 :", +"placeless_element : FOR VARIABLE '=' expr TO expr optional_by DO $$6 DELIMITED", +"placeless_element : simple_if", +"$$7 :", +"placeless_element : simple_if ELSE $$7 DELIMITED", +"placeless_element : reset_variables", +"placeless_element : RESET", +"reset_variables : RESET VARIABLE", +"reset_variables : reset_variables VARIABLE", +"reset_variables : reset_variables ',' VARIABLE", +"print_args : print_arg", +"print_args : print_args print_arg", +"print_arg : expr", +"print_arg : text", +"print_arg : position", +"$$8 :", +"simple_if : IF any_expr THEN $$8 DELIMITED", +"until :", +"until : UNTIL TEXT", +"any_expr : expr", +"any_expr : text_expr", +"text_expr : text EQUALEQUAL text", +"text_expr : text NOTEQUAL text", +"text_expr : text_expr ANDAND text_expr", +"text_expr : text_expr ANDAND expr", +"text_expr : expr ANDAND text_expr", +"text_expr : text_expr OROR text_expr", +"text_expr : text_expr OROR expr", +"text_expr : expr OROR text_expr", +"text_expr : '!' text_expr", +"optional_by :", +"optional_by : BY expr", +"optional_by : BY '*' expr", +"element : object_spec", +"element : LABEL ':' optional_separator element", +"element : LABEL ':' optional_separator position_not_place", +"element : LABEL ':' optional_separator place", +"$$9 :", +"$$10 :", +"element : '{' $$9 element_list '}' $$10 optional_element", +"element : placeless_element", +"optional_element :", +"optional_element : element", +"object_spec : BOX", +"object_spec : CIRCLE", +"object_spec : ELLIPSE", +"object_spec : ARC", +"object_spec : LINE", +"object_spec : ARROW", +"object_spec : MOVE", +"object_spec : SPLINE", +"object_spec : text", +"object_spec : PLOT expr", +"object_spec : PLOT expr text", +"$$11 :", +"object_spec : '[' $$11 element_list ']'", +"object_spec : object_spec HEIGHT expr", +"object_spec : object_spec RADIUS expr", +"object_spec : object_spec WIDTH expr", +"object_spec : object_spec DIAMETER expr", +"object_spec : object_spec expr", +"object_spec : object_spec UP", +"object_spec : object_spec UP expr", +"object_spec : object_spec DOWN", +"object_spec : object_spec DOWN expr", +"object_spec : object_spec RIGHT", +"object_spec : object_spec RIGHT expr", +"object_spec : object_spec LEFT", +"object_spec : object_spec LEFT expr", +"object_spec : object_spec FROM position", +"object_spec : object_spec TO position", +"object_spec : object_spec AT position", +"object_spec : object_spec WITH path", +"object_spec : object_spec BY expr_pair", +"object_spec : object_spec THEN", +"object_spec : object_spec DOTTED", +"object_spec : object_spec DOTTED expr", +"object_spec : object_spec DASHED", +"object_spec : object_spec DASHED expr", +"object_spec : object_spec FILL", +"object_spec : object_spec FILL expr", +"object_spec : object_spec CHOP", +"object_spec : object_spec CHOP expr", +"object_spec : object_spec SAME", +"object_spec : object_spec INVISIBLE", +"object_spec : object_spec LEFT_ARROW_HEAD", +"object_spec : object_spec RIGHT_ARROW_HEAD", +"object_spec : object_spec DOUBLE_ARROW_HEAD", +"object_spec : object_spec CW", +"object_spec : object_spec CCW", +"object_spec : object_spec text", +"object_spec : object_spec LJUST", +"object_spec : object_spec RJUST", +"object_spec : object_spec ABOVE", +"object_spec : object_spec BELOW", +"object_spec : object_spec THICKNESS expr", +"object_spec : object_spec ALIGNED", +"text : TEXT", +"text : SPRINTF '(' TEXT sprintf_args ')'", +"sprintf_args :", +"sprintf_args : sprintf_args ',' expr", +"position : position_not_place", +"position : place", +"position_not_place : expr_pair", +"position_not_place : position '+' expr_pair", +"position_not_place : position '-' expr_pair", +"position_not_place : '(' position ',' position ')'", +"position_not_place : expr between position AND position", +"position_not_place : expr '<' position ',' position '>'", +"between : BETWEEN", +"between : OF THE WAY BETWEEN", +"expr_pair : expr ',' expr", +"expr_pair : '(' expr_pair ')'", +"place : label", +"place : label corner", +"place : corner label", +"place : corner OF label", +"place : HERE", +"label : LABEL", +"label : nth_primitive", +"label : label '.' LABEL", +"ordinal : ORDINAL", +"ordinal : '`' any_expr TH", +"optional_ordinal_last : LAST", +"optional_ordinal_last : ordinal LAST", +"nth_primitive : ordinal object_type", +"nth_primitive : optional_ordinal_last object_type", +"object_type : BOX", +"object_type : CIRCLE", +"object_type : ELLIPSE", +"object_type : ARC", +"object_type : LINE", +"object_type : ARROW", +"object_type : SPLINE", +"object_type : '[' ']'", +"object_type : TEXT", +"label_path : '.' LABEL", +"label_path : label_path '.' LABEL", +"relative_path : corner", +"relative_path : label_path", +"relative_path : label_path corner", +"path : relative_path", +"path : '(' relative_path ',' relative_path ')'", +"path : ORDINAL LAST object_type relative_path", +"path : LAST object_type relative_path", +"path : ORDINAL object_type relative_path", +"path : LABEL relative_path", +"corner : DOT_N", +"corner : DOT_E", +"corner : DOT_W", +"corner : DOT_S", +"corner : DOT_NE", +"corner : DOT_SE", +"corner : DOT_NW", +"corner : DOT_SW", +"corner : DOT_C", +"corner : DOT_START", +"corner : DOT_END", +"corner : TOP", +"corner : BOTTOM", +"corner : LEFT", +"corner : RIGHT", +"corner : UPPER LEFT", +"corner : LOWER LEFT", +"corner : UPPER RIGHT", +"corner : LOWER RIGHT", +"corner : LEFT_CORNER", +"corner : RIGHT_CORNER", +"corner : UPPER LEFT_CORNER", +"corner : LOWER LEFT_CORNER", +"corner : UPPER RIGHT_CORNER", +"corner : LOWER RIGHT_CORNER", +"corner : CENTER", +"corner : START", +"corner : END", +"expr : VARIABLE", +"expr : NUMBER", +"expr : place DOT_X", +"expr : place DOT_Y", +"expr : place DOT_HT", +"expr : place DOT_WID", +"expr : place DOT_RAD", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '^' expr", +"expr : '-' expr", +"expr : '(' any_expr ')'", +"expr : SIN '(' any_expr ')'", +"expr : COS '(' any_expr ')'", +"expr : ATAN2 '(' any_expr ',' any_expr ')'", +"expr : LOG '(' any_expr ')'", +"expr : EXP '(' any_expr ')'", +"expr : SQRT '(' any_expr ')'", +"expr : K_MAX '(' any_expr ',' any_expr ')'", +"expr : K_MIN '(' any_expr ',' any_expr ')'", +"expr : INT '(' any_expr ')'", +"expr : RAND '(' any_expr ')'", +"expr : RAND '(' ')'", +"expr : SRAND '(' any_expr ')'", +"expr : expr '<' expr", +"expr : expr LESSEQUAL expr", +"expr : expr '>' expr", +"expr : expr GREATEREQUAL expr", +"expr : expr EQUALEQUAL expr", +"expr : expr NOTEQUAL expr", +"expr : expr ANDAND expr", +"expr : expr OROR expr", +"expr : '!' expr", +}; +#endif +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 500 +#define YYMAXDEPTH 500 +#endif +#endif +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; +YYSTYPE *yyvsp; +YYSTYPE yyval; +YYSTYPE yylval; +short yyss[YYSTACKSIZE]; +YYSTYPE yyvs[YYSTACKSIZE]; +#define yystacksize YYSTACKSIZE +#line 1537 "/home/cjk/groff/pic/pic.y" + +/* bison defines const to be empty unless __STDC__ is defined, which it +isn't under cfront */ + +#ifdef const +#undef const +#endif + +static struct { + const char *name; + double val; + int scaled; // non-zero if val should be multiplied by scale +} defaults_table[] = { + { "arcrad", .25, 1 }, + { "arrowht", .1, 1 }, + { "arrowwid", .05, 1 }, + { "circlerad", .25, 1 }, + { "boxht", .5, 1 }, + { "boxwid", .75, 1 }, + { "boxrad", 0.0, 1 }, + { "dashwid", .05, 1 }, + { "ellipseht", .5, 1 }, + { "ellipsewid", .75, 1 }, + { "moveht", .5, 1 }, + { "movewid", .5, 1 }, + { "lineht", .5, 1 }, + { "linewid", .5, 1 }, + { "textht", 0.0, 1 }, + { "textwid", 0.0, 1 }, + { "scale", 1.0, 0 }, + { "linethick", -1.0, 0 }, // in points + { "fillval", .5, 0 }, + { "arrowhead", 1.0, 0 }, + { "maxpswid", 8.5, 0 }, + { "maxpsht", 11.0, 0 }, +}; + +place *lookup_label(const char *label) +{ + saved_state *state = current_saved_state; + PTABLE(place) *tbl = current_table; + for (;;) { + place *pl = tbl->lookup(label); + if (pl) + return pl; + if (!state) + return 0; + tbl = state->tbl; + state = state->prev; + } +} + +void define_label(const char *label, const place *pl) +{ + place *p = new place; + *p = *pl; + current_table->define(label, p); +} + +int lookup_variable(const char *name, double *val) +{ + place *pl = lookup_label(name); + if (pl) { + *val = pl->x; + return 1; + } + return 0; +} + +void define_variable(const char *name, double val) +{ + place *p = new place; + p->obj = 0; + p->x = val; + p->y = 0.0; + current_table->define(name, p); + if (strcmp(name, "scale") == 0) { + // When the scale changes, reset all scaled pre-defined variables to + // their default values. + for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) + if (defaults_table[i].scaled) + define_variable(defaults_table[i].name, val*defaults_table[i].val); + } +} + +// called once only (not once per parse) + +void parse_init() +{ + current_direction = RIGHT_DIRECTION; + current_position.x = 0.0; + current_position.y = 0.0; + // This resets everything to its default value. + reset_all(); +} + +void reset(const char *nm) +{ + for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) + if (strcmp(nm, defaults_table[i].name) == 0) { + double val = defaults_table[i].val; + if (defaults_table[i].scaled) { + double scale; + lookup_variable("scale", &scale); + val *= scale; + } + define_variable(defaults_table[i].name, val); + return; + } + lex_error("`%1' is not a predefined variable", nm); +} + +void reset_all() +{ + // We only have to explicitly reset the pre-defined variables that + // aren't scaled because `scale' is not scaled, and changing the + // value of `scale' will reset all the pre-defined variables that + // are scaled. + for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) + if (!defaults_table[i].scaled) + define_variable(defaults_table[i].name, defaults_table[i].val); +} + +// called after each parse + +void parse_cleanup() +{ + while (current_saved_state != 0) { + delete current_table; + current_table = current_saved_state->tbl; + saved_state *tem = current_saved_state; + current_saved_state = current_saved_state->prev; + delete tem; + } + assert(current_table == &top_table); + PTABLE_ITERATOR(place) iter(current_table); + const char *key; + place *pl; + while (iter.next(&key, &pl)) + if (pl->obj != 0) { + position pos = pl->obj->origin(); + pl->obj = 0; + pl->x = pos.x; + pl->y = pos.y; + } + while (olist.head != 0) { + object *tem = olist.head; + olist.head = olist.head->next; + delete tem; + } + olist.tail = 0; + current_direction = RIGHT_DIRECTION; + current_position.x = 0.0; + current_position.y = 0.0; +} + +const char *ordinal_postfix(int n) +{ + if (n < 10 || n > 20) + switch (n % 10) { + case 1: + return "st"; + case 2: + return "nd"; + case 3: + return "rd"; + } + return "th"; +} + +const char *object_type_name(object_type type) +{ + switch (type) { + case BOX_OBJECT: + return "box"; + case CIRCLE_OBJECT: + return "circle"; + case ELLIPSE_OBJECT: + return "ellipse"; + case ARC_OBJECT: + return "arc"; + case SPLINE_OBJECT: + return "spline"; + case LINE_OBJECT: + return "line"; + case ARROW_OBJECT: + return "arrow"; + case MOVE_OBJECT: + return "move"; + case TEXT_OBJECT: + return "\"\""; + case BLOCK_OBJECT: + return "[]"; + case OTHER_OBJECT: + case MARK_OBJECT: + default: + break; + } + return "object"; +} + +static char sprintf_buf[1024]; + +char *format_number(const char *form, double n) +{ + if (form == 0) + form = "%g"; + else { + // this is a fairly feeble attempt at validation of the format + int nspecs = 0; + for (const char *p = form; *p != '\0'; p++) + if (*p == '%') { + if (p[1] == '%') + p++; + else + nspecs++; + } + if (nspecs > 1) { + lex_error("bad format `%1'", form); + return strsave(form); + } + } + sprintf(sprintf_buf, form, n); + return strsave(sprintf_buf); +} + +char *do_sprintf(const char *form, const double *v, int nv) +{ + string result; + int i = 0; + string one_format; + while (*form) { + if (*form == '%') { + one_format += *form++; + for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++) + one_format += *form; + if (*form == '\0' || strchr("eEfgG%", *form) == 0) { + lex_error("bad sprintf format"); + result += one_format; + result += form; + break; + } + if (*form == '%') { + one_format += *form++; + one_format += '\0'; + sprintf(sprintf_buf, one_format.contents()); + } + else { + if (i >= nv) { + lex_error("too few arguments to sprintf"); + result += one_format; + result += form; + break; + } + one_format += *form++; + one_format += '\0'; + sprintf(sprintf_buf, one_format.contents(), v[i++]); + } + one_format.clear(); + result += sprintf_buf; + } + else + result += *form++; + } + result += '\0'; + return strsave(result.contents()); +} +#line 3419 "y.tab.c" +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab +int +#if defined(__STDC__) +yyparse(void) +#else +yyparse() +#endif +{ + register int yym, yyn, yystate; +#if YYDEBUG + register char *yys; + extern char *getenv(); + + if (yys = getenv("YYDEBUG")) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = (-1); + + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + yychar = (-1); + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + yyerror("syntax error"); +#ifdef lint + goto yyerrlab; +#endif +yyerrlab: + ++yynerrs; +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); +#endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yyssp); +#endif + if (yyssp <= yyss) goto yyabort; + --yyssp; + --yyvsp; + } + } + } + else + { + if (yychar == 0) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = (-1); + goto yyloop; + } +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + yyval = yyvsp[1-yym]; + switch (yyn) + { +case 2: +#line 278 "/home/cjk/groff/pic/pic.y" +{ + if (olist.head) + print_picture(olist.head); + } +break; +case 3: +#line 287 "/home/cjk/groff/pic/pic.y" +{ yyval.pl = yyvsp[-1].pl; } +break; +case 4: +#line 292 "/home/cjk/groff/pic/pic.y" +{ yyval.pl = yyvsp[0].pl; } +break; +case 5: +#line 294 "/home/cjk/groff/pic/pic.y" +{ yyval.pl = yyvsp[-2].pl; } +break; +case 10: +#line 309 "/home/cjk/groff/pic/pic.y" +{ + define_variable(yyvsp[-2].str, yyvsp[0].x); + a_delete yyvsp[-2].str; + } +break; +case 11: +#line 314 "/home/cjk/groff/pic/pic.y" +{ + place *p = lookup_label(yyvsp[-3].str); + if (!p) { + lex_error("variable `%1' not defined", yyvsp[-3].str); + YYABORT; + } + p->obj = 0; + p->x = yyvsp[0].x; + p->y = 0.0; + a_delete yyvsp[-3].str; + } +break; +case 12: +#line 326 "/home/cjk/groff/pic/pic.y" +{ current_direction = UP_DIRECTION; } +break; +case 13: +#line 328 "/home/cjk/groff/pic/pic.y" +{ current_direction = DOWN_DIRECTION; } +break; +case 14: +#line 330 "/home/cjk/groff/pic/pic.y" +{ current_direction = LEFT_DIRECTION; } +break; +case 15: +#line 332 "/home/cjk/groff/pic/pic.y" +{ current_direction = RIGHT_DIRECTION; } +break; +case 16: +#line 334 "/home/cjk/groff/pic/pic.y" +{ + olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, + yyvsp[0].lstr.lineno)); + } +break; +case 17: +#line 339 "/home/cjk/groff/pic/pic.y" +{ + olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, + yyvsp[0].lstr.lineno)); + } +break; +case 18: +#line 344 "/home/cjk/groff/pic/pic.y" +{ + fprintf(stderr, "%s\n", yyvsp[0].lstr.str); + a_delete yyvsp[0].lstr.str; + fflush(stderr); + } +break; +case 19: +#line 350 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 20: +#line 352 "/home/cjk/groff/pic/pic.y" +{ + delim_flag = 0; + if (safer_flag) + lex_error("unsafe to run command `%1'", yyvsp[0].str); + else + system(yyvsp[0].str); + a_delete yyvsp[0].str; + } +break; +case 21: +#line 361 "/home/cjk/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + do_copy(yyvsp[0].lstr.str); + /* do not delete the filename*/ + } +break; +case 22: +#line 368 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 2; } +break; +case 23: +#line 370 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 0; } +break; +case 24: +#line 372 "/home/cjk/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + copy_file_thru(yyvsp[-5].lstr.str, yyvsp[-2].str, yyvsp[0].str); + /* do not delete the filename*/ + a_delete yyvsp[-2].str; + a_delete yyvsp[0].str; + } +break; +case 25: +#line 381 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 2; } +break; +case 26: +#line 383 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 0; } +break; +case 27: +#line 385 "/home/cjk/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + copy_rest_thru(yyvsp[-2].str, yyvsp[0].str); + a_delete yyvsp[-2].str; + a_delete yyvsp[0].str; + } +break; +case 28: +#line 393 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 29: +#line 395 "/home/cjk/groff/pic/pic.y" +{ + delim_flag = 0; + if (yychar < 0) + do_lookahead(); + do_for(yyvsp[-8].str, yyvsp[-6].x, yyvsp[-4].x, yyvsp[-3].by.is_multiplicative, yyvsp[-3].by.val, yyvsp[0].str); + } +break; +case 30: +#line 402 "/home/cjk/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + if (yyvsp[0].if_data.x != 0.0) + push_body(yyvsp[0].if_data.body); + a_delete yyvsp[0].if_data.body; + } +break; +case 31: +#line 410 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 32: +#line 412 "/home/cjk/groff/pic/pic.y" +{ + delim_flag = 0; + if (yychar < 0) + do_lookahead(); + if (yyvsp[-3].if_data.x != 0.0) + push_body(yyvsp[-3].if_data.body); + else + push_body(yyvsp[0].str); + a_delete yyvsp[-3].if_data.body; + a_delete yyvsp[0].str; + } +break; +case 34: +#line 425 "/home/cjk/groff/pic/pic.y" +{ define_variable("scale", 1.0); } +break; +case 35: +#line 430 "/home/cjk/groff/pic/pic.y" +{ reset(yyvsp[0].str); a_delete yyvsp[0].str; } +break; +case 36: +#line 432 "/home/cjk/groff/pic/pic.y" +{ reset(yyvsp[0].str); a_delete yyvsp[0].str; } +break; +case 37: +#line 434 "/home/cjk/groff/pic/pic.y" +{ reset(yyvsp[0].str); a_delete yyvsp[0].str; } +break; +case 38: +#line 439 "/home/cjk/groff/pic/pic.y" +{ yyval.lstr = yyvsp[0].lstr; } +break; +case 39: +#line 441 "/home/cjk/groff/pic/pic.y" +{ + yyval.lstr.str = new char[strlen(yyvsp[-1].lstr.str) + strlen(yyvsp[0].lstr.str) + 1]; + strcpy(yyval.lstr.str, yyvsp[-1].lstr.str); + strcat(yyval.lstr.str, yyvsp[0].lstr.str); + a_delete yyvsp[-1].lstr.str; + a_delete yyvsp[0].lstr.str; + if (yyvsp[-1].lstr.filename) { + yyval.lstr.filename = yyvsp[-1].lstr.filename; + yyval.lstr.lineno = yyvsp[-1].lstr.lineno; + } + else if (yyvsp[0].lstr.filename) { + yyval.lstr.filename = yyvsp[0].lstr.filename; + yyval.lstr.lineno = yyvsp[0].lstr.lineno; + } + } +break; +case 40: +#line 460 "/home/cjk/groff/pic/pic.y" +{ + yyval.lstr.str = new char[GDIGITS + 1]; + sprintf(yyval.lstr.str, "%g", yyvsp[0].x); + yyval.lstr.filename = 0; + yyval.lstr.lineno = 0; + } +break; +case 41: +#line 467 "/home/cjk/groff/pic/pic.y" +{ yyval.lstr = yyvsp[0].lstr; } +break; +case 42: +#line 469 "/home/cjk/groff/pic/pic.y" +{ + yyval.lstr.str = new char[GDIGITS + 2 + GDIGITS + 1]; + sprintf(yyval.lstr.str, "%g, %g", yyvsp[0].pair.x, yyvsp[0].pair.y); + yyval.lstr.filename = 0; + yyval.lstr.lineno = 0; + } +break; +case 43: +#line 478 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 44: +#line 480 "/home/cjk/groff/pic/pic.y" +{ delim_flag = 0; yyval.if_data.x = yyvsp[-3].x; yyval.if_data.body = yyvsp[0].str; } +break; +case 45: +#line 485 "/home/cjk/groff/pic/pic.y" +{ yyval.str = 0; } +break; +case 46: +#line 487 "/home/cjk/groff/pic/pic.y" +{ yyval.str = yyvsp[0].lstr.str; } +break; +case 47: +#line 492 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[0].x; } +break; +case 48: +#line 494 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[0].x; } +break; +case 49: +#line 499 "/home/cjk/groff/pic/pic.y" +{ + yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0; + a_delete yyvsp[-2].lstr.str; + a_delete yyvsp[0].lstr.str; + } +break; +case 50: +#line 505 "/home/cjk/groff/pic/pic.y" +{ + yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0; + a_delete yyvsp[-2].lstr.str; + a_delete yyvsp[0].lstr.str; + } +break; +case 51: +#line 511 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 52: +#line 513 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 53: +#line 515 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 54: +#line 517 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 55: +#line 519 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 56: +#line 521 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 57: +#line 523 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[0].x == 0.0); } +break; +case 58: +#line 529 "/home/cjk/groff/pic/pic.y" +{ yyval.by.val = 1.0; yyval.by.is_multiplicative = 0; } +break; +case 59: +#line 531 "/home/cjk/groff/pic/pic.y" +{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 0; } +break; +case 60: +#line 533 "/home/cjk/groff/pic/pic.y" +{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 1; } +break; +case 61: +#line 538 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl.obj = yyvsp[0].spec->make_object(¤t_position, + ¤t_direction); + if (yyval.pl.obj == 0) + YYABORT; + delete yyvsp[0].spec; + if (yyval.pl.obj) + olist.append(yyval.pl.obj); + else { + yyval.pl.x = current_position.x; + yyval.pl.y = current_position.y; + } + } +break; +case 62: +#line 552 "/home/cjk/groff/pic/pic.y" +{ yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; } +break; +case 63: +#line 554 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl.obj = 0; + yyval.pl.x = yyvsp[0].pair.x; + yyval.pl.y = yyvsp[0].pair.y; + define_label(yyvsp[-3].str, & yyval.pl); + a_delete yyvsp[-3].str; + } +break; +case 64: +#line 562 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl = yyvsp[0].pl; + define_label(yyvsp[-3].str, & yyval.pl); + a_delete yyvsp[-3].str; + } +break; +case 65: +#line 568 "/home/cjk/groff/pic/pic.y" +{ + yyval.state.x = current_position.x; + yyval.state.y = current_position.y; + yyval.state.dir = current_direction; + } +break; +case 66: +#line 574 "/home/cjk/groff/pic/pic.y" +{ + current_position.x = yyvsp[-2].state.x; + current_position.y = yyvsp[-2].state.y; + current_direction = yyvsp[-2].state.dir; + } +break; +case 67: +#line 580 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl = yyvsp[-3].pl; + } +break; +case 68: +#line 584 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl.obj = 0; + yyval.pl.x = current_position.x; + yyval.pl.y = current_position.y; + } +break; +case 69: +#line 593 "/home/cjk/groff/pic/pic.y" +{} +break; +case 70: +#line 595 "/home/cjk/groff/pic/pic.y" +{} +break; +case 71: +#line 600 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(BOX_OBJECT); + } +break; +case 72: +#line 604 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(CIRCLE_OBJECT); + } +break; +case 73: +#line 608 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(ELLIPSE_OBJECT); + } +break; +case 74: +#line 612 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(ARC_OBJECT); + yyval.spec->dir = current_direction; + } +break; +case 75: +#line 617 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(LINE_OBJECT); + lookup_variable("lineht", & yyval.spec->segment_height); + lookup_variable("linewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 76: +#line 624 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(ARROW_OBJECT); + lookup_variable("lineht", & yyval.spec->segment_height); + lookup_variable("linewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 77: +#line 631 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(MOVE_OBJECT); + lookup_variable("moveht", & yyval.spec->segment_height); + lookup_variable("movewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 78: +#line 638 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(SPLINE_OBJECT); + lookup_variable("lineht", & yyval.spec->segment_height); + lookup_variable("linewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 79: +#line 645 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(TEXT_OBJECT); + yyval.spec->text = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); + } +break; +case 80: +#line 650 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(TEXT_OBJECT); + yyval.spec->text = new text_item(format_number(0, yyvsp[0].x), 0, -1); + } +break; +case 81: +#line 655 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = new object_spec(TEXT_OBJECT); + yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x), + yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); + a_delete yyvsp[0].lstr.str; + } +break; +case 82: +#line 662 "/home/cjk/groff/pic/pic.y" +{ + saved_state *p = new saved_state; + yyval.pstate = p; + p->x = current_position.x; + p->y = current_position.y; + p->dir = current_direction; + p->tbl = current_table; + p->prev = current_saved_state; + current_position.x = 0.0; + current_position.y = 0.0; + current_table = new PTABLE(place); + current_saved_state = p; + olist.append(make_mark_object()); + } +break; +case 83: +#line 677 "/home/cjk/groff/pic/pic.y" +{ + current_position.x = yyvsp[-2].pstate->x; + current_position.y = yyvsp[-2].pstate->y; + current_direction = yyvsp[-2].pstate->dir; + yyval.spec = new object_spec(BLOCK_OBJECT); + olist.wrap_up_block(& yyval.spec->oblist); + yyval.spec->tbl = current_table; + current_table = yyvsp[-2].pstate->tbl; + current_saved_state = yyvsp[-2].pstate->prev; + delete yyvsp[-2].pstate; + } +break; +case 84: +#line 689 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->height = yyvsp[0].x; + yyval.spec->flags |= HAS_HEIGHT; + } +break; +case 85: +#line 695 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->radius = yyvsp[0].x; + yyval.spec->flags |= HAS_RADIUS; + } +break; +case 86: +#line 701 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->width = yyvsp[0].x; + yyval.spec->flags |= HAS_WIDTH; + } +break; +case 87: +#line 707 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->radius = yyvsp[0].x/2.0; + yyval.spec->flags |= HAS_RADIUS; + } +break; +case 88: +#line 713 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= HAS_SEGMENT; + switch (yyval.spec->dir) { + case UP_DIRECTION: + yyval.spec->segment_pos.y += yyvsp[0].x; + break; + case DOWN_DIRECTION: + yyval.spec->segment_pos.y -= yyvsp[0].x; + break; + case RIGHT_DIRECTION: + yyval.spec->segment_pos.x += yyvsp[0].x; + break; + case LEFT_DIRECTION: + yyval.spec->segment_pos.x -= yyvsp[0].x; + break; + } + } +break; +case 89: +#line 732 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = UP_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y += yyval.spec->segment_height; + } +break; +case 90: +#line 739 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = UP_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y += yyvsp[0].x; + } +break; +case 91: +#line 746 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = DOWN_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y -= yyval.spec->segment_height; + } +break; +case 92: +#line 753 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = DOWN_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y -= yyvsp[0].x; + } +break; +case 93: +#line 760 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = RIGHT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x += yyval.spec->segment_width; + } +break; +case 94: +#line 767 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = RIGHT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x += yyvsp[0].x; + } +break; +case 95: +#line 774 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = LEFT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x -= yyval.spec->segment_width; + } +break; +case 96: +#line 781 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = LEFT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x -= yyvsp[0].x; + } +break; +case 97: +#line 788 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_FROM; + yyval.spec->from.x = yyvsp[0].pair.x; + yyval.spec->from.y = yyvsp[0].pair.y; + } +break; +case 98: +#line 795 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + if (yyval.spec->flags & HAS_SEGMENT) + yyval.spec->segment_list = new segment(yyval.spec->segment_pos, + yyval.spec->segment_is_absolute, + yyval.spec->segment_list); + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x = yyvsp[0].pair.x; + yyval.spec->segment_pos.y = yyvsp[0].pair.y; + yyval.spec->segment_is_absolute = 1; + yyval.spec->flags |= HAS_TO; + yyval.spec->to.x = yyvsp[0].pair.x; + yyval.spec->to.y = yyvsp[0].pair.y; + } +break; +case 99: +#line 810 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_AT; + yyval.spec->at.x = yyvsp[0].pair.x; + yyval.spec->at.y = yyvsp[0].pair.y; + if (yyval.spec->type != ARC_OBJECT) { + yyval.spec->flags |= HAS_FROM; + yyval.spec->from.x = yyvsp[0].pair.x; + yyval.spec->from.y = yyvsp[0].pair.y; + } + } +break; +case 100: +#line 822 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_WITH; + yyval.spec->with = yyvsp[0].pth; + } +break; +case 101: +#line 828 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x += yyvsp[0].pair.x; + yyval.spec->segment_pos.y += yyvsp[0].pair.y; + } +break; +case 102: +#line 835 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->flags & HAS_SEGMENT) { + yyval.spec->segment_list = new segment(yyval.spec->segment_pos, + yyval.spec->segment_is_absolute, + yyval.spec->segment_list); + yyval.spec->flags &= ~HAS_SEGMENT; + yyval.spec->segment_pos.x = yyval.spec->segment_pos.y = 0.0; + yyval.spec->segment_is_absolute = 0; + } + } +break; +case 103: +#line 847 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_DOTTED; + lookup_variable("dashwid", & yyval.spec->dash_width); + } +break; +case 104: +#line 853 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_DOTTED; + yyval.spec->dash_width = yyvsp[0].x; + } +break; +case 105: +#line 859 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_DASHED; + lookup_variable("dashwid", & yyval.spec->dash_width); + } +break; +case 106: +#line 865 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_DASHED; + yyval.spec->dash_width = yyvsp[0].x; + } +break; +case 107: +#line 871 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_DEFAULT_FILLED; + } +break; +case 108: +#line 876 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_FILLED; + yyval.spec->fill = yyvsp[0].x; + } +break; +case 109: +#line 882 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + /* line chop chop means line chop 0 chop 0*/ + if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { + yyval.spec->flags |= IS_CHOPPED; + yyval.spec->flags &= ~IS_DEFAULT_CHOPPED; + yyval.spec->start_chop = yyval.spec->end_chop = 0.0; + } + else if (yyval.spec->flags & IS_CHOPPED) { + yyval.spec->end_chop = 0.0; + } + else { + yyval.spec->flags |= IS_DEFAULT_CHOPPED; + } + } +break; +case 110: +#line 898 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { + yyval.spec->flags |= IS_CHOPPED; + yyval.spec->flags &= ~IS_DEFAULT_CHOPPED; + yyval.spec->start_chop = 0.0; + yyval.spec->end_chop = yyvsp[0].x; + } + else if (yyval.spec->flags & IS_CHOPPED) { + yyval.spec->end_chop = yyvsp[0].x; + } + else { + yyval.spec->start_chop = yyval.spec->end_chop = yyvsp[0].x; + yyval.spec->flags |= IS_CHOPPED; + } + } +break; +case 111: +#line 915 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_SAME; + } +break; +case 112: +#line 920 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_INVISIBLE; + } +break; +case 113: +#line 925 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= HAS_LEFT_ARROW_HEAD; + } +break; +case 114: +#line 930 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD; + } +break; +case 115: +#line 935 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD); + } +break; +case 116: +#line 940 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_CLOCKWISE; + } +break; +case 117: +#line 945 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags &= ~IS_CLOCKWISE; + } +break; +case 118: +#line 950 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + text_item **p; + for (p = & yyval.spec->text; *p; p = &(*p)->next) + ; + *p = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); + } +break; +case 119: +#line 958 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + text_item *p; + for (p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.h = LEFT_ADJUST; + } + } +break; +case 120: +#line 968 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + text_item *p; + for (p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.h = RIGHT_ADJUST; + } + } +break; +case 121: +#line 978 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + text_item *p; + for (p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.v = ABOVE_ADJUST; + } + } +break; +case 122: +#line 988 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + text_item *p; + for (p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.v = BELOW_ADJUST; + } + } +break; +case 123: +#line 998 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_THICKNESS; + yyval.spec->thickness = yyvsp[0].x; + } +break; +case 124: +#line 1004 "/home/cjk/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_ALIGNED; + } +break; +case 125: +#line 1012 "/home/cjk/groff/pic/pic.y" +{ + yyval.lstr = yyvsp[0].lstr; + } +break; +case 126: +#line 1016 "/home/cjk/groff/pic/pic.y" +{ + yyval.lstr.filename = yyvsp[-2].lstr.filename; + yyval.lstr.lineno = yyvsp[-2].lstr.lineno; + yyval.lstr.str = do_sprintf(yyvsp[-2].lstr.str, yyvsp[-1].dv.v, yyvsp[-1].dv.nv); + a_delete yyvsp[-1].dv.v; + a_delete yyvsp[-2].lstr.str; + } +break; +case 127: +#line 1027 "/home/cjk/groff/pic/pic.y" +{ + yyval.dv.v = 0; + yyval.dv.nv = 0; + yyval.dv.maxv = 0; + } +break; +case 128: +#line 1033 "/home/cjk/groff/pic/pic.y" +{ + yyval.dv = yyvsp[-2].dv; + if (yyval.dv.nv >= yyval.dv.maxv) { + if (yyval.dv.nv == 0) { + yyval.dv.v = new double[4]; + yyval.dv.maxv = 4; + } + else { + double *oldv = yyval.dv.v; + yyval.dv.maxv *= 2; + yyval.dv.v = new double[yyval.dv.maxv]; + memcpy(yyval.dv.v, oldv, yyval.dv.nv*sizeof(double)); + a_delete oldv; + } + } + yyval.dv.v[yyval.dv.nv] = yyvsp[0].x; + yyval.dv.nv += 1; + } +break; +case 129: +#line 1055 "/home/cjk/groff/pic/pic.y" +{ yyval.pair = yyvsp[0].pair; } +break; +case 130: +#line 1057 "/home/cjk/groff/pic/pic.y" +{ + position pos = yyvsp[0].pl; + yyval.pair.x = pos.x; + yyval.pair.y = pos.y; + } +break; +case 131: +#line 1066 "/home/cjk/groff/pic/pic.y" +{ yyval.pair = yyvsp[0].pair; } +break; +case 132: +#line 1068 "/home/cjk/groff/pic/pic.y" +{ + yyval.pair.x = yyvsp[-2].pair.x + yyvsp[0].pair.x; + yyval.pair.y = yyvsp[-2].pair.y + yyvsp[0].pair.y; + } +break; +case 133: +#line 1073 "/home/cjk/groff/pic/pic.y" +{ + yyval.pair.x = yyvsp[-2].pair.x - yyvsp[0].pair.x; + yyval.pair.y = yyvsp[-2].pair.y - yyvsp[0].pair.y; + } +break; +case 134: +#line 1078 "/home/cjk/groff/pic/pic.y" +{ + yyval.pair.x = yyvsp[-3].pair.x; + yyval.pair.y = yyvsp[-1].pair.y; + } +break; +case 135: +#line 1083 "/home/cjk/groff/pic/pic.y" +{ + yyval.pair.x = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.x + yyvsp[-4].x*yyvsp[0].pair.x; + yyval.pair.y = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.y + yyvsp[-4].x*yyvsp[0].pair.y; + } +break; +case 136: +#line 1088 "/home/cjk/groff/pic/pic.y" +{ + yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x; + yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y; + } +break; +case 139: +#line 1101 "/home/cjk/groff/pic/pic.y" +{ yyval.pair.x = yyvsp[-2].x; yyval.pair.y = yyvsp[0].x; } +break; +case 140: +#line 1103 "/home/cjk/groff/pic/pic.y" +{ yyval.pair = yyvsp[-1].pair; } +break; +case 141: +#line 1108 "/home/cjk/groff/pic/pic.y" +{ yyval.pl = yyvsp[0].pl; } +break; +case 142: +#line 1110 "/home/cjk/groff/pic/pic.y" +{ + path pth(yyvsp[0].crn); + if (!pth.follow(yyvsp[-1].pl, & yyval.pl)) + YYABORT; + } +break; +case 143: +#line 1116 "/home/cjk/groff/pic/pic.y" +{ + path pth(yyvsp[-1].crn); + if (!pth.follow(yyvsp[0].pl, & yyval.pl)) + YYABORT; + } +break; +case 144: +#line 1122 "/home/cjk/groff/pic/pic.y" +{ + path pth(yyvsp[-2].crn); + if (!pth.follow(yyvsp[0].pl, & yyval.pl)) + YYABORT; + } +break; +case 145: +#line 1128 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl.x = current_position.x; + yyval.pl.y = current_position.y; + yyval.pl.obj = 0; + } +break; +case 146: +#line 1137 "/home/cjk/groff/pic/pic.y" +{ + place *p = lookup_label(yyvsp[0].str); + if (!p) { + lex_error("there is no place `%1'", yyvsp[0].str); + YYABORT; + } + yyval.pl = *p; + a_delete yyvsp[0].str; + } +break; +case 147: +#line 1147 "/home/cjk/groff/pic/pic.y" +{ + yyval.pl.obj = yyvsp[0].obj; + } +break; +case 148: +#line 1151 "/home/cjk/groff/pic/pic.y" +{ + path pth(yyvsp[0].str); + if (!pth.follow(yyvsp[-2].pl, & yyval.pl)) + YYABORT; + } +break; +case 149: +#line 1160 "/home/cjk/groff/pic/pic.y" +{ yyval.n = yyvsp[0].n; } +break; +case 150: +#line 1162 "/home/cjk/groff/pic/pic.y" +{ + /* XXX Check for overflow (and non-integers?).*/ + yyval.n = (int)yyvsp[-1].x; + } +break; +case 151: +#line 1170 "/home/cjk/groff/pic/pic.y" +{ yyval.n = 1; } +break; +case 152: +#line 1172 "/home/cjk/groff/pic/pic.y" +{ yyval.n = yyvsp[-1].n; } +break; +case 153: +#line 1177 "/home/cjk/groff/pic/pic.y" +{ + int count = 0; + object *p; + for (p = olist.head; p != 0; p = p->next) + if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) { + yyval.obj = p; + break; + } + if (p == 0) { + lex_error("there is no %1%2 %3", yyvsp[-1].n, ordinal_postfix(yyvsp[-1].n), + object_type_name(yyvsp[0].obtype)); + YYABORT; + } + } +break; +case 154: +#line 1192 "/home/cjk/groff/pic/pic.y" +{ + int count = 0; + object *p; + for (p = olist.tail; p != 0; p = p->prev) + if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) { + yyval.obj = p; + break; + } + if (p == 0) { + lex_error("there is no %1%2 last %3", yyvsp[-1].n, + ordinal_postfix(yyvsp[-1].n), object_type_name(yyvsp[0].obtype)); + YYABORT; + } + } +break; +case 155: +#line 1210 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = BOX_OBJECT; } +break; +case 156: +#line 1212 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = CIRCLE_OBJECT; } +break; +case 157: +#line 1214 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = ELLIPSE_OBJECT; } +break; +case 158: +#line 1216 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = ARC_OBJECT; } +break; +case 159: +#line 1218 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = LINE_OBJECT; } +break; +case 160: +#line 1220 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = ARROW_OBJECT; } +break; +case 161: +#line 1222 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = SPLINE_OBJECT; } +break; +case 162: +#line 1224 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = BLOCK_OBJECT; } +break; +case 163: +#line 1226 "/home/cjk/groff/pic/pic.y" +{ yyval.obtype = TEXT_OBJECT; } +break; +case 164: +#line 1231 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = new path(yyvsp[0].str); + } +break; +case 165: +#line 1235 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = yyvsp[-2].pth; + yyval.pth->append(yyvsp[0].str); + } +break; +case 166: +#line 1243 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = new path(yyvsp[0].crn); + } +break; +case 167: +#line 1250 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = yyvsp[0].pth; + } +break; +case 168: +#line 1254 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = yyvsp[-1].pth; + yyval.pth->append(yyvsp[0].crn); + } +break; +case 169: +#line 1262 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = yyvsp[0].pth; + } +break; +case 170: +#line 1266 "/home/cjk/groff/pic/pic.y" +{ + yyval.pth = yyvsp[-3].pth; + yyval.pth->set_ypath(yyvsp[-1].pth); + } +break; +case 171: +#line 1272 "/home/cjk/groff/pic/pic.y" +{ + lex_warning("`%1%2 last %3' in `with' argument ignored", + yyvsp[-3].n, ordinal_postfix(yyvsp[-3].n), object_type_name(yyvsp[-1].obtype)); + yyval.pth = yyvsp[0].pth; + } +break; +case 172: +#line 1278 "/home/cjk/groff/pic/pic.y" +{ + lex_warning("`last %1' in `with' argument ignored", + object_type_name(yyvsp[-1].obtype)); + yyval.pth = yyvsp[0].pth; + } +break; +case 173: +#line 1284 "/home/cjk/groff/pic/pic.y" +{ + lex_warning("`%1%2 %3' in `with' argument ignored", + yyvsp[-2].n, ordinal_postfix(yyvsp[-2].n), object_type_name(yyvsp[-1].obtype)); + yyval.pth = yyvsp[0].pth; + } +break; +case 174: +#line 1290 "/home/cjk/groff/pic/pic.y" +{ + lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str); + a_delete yyvsp[-1].str; + yyval.pth = yyvsp[0].pth; + } +break; +case 175: +#line 1299 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north; } +break; +case 176: +#line 1301 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::east; } +break; +case 177: +#line 1303 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::west; } +break; +case 178: +#line 1305 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south; } +break; +case 179: +#line 1307 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north_east; } +break; +case 180: +#line 1309 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object:: south_east; } +break; +case 181: +#line 1311 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north_west; } +break; +case 182: +#line 1313 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south_west; } +break; +case 183: +#line 1315 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::center; } +break; +case 184: +#line 1317 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::start; } +break; +case 185: +#line 1319 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::end; } +break; +case 186: +#line 1321 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north; } +break; +case 187: +#line 1323 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south; } +break; +case 188: +#line 1325 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::west; } +break; +case 189: +#line 1327 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::east; } +break; +case 190: +#line 1329 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north_west; } +break; +case 191: +#line 1331 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south_west; } +break; +case 192: +#line 1333 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north_east; } +break; +case 193: +#line 1335 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south_east; } +break; +case 194: +#line 1337 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::west; } +break; +case 195: +#line 1339 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::east; } +break; +case 196: +#line 1341 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north_west; } +break; +case 197: +#line 1343 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south_west; } +break; +case 198: +#line 1345 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::north_east; } +break; +case 199: +#line 1347 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::south_east; } +break; +case 200: +#line 1349 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::center; } +break; +case 201: +#line 1351 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::start; } +break; +case 202: +#line 1353 "/home/cjk/groff/pic/pic.y" +{ yyval.crn = &object::end; } +break; +case 203: +#line 1358 "/home/cjk/groff/pic/pic.y" +{ + if (!lookup_variable(yyvsp[0].str, & yyval.x)) { + lex_error("there is no variable `%1'", yyvsp[0].str); + YYABORT; + } + a_delete yyvsp[0].str; + } +break; +case 204: +#line 1366 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[0].x; } +break; +case 205: +#line 1368 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->origin().x; + else + yyval.x = yyvsp[-1].pl.x; + } +break; +case 206: +#line 1375 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->origin().y; + else + yyval.x = yyvsp[-1].pl.y; + } +break; +case 207: +#line 1382 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->height(); + else + yyval.x = 0.0; + } +break; +case 208: +#line 1389 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->width(); + else + yyval.x = 0.0; + } +break; +case 209: +#line 1396 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->radius(); + else + yyval.x = 0.0; + } +break; +case 210: +#line 1403 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[-2].x + yyvsp[0].x; } +break; +case 211: +#line 1405 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[-2].x - yyvsp[0].x; } +break; +case 212: +#line 1407 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[-2].x * yyvsp[0].x; } +break; +case 213: +#line 1409 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[0].x == 0.0) { + lex_error("division by zero"); + YYABORT; + } + yyval.x = yyvsp[-2].x/yyvsp[0].x; + } +break; +case 214: +#line 1417 "/home/cjk/groff/pic/pic.y" +{ + if (yyvsp[0].x == 0.0) { + lex_error("modulus by zero"); + YYABORT; + } + yyval.x = fmod(yyvsp[-2].x, yyvsp[0].x); + } +break; +case 215: +#line 1425 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = pow(yyvsp[-2].x, yyvsp[0].x); + if (errno == EDOM) { + lex_error("arguments to `^' operator out of domain"); + YYABORT; + } + if (errno == ERANGE) { + lex_error("result of `^' operator out of range"); + YYABORT; + } + } +break; +case 216: +#line 1438 "/home/cjk/groff/pic/pic.y" +{ yyval.x = -yyvsp[0].x; } +break; +case 217: +#line 1440 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[-1].x; } +break; +case 218: +#line 1442 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = sin(yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("sin result out of range"); + YYABORT; + } + } +break; +case 219: +#line 1451 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = cos(yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("cos result out of range"); + YYABORT; + } + } +break; +case 220: +#line 1460 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x); + if (errno == EDOM) { + lex_error("atan2 argument out of domain"); + YYABORT; + } + if (errno == ERANGE) { + lex_error("atan2 result out of range"); + YYABORT; + } + } +break; +case 221: +#line 1473 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = log10(yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("log result out of range"); + YYABORT; + } + } +break; +case 222: +#line 1482 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = pow(10.0, yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("exp result out of range"); + YYABORT; + } + } +break; +case 223: +#line 1491 "/home/cjk/groff/pic/pic.y" +{ + errno = 0; + yyval.x = sqrt(yyvsp[-1].x); + if (errno == EDOM) { + lex_error("sqrt argument out of domain"); + YYABORT; + } + } +break; +case 224: +#line 1500 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } +break; +case 225: +#line 1502 "/home/cjk/groff/pic/pic.y" +{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } +break; +case 226: +#line 1504 "/home/cjk/groff/pic/pic.y" +{ yyval.x = floor(yyvsp[-1].x); } +break; +case 227: +#line 1506 "/home/cjk/groff/pic/pic.y" +{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); } +break; +case 228: +#line 1508 "/home/cjk/groff/pic/pic.y" +{ + /* return a random number in the range [0,1) */ + /* portable, but not very random */ + yyval.x = (rand() & 0x7fff) / double(0x8000); + } +break; +case 229: +#line 1514 "/home/cjk/groff/pic/pic.y" +{ yyval.x = 0; srand((unsigned int)yyvsp[-1].x); } +break; +case 230: +#line 1516 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); } +break; +case 231: +#line 1518 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); } +break; +case 232: +#line 1520 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); } +break; +case 233: +#line 1522 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); } +break; +case 234: +#line 1524 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); } +break; +case 235: +#line 1526 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); } +break; +case 236: +#line 1528 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 237: +#line 1530 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 238: +#line 1532 "/home/cjk/groff/pic/pic.y" +{ yyval.x = (yyvsp[0].x == 0.0); } +break; +#line 5165 "y.tab.c" + } + yyssp -= yym; + yystate = *yyssp; + yyvsp -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yyssp = YYFINAL; + *++yyvsp = yyval; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == 0) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yyssp, yystate); +#endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate; + *++yyvsp = yyval; + goto yyloop; +yyoverflow: + yyerror("yacc stack overflow"); +yyabort: + return (1); +yyaccept: + return (0); +} |