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