1#include <config.h> 2/* $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ */ 3 4/* A lexical scanner generated by flex */ 5 6/* Scanner skeleton version: 7 * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ 8 */ 9 10#define FLEX_SCANNER 11#define YY_FLEX_MAJOR_VERSION 2 12#define YY_FLEX_MINOR_VERSION 5 13 14#include <stdio.h> 15#include <errno.h> 16 17 18/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ 19#ifdef c_plusplus 20#ifndef __cplusplus 21#define __cplusplus 22#endif 23#endif 24 25 26#ifdef __cplusplus 27 28#include <stdlib.h> 29#include <unistd.h> 30 31/* Use prototypes in function declarations. */ 32#define YY_USE_PROTOS 33 34/* The "const" storage-class-modifier is valid. */ 35#define YY_USE_CONST 36 37#else /* ! __cplusplus */ 38 39#ifdef __STDC__ 40 41#define YY_USE_PROTOS 42#define YY_USE_CONST 43 44#endif /* __STDC__ */ 45#endif /* ! __cplusplus */ 46 47#ifdef __TURBOC__ 48 #pragma warn -rch 49 #pragma warn -use 50#include <io.h> 51#include <stdlib.h> 52#define YY_USE_CONST 53#define YY_USE_PROTOS 54#endif 55 56#ifdef YY_USE_CONST 57#define yyconst const 58#else 59#define yyconst 60#endif 61 62 63#ifdef YY_USE_PROTOS 64#define YY_PROTO(proto) proto 65#else 66#define YY_PROTO(proto) () 67#endif 68 69/* Returned upon end-of-file. */ 70#define YY_NULL 0 71 72/* Promotes a possibly negative, possibly signed char to an unsigned 73 * integer for use as an array index. If the signed char is negative, 74 * we want to instead treat it as an 8-bit unsigned char, hence the 75 * double cast. 76 */ 77#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) 78 79/* Enter a start condition. This macro really ought to take a parameter, 80 * but we do it the disgusting crufty way forced on us by the ()-less 81 * definition of BEGIN. 82 */ 83#define BEGIN yy_start = 1 + 2 * 84 85/* Translate the current start state into a value that can be later handed 86 * to BEGIN to return to the state. The YYSTATE alias is for lex 87 * compatibility. 88 */ 89#define YY_START ((yy_start - 1) / 2) 90#define YYSTATE YY_START 91 92/* Action number for EOF rule of a given start state. */ 93#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) 94 95/* Special action meaning "start processing a new file". */ 96#define YY_NEW_FILE yyrestart( yyin ) 97 98#define YY_END_OF_BUFFER_CHAR 0 99 100/* Size of default input buffer. */ 101#define YY_BUF_SIZE 16384 102 103typedef struct yy_buffer_state *YY_BUFFER_STATE; 104 105extern int yyleng; 106extern FILE *yyin, *yyout; 107 108#define EOB_ACT_CONTINUE_SCAN 0 109#define EOB_ACT_END_OF_FILE 1 110#define EOB_ACT_LAST_MATCH 2 111 112/* The funky do-while in the following #define is used to turn the definition 113 * int a single C statement (which needs a semi-colon terminator). This 114 * avoids problems with code like: 115 * 116 * if ( condition_holds ) 117 * yyless( 5 ); 118 * else 119 * do_something_else(); 120 * 121 * Prior to using the do-while the compiler would get upset at the 122 * "else" because it interpreted the "if" statement as being all 123 * done when it reached the ';' after the yyless() call. 124 */ 125 126/* Return all but the first 'n' matched characters back to the input stream. */ 127 128#define yyless(n) \ 129 do \ 130 { \ 131 /* Undo effects of setting up yytext. */ \ 132 *yy_cp = yy_hold_char; \ 133 YY_RESTORE_YY_MORE_OFFSET \ 134 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ 135 YY_DO_BEFORE_ACTION; /* set up yytext again */ \ 136 } \ 137 while ( 0 ) 138 139#define unput(c) yyunput( c, yytext_ptr ) 140 141/* The following is because we cannot portably get our hands on size_t 142 * (without autoconf's help, which isn't available because we want 143 * flex-generated scanners to compile on their own). 144 */ 145typedef unsigned int yy_size_t; 146 147 148struct yy_buffer_state 149 { 150 FILE *yy_input_file; 151 152 char *yy_ch_buf; /* input buffer */ 153 char *yy_buf_pos; /* current position in input buffer */ 154 155 /* Size of input buffer in bytes, not including room for EOB 156 * characters. 157 */ 158 yy_size_t yy_buf_size; 159 160 /* Number of characters read into yy_ch_buf, not including EOB 161 * characters. 162 */ 163 int yy_n_chars; 164 165 /* Whether we "own" the buffer - i.e., we know we created it, 166 * and can realloc() it to grow it, and should free() it to 167 * delete it. 168 */ 169 int yy_is_our_buffer; 170 171 /* Whether this is an "interactive" input source; if so, and 172 * if we're using stdio for input, then we want to use getc() 173 * instead of fread(), to make sure we stop fetching input after 174 * each newline. 175 */ 176 int yy_is_interactive; 177 178 /* Whether we're considered to be at the beginning of a line. 179 * If so, '^' rules will be active on the next match, otherwise 180 * not. 181 */ 182 int yy_at_bol; 183 184 /* Whether to try to fill the input buffer when we reach the 185 * end of it. 186 */ 187 int yy_fill_buffer; 188 189 int yy_buffer_status; 190#define YY_BUFFER_NEW 0 191#define YY_BUFFER_NORMAL 1 192 /* When an EOF's been seen but there's still some text to process 193 * then we mark the buffer as YY_EOF_PENDING, to indicate that we 194 * shouldn't try reading from the input source any more. We might 195 * still have a bunch of tokens to match, though, because of 196 * possible backing-up. 197 * 198 * When we actually see the EOF, we change the status to "new" 199 * (via yyrestart()), so that the user can continue scanning by 200 * just pointing yyin at a new input file. 201 */ 202#define YY_BUFFER_EOF_PENDING 2 203 }; 204 205static YY_BUFFER_STATE yy_current_buffer = 0; 206 207/* We provide macros for accessing buffer states in case in the 208 * future we want to put the buffer states in a more general 209 * "scanner state". 210 */ 211#define YY_CURRENT_BUFFER yy_current_buffer 212 213 214/* yy_hold_char holds the character lost when yytext is formed. */ 215static char yy_hold_char; 216 217static int yy_n_chars; /* number of characters read into yy_ch_buf */ 218 219 220int yyleng; 221 222/* Points to current character in buffer. */ 223static char *yy_c_buf_p = (char *) 0; 224static int yy_init = 1; /* whether we need to initialize */ 225static int yy_start = 0; /* start state number */ 226 227/* Flag which is used to allow yywrap()'s to do buffer switches 228 * instead of setting up a fresh yyin. A bit of a hack ... 229 */ 230static int yy_did_buffer_switch_on_eof; 231 232void yyrestart YY_PROTO(( FILE *input_file )); 233 234void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); 235void yy_load_buffer_state YY_PROTO(( void )); 236YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); 237void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); 238void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); 239void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); 240#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) 241 242YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); 243YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); 244YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); 245 246static void *yy_flex_alloc YY_PROTO(( yy_size_t )); 247static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); 248static void yy_flex_free YY_PROTO(( void * )); 249 250#define yy_new_buffer yy_create_buffer 251 252#define yy_set_interactive(is_interactive) \ 253 { \ 254 if ( ! yy_current_buffer ) \ 255 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ 256 yy_current_buffer->yy_is_interactive = is_interactive; \ 257 } 258 259#define yy_set_bol(at_bol) \ 260 { \ 261 if ( ! yy_current_buffer ) \ 262 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ 263 yy_current_buffer->yy_at_bol = at_bol; \ 264 } 265 266#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) 267 268 269#define yywrap() 1 270#define YY_SKIP_YYWRAP 271typedef unsigned char YY_CHAR; 272FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; 273typedef int yy_state_type; 274extern char *yytext; 275#define yytext_ptr yytext 276 277static yy_state_type yy_get_previous_state YY_PROTO(( void )); 278static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); 279static int yy_get_next_buffer YY_PROTO(( void )); 280static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); 281 282/* Done after the current pattern has been matched and before the 283 * corresponding action - sets up yytext. 284 */ 285#define YY_DO_BEFORE_ACTION \ 286 yytext_ptr = yy_bp; \ 287 yyleng = (int) (yy_cp - yy_bp); \ 288 yy_hold_char = *yy_cp; \ 289 *yy_cp = '\0'; \ 290 yy_c_buf_p = yy_cp; 291 292#define YY_NUM_RULES 59 293#define YY_END_OF_BUFFER 60 294static yyconst short int yy_accept[607] = 295 { 0, 296 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 297 0, 0, 60, 47, 55, 54, 53, 46, 58, 32, 298 48, 49, 32, 50, 47, 47, 47, 47, 52, 51, 299 58, 42, 42, 42, 42, 42, 42, 42, 42, 42, 300 42, 58, 47, 47, 55, 58, 42, 42, 42, 42, 301 42, 2, 58, 1, 47, 47, 17, 16, 17, 16, 302 16, 58, 58, 58, 3, 9, 8, 9, 4, 9, 303 5, 58, 13, 13, 13, 11, 12, 47, 0, 55, 304 53, 0, 57, 0, 47, 34, 0, 32, 0, 33, 305 0, 45, 45, 0, 47, 47, 0, 47, 47, 47, 306 307 47, 0, 37, 42, 42, 42, 42, 42, 42, 42, 308 42, 42, 42, 47, 56, 47, 55, 0, 0, 0, 309 0, 0, 0, 47, 47, 47, 47, 47, 2, 1, 310 0, 1, 43, 43, 0, 47, 17, 17, 15, 14, 311 15, 0, 0, 3, 9, 0, 6, 7, 9, 9, 312 13, 0, 13, 13, 0, 10, 0, 0, 0, 34, 313 34, 0, 0, 47, 47, 47, 47, 47, 0, 0, 314 37, 37, 42, 39, 42, 42, 42, 42, 42, 42, 315 42, 42, 42, 42, 47, 0, 0, 0, 0, 0, 316 0, 47, 47, 47, 47, 47, 0, 47, 10, 0, 317 318 47, 47, 47, 47, 47, 47, 0, 38, 38, 38, 319 0, 0, 37, 37, 37, 37, 37, 37, 37, 42, 320 42, 42, 42, 42, 42, 42, 42, 40, 42, 41, 321 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 322 47, 47, 47, 47, 0, 0, 38, 38, 38, 0, 323 37, 37, 0, 37, 37, 37, 37, 37, 37, 37, 324 37, 37, 37, 37, 0, 25, 42, 42, 42, 42, 325 42, 42, 42, 42, 47, 0, 0, 0, 0, 47, 326 47, 47, 47, 47, 47, 47, 47, 0, 38, 0, 327 37, 37, 37, 0, 0, 0, 37, 37, 37, 37, 328 329 37, 37, 37, 37, 37, 37, 37, 37, 37, 42, 330 42, 42, 42, 42, 42, 42, 42, 47, 0, 0, 331 0, 47, 47, 47, 35, 35, 35, 0, 0, 37, 332 37, 37, 37, 37, 37, 37, 0, 0, 0, 0, 333 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 334 37, 37, 37, 37, 37, 42, 42, 0, 24, 42, 335 42, 42, 42, 0, 23, 0, 26, 47, 0, 0, 336 0, 47, 47, 47, 47, 35, 35, 35, 35, 0, 337 37, 0, 37, 37, 37, 37, 37, 37, 37, 37, 338 37, 37, 37, 0, 0, 0, 37, 37, 37, 37, 339 340 37, 37, 37, 37, 37, 37, 37, 37, 37, 42, 341 42, 42, 42, 42, 42, 44, 0, 0, 0, 47, 342 20, 43, 36, 36, 36, 36, 37, 0, 0, 0, 343 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 344 37, 37, 37, 0, 0, 0, 0, 0, 37, 37, 345 37, 37, 37, 37, 37, 37, 42, 42, 42, 42, 346 0, 22, 0, 27, 0, 20, 0, 0, 47, 0, 347 47, 47, 47, 36, 36, 36, 36, 0, 0, 0, 348 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 349 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 350 351 37, 37, 0, 30, 42, 42, 42, 0, 0, 0, 352 18, 0, 21, 20, 0, 0, 0, 0, 0, 20, 353 0, 47, 47, 47, 0, 0, 0, 37, 37, 37, 354 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 355 37, 37, 37, 37, 37, 0, 28, 42, 42, 21, 356 0, 0, 20, 47, 47, 47, 47, 47, 0, 0, 357 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 358 37, 0, 31, 42, 0, 47, 47, 47, 37, 37, 359 37, 37, 37, 37, 0, 29, 0, 0, 19, 47, 360 47, 47, 47, 47, 37, 37, 37, 37, 37, 35, 361 362 35, 35, 35, 35, 35, 0 363 } ; 364 365static yyconst int yy_ec[256] = 366 { 0, 367 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 368 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 369 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 370 1, 2, 4, 5, 6, 1, 7, 1, 1, 8, 371 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 372 19, 20, 21, 22, 22, 22, 23, 24, 1, 1, 373 25, 26, 10, 27, 28, 29, 30, 31, 32, 29, 374 33, 34, 35, 36, 36, 37, 36, 38, 39, 40, 375 36, 41, 42, 43, 44, 45, 46, 47, 48, 36, 376 10, 49, 10, 1, 50, 1, 51, 52, 53, 54, 377 378 55, 56, 57, 57, 58, 57, 57, 59, 60, 61, 379 62, 57, 57, 63, 64, 65, 66, 57, 57, 57, 380 57, 57, 1, 1, 1, 1, 1, 1, 1, 1, 381 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 382 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 383 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 384 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 385 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 386 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 387 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 388 389 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 390 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 391 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 392 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 393 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 394 1, 1, 1, 1, 1 395 } ; 396 397static yyconst int yy_meta[67] = 398 { 0, 399 1, 2, 3, 4, 5, 6, 1, 7, 7, 1, 400 1, 8, 1, 9, 10, 11, 11, 11, 11, 11, 401 11, 11, 11, 12, 13, 7, 1, 11, 11, 11, 402 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 403 1, 1, 1, 1, 1, 1, 1, 1, 14, 15, 404 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 405 15, 15, 15, 15, 15, 15 406 } ; 407 408static yyconst short int yy_base[671] = 409 { 0, 410 0, 65, 67, 72, 99, 114, 162, 227, 292, 340, 411 86, 125, 2840, 2790, 2836, 3665, 2833, 3665, 387, 70, 412 3665, 3665, 2771, 3665, 136, 397, 133, 159, 2795, 3665, 413 3665, 453, 2781, 33, 504, 2770, 2767, 2777, 2765, 2771, 414 2754, 559, 170, 19, 165, 583, 38, 49, 2739, 68, 415 2727, 81, 219, 2771, 305, 48, 0, 3665, 2761, 3665, 416 0, 250, 639, 119, 0, 2709, 3665, 108, 3665, 112, 417 3665, 140, 2699, 98, 121, 3665, 195, 2693, 661, 2739, 418 2736, 2736, 3665, 227, 247, 300, 316, 152, 354, 2681, 419 686, 373, 2670, 711, 352, 722, 2692, 2669, 375, 414, 420 421 302, 2656, 57, 763, 0, 2628, 2625, 2614, 505, 2602, 422 2606, 2599, 2601, 202, 3665, 153, 546, 2572, 2565, 2549, 423 2537, 2524, 200, 110, 244, 28, 111, 252, 171, 2578, 424 422, 2577, 565, 2529, 818, 262, 0, 2573, 179, 3665, 425 3665, 599, 269, 0, 2513, 453, 3665, 3665, 2512, 548, 426 2490, 2533, 206, 253, 323, 2535, 2524, 2513, 607, 615, 427 306, 722, 586, 831, 867, 903, 939, 2499, 2456, 980, 428 333, 1022, 1063, 0, 2430, 2394, 2363, 2364, 2374, 2369, 429 2327, 2330, 2329, 2328, 266, 2289, 2283, 2272, 2274, 2279, 430 409, 334, 2279, 145, 335, 83, 672, 278, 2327, 2325, 431 432 627, 259, 1106, 1142, 741, 210, 2293, 2279, 683, 513, 433 2275, 2271, 352, 747, 1178, 780, 788, 1220, 815, 2270, 434 400, 325, 2261, 2258, 2248, 2246, 2242, 0, 2240, 0, 435 489, 2223, 2213, 2198, 2211, 2198, 420, 407, 529, 490, 436 491, 1263, 1299, 1335, 2235, 2234, 839, 2234, 2232, 2228, 437 2226, 528, 848, 657, 856, 665, 1371, 0, 877, 1382, 438 886, 894, 1424, 913, 570, 3665, 2208, 2197, 2201, 2178, 439 2185, 2194, 2194, 2176, 558, 2169, 2152, 2150, 648, 626, 440 530, 559, 923, 336, 1467, 1503, 964, 2171, 2140, 2139, 441 2138, 1537, 551, 1000, 1041, 1082, 653, 694, 797, 1049, 442 443 923, 1580, 0, 1116, 1591, 1090, 1008, 1633, 1125, 2121, 444 2082, 747, 686, 2064, 2071, 786, 926, 905, 2080, 2033, 445 679, 634, 544, 915, 1675, 1710, 1745, 2052, 2043, 2033, 446 1150, 1781, 1158, 1133, 1822, 1197, 1166, 2028, 1239, 1273, 447 1207, 950, 951, 962, 991, 1247, 1073, 1865, 0, 1283, 448 1876, 1307, 1315, 1918, 1323, 1987, 1968, 1188, 3665, 1967, 449 1951, 1929, 1913, 1286, 3665, 1336, 3665, 707, 1897, 1889, 450 786, 930, 764, 1298, 1358, 1041, 1960, 1995, 1400, 1927, 451 1879, 1348, 708, 1406, 1348, 2031, 0, 559, 2042, 1441, 452 1449, 2083, 1477, 1487, 1513, 1523, 1230, 1290, 1458, 1548, 453 454 1557, 1602, 2126, 0, 1613, 2137, 1650, 1565, 1660, 1806, 455 1779, 1680, 1675, 1359, 1406, 1626, 1601, 1577, 897, 938, 456 1695, 1589, 2180, 2216, 2252, 2288, 1611, 1686, 1720, 1731, 457 1563, 1478, 1504, 1694, 1524, 2324, 0, 617, 2335, 1753, 458 1761, 2376, 1769, 1798, 1550, 1808, 1841, 1851, 1335, 1358, 459 1887, 714, 825, 2419, 0, 926, 1407, 1468, 1430, 1431, 460 1547, 3665, 1616, 3665, 1381, 1731, 1045, 1512, 1575, 1908, 461 1913, 1970, 1498, 2429, 2465, 1947, 1611, 1981, 1264, 2006, 462 2016, 2061, 1198, 1181, 1732, 1782, 2067, 1842, 2501, 0, 463 1181, 2512, 2100, 1904, 2553, 2110, 2155, 2164, 2189, 1769, 464 465 1142, 1232, 1634, 3665, 1699, 1095, 1077, 1025, 1046, 1306, 466 3665, 384, 981, 2211, 2218, 2238, 2243, 2263, 2288, 2249, 467 2307, 2596, 2632, 2668, 2304, 2354, 2395, 983, 894, 1902, 468 1928, 2362, 1929, 2704, 0, 1428, 2715, 2403, 2437, 2445, 469 867, 2454, 2474, 2483, 831, 1982, 3665, 1983, 782, 3665, 470 1511, 2489, 2529, 2537, 1895, 2758, 2794, 2573, 2579, 650, 471 2607, 2617, 2642, 629, 525, 1931, 447, 347, 2650, 0, 472 1528, 2019, 3665, 2044, 1805, 2830, 2866, 2902, 2676, 2684, 473 2692, 323, 0, 316, 2067, 3665, 166, 1845, 3665, 2733, 474 1945, 2938, 2974, 2743, 3665, 2767, 2777, 2658, 3665, 2805, 475 476 2813, 2847, 63, 2855, 2881, 3665, 3023, 3039, 3055, 3071, 477 3087, 3103, 3119, 3135, 3151, 3157, 3173, 3189, 2025, 3205, 478 3221, 3237, 3253, 3269, 3285, 3301, 3307, 3314, 3330, 3346, 479 3352, 3359, 3365, 3371, 3377, 3384, 3390, 3396, 3402, 3409, 480 3417, 3423, 3429, 3435, 3442, 3450, 3456, 3462, 3469, 3477, 481 3483, 3491, 3498, 3506, 3512, 3520, 3527, 3535, 3551, 3567, 482 3583, 3589, 3597, 3604, 3610, 3618, 3624, 3632, 3648, 1295 483 } ; 484 485static yyconst short int yy_def[671] = 486 { 0, 487 606, 1, 1, 1, 607, 607, 608, 608, 609, 609, 488 610, 610, 606, 611, 606, 606, 606, 606, 612, 613, 489 606, 606, 614, 606, 615, 611, 26, 26, 616, 606, 490 606, 606, 32, 32, 32, 35, 35, 35, 35, 35, 491 35, 611, 26, 611, 606, 612, 32, 32, 35, 35, 492 35, 606, 606, 606, 617, 611, 618, 606, 618, 606, 493 618, 606, 612, 606, 619, 620, 606, 620, 606, 620, 494 606, 621, 622, 622, 622, 606, 606, 611, 611, 606, 495 606, 623, 606, 624, 606, 613, 606, 625, 613, 614, 496 614, 615, 626, 611, 611, 26, 616, 96, 96, 96, 497 498 96, 627, 628, 35, 35, 35, 35, 35, 35, 35, 499 35, 35, 35, 611, 606, 611, 606, 606, 606, 606, 500 606, 606, 623, 611, 96, 611, 611, 611, 606, 606, 501 606, 606, 617, 629, 611, 611, 618, 618, 606, 606, 502 606, 624, 606, 619, 620, 620, 606, 606, 620, 620, 503 622, 606, 622, 622, 606, 606, 623, 630, 606, 606, 504 625, 625, 606, 611, 611, 611, 96, 167, 631, 606, 505 632, 606, 104, 35, 35, 35, 35, 35, 35, 35, 506 35, 35, 35, 35, 611, 606, 606, 606, 606, 606, 507 623, 611, 167, 611, 611, 611, 606, 611, 606, 630, 508 509 611, 611, 611, 611, 611, 611, 633, 634, 634, 209, 510 635, 634, 636, 172, 606, 215, 215, 606, 215, 35, 511 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 512 611, 606, 606, 606, 606, 606, 623, 611, 611, 611, 513 611, 611, 611, 611, 606, 637, 637, 247, 637, 638, 514 639, 640, 606, 641, 218, 641, 641, 257, 641, 606, 515 260, 260, 606, 260, 606, 606, 35, 35, 35, 35, 516 35, 35, 35, 35, 611, 606, 606, 606, 623, 611, 517 611, 611, 611, 611, 611, 611, 611, 642, 642, 643, 518 644, 606, 606, 606, 606, 606, 645, 645, 646, 263, 519 520 646, 646, 302, 646, 606, 305, 305, 606, 305, 35, 521 35, 35, 35, 35, 35, 35, 35, 611, 606, 606, 522 623, 611, 611, 611, 611, 611, 611, 606, 647, 648, 523 292, 606, 332, 332, 606, 332, 606, 606, 606, 606, 524 606, 606, 649, 649, 650, 308, 650, 650, 348, 650, 525 606, 351, 351, 606, 351, 35, 35, 606, 606, 35, 526 35, 35, 35, 606, 606, 606, 606, 611, 606, 606, 527 623, 611, 611, 611, 611, 611, 611, 611, 611, 606, 528 651, 606, 652, 335, 652, 652, 386, 386, 606, 389, 529 389, 606, 389, 606, 606, 606, 606, 653, 653, 654, 530 531 354, 654, 654, 403, 654, 606, 406, 406, 406, 35, 532 35, 35, 35, 35, 35, 611, 606, 606, 623, 611, 533 611, 611, 611, 611, 611, 611, 606, 606, 606, 606, 534 655, 655, 656, 392, 656, 656, 436, 436, 606, 439, 535 439, 606, 439, 606, 606, 606, 606, 606, 606, 657, 536 657, 658, 658, 658, 454, 454, 35, 35, 35, 35, 537 606, 606, 606, 606, 606, 606, 659, 623, 611, 660, 538 661, 611, 611, 611, 611, 611, 611, 606, 606, 606, 539 606, 606, 606, 662, 662, 663, 442, 663, 663, 489, 540 489, 606, 492, 492, 606, 492, 606, 606, 606, 606, 541 542 664, 664, 606, 606, 35, 35, 35, 606, 659, 659, 543 606, 623, 611, 660, 660, 660, 660, 606, 660, 661, 544 661, 611, 611, 611, 606, 606, 606, 606, 665, 665, 545 666, 495, 666, 666, 534, 534, 606, 537, 537, 537, 546 606, 606, 606, 606, 606, 606, 606, 35, 35, 606, 547 623, 606, 606, 611, 611, 611, 611, 611, 606, 606, 548 606, 606, 606, 606, 667, 667, 668, 668, 668, 569, 549 569, 606, 606, 35, 669, 611, 611, 611, 606, 606, 550 606, 606, 670, 670, 606, 606, 669, 669, 606, 611, 551 611, 611, 611, 611, 606, 606, 606, 606, 606, 611, 552 553 611, 611, 611, 611, 611, 0, 606, 606, 606, 606, 554 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 555 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 556 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 557 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 558 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 559 606, 606, 606, 606, 606, 606, 606, 606, 606, 606 560 } ; 561 562static yyconst short int yy_nxt[3732] = 563 { 0, 564 14, 15, 16, 17, 18, 19, 20, 21, 22, 14, 565 23, 24, 14, 14, 25, 26, 27, 28, 26, 26, 566 26, 26, 26, 29, 30, 31, 14, 32, 33, 33, 567 33, 34, 35, 35, 35, 35, 36, 37, 35, 38, 568 39, 40, 41, 35, 35, 35, 35, 35, 42, 14, 569 43, 43, 43, 43, 43, 43, 14, 14, 14, 14, 570 14, 14, 14, 44, 14, 14, 45, 79, 52, 105, 571 46, 170, 53, 52, 105, 87, 79, 53, 54, 107, 572 172, 55, 129, 54, 116, 105, 55, 74, 16, 75, 573 76, 194, 130, 88, 47, 48, 79, 124, 49, 153, 574 575 15, 58, 59, 125, 60, 50, 111, 35, 51, 35, 576 60, 79, 35, 136, 35, 15, 58, 59, 89, 60, 577 143, 115, 60, 61, 154, 60, 74, 16, 75, 76, 578 56, 79, 147, 127, 77, 56, 148, 60, 61, 93, 579 93, 150, 115, 93, 93, 238, 152, 62, 99, 99, 580 99, 99, 99, 99, 99, 99, 146, 87, 79, 79, 581 146, 93, 62, 15, 16, 17, 117, 63, 589, 152, 582 192, 195, 129, 77, 100, 100, 100, 100, 100, 101, 583 143, 115, 130, 78, 94, 98, 98, 98, 98, 98, 584 98, 98, 98, 79, 118, 119, 155, 156, 120, 151, 585 586 162, 79, 83, 143, 115, 121, 185, 153, 122, 238, 587 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 588 65, 65, 65, 65, 65, 65, 65, 65, 15, 16, 589 17, 131, 63, 97, 85, 85, 85, 85, 85, 85, 590 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 591 79, 139, 115, 140, 152, 141, 154, 78, 79, 140, 592 191, 141, 85, 85, 85, 85, 85, 85, 85, 85, 593 143, 115, 201, 141, 141, 64, 65, 65, 65, 65, 594 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 595 65, 65, 65, 15, 16, 17, 67, 63, 141, 193, 596 597 79, 152, 68, 69, 70, 606, 196, 79, 134, 134, 598 79, 606, 134, 134, 79, 198, 71, 168, 168, 168, 599 168, 168, 168, 606, 155, 156, 79, 231, 159, 382, 600 134, 160, 160, 160, 160, 160, 160, 160, 160, 241, 601 72, 15, 16, 17, 67, 63, 532, 170, 89, 283, 602 68, 69, 70, 135, 162, 86, 214, 86, 86, 267, 603 606, 86, 86, 268, 71, 86, 170, 164, 165, 166, 604 164, 164, 164, 164, 164, 214, 93, 93, 86, 86, 605 93, 93, 79, 79, 79, 240, 83, 238, 72, 83, 606 168, 168, 168, 168, 168, 168, 168, 168, 93, 84, 607 608 79, 265, 85, 85, 85, 85, 85, 85, 85, 85, 609 95, 83, 96, 96, 96, 96, 96, 96, 96, 96, 610 97, 94, 83, 266, 98, 98, 98, 98, 98, 168, 611 168, 168, 168, 168, 168, 168, 168, 85, 85, 85, 612 85, 85, 85, 85, 85, 79, 551, 98, 98, 98, 613 98, 98, 98, 78, 145, 79, 280, 145, 145, 78, 614 382, 237, 78, 78, 145, 78, 78, 78, 104, 104, 615 104, 104, 104, 104, 104, 104, 97, 145, 279, 78, 616 104, 104, 104, 104, 104, 105, 105, 105, 105, 106, 617 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 618 619 105, 79, 105, 98, 98, 98, 98, 98, 98, 78, 620 78, 78, 78, 78, 78, 78, 78, 78, 78, 105, 621 105, 105, 105, 105, 105, 105, 105, 606, 249, 249, 622 249, 105, 105, 105, 105, 105, 177, 79, 79, 79, 623 105, 178, 170, 275, 179, 282, 180, 117, 532, 143, 624 115, 214, 97, 238, 78, 78, 78, 78, 78, 78, 625 114, 115, 78, 78, 78, 170, 78, 78, 134, 134, 626 78, 265, 134, 134, 214, 118, 119, 79, 79, 120, 627 431, 431, 78, 78, 78, 83, 121, 93, 323, 122, 628 134, 93, 79, 266, 281, 84, 146, 93, 85, 85, 629 630 85, 85, 85, 85, 85, 85, 79, 79, 373, 93, 631 93, 318, 324, 135, 606, 606, 606, 606, 606, 606, 632 606, 606, 160, 160, 160, 160, 160, 160, 160, 160, 633 160, 160, 160, 160, 160, 160, 160, 160, 484, 484, 634 123, 83, 242, 243, 244, 242, 242, 242, 242, 242, 635 83, 142, 487, 322, 606, 606, 606, 606, 606, 606, 636 606, 606, 78, 559, 78, 78, 78, 170, 78, 78, 637 253, 170, 78, 134, 79, 79, 255, 134, 606, 170, 638 255, 83, 79, 134, 78, 78, 78, 90, 255, 90, 639 90, 90, 372, 90, 90, 134, 134, 90, 247, 247, 640 641 248, 249, 249, 249, 249, 249, 211, 253, 170, 90, 642 90, 90, 92, 321, 78, 78, 92, 255, 78, 78, 643 360, 382, 92, 161, 361, 161, 161, 253, 170, 161, 644 161, 384, 371, 161, 92, 92, 78, 167, 167, 167, 645 167, 167, 167, 167, 167, 161, 161, 161, 358, 167, 646 167, 167, 167, 167, 201, 79, 202, 202, 202, 202, 647 202, 202, 219, 219, 219, 219, 219, 219, 219, 219, 648 359, 416, 167, 167, 167, 167, 167, 167, 173, 173, 649 173, 173, 173, 173, 173, 173, 97, 364, 83, 79, 650 173, 173, 173, 173, 173, 257, 257, 257, 257, 257, 651 652 257, 257, 257, 258, 258, 258, 258, 258, 259, 365, 653 253, 170, 79, 167, 167, 167, 167, 167, 167, 133, 654 300, 78, 78, 133, 574, 78, 78, 421, 606, 133, 655 256, 256, 256, 256, 256, 256, 256, 256, 606, 170, 656 419, 133, 133, 78, 201, 170, 202, 202, 202, 202, 657 202, 202, 202, 202, 289, 289, 289, 289, 289, 289, 658 289, 289, 211, 294, 295, 296, 294, 294, 294, 294, 659 294, 264, 264, 264, 264, 264, 264, 264, 264, 79, 660 201, 170, 203, 203, 203, 203, 203, 203, 203, 203, 661 253, 170, 298, 298, 298, 298, 298, 298, 467, 83, 662 663 255, 302, 302, 302, 302, 302, 302, 302, 302, 303, 664 303, 303, 303, 303, 304, 79, 201, 487, 204, 204, 665 204, 204, 204, 205, 202, 202, 606, 366, 301, 301, 666 301, 301, 301, 301, 301, 301, 606, 170, 325, 326, 667 327, 325, 325, 325, 325, 325, 300, 501, 501, 367, 668 468, 79, 78, 79, 206, 206, 206, 206, 206, 206, 669 206, 206, 368, 79, 170, 170, 206, 206, 206, 206, 670 206, 79, 374, 255, 300, 253, 170, 283, 79, 284, 671 284, 284, 284, 284, 284, 300, 79, 420, 469, 206, 672 206, 206, 206, 206, 206, 208, 209, 210, 210, 210, 673 674 210, 210, 210, 211, 253, 170, 434, 212, 212, 212, 675 212, 212, 79, 337, 346, 338, 338, 338, 338, 338, 676 338, 338, 338, 349, 349, 349, 349, 349, 350, 79, 677 212, 212, 212, 212, 212, 212, 170, 215, 216, 217, 678 215, 215, 215, 215, 215, 218, 510, 511, 511, 219, 679 219, 219, 219, 219, 337, 375, 339, 339, 339, 339, 680 339, 339, 339, 339, 309, 309, 309, 309, 309, 309, 681 309, 309, 219, 219, 219, 219, 219, 219, 220, 220, 682 220, 220, 220, 220, 220, 220, 606, 170, 550, 79, 683 220, 220, 220, 220, 220, 337, 346, 340, 340, 340, 684 685 340, 340, 341, 338, 338, 348, 348, 348, 348, 348, 686 348, 348, 348, 206, 206, 206, 206, 206, 206, 201, 687 549, 202, 202, 202, 202, 202, 202, 202, 202, 253, 688 170, 344, 344, 344, 344, 344, 344, 548, 606, 300, 689 347, 347, 347, 347, 347, 347, 347, 347, 387, 387, 690 387, 387, 387, 388, 79, 201, 170, 202, 202, 202, 691 202, 202, 202, 202, 202, 336, 336, 336, 336, 336, 692 336, 336, 336, 386, 386, 386, 386, 386, 386, 386, 693 386, 394, 395, 396, 394, 394, 394, 394, 394, 358, 694 79, 253, 170, 254, 254, 254, 254, 254, 254, 254, 695 696 254, 255, 529, 529, 434, 256, 256, 256, 256, 256, 697 606, 359, 385, 385, 385, 385, 385, 385, 385, 385, 698 337, 384, 338, 338, 338, 338, 338, 338, 256, 256, 699 256, 256, 256, 256, 170, 260, 261, 262, 260, 260, 700 260, 260, 260, 263, 170, 253, 170, 264, 264, 264, 701 264, 264, 337, 300, 338, 338, 338, 338, 338, 338, 702 338, 338, 355, 355, 355, 355, 355, 355, 355, 355, 703 264, 264, 264, 264, 264, 264, 283, 478, 284, 284, 704 284, 284, 284, 284, 284, 284, 337, 364, 338, 338, 705 338, 338, 338, 338, 338, 338, 253, 170, 399, 399, 706 707 399, 399, 399, 399, 170, 599, 346, 510, 511, 365, 708 599, 79, 283, 346, 285, 285, 285, 285, 285, 285, 709 285, 285, 403, 403, 403, 403, 403, 403, 403, 403, 710 404, 404, 404, 404, 404, 405, 606, 366, 402, 402, 711 402, 402, 402, 402, 402, 402, 79, 79, 283, 170, 712 286, 286, 286, 286, 286, 287, 284, 284, 346, 367, 713 461, 606, 422, 428, 429, 430, 428, 428, 428, 428, 714 428, 384, 170, 423, 424, 425, 426, 423, 423, 423, 715 423, 401, 462, 79, 253, 170, 298, 298, 298, 298, 716 298, 298, 298, 298, 255, 253, 170, 299, 299, 299, 717 718 299, 299, 299, 299, 299, 300, 79, 463, 503, 301, 719 301, 301, 301, 301, 375, 376, 376, 376, 376, 376, 720 376, 393, 393, 393, 393, 393, 393, 393, 393, 464, 721 504, 508, 301, 301, 301, 301, 301, 301, 170, 305, 722 306, 307, 305, 305, 305, 305, 305, 308, 79, 565, 723 565, 309, 309, 309, 309, 309, 436, 436, 436, 436, 724 436, 436, 436, 436, 437, 437, 437, 437, 437, 438, 725 507, 253, 170, 506, 309, 309, 309, 309, 309, 309, 726 283, 346, 284, 284, 284, 284, 284, 284, 284, 284, 727 606, 382, 435, 435, 435, 435, 435, 435, 435, 435, 728 729 444, 384, 445, 445, 445, 445, 445, 445, 445, 445, 730 505, 472, 575, 83, 83, 79, 283, 382, 284, 284, 731 284, 284, 284, 284, 284, 284, 444, 434, 446, 446, 732 446, 446, 446, 446, 446, 446, 444, 606, 447, 447, 733 447, 447, 447, 448, 445, 445, 79, 434, 461, 583, 734 583, 79, 332, 333, 334, 332, 332, 332, 332, 332, 735 335, 253, 170, 444, 336, 336, 336, 336, 336, 512, 736 462, 401, 409, 409, 409, 409, 409, 409, 409, 409, 737 455, 455, 455, 455, 455, 456, 384, 336, 336, 336, 738 336, 336, 336, 253, 170, 344, 344, 344, 344, 344, 739 740 344, 344, 344, 300, 253, 170, 345, 345, 345, 345, 741 345, 345, 345, 345, 346, 606, 170, 463, 347, 347, 742 347, 347, 347, 79, 472, 401, 253, 170, 451, 451, 743 451, 451, 451, 451, 331, 503, 401, 79, 513, 464, 744 466, 347, 347, 347, 347, 347, 347, 170, 351, 352, 745 353, 351, 351, 351, 351, 351, 354, 504, 465, 79, 746 355, 355, 355, 355, 355, 454, 454, 454, 454, 454, 747 454, 454, 454, 606, 79, 453, 453, 453, 453, 453, 748 453, 453, 453, 355, 355, 355, 355, 355, 355, 375, 749 376, 376, 376, 376, 376, 376, 376, 376, 470, 478, 750 751 546, 479, 479, 479, 479, 479, 479, 479, 479, 443, 752 443, 443, 443, 443, 443, 443, 443, 460, 470, 459, 753 470, 471, 547, 79, 375, 377, 377, 377, 377, 377, 754 377, 377, 377, 478, 470, 480, 480, 480, 480, 480, 755 480, 480, 480, 79, 478, 382, 481, 481, 481, 481, 756 481, 482, 479, 479, 470, 434, 470, 470, 79, 375, 757 378, 378, 378, 378, 378, 379, 376, 376, 489, 489, 758 489, 489, 489, 489, 489, 489, 490, 490, 490, 490, 759 490, 491, 606, 170, 488, 488, 488, 488, 488, 488, 760 488, 488, 401, 79, 382, 382, 383, 383, 383, 383, 761 762 383, 383, 383, 383, 384, 487, 588, 589, 385, 385, 763 385, 385, 385, 497, 498, 499, 497, 497, 497, 497, 764 497, 444, 458, 445, 445, 445, 445, 445, 445, 445, 765 445, 385, 385, 385, 385, 385, 385, 389, 390, 391, 766 389, 389, 389, 389, 389, 392, 588, 589, 457, 393, 767 393, 393, 393, 393, 444, 606, 445, 445, 445, 445, 768 445, 445, 445, 445, 444, 487, 445, 445, 445, 445, 769 445, 445, 393, 393, 393, 393, 393, 393, 253, 170, 770 399, 399, 399, 399, 399, 399, 399, 399, 346, 253, 771 170, 400, 400, 400, 400, 400, 400, 400, 400, 401, 772 773 253, 170, 331, 402, 402, 402, 402, 402, 554, 515, 774 401, 516, 517, 518, 515, 382, 516, 517, 518, 535, 775 535, 535, 535, 535, 536, 487, 402, 402, 402, 402, 776 402, 402, 170, 406, 407, 408, 406, 406, 406, 406, 777 406, 382, 606, 79, 382, 409, 409, 409, 409, 409, 778 251, 532, 532, 418, 532, 417, 519, 415, 590, 414, 779 472, 521, 473, 473, 473, 473, 473, 473, 409, 409, 780 409, 409, 409, 409, 375, 376, 376, 376, 376, 376, 781 376, 376, 376, 546, 572, 522, 523, 524, 522, 522, 782 522, 522, 522, 79, 413, 79, 525, 526, 527, 525, 783 784 525, 525, 525, 525, 412, 547, 573, 411, 79, 375, 785 376, 376, 376, 376, 376, 376, 376, 376, 79, 478, 786 572, 479, 479, 479, 479, 479, 479, 479, 479, 478, 787 410, 479, 479, 479, 479, 479, 479, 479, 479, 144, 788 144, 337, 573, 79, 382, 585, 432, 432, 432, 432, 789 432, 432, 432, 432, 384, 382, 331, 433, 433, 433, 790 433, 433, 433, 433, 433, 434, 251, 586, 585, 435, 791 435, 435, 435, 435, 478, 211, 479, 479, 479, 479, 792 479, 479, 496, 496, 496, 496, 496, 496, 496, 496, 793 586, 370, 435, 435, 435, 435, 435, 435, 439, 440, 794 795 441, 439, 439, 439, 439, 439, 442, 369, 363, 362, 796 443, 443, 443, 443, 443, 534, 534, 534, 534, 534, 797 534, 534, 534, 606, 357, 533, 533, 533, 533, 533, 798 533, 533, 533, 443, 443, 443, 443, 443, 443, 253, 799 170, 451, 451, 451, 451, 451, 451, 451, 451, 401, 800 253, 170, 452, 452, 452, 452, 452, 452, 452, 452, 801 356, 331, 251, 211, 453, 453, 453, 453, 453, 170, 802 541, 541, 541, 541, 541, 541, 541, 541, 170, 542, 803 542, 542, 542, 542, 542, 542, 542, 453, 453, 453, 804 453, 453, 453, 472, 211, 473, 473, 473, 473, 473, 805 806 473, 473, 473, 170, 543, 543, 543, 543, 543, 544, 807 541, 541, 606, 276, 606, 606, 606, 320, 319, 515, 808 317, 516, 517, 518, 316, 315, 314, 313, 79, 472, 809 312, 474, 474, 474, 474, 474, 474, 474, 474, 606, 810 311, 516, 517, 518, 606, 310, 606, 606, 518, 292, 811 606, 251, 606, 606, 606, 211, 288, 211, 103, 519, 812 276, 278, 276, 277, 79, 472, 519, 475, 475, 475, 813 475, 475, 476, 477, 477, 552, 276, 274, 553, 553, 814 553, 553, 553, 553, 553, 553, 519, 273, 272, 271, 815 270, 519, 269, 97, 211, 514, 514, 521, 251, 514, 816 817 79, 472, 211, 477, 477, 477, 473, 473, 473, 473, 818 473, 514, 514, 514, 520, 520, 103, 559, 520, 560, 819 560, 560, 560, 560, 560, 560, 560, 83, 199, 239, 820 520, 520, 520, 236, 235, 234, 79, 382, 233, 485, 821 485, 485, 485, 485, 485, 485, 485, 434, 382, 232, 822 486, 486, 486, 486, 486, 486, 486, 486, 487, 230, 823 229, 228, 488, 488, 488, 488, 488, 559, 227, 561, 824 561, 561, 561, 561, 561, 561, 561, 540, 540, 540, 825 540, 540, 540, 540, 540, 488, 488, 488, 488, 488, 826 488, 492, 493, 494, 492, 492, 492, 492, 492, 495, 827 828 226, 225, 224, 496, 496, 496, 496, 496, 559, 223, 829 562, 562, 562, 562, 562, 563, 560, 560, 569, 569, 830 569, 569, 569, 569, 569, 569, 496, 496, 496, 496, 831 496, 496, 253, 170, 502, 502, 502, 502, 502, 502, 832 502, 502, 472, 222, 473, 473, 473, 473, 473, 473, 833 473, 473, 570, 570, 570, 570, 570, 571, 606, 221, 834 568, 568, 568, 568, 568, 568, 568, 568, 170, 541, 835 541, 541, 541, 541, 541, 541, 541, 79, 472, 103, 836 473, 473, 473, 473, 473, 473, 473, 473, 170, 541, 837 541, 541, 541, 541, 541, 541, 541, 170, 541, 541, 838 839 541, 541, 541, 541, 553, 553, 553, 553, 553, 553, 840 553, 553, 95, 79, 382, 83, 530, 530, 530, 530, 841 530, 530, 530, 530, 487, 382, 83, 531, 531, 531, 842 531, 531, 531, 531, 531, 532, 199, 151, 152, 533, 843 533, 533, 533, 533, 553, 553, 553, 553, 553, 553, 844 553, 553, 576, 577, 578, 576, 576, 576, 576, 576, 845 146, 146, 533, 533, 533, 533, 533, 533, 537, 538, 846 539, 537, 537, 537, 537, 537, 138, 197, 132, 132, 847 540, 540, 540, 540, 540, 79, 554, 190, 555, 555, 848 555, 555, 555, 555, 579, 580, 581, 579, 579, 579, 849 850 579, 579, 189, 540, 540, 540, 540, 540, 540, 554, 851 188, 555, 555, 555, 555, 555, 555, 555, 555, 187, 852 559, 79, 560, 560, 560, 560, 560, 560, 560, 560, 853 559, 186, 560, 560, 560, 560, 560, 560, 560, 560, 854 184, 183, 182, 181, 79, 554, 176, 556, 556, 556, 855 556, 556, 556, 556, 556, 559, 175, 560, 560, 560, 856 560, 560, 560, 382, 174, 584, 584, 584, 584, 584, 857 584, 584, 584, 595, 595, 595, 595, 595, 595, 103, 858 79, 554, 78, 557, 557, 557, 557, 557, 558, 555, 859 555, 595, 595, 595, 595, 595, 595, 595, 595, 596, 860 861 596, 596, 596, 596, 596, 596, 596, 597, 597, 597, 862 597, 597, 598, 595, 595, 103, 79, 382, 163, 566, 863 566, 566, 566, 566, 566, 566, 566, 532, 382, 91, 864 567, 567, 567, 567, 567, 567, 567, 567, 83, 81, 865 80, 79, 568, 568, 568, 568, 568, 152, 600, 601, 866 602, 600, 600, 600, 600, 600, 590, 146, 591, 591, 867 591, 591, 591, 591, 138, 568, 568, 568, 568, 568, 868 568, 554, 132, 555, 555, 555, 555, 555, 555, 555, 869 555, 79, 595, 595, 595, 595, 595, 595, 595, 595, 870 128, 79, 595, 595, 595, 595, 595, 595, 595, 595, 871 872 126, 113, 112, 111, 110, 109, 79, 554, 108, 555, 873 555, 555, 555, 555, 555, 555, 555, 105, 103, 91, 874 603, 603, 603, 603, 603, 603, 603, 603, 600, 600, 875 600, 600, 600, 600, 600, 600, 81, 80, 79, 606, 876 606, 606, 79, 590, 606, 591, 591, 591, 591, 591, 877 591, 591, 591, 79, 606, 606, 606, 606, 606, 606, 878 606, 79, 604, 604, 604, 604, 604, 605, 603, 603, 879 603, 603, 603, 603, 603, 603, 603, 603, 79, 590, 880 606, 592, 592, 592, 592, 592, 592, 592, 592, 606, 881 606, 606, 606, 606, 606, 79, 603, 603, 603, 603, 882 883 603, 603, 606, 79, 606, 606, 606, 606, 606, 606, 884 606, 606, 606, 606, 79, 590, 606, 593, 593, 593, 885 593, 593, 594, 591, 591, 606, 606, 606, 606, 79, 886 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 887 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 888 79, 590, 606, 591, 591, 591, 591, 591, 591, 591, 889 591, 606, 606, 606, 606, 606, 606, 606, 606, 606, 890 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 891 606, 606, 606, 606, 606, 606, 79, 590, 606, 591, 892 591, 591, 591, 591, 591, 591, 591, 606, 606, 606, 893 894 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 895 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 896 606, 606, 79, 57, 57, 57, 57, 57, 57, 57, 897 57, 57, 57, 57, 57, 57, 57, 57, 57, 31, 898 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 899 31, 31, 31, 31, 31, 66, 66, 66, 66, 66, 900 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 901 66, 73, 73, 73, 73, 73, 73, 73, 73, 73, 902 73, 73, 73, 73, 73, 73, 73, 78, 606, 606, 903 606, 606, 606, 606, 606, 78, 78, 78, 606, 606, 904 905 78, 78, 78, 82, 82, 82, 82, 82, 82, 82, 906 82, 82, 82, 82, 82, 82, 82, 82, 82, 86, 907 606, 606, 606, 606, 86, 606, 606, 86, 86, 86, 908 86, 606, 86, 86, 86, 90, 606, 606, 606, 606, 909 606, 606, 606, 90, 90, 90, 606, 606, 90, 90, 910 90, 92, 606, 606, 92, 92, 606, 92, 606, 92, 911 92, 92, 606, 606, 92, 92, 92, 102, 102, 606, 912 606, 606, 102, 133, 606, 606, 133, 133, 606, 133, 913 606, 133, 133, 133, 606, 606, 133, 133, 133, 137, 914 606, 606, 137, 137, 606, 137, 606, 137, 137, 137, 915 916 606, 137, 606, 137, 137, 145, 606, 606, 145, 606, 917 606, 145, 606, 145, 145, 145, 145, 606, 145, 145, 918 145, 149, 149, 149, 149, 149, 149, 149, 149, 149, 919 149, 149, 149, 149, 149, 149, 149, 151, 151, 606, 920 151, 606, 151, 151, 151, 151, 151, 151, 151, 151, 921 151, 151, 151, 157, 157, 157, 157, 157, 157, 157, 922 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 923 158, 606, 158, 158, 158, 158, 158, 158, 158, 158, 924 158, 158, 158, 158, 158, 161, 606, 606, 606, 606, 925 161, 606, 606, 161, 161, 161, 606, 606, 161, 161, 926 927 161, 93, 606, 606, 93, 93, 606, 93, 606, 93, 928 93, 93, 606, 606, 93, 93, 93, 169, 169, 606, 929 606, 606, 169, 171, 171, 171, 606, 606, 606, 171, 930 134, 606, 606, 134, 134, 606, 134, 606, 134, 134, 931 134, 606, 606, 134, 134, 134, 200, 200, 200, 200, 932 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 933 200, 200, 207, 207, 606, 606, 606, 207, 213, 213, 934 213, 606, 606, 606, 213, 245, 245, 606, 606, 606, 935 245, 246, 246, 606, 606, 606, 246, 250, 250, 606, 936 606, 606, 250, 252, 252, 252, 606, 606, 606, 252, 937 938 288, 288, 606, 606, 606, 288, 290, 290, 606, 606, 939 606, 290, 291, 291, 606, 606, 606, 291, 293, 293, 940 293, 606, 606, 606, 293, 297, 297, 297, 297, 606, 941 606, 606, 297, 328, 328, 606, 606, 606, 328, 329, 942 329, 606, 606, 606, 329, 330, 330, 606, 606, 606, 943 330, 342, 342, 342, 606, 606, 606, 342, 343, 343, 944 343, 343, 606, 606, 606, 343, 380, 380, 606, 606, 945 606, 380, 381, 381, 606, 606, 606, 381, 397, 397, 946 397, 606, 606, 606, 397, 398, 398, 398, 398, 606, 947 606, 606, 398, 427, 427, 606, 606, 606, 427, 431, 948 949 606, 431, 431, 606, 606, 606, 431, 449, 449, 449, 950 606, 606, 606, 449, 450, 450, 450, 450, 606, 606, 951 606, 450, 483, 483, 606, 606, 606, 483, 484, 606, 952 484, 484, 606, 606, 606, 484, 500, 500, 500, 606, 953 606, 606, 500, 501, 501, 501, 606, 606, 606, 606, 954 501, 509, 509, 509, 509, 509, 509, 509, 509, 509, 955 509, 509, 509, 509, 509, 509, 509, 514, 514, 606, 956 514, 514, 514, 606, 606, 514, 514, 514, 606, 606, 957 514, 514, 514, 520, 520, 606, 520, 520, 520, 606, 958 606, 520, 520, 520, 606, 606, 520, 520, 520, 528, 959 960 528, 606, 606, 606, 528, 529, 606, 529, 529, 606, 961 606, 606, 529, 545, 545, 606, 606, 606, 606, 545, 962 564, 564, 606, 606, 606, 564, 565, 606, 565, 565, 963 606, 606, 606, 565, 582, 582, 606, 606, 606, 582, 964 583, 606, 583, 606, 606, 606, 606, 583, 587, 587, 965 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 966 587, 587, 587, 587, 13, 606, 606, 606, 606, 606, 967 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 968 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 969 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 970 971 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 972 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 973 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 974 606 975 } ; 976 977static yyconst short int yy_chk[3732] = 978 { 0, 979 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 980 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 981 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 982 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 983 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 984 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 985 1, 1, 1, 1, 1, 1, 2, 44, 3, 34, 986 2, 103, 3, 4, 47, 20, 126, 4, 3, 34, 987 103, 3, 52, 4, 44, 48, 4, 11, 11, 11, 988 11, 126, 52, 20, 2, 2, 56, 47, 2, 74, 989 990 5, 5, 5, 48, 5, 2, 50, 3, 2, 3, 991 5, 603, 4, 56, 4, 6, 6, 6, 20, 6, 992 64, 64, 5, 5, 75, 6, 12, 12, 12, 12, 993 3, 196, 68, 50, 11, 4, 70, 6, 6, 25, 994 25, 72, 72, 25, 25, 196, 74, 5, 27, 27, 995 27, 27, 27, 27, 27, 27, 68, 88, 124, 127, 996 70, 25, 6, 7, 7, 7, 45, 7, 587, 75, 997 124, 127, 129, 12, 28, 28, 28, 28, 28, 28, 998 139, 139, 129, 43, 25, 43, 43, 43, 43, 43, 999 43, 43, 43, 194, 45, 45, 77, 77, 45, 77, 1000 1001 88, 116, 123, 114, 114, 45, 116, 153, 45, 194, 1002 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1003 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 1004 8, 53, 8, 206, 53, 53, 53, 53, 53, 53, 1005 53, 53, 84, 84, 84, 84, 84, 84, 84, 84, 1006 114, 62, 62, 62, 153, 62, 154, 125, 206, 62, 1007 123, 62, 85, 85, 85, 85, 85, 85, 85, 85, 1008 143, 143, 202, 62, 62, 8, 8, 8, 8, 8, 1009 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1010 8, 8, 8, 9, 9, 9, 9, 9, 62, 125, 1011 1012 128, 154, 9, 9, 9, 86, 128, 202, 55, 55, 1013 136, 161, 55, 55, 185, 136, 9, 101, 101, 101, 1014 101, 101, 101, 86, 155, 155, 198, 185, 87, 584, 1015 55, 87, 87, 87, 87, 87, 87, 87, 87, 198, 1016 9, 10, 10, 10, 10, 10, 582, 171, 86, 284, 1017 10, 10, 10, 55, 161, 89, 171, 89, 89, 222, 1018 568, 89, 89, 222, 10, 89, 213, 95, 95, 95, 1019 95, 95, 95, 95, 95, 213, 92, 92, 89, 89, 1020 92, 92, 192, 195, 284, 195, 512, 192, 10, 19, 1021 99, 99, 99, 99, 99, 99, 99, 99, 92, 19, 1022 1023 95, 221, 19, 19, 19, 19, 19, 19, 19, 19, 1024 26, 191, 26, 26, 26, 26, 26, 26, 26, 26, 1025 26, 92, 237, 221, 26, 26, 26, 26, 26, 100, 1026 100, 100, 100, 100, 100, 100, 100, 131, 131, 131, 1027 131, 131, 131, 131, 131, 26, 512, 26, 26, 26, 1028 26, 26, 26, 32, 146, 238, 238, 146, 146, 32, 1029 567, 191, 32, 32, 146, 32, 32, 32, 32, 32, 1030 32, 32, 32, 32, 32, 32, 32, 146, 237, 32, 1031 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1032 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1033 1034 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1035 32, 32, 32, 32, 32, 32, 32, 32, 32, 35, 1036 35, 35, 35, 35, 35, 35, 35, 35, 210, 210, 1037 210, 35, 35, 35, 35, 35, 109, 231, 240, 241, 1038 35, 109, 252, 231, 109, 241, 109, 117, 565, 150, 1039 150, 252, 239, 240, 35, 35, 35, 35, 35, 35, 1040 42, 42, 42, 42, 42, 293, 42, 42, 133, 133, 1041 42, 265, 133, 133, 293, 117, 117, 239, 281, 117, 1042 388, 388, 42, 42, 42, 46, 117, 163, 281, 117, 1043 133, 163, 323, 265, 239, 46, 150, 163, 46, 46, 1044 1045 46, 46, 46, 46, 46, 46, 275, 282, 323, 163, 1046 163, 275, 282, 133, 142, 142, 142, 142, 142, 142, 1047 142, 142, 159, 159, 159, 159, 159, 159, 159, 159, 1048 160, 160, 160, 160, 160, 160, 160, 160, 438, 438, 1049 46, 63, 201, 201, 201, 201, 201, 201, 201, 201, 1050 279, 63, 564, 280, 63, 63, 63, 63, 63, 63, 1051 63, 63, 79, 560, 79, 79, 79, 297, 79, 79, 1052 254, 254, 79, 197, 280, 201, 297, 197, 256, 256, 1053 254, 321, 322, 197, 79, 79, 79, 91, 256, 91, 1054 91, 91, 322, 91, 91, 197, 197, 91, 209, 209, 1055 1056 209, 209, 209, 209, 209, 209, 209, 298, 298, 91, 1057 91, 91, 94, 279, 94, 94, 94, 298, 94, 94, 1058 313, 383, 94, 162, 313, 162, 162, 452, 452, 162, 1059 162, 383, 321, 162, 94, 94, 94, 96, 96, 96, 1060 96, 96, 96, 96, 96, 162, 162, 162, 312, 96, 1061 96, 96, 96, 96, 205, 368, 205, 205, 205, 205, 1062 205, 205, 214, 214, 214, 214, 214, 214, 214, 214, 1063 312, 368, 96, 96, 96, 96, 96, 96, 104, 104, 1064 104, 104, 104, 104, 104, 104, 104, 316, 371, 205, 1065 104, 104, 104, 104, 104, 216, 216, 216, 216, 216, 1066 1067 216, 216, 216, 217, 217, 217, 217, 217, 217, 316, 1068 299, 299, 373, 104, 104, 104, 104, 104, 104, 135, 1069 299, 135, 135, 135, 549, 135, 135, 373, 219, 135, 1070 219, 219, 219, 219, 219, 219, 219, 219, 453, 453, 1071 371, 135, 135, 135, 164, 545, 164, 164, 164, 164, 1072 164, 164, 164, 164, 247, 247, 247, 247, 247, 247, 1073 247, 247, 247, 253, 253, 253, 253, 253, 253, 253, 1074 253, 255, 255, 255, 255, 255, 255, 255, 255, 164, 1075 165, 541, 165, 165, 165, 165, 165, 165, 165, 165, 1076 259, 259, 259, 259, 259, 259, 259, 259, 419, 419, 1077 1078 259, 261, 261, 261, 261, 261, 261, 261, 261, 262, 1079 262, 262, 262, 262, 262, 165, 166, 529, 166, 166, 1080 166, 166, 166, 166, 166, 166, 264, 317, 264, 264, 1081 264, 264, 264, 264, 264, 264, 301, 301, 283, 283, 1082 283, 283, 283, 283, 283, 283, 301, 456, 456, 317, 1083 419, 166, 167, 318, 167, 167, 167, 167, 167, 167, 1084 167, 167, 318, 324, 342, 343, 167, 167, 167, 167, 1085 167, 283, 324, 342, 343, 344, 344, 287, 372, 287, 1086 287, 287, 287, 287, 287, 344, 420, 372, 420, 167, 1087 167, 167, 167, 167, 167, 170, 170, 170, 170, 170, 1088 1089 170, 170, 170, 170, 345, 345, 528, 170, 170, 170, 1090 170, 170, 287, 294, 345, 294, 294, 294, 294, 294, 1091 294, 294, 294, 307, 307, 307, 307, 307, 307, 513, 1092 170, 170, 170, 170, 170, 170, 172, 172, 172, 172, 1093 172, 172, 172, 172, 172, 172, 467, 467, 509, 172, 1094 172, 172, 172, 172, 295, 376, 295, 295, 295, 295, 1095 295, 295, 295, 295, 300, 300, 300, 300, 300, 300, 1096 300, 300, 172, 172, 172, 172, 172, 172, 173, 173, 1097 173, 173, 173, 173, 173, 173, 347, 347, 508, 376, 1098 173, 173, 173, 173, 173, 296, 347, 296, 296, 296, 1099 1100 296, 296, 296, 296, 296, 306, 306, 306, 306, 306, 1101 306, 306, 306, 173, 173, 173, 173, 173, 173, 203, 1102 507, 203, 203, 203, 203, 203, 203, 203, 203, 304, 1103 304, 304, 304, 304, 304, 304, 304, 506, 309, 304, 1104 309, 309, 309, 309, 309, 309, 309, 309, 334, 334, 1105 334, 334, 334, 334, 203, 204, 501, 204, 204, 204, 1106 204, 204, 204, 204, 204, 331, 331, 331, 331, 331, 1107 331, 331, 331, 333, 333, 333, 333, 333, 333, 333, 1108 333, 337, 337, 337, 337, 337, 337, 337, 337, 358, 1109 204, 215, 215, 215, 215, 215, 215, 215, 215, 215, 1110 1111 215, 215, 491, 491, 484, 215, 215, 215, 215, 215, 1112 336, 358, 336, 336, 336, 336, 336, 336, 336, 336, 1113 341, 483, 341, 341, 341, 341, 341, 341, 215, 215, 1114 215, 215, 215, 215, 218, 218, 218, 218, 218, 218, 1115 218, 218, 218, 218, 397, 502, 502, 218, 218, 218, 1116 218, 218, 339, 397, 339, 339, 339, 339, 339, 339, 1117 339, 339, 346, 346, 346, 346, 346, 346, 346, 346, 1118 218, 218, 218, 218, 218, 218, 242, 479, 242, 242, 1119 242, 242, 242, 242, 242, 242, 340, 364, 340, 340, 1120 340, 340, 340, 340, 340, 340, 350, 350, 350, 350, 1121 1122 350, 350, 350, 350, 398, 670, 350, 510, 510, 364, 1123 670, 242, 243, 398, 243, 243, 243, 243, 243, 243, 1124 243, 243, 352, 352, 352, 352, 352, 352, 352, 352, 1125 353, 353, 353, 353, 353, 353, 355, 366, 355, 355, 1126 355, 355, 355, 355, 355, 355, 374, 243, 244, 449, 1127 244, 244, 244, 244, 244, 244, 244, 244, 449, 366, 1128 414, 385, 374, 382, 382, 382, 382, 382, 382, 382, 1129 382, 385, 450, 375, 375, 375, 375, 375, 375, 375, 1130 375, 450, 414, 244, 257, 257, 257, 257, 257, 257, 1131 257, 257, 257, 257, 257, 260, 260, 260, 260, 260, 1132 1133 260, 260, 260, 260, 260, 260, 375, 415, 457, 260, 1134 260, 260, 260, 260, 379, 379, 379, 379, 379, 379, 1135 379, 384, 384, 384, 384, 384, 384, 384, 384, 415, 1136 457, 465, 260, 260, 260, 260, 260, 260, 263, 263, 1137 263, 263, 263, 263, 263, 263, 263, 263, 379, 536, 1138 536, 263, 263, 263, 263, 263, 390, 390, 390, 390, 1139 390, 390, 390, 390, 391, 391, 391, 391, 391, 391, 1140 460, 399, 399, 459, 263, 263, 263, 263, 263, 263, 1141 285, 399, 285, 285, 285, 285, 285, 285, 285, 285, 1142 393, 432, 393, 393, 393, 393, 393, 393, 393, 393, 1143 1144 394, 432, 394, 394, 394, 394, 394, 394, 394, 394, 1145 458, 473, 551, 551, 468, 285, 286, 433, 286, 286, 1146 286, 286, 286, 286, 286, 286, 395, 433, 395, 395, 1147 395, 395, 395, 395, 395, 395, 396, 435, 396, 396, 1148 396, 396, 396, 396, 396, 396, 473, 435, 461, 571, 1149 571, 286, 292, 292, 292, 292, 292, 292, 292, 292, 1150 292, 400, 400, 445, 292, 292, 292, 292, 292, 468, 1151 461, 400, 401, 401, 401, 401, 401, 401, 401, 401, 1152 408, 408, 408, 408, 408, 408, 431, 292, 292, 292, 1153 292, 292, 292, 302, 302, 302, 302, 302, 302, 302, 1154 1155 302, 302, 302, 302, 305, 305, 305, 305, 305, 305, 1156 305, 305, 305, 305, 305, 402, 402, 463, 305, 305, 1157 305, 305, 305, 469, 477, 402, 405, 405, 405, 405, 1158 405, 405, 405, 405, 427, 503, 405, 422, 469, 463, 1159 418, 305, 305, 305, 305, 305, 305, 308, 308, 308, 1160 308, 308, 308, 308, 308, 308, 308, 503, 417, 477, 1161 308, 308, 308, 308, 308, 407, 407, 407, 407, 407, 1162 407, 407, 407, 409, 416, 409, 409, 409, 409, 409, 1163 409, 409, 409, 308, 308, 308, 308, 308, 308, 325, 1164 325, 325, 325, 325, 325, 325, 325, 325, 421, 428, 1165 1166 505, 428, 428, 428, 428, 428, 428, 428, 428, 434, 1167 434, 434, 434, 434, 434, 434, 434, 413, 421, 412, 1168 421, 421, 505, 325, 326, 326, 326, 326, 326, 326, 1169 326, 326, 326, 429, 466, 429, 429, 429, 429, 429, 1170 429, 429, 429, 421, 430, 485, 430, 430, 430, 430, 1171 430, 430, 430, 430, 466, 485, 466, 466, 326, 327, 1172 327, 327, 327, 327, 327, 327, 327, 327, 440, 440, 1173 440, 440, 440, 440, 440, 440, 441, 441, 441, 441, 1174 441, 441, 443, 500, 443, 443, 443, 443, 443, 443, 1175 443, 443, 500, 327, 332, 486, 332, 332, 332, 332, 1176 1177 332, 332, 332, 332, 332, 486, 575, 575, 332, 332, 1178 332, 332, 332, 444, 444, 444, 444, 444, 444, 444, 1179 444, 446, 411, 446, 446, 446, 446, 446, 446, 446, 1180 446, 332, 332, 332, 332, 332, 332, 335, 335, 335, 1181 335, 335, 335, 335, 335, 335, 588, 588, 410, 335, 1182 335, 335, 335, 335, 447, 488, 447, 447, 447, 447, 1183 447, 447, 447, 447, 448, 488, 448, 448, 448, 448, 1184 448, 448, 335, 335, 335, 335, 335, 335, 348, 348, 1185 348, 348, 348, 348, 348, 348, 348, 348, 348, 351, 1186 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 1187 1188 451, 451, 381, 351, 351, 351, 351, 351, 555, 470, 1189 451, 470, 470, 470, 471, 530, 471, 471, 471, 494, 1190 494, 494, 494, 494, 494, 530, 351, 351, 351, 351, 1191 351, 351, 354, 354, 354, 354, 354, 354, 354, 354, 1192 354, 531, 533, 555, 566, 354, 354, 354, 354, 354, 1193 380, 531, 533, 370, 566, 369, 470, 363, 591, 362, 1194 476, 471, 476, 476, 476, 476, 476, 476, 354, 354, 1195 354, 354, 354, 354, 377, 377, 377, 377, 377, 377, 1196 377, 377, 377, 546, 548, 472, 472, 472, 472, 472, 1197 472, 472, 472, 591, 361, 476, 478, 478, 478, 478, 1198 1199 478, 478, 478, 478, 360, 546, 548, 357, 377, 378, 1200 378, 378, 378, 378, 378, 378, 378, 378, 472, 480, 1201 572, 480, 480, 480, 480, 480, 480, 480, 480, 481, 1202 356, 481, 481, 481, 481, 481, 481, 481, 481, 619, 1203 619, 338, 572, 378, 386, 574, 386, 386, 386, 386, 1204 386, 386, 386, 386, 386, 389, 330, 389, 389, 389, 1205 389, 389, 389, 389, 389, 389, 329, 574, 585, 389, 1206 389, 389, 389, 389, 482, 328, 482, 482, 482, 482, 1207 482, 482, 487, 487, 487, 487, 487, 487, 487, 487, 1208 585, 320, 389, 389, 389, 389, 389, 389, 392, 392, 1209 1210 392, 392, 392, 392, 392, 392, 392, 319, 315, 314, 1211 392, 392, 392, 392, 392, 493, 493, 493, 493, 493, 1212 493, 493, 493, 496, 311, 496, 496, 496, 496, 496, 1213 496, 496, 496, 392, 392, 392, 392, 392, 392, 403, 1214 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 1215 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, 1216 310, 291, 290, 289, 406, 406, 406, 406, 406, 497, 1217 497, 497, 497, 497, 497, 497, 497, 497, 498, 498, 1218 498, 498, 498, 498, 498, 498, 498, 406, 406, 406, 1219 406, 406, 406, 423, 288, 423, 423, 423, 423, 423, 1220 1221 423, 423, 423, 499, 499, 499, 499, 499, 499, 499, 1222 499, 499, 514, 278, 514, 514, 514, 277, 276, 515, 1223 274, 515, 515, 515, 273, 272, 271, 270, 423, 424, 1224 269, 424, 424, 424, 424, 424, 424, 424, 424, 516, 1225 268, 516, 516, 516, 517, 267, 517, 517, 517, 251, 1226 520, 250, 520, 520, 520, 249, 248, 246, 245, 514, 1227 236, 235, 234, 233, 424, 425, 515, 425, 425, 425, 1228 425, 425, 425, 425, 425, 518, 232, 229, 518, 518, 1229 518, 518, 518, 518, 518, 518, 516, 227, 226, 225, 1230 224, 517, 223, 220, 212, 519, 519, 520, 211, 519, 1231 1232 425, 426, 208, 426, 426, 426, 426, 426, 426, 426, 1233 426, 519, 519, 519, 521, 521, 207, 525, 521, 525, 1234 525, 525, 525, 525, 525, 525, 525, 200, 199, 193, 1235 521, 521, 521, 190, 189, 188, 426, 436, 187, 436, 1236 436, 436, 436, 436, 436, 436, 436, 436, 439, 186, 1237 439, 439, 439, 439, 439, 439, 439, 439, 439, 184, 1238 183, 182, 439, 439, 439, 439, 439, 526, 181, 526, 1239 526, 526, 526, 526, 526, 526, 526, 532, 532, 532, 1240 532, 532, 532, 532, 532, 439, 439, 439, 439, 439, 1241 439, 442, 442, 442, 442, 442, 442, 442, 442, 442, 1242 1243 180, 179, 178, 442, 442, 442, 442, 442, 527, 177, 1244 527, 527, 527, 527, 527, 527, 527, 527, 538, 538, 1245 538, 538, 538, 538, 538, 538, 442, 442, 442, 442, 1246 442, 442, 454, 454, 454, 454, 454, 454, 454, 454, 1247 454, 454, 474, 176, 474, 474, 474, 474, 474, 474, 1248 474, 474, 539, 539, 539, 539, 539, 539, 540, 175, 1249 540, 540, 540, 540, 540, 540, 540, 540, 542, 542, 1250 542, 542, 542, 542, 542, 542, 542, 474, 475, 169, 1251 475, 475, 475, 475, 475, 475, 475, 475, 543, 543, 1252 543, 543, 543, 543, 543, 543, 543, 544, 544, 544, 1253 1254 544, 544, 544, 544, 552, 552, 552, 552, 552, 552, 1255 552, 552, 168, 475, 489, 158, 489, 489, 489, 489, 1256 489, 489, 489, 489, 489, 492, 157, 492, 492, 492, 1257 492, 492, 492, 492, 492, 492, 156, 152, 151, 492, 1258 492, 492, 492, 492, 553, 553, 553, 553, 553, 553, 1259 553, 553, 554, 554, 554, 554, 554, 554, 554, 554, 1260 149, 145, 492, 492, 492, 492, 492, 492, 495, 495, 1261 495, 495, 495, 495, 495, 495, 138, 134, 132, 130, 1262 495, 495, 495, 495, 495, 554, 558, 122, 558, 558, 1263 558, 558, 558, 558, 559, 559, 559, 559, 559, 559, 1264 1265 559, 559, 121, 495, 495, 495, 495, 495, 495, 522, 1266 120, 522, 522, 522, 522, 522, 522, 522, 522, 119, 1267 561, 558, 561, 561, 561, 561, 561, 561, 561, 561, 1268 562, 118, 562, 562, 562, 562, 562, 562, 562, 562, 1269 113, 112, 111, 110, 522, 523, 108, 523, 523, 523, 1270 523, 523, 523, 523, 523, 563, 107, 563, 563, 563, 1271 563, 563, 563, 569, 106, 569, 569, 569, 569, 569, 1272 569, 569, 569, 598, 598, 598, 598, 598, 598, 102, 1273 523, 524, 98, 524, 524, 524, 524, 524, 524, 524, 1274 524, 579, 579, 579, 579, 579, 579, 579, 579, 580, 1275 1276 580, 580, 580, 580, 580, 580, 580, 581, 581, 581, 1277 581, 581, 581, 581, 581, 97, 524, 534, 93, 534, 1278 534, 534, 534, 534, 534, 534, 534, 534, 537, 90, 1279 537, 537, 537, 537, 537, 537, 537, 537, 82, 81, 1280 80, 78, 537, 537, 537, 537, 537, 73, 590, 590, 1281 590, 590, 590, 590, 590, 590, 594, 66, 594, 594, 1282 594, 594, 594, 594, 59, 537, 537, 537, 537, 537, 1283 537, 556, 54, 556, 556, 556, 556, 556, 556, 556, 1284 556, 590, 596, 596, 596, 596, 596, 596, 596, 596, 1285 51, 594, 597, 597, 597, 597, 597, 597, 597, 597, 1286 1287 49, 41, 40, 39, 38, 37, 556, 557, 36, 557, 1288 557, 557, 557, 557, 557, 557, 557, 33, 29, 23, 1289 600, 600, 600, 600, 600, 600, 600, 600, 601, 601, 1290 601, 601, 601, 601, 601, 601, 17, 15, 14, 13, 1291 0, 0, 557, 576, 0, 576, 576, 576, 576, 576, 1292 576, 576, 576, 600, 0, 0, 0, 0, 0, 0, 1293 0, 601, 602, 602, 602, 602, 602, 602, 602, 602, 1294 604, 604, 604, 604, 604, 604, 604, 604, 576, 577, 1295 0, 577, 577, 577, 577, 577, 577, 577, 577, 0, 1296 0, 0, 0, 0, 0, 602, 605, 605, 605, 605, 1297 1298 605, 605, 0, 604, 0, 0, 0, 0, 0, 0, 1299 0, 0, 0, 0, 577, 578, 0, 578, 578, 578, 1300 578, 578, 578, 578, 578, 0, 0, 0, 0, 605, 1301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1302 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1303 578, 592, 0, 592, 592, 592, 592, 592, 592, 592, 1304 592, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1306 0, 0, 0, 0, 0, 0, 592, 593, 0, 593, 1307 593, 593, 593, 593, 593, 593, 593, 0, 0, 0, 1308 1309 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1311 0, 0, 593, 607, 607, 607, 607, 607, 607, 607, 1312 607, 607, 607, 607, 607, 607, 607, 607, 607, 608, 1313 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 1314 608, 608, 608, 608, 608, 609, 609, 609, 609, 609, 1315 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 1316 609, 610, 610, 610, 610, 610, 610, 610, 610, 610, 1317 610, 610, 610, 610, 610, 610, 610, 611, 0, 0, 1318 0, 0, 0, 0, 0, 611, 611, 611, 0, 0, 1319 1320 611, 611, 611, 612, 612, 612, 612, 612, 612, 612, 1321 612, 612, 612, 612, 612, 612, 612, 612, 612, 613, 1322 0, 0, 0, 0, 613, 0, 0, 613, 613, 613, 1323 613, 0, 613, 613, 613, 614, 0, 0, 0, 0, 1324 0, 0, 0, 614, 614, 614, 0, 0, 614, 614, 1325 614, 615, 0, 0, 615, 615, 0, 615, 0, 615, 1326 615, 615, 0, 0, 615, 615, 615, 616, 616, 0, 1327 0, 0, 616, 617, 0, 0, 617, 617, 0, 617, 1328 0, 617, 617, 617, 0, 0, 617, 617, 617, 618, 1329 0, 0, 618, 618, 0, 618, 0, 618, 618, 618, 1330 1331 0, 618, 0, 618, 618, 620, 0, 0, 620, 0, 1332 0, 620, 0, 620, 620, 620, 620, 0, 620, 620, 1333 620, 621, 621, 621, 621, 621, 621, 621, 621, 621, 1334 621, 621, 621, 621, 621, 621, 621, 622, 622, 0, 1335 622, 0, 622, 622, 622, 622, 622, 622, 622, 622, 1336 622, 622, 622, 623, 623, 623, 623, 623, 623, 623, 1337 623, 623, 623, 623, 623, 623, 623, 623, 623, 624, 1338 624, 0, 624, 624, 624, 624, 624, 624, 624, 624, 1339 624, 624, 624, 624, 624, 625, 0, 0, 0, 0, 1340 625, 0, 0, 625, 625, 625, 0, 0, 625, 625, 1341 1342 625, 626, 0, 0, 626, 626, 0, 626, 0, 626, 1343 626, 626, 0, 0, 626, 626, 626, 627, 627, 0, 1344 0, 0, 627, 628, 628, 628, 0, 0, 0, 628, 1345 629, 0, 0, 629, 629, 0, 629, 0, 629, 629, 1346 629, 0, 0, 629, 629, 629, 630, 630, 630, 630, 1347 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 1348 630, 630, 631, 631, 0, 0, 0, 631, 632, 632, 1349 632, 0, 0, 0, 632, 633, 633, 0, 0, 0, 1350 633, 634, 634, 0, 0, 0, 634, 635, 635, 0, 1351 0, 0, 635, 636, 636, 636, 0, 0, 0, 636, 1352 1353 637, 637, 0, 0, 0, 637, 638, 638, 0, 0, 1354 0, 638, 639, 639, 0, 0, 0, 639, 640, 640, 1355 640, 0, 0, 0, 640, 641, 641, 641, 641, 0, 1356 0, 0, 641, 642, 642, 0, 0, 0, 642, 643, 1357 643, 0, 0, 0, 643, 644, 644, 0, 0, 0, 1358 644, 645, 645, 645, 0, 0, 0, 645, 646, 646, 1359 646, 646, 0, 0, 0, 646, 647, 647, 0, 0, 1360 0, 647, 648, 648, 0, 0, 0, 648, 649, 649, 1361 649, 0, 0, 0, 649, 650, 650, 650, 650, 0, 1362 0, 0, 650, 651, 651, 0, 0, 0, 651, 652, 1363 1364 0, 652, 652, 0, 0, 0, 652, 653, 653, 653, 1365 0, 0, 0, 653, 654, 654, 654, 654, 0, 0, 1366 0, 654, 655, 655, 0, 0, 0, 655, 656, 0, 1367 656, 656, 0, 0, 0, 656, 657, 657, 657, 0, 1368 0, 0, 657, 658, 658, 658, 0, 0, 0, 0, 1369 658, 659, 659, 659, 659, 659, 659, 659, 659, 659, 1370 659, 659, 659, 659, 659, 659, 659, 660, 660, 0, 1371 660, 660, 660, 0, 0, 660, 660, 660, 0, 0, 1372 660, 660, 660, 661, 661, 0, 661, 661, 661, 0, 1373 0, 661, 661, 661, 0, 0, 661, 661, 661, 662, 1374 1375 662, 0, 0, 0, 662, 663, 0, 663, 663, 0, 1376 0, 0, 663, 664, 664, 0, 0, 0, 0, 664, 1377 665, 665, 0, 0, 0, 665, 666, 0, 666, 666, 1378 0, 0, 0, 666, 667, 667, 0, 0, 0, 667, 1379 668, 0, 668, 0, 0, 0, 0, 668, 669, 669, 1380 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 1381 669, 669, 669, 669, 606, 606, 606, 606, 606, 606, 1382 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1383 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1384 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1385 1386 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1387 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1388 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 1389 606 1390 } ; 1391 1392static yy_state_type yy_last_accepting_state; 1393static char *yy_last_accepting_cpos; 1394 1395/* The intent behind this definition is that it'll catch 1396 * any uses of REJECT which flex missed. 1397 */ 1398#define REJECT reject_used_but_not_detected 1399#define yymore() yymore_used_but_not_detected 1400#define YY_MORE_ADJ 0 1401#define YY_RESTORE_YY_MORE_OFFSET 1402char *yytext; 1403#line 1 "toke.l" 1404#define INITIAL 0 1405#line 2 "toke.l" 1406/* 1407 * Copyright (c) 1996, 1998-2005, 2007-2012 1408 * Todd C. Miller <Todd.Miller@courtesan.com> 1409 * 1410 * Permission to use, copy, modify, and distribute this software for any 1411 * purpose with or without fee is hereby granted, provided that the above 1412 * copyright notice and this permission notice appear in all copies. 1413 * 1414 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1415 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1416 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1417 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1418 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1419 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1420 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1421 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 1422 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 1423 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1424 * 1425 * Sponsored in part by the Defense Advanced Research Projects 1426 * Agency (DARPA) and Air Force Research Laboratory, Air Force 1427 * Materiel Command, USAF, under agreement number F39502-99-1-0512. 1428 */ 1429 1430#include <config.h> 1431 1432#include <sys/types.h> 1433#include <sys/param.h> 1434#include <sys/stat.h> 1435#include <stdio.h> 1436#ifdef STDC_HEADERS 1437# include <stdlib.h> 1438# include <stddef.h> 1439#else 1440# ifdef HAVE_STDLIB_H 1441# include <stdlib.h> 1442# endif 1443#endif /* STDC_HEADERS */ 1444#ifdef HAVE_STRING_H 1445# include <string.h> 1446#endif /* HAVE_STRING_H */ 1447#ifdef HAVE_STRINGS_H 1448# include <strings.h> 1449#endif /* HAVE_STRINGS_H */ 1450#ifdef HAVE_UNISTD_H 1451# include <unistd.h> 1452#endif /* HAVE_UNISTD_H */ 1453#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) 1454# include <malloc.h> 1455#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ 1456#ifdef HAVE_DIRENT_H 1457# include <dirent.h> 1458# define NAMLEN(dirent) strlen((dirent)->d_name) 1459#else 1460# define dirent direct 1461# define NAMLEN(dirent) (dirent)->d_namlen 1462# ifdef HAVE_SYS_NDIR_H 1463# include <sys/ndir.h> 1464# endif 1465# ifdef HAVE_SYS_DIR_H 1466# include <sys/dir.h> 1467# endif 1468# ifdef HAVE_NDIR_H 1469# include <ndir.h> 1470# endif 1471#endif 1472#include <errno.h> 1473#include <ctype.h> 1474#include "sudo.h" 1475#include "parse.h" 1476#include "toke.h" 1477#include <gram.h> 1478#include "secure_path.h" 1479 1480extern YYSTYPE yylval; 1481extern int parse_error; 1482extern int sudoers_warnings; 1483int sudolineno; 1484int last_token; 1485char *sudoers; 1486 1487static int continued, prev_state, sawspace; 1488 1489#define ECHO ignore_result(fwrite(yytext, yyleng, 1, yyout)) 1490 1491static int _push_include __P((char *, int)); 1492static int pop_include __P((void)); 1493static char *parse_include __P((char *)); 1494 1495#define fill(a, b) fill_txt(a, b, 0) 1496 1497#define LEXRETURN(n) do { \ 1498 last_token = (n); \ 1499 return (n); \ 1500} while (0) 1501 1502#define push_include(_p) (_push_include((_p), FALSE)) 1503#define push_includedir(_p) (_push_include((_p), TRUE)) 1504 1505#ifdef TRACELEXER 1506#define LEXTRACE(msg) fputs(msg, stderr) 1507#else 1508#define LEXTRACE(msg) 1509#endif 1510#define YY_NO_INPUT 1 1511#define YY_NO_UNPUT 1 1512#define GOTDEFS 1 1513 1514#define GOTCMND 2 1515 1516#define STARTDEFS 3 1517 1518#define INDEFS 4 1519 1520#define INSTR 5 1521 1522#line 1522 "lex.yy.c" 1523 1524/* Macros after this point can all be overridden by user definitions in 1525 * section 1. 1526 */ 1527 1528#ifndef YY_SKIP_YYWRAP 1529#ifdef __cplusplus 1530extern "C" int yywrap YY_PROTO(( void )); 1531#else 1532extern int yywrap YY_PROTO(( void )); 1533#endif 1534#endif 1535 1536#ifndef YY_NO_UNPUT 1537static void yyunput YY_PROTO(( int c, char *buf_ptr )); 1538#endif 1539 1540#ifndef yytext_ptr 1541static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); 1542#endif 1543 1544#ifdef YY_NEED_STRLEN 1545static int yy_flex_strlen YY_PROTO(( yyconst char * )); 1546#endif 1547 1548#ifndef YY_NO_INPUT 1549#ifdef __cplusplus 1550static int yyinput YY_PROTO(( void )); 1551#else 1552static int input YY_PROTO(( void )); 1553#endif 1554#endif 1555 1556#if defined(YY_STACK_USED) && YY_STACK_USED 1557static int yy_start_stack_ptr = 0; 1558static int yy_start_stack_depth = 0; 1559static int *yy_start_stack = 0; 1560#ifndef YY_NO_PUSH_STATE 1561static void yy_push_state YY_PROTO(( int new_state )); 1562#endif 1563#ifndef YY_NO_POP_STATE 1564static void yy_pop_state YY_PROTO(( void )); 1565#endif 1566#ifndef YY_NO_TOP_STATE 1567static int yy_top_state YY_PROTO(( void )); 1568#endif 1569 1570#else 1571#define YY_NO_PUSH_STATE 1 1572#define YY_NO_POP_STATE 1 1573#define YY_NO_TOP_STATE 1 1574#endif 1575 1576#ifdef YY_MALLOC_DECL 1577YY_MALLOC_DECL 1578#else 1579#ifdef __STDC__ 1580#ifndef __cplusplus 1581#include <stdlib.h> 1582#endif 1583#else 1584/* Just try to get by without declaring the routines. This will fail 1585 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) 1586 * or sizeof(void*) != sizeof(int). 1587 */ 1588#endif 1589#endif 1590 1591/* Amount of stuff to slurp up with each read. */ 1592#ifndef YY_READ_BUF_SIZE 1593#define YY_READ_BUF_SIZE 8192 1594#endif 1595 1596/* Copy whatever the last rule matched to the standard output. */ 1597 1598#ifndef ECHO 1599/* This used to be an fputs(), but since the string might contain NUL's, 1600 * we now use fwrite(). 1601 */ 1602#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) 1603#endif 1604 1605/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, 1606 * is returned in "result". 1607 */ 1608#ifndef YY_INPUT 1609#define YY_INPUT(buf,result,max_size) \ 1610 if ( yy_current_buffer->yy_is_interactive ) \ 1611 { \ 1612 int c = '*', n; \ 1613 for ( n = 0; n < max_size && \ 1614 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ 1615 buf[n] = (char) c; \ 1616 if ( c == '\n' ) \ 1617 buf[n++] = (char) c; \ 1618 if ( c == EOF && ferror( yyin ) ) \ 1619 YY_FATAL_ERROR( "input in flex scanner failed" ); \ 1620 result = n; \ 1621 } \ 1622 else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ 1623 && ferror( yyin ) ) \ 1624 YY_FATAL_ERROR( "input in flex scanner failed" ); 1625#endif 1626 1627/* No semi-colon after return; correct usage is to write "yyterminate();" - 1628 * we don't want an extra ';' after the "return" because that will cause 1629 * some compilers to complain about unreachable statements. 1630 */ 1631#ifndef yyterminate 1632#define yyterminate() return YY_NULL 1633#endif 1634 1635/* Number of entries by which start-condition stack grows. */ 1636#ifndef YY_START_STACK_INCR 1637#define YY_START_STACK_INCR 25 1638#endif 1639 1640/* Report a fatal error. */ 1641#ifndef YY_FATAL_ERROR 1642#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) 1643#endif 1644 1645/* Default declaration of generated scanner - a define so the user can 1646 * easily add parameters. 1647 */ 1648#ifndef YY_DECL 1649#define YY_DECL int yylex YY_PROTO(( void )) 1650#endif 1651 1652/* Code executed at the beginning of each rule, after yytext and yyleng 1653 * have been set up. 1654 */ 1655#ifndef YY_USER_ACTION 1656#define YY_USER_ACTION 1657#endif 1658 1659/* Code executed at the end of each rule. */ 1660#ifndef YY_BREAK 1661#define YY_BREAK break; 1662#endif 1663 1664#define YY_RULE_SETUP \ 1665 if ( yyleng > 0 ) \ 1666 yy_current_buffer->yy_at_bol = \ 1667 (yytext[yyleng - 1] == '\n'); \ 1668 YY_USER_ACTION 1669 1670YY_DECL 1671 { 1672 register yy_state_type yy_current_state; 1673 register char *yy_cp, *yy_bp; 1674 register int yy_act; 1675 1676#line 130 "toke.l" 1677 1678#line 1678 "lex.yy.c" 1679 1680 if ( yy_init ) 1681 { 1682 yy_init = 0; 1683 1684#ifdef YY_USER_INIT 1685 YY_USER_INIT; 1686#endif 1687 1688 if ( ! yy_start ) 1689 yy_start = 1; /* first start state */ 1690 1691 if ( ! yyin ) 1692 yyin = stdin; 1693 1694 if ( ! yyout ) 1695 yyout = stdout; 1696 1697 if ( ! yy_current_buffer ) 1698 yy_current_buffer = 1699 yy_create_buffer( yyin, YY_BUF_SIZE ); 1700 1701 yy_load_buffer_state(); 1702 } 1703 1704 while ( 1 ) /* loops until end-of-file is reached */ 1705 { 1706 yy_cp = yy_c_buf_p; 1707 1708 /* Support of yytext. */ 1709 *yy_cp = yy_hold_char; 1710 1711 /* yy_bp points to the position in yy_ch_buf of the start of 1712 * the current run. 1713 */ 1714 yy_bp = yy_cp; 1715 1716 yy_current_state = yy_start; 1717 yy_current_state += YY_AT_BOL(); 1718yy_match: 1719 do 1720 { 1721 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; 1722 if ( yy_accept[yy_current_state] ) 1723 { 1724 yy_last_accepting_state = yy_current_state; 1725 yy_last_accepting_cpos = yy_cp; 1726 } 1727 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 1728 { 1729 yy_current_state = (int) yy_def[yy_current_state]; 1730 if ( yy_current_state >= 607 ) 1731 yy_c = yy_meta[(unsigned int) yy_c]; 1732 } 1733 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 1734 ++yy_cp; 1735 } 1736 while ( yy_base[yy_current_state] != 3665 ); 1737 1738yy_find_action: 1739 yy_act = yy_accept[yy_current_state]; 1740 if ( yy_act == 0 ) 1741 { /* have to back up */ 1742 yy_cp = yy_last_accepting_cpos; 1743 yy_current_state = yy_last_accepting_state; 1744 yy_act = yy_accept[yy_current_state]; 1745 } 1746 1747 YY_DO_BEFORE_ACTION; 1748 1749 1750do_action: /* This label is used only to access EOF actions. */ 1751 1752 1753 switch ( yy_act ) 1754 { /* beginning of action switch */ 1755 case 0: /* must back up */ 1756 /* undo the effects of YY_DO_BEFORE_ACTION */ 1757 *yy_cp = yy_hold_char; 1758 yy_cp = yy_last_accepting_cpos; 1759 yy_current_state = yy_last_accepting_state; 1760 goto yy_find_action; 1761 1762case 1: 1763YY_RULE_SETUP 1764#line 131 "toke.l" 1765{ 1766 LEXTRACE(", "); 1767 LEXRETURN(','); 1768 } /* return ',' */ 1769 YY_BREAK 1770case 2: 1771YY_RULE_SETUP 1772#line 136 "toke.l" 1773BEGIN STARTDEFS; 1774 YY_BREAK 1775case 3: 1776YY_RULE_SETUP 1777#line 138 "toke.l" 1778{ 1779 BEGIN INDEFS; 1780 LEXTRACE("DEFVAR "); 1781 if (!fill(yytext, yyleng)) 1782 yyterminate(); 1783 LEXRETURN(DEFVAR); 1784 } 1785 YY_BREAK 1786 1787case 4: 1788YY_RULE_SETUP 1789#line 147 "toke.l" 1790{ 1791 BEGIN STARTDEFS; 1792 LEXTRACE(", "); 1793 LEXRETURN(','); 1794 } /* return ',' */ 1795 YY_BREAK 1796case 5: 1797YY_RULE_SETUP 1798#line 153 "toke.l" 1799{ 1800 LEXTRACE("= "); 1801 LEXRETURN('='); 1802 } /* return '=' */ 1803 YY_BREAK 1804case 6: 1805YY_RULE_SETUP 1806#line 158 "toke.l" 1807{ 1808 LEXTRACE("+= "); 1809 LEXRETURN('+'); 1810 } /* return '+' */ 1811 YY_BREAK 1812case 7: 1813YY_RULE_SETUP 1814#line 163 "toke.l" 1815{ 1816 LEXTRACE("-= "); 1817 LEXRETURN('-'); 1818 } /* return '-' */ 1819 YY_BREAK 1820case 8: 1821YY_RULE_SETUP 1822#line 168 "toke.l" 1823{ 1824 LEXTRACE("BEGINSTR "); 1825 yylval.string = NULL; 1826 prev_state = YY_START; 1827 BEGIN INSTR; 1828 } 1829 YY_BREAK 1830case 9: 1831YY_RULE_SETUP 1832#line 175 "toke.l" 1833{ 1834 LEXTRACE("WORD(2) "); 1835 if (!fill(yytext, yyleng)) 1836 yyterminate(); 1837 LEXRETURN(WORD); 1838 } 1839 YY_BREAK 1840 1841 1842case 10: 1843YY_RULE_SETUP 1844#line 184 "toke.l" 1845{ 1846 /* Line continuation char followed by newline. */ 1847 sudolineno++; 1848 continued = TRUE; 1849 } 1850 YY_BREAK 1851case 11: 1852YY_RULE_SETUP 1853#line 190 "toke.l" 1854{ 1855 LEXTRACE("ENDSTR "); 1856 BEGIN prev_state; 1857 1858 if (yylval.string == NULL) { 1859 LEXTRACE("ERROR "); /* empty string */ 1860 LEXRETURN(ERROR); 1861 } 1862 if (prev_state == INITIAL) { 1863 switch (yylval.string[0]) { 1864 case '%': 1865 if (yylval.string[1] == '\0' || 1866 (yylval.string[1] == ':' && 1867 yylval.string[2] == '\0')) { 1868 LEXTRACE("ERROR "); /* empty group */ 1869 LEXRETURN(ERROR); 1870 } 1871 LEXTRACE("USERGROUP "); 1872 LEXRETURN(USERGROUP); 1873 case '+': 1874 if (yylval.string[1] == '\0') { 1875 LEXTRACE("ERROR "); /* empty netgroup */ 1876 LEXRETURN(ERROR); 1877 } 1878 LEXTRACE("NETGROUP "); 1879 LEXRETURN(NETGROUP); 1880 } 1881 } 1882 LEXTRACE("WORD(4) "); 1883 LEXRETURN(WORD); 1884 } 1885 YY_BREAK 1886case 12: 1887YY_RULE_SETUP 1888#line 222 "toke.l" 1889{ 1890 LEXTRACE("BACKSLASH "); 1891 if (!append(yytext, yyleng)) 1892 yyterminate(); 1893 } 1894 YY_BREAK 1895case 13: 1896YY_RULE_SETUP 1897#line 228 "toke.l" 1898{ 1899 LEXTRACE("STRBODY "); 1900 if (!append(yytext, yyleng)) 1901 yyterminate(); 1902 } 1903 YY_BREAK 1904 1905 1906case 14: 1907YY_RULE_SETUP 1908#line 236 "toke.l" 1909{ 1910 /* quoted fnmatch glob char, pass verbatim */ 1911 LEXTRACE("QUOTEDCHAR "); 1912 if (!fill_args(yytext, 2, sawspace)) 1913 yyterminate(); 1914 sawspace = FALSE; 1915 } 1916 YY_BREAK 1917case 15: 1918YY_RULE_SETUP 1919#line 244 "toke.l" 1920{ 1921 /* quoted sudoers special char, strip backslash */ 1922 LEXTRACE("QUOTEDCHAR "); 1923 if (!fill_args(yytext + 1, 1, sawspace)) 1924 yyterminate(); 1925 sawspace = FALSE; 1926 } 1927 YY_BREAK 1928case 16: 1929YY_RULE_SETUP 1930#line 252 "toke.l" 1931{ 1932 BEGIN INITIAL; 1933 yyless(0); 1934 LEXRETURN(COMMAND); 1935 } /* end of command line args */ 1936 YY_BREAK 1937case 17: 1938YY_RULE_SETUP 1939#line 258 "toke.l" 1940{ 1941 LEXTRACE("ARG "); 1942 if (!fill_args(yytext, yyleng, sawspace)) 1943 yyterminate(); 1944 sawspace = FALSE; 1945 } /* a command line arg */ 1946 YY_BREAK 1947 1948case 18: 1949YY_RULE_SETUP 1950#line 266 "toke.l" 1951{ 1952 char *path; 1953 1954 if (continued) { 1955 LEXTRACE("ERROR "); 1956 LEXRETURN(ERROR); 1957 } 1958 1959 if ((path = parse_include(yytext)) == NULL) 1960 yyterminate(); 1961 1962 LEXTRACE("INCLUDE\n"); 1963 1964 /* Push current buffer and switch to include file */ 1965 if (!push_include(path)) 1966 yyterminate(); 1967 } 1968 YY_BREAK 1969case 19: 1970YY_RULE_SETUP 1971#line 284 "toke.l" 1972{ 1973 char *path; 1974 1975 if (continued) { 1976 LEXTRACE("ERROR "); 1977 LEXRETURN(ERROR); 1978 } 1979 1980 if ((path = parse_include(yytext)) == NULL) 1981 yyterminate(); 1982 1983 LEXTRACE("INCLUDEDIR\n"); 1984 1985 /* 1986 * Push current buffer and switch to include file. 1987 * We simply ignore empty directories. 1988 */ 1989 if (!push_includedir(path) && parse_error) 1990 yyterminate(); 1991 } 1992 YY_BREAK 1993case 20: 1994YY_RULE_SETUP 1995#line 305 "toke.l" 1996{ 1997 char deftype; 1998 int n; 1999 2000 if (continued) { 2001 LEXTRACE("ERROR "); 2002 LEXRETURN(ERROR); 2003 } 2004 2005 for (n = 0; isblank((unsigned char)yytext[n]); n++) 2006 continue; 2007 n += sizeof("Defaults") - 1; 2008 if ((deftype = yytext[n++]) != '\0') { 2009 while (isblank((unsigned char)yytext[n])) 2010 n++; 2011 } 2012 BEGIN GOTDEFS; 2013 switch (deftype) { 2014 case ':': 2015 yyless(n); 2016 LEXTRACE("DEFAULTS_USER "); 2017 LEXRETURN(DEFAULTS_USER); 2018 case '>': 2019 yyless(n); 2020 LEXTRACE("DEFAULTS_RUNAS "); 2021 LEXRETURN(DEFAULTS_RUNAS); 2022 case '@': 2023 yyless(n); 2024 LEXTRACE("DEFAULTS_HOST "); 2025 LEXRETURN(DEFAULTS_HOST); 2026 case '!': 2027 yyless(n); 2028 LEXTRACE("DEFAULTS_CMND "); 2029 LEXRETURN(DEFAULTS_CMND); 2030 default: 2031 LEXTRACE("DEFAULTS "); 2032 LEXRETURN(DEFAULTS); 2033 } 2034 } 2035 YY_BREAK 2036case 21: 2037YY_RULE_SETUP 2038#line 345 "toke.l" 2039{ 2040 int n; 2041 2042 if (continued) { 2043 LEXTRACE("ERROR "); 2044 LEXRETURN(ERROR); 2045 } 2046 2047 for (n = 0; isblank((unsigned char)yytext[n]); n++) 2048 continue; 2049 switch (yytext[n]) { 2050 case 'H': 2051 LEXTRACE("HOSTALIAS "); 2052 LEXRETURN(HOSTALIAS); 2053 case 'C': 2054 LEXTRACE("CMNDALIAS "); 2055 LEXRETURN(CMNDALIAS); 2056 case 'U': 2057 LEXTRACE("USERALIAS "); 2058 LEXRETURN(USERALIAS); 2059 case 'R': 2060 LEXTRACE("RUNASALIAS "); 2061 LEXRETURN(RUNASALIAS); 2062 } 2063 } 2064 YY_BREAK 2065case 22: 2066YY_RULE_SETUP 2067#line 371 "toke.l" 2068{ 2069 /* cmnd does not require passwd for this user */ 2070 LEXTRACE("NOPASSWD "); 2071 LEXRETURN(NOPASSWD); 2072 } 2073 YY_BREAK 2074case 23: 2075YY_RULE_SETUP 2076#line 377 "toke.l" 2077{ 2078 /* cmnd requires passwd for this user */ 2079 LEXTRACE("PASSWD "); 2080 LEXRETURN(PASSWD); 2081 } 2082 YY_BREAK 2083case 24: 2084YY_RULE_SETUP 2085#line 383 "toke.l" 2086{ 2087 LEXTRACE("NOEXEC "); 2088 LEXRETURN(NOEXEC); 2089 } 2090 YY_BREAK 2091case 25: 2092YY_RULE_SETUP 2093#line 388 "toke.l" 2094{ 2095 LEXTRACE("EXEC "); 2096 LEXRETURN(EXEC); 2097 } 2098 YY_BREAK 2099case 26: 2100YY_RULE_SETUP 2101#line 393 "toke.l" 2102{ 2103 LEXTRACE("SETENV "); 2104 LEXRETURN(SETENV); 2105 } 2106 YY_BREAK 2107case 27: 2108YY_RULE_SETUP 2109#line 398 "toke.l" 2110{ 2111 LEXTRACE("NOSETENV "); 2112 LEXRETURN(NOSETENV); 2113 } 2114 YY_BREAK 2115case 28: 2116YY_RULE_SETUP 2117#line 403 "toke.l" 2118{ 2119 LEXTRACE("LOG_OUTPUT "); 2120 LEXRETURN(LOG_OUTPUT); 2121 } 2122 YY_BREAK 2123case 29: 2124YY_RULE_SETUP 2125#line 408 "toke.l" 2126{ 2127 LEXTRACE("NOLOG_OUTPUT "); 2128 LEXRETURN(NOLOG_OUTPUT); 2129 } 2130 YY_BREAK 2131case 30: 2132YY_RULE_SETUP 2133#line 413 "toke.l" 2134{ 2135 LEXTRACE("LOG_INPUT "); 2136 LEXRETURN(LOG_INPUT); 2137 } 2138 YY_BREAK 2139case 31: 2140YY_RULE_SETUP 2141#line 418 "toke.l" 2142{ 2143 LEXTRACE("NOLOG_INPUT "); 2144 LEXRETURN(NOLOG_INPUT); 2145 } 2146 YY_BREAK 2147case 32: 2148YY_RULE_SETUP 2149#line 423 "toke.l" 2150{ 2151 /* empty group or netgroup */ 2152 LEXTRACE("ERROR "); 2153 LEXRETURN(ERROR); 2154 } 2155 YY_BREAK 2156case 33: 2157YY_RULE_SETUP 2158#line 429 "toke.l" 2159{ 2160 /* netgroup */ 2161 if (!fill(yytext, yyleng)) 2162 yyterminate(); 2163 LEXTRACE("NETGROUP "); 2164 LEXRETURN(NETGROUP); 2165 } 2166 YY_BREAK 2167case 34: 2168YY_RULE_SETUP 2169#line 437 "toke.l" 2170{ 2171 /* group */ 2172 if (!fill(yytext, yyleng)) 2173 yyterminate(); 2174 LEXTRACE("USERGROUP "); 2175 LEXRETURN(USERGROUP); 2176 } 2177 YY_BREAK 2178case 35: 2179YY_RULE_SETUP 2180#line 445 "toke.l" 2181{ 2182 if (!fill(yytext, yyleng)) 2183 yyterminate(); 2184 LEXTRACE("NTWKADDR "); 2185 LEXRETURN(NTWKADDR); 2186 } 2187 YY_BREAK 2188case 36: 2189YY_RULE_SETUP 2190#line 452 "toke.l" 2191{ 2192 if (!fill(yytext, yyleng)) 2193 yyterminate(); 2194 LEXTRACE("NTWKADDR "); 2195 LEXRETURN(NTWKADDR); 2196 } 2197 YY_BREAK 2198case 37: 2199YY_RULE_SETUP 2200#line 459 "toke.l" 2201{ 2202 if (!ipv6_valid(yytext)) { 2203 LEXTRACE("ERROR "); 2204 LEXRETURN(ERROR); 2205 } 2206 if (!fill(yytext, yyleng)) 2207 yyterminate(); 2208 LEXTRACE("NTWKADDR "); 2209 LEXRETURN(NTWKADDR); 2210 } 2211 YY_BREAK 2212case 38: 2213YY_RULE_SETUP 2214#line 470 "toke.l" 2215{ 2216 if (!ipv6_valid(yytext)) { 2217 LEXTRACE("ERROR "); 2218 LEXRETURN(ERROR); 2219 } 2220 if (!fill(yytext, yyleng)) 2221 yyterminate(); 2222 LEXTRACE("NTWKADDR "); 2223 LEXRETURN(NTWKADDR); 2224 } 2225 YY_BREAK 2226case 39: 2227YY_RULE_SETUP 2228#line 481 "toke.l" 2229{ 2230 LEXTRACE("ALL "); 2231 LEXRETURN(ALL); 2232 2233 } 2234 YY_BREAK 2235case 40: 2236YY_RULE_SETUP 2237#line 487 "toke.l" 2238{ 2239#ifdef HAVE_SELINUX 2240 LEXTRACE("ROLE "); 2241 LEXRETURN(ROLE); 2242#else 2243 goto got_alias; 2244#endif 2245 } 2246 YY_BREAK 2247case 41: 2248YY_RULE_SETUP 2249#line 496 "toke.l" 2250{ 2251#ifdef HAVE_SELINUX 2252 LEXTRACE("TYPE "); 2253 LEXRETURN(TYPE); 2254#else 2255 goto got_alias; 2256#endif 2257 } 2258 YY_BREAK 2259case 42: 2260YY_RULE_SETUP 2261#line 505 "toke.l" 2262{ 2263#ifndef HAVE_SELINUX 2264 got_alias: 2265#endif 2266 if (!fill(yytext, yyleng)) 2267 yyterminate(); 2268 LEXTRACE("ALIAS "); 2269 LEXRETURN(ALIAS); 2270 } 2271 YY_BREAK 2272case 43: 2273YY_RULE_SETUP 2274#line 515 "toke.l" 2275{ 2276 /* no command args allowed for Defaults!/path */ 2277 if (!fill_cmnd(yytext, yyleng)) 2278 yyterminate(); 2279 LEXTRACE("COMMAND "); 2280 LEXRETURN(COMMAND); 2281 } 2282 YY_BREAK 2283case 44: 2284YY_RULE_SETUP 2285#line 523 "toke.l" 2286{ 2287 BEGIN GOTCMND; 2288 LEXTRACE("COMMAND "); 2289 if (!fill_cmnd(yytext, yyleng)) 2290 yyterminate(); 2291 } /* sudo -e */ 2292 YY_BREAK 2293case 45: 2294YY_RULE_SETUP 2295#line 530 "toke.l" 2296{ 2297 /* directories can't have args... */ 2298 if (yytext[yyleng - 1] == '/') { 2299 LEXTRACE("COMMAND "); 2300 if (!fill_cmnd(yytext, yyleng)) 2301 yyterminate(); 2302 LEXRETURN(COMMAND); 2303 } else { 2304 BEGIN GOTCMND; 2305 LEXTRACE("COMMAND "); 2306 if (!fill_cmnd(yytext, yyleng)) 2307 yyterminate(); 2308 } 2309 } /* a pathname */ 2310 YY_BREAK 2311case 46: 2312YY_RULE_SETUP 2313#line 545 "toke.l" 2314{ 2315 LEXTRACE("BEGINSTR "); 2316 yylval.string = NULL; 2317 prev_state = YY_START; 2318 BEGIN INSTR; 2319 } 2320 YY_BREAK 2321case 47: 2322YY_RULE_SETUP 2323#line 552 "toke.l" 2324{ 2325 /* a word */ 2326 if (!fill(yytext, yyleng)) 2327 yyterminate(); 2328 LEXTRACE("WORD(5) "); 2329 LEXRETURN(WORD); 2330 } 2331 YY_BREAK 2332case 48: 2333YY_RULE_SETUP 2334#line 560 "toke.l" 2335{ 2336 LEXTRACE("( "); 2337 LEXRETURN('('); 2338 } 2339 YY_BREAK 2340case 49: 2341YY_RULE_SETUP 2342#line 565 "toke.l" 2343{ 2344 LEXTRACE(") "); 2345 LEXRETURN(')'); 2346 } 2347 YY_BREAK 2348case 50: 2349YY_RULE_SETUP 2350#line 570 "toke.l" 2351{ 2352 LEXTRACE(", "); 2353 LEXRETURN(','); 2354 } /* return ',' */ 2355 YY_BREAK 2356case 51: 2357YY_RULE_SETUP 2358#line 575 "toke.l" 2359{ 2360 LEXTRACE("= "); 2361 LEXRETURN('='); 2362 } /* return '=' */ 2363 YY_BREAK 2364case 52: 2365YY_RULE_SETUP 2366#line 580 "toke.l" 2367{ 2368 LEXTRACE(": "); 2369 LEXRETURN(':'); 2370 } /* return ':' */ 2371 YY_BREAK 2372case 53: 2373YY_RULE_SETUP 2374#line 585 "toke.l" 2375{ 2376 if (yyleng & 1) { 2377 LEXTRACE("!"); 2378 LEXRETURN('!'); /* return '!' */ 2379 } 2380 } 2381 YY_BREAK 2382case 54: 2383YY_RULE_SETUP 2384#line 592 "toke.l" 2385{ 2386 if (YY_START == INSTR) { 2387 LEXTRACE("ERROR "); 2388 LEXRETURN(ERROR); /* line break in string */ 2389 } 2390 BEGIN INITIAL; 2391 sudolineno++; 2392 continued = FALSE; 2393 LEXTRACE("\n"); 2394 LEXRETURN(COMMENT); 2395 } /* return newline */ 2396 YY_BREAK 2397case 55: 2398YY_RULE_SETUP 2399#line 604 "toke.l" 2400{ /* throw away space/tabs */ 2401 sawspace = TRUE; /* but remember for fill_args */ 2402 } 2403 YY_BREAK 2404case 56: 2405YY_RULE_SETUP 2406#line 608 "toke.l" 2407{ 2408 sawspace = TRUE; /* remember for fill_args */ 2409 sudolineno++; 2410 continued = TRUE; 2411 } /* throw away EOL after \ */ 2412 YY_BREAK 2413case 57: 2414YY_RULE_SETUP 2415#line 614 "toke.l" 2416{ 2417 BEGIN INITIAL; 2418 sudolineno++; 2419 continued = FALSE; 2420 LEXTRACE("#\n"); 2421 LEXRETURN(COMMENT); 2422 } /* comment, not uid/gid */ 2423 YY_BREAK 2424case 58: 2425YY_RULE_SETUP 2426#line 622 "toke.l" 2427{ 2428 LEXTRACE("ERROR "); 2429 LEXRETURN(ERROR); 2430 } /* parse error */ 2431 YY_BREAK 2432case YY_STATE_EOF(INITIAL): 2433case YY_STATE_EOF(GOTDEFS): 2434case YY_STATE_EOF(GOTCMND): 2435case YY_STATE_EOF(STARTDEFS): 2436case YY_STATE_EOF(INDEFS): 2437case YY_STATE_EOF(INSTR): 2438#line 627 "toke.l" 2439{ 2440 if (YY_START != INITIAL) { 2441 BEGIN INITIAL; 2442 LEXTRACE("ERROR "); 2443 LEXRETURN(ERROR); 2444 } 2445 if (!pop_include()) 2446 yyterminate(); 2447 } 2448 YY_BREAK 2449case 59: 2450YY_RULE_SETUP 2451#line 637 "toke.l" 2452ECHO; 2453 YY_BREAK 2454#line 2454 "lex.yy.c" 2455 2456 case YY_END_OF_BUFFER: 2457 { 2458 /* Amount of text matched not including the EOB char. */ 2459 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; 2460 2461 /* Undo the effects of YY_DO_BEFORE_ACTION. */ 2462 *yy_cp = yy_hold_char; 2463 YY_RESTORE_YY_MORE_OFFSET 2464 2465 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) 2466 { 2467 /* We're scanning a new file or input source. It's 2468 * possible that this happened because the user 2469 * just pointed yyin at a new source and called 2470 * yylex(). If so, then we have to assure 2471 * consistency between yy_current_buffer and our 2472 * globals. Here is the right place to do so, because 2473 * this is the first action (other than possibly a 2474 * back-up) that will match for the new input source. 2475 */ 2476 yy_n_chars = yy_current_buffer->yy_n_chars; 2477 yy_current_buffer->yy_input_file = yyin; 2478 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; 2479 } 2480 2481 /* Note that here we test for yy_c_buf_p "<=" to the position 2482 * of the first EOB in the buffer, since yy_c_buf_p will 2483 * already have been incremented past the NUL character 2484 * (since all states make transitions on EOB to the 2485 * end-of-buffer state). Contrast this with the test 2486 * in input(). 2487 */ 2488 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) 2489 { /* This was really a NUL. */ 2490 yy_state_type yy_next_state; 2491 2492 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; 2493 2494 yy_current_state = yy_get_previous_state(); 2495 2496 /* Okay, we're now positioned to make the NUL 2497 * transition. We couldn't have 2498 * yy_get_previous_state() go ahead and do it 2499 * for us because it doesn't know how to deal 2500 * with the possibility of jamming (and we don't 2501 * want to build jamming into it because then it 2502 * will run more slowly). 2503 */ 2504 2505 yy_next_state = yy_try_NUL_trans( yy_current_state ); 2506 2507 yy_bp = yytext_ptr + YY_MORE_ADJ; 2508 2509 if ( yy_next_state ) 2510 { 2511 /* Consume the NUL. */ 2512 yy_cp = ++yy_c_buf_p; 2513 yy_current_state = yy_next_state; 2514 goto yy_match; 2515 } 2516 2517 else 2518 { 2519 yy_cp = yy_c_buf_p; 2520 goto yy_find_action; 2521 } 2522 } 2523 2524 else switch ( yy_get_next_buffer() ) 2525 { 2526 case EOB_ACT_END_OF_FILE: 2527 { 2528 yy_did_buffer_switch_on_eof = 0; 2529 2530 if ( yywrap() ) 2531 { 2532 /* Note: because we've taken care in 2533 * yy_get_next_buffer() to have set up 2534 * yytext, we can now set up 2535 * yy_c_buf_p so that if some total 2536 * hoser (like flex itself) wants to 2537 * call the scanner after we return the 2538 * YY_NULL, it'll still work - another 2539 * YY_NULL will get returned. 2540 */ 2541 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; 2542 2543 yy_act = YY_STATE_EOF(YY_START); 2544 goto do_action; 2545 } 2546 2547 else 2548 { 2549 if ( ! yy_did_buffer_switch_on_eof ) 2550 YY_NEW_FILE; 2551 } 2552 break; 2553 } 2554 2555 case EOB_ACT_CONTINUE_SCAN: 2556 yy_c_buf_p = 2557 yytext_ptr + yy_amount_of_matched_text; 2558 2559 yy_current_state = yy_get_previous_state(); 2560 2561 yy_cp = yy_c_buf_p; 2562 yy_bp = yytext_ptr + YY_MORE_ADJ; 2563 goto yy_match; 2564 2565 case EOB_ACT_LAST_MATCH: 2566 yy_c_buf_p = 2567 &yy_current_buffer->yy_ch_buf[yy_n_chars]; 2568 2569 yy_current_state = yy_get_previous_state(); 2570 2571 yy_cp = yy_c_buf_p; 2572 yy_bp = yytext_ptr + YY_MORE_ADJ; 2573 goto yy_find_action; 2574 } 2575 break; 2576 } 2577 2578 default: 2579 YY_FATAL_ERROR( 2580 "fatal flex scanner internal error--no action found" ); 2581 } /* end of action switch */ 2582 } /* end of scanning one token */ 2583 } /* end of yylex */ 2584 2585 2586/* yy_get_next_buffer - try to read in a new buffer 2587 * 2588 * Returns a code representing an action: 2589 * EOB_ACT_LAST_MATCH - 2590 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position 2591 * EOB_ACT_END_OF_FILE - end of file 2592 */ 2593 2594static int yy_get_next_buffer() 2595 { 2596 register char *dest = yy_current_buffer->yy_ch_buf; 2597 register char *source = yytext_ptr; 2598 register int number_to_move, i; 2599 int ret_val; 2600 2601 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) 2602 YY_FATAL_ERROR( 2603 "fatal flex scanner internal error--end of buffer missed" ); 2604 2605 if ( yy_current_buffer->yy_fill_buffer == 0 ) 2606 { /* Don't try to fill the buffer, so this is an EOF. */ 2607 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) 2608 { 2609 /* We matched a single character, the EOB, so 2610 * treat this as a final EOF. 2611 */ 2612 return EOB_ACT_END_OF_FILE; 2613 } 2614 2615 else 2616 { 2617 /* We matched some text prior to the EOB, first 2618 * process it. 2619 */ 2620 return EOB_ACT_LAST_MATCH; 2621 } 2622 } 2623 2624 /* Try to read more data. */ 2625 2626 /* First move last chars to start of buffer. */ 2627 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; 2628 2629 for ( i = 0; i < number_to_move; ++i ) 2630 *(dest++) = *(source++); 2631 2632 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) 2633 /* don't do the read, it's not guaranteed to return an EOF, 2634 * just force an EOF 2635 */ 2636 yy_current_buffer->yy_n_chars = yy_n_chars = 0; 2637 2638 else 2639 { 2640 int num_to_read = 2641 yy_current_buffer->yy_buf_size - number_to_move - 1; 2642 2643 while ( num_to_read <= 0 ) 2644 { /* Not enough room in the buffer - grow it. */ 2645#ifdef YY_USES_REJECT 2646 YY_FATAL_ERROR( 2647"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); 2648#else 2649 2650 /* just a shorter name for the current buffer */ 2651 YY_BUFFER_STATE b = yy_current_buffer; 2652 2653 int yy_c_buf_p_offset = 2654 (int) (yy_c_buf_p - b->yy_ch_buf); 2655 2656 if ( b->yy_is_our_buffer ) 2657 { 2658 int new_size = b->yy_buf_size * 2; 2659 2660 if ( new_size <= 0 ) 2661 b->yy_buf_size += b->yy_buf_size / 8; 2662 else 2663 b->yy_buf_size *= 2; 2664 2665 b->yy_ch_buf = (char *) 2666 /* Include room in for 2 EOB chars. */ 2667 yy_flex_realloc( (void *) b->yy_ch_buf, 2668 b->yy_buf_size + 2 ); 2669 } 2670 else 2671 /* Can't grow it, we don't own it. */ 2672 b->yy_ch_buf = 0; 2673 2674 if ( ! b->yy_ch_buf ) 2675 YY_FATAL_ERROR( 2676 "fatal error - scanner input buffer overflow" ); 2677 2678 yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; 2679 2680 num_to_read = yy_current_buffer->yy_buf_size - 2681 number_to_move - 1; 2682#endif 2683 } 2684 2685 if ( num_to_read > YY_READ_BUF_SIZE ) 2686 num_to_read = YY_READ_BUF_SIZE; 2687 2688 /* Read in more data. */ 2689 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), 2690 yy_n_chars, num_to_read ); 2691 2692 yy_current_buffer->yy_n_chars = yy_n_chars; 2693 } 2694 2695 if ( yy_n_chars == 0 ) 2696 { 2697 if ( number_to_move == YY_MORE_ADJ ) 2698 { 2699 ret_val = EOB_ACT_END_OF_FILE; 2700 yyrestart( yyin ); 2701 } 2702 2703 else 2704 { 2705 ret_val = EOB_ACT_LAST_MATCH; 2706 yy_current_buffer->yy_buffer_status = 2707 YY_BUFFER_EOF_PENDING; 2708 } 2709 } 2710 2711 else 2712 ret_val = EOB_ACT_CONTINUE_SCAN; 2713 2714 yy_n_chars += number_to_move; 2715 yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; 2716 yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; 2717 2718 yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; 2719 2720 return ret_val; 2721 } 2722 2723 2724/* yy_get_previous_state - get the state just before the EOB char was reached */ 2725 2726static yy_state_type yy_get_previous_state() 2727 { 2728 register yy_state_type yy_current_state; 2729 register char *yy_cp; 2730 2731 yy_current_state = yy_start; 2732 yy_current_state += YY_AT_BOL(); 2733 2734 for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) 2735 { 2736 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 2737 if ( yy_accept[yy_current_state] ) 2738 { 2739 yy_last_accepting_state = yy_current_state; 2740 yy_last_accepting_cpos = yy_cp; 2741 } 2742 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 2743 { 2744 yy_current_state = (int) yy_def[yy_current_state]; 2745 if ( yy_current_state >= 607 ) 2746 yy_c = yy_meta[(unsigned int) yy_c]; 2747 } 2748 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 2749 } 2750 2751 return yy_current_state; 2752 } 2753 2754 2755/* yy_try_NUL_trans - try to make a transition on the NUL character 2756 * 2757 * synopsis 2758 * next_state = yy_try_NUL_trans( current_state ); 2759 */ 2760 2761#ifdef YY_USE_PROTOS 2762static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) 2763#else 2764static yy_state_type yy_try_NUL_trans( yy_current_state ) 2765yy_state_type yy_current_state; 2766#endif 2767 { 2768 register int yy_is_jam; 2769 register char *yy_cp = yy_c_buf_p; 2770 2771 register YY_CHAR yy_c = 1; 2772 if ( yy_accept[yy_current_state] ) 2773 { 2774 yy_last_accepting_state = yy_current_state; 2775 yy_last_accepting_cpos = yy_cp; 2776 } 2777 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) 2778 { 2779 yy_current_state = (int) yy_def[yy_current_state]; 2780 if ( yy_current_state >= 607 ) 2781 yy_c = yy_meta[(unsigned int) yy_c]; 2782 } 2783 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; 2784 yy_is_jam = (yy_current_state == 606); 2785 2786 return yy_is_jam ? 0 : yy_current_state; 2787 } 2788 2789 2790#ifndef YY_NO_UNPUT 2791#ifdef YY_USE_PROTOS 2792static void yyunput( int c, register char *yy_bp ) 2793#else 2794static void yyunput( c, yy_bp ) 2795int c; 2796register char *yy_bp; 2797#endif 2798 { 2799 register char *yy_cp = yy_c_buf_p; 2800 2801 /* undo effects of setting up yytext */ 2802 *yy_cp = yy_hold_char; 2803 2804 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) 2805 { /* need to shift things up to make room */ 2806 /* +2 for EOB chars. */ 2807 register int number_to_move = yy_n_chars + 2; 2808 register char *dest = &yy_current_buffer->yy_ch_buf[ 2809 yy_current_buffer->yy_buf_size + 2]; 2810 register char *source = 2811 &yy_current_buffer->yy_ch_buf[number_to_move]; 2812 2813 while ( source > yy_current_buffer->yy_ch_buf ) 2814 *--dest = *--source; 2815 2816 yy_cp += (int) (dest - source); 2817 yy_bp += (int) (dest - source); 2818 yy_current_buffer->yy_n_chars = 2819 yy_n_chars = yy_current_buffer->yy_buf_size; 2820 2821 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) 2822 YY_FATAL_ERROR( "flex scanner push-back overflow" ); 2823 } 2824 2825 *--yy_cp = (char) c; 2826 2827 2828 yytext_ptr = yy_bp; 2829 yy_hold_char = *yy_cp; 2830 yy_c_buf_p = yy_cp; 2831 } 2832#endif /* ifndef YY_NO_UNPUT */ 2833 2834 2835#ifndef YY_NO_INPUT 2836#ifdef __cplusplus 2837static int yyinput() 2838#else 2839static int input() 2840#endif 2841 { 2842 int c; 2843 2844 *yy_c_buf_p = yy_hold_char; 2845 2846 if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) 2847 { 2848 /* yy_c_buf_p now points to the character we want to return. 2849 * If this occurs *before* the EOB characters, then it's a 2850 * valid NUL; if not, then we've hit the end of the buffer. 2851 */ 2852 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) 2853 /* This was really a NUL. */ 2854 *yy_c_buf_p = '\0'; 2855 2856 else 2857 { /* need more input */ 2858 int offset = yy_c_buf_p - yytext_ptr; 2859 ++yy_c_buf_p; 2860 2861 switch ( yy_get_next_buffer() ) 2862 { 2863 case EOB_ACT_LAST_MATCH: 2864 /* This happens because yy_g_n_b() 2865 * sees that we've accumulated a 2866 * token and flags that we need to 2867 * try matching the token before 2868 * proceeding. But for input(), 2869 * there's no matching to consider. 2870 * So convert the EOB_ACT_LAST_MATCH 2871 * to EOB_ACT_END_OF_FILE. 2872 */ 2873 2874 /* Reset buffer status. */ 2875 yyrestart( yyin ); 2876 2877 /* fall through */ 2878 2879 case EOB_ACT_END_OF_FILE: 2880 { 2881 if ( yywrap() ) 2882 return EOF; 2883 2884 if ( ! yy_did_buffer_switch_on_eof ) 2885 YY_NEW_FILE; 2886#ifdef __cplusplus 2887 return yyinput(); 2888#else 2889 return input(); 2890#endif 2891 } 2892 2893 case EOB_ACT_CONTINUE_SCAN: 2894 yy_c_buf_p = yytext_ptr + offset; 2895 break; 2896 } 2897 } 2898 } 2899 2900 c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ 2901 *yy_c_buf_p = '\0'; /* preserve yytext */ 2902 yy_hold_char = *++yy_c_buf_p; 2903 2904 yy_current_buffer->yy_at_bol = (c == '\n'); 2905 2906 return c; 2907 } 2908#endif /* ifndef YY_NO_INPUT */ 2909 2910 2911#ifdef YY_USE_PROTOS 2912void yyrestart( FILE *input_file ) 2913#else 2914void yyrestart( input_file ) 2915FILE *input_file; 2916#endif 2917 { 2918 if ( ! yy_current_buffer ) 2919 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); 2920 2921 yy_init_buffer( yy_current_buffer, input_file ); 2922 yy_load_buffer_state(); 2923 } 2924 2925 2926#ifdef YY_USE_PROTOS 2927void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) 2928#else 2929void yy_switch_to_buffer( new_buffer ) 2930YY_BUFFER_STATE new_buffer; 2931#endif 2932 { 2933 if ( yy_current_buffer == new_buffer ) 2934 return; 2935 2936 if ( yy_current_buffer ) 2937 { 2938 /* Flush out information for old buffer. */ 2939 *yy_c_buf_p = yy_hold_char; 2940 yy_current_buffer->yy_buf_pos = yy_c_buf_p; 2941 yy_current_buffer->yy_n_chars = yy_n_chars; 2942 } 2943 2944 yy_current_buffer = new_buffer; 2945 yy_load_buffer_state(); 2946 2947 /* We don't actually know whether we did this switch during 2948 * EOF (yywrap()) processing, but the only time this flag 2949 * is looked at is after yywrap() is called, so it's safe 2950 * to go ahead and always set it. 2951 */ 2952 yy_did_buffer_switch_on_eof = 1; 2953 } 2954 2955 2956#ifdef YY_USE_PROTOS 2957void yy_load_buffer_state( void ) 2958#else 2959void yy_load_buffer_state() 2960#endif 2961 { 2962 yy_n_chars = yy_current_buffer->yy_n_chars; 2963 yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; 2964 yyin = yy_current_buffer->yy_input_file; 2965 yy_hold_char = *yy_c_buf_p; 2966 } 2967 2968 2969#ifdef YY_USE_PROTOS 2970YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) 2971#else 2972YY_BUFFER_STATE yy_create_buffer( file, size ) 2973FILE *file; 2974int size; 2975#endif 2976 { 2977 YY_BUFFER_STATE b; 2978 2979 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); 2980 if ( ! b ) 2981 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 2982 2983 b->yy_buf_size = size; 2984 2985 /* yy_ch_buf has to be 2 characters longer than the size given because 2986 * we need to put in 2 end-of-buffer characters. 2987 */ 2988 b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); 2989 if ( ! b->yy_ch_buf ) 2990 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); 2991 2992 b->yy_is_our_buffer = 1; 2993 2994 yy_init_buffer( b, file ); 2995 2996 return b; 2997 } 2998 2999 3000#ifdef YY_USE_PROTOS 3001void yy_delete_buffer( YY_BUFFER_STATE b ) 3002#else 3003void yy_delete_buffer( b ) 3004YY_BUFFER_STATE b; 3005#endif 3006 { 3007 if ( ! b ) 3008 return; 3009 3010 if ( b == yy_current_buffer ) 3011 yy_current_buffer = (YY_BUFFER_STATE) 0; 3012 3013 if ( b->yy_is_our_buffer ) 3014 yy_flex_free( (void *) b->yy_ch_buf ); 3015 3016 yy_flex_free( (void *) b ); 3017 } 3018 3019 3020#ifndef YY_ALWAYS_INTERACTIVE 3021#ifndef YY_NEVER_INTERACTIVE 3022#include <unistd.h> 3023#endif 3024#endif 3025 3026#ifdef YY_USE_PROTOS 3027void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) 3028#else 3029void yy_init_buffer( b, file ) 3030YY_BUFFER_STATE b; 3031FILE *file; 3032#endif 3033 3034 3035 { 3036 int oerrno = errno; 3037 3038 yy_flush_buffer( b ); 3039 3040 b->yy_input_file = file; 3041 b->yy_fill_buffer = 1; 3042 3043#if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE 3044 b->yy_is_interactive = 1; 3045#else 3046#if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE 3047 b->yy_is_interactive = 0; 3048#else 3049 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; 3050#endif 3051#endif 3052 errno = oerrno; 3053 } 3054 3055 3056#ifdef YY_USE_PROTOS 3057void yy_flush_buffer( YY_BUFFER_STATE b ) 3058#else 3059void yy_flush_buffer( b ) 3060YY_BUFFER_STATE b; 3061#endif 3062 3063 { 3064 if ( ! b ) 3065 return; 3066 3067 b->yy_n_chars = 0; 3068 3069 /* We always need two end-of-buffer characters. The first causes 3070 * a transition to the end-of-buffer state. The second causes 3071 * a jam in that state. 3072 */ 3073 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; 3074 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; 3075 3076 b->yy_buf_pos = &b->yy_ch_buf[0]; 3077 3078 b->yy_at_bol = 1; 3079 b->yy_buffer_status = YY_BUFFER_NEW; 3080 3081 if ( b == yy_current_buffer ) 3082 yy_load_buffer_state(); 3083 } 3084 3085 3086#ifndef YY_NO_SCAN_BUFFER 3087#ifdef YY_USE_PROTOS 3088YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) 3089#else 3090YY_BUFFER_STATE yy_scan_buffer( base, size ) 3091char *base; 3092yy_size_t size; 3093#endif 3094 { 3095 YY_BUFFER_STATE b; 3096 3097 if ( size < 2 || 3098 base[size-2] != YY_END_OF_BUFFER_CHAR || 3099 base[size-1] != YY_END_OF_BUFFER_CHAR ) 3100 /* They forgot to leave room for the EOB's. */ 3101 return 0; 3102 3103 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); 3104 if ( ! b ) 3105 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); 3106 3107 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ 3108 b->yy_buf_pos = b->yy_ch_buf = base; 3109 b->yy_is_our_buffer = 0; 3110 b->yy_input_file = 0; 3111 b->yy_n_chars = b->yy_buf_size; 3112 b->yy_is_interactive = 0; 3113 b->yy_at_bol = 1; 3114 b->yy_fill_buffer = 0; 3115 b->yy_buffer_status = YY_BUFFER_NEW; 3116 3117 yy_switch_to_buffer( b ); 3118 3119 return b; 3120 } 3121#endif 3122 3123 3124#ifndef YY_NO_SCAN_STRING 3125#ifdef YY_USE_PROTOS 3126YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) 3127#else 3128YY_BUFFER_STATE yy_scan_string( yy_str ) 3129yyconst char *yy_str; 3130#endif 3131 { 3132 int len; 3133 for ( len = 0; yy_str[len]; ++len ) 3134 ; 3135 3136 return yy_scan_bytes( yy_str, len ); 3137 } 3138#endif 3139 3140 3141#ifndef YY_NO_SCAN_BYTES 3142#ifdef YY_USE_PROTOS 3143YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) 3144#else 3145YY_BUFFER_STATE yy_scan_bytes( bytes, len ) 3146yyconst char *bytes; 3147int len; 3148#endif 3149 { 3150 YY_BUFFER_STATE b; 3151 char *buf; 3152 yy_size_t n; 3153 int i; 3154 3155 /* Get memory for full buffer, including space for trailing EOB's. */ 3156 n = len + 2; 3157 buf = (char *) yy_flex_alloc( n ); 3158 if ( ! buf ) 3159 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); 3160 3161 for ( i = 0; i < len; ++i ) 3162 buf[i] = bytes[i]; 3163 3164 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; 3165 3166 b = yy_scan_buffer( buf, n ); 3167 if ( ! b ) 3168 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); 3169 3170 /* It's okay to grow etc. this buffer, and we should throw it 3171 * away when we're done. 3172 */ 3173 b->yy_is_our_buffer = 1; 3174 3175 return b; 3176 } 3177#endif 3178 3179 3180#ifndef YY_NO_PUSH_STATE 3181#ifdef YY_USE_PROTOS 3182static void yy_push_state( int new_state ) 3183#else 3184static void yy_push_state( new_state ) 3185int new_state; 3186#endif 3187 { 3188 if ( yy_start_stack_ptr >= yy_start_stack_depth ) 3189 { 3190 yy_size_t new_size; 3191 3192 yy_start_stack_depth += YY_START_STACK_INCR; 3193 new_size = yy_start_stack_depth * sizeof( int ); 3194 3195 if ( ! yy_start_stack ) 3196 yy_start_stack = (int *) yy_flex_alloc( new_size ); 3197 3198 else 3199 yy_start_stack = (int *) yy_flex_realloc( 3200 (void *) yy_start_stack, new_size ); 3201 3202 if ( ! yy_start_stack ) 3203 YY_FATAL_ERROR( 3204 "out of memory expanding start-condition stack" ); 3205 } 3206 3207 yy_start_stack[yy_start_stack_ptr++] = YY_START; 3208 3209 BEGIN(new_state); 3210 } 3211#endif 3212 3213 3214#ifndef YY_NO_POP_STATE 3215static void yy_pop_state() 3216 { 3217 if ( --yy_start_stack_ptr < 0 ) 3218 YY_FATAL_ERROR( "start-condition stack underflow" ); 3219 3220 BEGIN(yy_start_stack[yy_start_stack_ptr]); 3221 } 3222#endif 3223 3224 3225#ifndef YY_NO_TOP_STATE 3226static int yy_top_state() 3227 { 3228 return yy_start_stack[yy_start_stack_ptr - 1]; 3229 } 3230#endif 3231 3232#ifndef YY_EXIT_FAILURE 3233#define YY_EXIT_FAILURE 2 3234#endif 3235 3236#ifdef YY_USE_PROTOS 3237static void yy_fatal_error( yyconst char msg[] ) 3238#else 3239static void yy_fatal_error( msg ) 3240char msg[]; 3241#endif 3242 { 3243 (void) fprintf( stderr, "%s\n", msg ); 3244 exit( YY_EXIT_FAILURE ); 3245 } 3246 3247 3248 3249/* Redefine yyless() so it works in section 3 code. */ 3250 3251#undef yyless 3252#define yyless(n) \ 3253 do \ 3254 { \ 3255 /* Undo effects of setting up yytext. */ \ 3256 yytext[yyleng] = yy_hold_char; \ 3257 yy_c_buf_p = yytext + n; \ 3258 yy_hold_char = *yy_c_buf_p; \ 3259 *yy_c_buf_p = '\0'; \ 3260 yyleng = n; \ 3261 } \ 3262 while ( 0 ) 3263 3264 3265/* Internal utility routines. */ 3266 3267#ifndef yytext_ptr 3268#ifdef YY_USE_PROTOS 3269static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) 3270#else 3271static void yy_flex_strncpy( s1, s2, n ) 3272char *s1; 3273yyconst char *s2; 3274int n; 3275#endif 3276 { 3277 register int i; 3278 for ( i = 0; i < n; ++i ) 3279 s1[i] = s2[i]; 3280 } 3281#endif 3282 3283#ifdef YY_NEED_STRLEN 3284#ifdef YY_USE_PROTOS 3285static int yy_flex_strlen( yyconst char *s ) 3286#else 3287static int yy_flex_strlen( s ) 3288yyconst char *s; 3289#endif 3290 { 3291 register int n; 3292 for ( n = 0; s[n]; ++n ) 3293 ; 3294 3295 return n; 3296 } 3297#endif 3298 3299 3300#ifdef YY_USE_PROTOS 3301static void *yy_flex_alloc( yy_size_t size ) 3302#else 3303static void *yy_flex_alloc( size ) 3304yy_size_t size; 3305#endif 3306 { 3307 return (void *) malloc( size ); 3308 } 3309 3310#ifdef YY_USE_PROTOS 3311static void *yy_flex_realloc( void *ptr, yy_size_t size ) 3312#else 3313static void *yy_flex_realloc( ptr, size ) 3314void *ptr; 3315yy_size_t size; 3316#endif 3317 { 3318 /* The cast to (char *) in the following accommodates both 3319 * implementations that use char* generic pointers, and those 3320 * that use void* generic pointers. It works with the latter 3321 * because both ANSI C and C++ allow castless assignment from 3322 * any pointer type to void*, and deal with argument conversions 3323 * as though doing an assignment. 3324 */ 3325 return (void *) realloc( (char *) ptr, size ); 3326 } 3327 3328#ifdef YY_USE_PROTOS 3329static void yy_flex_free( void *ptr ) 3330#else 3331static void yy_flex_free( ptr ) 3332void *ptr; 3333#endif 3334 { 3335 free( ptr ); 3336 } 3337 3338#if defined(YY_MAIN) && YY_MAIN 3339int main() 3340 { 3341 yylex(); 3342 return 0; 3343 } 3344#endif 3345#line 637 "toke.l" 3346 3347struct path_list { 3348 char *path; 3349 struct path_list *next; 3350}; 3351 3352struct include_stack { 3353 YY_BUFFER_STATE bs; 3354 char *path; 3355 struct path_list *more; /* more files in case of includedir */ 3356 int lineno; 3357 int keepopen; 3358}; 3359 3360static int 3361pl_compare(v1, v2) 3362 const void *v1; 3363 const void *v2; 3364{ 3365 const struct path_list * const *p1 = v1; 3366 const struct path_list * const *p2 = v2; 3367 3368 return strcmp((*p1)->path, (*p2)->path); 3369} 3370 3371static char * 3372switch_dir(stack, dirpath) 3373 struct include_stack *stack; 3374 char *dirpath; 3375{ 3376 DIR *dir; 3377 int i, count = 0; 3378 char *path = NULL; 3379 struct dirent *dent; 3380 struct stat sb; 3381 struct path_list *pl, *first = NULL; 3382 struct path_list **sorted = NULL; 3383 3384 if (!(dir = opendir(dirpath))) { 3385 if (errno != ENOENT) { 3386 char *errbuf; 3387 if (asprintf(&errbuf, "%s: %s", dirpath, strerror(errno)) != -1) { 3388 yyerror(errbuf); 3389 free(errbuf); 3390 } else { 3391 yyerror("unable to allocate memory"); 3392 } 3393 } 3394 goto done; 3395 } 3396 while ((dent = readdir(dir))) { 3397 /* Ignore files that end in '~' or have a '.' in them. */ 3398 if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~' 3399 || strchr(dent->d_name, '.') != NULL) { 3400 continue; 3401 } 3402 if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) { 3403 closedir(dir); 3404 goto bad; 3405 } 3406 if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) { 3407 efree(path); 3408 path = NULL; 3409 continue; 3410 } 3411 pl = malloc(sizeof(*pl)); 3412 if (pl == NULL) 3413 goto bad; 3414 pl->path = path; 3415 pl->next = first; 3416 first = pl; 3417 count++; 3418 } 3419 closedir(dir); 3420 3421 if (count == 0) 3422 goto done; 3423 3424 /* Sort the list as an array. */ 3425 sorted = malloc(sizeof(*sorted) * count); 3426 if (sorted == NULL) 3427 goto bad; 3428 pl = first; 3429 for (i = 0; i < count; i++) { 3430 sorted[i] = pl; 3431 pl = pl->next; 3432 } 3433 qsort(sorted, count, sizeof(*sorted), pl_compare); 3434 3435 /* Apply sorting to the list. */ 3436 first = sorted[0]; 3437 sorted[count - 1]->next = NULL; 3438 for (i = 1; i < count; i++) 3439 sorted[i - 1]->next = sorted[i]; 3440 efree(sorted); 3441 3442 /* Pull out the first element for parsing, leave the rest for later. */ 3443 if (count) { 3444 path = first->path; 3445 pl = first->next; 3446 efree(first); 3447 stack->more = pl; 3448 } else { 3449 path = NULL; 3450 } 3451done: 3452 efree(dirpath); 3453 return path; 3454bad: 3455 while (first != NULL) { 3456 pl = first; 3457 first = pl->next; 3458 free(pl->path); 3459 free(pl); 3460 } 3461 efree(sorted); 3462 efree(dirpath); 3463 efree(path); 3464 return NULL; 3465} 3466 3467#define MAX_SUDOERS_DEPTH 128 3468#define SUDOERS_STACK_INCREMENT 16 3469 3470static size_t istacksize, idepth; 3471static struct include_stack *istack; 3472static int keepopen; 3473 3474void 3475init_lexer() 3476{ 3477 struct path_list *pl; 3478 3479 while (idepth) { 3480 idepth--; 3481 while ((pl = istack[idepth].more) != NULL) { 3482 istack[idepth].more = pl->next; 3483 efree(pl->path); 3484 efree(pl); 3485 } 3486 efree(istack[idepth].path); 3487 if (idepth && !istack[idepth].keepopen) 3488 fclose(istack[idepth].bs->yy_input_file); 3489 yy_delete_buffer(istack[idepth].bs); 3490 } 3491 efree(istack); 3492 istack = NULL; 3493 istacksize = idepth = 0; 3494 sudolineno = 1; 3495 keepopen = FALSE; 3496 sawspace = FALSE; 3497 continued = FALSE; 3498 prev_state = INITIAL; 3499} 3500 3501static int 3502_push_include(path, isdir) 3503 char *path; 3504 int isdir; 3505{ 3506 struct path_list *pl; 3507 FILE *fp; 3508 3509 /* push current state onto stack */ 3510 if (idepth >= istacksize) { 3511 if (idepth > MAX_SUDOERS_DEPTH) { 3512 yyerror("too many levels of includes"); 3513 return FALSE; 3514 } 3515 istacksize += SUDOERS_STACK_INCREMENT; 3516 istack = (struct include_stack *) realloc(istack, 3517 sizeof(*istack) * istacksize); 3518 if (istack == NULL) { 3519 yyerror("unable to allocate memory"); 3520 return FALSE; 3521 } 3522 } 3523 if (isdir) { 3524 struct stat sb; 3525 switch (sudo_secure_dir(path, SUDOERS_UID, SUDOERS_GID, &sb)) { 3526 case SUDO_PATH_SECURE: 3527 break; 3528 case SUDO_PATH_MISSING: 3529 return FALSE; 3530 case SUDO_PATH_BAD_TYPE: 3531 errno = ENOTDIR; 3532 if (sudoers_warnings) { 3533 warning(path); 3534 } 3535 return FALSE; 3536 case SUDO_PATH_WRONG_OWNER: 3537 if (sudoers_warnings) { 3538 warningx("%s is owned by uid %u, should be %u", 3539 path, (unsigned int) sb.st_uid, 3540 (unsigned int) SUDOERS_UID); 3541 } 3542 return FALSE; 3543 case SUDO_PATH_WORLD_WRITABLE: 3544 if (sudoers_warnings) { 3545 warningx("%s is world writable", path); 3546 } 3547 return FALSE; 3548 case SUDO_PATH_GROUP_WRITABLE: 3549 if (sudoers_warnings) { 3550 warningx("%s is owned by gid %u, should be %u", 3551 path, (unsigned int) sb.st_gid, 3552 (unsigned int) SUDOERS_GID); 3553 } 3554 return FALSE; 3555 default: 3556 /* NOTREACHED */ 3557 return FALSE; 3558 } 3559 if (!(path = switch_dir(&istack[idepth], path))) { 3560 /* switch_dir() called yyerror() for us */ 3561 return FALSE; 3562 } 3563 while ((fp = open_sudoers(path, FALSE, &keepopen)) == NULL) { 3564 /* Unable to open path in includedir, go to next one, if any. */ 3565 efree(path); 3566 if ((pl = istack[idepth].more) == NULL) 3567 return FALSE; 3568 path = pl->path; 3569 istack[idepth].more = pl->next; 3570 efree(pl); 3571 } 3572 } else { 3573 if ((fp = open_sudoers(path, TRUE, &keepopen)) == NULL) { 3574 /* The error was already printed by open_sudoers() */ 3575 yyerror(NULL); 3576 return FALSE; 3577 } 3578 istack[idepth].more = NULL; 3579 } 3580 /* Push the old (current) file and open the new one. */ 3581 istack[idepth].path = sudoers; /* push old path */ 3582 istack[idepth].bs = YY_CURRENT_BUFFER; 3583 istack[idepth].lineno = sudolineno; 3584 istack[idepth].keepopen = keepopen; 3585 idepth++; 3586 sudolineno = 1; 3587 sudoers = path; 3588 yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE)); 3589 3590 return TRUE; 3591} 3592 3593static int 3594pop_include() 3595{ 3596 struct path_list *pl; 3597 FILE *fp; 3598 3599 if (idepth == 0) 3600 return FALSE; 3601 3602 if (!keepopen) 3603 fclose(YY_CURRENT_BUFFER->yy_input_file); 3604 yy_delete_buffer(YY_CURRENT_BUFFER); 3605 /* If we are in an include dir, move to the next file. */ 3606 while ((pl = istack[idepth - 1].more) != NULL) { 3607 fp = open_sudoers(pl->path, FALSE, &keepopen); 3608 if (fp != NULL) { 3609 istack[idepth - 1].more = pl->next; 3610 efree(sudoers); 3611 sudoers = pl->path; 3612 sudolineno = 1; 3613 yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE)); 3614 efree(pl); 3615 break; 3616 } 3617 /* Unable to open path in include dir, go to next one. */ 3618 istack[idepth - 1].more = pl->next; 3619 efree(pl->path); 3620 efree(pl); 3621 } 3622 /* If no path list, just pop the last dir on the stack. */ 3623 if (pl == NULL) { 3624 idepth--; 3625 yy_switch_to_buffer(istack[idepth].bs); 3626 efree(sudoers); 3627 sudoers = istack[idepth].path; 3628 sudolineno = istack[idepth].lineno; 3629 keepopen = istack[idepth].keepopen; 3630 } 3631 return TRUE; 3632} 3633 3634static char * 3635parse_include(base) 3636 char *base; 3637{ 3638 char *cp, *ep, *path, *pp; 3639 int dirlen = 0, len = 0, subst = 0; 3640 size_t shost_len = 0; 3641 3642 /* Pull out path from #include line. */ 3643 cp = base + sizeof("#include"); 3644 if (*cp == 'i') 3645 cp += 3; /* includedir */ 3646 while (isblank((unsigned char) *cp)) 3647 cp++; 3648 ep = cp; 3649 while (*ep != '\0' && !isspace((unsigned char) *ep)) { 3650 if (ep[0] == '%' && ep[1] == 'h') { 3651 shost_len = strlen(user_shost); 3652 len += shost_len - 2; 3653 subst = 1; 3654 } 3655 ep++; 3656 } 3657 3658 /* Relative paths are located in the same dir as the sudoers file. */ 3659 if (*cp != '/') { 3660 char *dirend = strrchr(sudoers, '/'); 3661 if (dirend != NULL) 3662 dirlen = (int)(dirend - sudoers) + 1; 3663 } 3664 3665 /* Make a copy of the fully-qualified path and return it. */ 3666 len += (int)(ep - cp); 3667 path = pp = malloc(len + dirlen + 1); 3668 if (path == NULL) { 3669 yyerror("unable to allocate memory"); 3670 return NULL; 3671 } 3672 if (dirlen) { 3673 memcpy(path, sudoers, dirlen); 3674 pp += dirlen; 3675 } 3676 if (subst) { 3677 /* substitute for %h */ 3678 while (cp < ep) { 3679 if (cp[0] == '%' && cp[1] == 'h') { 3680 memcpy(pp, user_shost, shost_len); 3681 pp += shost_len; 3682 cp += 2; 3683 continue; 3684 } 3685 *pp++ = *cp++; 3686 } 3687 *pp = '\0'; 3688 } else { 3689 memcpy(pp, cp, len); 3690 pp[len] = '\0'; 3691 } 3692 3693 /* Push any excess characters (e.g. comment, newline) back to the lexer */ 3694 if (*ep != '\0') 3695 yyless((int)(ep - base)); 3696 3697 return path; 3698} 3699