2 /* $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $ */
4 /* A lexical scanner generated by flex */
6 /* Scanner skeleton version:
7 * $Header: /cvs/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
11 #define YY_FLEX_MAJOR_VERSION 2
12 #define YY_FLEX_MINOR_VERSION 5
18 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
31 /* Use prototypes in function declarations. */
34 /* The "const" storage-class-modifier is valid. */
37 #else /* ! __cplusplus */
45 #endif /* ! __cplusplus */
64 #define YY_PROTO(proto) proto
66 #define YY_PROTO(proto) ()
69 /* Returned upon end-of-file. */
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
77 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
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.
83 #define BEGIN yy_start = 1 + 2 *
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
89 #define YY_START ((yy_start - 1) / 2)
90 #define YYSTATE YY_START
92 /* Action number for EOF rule of a given start state. */
93 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
95 /* Special action meaning "start processing a new file". */
96 #define YY_NEW_FILE yyrestart( yyin )
98 #define YY_END_OF_BUFFER_CHAR 0
100 /* Size of default input buffer. */
101 #define YY_BUF_SIZE 16384
103 typedef struct yy_buffer_state *YY_BUFFER_STATE;
106 extern FILE *yyin, *yyout;
108 #define EOB_ACT_CONTINUE_SCAN 0
109 #define EOB_ACT_END_OF_FILE 1
110 #define EOB_ACT_LAST_MATCH 2
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:
116 * if ( condition_holds )
119 * do_something_else();
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.
126 /* Return all but the first 'n' matched characters back to the input stream. */
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 */ \
139 #define unput(c) yyunput( c, yytext_ptr )
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).
145 typedef unsigned int yy_size_t;
148 struct yy_buffer_state
152 char *yy_ch_buf; /* input buffer */
153 char *yy_buf_pos; /* current position in input buffer */
155 /* Size of input buffer in bytes, not including room for EOB
158 yy_size_t yy_buf_size;
160 /* Number of characters read into yy_ch_buf, not including EOB
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
169 int yy_is_our_buffer;
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
176 int yy_is_interactive;
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
184 /* Whether to try to fill the input buffer when we reach the
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.
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.
202 #define YY_BUFFER_EOF_PENDING 2
205 static YY_BUFFER_STATE yy_current_buffer = 0;
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
211 #define YY_CURRENT_BUFFER yy_current_buffer
214 /* yy_hold_char holds the character lost when yytext is formed. */
215 static char yy_hold_char;
217 static int yy_n_chars; /* number of characters read into yy_ch_buf */
222 /* Points to current character in buffer. */
223 static char *yy_c_buf_p = (char *) 0;
224 static int yy_init = 1; /* whether we need to initialize */
225 static int yy_start = 0; /* start state number */
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 ...
230 static int yy_did_buffer_switch_on_eof;
232 void yyrestart YY_PROTO(( FILE *input_file ));
234 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
235 void yy_load_buffer_state YY_PROTO(( void ));
236 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
237 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
238 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
239 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
240 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
242 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
243 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
244 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
246 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
247 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
248 static void yy_flex_free YY_PROTO(( void * ));
250 #define yy_new_buffer yy_create_buffer
252 #define yy_set_interactive(is_interactive) \
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; \
259 #define yy_set_bol(at_bol) \
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; \
266 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
270 #define YY_SKIP_YYWRAP
271 typedef unsigned char YY_CHAR;
272 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
273 typedef int yy_state_type;
275 #define yytext_ptr yytext
277 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
278 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
279 static int yy_get_next_buffer YY_PROTO(( void ));
280 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
282 /* Done after the current pattern has been matched and before the
283 * corresponding action - sets up yytext.
285 #define YY_DO_BEFORE_ACTION \
286 yytext_ptr = yy_bp; \
287 yyleng = (int) (yy_cp - yy_bp); \
288 yy_hold_char = *yy_cp; \
292 #define YY_NUM_RULES 59
293 #define YY_END_OF_BUFFER 60
294 static yyconst short int yy_accept[607] =
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,
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,
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,
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,
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,
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,
362 35, 35, 35, 35, 35, 0
365 static yyconst int yy_ec[256] =
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,
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,
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,
397 static yyconst int yy_meta[67] =
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
408 static yyconst short int yy_base[671] =
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,
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,
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,
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,
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,
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,
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
485 static yyconst short int yy_def[671] =
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,
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,
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,
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,
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,
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,
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
562 static yyconst short int yy_nxt[3732] =
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
977 static yyconst short int yy_chk[3732] =
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
1392 static yy_state_type yy_last_accepting_state;
1393 static char *yy_last_accepting_cpos;
1395 /* The intent behind this definition is that it'll catch
1396 * any uses of REJECT which flex missed.
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
1407 * Copyright (c) 1996, 1998-2005, 2007-2012
1408 * Todd C. Miller <Todd.Miller@courtesan.com>
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.
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.
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.
1432 #include <sys/types.h>
1433 #include <sys/param.h>
1434 #include <sys/stat.h>
1437 # include <stdlib.h>
1438 # include <stddef.h>
1440 # ifdef HAVE_STDLIB_H
1441 # include <stdlib.h>
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)
1460 # define dirent direct
1461 # define NAMLEN(dirent) (dirent)->d_namlen
1462 # ifdef HAVE_SYS_NDIR_H
1463 # include <sys/ndir.h>
1465 # ifdef HAVE_SYS_DIR_H
1466 # include <sys/dir.h>
1474 #include "sudoers.h"
1479 #include "secure_path.h"
1481 extern YYSTYPE yylval;
1482 extern bool parse_error;
1483 extern bool sudoers_warnings;
1488 /* Default sudoers path, mode and owner (may be set via sudo.conf) */
1489 const char *sudoers_file = _PATH_SUDOERS;
1490 mode_t sudoers_mode = SUDOERS_MODE;
1491 uid_t sudoers_uid = SUDOERS_UID;
1492 gid_t sudoers_gid = SUDOERS_GID;
1494 static bool continued, sawspace;
1495 static int prev_state;
1497 static bool _push_include(char *, bool);
1498 static bool pop_include(void);
1499 static char *parse_include(char *);
1501 static int sudoers_trace_print(const char *msg);
1502 int (*trace_print)(const char *msg) = sudoers_trace_print;
1504 #define LEXRETURN(n) do { \
1509 #define ECHO ignore_result(fwrite(yytext, yyleng, 1, yyout))
1511 #define push_include(_p) (_push_include((_p), false))
1512 #define push_includedir(_p) (_push_include((_p), true))
1513 #define YY_NO_INPUT 1
1514 #define YY_NO_UNPUT 1
1525 #line 1525 "lex.yy.c"
1527 /* Macros after this point can all be overridden by user definitions in
1531 #ifndef YY_SKIP_YYWRAP
1533 extern "C" int yywrap YY_PROTO(( void ));
1535 extern int yywrap YY_PROTO(( void ));
1540 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1544 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1547 #ifdef YY_NEED_STRLEN
1548 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1553 static int yyinput YY_PROTO(( void ));
1555 static int input YY_PROTO(( void ));
1559 #if defined(YY_STACK_USED) && YY_STACK_USED
1560 static int yy_start_stack_ptr = 0;
1561 static int yy_start_stack_depth = 0;
1562 static int *yy_start_stack = 0;
1563 #ifndef YY_NO_PUSH_STATE
1564 static void yy_push_state YY_PROTO(( int new_state ));
1566 #ifndef YY_NO_POP_STATE
1567 static void yy_pop_state YY_PROTO(( void ));
1569 #ifndef YY_NO_TOP_STATE
1570 static int yy_top_state YY_PROTO(( void ));
1574 #define YY_NO_PUSH_STATE 1
1575 #define YY_NO_POP_STATE 1
1576 #define YY_NO_TOP_STATE 1
1579 #ifdef YY_MALLOC_DECL
1587 /* Just try to get by without declaring the routines. This will fail
1588 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1589 * or sizeof(void*) != sizeof(int).
1594 /* Amount of stuff to slurp up with each read. */
1595 #ifndef YY_READ_BUF_SIZE
1596 #define YY_READ_BUF_SIZE 8192
1599 /* Copy whatever the last rule matched to the standard output. */
1602 /* This used to be an fputs(), but since the string might contain NUL's,
1603 * we now use fwrite().
1605 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1608 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1609 * is returned in "result".
1612 #define YY_INPUT(buf,result,max_size) \
1613 if ( yy_current_buffer->yy_is_interactive ) \
1616 for ( n = 0; n < max_size && \
1617 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1618 buf[n] = (char) c; \
1620 buf[n++] = (char) c; \
1621 if ( c == EOF && ferror( yyin ) ) \
1622 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1625 else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1626 && ferror( yyin ) ) \
1627 YY_FATAL_ERROR( "input in flex scanner failed" );
1630 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1631 * we don't want an extra ';' after the "return" because that will cause
1632 * some compilers to complain about unreachable statements.
1635 #define yyterminate() return YY_NULL
1638 /* Number of entries by which start-condition stack grows. */
1639 #ifndef YY_START_STACK_INCR
1640 #define YY_START_STACK_INCR 25
1643 /* Report a fatal error. */
1644 #ifndef YY_FATAL_ERROR
1645 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1648 /* Default declaration of generated scanner - a define so the user can
1649 * easily add parameters.
1652 #define YY_DECL int yylex YY_PROTO(( void ))
1655 /* Code executed at the beginning of each rule, after yytext and yyleng
1658 #ifndef YY_USER_ACTION
1659 #define YY_USER_ACTION
1662 /* Code executed at the end of each rule. */
1664 #define YY_BREAK break;
1667 #define YY_RULE_SETUP \
1669 yy_current_buffer->yy_at_bol = \
1670 (yytext[yyleng - 1] == '\n'); \
1675 register yy_state_type yy_current_state;
1676 register char *yy_cp, *yy_bp;
1677 register int yy_act;
1681 #line 1681 "lex.yy.c"
1692 yy_start = 1; /* first start state */
1700 if ( ! yy_current_buffer )
1702 yy_create_buffer( yyin, YY_BUF_SIZE );
1704 yy_load_buffer_state();
1707 while ( 1 ) /* loops until end-of-file is reached */
1711 /* Support of yytext. */
1712 *yy_cp = yy_hold_char;
1714 /* yy_bp points to the position in yy_ch_buf of the start of
1719 yy_current_state = yy_start;
1720 yy_current_state += YY_AT_BOL();
1724 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1725 if ( yy_accept[yy_current_state] )
1727 yy_last_accepting_state = yy_current_state;
1728 yy_last_accepting_cpos = yy_cp;
1730 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1732 yy_current_state = (int) yy_def[yy_current_state];
1733 if ( yy_current_state >= 607 )
1734 yy_c = yy_meta[(unsigned int) yy_c];
1736 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1739 while ( yy_base[yy_current_state] != 3665 );
1742 yy_act = yy_accept[yy_current_state];
1744 { /* have to back up */
1745 yy_cp = yy_last_accepting_cpos;
1746 yy_current_state = yy_last_accepting_state;
1747 yy_act = yy_accept[yy_current_state];
1750 YY_DO_BEFORE_ACTION;
1753 do_action: /* This label is used only to access EOF actions. */
1757 { /* beginning of action switch */
1758 case 0: /* must back up */
1759 /* undo the effects of YY_DO_BEFORE_ACTION */
1760 *yy_cp = yy_hold_char;
1761 yy_cp = yy_last_accepting_cpos;
1762 yy_current_state = yy_last_accepting_state;
1763 goto yy_find_action;
1783 LEXTRACE("DEFVAR ");
1784 if (!fill(yytext, yyleng))
1827 LEXTRACE("BEGINSTR ");
1828 yylval.string = NULL;
1829 prev_state = YY_START;
1837 LEXTRACE("WORD(2) ");
1838 if (!fill(yytext, yyleng))
1849 /* Line continuation char followed by newline. */
1858 LEXTRACE("ENDSTR ");
1861 if (yylval.string == NULL) {
1862 LEXTRACE("ERROR "); /* empty string */
1865 if (prev_state == INITIAL) {
1866 switch (yylval.string[0]) {
1868 if (yylval.string[1] == '\0' ||
1869 (yylval.string[1] == ':' &&
1870 yylval.string[2] == '\0')) {
1871 LEXTRACE("ERROR "); /* empty group */
1874 LEXTRACE("USERGROUP ");
1875 LEXRETURN(USERGROUP);
1877 if (yylval.string[1] == '\0') {
1878 LEXTRACE("ERROR "); /* empty netgroup */
1881 LEXTRACE("NETGROUP ");
1882 LEXRETURN(NETGROUP);
1885 LEXTRACE("WORD(4) ");
1893 LEXTRACE("BACKSLASH ");
1894 if (!append(yytext, yyleng))
1902 LEXTRACE("STRBODY ");
1903 if (!append(yytext, yyleng))
1913 /* quoted fnmatch glob char, pass verbatim */
1914 LEXTRACE("QUOTEDCHAR ");
1915 if (!fill_args(yytext, 2, sawspace))
1924 /* quoted sudoers special char, strip backslash */
1925 LEXTRACE("QUOTEDCHAR ");
1926 if (!fill_args(yytext + 1, 1, sawspace))
1938 } /* end of command line args */
1945 if (!fill_args(yytext, yyleng, sawspace))
1948 } /* a command line arg */
1962 if ((path = parse_include(yytext)) == NULL)
1965 LEXTRACE("INCLUDE\n");
1967 /* Push current buffer and switch to include file */
1968 if (!push_include(path))
1983 if ((path = parse_include(yytext)) == NULL)
1986 LEXTRACE("INCLUDEDIR\n");
1989 * Push current buffer and switch to include file.
1990 * We simply ignore empty directories.
1992 if (!push_includedir(path) && parse_error)
2008 for (n = 0; isblank((unsigned char)yytext[n]); n++)
2010 n += sizeof("Defaults") - 1;
2011 if ((deftype = yytext[n++]) != '\0') {
2012 while (isblank((unsigned char)yytext[n]))
2019 LEXTRACE("DEFAULTS_USER ");
2020 LEXRETURN(DEFAULTS_USER);
2023 LEXTRACE("DEFAULTS_RUNAS ");
2024 LEXRETURN(DEFAULTS_RUNAS);
2027 LEXTRACE("DEFAULTS_HOST ");
2028 LEXRETURN(DEFAULTS_HOST);
2031 LEXTRACE("DEFAULTS_CMND ");
2032 LEXRETURN(DEFAULTS_CMND);
2034 LEXTRACE("DEFAULTS ");
2035 LEXRETURN(DEFAULTS);
2050 for (n = 0; isblank((unsigned char)yytext[n]); n++)
2052 switch (yytext[n]) {
2054 LEXTRACE("HOSTALIAS ");
2055 LEXRETURN(HOSTALIAS);
2057 LEXTRACE("CMNDALIAS ");
2058 LEXRETURN(CMNDALIAS);
2060 LEXTRACE("USERALIAS ");
2061 LEXRETURN(USERALIAS);
2063 LEXTRACE("RUNASALIAS ");
2064 LEXRETURN(RUNASALIAS);
2072 /* cmnd does not require passwd for this user */
2073 LEXTRACE("NOPASSWD ");
2074 LEXRETURN(NOPASSWD);
2081 /* cmnd requires passwd for this user */
2082 LEXTRACE("PASSWD ");
2090 LEXTRACE("NOEXEC ");
2106 LEXTRACE("SETENV ");
2114 LEXTRACE("NOSETENV ");
2115 LEXRETURN(NOSETENV);
2122 LEXTRACE("LOG_OUTPUT ");
2123 LEXRETURN(LOG_OUTPUT);
2130 LEXTRACE("NOLOG_OUTPUT ");
2131 LEXRETURN(NOLOG_OUTPUT);
2138 LEXTRACE("LOG_INPUT ");
2139 LEXRETURN(LOG_INPUT);
2146 LEXTRACE("NOLOG_INPUT ");
2147 LEXRETURN(NOLOG_INPUT);
2154 /* empty group or netgroup */
2164 if (!fill(yytext, yyleng))
2166 LEXTRACE("NETGROUP ");
2167 LEXRETURN(NETGROUP);
2175 if (!fill(yytext, yyleng))
2177 LEXTRACE("USERGROUP ");
2178 LEXRETURN(USERGROUP);
2185 if (!fill(yytext, yyleng))
2187 LEXTRACE("NTWKADDR ");
2188 LEXRETURN(NTWKADDR);
2195 if (!fill(yytext, yyleng))
2197 LEXTRACE("NTWKADDR ");
2198 LEXRETURN(NTWKADDR);
2205 if (!ipv6_valid(yytext)) {
2209 if (!fill(yytext, yyleng))
2211 LEXTRACE("NTWKADDR ");
2212 LEXRETURN(NTWKADDR);
2219 if (!ipv6_valid(yytext)) {
2223 if (!fill(yytext, yyleng))
2225 LEXTRACE("NTWKADDR ");
2226 LEXRETURN(NTWKADDR);
2266 #ifndef HAVE_SELINUX
2269 if (!fill(yytext, yyleng))
2279 /* no command args allowed for Defaults!/path */
2280 if (!fill_cmnd(yytext, yyleng))
2282 LEXTRACE("COMMAND ");
2291 LEXTRACE("COMMAND ");
2292 if (!fill_cmnd(yytext, yyleng))
2300 /* directories can't have args... */
2301 if (yytext[yyleng - 1] == '/') {
2302 LEXTRACE("COMMAND ");
2303 if (!fill_cmnd(yytext, yyleng))
2308 LEXTRACE("COMMAND ");
2309 if (!fill_cmnd(yytext, yyleng))
2318 LEXTRACE("BEGINSTR ");
2319 yylval.string = NULL;
2320 prev_state = YY_START;
2329 if (!fill(yytext, yyleng))
2331 LEXTRACE("WORD(5) ");
2381 LEXRETURN('!'); /* return '!' */
2389 if (YY_START == INSTR) {
2391 LEXRETURN(ERROR); /* line break in string */
2398 } /* return newline */
2403 { /* throw away space/tabs */
2404 sawspace = true; /* but remember for fill_args */
2411 sawspace = true; /* remember for fill_args */
2414 } /* throw away EOL after \ */
2425 } /* comment, not uid/gid */
2435 case YY_STATE_EOF(INITIAL):
2436 case YY_STATE_EOF(GOTDEFS):
2437 case YY_STATE_EOF(GOTCMND):
2438 case YY_STATE_EOF(STARTDEFS):
2439 case YY_STATE_EOF(INDEFS):
2440 case YY_STATE_EOF(INSTR):
2443 if (YY_START != INITIAL) {
2457 #line 2457 "lex.yy.c"
2459 case YY_END_OF_BUFFER:
2461 /* Amount of text matched not including the EOB char. */
2462 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
2464 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2465 *yy_cp = yy_hold_char;
2466 YY_RESTORE_YY_MORE_OFFSET
2468 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
2470 /* We're scanning a new file or input source. It's
2471 * possible that this happened because the user
2472 * just pointed yyin at a new source and called
2473 * yylex(). If so, then we have to assure
2474 * consistency between yy_current_buffer and our
2475 * globals. Here is the right place to do so, because
2476 * this is the first action (other than possibly a
2477 * back-up) that will match for the new input source.
2479 yy_n_chars = yy_current_buffer->yy_n_chars;
2480 yy_current_buffer->yy_input_file = yyin;
2481 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
2484 /* Note that here we test for yy_c_buf_p "<=" to the position
2485 * of the first EOB in the buffer, since yy_c_buf_p will
2486 * already have been incremented past the NUL character
2487 * (since all states make transitions on EOB to the
2488 * end-of-buffer state). Contrast this with the test
2491 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2492 { /* This was really a NUL. */
2493 yy_state_type yy_next_state;
2495 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
2497 yy_current_state = yy_get_previous_state();
2499 /* Okay, we're now positioned to make the NUL
2500 * transition. We couldn't have
2501 * yy_get_previous_state() go ahead and do it
2502 * for us because it doesn't know how to deal
2503 * with the possibility of jamming (and we don't
2504 * want to build jamming into it because then it
2505 * will run more slowly).
2508 yy_next_state = yy_try_NUL_trans( yy_current_state );
2510 yy_bp = yytext_ptr + YY_MORE_ADJ;
2512 if ( yy_next_state )
2514 /* Consume the NUL. */
2515 yy_cp = ++yy_c_buf_p;
2516 yy_current_state = yy_next_state;
2523 goto yy_find_action;
2527 else switch ( yy_get_next_buffer() )
2529 case EOB_ACT_END_OF_FILE:
2531 yy_did_buffer_switch_on_eof = 0;
2535 /* Note: because we've taken care in
2536 * yy_get_next_buffer() to have set up
2537 * yytext, we can now set up
2538 * yy_c_buf_p so that if some total
2539 * hoser (like flex itself) wants to
2540 * call the scanner after we return the
2541 * YY_NULL, it'll still work - another
2542 * YY_NULL will get returned.
2544 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
2546 yy_act = YY_STATE_EOF(YY_START);
2552 if ( ! yy_did_buffer_switch_on_eof )
2558 case EOB_ACT_CONTINUE_SCAN:
2560 yytext_ptr + yy_amount_of_matched_text;
2562 yy_current_state = yy_get_previous_state();
2565 yy_bp = yytext_ptr + YY_MORE_ADJ;
2568 case EOB_ACT_LAST_MATCH:
2570 &yy_current_buffer->yy_ch_buf[yy_n_chars];
2572 yy_current_state = yy_get_previous_state();
2575 yy_bp = yytext_ptr + YY_MORE_ADJ;
2576 goto yy_find_action;
2583 "fatal flex scanner internal error--no action found" );
2584 } /* end of action switch */
2585 } /* end of scanning one token */
2586 } /* end of yylex */
2589 /* yy_get_next_buffer - try to read in a new buffer
2591 * Returns a code representing an action:
2592 * EOB_ACT_LAST_MATCH -
2593 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2594 * EOB_ACT_END_OF_FILE - end of file
2597 static int yy_get_next_buffer()
2599 register char *dest = yy_current_buffer->yy_ch_buf;
2600 register char *source = yytext_ptr;
2601 register int number_to_move, i;
2604 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
2606 "fatal flex scanner internal error--end of buffer missed" );
2608 if ( yy_current_buffer->yy_fill_buffer == 0 )
2609 { /* Don't try to fill the buffer, so this is an EOF. */
2610 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
2612 /* We matched a single character, the EOB, so
2613 * treat this as a final EOF.
2615 return EOB_ACT_END_OF_FILE;
2620 /* We matched some text prior to the EOB, first
2623 return EOB_ACT_LAST_MATCH;
2627 /* Try to read more data. */
2629 /* First move last chars to start of buffer. */
2630 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
2632 for ( i = 0; i < number_to_move; ++i )
2633 *(dest++) = *(source++);
2635 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2636 /* don't do the read, it's not guaranteed to return an EOF,
2639 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
2644 yy_current_buffer->yy_buf_size - number_to_move - 1;
2646 while ( num_to_read <= 0 )
2647 { /* Not enough room in the buffer - grow it. */
2648 #ifdef YY_USES_REJECT
2650 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
2653 /* just a shorter name for the current buffer */
2654 YY_BUFFER_STATE b = yy_current_buffer;
2656 int yy_c_buf_p_offset =
2657 (int) (yy_c_buf_p - b->yy_ch_buf);
2659 if ( b->yy_is_our_buffer )
2661 int new_size = b->yy_buf_size * 2;
2663 if ( new_size <= 0 )
2664 b->yy_buf_size += b->yy_buf_size / 8;
2666 b->yy_buf_size *= 2;
2668 b->yy_ch_buf = (char *)
2669 /* Include room in for 2 EOB chars. */
2670 yy_flex_realloc( (void *) b->yy_ch_buf,
2671 b->yy_buf_size + 2 );
2674 /* Can't grow it, we don't own it. */
2677 if ( ! b->yy_ch_buf )
2679 "fatal error - scanner input buffer overflow" );
2681 yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2683 num_to_read = yy_current_buffer->yy_buf_size -
2688 if ( num_to_read > YY_READ_BUF_SIZE )
2689 num_to_read = YY_READ_BUF_SIZE;
2691 /* Read in more data. */
2692 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
2693 yy_n_chars, num_to_read );
2695 yy_current_buffer->yy_n_chars = yy_n_chars;
2698 if ( yy_n_chars == 0 )
2700 if ( number_to_move == YY_MORE_ADJ )
2702 ret_val = EOB_ACT_END_OF_FILE;
2708 ret_val = EOB_ACT_LAST_MATCH;
2709 yy_current_buffer->yy_buffer_status =
2710 YY_BUFFER_EOF_PENDING;
2715 ret_val = EOB_ACT_CONTINUE_SCAN;
2717 yy_n_chars += number_to_move;
2718 yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
2719 yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
2721 yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
2727 /* yy_get_previous_state - get the state just before the EOB char was reached */
2729 static yy_state_type yy_get_previous_state()
2731 register yy_state_type yy_current_state;
2732 register char *yy_cp;
2734 yy_current_state = yy_start;
2735 yy_current_state += YY_AT_BOL();
2737 for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
2739 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
2740 if ( yy_accept[yy_current_state] )
2742 yy_last_accepting_state = yy_current_state;
2743 yy_last_accepting_cpos = yy_cp;
2745 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2747 yy_current_state = (int) yy_def[yy_current_state];
2748 if ( yy_current_state >= 607 )
2749 yy_c = yy_meta[(unsigned int) yy_c];
2751 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2754 return yy_current_state;
2758 /* yy_try_NUL_trans - try to make a transition on the NUL character
2761 * next_state = yy_try_NUL_trans( current_state );
2764 #ifdef YY_USE_PROTOS
2765 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
2767 static yy_state_type yy_try_NUL_trans( yy_current_state )
2768 yy_state_type yy_current_state;
2771 register int yy_is_jam;
2772 register char *yy_cp = yy_c_buf_p;
2774 register YY_CHAR yy_c = 1;
2775 if ( yy_accept[yy_current_state] )
2777 yy_last_accepting_state = yy_current_state;
2778 yy_last_accepting_cpos = yy_cp;
2780 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2782 yy_current_state = (int) yy_def[yy_current_state];
2783 if ( yy_current_state >= 607 )
2784 yy_c = yy_meta[(unsigned int) yy_c];
2786 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2787 yy_is_jam = (yy_current_state == 606);
2789 return yy_is_jam ? 0 : yy_current_state;
2794 #ifdef YY_USE_PROTOS
2795 static void yyunput( int c, register char *yy_bp )
2797 static void yyunput( c, yy_bp )
2799 register char *yy_bp;
2802 register char *yy_cp = yy_c_buf_p;
2804 /* undo effects of setting up yytext */
2805 *yy_cp = yy_hold_char;
2807 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
2808 { /* need to shift things up to make room */
2809 /* +2 for EOB chars. */
2810 register int number_to_move = yy_n_chars + 2;
2811 register char *dest = &yy_current_buffer->yy_ch_buf[
2812 yy_current_buffer->yy_buf_size + 2];
2813 register char *source =
2814 &yy_current_buffer->yy_ch_buf[number_to_move];
2816 while ( source > yy_current_buffer->yy_ch_buf )
2817 *--dest = *--source;
2819 yy_cp += (int) (dest - source);
2820 yy_bp += (int) (dest - source);
2821 yy_current_buffer->yy_n_chars =
2822 yy_n_chars = yy_current_buffer->yy_buf_size;
2824 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
2825 YY_FATAL_ERROR( "flex scanner push-back overflow" );
2828 *--yy_cp = (char) c;
2832 yy_hold_char = *yy_cp;
2835 #endif /* ifndef YY_NO_UNPUT */
2840 static int yyinput()
2847 *yy_c_buf_p = yy_hold_char;
2849 if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2851 /* yy_c_buf_p now points to the character we want to return.
2852 * If this occurs *before* the EOB characters, then it's a
2853 * valid NUL; if not, then we've hit the end of the buffer.
2855 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2856 /* This was really a NUL. */
2860 { /* need more input */
2861 int offset = yy_c_buf_p - yytext_ptr;
2864 switch ( yy_get_next_buffer() )
2866 case EOB_ACT_LAST_MATCH:
2867 /* This happens because yy_g_n_b()
2868 * sees that we've accumulated a
2869 * token and flags that we need to
2870 * try matching the token before
2871 * proceeding. But for input(),
2872 * there's no matching to consider.
2873 * So convert the EOB_ACT_LAST_MATCH
2874 * to EOB_ACT_END_OF_FILE.
2877 /* Reset buffer status. */
2882 case EOB_ACT_END_OF_FILE:
2887 if ( ! yy_did_buffer_switch_on_eof )
2896 case EOB_ACT_CONTINUE_SCAN:
2897 yy_c_buf_p = yytext_ptr + offset;
2903 c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
2904 *yy_c_buf_p = '\0'; /* preserve yytext */
2905 yy_hold_char = *++yy_c_buf_p;
2907 yy_current_buffer->yy_at_bol = (c == '\n');
2911 #endif /* ifndef YY_NO_INPUT */
2914 #ifdef YY_USE_PROTOS
2915 void yyrestart( FILE *input_file )
2917 void yyrestart( input_file )
2921 if ( ! yy_current_buffer )
2922 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
2924 yy_init_buffer( yy_current_buffer, input_file );
2925 yy_load_buffer_state();
2929 #ifdef YY_USE_PROTOS
2930 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
2932 void yy_switch_to_buffer( new_buffer )
2933 YY_BUFFER_STATE new_buffer;
2936 if ( yy_current_buffer == new_buffer )
2939 if ( yy_current_buffer )
2941 /* Flush out information for old buffer. */
2942 *yy_c_buf_p = yy_hold_char;
2943 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
2944 yy_current_buffer->yy_n_chars = yy_n_chars;
2947 yy_current_buffer = new_buffer;
2948 yy_load_buffer_state();
2950 /* We don't actually know whether we did this switch during
2951 * EOF (yywrap()) processing, but the only time this flag
2952 * is looked at is after yywrap() is called, so it's safe
2953 * to go ahead and always set it.
2955 yy_did_buffer_switch_on_eof = 1;
2959 #ifdef YY_USE_PROTOS
2960 void yy_load_buffer_state( void )
2962 void yy_load_buffer_state()
2965 yy_n_chars = yy_current_buffer->yy_n_chars;
2966 yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
2967 yyin = yy_current_buffer->yy_input_file;
2968 yy_hold_char = *yy_c_buf_p;
2972 #ifdef YY_USE_PROTOS
2973 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
2975 YY_BUFFER_STATE yy_create_buffer( file, size )
2982 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
2984 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2986 b->yy_buf_size = size;
2988 /* yy_ch_buf has to be 2 characters longer than the size given because
2989 * we need to put in 2 end-of-buffer characters.
2991 b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
2992 if ( ! b->yy_ch_buf )
2993 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2995 b->yy_is_our_buffer = 1;
2997 yy_init_buffer( b, file );
3003 #ifdef YY_USE_PROTOS
3004 void yy_delete_buffer( YY_BUFFER_STATE b )
3006 void yy_delete_buffer( b )
3013 if ( b == yy_current_buffer )
3014 yy_current_buffer = (YY_BUFFER_STATE) 0;
3016 if ( b->yy_is_our_buffer )
3017 yy_flex_free( (void *) b->yy_ch_buf );
3019 yy_flex_free( (void *) b );
3023 #ifndef YY_ALWAYS_INTERACTIVE
3024 #ifndef YY_NEVER_INTERACTIVE
3029 #ifdef YY_USE_PROTOS
3030 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3032 void yy_init_buffer( b, file )
3041 yy_flush_buffer( b );
3043 b->yy_input_file = file;
3044 b->yy_fill_buffer = 1;
3046 #if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
3047 b->yy_is_interactive = 1;
3049 #if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
3050 b->yy_is_interactive = 0;
3052 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3059 #ifdef YY_USE_PROTOS
3060 void yy_flush_buffer( YY_BUFFER_STATE b )
3062 void yy_flush_buffer( b )
3072 /* We always need two end-of-buffer characters. The first causes
3073 * a transition to the end-of-buffer state. The second causes
3074 * a jam in that state.
3076 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3077 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3079 b->yy_buf_pos = &b->yy_ch_buf[0];
3082 b->yy_buffer_status = YY_BUFFER_NEW;
3084 if ( b == yy_current_buffer )
3085 yy_load_buffer_state();
3089 #ifndef YY_NO_SCAN_BUFFER
3090 #ifdef YY_USE_PROTOS
3091 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3093 YY_BUFFER_STATE yy_scan_buffer( base, size )
3101 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3102 base[size-1] != YY_END_OF_BUFFER_CHAR )
3103 /* They forgot to leave room for the EOB's. */
3106 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3108 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3110 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
3111 b->yy_buf_pos = b->yy_ch_buf = base;
3112 b->yy_is_our_buffer = 0;
3113 b->yy_input_file = 0;
3114 b->yy_n_chars = b->yy_buf_size;
3115 b->yy_is_interactive = 0;
3117 b->yy_fill_buffer = 0;
3118 b->yy_buffer_status = YY_BUFFER_NEW;
3120 yy_switch_to_buffer( b );
3127 #ifndef YY_NO_SCAN_STRING
3128 #ifdef YY_USE_PROTOS
3129 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3131 YY_BUFFER_STATE yy_scan_string( yy_str )
3132 yyconst char *yy_str;
3136 for ( len = 0; yy_str[len]; ++len )
3139 return yy_scan_bytes( yy_str, len );
3144 #ifndef YY_NO_SCAN_BYTES
3145 #ifdef YY_USE_PROTOS
3146 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3148 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3149 yyconst char *bytes;
3158 /* Get memory for full buffer, including space for trailing EOB's. */
3160 buf = (char *) yy_flex_alloc( n );
3162 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3164 for ( i = 0; i < len; ++i )
3167 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3169 b = yy_scan_buffer( buf, n );
3171 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3173 /* It's okay to grow etc. this buffer, and we should throw it
3174 * away when we're done.
3176 b->yy_is_our_buffer = 1;
3183 #ifndef YY_NO_PUSH_STATE
3184 #ifdef YY_USE_PROTOS
3185 static void yy_push_state( int new_state )
3187 static void yy_push_state( new_state )
3191 if ( yy_start_stack_ptr >= yy_start_stack_depth )
3195 yy_start_stack_depth += YY_START_STACK_INCR;
3196 new_size = yy_start_stack_depth * sizeof( int );
3198 if ( ! yy_start_stack )
3199 yy_start_stack = (int *) yy_flex_alloc( new_size );
3202 yy_start_stack = (int *) yy_flex_realloc(
3203 (void *) yy_start_stack, new_size );
3205 if ( ! yy_start_stack )
3207 "out of memory expanding start-condition stack" );
3210 yy_start_stack[yy_start_stack_ptr++] = YY_START;
3217 #ifndef YY_NO_POP_STATE
3218 static void yy_pop_state()
3220 if ( --yy_start_stack_ptr < 0 )
3221 YY_FATAL_ERROR( "start-condition stack underflow" );
3223 BEGIN(yy_start_stack[yy_start_stack_ptr]);
3228 #ifndef YY_NO_TOP_STATE
3229 static int yy_top_state()
3231 return yy_start_stack[yy_start_stack_ptr - 1];
3235 #ifndef YY_EXIT_FAILURE
3236 #define YY_EXIT_FAILURE 2
3239 #ifdef YY_USE_PROTOS
3240 static void yy_fatal_error( yyconst char msg[] )
3242 static void yy_fatal_error( msg )
3246 (void) fprintf( stderr, "%s\n", msg );
3247 exit( YY_EXIT_FAILURE );
3252 /* Redefine yyless() so it works in section 3 code. */
3258 /* Undo effects of setting up yytext. */ \
3259 yytext[yyleng] = yy_hold_char; \
3260 yy_c_buf_p = yytext + n; \
3261 yy_hold_char = *yy_c_buf_p; \
3262 *yy_c_buf_p = '\0'; \
3268 /* Internal utility routines. */
3271 #ifdef YY_USE_PROTOS
3272 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3274 static void yy_flex_strncpy( s1, s2, n )
3281 for ( i = 0; i < n; ++i )
3286 #ifdef YY_NEED_STRLEN
3287 #ifdef YY_USE_PROTOS
3288 static int yy_flex_strlen( yyconst char *s )
3290 static int yy_flex_strlen( s )
3295 for ( n = 0; s[n]; ++n )
3303 #ifdef YY_USE_PROTOS
3304 static void *yy_flex_alloc( yy_size_t size )
3306 static void *yy_flex_alloc( size )
3310 return (void *) malloc( size );
3313 #ifdef YY_USE_PROTOS
3314 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3316 static void *yy_flex_realloc( ptr, size )
3321 /* The cast to (char *) in the following accommodates both
3322 * implementations that use char* generic pointers, and those
3323 * that use void* generic pointers. It works with the latter
3324 * because both ANSI C and C++ allow castless assignment from
3325 * any pointer type to void*, and deal with argument conversions
3326 * as though doing an assignment.
3328 return (void *) realloc( (char *) ptr, size );
3331 #ifdef YY_USE_PROTOS
3332 static void yy_flex_free( void *ptr )
3334 static void yy_flex_free( ptr )
3341 #if defined(YY_MAIN) && YY_MAIN
3352 struct path_list *next;
3355 struct include_stack {
3358 struct path_list *more; /* more files in case of includedir */
3364 pl_compare(const void *v1, const void *v2)
3366 const struct path_list * const *p1 = v1;
3367 const struct path_list * const *p2 = v2;
3369 return strcmp((*p1)->path, (*p2)->path);
3373 switch_dir(struct include_stack *stack, char *dirpath)
3378 struct dirent *dent;
3380 struct path_list *pl, *first = NULL;
3381 struct path_list **sorted = NULL;
3382 debug_decl(switch_dir, SUDO_DEBUG_PARSER)
3384 if (!(dir = opendir(dirpath))) {
3385 if (errno != ENOENT) {
3387 if (asprintf(&errbuf, _("%s: %s"), dirpath, strerror(errno)) != -1) {
3391 yyerror(_("unable to allocate memory"));
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) {
3402 if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) {
3406 if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) {
3411 pl = malloc(sizeof(*pl));
3424 /* Sort the list as an array. */
3425 sorted = malloc(sizeof(*sorted) * count);
3429 for (i = 0; i < count; i++) {
3433 qsort(sorted, count, sizeof(*sorted), pl_compare);
3435 /* Apply sorting to the list. */
3437 sorted[count - 1]->next = NULL;
3438 for (i = 1; i < count; i++)
3439 sorted[i - 1]->next = sorted[i];
3442 /* Pull out the first element for parsing, leave the rest for later. */
3453 debug_return_str(path);
3455 while (first != NULL) {
3464 debug_return_str(NULL);
3467 #define MAX_SUDOERS_DEPTH 128
3468 #define SUDOERS_STACK_INCREMENT 16
3470 static size_t istacksize, idepth;
3471 static struct include_stack *istack;
3472 static bool keepopen;
3477 struct path_list *pl;
3478 debug_decl(init_lexer, SUDO_DEBUG_PARSER)
3482 while ((pl = istack[idepth].more) != NULL) {
3483 istack[idepth].more = pl->next;
3487 efree(istack[idepth].path);
3488 if (idepth && !istack[idepth].keepopen)
3489 fclose(istack[idepth].bs->yy_input_file);
3490 yy_delete_buffer(istack[idepth].bs);
3494 istacksize = idepth = 0;
3499 prev_state = INITIAL;
3505 _push_include(char *path, bool isdir)
3507 struct path_list *pl;
3509 debug_decl(_push_include, SUDO_DEBUG_PARSER)
3511 /* push current state onto stack */
3512 if (idepth >= istacksize) {
3513 if (idepth > MAX_SUDOERS_DEPTH) {
3514 yyerror(_("too many levels of includes"));
3515 debug_return_bool(false);
3517 istacksize += SUDOERS_STACK_INCREMENT;
3518 istack = (struct include_stack *) realloc(istack,
3519 sizeof(*istack) * istacksize);
3520 if (istack == NULL) {
3521 yyerror(_("unable to allocate memory"));
3522 debug_return_bool(false);
3527 switch (sudo_secure_dir(path, sudoers_uid, sudoers_gid, &sb)) {
3528 case SUDO_PATH_MISSING:
3529 debug_return_bool(false);
3530 case SUDO_PATH_BAD_TYPE:
3532 if (sudoers_warnings) {
3533 warning("%s", path);
3535 debug_return_bool(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);
3542 debug_return_bool(false);
3543 case SUDO_PATH_WORLD_WRITABLE:
3544 if (sudoers_warnings) {
3545 warningx(_("%s is world writable"), path);
3547 debug_return_bool(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);
3554 debug_return_bool(false);
3557 debug_return_bool(false);
3559 if (!(path = switch_dir(&istack[idepth], path))) {
3560 /* switch_dir() called yyerror() for us */
3561 debug_return_bool(false);
3563 while ((fp = open_sudoers(path, false, &keepopen)) == NULL) {
3564 /* Unable to open path in includedir, go to next one, if any. */
3566 if ((pl = istack[idepth].more) == NULL)
3567 debug_return_bool(false);
3569 istack[idepth].more = pl->next;
3573 if ((fp = open_sudoers(path, true, &keepopen)) == NULL) {
3575 if (asprintf(&errbuf, _("%s: %s"), path, strerror(errno)) != -1) {
3579 yyerror(_("unable to allocate memory"));
3581 debug_return_bool(false);
3583 istack[idepth].more = NULL;
3585 /* Push the old (current) file and open the new one. */
3586 istack[idepth].path = sudoers; /* push old path */
3587 istack[idepth].bs = YY_CURRENT_BUFFER;
3588 istack[idepth].lineno = sudolineno;
3589 istack[idepth].keepopen = keepopen;
3593 yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
3595 debug_return_bool(true);
3601 struct path_list *pl;
3603 debug_decl(pop_include, SUDO_DEBUG_PARSER)
3606 debug_return_bool(false);
3609 fclose(YY_CURRENT_BUFFER->yy_input_file);
3610 yy_delete_buffer(YY_CURRENT_BUFFER);
3611 /* If we are in an include dir, move to the next file. */
3612 while ((pl = istack[idepth - 1].more) != NULL) {
3613 fp = open_sudoers(pl->path, false, &keepopen);
3615 istack[idepth - 1].more = pl->next;
3619 yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
3623 /* Unable to open path in include dir, go to next one. */
3624 istack[idepth - 1].more = pl->next;
3628 /* If no path list, just pop the last dir on the stack. */
3631 yy_switch_to_buffer(istack[idepth].bs);
3633 sudoers = istack[idepth].path;
3634 sudolineno = istack[idepth].lineno;
3635 keepopen = istack[idepth].keepopen;
3637 debug_return_bool(true);
3641 parse_include(char *base)
3643 char *cp, *ep, *path, *pp;
3644 int dirlen = 0, len = 0, subst = 0;
3645 size_t shost_len = 0;
3646 debug_decl(parse_include, SUDO_DEBUG_PARSER)
3648 /* Pull out path from #include line. */
3649 cp = base + sizeof("#include");
3651 cp += 3; /* includedir */
3652 while (isblank((unsigned char) *cp))
3655 while (*ep != '\0' && !isspace((unsigned char) *ep)) {
3656 if (ep[0] == '%' && ep[1] == 'h') {
3657 shost_len = strlen(user_shost);
3658 len += shost_len - 2;
3664 /* Relative paths are located in the same dir as the sudoers file. */
3666 char *dirend = strrchr(sudoers, '/');
3668 dirlen = (int)(dirend - sudoers) + 1;
3671 /* Make a copy of the fully-qualified path and return it. */
3672 len += (int)(ep - cp);
3673 path = pp = malloc(len + dirlen + 1);
3675 yyerror(_("unable to allocate memory"));
3676 debug_return_str(NULL);
3679 memcpy(path, sudoers, dirlen);
3683 /* substitute for %h */
3685 if (cp[0] == '%' && cp[1] == 'h') {
3686 memcpy(pp, user_shost, shost_len);
3695 memcpy(pp, cp, len);
3699 /* Push any excess characters (e.g. comment, newline) back to the lexer */
3701 yyless((int)(ep - base));
3703 debug_return_str(path);
3708 sudoers_trace_print(const char *msg)
3710 return fputs(msg, stderr);
3714 sudoers_trace_print(const char *msg)
3716 static bool initialized;
3717 static struct lbuf lbuf;
3721 lbuf_init(&lbuf, NULL, 0, NULL, 0);
3724 lbuf_append(&lbuf, "%s", msg);
3725 /* XXX - assumes a final newline */
3726 if (strchr(msg, '\n') != NULL)
3728 sudo_debug_printf2(NULL, NULL, 0, SUDO_DEBUG_PARSER|SUDO_DEBUG_DEBUG,
3729 "%s:%d %s", sudoers, sudolineno, lbuf.buf);
3734 #endif /* TRACELEXER */