03a979575301e95b5a746399236bf947f55565f0
[debian/sudo] / plugins / sudoers / toke.c
1 #include <config.h>
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
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:
24  * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
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
309 #define YY_NUM_RULES 67
310 #define YY_END_OF_BUFFER 68
311 static yyconst short int yy_accept[814] =
312     {   0,
313         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
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,
400
401        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
402        37,   37,    0
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,
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,
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
437 static yyconst int yy_meta[71] =
438     {   0,
439         1,    2,    3,    4,    5,    6,    1,    7,    7,    1,
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
446     } ;
447
448 static yyconst short int yy_base[931] =
449     {   0,
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
552     } ;
553
554 static yyconst short int yy_def[931] =
555     {   0,
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
658     } ;
659
660 static yyconst short int yy_nxt[5675] =
661     {   0,
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
1286     } ;
1287
1288 static yyconst short int yy_chk[5675] =
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,
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,
1315         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
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,
1322
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
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 /*
1931  * Copyright (c) 1996, 1998-2005, 2007-2013
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 */
1973 #if defined(HAVE_STDINT_H)
1974 # include <stdint.h>
1975 #elif defined(HAVE_INTTYPES_H)
1976 # include <inttypes.h>
1977 #endif
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>
2006 #include "lbuf.h"
2007 #include "sha2.h"
2008 #include "secure_path.h"
2009
2010 extern YYSTYPE sudoerslval;
2011 extern bool parse_error;
2012 extern bool sudoers_warnings;
2013 int sudolineno;
2014 int last_token;
2015 char *sudoers;
2016
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;
2022
2023 static bool continued, sawspace;
2024 static int prev_state;
2025 static int digest_len;
2026
2027 static bool _push_include(char *, bool);
2028 static bool pop_include(void);
2029 static char *parse_include(char *);
2030
2031 int (*trace_print)(const char *msg) = sudoers_trace_print;
2032
2033 #define LEXRETURN(n)    do {    \
2034         last_token = (n);       \
2035         return (n);             \
2036 } while (0)
2037
2038 #define ECHO    ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout))
2039
2040 #define push_include(_p)        (_push_include((_p), false))
2041 #define push_includedir(_p)     (_push_include((_p), true))
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
2054 #define WANTDIGEST 6
2055
2056 #line 2056 "lex.sudoers.c"
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
2210 #line 140 "toke.l"
2211
2212 #line 2212 "lex.sudoers.c"
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];
2264                                 if ( yy_current_state >= 814 )
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                         }
2270                 while ( yy_base[yy_current_state] != 5604 );
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
2298 #line 141 "toke.l"
2299 {
2300                             LEXTRACE(", ");
2301                             LEXRETURN(',');
2302                         }                       /* return ',' */
2303         YY_BREAK
2304 case 2:
2305 YY_RULE_SETUP
2306 #line 146 "toke.l"
2307 BEGIN STARTDEFS;
2308         YY_BREAK
2309 case 3:
2310 YY_RULE_SETUP
2311 #line 148 "toke.l"
2312 {
2313                             BEGIN INDEFS;
2314                             LEXTRACE("DEFVAR ");
2315                             if (!fill(sudoerstext, sudoersleng))
2316                                 yyterminate();
2317                             LEXRETURN(DEFVAR);
2318                         }
2319         YY_BREAK
2320
2321 case 4:
2322 YY_RULE_SETUP
2323 #line 157 "toke.l"
2324 {
2325                             BEGIN STARTDEFS;
2326                             LEXTRACE(", ");
2327                             LEXRETURN(',');
2328                         }                       /* return ',' */
2329         YY_BREAK
2330 case 5:
2331 YY_RULE_SETUP
2332 #line 163 "toke.l"
2333 {
2334                             LEXTRACE("= ");
2335                             LEXRETURN('=');
2336                         }                       /* return '=' */
2337         YY_BREAK
2338 case 6:
2339 YY_RULE_SETUP
2340 #line 168 "toke.l"
2341 {
2342                             LEXTRACE("+= ");
2343                             LEXRETURN('+');
2344                         }                       /* return '+' */
2345         YY_BREAK
2346 case 7:
2347 YY_RULE_SETUP
2348 #line 173 "toke.l"
2349 {
2350                             LEXTRACE("-= ");
2351                             LEXRETURN('-');
2352                         }                       /* return '-' */
2353         YY_BREAK
2354 case 8:
2355 YY_RULE_SETUP
2356 #line 178 "toke.l"
2357 {
2358                             LEXTRACE("BEGINSTR ");
2359                             sudoerslval.string = NULL;
2360                             prev_state = YY_START;
2361                             BEGIN INSTR;
2362                         }
2363         YY_BREAK
2364 case 9:
2365 YY_RULE_SETUP
2366 #line 185 "toke.l"
2367 {
2368                             LEXTRACE("WORD(2) ");
2369                             if (!fill(sudoerstext, sudoersleng))
2370                                 yyterminate();
2371                             LEXRETURN(WORD);
2372                         }
2373         YY_BREAK
2374
2375
2376 case 10:
2377 YY_RULE_SETUP
2378 #line 194 "toke.l"
2379 {
2380                             /* Line continuation char followed by newline. */
2381                             sudolineno++;
2382                             continued = true;
2383                         }
2384         YY_BREAK
2385 case 11:
2386 YY_RULE_SETUP
2387 #line 200 "toke.l"
2388 {
2389                             LEXTRACE("ENDSTR ");
2390                             BEGIN prev_state;
2391
2392                             if (sudoerslval.string == NULL) {
2393                                 LEXTRACE("ERROR "); /* empty string */
2394                                 LEXRETURN(ERROR);
2395                             }
2396                             if (prev_state == INITIAL) {
2397                                 switch (sudoerslval.string[0]) {
2398                                 case '%':
2399                                     if (sudoerslval.string[1] == '\0' ||
2400                                         (sudoerslval.string[1] == ':' &&
2401                                         sudoerslval.string[2] == '\0')) {
2402                                         LEXTRACE("ERROR "); /* empty group */
2403                                         LEXRETURN(ERROR);
2404                                     }
2405                                     LEXTRACE("USERGROUP ");
2406                                     LEXRETURN(USERGROUP);
2407                                 case '+':
2408                                     if (sudoerslval.string[1] == '\0') {
2409                                         LEXTRACE("ERROR "); /* empty netgroup */
2410                                         LEXRETURN(ERROR);
2411                                     }
2412                                     LEXTRACE("NETGROUP ");
2413                                     LEXRETURN(NETGROUP);
2414                                 }
2415                             }
2416                             LEXTRACE("WORD(4) ");
2417                             LEXRETURN(WORD);
2418                         }
2419         YY_BREAK
2420 case 12:
2421 YY_RULE_SETUP
2422 #line 232 "toke.l"
2423 {
2424                             LEXTRACE("BACKSLASH ");
2425                             if (!append(sudoerstext, sudoersleng))
2426                                 yyterminate();
2427                         }
2428         YY_BREAK
2429 case 13:
2430 YY_RULE_SETUP
2431 #line 238 "toke.l"
2432 {
2433                             LEXTRACE("STRBODY ");
2434                             if (!append(sudoerstext, sudoersleng))
2435                                 yyterminate();
2436                         }
2437         YY_BREAK
2438
2439
2440 case 14:
2441 YY_RULE_SETUP
2442 #line 246 "toke.l"
2443 {
2444                             /* quoted fnmatch glob char, pass verbatim */
2445                             LEXTRACE("QUOTEDCHAR ");
2446                             if (!fill_args(sudoerstext, 2, sawspace))
2447                                 yyterminate();
2448                             sawspace = false;
2449                         }
2450         YY_BREAK
2451 case 15:
2452 YY_RULE_SETUP
2453 #line 254 "toke.l"
2454 {
2455                             /* quoted sudoers special char, strip backslash */
2456                             LEXTRACE("QUOTEDCHAR ");
2457                             if (!fill_args(sudoerstext + 1, 1, sawspace))
2458                                 yyterminate();
2459                             sawspace = false;
2460                         }
2461         YY_BREAK
2462 case 16:
2463 YY_RULE_SETUP
2464 #line 262 "toke.l"
2465 {
2466                             BEGIN INITIAL;
2467                             yyless(0);
2468                             LEXRETURN(COMMAND);
2469                         }                       /* end of command line args */
2470         YY_BREAK
2471 case 17:
2472 YY_RULE_SETUP
2473 #line 268 "toke.l"
2474 {
2475                             LEXTRACE("ARG ");
2476                             if (!fill_args(sudoerstext, sudoersleng, sawspace))
2477                                 yyterminate();
2478                             sawspace = false;
2479                         }                       /* a command line arg */
2480         YY_BREAK
2481
2482 case 18:
2483 YY_RULE_SETUP
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"
2525 {
2526                             char *path;
2527
2528                             if (continued) {
2529                                 LEXTRACE("ERROR ");
2530                                 LEXRETURN(ERROR);
2531                             }
2532
2533                             if ((path = parse_include(sudoerstext)) == NULL)
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
2543 case 21:
2544 YY_RULE_SETUP
2545 #line 328 "toke.l"
2546 {
2547                             char *path;
2548
2549                             if (continued) {
2550                                 LEXTRACE("ERROR ");
2551                                 LEXRETURN(ERROR);
2552                             }
2553
2554                             if ((path = parse_include(sudoerstext)) == NULL)
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
2567 case 22:
2568 YY_RULE_SETUP
2569 #line 349 "toke.l"
2570 {
2571                             char deftype;
2572                             int n;
2573
2574                             if (continued) {
2575                                 LEXTRACE("ERROR ");
2576                                 LEXRETURN(ERROR);
2577                             }
2578
2579                             for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
2580                                 continue;
2581                             n += sizeof("Defaults") - 1;
2582                             if ((deftype = sudoerstext[n++]) != '\0') {
2583                                 while (isblank((unsigned char)sudoerstext[n]))
2584                                     n++;
2585                             }
2586                             BEGIN GOTDEFS;
2587                             switch (deftype) {
2588                                 case ':':
2589                                     yyless(n);
2590                                     LEXTRACE("DEFAULTS_USER ");
2591                                     LEXRETURN(DEFAULTS_USER);
2592                                 case '>':
2593                                     yyless(n);
2594                                     LEXTRACE("DEFAULTS_RUNAS ");
2595                                     LEXRETURN(DEFAULTS_RUNAS);
2596                                 case '@':
2597                                     yyless(n);
2598                                     LEXTRACE("DEFAULTS_HOST ");
2599                                     LEXRETURN(DEFAULTS_HOST);
2600                                 case '!':
2601                                     yyless(n);
2602                                     LEXTRACE("DEFAULTS_CMND ");
2603                                     LEXRETURN(DEFAULTS_CMND);
2604                                 default:
2605                                     LEXTRACE("DEFAULTS ");
2606                                     LEXRETURN(DEFAULTS);
2607                             }
2608                         }
2609         YY_BREAK
2610 case 23:
2611 YY_RULE_SETUP
2612 #line 389 "toke.l"
2613 {
2614                             int n;
2615
2616                             if (continued) {
2617                                 LEXTRACE("ERROR ");
2618                                 LEXRETURN(ERROR);
2619                             }
2620
2621                             for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
2622                                 continue;
2623                             switch (sudoerstext[n]) {
2624                                 case 'H':
2625                                     LEXTRACE("HOSTALIAS ");
2626                                     LEXRETURN(HOSTALIAS);
2627                                 case 'C':
2628                                     LEXTRACE("CMNDALIAS ");
2629                                     LEXRETURN(CMNDALIAS);
2630                                 case 'U':
2631                                     LEXTRACE("USERALIAS ");
2632                                     LEXRETURN(USERALIAS);
2633                                 case 'R':
2634                                     LEXTRACE("RUNASALIAS ");
2635                                     LEXRETURN(RUNASALIAS);
2636                             }
2637                         }
2638         YY_BREAK
2639 case 24:
2640 YY_RULE_SETUP
2641 #line 415 "toke.l"
2642 {
2643                                 /* cmnd does not require passwd for this user */
2644                                 LEXTRACE("NOPASSWD ");
2645                                 LEXRETURN(NOPASSWD);
2646                         }
2647         YY_BREAK
2648 case 25:
2649 YY_RULE_SETUP
2650 #line 421 "toke.l"
2651 {
2652                                 /* cmnd requires passwd for this user */
2653                                 LEXTRACE("PASSWD ");
2654                                 LEXRETURN(PASSWD);
2655                         }
2656         YY_BREAK
2657 case 26:
2658 YY_RULE_SETUP
2659 #line 427 "toke.l"
2660 {
2661                                 LEXTRACE("NOEXEC ");
2662                                 LEXRETURN(NOEXEC);
2663                         }
2664         YY_BREAK
2665 case 27:
2666 YY_RULE_SETUP
2667 #line 432 "toke.l"
2668 {
2669                                 LEXTRACE("EXEC ");
2670                                 LEXRETURN(EXEC);
2671                         }
2672         YY_BREAK
2673 case 28:
2674 YY_RULE_SETUP
2675 #line 437 "toke.l"
2676 {
2677                                 LEXTRACE("SETENV ");
2678                                 LEXRETURN(SETENV);
2679                         }
2680         YY_BREAK
2681 case 29:
2682 YY_RULE_SETUP
2683 #line 442 "toke.l"
2684 {
2685                                 LEXTRACE("NOSETENV ");
2686                                 LEXRETURN(NOSETENV);
2687                         }
2688         YY_BREAK
2689 case 30:
2690 YY_RULE_SETUP
2691 #line 447 "toke.l"
2692 {
2693                                 LEXTRACE("LOG_OUTPUT ");
2694                                 LEXRETURN(LOG_OUTPUT);
2695                         }
2696         YY_BREAK
2697 case 31:
2698 YY_RULE_SETUP
2699 #line 452 "toke.l"
2700 {
2701                                 LEXTRACE("NOLOG_OUTPUT ");
2702                                 LEXRETURN(NOLOG_OUTPUT);
2703                         }
2704         YY_BREAK
2705 case 32:
2706 YY_RULE_SETUP
2707 #line 457 "toke.l"
2708 {
2709                                 LEXTRACE("LOG_INPUT ");
2710                                 LEXRETURN(LOG_INPUT);
2711                         }
2712         YY_BREAK
2713 case 33:
2714 YY_RULE_SETUP
2715 #line 462 "toke.l"
2716 {
2717                                 LEXTRACE("NOLOG_INPUT ");
2718                                 LEXRETURN(NOLOG_INPUT);
2719                         }
2720         YY_BREAK
2721 case 34:
2722 YY_RULE_SETUP
2723 #line 467 "toke.l"
2724 {
2725                             /* empty group or netgroup */
2726                             LEXTRACE("ERROR ");
2727                             LEXRETURN(ERROR);
2728                         }
2729         YY_BREAK
2730 case 35:
2731 YY_RULE_SETUP
2732 #line 473 "toke.l"
2733 {
2734                             /* netgroup */
2735                             if (!fill(sudoerstext, sudoersleng))
2736                                 yyterminate();
2737                             LEXTRACE("NETGROUP ");
2738                             LEXRETURN(NETGROUP);
2739                         }
2740         YY_BREAK
2741 case 36:
2742 YY_RULE_SETUP
2743 #line 481 "toke.l"
2744 {
2745                             /* group */
2746                             if (!fill(sudoerstext, sudoersleng))
2747                                 yyterminate();
2748                             LEXTRACE("USERGROUP ");
2749                             LEXRETURN(USERGROUP);
2750                         }
2751         YY_BREAK
2752 case 37:
2753 YY_RULE_SETUP
2754 #line 489 "toke.l"
2755 {
2756                             if (!fill(sudoerstext, sudoersleng))
2757                                 yyterminate();
2758                             LEXTRACE("NTWKADDR ");
2759                             LEXRETURN(NTWKADDR);
2760                         }
2761         YY_BREAK
2762 case 38:
2763 YY_RULE_SETUP
2764 #line 496 "toke.l"
2765 {
2766                             if (!fill(sudoerstext, sudoersleng))
2767                                 yyterminate();
2768                             LEXTRACE("NTWKADDR ");
2769                             LEXRETURN(NTWKADDR);
2770                         }
2771         YY_BREAK
2772 case 39:
2773 YY_RULE_SETUP
2774 #line 503 "toke.l"
2775 {
2776                             if (!ipv6_valid(sudoerstext)) {
2777                                 LEXTRACE("ERROR ");
2778                                 LEXRETURN(ERROR);
2779                             }
2780                             if (!fill(sudoerstext, sudoersleng))
2781                                 yyterminate();
2782                             LEXTRACE("NTWKADDR ");
2783                             LEXRETURN(NTWKADDR);
2784                         }
2785         YY_BREAK
2786 case 40:
2787 YY_RULE_SETUP
2788 #line 514 "toke.l"
2789 {
2790                             if (!ipv6_valid(sudoerstext)) {
2791                                 LEXTRACE("ERROR ");
2792                                 LEXRETURN(ERROR);
2793                             }
2794                             if (!fill(sudoerstext, sudoersleng))
2795                                 yyterminate();
2796                             LEXTRACE("NTWKADDR ");
2797                             LEXRETURN(NTWKADDR);
2798                         }
2799         YY_BREAK
2800 case 41:
2801 YY_RULE_SETUP
2802 #line 525 "toke.l"
2803 {
2804                             LEXTRACE("ALL ");
2805                             LEXRETURN(ALL);
2806
2807                         }
2808         YY_BREAK
2809 case 42:
2810 YY_RULE_SETUP
2811 #line 531 "toke.l"
2812 {
2813 #ifdef HAVE_SELINUX
2814                             LEXTRACE("ROLE ");
2815                             LEXRETURN(ROLE);
2816 #else
2817                             goto got_alias;
2818 #endif
2819                         }
2820         YY_BREAK
2821 case 43:
2822 YY_RULE_SETUP
2823 #line 540 "toke.l"
2824 {
2825 #ifdef HAVE_SELINUX
2826                             LEXTRACE("TYPE ");
2827                             LEXRETURN(TYPE);
2828 #else
2829                             goto got_alias;
2830 #endif
2831                         }
2832         YY_BREAK
2833 case 44:
2834 YY_RULE_SETUP
2835 #line 548 "toke.l"
2836 {
2837 #ifdef HAVE_PRIV_SET
2838                             LEXTRACE("PRIVS ");
2839                             LEXRETURN(PRIVS);
2840 #else
2841                             goto got_alias;
2842 #endif
2843                         }
2844         YY_BREAK
2845 case 45:
2846 YY_RULE_SETUP
2847 #line 557 "toke.l"
2848 {
2849 #ifdef HAVE_PRIV_SET
2850                             LEXTRACE("LIMITPRIVS ");
2851                             LEXRETURN(LIMITPRIVS);
2852 #else
2853                             goto got_alias;
2854 #endif
2855                         }
2856         YY_BREAK
2857 case 46:
2858 YY_RULE_SETUP
2859 #line 566 "toke.l"
2860 {
2861                         got_alias:
2862                             if (!fill(sudoerstext, sudoersleng))
2863                                 yyterminate();
2864                             LEXTRACE("ALIAS ");
2865                             LEXRETURN(ALIAS);
2866                         }
2867         YY_BREAK
2868 case 47:
2869 YY_RULE_SETUP
2870 #line 574 "toke.l"
2871 {
2872                             /* XXX - no way to specify digest for command */
2873                             /* no command args allowed for Defaults!/path */
2874                             if (!fill_cmnd(sudoerstext, sudoersleng))
2875                                 yyterminate();
2876                             LEXTRACE("COMMAND ");
2877                             LEXRETURN(COMMAND);
2878                         }
2879         YY_BREAK
2880 case 48:
2881 YY_RULE_SETUP
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"
2923 {
2924                             BEGIN GOTCMND;
2925                             LEXTRACE("COMMAND ");
2926                             if (!fill_cmnd(sudoerstext, sudoersleng))
2927                                 yyterminate();
2928                         }                       /* sudo -e */
2929         YY_BREAK
2930 case 53:
2931 YY_RULE_SETUP
2932 #line 618 "toke.l"
2933 {
2934                             /* directories can't have args... */
2935                             if (sudoerstext[sudoersleng - 1] == '/') {
2936                                 LEXTRACE("COMMAND ");
2937                                 if (!fill_cmnd(sudoerstext, sudoersleng))
2938                                     yyterminate();
2939                                 LEXRETURN(COMMAND);
2940                             } else {
2941                                 BEGIN GOTCMND;
2942                                 LEXTRACE("COMMAND ");
2943                                 if (!fill_cmnd(sudoerstext, sudoersleng))
2944                                     yyterminate();
2945                             }
2946                         }                       /* a pathname */
2947         YY_BREAK
2948 case 54:
2949 YY_RULE_SETUP
2950 #line 633 "toke.l"
2951 {
2952                             LEXTRACE("BEGINSTR ");
2953                             sudoerslval.string = NULL;
2954                             prev_state = YY_START;
2955                             BEGIN INSTR;
2956                         }
2957         YY_BREAK
2958 case 55:
2959 YY_RULE_SETUP
2960 #line 640 "toke.l"
2961 {
2962                             /* a word */
2963                             if (!fill(sudoerstext, sudoersleng))
2964                                 yyterminate();
2965                             LEXTRACE("WORD(5) ");
2966                             LEXRETURN(WORD);
2967                         }
2968         YY_BREAK
2969 case 56:
2970 YY_RULE_SETUP
2971 #line 648 "toke.l"
2972 {
2973                             LEXTRACE("( ");
2974                             LEXRETURN('(');
2975                         }
2976         YY_BREAK
2977 case 57:
2978 YY_RULE_SETUP
2979 #line 653 "toke.l"
2980 {
2981                             LEXTRACE(") ");
2982                             LEXRETURN(')');
2983                         }
2984         YY_BREAK
2985 case 58:
2986 YY_RULE_SETUP
2987 #line 658 "toke.l"
2988 {
2989                             LEXTRACE(", ");
2990                             LEXRETURN(',');
2991                         }                       /* return ',' */
2992         YY_BREAK
2993 case 59:
2994 YY_RULE_SETUP
2995 #line 663 "toke.l"
2996 {
2997                             LEXTRACE("= ");
2998                             LEXRETURN('=');
2999                         }                       /* return '=' */
3000         YY_BREAK
3001 case 60:
3002 YY_RULE_SETUP
3003 #line 668 "toke.l"
3004 {
3005                             LEXTRACE(": ");
3006                             LEXRETURN(':');
3007                         }                       /* return ':' */
3008         YY_BREAK
3009 case 61:
3010 YY_RULE_SETUP
3011 #line 673 "toke.l"
3012 {
3013                             if (sudoersleng & 1) {
3014                                 LEXTRACE("!");
3015                                 LEXRETURN('!'); /* return '!' */
3016                             }
3017                         }
3018         YY_BREAK
3019 case 62:
3020 YY_RULE_SETUP
3021 #line 680 "toke.l"
3022 {
3023                             if (YY_START == INSTR) {
3024                                 LEXTRACE("ERROR ");
3025                                 LEXRETURN(ERROR);       /* line break in string */
3026                             }
3027                             BEGIN INITIAL;
3028                             sudolineno++;
3029                             continued = false;
3030                             LEXTRACE("\n");
3031                             LEXRETURN(COMMENT);
3032                         }                       /* return newline */
3033         YY_BREAK
3034 case 63:
3035 YY_RULE_SETUP
3036 #line 692 "toke.l"
3037 {                       /* throw away space/tabs */
3038                             sawspace = true;    /* but remember for fill_args */
3039                         }
3040         YY_BREAK
3041 case 64:
3042 YY_RULE_SETUP
3043 #line 696 "toke.l"
3044 {
3045                             sawspace = true;    /* remember for fill_args */
3046                             sudolineno++;
3047                             continued = true;
3048                         }                       /* throw away EOL after \ */
3049         YY_BREAK
3050 case 65:
3051 YY_RULE_SETUP
3052 #line 702 "toke.l"
3053 {
3054                             BEGIN INITIAL;
3055                             sudolineno++;
3056                             continued = false;
3057                             LEXTRACE("#\n");
3058                             LEXRETURN(COMMENT);
3059                         }                       /* comment, not uid/gid */
3060         YY_BREAK
3061 case 66:
3062 YY_RULE_SETUP
3063 #line 710 "toke.l"
3064 {
3065                             LEXTRACE("ERROR ");
3066                             LEXRETURN(ERROR);
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):
3075 case YY_STATE_EOF(WANTDIGEST):
3076 #line 715 "toke.l"
3077 {
3078                             if (YY_START != INITIAL) {
3079                                 BEGIN INITIAL;
3080                                 LEXTRACE("ERROR ");
3081                                 LEXRETURN(ERROR);
3082                             }
3083                             if (!pop_include())
3084                                 yyterminate();
3085                         }
3086         YY_BREAK
3087 case 67:
3088 YY_RULE_SETUP
3089 #line 725 "toke.l"
3090 ECHO;
3091         YY_BREAK
3092 #line 3092 "lex.sudoers.c"
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];
3383                         if ( yy_current_state >= 814 )
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];
3418                 if ( yy_current_state >= 814 )
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];
3422         yy_is_jam = (yy_current_state == 813);
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
3983 #line 725 "toke.l"
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;
3995     bool keepopen;
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;
4017     debug_decl(switch_dir, SUDO_DEBUG_PARSER)
4018
4019     if (!(dir = opendir(dirpath))) {
4020         if (errno != ENOENT) {
4021             warning("%s", dirpath);
4022             sudoerserror(NULL);
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;
4047         path = NULL;
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);
4084     debug_return_str(path);
4085 bad:
4086     while (first != NULL) {
4087         pl = first;
4088         first = pl->next;
4089         efree(pl->path);
4090         efree(pl);
4091     }
4092     efree(sorted);
4093     efree(dirpath);
4094     efree(path);
4095     debug_return_str(NULL);
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;
4103 static bool keepopen;
4104
4105 void
4106 init_lexer(void)
4107 {
4108     struct path_list *pl;
4109     debug_decl(init_lexer, SUDO_DEBUG_PARSER)
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);
4121         sudoers_delete_buffer(istack[idepth].bs);
4122     }
4123     efree(istack);
4124     istack = NULL;
4125     istacksize = idepth = 0;
4126     sudolineno = 1;
4127     keepopen = false;
4128     sawspace = false;
4129     continued = false;
4130     prev_state = INITIAL;
4131
4132     debug_return;
4133 }
4134
4135 static bool
4136 _push_include(char *path, bool isdir)
4137 {
4138     struct path_list *pl;
4139     FILE *fp;
4140     debug_decl(_push_include, SUDO_DEBUG_PARSER)
4141
4142     /* push current state onto stack */
4143     if (idepth >= istacksize) {
4144         if (idepth > MAX_SUDOERS_DEPTH) {
4145             sudoerserror(N_("too many levels of includes"));
4146             debug_return_bool(false);
4147         }
4148         istacksize += SUDOERS_STACK_INCREMENT;
4149         istack = (struct include_stack *) realloc(istack,
4150             sizeof(*istack) * istacksize);
4151         if (istack == NULL) {
4152             warning(NULL);
4153             sudoerserror(NULL);
4154             debug_return_bool(false);
4155         }
4156     }
4157     if (isdir) {
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         }
4193         if (!(path = switch_dir(&istack[idepth], path))) {
4194             /* switch_dir() called sudoerserror() for us */
4195             debug_return_bool(false);
4196         }
4197         while ((fp = open_sudoers(path, false, &keepopen)) == NULL) {
4198             /* Unable to open path in includedir, go to next one, if any. */
4199             efree(path);
4200             if ((pl = istack[idepth].more) == NULL)
4201                 debug_return_bool(false);
4202             path = pl->path;
4203             istack[idepth].more = pl->next;
4204             efree(pl);
4205         }
4206     } else {
4207         if ((fp = open_sudoers(path, true, &keepopen)) == NULL) {
4208             /* The error was already printed by open_sudoers() */
4209             sudoerserror(NULL);
4210             debug_return_bool(false);
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;
4222     sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
4223
4224     debug_return_bool(true);
4225 }
4226
4227 static bool
4228 pop_include(void)
4229 {
4230     struct path_list *pl;
4231     FILE *fp;
4232     debug_decl(pop_include, SUDO_DEBUG_PARSER)
4233
4234     if (idepth == 0)
4235         debug_return_bool(false);
4236
4237     if (!keepopen)
4238         fclose(YY_CURRENT_BUFFER->yy_input_file);
4239     sudoers_delete_buffer(YY_CURRENT_BUFFER);
4240     /* If we are in an include dir, move to the next file. */
4241     while ((pl = istack[idepth - 1].more) != NULL) {
4242         fp = open_sudoers(pl->path, false, &keepopen);
4243         if (fp != NULL) {
4244             istack[idepth - 1].more = pl->next;
4245             efree(sudoers);
4246             sudoers = pl->path;
4247             sudolineno = 1;
4248             sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
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--;
4260         sudoers_switch_to_buffer(istack[idepth].bs);
4261         efree(sudoers);
4262         sudoers = istack[idepth].path;
4263         sudolineno = istack[idepth].lineno;
4264         keepopen = istack[idepth].keepopen;
4265     }
4266     debug_return_bool(true);
4267 }
4268
4269 static char *
4270 parse_include(char *base)
4271 {
4272     char *cp, *ep, *path, *pp;
4273     int dirlen = 0, len = 0, subst = 0;
4274     size_t shost_len = 0;
4275     debug_decl(parse_include, SUDO_DEBUG_PARSER)
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
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. */
4301     len += (int)(ep - cp);
4302     path = pp = malloc(len + dirlen + 1);
4303     if (path == NULL) {
4304         warning(NULL);
4305         sudoerserror(NULL);
4306         debug_return_str(NULL);
4307     }
4308     if (dirlen) {
4309         memcpy(path, sudoers, dirlen);
4310         pp += dirlen;
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 {
4325         memcpy(pp, cp, len);
4326         pp[len] = '\0';
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
4333     debug_return_str(path);
4334 }
4335
4336 #ifdef TRACELEXER
4337 int
4338 sudoers_trace_print(const char *msg)
4339 {
4340     return fputs(msg, stderr);
4341 }
4342 #else
4343 int
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 }
4364 #endif /* TRACELEXER */