pre.cpp
Go to the documentation of this file.
1 #line 2 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pre.cpp"
2 
3 #line 4 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pre.cpp"
4 
5 #define YY_INT_ALIGNED short int
6 
7 /* A lexical scanner generated by flex */
8 
9 #define yy_create_buffer preYY_create_buffer
10 #define yy_delete_buffer preYY_delete_buffer
11 #define yy_flex_debug preYY_flex_debug
12 #define yy_init_buffer preYY_init_buffer
13 #define yy_flush_buffer preYY_flush_buffer
14 #define yy_load_buffer_state preYY_load_buffer_state
15 #define yy_switch_to_buffer preYY_switch_to_buffer
16 #define yyin preYYin
17 #define yyleng preYYleng
18 #define yylex preYYlex
19 #define yylineno preYYlineno
20 #define yyout preYYout
21 #define yyrestart preYYrestart
22 #define yytext preYYtext
23 #define yywrap preYYwrap
24 #define yyalloc preYYalloc
25 #define yyrealloc preYYrealloc
26 #define yyfree preYYfree
27 
28 #define FLEX_SCANNER
29 #define YY_FLEX_MAJOR_VERSION 2
30 #define YY_FLEX_MINOR_VERSION 5
31 #define YY_FLEX_SUBMINOR_VERSION 35
32 #if YY_FLEX_SUBMINOR_VERSION > 0
33 #define FLEX_BETA
34 #endif
35 
36 /* First, we deal with platform-specific or compiler-specific issues. */
37 
38 /* begin standard C headers. */
39 #include <stdio.h>
40 #include <string.h>
41 #include <errno.h>
42 #include <stdlib.h>
43 
44 /* end standard C headers. */
45 
46 /* flex integer type definitions */
47 
48 #ifndef FLEXINT_H
49 #define FLEXINT_H
50 
51 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
52 
53 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
54 
55 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
56  * if you want the limit (max/min) macros for int types.
57  */
58 #ifndef __STDC_LIMIT_MACROS
59 #define __STDC_LIMIT_MACROS 1
60 #endif
61 
62 #include <inttypes.h>
63 typedef int8_t flex_int8_t;
64 typedef uint8_t flex_uint8_t;
65 typedef int16_t flex_int16_t;
66 typedef uint16_t flex_uint16_t;
67 typedef int32_t flex_int32_t;
68 typedef uint32_t flex_uint32_t;
69 #else
70 typedef signed char flex_int8_t;
71 typedef short int flex_int16_t;
72 typedef int flex_int32_t;
73 typedef unsigned char flex_uint8_t;
74 typedef unsigned short int flex_uint16_t;
75 typedef unsigned int flex_uint32_t;
76 #endif /* ! C99 */
77 
78 /* Limits of integral types. */
79 #ifndef INT8_MIN
80 #define INT8_MIN (-128)
81 #endif
82 #ifndef INT16_MIN
83 #define INT16_MIN (-32767-1)
84 #endif
85 #ifndef INT32_MIN
86 #define INT32_MIN (-2147483647-1)
87 #endif
88 #ifndef INT8_MAX
89 #define INT8_MAX (127)
90 #endif
91 #ifndef INT16_MAX
92 #define INT16_MAX (32767)
93 #endif
94 #ifndef INT32_MAX
95 #define INT32_MAX (2147483647)
96 #endif
97 #ifndef UINT8_MAX
98 #define UINT8_MAX (255U)
99 #endif
100 #ifndef UINT16_MAX
101 #define UINT16_MAX (65535U)
102 #endif
103 #ifndef UINT32_MAX
104 #define UINT32_MAX (4294967295U)
105 #endif
106 
107 #endif /* ! FLEXINT_H */
108 
109 #ifdef __cplusplus
110 
111 /* The "const" storage-class-modifier is valid. */
112 #define YY_USE_CONST
113 
114 #else /* ! __cplusplus */
115 
116 /* C99 requires __STDC__ to be defined as 1. */
117 #if defined (__STDC__)
118 
119 #define YY_USE_CONST
120 
121 #endif /* defined (__STDC__) */
122 #endif /* ! __cplusplus */
123 
124 #ifdef YY_USE_CONST
125 #define yyconst const
126 #else
127 #define yyconst
128 #endif
129 
130 /* Returned upon end-of-file. */
131 #define YY_NULL 0
132 
133 /* Promotes a possibly negative, possibly signed char to an unsigned
134  * integer for use as an array index. If the signed char is negative,
135  * we want to instead treat it as an 8-bit unsigned char, hence the
136  * double cast.
137  */
138 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
139 
140 /* Enter a start condition. This macro really ought to take a parameter,
141  * but we do it the disgusting crufty way forced on us by the ()-less
142  * definition of BEGIN.
143  */
144 #define BEGIN (yy_start) = 1 + 2 *
145 
146 /* Translate the current start state into a value that can be later handed
147  * to BEGIN to return to the state. The YYSTATE alias is for lex
148  * compatibility.
149  */
150 #define YY_START (((yy_start) - 1) / 2)
151 #define YYSTATE YY_START
152 
153 /* Action number for EOF rule of a given start state. */
154 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
155 
156 /* Special action meaning "start processing a new file". */
157 #define YY_NEW_FILE preYYrestart(preYYin )
158 
159 #define YY_END_OF_BUFFER_CHAR 0
160 
161 /* Size of default input buffer. */
162 #ifndef YY_BUF_SIZE
163 #define YY_BUF_SIZE 16384
164 #endif
165 
166 /* The state buf must be large enough to hold one state per character in the main buffer.
167  */
168 #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
169 
170 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
171 #define YY_TYPEDEF_YY_BUFFER_STATE
173 #endif
174 
175 extern int preYYleng;
176 
177 extern FILE *preYYin, *preYYout;
178 
179 #define EOB_ACT_CONTINUE_SCAN 0
180 #define EOB_ACT_END_OF_FILE 1
181 #define EOB_ACT_LAST_MATCH 2
182 
183  #define YY_LESS_LINENO(n)
184 
185 /* Return all but the first "n" matched characters back to the input stream. */
186 #define yyless(n) \
187  do \
188  { \
189  /* Undo effects of setting up preYYtext. */ \
190  int yyless_macro_arg = (n); \
191  YY_LESS_LINENO(yyless_macro_arg);\
192  *yy_cp = (yy_hold_char); \
193  YY_RESTORE_YY_MORE_OFFSET \
194  (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
195  YY_DO_BEFORE_ACTION; /* set up preYYtext again */ \
196  } \
197  while ( 0 )
198 
199 #define unput(c) yyunput( c, (yytext_ptr) )
200 
201 #ifndef YY_TYPEDEF_YY_SIZE_T
202 #define YY_TYPEDEF_YY_SIZE_T
203 typedef size_t yy_size_t;
204 #endif
205 
206 #ifndef YY_STRUCT_YY_BUFFER_STATE
207 #define YY_STRUCT_YY_BUFFER_STATE
208 struct yy_buffer_state
209  {
210  FILE *yy_input_file;
211 
212  char *yy_ch_buf; /* input buffer */
213  char *yy_buf_pos; /* current position in input buffer */
214 
215  /* Size of input buffer in bytes, not including room for EOB
216  * characters.
217  */
219 
220  /* Number of characters read into yy_ch_buf, not including EOB
221  * characters.
222  */
223  int yy_n_chars;
224 
225  /* Whether we "own" the buffer - i.e., we know we created it,
226  * and can realloc() it to grow it, and should free() it to
227  * delete it.
228  */
229  int yy_is_our_buffer;
230 
231  /* Whether this is an "interactive" input source; if so, and
232  * if we're using stdio for input, then we want to use getc()
233  * instead of fread(), to make sure we stop fetching input after
234  * each newline.
235  */
236  int yy_is_interactive;
237 
238  /* Whether we're considered to be at the beginning of a line.
239  * If so, '^' rules will be active on the next match, otherwise
240  * not.
241  */
242  int yy_at_bol;
243 
244  int yy_bs_lineno; /**< The line count. */
245  int yy_bs_column; /**< The column count. */
246 
247  /* Whether to try to fill the input buffer when we reach the
248  * end of it.
249  */
250  int yy_fill_buffer;
251 
252  int yy_buffer_status;
253 
254 #define YY_BUFFER_NEW 0
255 #define YY_BUFFER_NORMAL 1
256  /* When an EOF's been seen but there's still some text to process
257  * then we mark the buffer as YY_EOF_PENDING, to indicate that we
258  * shouldn't try reading from the input source any more. We might
259  * still have a bunch of tokens to match, though, because of
260  * possible backing-up.
261  *
262  * When we actually see the EOF, we change the status to "new"
263  * (via preYYrestart()), so that the user can continue scanning by
264  * just pointing preYYin at a new input file.
265  */
266 #define YY_BUFFER_EOF_PENDING 2
267 
268  };
269 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
270 
271 /* Stack of input buffers. */
272 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
273 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
274 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
275 
276 /* We provide macros for accessing buffer states in case in the
277  * future we want to put the buffer states in a more general
278  * "scanner state".
279  *
280  * Returns the top of the stack, or NULL.
281  */
282 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
283  ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
284  : NULL)
285 
286 /* Same as previous macro, but useful when we know that the buffer stack is not
287  * NULL or when we need an lvalue. For internal use only.
288  */
289 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
290 
291 /* yy_hold_char holds the character lost when preYYtext is formed. */
292 static char yy_hold_char;
293 static int yy_n_chars; /* number of characters read into yy_ch_buf */
295 
296 /* Points to current character in buffer. */
297 static char *yy_c_buf_p = (char *) 0;
298 static int yy_init = 0; /* whether we need to initialize */
299 static int yy_start = 0; /* start state number */
300 
301 /* Flag which is used to allow preYYwrap()'s to do buffer switches
302  * instead of setting up a fresh preYYin. A bit of a hack ...
303  */
305 
306 void preYYrestart (FILE *input_file );
307 void preYY_switch_to_buffer (YY_BUFFER_STATE new_buffer );
308 YY_BUFFER_STATE preYY_create_buffer (FILE *file,int size );
309 void preYY_delete_buffer (YY_BUFFER_STATE b );
310 void preYY_flush_buffer (YY_BUFFER_STATE b );
311 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer );
312 void preYYpop_buffer_state (void );
313 
314 static void preYYensure_buffer_stack (void );
315 static void preYY_load_buffer_state (void );
316 static void preYY_init_buffer (YY_BUFFER_STATE b,FILE *file );
317 
318 #define YY_FLUSH_BUFFER preYY_flush_buffer(YY_CURRENT_BUFFER )
319 
320 YY_BUFFER_STATE preYY_scan_buffer (char *base,yy_size_t size );
321 YY_BUFFER_STATE preYY_scan_string (yyconst char *yy_str );
322 YY_BUFFER_STATE preYY_scan_bytes (yyconst char *bytes,int len );
323 
324 void *preYYalloc (yy_size_t );
325 void *preYYrealloc (void *,yy_size_t );
326 void preYYfree (void * );
327 
328 #define yy_new_buffer preYY_create_buffer
329 
330 #define yy_set_interactive(is_interactive) \
331  { \
332  if ( ! YY_CURRENT_BUFFER ){ \
333  preYYensure_buffer_stack (); \
334  YY_CURRENT_BUFFER_LVALUE = \
335  preYY_create_buffer(preYYin,YY_BUF_SIZE ); \
336  } \
337  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
338  }
339 
340 #define yy_set_bol(at_bol) \
341  { \
342  if ( ! YY_CURRENT_BUFFER ){\
343  preYYensure_buffer_stack (); \
344  YY_CURRENT_BUFFER_LVALUE = \
345  preYY_create_buffer(preYYin,YY_BUF_SIZE ); \
346  } \
347  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
348  }
349 
350 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
351 
352 /* Begin user sect3 */
353 
354 #define preYYwrap(n) 1
355 #define YY_SKIP_YYWRAP
356 
357 typedef unsigned char YY_CHAR;
358 
359 FILE *preYYin = (FILE *) 0, *preYYout = (FILE *) 0;
360 
361 typedef int yy_state_type;
362 
363 extern int preYYlineno;
364 
365 int preYYlineno = 1;
366 
367 extern char *preYYtext;
368 #define yytext_ptr preYYtext
369 
370 static yy_state_type yy_get_previous_state (void );
371 static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
372 static int yy_get_next_buffer (void );
373 static void yy_fatal_error (yyconst char msg[] );
374 
375 /* Done after the current pattern has been matched and before the
376  * corresponding action - sets up preYYtext.
377  */
378 #define YY_DO_BEFORE_ACTION \
379  (yytext_ptr) = yy_bp; \
380  preYYleng = (size_t) (yy_cp - yy_bp); \
381  (yy_hold_char) = *yy_cp; \
382  *yy_cp = '\0'; \
383  (yy_c_buf_p) = yy_cp;
384 
385 #define YY_NUM_RULES 187
386 #define YY_END_OF_BUFFER 188
387 /* This struct is not used in this scanner,
388  but its presence is necessary. */
389 struct yy_trans_info
390  {
391  flex_int32_t yy_verify;
393  };
395  { 0,
396  169, 169, 188, 186, 187, 1, 186, 187, 185, 187,
397  3, 186, 187, 186, 187, 186, 187, 2, 186, 187,
398  6, 186, 187, 1, 6, 186, 187, 6, 186, 187,
399  6, 185, 187, 3, 6, 186, 187, 5, 186, 187,
400  6, 186, 187, 6, 186, 187, 6, 186, 187, 6,
401  186, 187, 2, 6, 186, 187, 59, 186, 187, 1,
402  59, 186, 187, 54, 185, 187, 3, 59, 186, 187,
403  59, 186, 187, 59, 186, 187, 56, 59, 186, 187,
404  56, 59, 186, 187, 56, 59, 186, 187, 56, 59,
405  186, 187, 56, 59, 186, 187, 56, 59, 186, 187,
406 
407  56, 59, 186, 187, 2, 59, 186, 187, 83, 186,
408  187, 1, 83, 186, 187, 81, 185, 187, 3, 83,
409  186, 187, 83, 186, 187, 83, 186, 187, 82, 83,
410  186, 187, 82, 83, 186, 187, 82, 83, 186, 187,
411  2, 83, 186, 187, 84, 87, 186, 187, 1, 84,
412  87, 186, 187, 92, 185, 187, 3, 84, 87, 186,
413  187, 86, 87, 186, 187, 87, 186, 187, 87, 186,
414  187, 84, 87, 186, 187, 2, 84, 87, 186, 187,
415  93, 96, 186, 187, 1, 93, 96, 186, 187, 3,
416  93, 96, 186, 187, 95, 96, 186, 187, 93, 96,
417 
418  186, 187, 93, 96, 186, 187, 96, 186, 187, 2,
419  93, 96, 186, 187, 23, 186, 187, 1, 23, 186,
420  187, 24, 185, 187, 3, 23, 186, 187, 16, 23,
421  186, 187, 23, 186, 187, 23, 186, 187, 23, 186,
422  187, 21, 23, 186, 187,16404, 23, 186, 187, 21,
423  23, 186, 187,16404, 11, 23, 186, 187, 12, 23,
424  186, 187, 2, 23, 186, 187, 17, 186, 187, 1,
425  17, 186, 187, 19, 186, 187, 17, 186, 187, 17,
426  186, 187, 186, 187, 2, 17, 186, 187, 186, 187,
427  1, 186, 187, 3, 186, 187, 186, 187, 186, 187,
428 
429  2, 186, 187, 98, 186, 187, 102, 186, 187, 1,
430  102, 186, 187, 100, 185, 187, 3, 102, 186, 187,
431  102, 186, 187, 102, 186, 187, 102, 186, 187, 2,
432  102, 186, 187, 8298, 186, 187,16487,16489,16490, 186,
433  187, 109, 186, 187, 110, 186, 187, 108, 186, 187,
434  186, 187, 112, 186, 187, 186, 187, 181, 186, 187,
435  1, 181, 186, 187, 169, 181, 186, 187, 168, 185,
436  187, 3, 181, 186, 187, 172, 181, 186, 187, 164,
437  181, 186, 187, 173, 181, 186, 187, 181, 186, 187,
438  181, 186, 187, 171, 181, 186, 187, 165, 181, 186,
439 
440  187, 181, 186, 187, 2, 181, 186, 187, 76, 186,
441  187, 1, 76, 186, 187, 75, 185, 187, 3, 76,
442  186, 187, 76, 186, 187, 76, 186, 187, 2, 76,
443  186, 187, 74, 76, 186, 187, 1, 74, 76, 186,
444  187, 74, 76, 186, 187, 74, 75, 185, 187, 3,
445  74, 76, 186, 187, 73, 76, 186, 187, 74, 76,
446  186, 187, 74, 76, 186, 187, 2, 74, 76, 186,
447  187, 141, 143, 186, 187, 1, 143, 186, 187, 142,
448  185, 187, 3, 141, 143, 186, 187, 143, 186, 187,
449  143, 186, 187, 141, 143, 186, 187, 143, 186, 187,
450 
451  143, 186, 187, 2, 141, 143, 186, 187, 141, 143,
452  186, 187, 143, 186, 187, 143, 186, 187, 143, 186,
453  187, 33, 36, 186, 187, 1, 33, 36, 186, 187,
454  35, 185, 187, 3, 33, 36, 186, 187, 36, 186,
455  187, 33, 36, 186, 187, 33, 36, 186, 187, 2,
456  33, 36, 186, 187, 144, 166, 186, 187, 1, 144,
457  166, 186, 187, 146, 185, 187, 3, 144, 166, 186,
458  187, 166, 186, 187, 144, 166, 186, 187, 144, 166,
459  186, 187, 165, 166, 186, 187, 2, 144, 166, 186,
460  187, 143, 186, 187, 143, 186, 187, 143, 186, 187,
461 
462  141, 143, 186, 187, 143, 186, 187, 143, 186, 187,
463  143, 186, 187, 154, 158, 159, 186, 187, 1, 154,
464  159, 186, 187, 155, 185, 187, 3, 154, 158, 159,
465  186, 187, 158, 159, 186, 187, 154, 158, 159, 186,
466  187, 159, 186, 187, 2, 154, 158, 159, 186, 187,
467  151, 153, 186, 187, 1, 153, 186, 187, 152, 185,
468  187, 3, 151, 153, 186, 187, 153, 186, 187, 151,
469  153, 186, 187, 151, 153, 186, 187, 2, 151, 153,
470  186, 187, 162, 163, 186, 187, 1, 163, 186, 187,
471  3, 162, 163, 186, 187, 162, 163, 186, 187, 162,
472 
473  163, 186, 187, 2, 162, 163, 186, 187, 65, 186,
474  187, 1, 65, 186, 187, 66, 185, 187, 3, 65,
475  186, 187, 65, 186, 187, 65, 186, 187, 64, 65,
476  186, 187, 65, 186, 187, 64, 65, 186, 187, 2,
477  65, 186, 187, 72, 186, 187, 1, 72, 186, 187,
478  70, 185, 187, 3, 72, 186, 187, 72, 186, 187,
479  72, 186, 187, 68, 72, 186, 187, 72, 186, 187,
480  2, 72, 186, 187, 71, 72, 186, 187, 69, 72,
481  186, 187, 179, 186, 187, 1, 179, 186, 187, 3,
482  179, 186, 187, 176, 179, 186, 187, 179, 186, 187,
483 
484  179, 186, 187, 179, 186, 187, 2, 179, 186, 187,
485  180, 186, 187, 1, 180, 186, 187, 3, 180, 186,
486  187, 178, 180, 186, 187, 180, 186, 187, 180, 186,
487  187, 180, 186, 187, 2, 180, 186, 187, 60, 186,
488  187, 58, 186, 187, 1, 58, 186, 187, 3, 58,
489  186, 187, 58, 186, 187, 58, 186, 187, 58, 186,
490  187, 2, 58, 186, 187, 32, 186, 187, 1, 32,
491  186, 187, 30, 185, 187, 3, 32, 186, 187, 29,
492  32, 186, 187, 32, 186, 187, 25, 32, 186, 187,
493  26, 32, 186, 187, 32, 186, 187, 32, 186, 187,
494 
495  31, 32, 186, 187, 2, 32, 186, 187, 40, 186,
496  187, 1, 40, 186, 187, 3, 40, 186, 187, 37,
497  40, 186, 187, 40, 186, 187, 40, 186, 187, 40,
498  186, 187, 2, 40, 186, 187, 127, 186, 187, 1,
499  127, 186, 187, 126, 127, 186, 187, 3, 127, 186,
500  187, 127, 186, 187, 127, 186, 187, 2, 127, 186,
501  187, 130, 131, 186, 187, 1, 130, 131, 186, 187,
502  129, 185, 187, 3, 130, 131, 186, 187, 130, 186,
503  187, 130, 186, 187, 130, 131, 186, 187, 130, 186,
504  187, 2, 130, 131, 186, 187, 183, 184, 6, 6,
505 
506  5, 6, 6, 56, 56, 56, 56, 56, 56, 56,
507  56, 56, 56, 91, 183, 89, 184, 82, 82, 82,
508  82, 84, 84, 93, 90, 93, 183, 88, 93, 184,
509  93, 94, 8212, 21,16404, 22, 21,16404, 17, 17,
510  183, 17, 184, 17, 18, 99, 183, 184, 97, 98,
511  100, 183, 184, 101, 8298, 8297, 8295, 8298,16487,16489,
512  16490, 110, 109, 110, 108, 112, 112, 107, 169, 170,
513  113, 183, 114, 184, 165, 167, 74, 74, 73, 141,
514  115, 117, 183, 116, 184, 141, 141, 33, 34, 33,
515  184, 33, 144, 145, 144, 184, 144, 140, 140, 183,
516 
517  141, 154, 158, 154, 158, 156, 158, 183, 157, 158,
518  184, 154, 158, 151, 148, 150, 183, 149, 151, 184,
519  151, 162, 160, 162, 183, 161, 162, 184, 162, 64,
520  61, 64, 68, 67, 69, 175, 183, 174, 184, 177,
521  60, 57, 28, 183, 38, 183, 38, 184, 39, 126,
522  131, 183, 184, 131, 183, 184, 4, 56, 56, 56,
523  56, 56, 48, 56, 56, 56, 56, 56, 56, 91,
524  91, 183, 89, 89, 184, 82, 82, 82, 77, 82,
525  82, 85, 4, 84, 90, 93, 90, 90, 93, 183,
526  88, 93, 88, 88, 93, 184, 4, 93, 15, 15,
527 
528  21,16404, 17, 183, 17, 184, 4, 17, 183, 184,
529  4, 4, 99, 183, 184, 4, 111, 170, 113, 113,
530  183, 114, 114, 184, 116, 184, 4, 141, 141, 120,
531  119, 33, 184, 4, 33, 144, 184, 4, 144, 137,
532  141, 139, 138, 158, 183, 158, 184, 4, 154, 158,
533  4, 158, 147, 151, 184, 4, 151, 162, 183, 162,
534  184, 4, 162, 64, 174, 184, 27, 28, 183, 133,
535  133, 183, 132, 132, 184, 4, 131, 182,16391,16391,
536  56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
537  56, 91, 182, 82, 78, 82, 82, 82, 85, 90,
538 
539  93, 182, 14, 13, 14, 21,16404, 17, 182, 182,
540  182, 104, 112, 116, 118, 141, 120, 119, 141, 139,
541  138, 158, 182, 162, 182, 64, 27,16391, 9, 8199,
542  56, 56, 49, 52, 50, 50, 56, 56, 56, 56,
543  56, 56, 56, 56, 79, 82, 80, 82, 82, 13,
544  21,16404, 122, 64, 8199, 9, 56, 56, 53, 45,
545  44, 56, 56, 56, 56, 51, 21,16404, 121, 125,
546  128, 124, 64, 8, 9, 43, 47, 46,16425, 42,
547  10, 123, 64, 9, 8233, 63, 62, 9, 8233, 136,
548  135, 9, 134, 9, 55, 9, 9, 9
549 
550  } ;
551 
553  { 0,
554  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
555  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
556  1, 1, 1, 1, 1, 1, 1, 2, 3, 3,
557  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
558  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
559  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
560  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
561  3, 3, 3, 4, 6, 9, 11, 14, 16, 18,
562  21, 24, 28, 31, 34, 38, 41, 44, 47, 50,
563  53, 57, 60, 64, 67, 71, 74, 77, 81, 85,
564 
565  89, 93, 97, 101, 105, 109, 112, 116, 119, 123,
566  126, 129, 133, 137, 141, 145, 149, 154, 157, 162,
567  166, 169, 172, 176, 181, 185, 190, 195, 199, 203,
568  207, 210, 215, 218, 222, 225, 229, 233, 236, 239,
569  242, 247, 250, 255, 259, 263, 267, 270, 274, 277,
570  280, 283, 285, 289, 291, 294, 297, 299, 301, 304,
571  307, 310, 314, 317, 321, 324, 327, 330, 334, 340,
572  342, 345, 348, 351, 353, 356, 358, 361, 365, 369,
573  372, 376, 380, 384, 388, 391, 394, 398, 402, 405,
574  409, 412, 416, 419, 423, 426, 429, 433, 437, 442,
575 
576  446, 450, 455, 459, 463, 467, 472, 476, 480, 483,
577  488, 491, 494, 498, 501, 504, 509, 513, 516, 519,
578  522, 526, 531, 534, 539, 542, 546, 550, 555, 559,
579  564, 567, 572, 575, 579, 583, 587, 592, 595, 598,
580  601, 605, 608, 611, 614, 619, 624, 627, 633, 637,
581  642, 645, 651, 655, 659, 662, 667, 670, 674, 678,
582  683, 687, 691, 696, 700, 704, 709, 712, 716, 719,
583  723, 726, 729, 733, 736, 740, 744, 747, 751, 754,
584  758, 761, 764, 768, 771, 775, 779, 783, 786, 790,
585  794, 798, 801, 804, 807, 811, 814, 818, 822, 826,
586 
587  829, 832, 835, 839, 842, 845, 849, 853, 856, 859,
588  862, 866, 869, 873, 876, 880, 884, 887, 891, 895,
589  898, 901, 905, 909, 912, 916, 920, 924, 927, 930,
590  933, 937, 940, 944, 948, 952, 955, 958, 962, 966,
591  971, 974, 979, 982, 985, 989, 992, 997, 998, 999,
592  999, 1000, 1001, 1002, 1003, 1004, 1004, 1004, 1005, 1006,
593  1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1016, 1018,
594  1019, 1020, 1021, 1022, 1023, 1023, 1023, 1024, 1025, 1028,
595  1031, 1032, 1033, 1033, 1033, 1033, 1034, 1036, 1037, 1037,
596  1039, 1040, 1042, 1044, 1045, 1046, 1046, 1047, 1048, 1049,
597 
598  1049, 1049, 1050, 1051, 1051, 1052, 1053, 1054, 1054, 1055,
599  1055, 1056, 1057, 1058, 1062, 1062, 1062, 1063, 1064, 1065,
600  1066, 1066, 1067, 1067, 1068, 1069, 1070, 1070, 1071, 1073,
601  1075, 1076, 1077, 1077, 1078, 1079, 1080, 1081, 1082, 1084,
602  1086, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
603  1087, 1087, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1089,
604  1090, 1092, 1093, 1094, 1095, 1097, 1098, 1099, 1101, 1101,
605  1101, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1104, 1105,
606  1106, 1109, 1112, 1114, 1114, 1114, 1115, 1116, 1118, 1121,
607  1122, 1123, 1126, 1129, 1130, 1131, 1132, 1132, 1133, 1134,
608 
609  1135, 1136, 1138, 1140, 1141, 1142, 1143, 1143, 1143, 1143,
610  1145, 1147, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1155,
611  1155, 1156, 1157, 1158, 1158, 1158, 1158, 1158, 1159, 1160,
612  1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170,
613  1171, 1173, 1174, 1176, 1177, 1178, 1179, 1180, 1181, 1182,
614  1182, 1183, 1183, 1183, 1185, 1187, 1188, 1191, 1193, 1194,
615  1197, 1199, 1200, 1200, 1201, 1201, 1201, 1203, 1205, 1207,
616  1209, 1210, 1211, 1212, 1214, 1215, 1216, 1217, 1217, 1217,
617  1218, 1218, 1219, 1220, 1222, 1223, 1225, 1227, 1229, 1229,
618  1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
619 
620  1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1230, 1230,
621  1231, 1232, 1234, 1236, 1238, 1240, 1240, 1241, 1242, 1242,
622  1243, 1244, 1246, 1248, 1251, 1253, 1253, 1253, 1253, 1254,
623  1256, 1258, 1260, 1262, 1264, 1265, 1267, 1267, 1268, 1268,
624  1268, 1270, 1271, 1273, 1274, 1276, 1278, 1278, 1279, 1279,
625  1279, 1280, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
626  1288, 1289, 1290, 1291, 1292, 1294, 1295, 1297, 1298, 1299,
627  1299, 1300, 1300, 1303, 1304, 1306, 1306, 1306, 1308, 1310,
628  1311, 1312, 1313, 1314, 1315, 1315, 1315, 1315, 1316, 1316,
629  1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
630 
631  1316, 1316, 1316, 1316, 1316, 1316, 1317, 1317, 1318, 1319,
632  1319, 1320, 1320, 1321, 1322, 1324, 1324, 1324, 1326, 1327,
633  1327, 1328, 1328, 1328, 1328, 1329, 1329, 1330, 1330, 1331,
634  1332, 1333, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342,
635  1343, 1344, 1345, 1346, 1346, 1347, 1349, 1350, 1350, 1350,
636  1351, 1351, 1351, 1353, 1353, 1353, 1353, 1353, 1353, 1353,
637  1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1354, 1354,
638  1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
639  1354, 1354, 1354, 1354, 1354, 1355, 1355, 1355, 1355, 1355,
640  1355, 1355, 1355, 1356, 1356, 1357, 1357, 1358, 1359, 1359,
641 
642  1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1367,
643  1367, 1369, 1369, 1369, 1369, 1370, 1370, 1370, 1370, 1370,
644  1370, 1370, 1370, 1370, 1371, 1372, 1372, 1372, 1372, 1372,
645  1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
646  1372, 1372, 1372, 1373, 1374, 1374, 1374, 1374, 1374, 1375,
647  1375, 1376, 1376, 1377, 1377, 1378, 1379, 1380, 1381, 1381,
648  1381, 1381, 1381, 1381, 1382, 1382, 1383, 1383, 1383, 1383,
649  1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
650  1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
651  1383, 1383, 1383, 1384, 1384, 1384, 1384, 1384, 1385, 1385,
652 
653  1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
654  1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386,
655  1386, 1386, 1386, 1386, 1386, 1386, 1386, 1387, 1388, 1388,
656  1388, 1388, 1388, 1389, 1389, 1390, 1390, 1390, 1390, 1390,
657  1390, 1390, 1390, 1390, 1390, 1390, 1391, 1391, 1391, 1391,
658  1391, 1391, 1391, 1391, 1391, 1392, 1392, 1392, 1392, 1393,
659  1393, 1393, 1393, 1393, 1393, 1393, 1394, 1394, 1394, 1394,
660  1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1395,
661  1395, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
662  1396, 1396, 1396, 1396, 1397, 1397, 1397, 1397, 1397, 1397,
663 
664  1397, 1397, 1397, 1397, 1397, 1398, 1398, 1398, 1398, 1398,
665  1398, 1398, 1398, 1398, 1399, 1399, 1399, 1399, 1399, 1399,
666  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
667  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
668  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
669  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
670  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
671  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
672  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
673  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
674 
675  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
676  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
677  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
678  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
679  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
680  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
681  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
682  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
683  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
684  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
685 
686  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
687  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
688  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
689  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
690  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
691  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
692  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
693  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
694  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
695  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
696 
697  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
698  1399, 1399, 1399, 1399, 1399, 1399
699  } ;
700 
702  { 0,
703  1, 1, 1, 1, 1, 2, 1, 1, 3, 4,
704  1, 1, 5, 1, 1, 1, 1, 1, 1, 1,
705  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
706  1, 3, 6, 7, 8, 9, 1, 10, 11, 12,
707  13, 14, 1, 15, 16, 17, 18, 19, 20, 19,
708  19, 19, 19, 19, 19, 21, 21, 22, 1, 23,
709  24, 25, 26, 27, 28, 28, 29, 28, 28, 28,
710  28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
711  28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
712  30, 31, 32, 1, 28, 33, 34, 35, 36, 37,
713 
714  38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
715  48, 49, 43, 50, 51, 52, 53, 54, 43, 55,
716  56, 43, 57, 10, 58, 59, 1, 43, 43, 43,
717  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
718  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
719  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
720  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
721  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
722  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
723  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
724 
725  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
726  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
727  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
728  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
729  43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
730  43, 43, 43, 43, 43
731  } ;
732 
734  { 0,
735  1, 2, 3, 4, 5, 6, 7, 1, 1, 8,
736  9, 10, 11, 12, 1, 11, 13, 14, 15, 15,
737  15, 1, 16, 17, 17, 1, 18, 19, 19, 1,
738  20, 1, 21, 19, 19, 19, 19, 19, 19, 19,
739  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
740  19, 19, 19, 19, 19, 19, 1, 1, 21, 1
741  } ;
742 
744  { 0,
745  0, 4, 9, 69, 129, 0, 189, 0, 248, 258,
746  268, 275, 335, 0, 394, 398, 426, 430, 490, 0,
747  549, 553, 586, 0, 642, 0, 702, 0, 559, 761,
748  766, 770, 776, 781, 840, 899, 796, 801, 959, 0,
749  7, 806, 858, 888, 1018, 1023, 1029, 1038, 1098, 0,
750  1158, 0, 1206, 0, 1261, 1265, 1271, 1296, 1329, 0,
751  1328, 1385, 1444, 1503, 1392, 1432, 1563, 0, 0, 0,
752  1622, 1681, 3585, 6333, 6333, 6333, 6333, 1, 3552, 6333,
753  6333, 6333, 1741, 6333, 6333, 6333, 2, 3543, 22, 0,
754  6333, 6333, 6333, 6333, 6333, 10, 3542, 0, 3513, 3520,
755 
756  0, 7, 3504, 3500, 6333, 6333, 6333, 6333, 6333, 15,
757  3515, 0, 10, 3501, 6333, 0, 0, 6333, 0, 6333,
758  3505, 18, 3498, 0, 0, 0, 0, 6333, 30, 3497,
759  0, 0, 6333, 6333, 6333, 6333, 6333, 3490, 38, 3484,
760  284, 54, 405, 6333, 6333, 6333, 0, 0, 6333, 47,
761  3474, 0, 0, 24, 260, 284, 296, 290, 288, 0,
762  3495, 3490, 6333, 3488, 250, 13, 58, 3478, 410, 248,
763  3478, 3469, 3468, 3447, 20, 3451, 6333, 6333, 275, 6333,
764  6333, 6333, 3446, 6333, 284, 3424, 6333, 0, 63, 6333,
765  6333, 6333, 6333, 6333, 286, 3413, 6333, 6333, 6333, 304,
766 
767  6333, 6333, 6333, 305, 3411, 6333, 0, 6333, 6333, 0,
768  3418, 306, 3406, 1775, 6333, 0, 412, 424, 3389, 3358,
769  0, 0, 6333, 0, 3394, 308, 3380, 0, 0, 0,
770  6333, 0, 3378, 311, 3369, 0, 0, 3371, 313, 218,
771  559, 779, 3347, 3310, 315, 0, 6333, 405, 316, 441,
772  434, 444, 0, 6333, 6333, 0, 3349, 422, 3331, 0,
773  0, 6333, 0, 435, 3327, 0, 6333, 6333, 6333, 6333,
774  450, 3325, 0, 414, 3312, 6333, 6333, 6333, 6333, 6333,
775  455, 3321, 0, 3342, 6333, 6333, 0, 6333, 6333, 6333,
776  6333, 460, 3309, 0, 6333, 6333, 6333, 6333, 6333, 461,
777 
778  3308, 0, 6333, 0, 6333, 6333, 6333, 462, 3306, 477,
779  6333, 6333, 6333, 6333, 6333, 6333, 3299, 6333, 6333, 470,
780  3303, 6333, 6333, 6333, 6333, 6333, 6333, 471, 3297, 0,
781  6333, 6333, 6333, 0, 6333, 538, 3295, 6333, 0, 0,
782  6333, 0, 6333, 551, 3275, 543, 0, 3278, 3273, 0,
783  6333, 1830, 6333, 567, 0, 579, 278, 0, 3251, 3236,
784  355, 3237, 822, 3216, 3228, 3226, 3215, 3233, 3228, 0,
785  517, 3207, 840, 0, 3219, 570, 922, 0, 804, 432,
786  1047, 6333, 3218, 582, 600, 6333, 845, 6333, 3221, 904,
787  0, 3202, 3189, 1063, 6333, 553, 6333, 569, 822, 1885,
788 
789  594, 6333, 764, 3201, 6333, 407, 773, 1907, 6333, 3192,
790  871, 6333, 6333, 893, 3191, 474, 3188, 3180, 3178, 3169,
791  3153, 787, 3145, 814, 6333, 608, 3152, 3156, 802, 862,
792  0, 6333, 3151, 6333, 875, 6333, 0, 6333, 837, 3120,
793  1214, 1897, 3088, 3080, 3080, 3073, 3090, 3086, 3050, 3059,
794  3050, 1021, 1285, 3058, 3031, 820, 3053, 3020, 0, 6333,
795  3042, 1337, 0, 6333, 3041, 1389, 6333, 3041, 3001, 863,
796  1395, 1405, 3009, 2982, 861, 3006, 2978, 771, 0, 0,
797  3018, 3013, 1951, 850, 2981, 0, 919, 3014, 3003, 1461,
798  0, 2998, 2993, 1477, 0, 6333, 3002, 2962, 0, 6333,
799 
800  0, 2986, 2980, 6333, 0, 6333, 2980, 2972, 862, 2967,
801  2953, 2948, 6333, 0, 0, 917, 892, 1520, 2926, 2903,
802  2931, 6333, 6333, 938, 899, 939, 2932, 2889, 2890, 2891,
803  2878, 2873, 6333, 2875, 2866, 2853, 2846, 2850, 2843, 0,
804  2862, 0, 0, 2834, 2826, 2821, 6333, 2818, 2811, 2835,
805  6333, 2834, 933, 0, 1014, 0, 1059, 1019, 0, 1031,
806  0, 6333, 2830, 2823, 1073, 1219, 1281, 2813, 0, 0,
807  1287, 788, 929, 6333, 925, 2817, 2816, 1091, 280, 6333,
808  2797, 2800, 6333, 2780, 6333, 6333, 2774, 0, 2734, 2730,
809  2729, 1281, 2723, 2738, 2737, 2707, 2720, 2710, 902, 994,
810 
811  2713, 2697, 2687, 2689, 2687, 2667, 2665, 1428, 1275, 2668,
812  2641, 0, 0, 0, 0, 2654, 6333, 1466, 1277, 2657,
813  2627, 2660, 0, 1049, 0, 2629, 2625, 1049, 6333, 0,
814  0, 2653, 0, 0, 2625, 6333, 2644, 6333, 2643, 1284,
815  2629, 6333, 2615, 6333, 6333, 0, 2594, 6333, 1216, 2610,
816  1421, 2609, 1634, 2582, 2571, 1079, 1976, 2571, 2570, 2569,
817  2546, 2541, 2540, 2546, 0, 1303, 1026, 2544, 2542, 2564,
818  6333, 1309, 1066, 6333, 6333, 1410, 1508, 1629, 0, 930,
819  2570, 6333, 6333, 2554, 1227, 1287, 2529, 6333, 2519, 2510,
820  2514, 2508, 2490, 2490, 2496, 2492, 2492, 1337, 2490, 2478,
821 
822  2484, 2472, 2467, 2479, 2457, 1310, 1293, 2470, 2443, 1505,
823  1390, 1358, 2467, 2440, 0, 2450, 2456, 0, 2440, 2473,
824  6333, 1421, 2442, 2451, 1639, 1654, 1659, 1662, 6333, 2424,
825  2418, 6333, 6333, 1274, 2416, 2036, 1036, 2414, 2399, 2413,
826  2409, 2439, 6333, 1344, 2400, 0, 1441, 2426, 2425, 6333,
827  2423, 1544, 1642, 2391, 2388, 2383, 1493, 2379, 2369, 2369,
828  2357, 2356, 2366, 2348, 1665, 1514, 2347, 1519, 2345, 2344,
829  2335, 2336, 2334, 2346, 2331, 2329, 2327, 2317, 2334, 2331,
830  2309, 2320, 2311, 1549, 2317, 2343, 2335, 2297, 1402, 1902,
831  2094, 1456, 1462, 1668, 2097, 2100, 2304, 2337, 1632, 2295,
832 
833  6333, 1479, 6333, 1491, 1690, 2293, 2317, 2316, 2274, 1697,
834  2105, 2110, 2309, 2252, 1626, 2251, 2248, 2240, 2246, 2245,
835  2253, 2231, 2218, 1700, 6333, 1723, 2226, 2225, 2224, 2216,
836  2209, 2206, 2196, 2201, 2200, 1299, 2184, 2175, 2179, 2185,
837  2172, 2170, 1726, 2175, 2164, 2120, 2123, 1524, 6333, 2126,
838  2134, 2156, 2206, 1711, 1648, 6333, 1717, 6333, 569, 1802,
839  1814, 2161, 2165, 6333, 2134, 2187, 2141, 2135, 2134, 2124,
840  2118, 2113, 2103, 2108, 2094, 1729, 2106, 2112, 2102, 2099,
841  2087, 2085, 2093, 2078, 2094, 2086, 2075, 2080, 2063, 2058,
842  1938, 1923, 1703, 1918, 2166, 2171, 2182, 2192, 2195, 0,
843 
844  1897, 1890, 2198, 1930, 1871, 1732, 1884, 1890, 1869, 1852,
845  1772, 1766, 1768, 1753, 1756, 0, 1683, 1693, 1675, 1670,
846  1662, 1625, 1631, 1630, 1641, 1608, 1812, 6333, 0, 2203,
847  2216, 2228, 2231, 2237, 0, 1614, 1936, 2258, 2240, 1577,
848  0, 1484, 1492, 1488, 1462, 6333, 1450, 1433, 1429, 1420,
849  1420, 1390, 1381, 1382, 6333, 2253, 2264, 2276, 2279, 2286,
850  1384, 2299, 2302, 2313, 1373, 6333, 1336, 1300, 1293, 1272,
851  1234, 1215, 1180, 1191, 1165, 2319, 2322, 2325, 2334, 2345,
852  6333, 2348, 2359, 2369, 1016, 901, 822, 776, 565, 520,
853  2381, 2384, 2395, 2405, 2408, 2416, 2428, 2419, 410, 400,
854 
855  348, 2441, 2444, 2455, 2464, 2467, 2470, 2476, 2487, 287,
856  2491, 2503, 2506, 2514, 2527, 2534, 2538, 2548, 249, 2551,
857  2554, 2565, 2575, 2585, 2588, 2594, 2599, 2609, 2612, 2622,
858  2625, 2631, 2636, 2641, 2645, 2655, 2658, 2661, 2671, 2677,
859  2680, 2691, 2694, 2704, 2700, 2710, 2720, 2716, 2726, 2737,
860  2730, 2742, 2748, 2759, 2762, 2776, 2765, 2781, 2792, 2786,
861  2797, 2803, 2808, 2814, 2820, 2825, 2832, 2835, 2847, 2850,
862  2854, 2864, 2867, 2871, 2881, 2884, 2890, 2895, 2902, 2905,
863  2915, 2919, 2922, 2932, 2936, 2939, 2950, 2953, 2956, 2966,
864  2970, 2973, 2983, 2987, 2990, 3000, 3005, 3015, 3011, 3021,
865 
866  3031, 3041, 3046, 3049, 3059, 3062, 3066, 3072, 3077, 3080,
867  3090, 3096, 3100, 3106, 3110, 3114, 3127, 3130, 3136, 3141,
868  3146, 3149, 3161, 3164, 3170, 3175, 3182, 3185, 3196, 3199,
869  3205, 3210, 3216, 3219, 3230, 3233, 3236, 3246, 3251, 3254,
870  3265, 3268, 3274, 3279, 3285, 3295, 3291, 3301, 3305, 3311,
871  3315, 3321, 3334, 3337, 3351, 3340, 3361, 3367, 3356, 3372,
872  3378, 3383, 3389, 3395, 3400, 3406, 3416, 3411, 3422, 3426,
873  3438, 3441, 3444, 3455, 3458, 3462, 3472, 3475, 3481, 3486,
874  3493, 3499, 3504, 3510, 3513, 3523, 3527, 3530, 3541, 3545,
875  3548, 3559, 3562, 3572, 3568, 3578, 3588, 3598, 3603, 3606,
876 
877  3616, 3619, 3623, 3629, 3634, 3637, 3647, 3653, 3657, 3663,
878  3667, 3671, 3684, 3687, 3693, 3698, 3703, 3706, 3718, 259,
879  3722, 3727, 3732, 3742, 3749, 3754, 3761, 3766, 3773, 3778,
880  3783, 3788, 3793, 3797, 3800, 3804, 3809, 201, 3812, 3816,
881  3821, 3824, 3828, 3833, 3838, 3843, 3848, 3855, 3859, 3867,
882  3871, 3879, 3883, 3888, 3893, 3898, 3903, 3906, 3910, 3914,
883  3917, 3922, 3926, 3929, 3934, 3938, 3943, 3948, 3953, 3961,
884  3965, 3972, 3977, 3984, 3989, 3993, 3998, 4003, 4008, 4011,
885  4016, 4020, 4023, 4027, 4032, 4035, 4039, 4044, 4048, 4053,
886  4058, 4066, 4071, 4078, 4082, 4090, 4094, 4099, 4103, 4108,
887 
888  4113, 4116, 4121, 4126, 4129, 4133, 4137, 4140, 4145, 4149,
889  4154, 4158, 4163, 4171, 6333, 4228, 4249, 4270, 4291, 4312,
890  4333, 4354, 4375, 4396, 4417, 4438, 4459, 4480, 4501, 4522,
891  4543, 4564, 4585, 4606, 1520, 1542, 1543, 4627, 4648, 4669,
892  4690, 4711, 4730, 4749, 4770, 4791, 4810, 4829, 4848, 4866,
893  1673, 4885, 4906, 4925, 4946, 4967, 4988, 5009, 5030, 5051,
894  1679, 1788, 1808, 5072, 1885, 5093, 5114, 5133, 5152, 5168,
895  1897, 1902, 5185, 5206, 1907, 5227, 5248, 5269, 5290, 5311,
896  5332, 5353, 5372, 5391, 5412, 5431, 5450, 5469, 5487, 1930,
897  5506, 5527, 5546, 5567, 5588, 5609, 5630, 5651, 5672, 1931,
898 
899  1939, 1941, 1946, 5693, 5714, 5733, 5752, 5773, 5794, 1951,
900  5815, 5836, 1953, 5857, 5878, 5899, 5920, 5941, 5962, 5983,
901  6002, 6021, 6042, 6063, 6084, 6105, 6126, 6147, 6168, 6189,
902  6210, 6229, 6248, 2125, 6269, 6290, 6311
903  } ;
904 
906  { 0,
907  1316, 1316, 1316, 1315, 1315, 5, 1315, 7, 1317, 1317,
908  1318, 1318, 1315, 13, 1319, 1319, 1320, 1320, 1315, 19,
909  1321, 1321, 19, 23, 1315, 25, 1315, 27, 1322, 1323,
910  1316, 1316, 1316, 1316, 1324, 1324, 1325, 1325, 1315, 39,
911  36, 36, 1326, 1326, 1327, 1327, 1328, 1328, 1315, 49,
912  1315, 51, 51, 53, 1329, 1329, 1330, 1330, 23, 59,
913  1331, 1331, 1332, 1332, 1333, 1333, 1315, 67, 67, 67,
914  1334, 1334, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
915  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1335, 1335,
916  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1336, 1336, 1336,
917 
918  1336, 1336, 1336, 1336, 1315, 1315, 1315, 1315, 1315, 1315,
919  1315, 1337, 1337, 1337, 1315, 1338, 1338, 1315, 1338, 1315,
920  1339, 1315, 1338, 1338, 1340, 1340, 1340, 1315, 1340, 1340,
921  1341, 1340, 1315, 1315, 1315, 1315, 1315, 1342, 1315, 1315,
922  1343, 1315, 1343, 1315, 1315, 1315, 1344, 1344, 1315, 1344,
923  1344, 1345, 1344, 1346, 1346, 1346, 1346, 1346, 1346, 1347,
924  1348, 1348, 1315, 1348, 1348, 1348, 1315, 1348, 1349, 1315,
925  1315, 1315, 1315, 1315, 1350, 1315, 1315, 1315, 1315, 1315,
926  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1351, 1315, 1315,
927  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1352,
928 
929  1315, 1315, 1315, 1315, 1315, 1315, 1353, 1315, 1315, 1353,
930  1315, 1315, 1353, 1315, 1315, 1353, 1353, 1315, 1315, 1315,
931  1354, 1354, 1315, 1354, 1315, 1354, 1354, 1354, 1355, 1355,
932  1315, 1355, 1315, 1355, 1355, 1351, 1355, 1315, 1315, 1315,
933  1353, 1315, 1315, 1315, 1356, 1357, 1315, 1356, 1358, 1356,
934  1315, 1356, 1359, 1315, 1315, 1359, 1315, 1359, 1359, 1359,
935  1360, 1315, 1360, 1360, 1360, 1360, 1315, 1315, 1315, 1315,
936  1315, 1315, 1361, 1315, 1361, 1315, 1315, 1315, 1315, 1315,
937  1315, 1315, 1362, 1315, 1315, 1315, 1363, 1315, 1315, 1315,
938  1315, 1315, 1315, 1364, 1315, 1315, 1315, 1315, 1315, 1315,
939 
940  1315, 1364, 1315, 1365, 1315, 1315, 1315, 1315, 1315, 1315,
941  1315, 1315, 1315, 1315, 1315, 1315, 1366, 1315, 1315, 1315,
942  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1367,
943  1315, 1315, 1315, 1368, 1315, 1315, 1315, 1315, 1369, 1369,
944  1315, 1369, 1315, 1315, 1369, 1315, 1369, 1315, 1315, 1370,
945  1315, 1315, 1315, 1371, 1371, 1371, 1371, 1372, 1372, 1372,
946  1372, 1372, 1372, 1372, 1372, 1372, 1372, 1373, 1374, 1375,
947  1375, 1375, 1375, 1376, 1377, 1378, 1376, 1379, 1380, 1381,
948  1379, 1315, 1315, 1382, 1315, 1315, 1383, 1315, 1315, 1383,
949  1384, 1384, 1384, 1384, 1315, 1385, 1315, 1385, 1385, 1385,
950 
951  1315, 1315, 1386, 1387, 1315, 1387, 1387, 1387, 1315, 1315,
952  1315, 1315, 1315, 1388, 1315, 1315, 1315, 1315, 1315, 1315,
953  1315, 1315, 1315, 1389, 1315, 1315, 1315, 1315, 1315, 1315,
954  1390, 1315, 1315, 1315, 1391, 1315, 1392, 1315, 1315, 1315,
955  1392, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
956  1315, 1392, 1315, 1315, 1315, 1315, 1315, 1315, 1393, 1315,
957  1393, 1393, 1394, 1315, 1394, 1394, 1315, 1315, 1315, 1315,
958  1392, 1315, 1315, 1315, 1315, 1315, 1315, 1395, 1396, 1397,
959  1397, 1397, 1395, 1315, 1315, 1398, 1315, 1315, 1398, 1398,
960  1399, 1399, 1399, 1399, 1400, 1315, 1315, 1400, 1401, 1315,
961 
962  1402, 1315, 1315, 1315, 1403, 1315, 1315, 1404, 1405, 1315,
963  1315, 1315, 1315, 1406, 1407, 1315, 1315, 1407, 1315, 1315,
964  1315, 1315, 1315, 1315, 1408, 1315, 1409, 1410, 1410, 1410,
965  1410, 1410, 1315, 1410, 1410, 1410, 1410, 1410, 1410, 1411,
966  1411, 1412, 1412, 1413, 1413, 1413, 1315, 1413, 1413, 1414,
967  1315, 1315, 1315, 1415, 1416, 1417, 1416, 1418, 1419, 1418,
968  1420, 1315, 1315, 1315, 1315, 1315, 1421, 1422, 1422, 1422,
969  1423, 1423, 1423, 1315, 1424, 1424, 1424, 1315, 1315, 1315,
970  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1392, 1315, 1315,
971  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
972 
973  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1392, 1315, 1315,
974  1315, 1425, 1425, 1394, 1394, 1315, 1315, 1392, 1315, 1315,
975  1315, 1397, 1397, 1395, 1397, 1315, 1315, 1315, 1315, 1398,
976  1398, 1399, 1399, 1399, 1400, 1315, 1426, 1315, 1315, 1315,
977  1315, 1315, 1315, 1315, 1315, 1407, 1315, 1315, 1408, 1427,
978  1315, 1409, 1315, 1410, 1410, 1410, 1315, 1410, 1410, 1410,
979  1410, 1410, 1410, 1410, 1411, 1413, 1413, 1413, 1413, 1428,
980  1315, 1315, 1416, 1315, 1315, 1315, 1315, 1421, 1422, 1423,
981  1424, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
982  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
983 
984  1315, 1315, 1315, 1315, 1315, 1392, 1315, 1315, 1315, 1315,
985  1392, 1315, 1315, 1315, 1397, 1315, 1315, 1399, 1400, 1429,
986  1315, 1315, 1315, 1427, 1430, 1315, 1315, 1315, 1315, 1410,
987  1410, 1315, 1315, 1315, 1410, 1315, 1410, 1410, 1410, 1410,
988  1410, 1410, 1315, 1315, 1413, 1413, 1413, 1315, 1315, 1315,
989  1315, 1315, 1421, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
990  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
991  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
992  1315, 1315, 1315, 1315, 1400, 1315, 1315, 1315, 1430, 1430,
993  1430, 1315, 1430, 1315, 1315, 1315, 1410, 1410, 1315, 1315,
994 
995  1315, 1315, 1315, 1410, 1410, 1410, 1410, 1315, 1315, 1315,
996  1421, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
997  1315, 1315, 1431, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
998  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
999  1315, 1315, 1315, 1400, 1315, 1430, 1430, 1315, 1315, 1315,
1000  1315, 1315, 1315, 1315, 1315, 1315, 1432, 1315, 1315, 1315,
1001  1315, 1315, 1315, 1315, 1433, 1315, 1315, 1315, 1315, 1315,
1002  1315, 1315, 1315, 1315, 1431, 1315, 1315, 1315, 1315, 1315,
1003  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1004  1315, 1315, 1400, 1315, 1430, 1430, 1315, 1315, 1315, 1434,
1005 
1006  1315, 1315, 1315, 1315, 1433, 1315, 1315, 1315, 1315, 1315,
1007  1315, 1315, 1315, 1315, 1315, 1435, 1315, 1315, 1315, 1315,
1008  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1436, 1430,
1009  1430, 1315, 1315, 1315, 1434, 1315, 1315, 1315, 1315, 1315,
1010  1437, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1011  1315, 1315, 1315, 1315, 1315, 1430, 1430, 1315, 1315, 1315,
1012  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1013  1315, 1315, 1315, 1315, 1315, 1430, 1430, 1315, 1315, 1315,
1014  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1015  1430, 1430, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1016 
1017  1315, 1430, 1430, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1018  1430, 1430, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1430,
1019  1430, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1020  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1021  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1022  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1023  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1024  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1025  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1026  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1027 
1028  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1029  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1030  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1031  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1032  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1033  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1034  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1035  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1036  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1037  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1038 
1039  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1040  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1041  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1042  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1043  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1044  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1045  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1046  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1047  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1048  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1049 
1050  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1051  1315, 1315, 1315, 1315, 0, 1315, 1315, 1315, 1315, 1315,
1052  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1053  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1054  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1055  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1056  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1057  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1058  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1059  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1060 
1061  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1062  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1063  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1064  1315, 1315, 1315, 1315, 1315, 1315, 1315
1065  } ;
1066 
1068  { 0,
1069  1315, 75, 401, 76, 77, 75, 1315, 76, 77, 207,
1070  75, 402, 76, 77, 348, 348, 405, 78, 349, 349,
1071  238, 78, 422, 348, 239, 79, 78, 349, 368, 79,
1072  397, 368, 369, 240, 79, 369, 423, 240, 408, 215,
1073  356, 356, 356, 379, 361, 363, 362, 380, 397, 356,
1074  356, 348, 364, 365, 371, 349, 372, 388, 389, 80,
1075  392, 409, 410, 80, 393, 215, 432, 433, 80, 81,
1076  82, 83, 84, 85, 81, 81, 86, 81, 81, 81,
1077  81, 81, 81, 81, 81, 81, 87, 81, 81, 81,
1078  81, 81, 81, 81, 88, 81, 89, 89, 81, 81,
1079 
1080  81, 81, 90, 90, 90, 90, 90, 90, 90, 90,
1081  90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
1082  90, 90, 90, 90, 90, 81, 81, 81, 91, 92,
1083  93, 92, 94, 95, 92, 92, 92, 92, 92, 92,
1084  92, 92, 92, 92, 92, 92, 96, 92, 92, 92,
1085  92, 92, 92, 92, 97, 92, 98, 98, 92, 92,
1086  92, 92, 98, 98, 99, 100, 101, 98, 98, 98,
1087  102, 98, 98, 98, 98, 98, 98, 103, 98, 98,
1088  98, 104, 98, 98, 98, 92, 92, 92, 105, 106,
1089  107, 106, 108, 109, 106, 106, 106, 106, 106, 106,
1090 
1091  106, 106, 106, 106, 106, 106, 110, 106, 106, 106,
1092  106, 106, 106, 106, 111, 106, 112, 112, 106, 106,
1093  106, 106, 112, 112, 112, 112, 113, 112, 112, 112,
1094  114, 112, 112, 112, 112, 112, 112, 112, 112, 112,
1095  112, 112, 112, 112, 112, 106, 106, 106, 115, 117,
1096  416, 118, 119, 405, 120, 469, 470, 864, 121, 117,
1097  417, 118, 119, 406, 120, 122, 397, 407, 121, 126,
1098  386, 76, 127, 123, 128, 122, 126, 426, 76, 127,
1099  526, 128, 427, 123, 397, 129, 385, 385, 385, 527,
1100  397, 413, 129, 130, 397, 386, 397, 429, 131, 368,
1101 
1102  130, 430, 397, 369, 617, 131, 435, 124, 397, 398,
1103  415, 436, 397, 399, 397, 400, 479, 124, 368, 439,
1104  397, 348, 369, 440, 348, 461, 468, 132, 465, 481,
1105  349, 1019, 480, 482, 132, 133, 134, 133, 135, 136,
1106  133, 137, 133, 133, 133, 138, 133, 133, 133, 133,
1107  133, 133, 139, 133, 133, 133, 133, 133, 133, 133,
1108  140, 133, 141, 141, 133, 142, 133, 133, 141, 141,
1109  141, 141, 143, 141, 141, 141, 141, 141, 141, 141,
1110  141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
1111  141, 144, 145, 133, 146, 148, 530, 76, 77, 148,
1112 
1113  149, 76, 77, 617, 149, 531, 479, 385, 385, 385,
1114  405, 150, 411, 412, 452, 150, 386, 496, 497, 151,
1115  575, 413, 480, 151, 152, 453, 456, 155, 152, 76,
1116  156, 155, 74, 76, 156, 488, 74, 453, 559, 489,
1117  415, 438, 479, 157, 454, 479, 1010, 157, 492, 560,
1118  74, 158, 493, 153, 74, 158, 454, 153, 480, 390,
1119  484, 480, 559, 348, 484, 757, 483, 349, 348, 485,
1120  455, 445, 349, 502, 348, 348, 416, 503, 349, 349,
1121  506, 507, 455, 510, 511, 159, 417, 349, 512, 159,
1122  74, 75, 74, 76, 77, 74, 74, 74, 74, 74,
1123 
1124  74, 74, 74, 74, 74, 74, 74, 78, 74, 74,
1125  74, 74, 74, 74, 74, 79, 74, 160, 160, 74,
1126  74, 74, 74, 160, 160, 160, 160, 160, 160, 160,
1127  160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
1128  160, 160, 160, 160, 160, 160, 74, 74, 74, 80,
1129  162, 348, 163, 164, 162, 349, 163, 164, 544, 397,
1130  192, 471, 193, 194, 516, 617, 165, 545, 517, 519,
1131  165, 859, 472, 519, 166, 397, 195, 397, 166, 167,
1132  520, 524, 571, 167, 196, 356, 356, 356, 553, 553,
1133  525, 473, 564, 397, 356, 356, 401, 356, 356, 356,
1134 
1135  565, 565, 566, 566, 566, 402, 356, 356, 168, 1001,
1136  426, 386, 168, 169, 169, 427, 901, 474, 197, 169,
1137  169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
1138  169, 169, 169, 169, 169, 169, 169, 169, 169, 169,
1139  169, 169, 74, 75, 170, 76, 77, 74, 74, 74,
1140  74, 74, 74, 171, 172, 74, 173, 74, 174, 78,
1141  74, 74, 74, 74, 74, 74, 74, 79, 74, 175,
1142  175, 74, 176, 74, 74, 175, 175, 175, 175, 175,
1143  175, 175, 175, 175, 175, 175, 175, 175, 175, 175,
1144  175, 175, 175, 175, 175, 175, 175, 175, 74, 74,
1145 
1146  74, 80, 177, 178, 179, 180, 181, 177, 182, 183,
1147  177, 177, 184, 177, 177, 177, 177, 177, 177, 185,
1148  177, 177, 177, 177, 177, 177, 177, 186, 187, 188,
1149  188, 177, 189, 177, 177, 188, 188, 188, 188, 188,
1150  188, 188, 188, 188, 188, 188, 188, 188, 188, 188,
1151  188, 188, 188, 188, 188, 188, 188, 188, 177, 177,
1152  177, 190, 199, 200, 201, 202, 401, 75, 203, 76,
1153  77, 75, 479, 76, 77, 402, 405, 75, 204, 76,
1154  77, 475, 75, 78, 76, 77, 205, 78, 480, 422,
1155  576, 79, 472, 78, 397, 79, 467, 222, 78, 223,
1156 
1157  224, 79, 222, 423, 223, 224, 79, 583, 241, 225,
1158  556, 473, 397, 226, 225, 584, 422, 557, 226, 242,
1159  206, 227, 609, 239, 533, 80, 227, 533, 397, 80,
1160  423, 617, 240, 533, 556, 80, 240, 474, 243, 572,
1161  80, 208, 547, 209, 210, 547, 397, 385, 385, 385,
1162  521, 547, 454, 211, 438, 228, 386, 212, 534, 246,
1163  228, 247, 248, 619, 244, 213, 214, 585, 535, 1000,
1164  214, 617, 215, 411, 412, 249, 548, 435, 455, 586,
1165  640, 640, 436, 250, 251, 626, 549, 591, 251, 246,
1166  578, 247, 248, 473, 617, 411, 412, 644, 215, 216,
1167 
1168  208, 217, 209, 210, 413, 249, 385, 385, 385, 645,
1169  650, 651, 218, 250, 251, 386, 212, 252, 251, 474,
1170  617, 628, 642, 415, 213, 214, 629, 554, 405, 214,
1171  643, 219, 523, 554, 554, 397, 397, 554, 695, 523,
1172  524, 526, 681, 671, 554, 554, 554, 252, 696, 525,
1173  527, 672, 672, 397, 397, 567, 698, 220, 216, 229,
1174  230, 229, 231, 232, 229, 229, 229, 229, 229, 229,
1175  229, 229, 233, 229, 229, 229, 234, 229, 229, 229,
1176  229, 229, 229, 229, 235, 229, 236, 236, 229, 229,
1177  229, 229, 236, 236, 236, 236, 236, 236, 236, 236,
1178 
1179  236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1180  236, 236, 236, 236, 236, 229, 229, 229, 237, 254,
1181  556, 255, 256, 608, 254, 559, 255, 256, 744, 697,
1182  262, 257, 247, 263, 453, 258, 257, 559, 802, 262,
1183  258, 247, 263, 259, 556, 698, 264, 803, 259, 559,
1184  479, 628, 561, 454, 265, 264, 629, 561, 561, 561,
1185  999, 559, 561, 265, 561, 556, 480, 745, 570, 561,
1186  561, 561, 556, 570, 570, 570, 673, 260, 570, 455,
1187  570, 732, 260, 675, 732, 570, 570, 570, 266, 556,
1188  732, 676, 676, 682, 682, 682, 556, 266, 267, 268,
1189 
1190  267, 269, 270, 267, 267, 267, 267, 267, 267, 267,
1191  267, 267, 267, 267, 267, 271, 267, 267, 267, 267,
1192  267, 267, 267, 272, 267, 273, 273, 267, 274, 267,
1193  267, 273, 273, 273, 275, 273, 273, 273, 273, 273,
1194  273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
1195  273, 273, 273, 273, 267, 267, 267, 276, 277, 278,
1196  277, 279, 280, 277, 277, 277, 277, 277, 277, 277,
1197  277, 277, 277, 277, 277, 281, 277, 277, 277, 277,
1198  277, 277, 277, 282, 277, 283, 283, 277, 284, 277,
1199  277, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1200 
1201  283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1202  283, 283, 283, 283, 277, 277, 277, 285, 286, 588,
1203  617, 677, 677, 677, 588, 588, 588, 650, 651, 588,
1204  386, 523, 990, 287, 287, 617, 588, 588, 588, 287,
1205  287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
1206  287, 287, 287, 287, 287, 287, 287, 287, 287, 287,
1207  287, 287, 289, 754, 76, 290, 289, 291, 76, 290,
1208  617, 291, 297, 755, 76, 298, 799, 707, 292, 712,
1209  989, 299, 292, 385, 385, 385, 293, 456, 300, 688,
1210  293, 294, 386, 397, 721, 294, 301, 297, 453, 76,
1211 
1212  298, 302, 722, 722, 680, 743, 299, 454, 743, 473,
1213  688, 397, 706, 300, 743, 800, 988, 454, 678, 551,
1214  295, 301, 756, 453, 295, 454, 302, 749, 749, 306,
1215  303, 94, 307, 455, 886, 474, 987, 688, 757, 768,
1216  768, 768, 613, 455, 986, 308, 744, 613, 613, 613,
1217  617, 455, 613, 309, 613, 303, 304, 304, 310, 613,
1218  613, 613, 304, 304, 304, 304, 304, 304, 304, 304,
1219  304, 304, 304, 304, 304, 304, 304, 304, 304, 304,
1220  304, 304, 304, 304, 304, 809, 306, 311, 94, 307,
1221  473, 757, 711, 325, 615, 76, 326, 618, 327, 615,
1222 
1223  615, 615, 308, 472, 615, 1315, 615, 475, 472, 328,
1224  309, 615, 615, 615, 792, 310, 474, 329, 472, 985,
1225  750, 981, 330, 726, 727, 728, 975, 473, 751, 751,
1226  706, 638, 974, 325, 973, 76, 326, 473, 327, 787,
1227  787, 453, 729, 547, 311, 313, 547, 314, 315, 328,
1228  316, 331, 547, 474, 317, 318, 319, 329, 848, 849,
1229  454, 320, 330, 474, 972, 1315, 631, 971, 711, 321,
1230  322, 631, 631, 631, 792, 970, 631, 729, 631, 472,
1231  969, 802, 634, 631, 631, 631, 455, 634, 634, 634,
1232  803, 331, 634, 855, 634, 815, 815, 815, 473, 634,
1233 
1234  634, 634, 856, 323, 313, 698, 314, 315, 968, 316,
1235  752, 752, 752, 317, 318, 319, 824, 825, 826, 386,
1236  320, 768, 768, 768, 474, 523, 848, 849, 321, 322,
1237  646, 646, 646, 757, 357, 646, 967, 523, 357, 757,
1238  776, 777, 646, 646, 646, 778, 810, 810, 810, 779,
1239  780, 843, 825, 826, 781, 386, 358, 370, 782, 783,
1240  358, 370, 323, 332, 333, 334, 76, 335, 334, 332,
1241  332, 332, 334, 332, 334, 334, 332, 332, 334, 334,
1242  336, 334, 334, 334, 332, 332, 332, 332, 337, 332,
1243  334, 334, 332, 332, 332, 332, 334, 334, 334, 334,
1244 
1245  334, 334, 334, 334, 334, 334, 334, 334, 334, 334,
1246  334, 334, 334, 334, 334, 334, 334, 334, 334, 332,
1247  332, 332, 338, 340, 965, 341, 342, 343, 815, 815,
1248  815, 385, 385, 385, 799, 343, 728, 728, 728, 344,
1249  386, 790, 727, 791, 385, 385, 385, 345, 346, 961,
1250  855, 792, 346, 386, 954, 729, 794, 795, 796, 856,
1251  793, 796, 796, 796, 796, 796, 796, 768, 768, 768,
1252  850, 851, 852, 800, 953, 729, 952, 951, 753, 950,
1253  729, 347, 340, 729, 341, 342, 343, 431, 811, 729,
1254  729, 431, 857, 495, 343, 793, 858, 495, 344, 861,
1255 
1256  861, 861, 824, 825, 826, 927, 345, 346, 386, 949,
1257  729, 346, 858, 732, 928, 729, 732, 948, 729, 857,
1258  698, 823, 732, 858, 729, 826, 825, 826, 843, 825,
1259  826, 768, 768, 768, 815, 815, 815, 947, 698, 858,
1260  347, 351, 351, 352, 351, 351, 351, 351, 353, 351,
1261  351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
1262  351, 351, 351, 351, 351, 351, 351, 351, 354, 354,
1263  351, 351, 351, 351, 355, 355, 355, 355, 355, 355,
1264  355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
1265  355, 355, 355, 355, 355, 355, 355, 351, 351, 351,
1266 
1267  351, 442, 499, 945, 743, 442, 499, 743, 757, 944,
1268  443, 444, 445, 743, 927, 446, 902, 902, 902, 447,
1269  448, 757, 501, 928, 449, 386, 501, 757, 450, 451,
1270  351, 351, 352, 351, 351, 351, 351, 353, 351, 351,
1271  351, 351, 351, 351, 351, 351, 351, 351, 351, 351,
1272  351, 351, 351, 351, 351, 351, 351, 354, 354, 351,
1273  351, 351, 351, 355, 355, 355, 355, 355, 355, 355,
1274  355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
1275  355, 355, 355, 355, 355, 355, 351, 351, 351, 351,
1276  573, 397, 937, 937, 937, 573, 573, 573, 943, 505,
1277 
1278  573, 386, 573, 505, 846, 795, 847, 573, 573, 574,
1279  405, 357, 577, 942, 792, 357, 358, 577, 577, 577,
1280  358, 370, 577, 793, 577, 370, 941, 940, 906, 577,
1281  577, 577, 589, 590, 591, 592, 939, 593, 962, 962,
1282  962, 594, 595, 936, 431, 495, 596, 386, 431, 495,
1283  597, 598, 479, 499, 929, 501, 624, 499, 793, 501,
1284  505, 624, 624, 624, 505, 358, 624, 370, 625, 358,
1285  926, 370, 925, 624, 624, 624, 733, 733, 734, 733,
1286  733, 733, 733, 733, 733, 733, 733, 733, 733, 733,
1287  733, 733, 733, 733, 358, 358, 358, 733, 733, 733,
1288 
1289  733, 733, 733, 358, 358, 733, 733, 733, 733, 358,
1290  358, 358, 358, 358, 358, 358, 358, 735, 358, 358,
1291  358, 358, 358, 358, 358, 358, 358, 358, 358, 358,
1292  358, 358, 733, 733, 733, 733, 801, 801, 801, 801,
1293  801, 801, 801, 801, 801, 801, 801, 801, 801, 801,
1294  801, 801, 801, 801, 358, 358, 358, 801, 801, 801,
1295  801, 801, 801, 358, 358, 801, 801, 801, 801, 358,
1296  358, 358, 358, 358, 358, 358, 358, 358, 358, 358,
1297  358, 358, 358, 358, 358, 358, 358, 358, 358, 358,
1298  358, 358, 801, 801, 801, 801, 847, 796, 847, 852,
1299 
1300  852, 852, 852, 852, 852, 924, 792, 862, 862, 862,
1301  923, 863, 815, 815, 815, 793, 386, 922, 729, 921,
1302  920, 729, 895, 851, 896, 896, 852, 896, 897, 898,
1303  899, 617, 792, 698, 919, 792, 899, 899, 899, 935,
1304  698, 793, 698, 935, 793, 918, 917, 729, 916, 915,
1305  793, 876, 914, 729, 913, 729, 729, 912, 899, 899,
1306  899, 864, 911, 903, 903, 903, 865, 863, 930, 898,
1307  931, 910, 386, 931, 899, 931, 793, 729, 792, 793,
1308  909, 908, 729, 792, 932, 933, 934, 793, 907, 866,
1309  729, 906, 793, 904, 934, 934, 934, 934, 934, 934,
1310 
1311  938, 938, 938, 729, 863, 956, 933, 957, 853, 386,
1312  894, 893, 729, 729, 892, 792, 729, 864, 957, 934,
1313  957, 891, 793, 890, 793, 889, 888, 793, 792, 887,
1314  958, 959, 960, 960, 960, 960, 885, 793, 729, 960,
1315  960, 960, 964, 964, 964, 884, 863, 883, 729, 729,
1316  882, 729, 729, 881, 864, 976, 959, 977, 729, 793,
1317  963, 963, 963, 880, 863, 792, 977, 960, 977, 386,
1318  879, 878, 793, 877, 793, 876, 792, 874, 978, 979,
1319  980, 980, 980, 980, 729, 793, 873, 729, 980, 980,
1320  980, 872, 871, 729, 870, 869, 864, 729, 868, 867,
1321 
1322  729, 982, 982, 982, 983, 983, 983, 729, 863, 793,
1323  386, 866, 860, 386, 864, 984, 984, 984, 808, 859,
1324  793, 991, 979, 992, 992, 980, 992, 993, 994, 995,
1325  805, 792, 729, 854, 792, 729, 995, 995, 995, 853,
1326  793, 360, 729, 793, 845, 638, 729, 995, 995, 995,
1327  996, 996, 996, 638, 844, 729, 842, 841, 864, 386,
1328  840, 997, 997, 997, 839, 863, 729, 838, 837, 864,
1329  386, 998, 998, 998, 836, 793, 835, 834, 793, 833,
1330  832, 729, 831, 1002, 994, 1003, 1003, 995, 1003, 830,
1331  729, 829, 828, 792, 827, 822, 792, 1004, 1005, 1006,
1332 
1333  821, 729, 793, 820, 819, 793, 818, 1006, 1006, 1006,
1334  1006, 1006, 1006, 817, 816, 864, 729, 814, 1007, 1007,
1335  1007, 1009, 1009, 1009, 813, 864, 729, 386, 812, 729,
1336  1008, 1008, 1008, 750, 863, 551, 551, 793, 666, 386,
1337  793, 808, 807, 1011, 1005, 1012, 1012, 1006, 1012, 806,
1338  805, 729, 804, 792, 656, 798, 792, 1013, 1014, 1015,
1339  797, 729, 793, 725, 729, 793, 1015, 1015, 1015, 1015,
1340  1015, 1015, 1016, 1016, 1016, 864, 729, 788, 1017, 1017,
1341  1017, 386, 863, 638, 864, 729, 785, 386, 729, 1018,
1342  1018, 1018, 784, 1020, 1014, 1021, 755, 793, 714, 713,
1343 
1344  793, 709, 708, 792, 775, 1021, 1015, 1021, 1013, 1014,
1345  1015, 729, 793, 774, 773, 792, 1015, 1015, 1015, 772,
1346  729, 771, 770, 729, 793, 769, 767, 729, 766, 1015,
1347  1015, 1015, 864, 765, 764, 729, 1022, 1022, 1022, 763,
1348  1023, 1023, 1023, 864, 863, 386, 762, 793, 729, 386,
1349  1024, 1024, 1024, 1020, 1014, 1021, 1021, 1015, 1021, 793,
1350  761, 760, 729, 792, 759, 758, 792, 1025, 1025, 1025,
1351  729, 684, 793, 405, 551, 793, 386, 1026, 1026, 1026,
1352  747, 863, 746, 729, 742, 741, 386, 1027, 1027, 1027,
1353  1028, 1028, 1028, 740, 864, 739, 1029, 1029, 1029, 386,
1354 
1355  863, 1030, 1030, 1030, 864, 386, 738, 793, 737, 736,
1356  793, 1031, 1031, 1031, 1032, 1032, 1032, 731, 863, 730,
1357  386, 653, 725, 386, 1033, 1033, 1033, 1034, 1034, 1034,
1358  723, 864, 648, 1035, 1035, 1035, 386, 863, 1036, 1036,
1359  1036, 864, 386, 1037, 1037, 1037, 648, 1038, 1038, 1038,
1360  864, 863, 386, 638, 638, 864, 386, 1039, 1039, 1039,
1361  1040, 1040, 1040, 1041, 1041, 1041, 719, 863, 864, 386,
1362  718, 717, 386, 1042, 1042, 1042, 716, 715, 864, 1043,
1363  1043, 1043, 1044, 1044, 1044, 714, 863, 864, 386, 713,
1364  710, 386, 864, 1045, 1045, 1045, 1046, 1046, 1046, 709,
1365 
1366  708, 864, 1048, 1048, 1048, 386, 1047, 1047, 1047, 705,
1367  863, 864, 1049, 1049, 1049, 386, 704, 864, 1051, 1051,
1368  1051, 386, 1050, 1050, 1050, 703, 863, 864, 1052, 1052,
1369  1052, 386, 1054, 1054, 1054, 702, 864, 386, 701, 1053,
1370  1053, 1053, 700, 863, 1055, 1055, 1055, 864, 386, 699,
1371  1056, 1056, 1056, 386, 863, 694, 864, 693, 692, 386,
1372  864, 1057, 1057, 1057, 1058, 1058, 1058, 1060, 1060, 1060,
1373  691, 690, 864, 386, 689, 687, 864, 686, 1059, 1059,
1374  1059, 685, 863, 1061, 1061, 1061, 864, 386, 1063, 1063,
1375  1063, 684, 386, 864, 1062, 1062, 1062, 648, 863, 1064,
1376 
1377  1064, 1064, 582, 386, 864, 1065, 1065, 1065, 386, 863,
1378  1066, 1066, 1066, 683, 386, 864, 1067, 1067, 1067, 405,
1379  405, 864, 1068, 1068, 1068, 386, 863, 1069, 1069, 1069,
1380  679, 386, 864, 674, 1070, 1070, 1070, 1071, 1071, 1071,
1381  674, 863, 864, 386, 551, 551, 386, 548, 864, 1072,
1382  1072, 1072, 1073, 1073, 1073, 669, 1074, 1074, 1074, 864,
1383  863, 386, 668, 667, 864, 386, 1075, 1075, 1075, 1076,
1384  1076, 1076, 666, 1077, 1077, 1077, 864, 863, 386, 665,
1385  664, 864, 386, 1078, 1078, 1078, 1079, 1079, 1079, 663,
1386  662, 864, 1080, 1080, 1080, 386, 863, 1081, 1081, 1081,
1387 
1388  661, 386, 660, 864, 1082, 1082, 1082, 1083, 1083, 1083,
1389  864, 863, 659, 386, 658, 657, 386, 1084, 1084, 1084,
1390  864, 1085, 1085, 1085, 1086, 1086, 1086, 864, 863, 656,
1391  386, 655, 654, 386, 1087, 1087, 1087, 864, 1088, 1088,
1392  1088, 1089, 1089, 1089, 653, 863, 864, 386, 648, 647,
1393  386, 864, 1090, 1090, 1090, 1091, 1091, 1091, 1092, 1092,
1394  1092, 864, 863, 591, 386, 522, 521, 386, 1093, 1093,
1395  1093, 864, 1094, 1094, 1094, 1095, 1095, 1095, 864, 863,
1396  641, 386, 638, 506, 386, 1096, 1096, 1096, 864, 1097,
1397  1097, 1097, 1098, 1098, 1098, 864, 863, 636, 386, 521,
1398 
1399  635, 386, 1099, 1099, 1099, 496, 864, 1100, 1100, 1100,
1400  633, 632, 864, 1102, 1102, 1102, 386, 1101, 1101, 1101,
1401  630, 863, 864, 1103, 1103, 1103, 386, 521, 627, 864,
1402  623, 622, 386, 1104, 1104, 1104, 621, 863, 620, 864,
1403  477, 476, 386, 1105, 1105, 1105, 864, 616, 1106, 1106,
1404  1106, 1107, 1107, 1107, 521, 863, 864, 386, 614, 612,
1405  386, 1108, 1108, 1108, 1109, 1109, 1109, 864, 1110, 1110,
1406  1110, 864, 863, 386, 1111, 1111, 1111, 386, 611, 1112,
1407  1112, 1112, 1113, 1113, 1113, 610, 863, 864, 386, 458,
1408  457, 386, 1114, 1114, 1114, 607, 606, 864, 1115, 1115,
1409 
1410  1115, 605, 1116, 1116, 1116, 864, 863, 386, 1117, 1117,
1411  1117, 386, 1118, 1118, 1118, 864, 1119, 1119, 1119, 604,
1412  863, 386, 864, 603, 602, 386, 601, 600, 864, 1120,
1413  1120, 1120, 1121, 1121, 1121, 599, 864, 587, 1122, 1122,
1414  1122, 386, 863, 1123, 1123, 1123, 864, 386, 1124, 1124,
1415  1124, 1125, 1125, 1125, 432, 863, 864, 386, 582, 428,
1416  386, 581, 864, 1126, 1126, 1126, 1127, 1127, 1127, 580,
1417  864, 420, 1128, 1128, 1128, 386, 863, 1129, 1129, 1129,
1418  419, 386, 418, 864, 1130, 1130, 1130, 1131, 1131, 1131,
1419  419, 863, 864, 386, 579, 409, 386, 864, 1132, 1132,
1420 
1421  1132, 1133, 1133, 1133, 405, 864, 569, 1134, 1134, 1134,
1422  386, 863, 1135, 1135, 1135, 568, 386, 864, 1136, 1136,
1423  1136, 1137, 1137, 1137, 388, 863, 864, 386, 562, 551,
1424  386, 864, 1138, 1138, 1138, 1139, 1139, 1139, 1140, 1140,
1425  1140, 864, 863, 546, 386, 543, 541, 386, 1141, 1141,
1426  1141, 539, 864, 1142, 1142, 1142, 1143, 1143, 1143, 538,
1427  863, 864, 386, 537, 536, 386, 864, 1144, 1144, 1144,
1428  1145, 1145, 1145, 532, 529, 864, 1146, 1146, 1146, 386,
1429  863, 1147, 1147, 1147, 528, 386, 864, 1148, 1148, 1148,
1430  522, 521, 864, 1150, 1150, 1150, 386, 1149, 1149, 1149,
1431 
1432  518, 863, 864, 1151, 1151, 1151, 386, 1152, 1152, 1152,
1433  864, 863, 386, 1153, 1153, 1153, 386, 1154, 1154, 1154,
1434  350, 864, 350, 1155, 1155, 1155, 386, 863, 350, 509,
1435  864, 350, 386, 350, 350, 864, 1156, 1156, 1156, 1157,
1436  1157, 1157, 1159, 1159, 1159, 500, 350, 864, 386, 498,
1437  350, 864, 494, 1158, 1158, 1158, 490, 863, 1162, 1162,
1438  1162, 864, 386, 1160, 1160, 1160, 487, 864, 477, 1161,
1439  1161, 1161, 386, 863, 1163, 1163, 1163, 864, 386, 476,
1440  1164, 1164, 1164, 386, 863, 1165, 1165, 1165, 467, 386,
1441  864, 1166, 1166, 1166, 466, 464, 864, 1167, 1167, 1167,
1442 
1443  386, 863, 1168, 1168, 1168, 462, 386, 864, 1169, 1169,
1444  1169, 460, 864, 1171, 1171, 1171, 458, 386, 1170, 1170,
1445  1170, 457, 863, 864, 1172, 1172, 1172, 386, 1173, 1173,
1446  1173, 441, 863, 386, 864, 438, 350, 386, 350, 864,
1447  1174, 1174, 1174, 1175, 1175, 1175, 1176, 1176, 1176, 350,
1448  863, 864, 386, 428, 425, 386, 864, 1177, 1177, 1177,
1449  1178, 1178, 1178, 421, 1179, 1179, 1179, 864, 863, 386,
1450  420, 419, 864, 386, 1180, 1180, 1180, 1181, 1181, 1181,
1451  418, 405, 864, 1182, 1182, 1182, 386, 863, 1183, 1183,
1452  1183, 405, 386, 405, 864, 1184, 1184, 1184, 405, 394,
1453 
1454  864, 1185, 1185, 1185, 386, 863, 1186, 1186, 1186, 350,
1455  386, 864, 1187, 1187, 1187, 1188, 1188, 1188, 864, 863,
1456  384, 386, 381, 377, 386, 1189, 1189, 1189, 864, 1190,
1457  1190, 1190, 1191, 1191, 1191, 376, 863, 864, 386, 373,
1458  350, 386, 864, 1192, 1192, 1192, 367, 1193, 1193, 1193,
1459  1194, 1194, 1194, 366, 863, 864, 386, 360, 359, 386,
1460  864, 1195, 1195, 1195, 1196, 1196, 1196, 350, 350, 864,
1461  1198, 1198, 1198, 386, 1197, 1197, 1197, 350, 863, 864,
1462  1199, 1199, 1199, 386, 1315, 1315, 864, 1315, 1315, 386,
1463  1200, 1200, 1200, 1315, 863, 1315, 1315, 864, 1315, 386,
1464 
1465  1201, 1201, 1201, 1315, 864, 1202, 1202, 1202, 1203, 1203,
1466  1203, 1315, 863, 1315, 386, 864, 1315, 386, 1204, 1204,
1467  1204, 1205, 1205, 1205, 864, 1206, 1206, 1206, 864, 863,
1468  386, 1207, 1207, 1207, 386, 1315, 1208, 1208, 1208, 1209,
1469  1209, 1209, 1315, 863, 864, 386, 1315, 1315, 386, 1210,
1470  1210, 1210, 1315, 1315, 864, 1211, 1211, 1211, 1315, 1212,
1471  1212, 1212, 864, 863, 386, 1213, 1213, 1213, 386, 1214,
1472  1214, 1214, 864, 1215, 1215, 1215, 1315, 863, 386, 864,
1473  1315, 1315, 386, 1315, 1315, 864, 1216, 1216, 1216, 1217,
1474  1217, 1217, 1315, 864, 1315, 1218, 1218, 1218, 386, 863,
1475 
1476  1219, 1219, 1219, 864, 386, 1220, 1220, 1220, 1221, 1221,
1477  1221, 1315, 863, 864, 386, 1315, 1315, 386, 1315, 864,
1478  1222, 1222, 1222, 1315, 1223, 1223, 1223, 864, 863, 1224,
1479  1224, 1224, 1315, 386, 1225, 1225, 1225, 1315, 863, 1315,
1480  864, 1315, 1315, 386, 1226, 1226, 1226, 1315, 1315, 864,
1481  1315, 1227, 1227, 1227, 864, 863, 1228, 1228, 1228, 1315,
1482  386, 1315, 864, 1229, 1229, 1229, 1315, 863, 1230, 1230,
1483  1230, 1315, 386, 1315, 864, 1231, 1231, 1231, 864, 863,
1484  1232, 1232, 1232, 864, 386, 1233, 1233, 1233, 864, 863,
1485  1234, 1234, 1234, 1315, 386, 1235, 1235, 1235, 864, 1236,
1486 
1487  1236, 1236, 1237, 1237, 1237, 864, 1238, 1238, 1238, 1315,
1488  864, 1239, 1239, 1239, 1240, 1240, 1240, 864, 1241, 1241,
1489  1241, 1315, 864, 1242, 1242, 1242, 1243, 1243, 1243, 864,
1490  1244, 1244, 1244, 1315, 864, 1245, 1245, 1245, 1315, 864,
1491  1246, 1246, 1246, 1315, 864, 1247, 1247, 1247, 1315, 864,
1492  1248, 1248, 1248, 864, 1315, 1315, 864, 1249, 1249, 1249,
1493  864, 1250, 1250, 1250, 1315, 864, 1315, 1315, 864, 1251,
1494  1251, 1251, 864, 1252, 1252, 1252, 1315, 864, 1315, 1315,
1495  864, 1253, 1253, 1253, 864, 1254, 1254, 1254, 1315, 864,
1496  1255, 1255, 1255, 1315, 864, 1256, 1256, 1256, 1315, 864,
1497 
1498  1257, 1257, 1257, 1315, 864, 1258, 1258, 1258, 1259, 1259,
1499  1259, 864, 1260, 1260, 1260, 864, 1261, 1261, 1261, 1262,
1500  1262, 1262, 1315, 864, 1263, 1263, 1263, 864, 1264, 1264,
1501  1264, 1265, 1265, 1265, 1315, 864, 1266, 1266, 1266, 864,
1502  1267, 1267, 1267, 1315, 864, 1268, 1268, 1268, 1315, 864,
1503  1269, 1269, 1269, 1315, 864, 1270, 1270, 1270, 1315, 864,
1504  1315, 1315, 864, 1271, 1271, 1271, 864, 1272, 1272, 1272,
1505  864, 1315, 1315, 864, 1273, 1273, 1273, 1315, 864, 1274,
1506  1274, 1274, 864, 1315, 1315, 864, 1275, 1275, 1275, 1315,
1507  864, 1276, 1276, 1276, 864, 1277, 1277, 1277, 1315, 864,
1508 
1509  1278, 1278, 1278, 1315, 864, 1279, 1279, 1279, 1315, 864,
1510  1280, 1280, 1280, 1281, 1281, 1281, 1315, 864, 1282, 1282,
1511  1282, 864, 1283, 1283, 1283, 1284, 1284, 1284, 864, 1285,
1512  1285, 1285, 1315, 864, 1286, 1286, 1286, 1287, 1287, 1287,
1513  864, 1288, 1288, 1288, 1315, 864, 1289, 1289, 1289, 864,
1514  1290, 1290, 1290, 1315, 864, 1291, 1291, 1291, 1315, 864,
1515  1292, 1292, 1292, 1315, 864, 1315, 1315, 864, 1293, 1293,
1516  1293, 1315, 864, 1294, 1294, 1294, 864, 1315, 1315, 864,
1517  1295, 1295, 1295, 864, 1296, 1296, 1296, 1315, 864, 1315,
1518  1315, 864, 1297, 1297, 1297, 864, 1298, 1298, 1298, 1315,
1519 
1520  864, 1299, 1299, 1299, 864, 1300, 1300, 1300, 1315, 864,
1521  1301, 1301, 1301, 1315, 864, 1302, 1302, 1302, 1303, 1303,
1522  1303, 1315, 864, 1304, 1304, 1304, 1315, 864, 1305, 1305,
1523  1305, 1306, 1306, 1306, 864, 1307, 1307, 1307, 864, 1308,
1524  1308, 1308, 1309, 1309, 1309, 1315, 864, 1310, 1310, 1310,
1525  864, 1311, 1311, 1311, 1315, 864, 1312, 1312, 1312, 864,
1526  1313, 1313, 1313, 1315, 864, 1314, 1314, 1314, 1315, 864,
1527  1315, 1315, 864, 1238, 1238, 1238, 1315, 864, 1315, 1315,
1528  1315, 1315, 864, 1315, 1315, 864, 1315, 1315, 1315, 864,
1529  1315, 1315, 1315, 864, 1315, 1315, 864, 1315, 1315, 1315,
1530 
1531  1315, 864, 1315, 1315, 1315, 864, 1315, 1315, 1315, 1315,
1532  864, 1315, 1315, 1315, 864, 1315, 1315, 1315, 1315, 864,
1533  1315, 1315, 1315, 1315, 1315, 1315, 1315, 864, 74, 74,
1534  74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
1535  74, 74, 74, 74, 74, 74, 74, 74, 74, 116,
1536  116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1537  116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1538  125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
1539  125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
1540  125, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1541 
1542  147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1543  147, 147, 154, 154, 154, 154, 154, 154, 154, 154,
1544  154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
1545  154, 154, 154, 161, 161, 161, 161, 161, 161, 161,
1546  161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
1547  161, 161, 161, 161, 191, 191, 191, 191, 191, 191,
1548  191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
1549  191, 191, 191, 191, 191, 198, 198, 198, 198, 198,
1550  198, 198, 198, 198, 198, 198, 198, 198, 198, 198,
1551  198, 198, 198, 198, 198, 198, 207, 207, 207, 207,
1552 
1553  207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
1554  207, 207, 207, 207, 207, 207, 207, 221, 221, 221,
1555  221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
1556  221, 221, 221, 221, 221, 221, 221, 221, 245, 245,
1557  245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
1558  245, 245, 245, 245, 245, 245, 245, 245, 245, 253,
1559  253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
1560  253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
1561  261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
1562  261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
1563 
1564  261, 288, 288, 288, 288, 288, 288, 288, 288, 288,
1565  288, 288, 288, 288, 288, 288, 288, 288, 288, 288,
1566  288, 288, 296, 296, 296, 296, 296, 296, 296, 296,
1567  296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
1568  296, 296, 296, 305, 305, 305, 305, 305, 305, 305,
1569  305, 305, 305, 305, 305, 305, 305, 305, 305, 305,
1570  305, 305, 305, 305, 312, 312, 312, 312, 312, 312,
1571  312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
1572  312, 312, 312, 312, 312, 324, 324, 324, 324, 324,
1573  324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
1574 
1575  324, 324, 324, 324, 324, 324, 339, 339, 339, 339,
1576  339, 339, 339, 339, 339, 339, 339, 339, 339, 339,
1577  339, 339, 339, 339, 339, 339, 339, 374, 374, 374,
1578  1315, 374, 374, 1315, 374, 1315, 374, 374, 374, 374,
1579  1315, 374, 374, 374, 374, 374, 374, 374, 375, 375,
1580  375, 1315, 375, 375, 375, 375, 1315, 375, 375, 375,
1581  375, 375, 375, 375, 375, 375, 375, 375, 375, 378,
1582  378, 378, 1315, 378, 378, 1315, 378, 378, 378, 378,
1583  378, 378, 378, 378, 378, 378, 378, 378, 1315, 378,
1584  382, 382, 382, 1315, 382, 382, 382, 382, 382, 382,
1585 
1586  382, 382, 382, 382, 382, 382, 382, 382, 382, 382,
1587  382, 383, 383, 383, 1315, 383, 383, 383, 383, 383,
1588  383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
1589  383, 383, 387, 387, 387, 1315, 1315, 1315, 1315, 387,
1590  1315, 1315, 1315, 1315, 387, 1315, 1315, 1315, 387, 391,
1591  391, 391, 1315, 1315, 391, 1315, 391, 391, 391, 391,
1592  391, 391, 391, 391, 391, 391, 391, 391, 1315, 391,
1593  395, 395, 395, 1315, 395, 395, 395, 395, 395, 395,
1594  395, 395, 395, 395, 395, 395, 395, 395, 395, 395,
1595  395, 396, 396, 396, 1315, 396, 396, 396, 396, 396,
1596 
1597  396, 396, 396, 396, 396, 396, 396, 396, 396, 396,
1598  396, 396, 403, 1315, 1315, 1315, 1315, 1315, 1315, 403,
1599  1315, 1315, 1315, 1315, 403, 1315, 1315, 1315, 403, 404,
1600  404, 404, 404, 404, 404, 404, 404, 404, 404, 404,
1601  404, 404, 404, 404, 404, 404, 404, 404, 1315, 404,
1602  414, 414, 1315, 1315, 1315, 1315, 1315, 414, 1315, 1315,
1603  1315, 1315, 414, 1315, 1315, 1315, 414, 414, 424, 1315,
1604  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 424, 1315,
1605  424, 1315, 1315, 1315, 424, 434, 434, 434, 434, 434,
1606  434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1607 
1608  434, 434, 434, 434, 434, 434, 437, 1315, 437, 1315,
1609  437, 437, 437, 437, 437, 437, 437, 1315, 437, 1315,
1610  437, 437, 437, 1315, 437, 459, 459, 459, 1315, 459,
1611  459, 459, 459, 459, 459, 459, 1315, 459, 459, 459,
1612  459, 459, 459, 459, 459, 459, 463, 463, 463, 1315,
1613  463, 463, 463, 463, 463, 463, 463, 1315, 463, 463,
1614  463, 463, 463, 463, 1315, 463, 463, 478, 478, 478,
1615  1315, 478, 478, 478, 478, 478, 478, 478, 478, 478,
1616  478, 478, 478, 478, 1315, 478, 1315, 478, 479, 479,
1617  479, 1315, 479, 479, 479, 479, 479, 479, 479, 479,
1618 
1619  479, 1315, 479, 479, 479, 1315, 479, 1315, 479, 480,
1620  1315, 480, 1315, 480, 480, 480, 480, 480, 480, 480,
1621  480, 480, 480, 480, 480, 480, 1315, 480, 1315, 480,
1622  486, 1315, 486, 1315, 486, 486, 486, 486, 486, 486,
1623  486, 1315, 486, 486, 486, 486, 486, 486, 486, 486,
1624  486, 491, 1315, 491, 1315, 491, 491, 491, 491, 491,
1625  491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
1626  491, 491, 504, 504, 504, 1315, 504, 504, 504, 504,
1627  504, 504, 504, 504, 504, 504, 504, 504, 504, 504,
1628  504, 504, 504, 508, 508, 508, 1315, 508, 508, 508,
1629 
1630  508, 1315, 508, 508, 508, 508, 508, 508, 508, 508,
1631  508, 508, 508, 508, 513, 513, 513, 1315, 513, 513,
1632  513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
1633  513, 513, 513, 513, 513, 514, 1315, 1315, 514, 1315,
1634  514, 1315, 514, 514, 1315, 514, 1315, 514, 1315, 1315,
1635  1315, 514, 515, 515, 515, 1315, 515, 1315, 515, 515,
1636  515, 515, 515, 1315, 515, 1315, 515, 515, 515, 1315,
1637  515, 1315, 515, 523, 1315, 1315, 523, 523, 523, 1315,
1638  1315, 523, 1315, 523, 523, 540, 540, 540, 1315, 540,
1639  540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
1640 
1641  540, 540, 540, 540, 540, 540, 542, 542, 542, 1315,
1642  542, 542, 542, 542, 542, 542, 542, 542, 542, 542,
1643  542, 542, 542, 542, 542, 542, 542, 374, 374, 374,
1644  1315, 374, 374, 1315, 374, 1315, 374, 374, 374, 374,
1645  1315, 374, 374, 374, 374, 374, 374, 374, 550, 550,
1646  550, 1315, 550, 550, 550, 550, 550, 550, 550, 550,
1647  550, 550, 550, 550, 550, 550, 550, 1315, 550, 552,
1648  552, 552, 1315, 552, 552, 552, 552, 552, 552, 552,
1649  552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
1650  378, 378, 378, 1315, 378, 378, 1315, 378, 378, 378,
1651 
1652  378, 378, 378, 378, 378, 378, 378, 378, 378, 1315,
1653  378, 555, 555, 555, 1315, 555, 555, 555, 555, 555,
1654  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
1655  555, 555, 558, 558, 558, 1315, 558, 558, 558, 558,
1656  558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
1657  558, 558, 558, 563, 563, 563, 1315, 563, 563, 563,
1658  563, 563, 563, 563, 563, 563, 563, 563, 563, 563,
1659  563, 563, 563, 563, 387, 387, 387, 1315, 1315, 1315,
1660  1315, 387, 1315, 1315, 1315, 1315, 387, 1315, 1315, 1315,
1661  387, 391, 391, 391, 1315, 1315, 391, 1315, 391, 391,
1662 
1663  391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
1664  1315, 391, 396, 396, 396, 1315, 396, 396, 396, 396,
1665  396, 396, 396, 396, 396, 396, 396, 396, 396, 396,
1666  396, 396, 396, 403, 1315, 1315, 1315, 1315, 1315, 1315,
1667  403, 1315, 1315, 1315, 1315, 403, 1315, 1315, 1315, 403,
1668  404, 404, 404, 404, 404, 404, 404, 404, 404, 404,
1669  404, 404, 404, 404, 404, 404, 404, 404, 404, 1315,
1670  404, 414, 414, 1315, 1315, 1315, 1315, 1315, 414, 1315,
1671  1315, 1315, 1315, 414, 1315, 1315, 1315, 414, 414, 424,
1672  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 424,
1673 
1674  1315, 424, 1315, 1315, 1315, 424, 434, 434, 434, 434,
1675  434, 434, 434, 434, 434, 434, 434, 434, 434, 434,
1676  434, 434, 434, 434, 434, 434, 434, 437, 1315, 437,
1677  1315, 437, 437, 437, 437, 437, 437, 437, 1315, 437,
1678  1315, 437, 437, 437, 1315, 437, 459, 459, 459, 1315,
1679  459, 459, 459, 459, 459, 459, 459, 1315, 459, 459,
1680  459, 459, 459, 459, 459, 459, 459, 463, 463, 463,
1681  1315, 463, 463, 463, 463, 463, 463, 463, 1315, 463,
1682  463, 463, 463, 463, 463, 1315, 463, 463, 478, 478,
1683  478, 1315, 478, 478, 478, 478, 478, 478, 478, 478,
1684 
1685  478, 478, 478, 478, 478, 1315, 478, 1315, 478, 479,
1686  479, 479, 1315, 479, 479, 479, 479, 479, 479, 479,
1687  479, 479, 1315, 479, 479, 479, 1315, 479, 1315, 479,
1688  480, 1315, 480, 1315, 480, 480, 480, 480, 480, 480,
1689  480, 480, 480, 480, 480, 480, 480, 1315, 480, 1315,
1690  480, 486, 1315, 486, 1315, 486, 486, 486, 486, 486,
1691  486, 486, 1315, 486, 486, 486, 486, 486, 486, 486,
1692  486, 486, 491, 1315, 491, 1315, 491, 491, 491, 491,
1693  491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
1694  491, 491, 491, 637, 637, 637, 1315, 637, 637, 637,
1695 
1696  637, 637, 637, 637, 637, 637, 637, 637, 637, 637,
1697  637, 637, 1315, 637, 639, 639, 639, 1315, 639, 639,
1698  639, 639, 639, 639, 639, 639, 639, 639, 639, 639,
1699  639, 639, 639, 639, 639, 514, 1315, 1315, 514, 1315,
1700  514, 1315, 514, 514, 1315, 514, 1315, 514, 1315, 1315,
1701  1315, 514, 515, 515, 515, 1315, 515, 1315, 515, 515,
1702  515, 515, 515, 1315, 515, 1315, 515, 515, 515, 1315,
1703  515, 1315, 515, 649, 649, 649, 1315, 649, 649, 649,
1704  649, 649, 649, 649, 649, 649, 649, 649, 649, 649,
1705  649, 649, 649, 649, 652, 652, 652, 1315, 652, 652,
1706 
1707  652, 652, 652, 652, 652, 652, 652, 652, 652, 652,
1708  652, 652, 652, 652, 652, 540, 540, 540, 1315, 540,
1709  540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
1710  540, 540, 540, 540, 540, 540, 542, 542, 542, 1315,
1711  542, 542, 542, 542, 542, 542, 542, 542, 542, 542,
1712  542, 542, 542, 542, 542, 542, 542, 670, 670, 670,
1713  1315, 670, 670, 670, 670, 670, 670, 670, 670, 670,
1714  670, 670, 670, 670, 670, 670, 1315, 670, 374, 374,
1715  374, 1315, 374, 374, 1315, 374, 1315, 374, 374, 374,
1716  374, 1315, 374, 374, 374, 374, 374, 374, 374, 555,
1717 
1718  555, 555, 1315, 555, 555, 555, 555, 555, 555, 555,
1719  555, 555, 555, 555, 555, 555, 555, 555, 555, 555,
1720  556, 556, 556, 1315, 556, 556, 556, 556, 556, 556,
1721  556, 556, 556, 556, 556, 556, 556, 556, 556, 556,
1722  556, 558, 558, 558, 1315, 558, 558, 558, 558, 558,
1723  558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
1724  558, 558, 559, 559, 559, 1315, 559, 559, 559, 559,
1725  559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
1726  559, 559, 559, 378, 378, 378, 1315, 378, 378, 1315,
1727  378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
1728 
1729  378, 378, 1315, 378, 387, 387, 387, 1315, 1315, 1315,
1730  1315, 387, 1315, 1315, 1315, 1315, 387, 1315, 1315, 1315,
1731  387, 391, 391, 391, 1315, 1315, 391, 1315, 391, 391,
1732  391, 391, 391, 391, 391, 391, 391, 391, 391, 391,
1733  1315, 391, 396, 396, 396, 1315, 396, 396, 396, 396,
1734  396, 396, 396, 396, 396, 396, 396, 396, 396, 396,
1735  396, 396, 396, 404, 404, 404, 404, 404, 404, 404,
1736  404, 404, 404, 404, 404, 404, 404, 404, 404, 404,
1737  404, 404, 1315, 404, 459, 459, 459, 1315, 459, 459,
1738  459, 459, 459, 459, 459, 1315, 459, 459, 459, 459,
1739 
1740  459, 459, 459, 459, 459, 720, 720, 720, 1315, 720,
1741  720, 720, 720, 720, 720, 720, 720, 720, 720, 720,
1742  720, 720, 720, 720, 1315, 720, 724, 724, 724, 1315,
1743  724, 724, 724, 724, 724, 724, 724, 724, 724, 724,
1744  724, 724, 724, 724, 724, 724, 724, 748, 748, 748,
1745  1315, 748, 748, 748, 748, 748, 748, 748, 748, 748,
1746  748, 748, 748, 748, 748, 748, 1315, 748, 786, 786,
1747  786, 1315, 786, 786, 786, 786, 786, 786, 786, 786,
1748  786, 786, 786, 786, 786, 786, 786, 1315, 786, 789,
1749  789, 789, 789, 789, 789, 789, 789, 789, 789, 789,
1750 
1751  789, 789, 789, 789, 789, 789, 789, 789, 789, 789,
1752  875, 875, 875, 875, 875, 875, 875, 875, 875, 875,
1753  875, 875, 875, 875, 875, 875, 875, 875, 875, 875,
1754  875, 900, 1315, 1315, 1315, 900, 1315, 1315, 1315, 1315,
1755  1315, 1315, 1315, 1315, 900, 1315, 1315, 900, 905, 905,
1756  905, 905, 905, 905, 905, 905, 905, 905, 905, 905,
1757  905, 905, 905, 905, 905, 905, 905, 905, 905, 946,
1758  946, 946, 946, 946, 946, 946, 946, 946, 946, 946,
1759  946, 946, 946, 1315, 946, 946, 946, 1315, 946, 946,
1760  955, 955, 955, 955, 955, 955, 955, 955, 955, 955,
1761 
1762  955, 955, 955, 955, 1315, 955, 955, 955, 1315, 955,
1763  955, 966, 966, 966, 966, 966, 966, 966, 966, 966,
1764  966, 966, 966, 966, 966, 1315, 966, 966, 966, 1315,
1765  966, 966, 73, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1766  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1767  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1768  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1769  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1770  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
1771  1315, 1315, 1315
1772 
1773  } ;
1774 
1776  { 0,
1777  0, 1, 160, 1, 1, 2, 0, 2, 2, 41,
1778  3, 160, 3, 3, 78, 87, 166, 1, 78, 87,
1779  41, 2, 175, 96, 41, 1, 3, 96, 110, 2,
1780  154, 122, 110, 41, 3, 122, 175, 41, 166, 41,
1781  89, 89, 89, 129, 101, 102, 101, 129, 154, 89,
1782  89, 139, 102, 102, 113, 139, 113, 142, 142, 1,
1783  150, 167, 167, 2, 150, 41, 189, 189, 3, 4,
1784  4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
1785  4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
1786  4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
1787 
1788  4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
1789  4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
1790  4, 4, 4, 4, 4, 4, 4, 4, 4, 5,
1791  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1792  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1793  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1794  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1795  5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
1796  5, 5, 5, 5, 5, 5, 5, 5, 5, 7,
1797  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1798 
1799  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1800  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1801  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1802  7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
1803  7, 7, 7, 7, 7, 7, 7, 7, 7, 9,
1804  170, 9, 9, 165, 9, 240, 240, 1238, 9, 10,
1805  170, 10, 10, 165, 10, 9, 155, 165, 10, 11,
1806  1220, 11, 11, 9, 11, 10, 12, 179, 12, 12,
1807  357, 12, 179, 10, 155, 11, 141, 141, 141, 357,
1808  156, 579, 12, 11, 159, 141, 158, 185, 11, 195,
1809 
1810  12, 185, 157, 195, 1019, 12, 200, 9, 156, 157,
1811  579, 200, 159, 157, 158, 158, 245, 10, 204, 212,
1812  157, 226, 204, 212, 234, 226, 239, 11, 234, 249,
1813  239, 1010, 245, 249, 12, 13, 13, 13, 13, 13,
1814  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1815  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1816  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1817  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1818  13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
1819  13, 13, 13, 13, 13, 15, 361, 15, 15, 16,
1820 
1821  15, 16, 16, 1001, 16, 361, 248, 143, 143, 143,
1822  406, 15, 169, 169, 217, 16, 143, 274, 274, 15,
1823  406, 169, 248, 16, 15, 217, 218, 17, 16, 17,
1824  17, 18, 17, 18, 18, 258, 18, 218, 380, 258,
1825  169, 218, 250, 17, 217, 252, 1000, 18, 264, 380,
1826  17, 17, 264, 15, 18, 18, 218, 16, 250, 143,
1827  251, 252, 380, 271, 251, 999, 250, 271, 281, 251,
1828  217, 251, 281, 292, 300, 308, 416, 292, 300, 308,
1829  310, 310, 218, 320, 328, 17, 416, 320, 328, 18,
1830  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1831 
1832  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1833  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1834  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1835  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1836  19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1837  21, 336, 21, 21, 22, 336, 22, 22, 371, 396,
1838  29, 241, 29, 29, 344, 990, 21, 371, 344, 346,
1839  22, 859, 241, 346, 21, 398, 29, 396, 22, 21,
1840  346, 356, 398, 22, 29, 354, 354, 354, 376, 376,
1841  356, 241, 384, 398, 354, 354, 401, 356, 356, 356,
1842 
1843  384, 384, 385, 385, 385, 401, 356, 356, 21, 989,
1844  426, 385, 22, 23, 23, 426, 859, 241, 29, 23,
1845  23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1846  23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1847  23, 23, 25, 25, 25, 25, 25, 25, 25, 25,
1848  25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
1849  25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
1850  25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
1851  25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
1852  25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
1853 
1854  25, 25, 27, 27, 27, 27, 27, 27, 27, 27,
1855  27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
1856  27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
1857  27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
1858  27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
1859  27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
1860  27, 27, 30, 30, 30, 30, 403, 31, 30, 31,
1861  31, 32, 478, 32, 32, 403, 407, 33, 30, 33,
1862  33, 242, 34, 31, 34, 34, 30, 32, 478, 422,
1863  407, 31, 242, 33, 572, 32, 242, 37, 34, 37,
1864 
1865  37, 33, 38, 422, 38, 38, 34, 429, 42, 37,
1866  379, 242, 572, 37, 38, 429, 424, 379, 38, 42,
1867  30, 37, 456, 42, 363, 31, 38, 363, 399, 32,
1868  424, 988, 42, 363, 379, 33, 42, 242, 42, 399,
1869  34, 35, 373, 35, 35, 373, 399, 387, 387, 387,
1870  439, 373, 456, 35, 439, 37, 387, 35, 363, 43,
1871  38, 43, 43, 475, 42, 35, 35, 430, 363, 987,
1872  35, 470, 35, 411, 411, 43, 373, 435, 456, 430,
1873  509, 509, 435, 43, 43, 484, 373, 484, 43, 44,
1874  411, 44, 44, 475, 470, 414, 414, 517, 35, 35,
1875 
1876  36, 36, 36, 36, 414, 44, 390, 390, 390, 517,
1877  525, 525, 36, 44, 44, 390, 36, 43, 44, 475,
1878  470, 487, 516, 414, 36, 36, 487, 377, 575, 36,
1879  516, 36, 377, 377, 377, 573, 680, 377, 599, 377,
1880  524, 526, 575, 553, 377, 377, 377, 44, 599, 524,
1881  526, 553, 553, 573, 680, 390, 986, 36, 36, 39,
1882  39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
1883  39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
1884  39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
1885  39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
1886 
1887  39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
1888  39, 39, 39, 39, 39, 39, 39, 39, 39, 45,
1889  555, 45, 45, 452, 46, 558, 46, 46, 667, 600,
1890  47, 45, 47, 47, 452, 45, 46, 560, 737, 48,
1891  46, 48, 48, 45, 555, 600, 47, 737, 46, 558,
1892  624, 628, 381, 452, 47, 48, 628, 381, 381, 381,
1893  985, 560, 381, 48, 381, 557, 624, 667, 394, 381,
1894  381, 381, 673, 394, 394, 394, 557, 45, 394, 452,
1895  394, 656, 46, 565, 656, 394, 394, 394, 47, 557,
1896  656, 565, 565, 578, 578, 578, 673, 48, 49, 49,
1897 
1898  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
1899  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
1900  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
1901  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
1902  49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
1903  49, 49, 49, 49, 49, 49, 49, 49, 51, 51,
1904  51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
1905  51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
1906  51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
1907  51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
1908 
1909  51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
1910  51, 51, 51, 51, 51, 51, 51, 51, 53, 441,
1911  975, 566, 566, 566, 441, 441, 441, 649, 649, 441,
1912  566, 441, 974, 53, 53, 973, 441, 441, 441, 53,
1913  53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
1914  53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
1915  53, 53, 55, 685, 55, 55, 56, 55, 56, 56,
1916  972, 56, 57, 685, 57, 57, 734, 609, 55, 619,
1917  971, 57, 56, 567, 567, 567, 55, 453, 57, 592,
1918  56, 55, 567, 571, 640, 56, 57, 58, 453, 58,
1919 
1920  58, 57, 640, 640, 571, 666, 58, 609, 666, 619,
1921  592, 571, 706, 58, 666, 734, 970, 453, 567, 672,
1922  55, 58, 686, 706, 56, 707, 58, 672, 672, 61,
1923  57, 61, 61, 609, 836, 619, 969, 592, 686, 698,
1924  698, 698, 462, 453, 968, 61, 744, 462, 462, 462,
1925  836, 707, 462, 61, 462, 58, 59, 59, 61, 462,
1926  462, 462, 59, 59, 59, 59, 59, 59, 59, 59,
1927  59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
1928  59, 59, 59, 59, 59, 744, 62, 61, 62, 62,
1929  712, 967, 711, 65, 466, 65, 65, 471, 65, 466,
1930 
1931  466, 466, 62, 711, 466, 789, 466, 472, 471, 65,
1932  62, 466, 466, 466, 789, 62, 712, 65, 472, 965,
1933  676, 961, 65, 651, 651, 651, 954, 471, 676, 676,
1934  608, 722, 953, 66, 952, 66, 66, 472, 66, 722,
1935  722, 608, 651, 747, 62, 63, 747, 63, 63, 66,
1936  63, 65, 747, 471, 63, 63, 63, 66, 792, 792,
1937  608, 63, 66, 472, 951, 793, 490, 950, 618, 63,
1938  63, 490, 490, 490, 793, 949, 490, 651, 490, 618,
1939  948, 802, 494, 490, 490, 490, 608, 494, 494, 494,
1940  802, 66, 494, 804, 494, 757, 757, 757, 618, 494,
1941 
1942  494, 494, 804, 63, 64, 947, 64, 64, 945, 64,
1943  677, 677, 677, 64, 64, 64, 766, 766, 766, 677,
1944  64, 768, 768, 768, 618, 518, 848, 848, 64, 64,
1945  518, 518, 518, 944, 1335, 518, 943, 518, 1335, 942,
1946  710, 710, 518, 518, 518, 710, 752, 752, 752, 710,
1947  710, 784, 784, 784, 710, 752, 1336, 1337, 710, 710,
1948  1336, 1337, 64, 67, 67, 67, 67, 67, 67, 67,
1949  67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
1950  67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
1951  67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
1952 
1953  67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
1954  67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
1955  67, 67, 67, 71, 940, 71, 71, 71, 815, 815,
1956  815, 678, 678, 678, 799, 71, 653, 653, 653, 71,
1957  678, 725, 725, 725, 753, 753, 753, 71, 71, 936,
1958  855, 725, 71, 753, 926, 653, 726, 726, 726, 855,
1959  725, 727, 727, 727, 728, 728, 728, 765, 765, 765,
1960  794, 794, 794, 799, 925, 726, 924, 923, 678, 922,
1961  727, 71, 72, 728, 72, 72, 72, 1351, 753, 794,
1962  653, 1351, 805, 1361, 72, 725, 805, 1361, 72, 810,
1963 
1964  810, 810, 824, 824, 824, 893, 72, 72, 810, 921,
1965  726, 72, 805, 854, 893, 727, 854, 920, 728, 857,
1966  919, 765, 854, 857, 794, 826, 826, 826, 843, 843,
1967  843, 876, 876, 876, 906, 906, 906, 918, 917, 857,
1968  72, 83, 83, 83, 83, 83, 83, 83, 83, 83,
1969  83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
1970  83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
1971  83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
1972  83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
1973  83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
1974 
1975  83, 214, 1362, 915, 860, 214, 1362, 860, 914, 913,
1976  214, 214, 214, 860, 927, 214, 861, 861, 861, 214,
1977  214, 912, 1363, 927, 214, 861, 1363, 911, 214, 214,
1978  352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
1979  352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
1980  352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
1981  352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
1982  352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
1983  352, 352, 352, 352, 352, 352, 352, 352, 352, 352,
1984  400, 400, 902, 902, 902, 400, 400, 400, 910, 1365,
1985 
1986  400, 902, 400, 1365, 790, 790, 790, 400, 400, 400,
1987  408, 1371, 408, 909, 790, 1371, 1372, 408, 408, 408,
1988  1372, 1375, 408, 790, 408, 1375, 908, 907, 905, 408,
1989  408, 408, 442, 442, 442, 442, 904, 442, 937, 937,
1990  937, 442, 442, 901, 1390, 1400, 442, 937, 1390, 1400,
1991  442, 442, 483, 1401, 894, 1402, 483, 1401, 790, 1402,
1992  1403, 483, 483, 483, 1403, 1410, 483, 1413, 483, 1410,
1993  892, 1413, 891, 483, 483, 483, 657, 657, 657, 657,
1994  657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
1995  657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
1996 
1997  657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
1998  657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
1999  657, 657, 657, 657, 657, 657, 657, 657, 657, 657,
2000  657, 657, 657, 657, 657, 657, 736, 736, 736, 736,
2001  736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
2002  736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
2003  736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
2004  736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
2005  736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
2006  736, 736, 736, 736, 736, 736, 791, 791, 791, 795,
2007 
2008  795, 795, 796, 796, 796, 890, 791, 811, 811, 811,
2009  889, 811, 812, 812, 812, 791, 811, 888, 795, 887,
2010  886, 796, 846, 846, 846, 847, 847, 847, 850, 850,
2011  850, 885, 846, 884, 883, 847, 851, 851, 851, 1434,
2012  882, 846, 881, 1434, 847, 880, 879, 850, 878, 877,
2013  791, 875, 874, 795, 873, 851, 796, 872, 852, 852,
2014  852, 811, 871, 862, 862, 862, 812, 862, 895, 895,
2015  895, 870, 862, 896, 896, 896, 846, 852, 895, 847,
2016  869, 868, 850, 896, 897, 897, 897, 895, 867, 866,
2017  851, 865, 896, 863, 898, 898, 898, 899, 899, 899,
2018 
2019  903, 903, 903, 897, 903, 930, 930, 930, 853, 903,
2020  845, 844, 852, 898, 842, 930, 899, 862, 931, 931,
2021  931, 841, 895, 840, 930, 839, 838, 896, 931, 837,
2022  932, 932, 932, 933, 933, 933, 835, 931, 897, 934,
2023  934, 934, 939, 939, 939, 834, 939, 833, 898, 932,
2024  832, 899, 933, 831, 903, 956, 956, 956, 934, 930,
2025  938, 938, 938, 830, 938, 956, 957, 957, 957, 938,
2026  829, 828, 931, 827, 956, 823, 957, 822, 958, 958,
2027  958, 959, 959, 959, 932, 957, 821, 933, 960, 960,
2028  960, 820, 819, 934, 818, 817, 939, 958, 816, 814,
2029 
2030  959, 962, 962, 962, 963, 963, 963, 960, 963, 956,
2031  962, 813, 809, 963, 938, 964, 964, 964, 808, 807,
2032  957, 976, 976, 976, 977, 977, 977, 978, 978, 978,
2033  806, 976, 958, 800, 977, 959, 979, 979, 979, 798,
2034  976, 797, 960, 977, 788, 787, 978, 980, 980, 980,
2035  982, 982, 982, 786, 785, 979, 783, 782, 963, 982,
2036  781, 983, 983, 983, 780, 983, 980, 779, 778, 964,
2037  983, 984, 984, 984, 777, 976, 776, 775, 977, 774,
2038  773, 978, 772, 991, 991, 991, 992, 992, 992, 771,
2039  979, 770, 769, 991, 767, 764, 992, 993, 993, 993,
2040 
2041  763, 980, 991, 762, 761, 992, 760, 994, 994, 994,
2042  995, 995, 995, 759, 758, 983, 993, 756, 996, 996,
2043  996, 998, 998, 998, 755, 984, 994, 996, 754, 995,
2044  997, 997, 997, 751, 997, 749, 748, 991, 745, 997,
2045  992, 742, 741, 1002, 1002, 1002, 1003, 1003, 1003, 740,
2046  739, 993, 738, 1002, 735, 731, 1003, 1004, 1004, 1004,
2047  730, 994, 1002, 724, 995, 1003, 1005, 1005, 1005, 1006,
2048  1006, 1006, 1007, 1007, 1007, 998, 1004, 723, 1008, 1008,
2049  1008, 1007, 1008, 720, 997, 1005, 719, 1008, 1006, 1009,
2050  1009, 1009, 717, 1011, 1011, 1011, 716, 1002, 714, 713,
2051 
2052  1003, 709, 708, 1011, 705, 1012, 1012, 1012, 1013, 1013,
2053  1013, 1004, 1011, 704, 703, 1012, 1014, 1014, 1014, 702,
2054  1005, 701, 700, 1006, 1012, 699, 697, 1013, 696, 1015,
2055  1015, 1015, 1008, 695, 694, 1014, 1016, 1016, 1016, 693,
2056  1017, 1017, 1017, 1009, 1017, 1016, 692, 1011, 1015, 1017,
2057  1018, 1018, 1018, 1020, 1020, 1020, 1021, 1021, 1021, 1012,
2058  691, 690, 1013, 1020, 689, 687, 1021, 1022, 1022, 1022,
2059  1014, 684, 1020, 681, 670, 1021, 1022, 1023, 1023, 1023,
2060  669, 1023, 668, 1015, 664, 663, 1023, 1024, 1024, 1024,
2061  1025, 1025, 1025, 662, 1017, 661, 1026, 1026, 1026, 1025,
2062 
2063  1026, 1027, 1027, 1027, 1018, 1026, 660, 1020, 659, 658,
2064  1021, 1028, 1028, 1028, 1029, 1029, 1029, 655, 1029, 654,
2065  1028, 652, 650, 1029, 1030, 1030, 1030, 1031, 1031, 1031,
2066  647, 1023, 643, 1032, 1032, 1032, 1031, 1032, 1033, 1033,
2067  1033, 1024, 1032, 1034, 1034, 1034, 641, 1035, 1035, 1035,
2068  1026, 1035, 1034, 639, 637, 1027, 1035, 1036, 1036, 1036,
2069  1037, 1037, 1037, 1038, 1038, 1038, 635, 1038, 1029, 1037,
2070  632, 627, 1038, 1039, 1039, 1039, 626, 622, 1030, 1040,
2071  1040, 1040, 1041, 1041, 1041, 621, 1041, 1032, 1040, 620,
2072  616, 1041, 1033, 1042, 1042, 1042, 1043, 1043, 1043, 611,
2073 
2074  610, 1035, 1045, 1045, 1045, 1043, 1044, 1044, 1044, 607,
2075  1044, 1036, 1046, 1046, 1046, 1044, 606, 1038, 1048, 1048,
2076  1048, 1046, 1047, 1047, 1047, 605, 1047, 1039, 1049, 1049,
2077  1049, 1047, 1051, 1051, 1051, 604, 1041, 1049, 603, 1050,
2078  1050, 1050, 602, 1050, 1052, 1052, 1052, 1042, 1050, 601,
2079  1053, 1053, 1053, 1052, 1053, 598, 1045, 597, 596, 1053,
2080  1044, 1054, 1054, 1054, 1055, 1055, 1055, 1057, 1057, 1057,
2081  595, 594, 1048, 1055, 593, 591, 1047, 590, 1056, 1056,
2082  1056, 589, 1056, 1058, 1058, 1058, 1051, 1056, 1060, 1060,
2083  1060, 587, 1058, 1050, 1059, 1059, 1059, 584, 1059, 1061,
2084 
2085  1061, 1061, 582, 1059, 1053, 1062, 1062, 1062, 1061, 1062,
2086  1063, 1063, 1063, 581, 1062, 1054, 1064, 1064, 1064, 577,
2087  576, 1057, 1065, 1065, 1065, 1064, 1065, 1066, 1066, 1066,
2088  568, 1065, 1056, 564, 1067, 1067, 1067, 1068, 1068, 1068,
2089  563, 1068, 1060, 1067, 552, 550, 1068, 549, 1059, 1069,
2090  1069, 1069, 1070, 1070, 1070, 548, 1071, 1071, 1071, 1062,
2091  1071, 1070, 546, 545, 1063, 1071, 1072, 1072, 1072, 1073,
2092  1073, 1073, 544, 1074, 1074, 1074, 1065, 1074, 1073, 541,
2093  539, 1066, 1074, 1075, 1075, 1075, 1076, 1076, 1076, 538,
2094  537, 1068, 1077, 1077, 1077, 1076, 1077, 1078, 1078, 1078,
2095 
2096  536, 1077, 535, 1069, 1079, 1079, 1079, 1080, 1080, 1080,
2097  1071, 1080, 534, 1079, 532, 531, 1080, 1081, 1081, 1081,
2098  1072, 1082, 1082, 1082, 1083, 1083, 1083, 1074, 1083, 530,
2099  1082, 529, 528, 1083, 1084, 1084, 1084, 1075, 1085, 1085,
2100  1085, 1086, 1086, 1086, 527, 1086, 1077, 1085, 521, 520,
2101  1086, 1078, 1087, 1087, 1087, 1088, 1088, 1088, 1089, 1089,
2102  1089, 1080, 1089, 519, 1088, 512, 511, 1089, 1090, 1090,
2103  1090, 1081, 1091, 1091, 1091, 1092, 1092, 1092, 1083, 1092,
2104  510, 1091, 508, 507, 1092, 1093, 1093, 1093, 1084, 1094,
2105  1094, 1094, 1095, 1095, 1095, 1086, 1095, 503, 1094, 502,
2106 
2107  498, 1095, 1096, 1096, 1096, 497, 1087, 1097, 1097, 1097,
2108  493, 492, 1089, 1099, 1099, 1099, 1097, 1098, 1098, 1098,
2109  489, 1098, 1090, 1100, 1100, 1100, 1098, 488, 485, 1092,
2110  482, 481, 1100, 1101, 1101, 1101, 477, 1101, 476, 1093,
2111  474, 473, 1101, 1102, 1102, 1102, 1095, 469, 1103, 1103,
2112  1103, 1104, 1104, 1104, 468, 1104, 1096, 1103, 465, 461,
2113  1104, 1105, 1105, 1105, 1106, 1106, 1106, 1099, 1107, 1107,
2114  1107, 1098, 1107, 1106, 1108, 1108, 1108, 1107, 458, 1109,
2115  1109, 1109, 1110, 1110, 1110, 457, 1110, 1101, 1109, 455,
2116  454, 1110, 1111, 1111, 1111, 451, 450, 1102, 1112, 1112,
2117 
2118  1112, 449, 1113, 1113, 1113, 1104, 1113, 1112, 1114, 1114,
2119  1114, 1113, 1115, 1115, 1115, 1105, 1116, 1116, 1116, 448,
2120  1116, 1115, 1107, 447, 446, 1116, 445, 444, 1108, 1117,
2121  1117, 1117, 1118, 1118, 1118, 443, 1110, 440, 1119, 1119,
2122  1119, 1118, 1119, 1120, 1120, 1120, 1111, 1119, 1121, 1121,
2123  1121, 1122, 1122, 1122, 433, 1122, 1113, 1121, 428, 427,
2124  1122, 423, 1114, 1123, 1123, 1123, 1124, 1124, 1124, 421,
2125  1116, 420, 1125, 1125, 1125, 1124, 1125, 1126, 1126, 1126,
2126  419, 1125, 418, 1117, 1127, 1127, 1127, 1128, 1128, 1128,
2127  417, 1128, 1119, 1127, 415, 410, 1128, 1120, 1129, 1129,
2128 
2129  1129, 1130, 1130, 1130, 404, 1122, 393, 1131, 1131, 1131,
2130  1130, 1131, 1132, 1132, 1132, 392, 1131, 1123, 1133, 1133,
2131  1133, 1134, 1134, 1134, 389, 1134, 1125, 1133, 383, 375,
2132  1134, 1126, 1135, 1135, 1135, 1136, 1136, 1136, 1137, 1137,
2133  1137, 1128, 1137, 372, 1136, 369, 368, 1137, 1138, 1138,
2134  1138, 367, 1129, 1139, 1139, 1139, 1140, 1140, 1140, 366,
2135  1140, 1131, 1139, 365, 364, 1140, 1132, 1141, 1141, 1141,
2136  1142, 1142, 1142, 362, 360, 1134, 1143, 1143, 1143, 1142,
2137  1143, 1144, 1144, 1144, 359, 1143, 1135, 1145, 1145, 1145,
2138  349, 348, 1137, 1147, 1147, 1147, 1145, 1146, 1146, 1146,
2139 
2140  345, 1146, 1138, 1148, 1148, 1148, 1146, 1149, 1149, 1149,
2141  1140, 1149, 1148, 1150, 1150, 1150, 1149, 1151, 1151, 1151,
2142  337, 1141, 329, 1152, 1152, 1152, 1151, 1152, 321, 317,
2143  1143, 309, 1152, 301, 293, 1144, 1153, 1153, 1153, 1154,
2144  1154, 1154, 1156, 1156, 1156, 284, 282, 1147, 1154, 275,
2145  272, 1146, 265, 1155, 1155, 1155, 259, 1155, 1159, 1159,
2146  1159, 1149, 1155, 1157, 1157, 1157, 257, 1150, 244, 1158,
2147  1158, 1158, 1157, 1158, 1160, 1160, 1160, 1152, 1158, 243,
2148  1161, 1161, 1161, 1160, 1161, 1162, 1162, 1162, 238, 1161,
2149  1153, 1163, 1163, 1163, 235, 233, 1156, 1164, 1164, 1164,
2150 
2151  1163, 1164, 1165, 1165, 1165, 227, 1164, 1155, 1166, 1166,
2152  1166, 225, 1159, 1168, 1168, 1168, 220, 1166, 1167, 1167,
2153  1167, 219, 1167, 1158, 1169, 1169, 1169, 1167, 1170, 1170,
2154  1170, 213, 1170, 1169, 1161, 211, 205, 1170, 196, 1162,
2155  1171, 1171, 1171, 1172, 1172, 1172, 1173, 1173, 1173, 186,
2156  1173, 1164, 1172, 183, 176, 1173, 1165, 1174, 1174, 1174,
2157  1175, 1175, 1175, 174, 1176, 1176, 1176, 1168, 1176, 1175,
2158  173, 172, 1167, 1176, 1177, 1177, 1177, 1178, 1178, 1178,
2159  171, 168, 1170, 1179, 1179, 1179, 1178, 1179, 1180, 1180,
2160  1180, 164, 1179, 162, 1171, 1181, 1181, 1181, 161, 151,
2161 
2162  1173, 1182, 1182, 1182, 1181, 1182, 1183, 1183, 1183, 140,
2163  1182, 1174, 1184, 1184, 1184, 1185, 1185, 1185, 1176, 1185,
2164  138, 1184, 130, 123, 1185, 1186, 1186, 1186, 1177, 1187,
2165  1187, 1187, 1188, 1188, 1188, 121, 1188, 1179, 1187, 114,
2166  111, 1188, 1180, 1189, 1189, 1189, 104, 1190, 1190, 1190,
2167  1191, 1191, 1191, 103, 1191, 1182, 1190, 100, 99, 1191,
2168  1183, 1192, 1192, 1192, 1193, 1193, 1193, 97, 88, 1185,
2169  1195, 1195, 1195, 1193, 1194, 1194, 1194, 79, 1194, 1186,
2170  1196, 1196, 1196, 1194, 73, 0, 1188, 0, 0, 1196,
2171  1197, 1197, 1197, 0, 1197, 0, 0, 1189, 0, 1197,
2172 
2173  1198, 1198, 1198, 0, 1191, 1199, 1199, 1199, 1200, 1200,
2174  1200, 0, 1200, 0, 1199, 1192, 0, 1200, 1201, 1201,
2175  1201, 1202, 1202, 1202, 1195, 1203, 1203, 1203, 1194, 1203,
2176  1202, 1204, 1204, 1204, 1203, 0, 1205, 1205, 1205, 1206,
2177  1206, 1206, 0, 1206, 1197, 1205, 0, 0, 1206, 1207,
2178  1207, 1207, 0, 0, 1198, 1208, 1208, 1208, 0, 1209,
2179  1209, 1209, 1200, 1209, 1208, 1210, 1210, 1210, 1209, 1211,
2180  1211, 1211, 1201, 1212, 1212, 1212, 0, 1212, 1211, 1203,
2181  0, 0, 1212, 0, 0, 1204, 1213, 1213, 1213, 1214,
2182  1214, 1214, 0, 1206, 0, 1215, 1215, 1215, 1214, 1215,
2183 
2184  1216, 1216, 1216, 1207, 1215, 1217, 1217, 1217, 1218, 1218,
2185  1218, 0, 1218, 1209, 1217, 0, 0, 1218, 0, 1210,
2186  1219, 1219, 1219, 0, 1221, 1221, 1221, 1212, 1221, 1222,
2187  1222, 1222, 0, 1221, 1223, 1223, 1223, 0, 1223, 0,
2188  1213, 0, 0, 1223, 1224, 1224, 1224, 0, 0, 1215,
2189  0, 1225, 1225, 1225, 1216, 1225, 1226, 1226, 1226, 0,
2190  1225, 0, 1218, 1227, 1227, 1227, 0, 1227, 1228, 1228,
2191  1228, 0, 1227, 0, 1219, 1229, 1229, 1229, 1221, 1229,
2192  1230, 1230, 1230, 1222, 1229, 1231, 1231, 1231, 1223, 1231,
2193  1232, 1232, 1232, 0, 1231, 1233, 1233, 1233, 1224, 1234,
2194 
2195  1234, 1234, 1235, 1235, 1235, 1225, 1236, 1236, 1236, 0,
2196  1226, 1237, 1237, 1237, 1239, 1239, 1239, 1227, 1240, 1240,
2197  1240, 0, 1228, 1241, 1241, 1241, 1242, 1242, 1242, 1229,
2198  1243, 1243, 1243, 0, 1230, 1244, 1244, 1244, 0, 1231,
2199  1245, 1245, 1245, 0, 1232, 1246, 1246, 1246, 0, 1233,
2200  1247, 1247, 1247, 1234, 0, 0, 1235, 1248, 1248, 1248,
2201  1236, 1249, 1249, 1249, 0, 1237, 0, 0, 1239, 1250,
2202  1250, 1250, 1240, 1251, 1251, 1251, 0, 1241, 0, 0,
2203  1242, 1252, 1252, 1252, 1243, 1253, 1253, 1253, 0, 1244,
2204  1254, 1254, 1254, 0, 1245, 1255, 1255, 1255, 0, 1246,
2205 
2206  1256, 1256, 1256, 0, 1247, 1257, 1257, 1257, 1258, 1258,
2207  1258, 1248, 1259, 1259, 1259, 1249, 1260, 1260, 1260, 1261,
2208  1261, 1261, 0, 1250, 1262, 1262, 1262, 1251, 1263, 1263,
2209  1263, 1264, 1264, 1264, 0, 1252, 1265, 1265, 1265, 1253,
2210  1266, 1266, 1266, 0, 1254, 1267, 1267, 1267, 0, 1255,
2211  1268, 1268, 1268, 0, 1256, 1269, 1269, 1269, 0, 1257,
2212  0, 0, 1258, 1270, 1270, 1270, 1259, 1271, 1271, 1271,
2213  1260, 0, 0, 1261, 1272, 1272, 1272, 0, 1262, 1273,
2214  1273, 1273, 1263, 0, 0, 1264, 1274, 1274, 1274, 0,
2215  1265, 1275, 1275, 1275, 1266, 1276, 1276, 1276, 0, 1267,
2216 
2217  1277, 1277, 1277, 0, 1268, 1278, 1278, 1278, 0, 1269,
2218  1279, 1279, 1279, 1280, 1280, 1280, 0, 1270, 1281, 1281,
2219  1281, 1271, 1282, 1282, 1282, 1283, 1283, 1283, 1272, 1284,
2220  1284, 1284, 0, 1273, 1285, 1285, 1285, 1286, 1286, 1286,
2221  1274, 1287, 1287, 1287, 0, 1275, 1288, 1288, 1288, 1276,
2222  1289, 1289, 1289, 0, 1277, 1290, 1290, 1290, 0, 1278,
2223  1291, 1291, 1291, 0, 1279, 0, 0, 1280, 1292, 1292,
2224  1292, 0, 1281, 1293, 1293, 1293, 1282, 0, 0, 1283,
2225  1294, 1294, 1294, 1284, 1295, 1295, 1295, 0, 1285, 0,
2226  0, 1286, 1296, 1296, 1296, 1287, 1297, 1297, 1297, 0,
2227 
2228  1288, 1298, 1298, 1298, 1289, 1299, 1299, 1299, 0, 1290,
2229  1300, 1300, 1300, 0, 1291, 1301, 1301, 1301, 1302, 1302,
2230  1302, 0, 1292, 1303, 1303, 1303, 0, 1293, 1304, 1304,
2231  1304, 1305, 1305, 1305, 1294, 1306, 1306, 1306, 1295, 1307,
2232  1307, 1307, 1308, 1308, 1308, 0, 1296, 1309, 1309, 1309,
2233  1297, 1310, 1310, 1310, 0, 1298, 1311, 1311, 1311, 1299,
2234  1312, 1312, 1312, 0, 1300, 1313, 1313, 1313, 0, 1301,
2235  0, 0, 1302, 1314, 1314, 1314, 0, 1303, 0, 0,
2236  0, 0, 1304, 0, 0, 1305, 0, 0, 0, 1306,
2237  0, 0, 0, 1307, 0, 0, 1308, 0, 0, 0,
2238 
2239  0, 1309, 0, 0, 0, 1310, 0, 0, 0, 0,
2240  1311, 0, 0, 0, 1312, 0, 0, 0, 0, 1313,
2241  0, 0, 0, 0, 0, 0, 0, 1314, 1316, 1316,
2242  1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
2243  1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1317,
2244  1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
2245  1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
2246  1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
2247  1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
2248  1318, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319,
2249 
2250  1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319,
2251  1319, 1319, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
2252  1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320,
2253  1320, 1320, 1320, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
2254  1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321,
2255  1321, 1321, 1321, 1321, 1322, 1322, 1322, 1322, 1322, 1322,
2256  1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
2257  1322, 1322, 1322, 1322, 1322, 1323, 1323, 1323, 1323, 1323,
2258  1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
2259  1323, 1323, 1323, 1323, 1323, 1323, 1324, 1324, 1324, 1324,
2260 
2261  1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324,
2262  1324, 1324, 1324, 1324, 1324, 1324, 1324, 1325, 1325, 1325,
2263  1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
2264  1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1326, 1326,
2265  1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326,
2266  1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1327,
2267  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
2268  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
2269  1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
2270  1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
2271 
2272  1328, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
2273  1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329,
2274  1329, 1329, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330,
2275  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330,
2276  1330, 1330, 1330, 1331, 1331, 1331, 1331, 1331, 1331, 1331,
2277  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331,
2278  1331, 1331, 1331, 1331, 1332, 1332, 1332, 1332, 1332, 1332,
2279  1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332,
2280  1332, 1332, 1332, 1332, 1332, 1333, 1333, 1333, 1333, 1333,
2281  1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333,
2282 
2283  1333, 1333, 1333, 1333, 1333, 1333, 1334, 1334, 1334, 1334,
2284  1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
2285  1334, 1334, 1334, 1334, 1334, 1334, 1334, 1338, 1338, 1338,
2286  0, 1338, 1338, 0, 1338, 0, 1338, 1338, 1338, 1338,
2287  0, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1339, 1339,
2288  1339, 0, 1339, 1339, 1339, 1339, 0, 1339, 1339, 1339,
2289  1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1340,
2290  1340, 1340, 0, 1340, 1340, 0, 1340, 1340, 1340, 1340,
2291  1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 0, 1340,
2292  1341, 1341, 1341, 0, 1341, 1341, 1341, 1341, 1341, 1341,
2293 
2294  1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
2295  1341, 1342, 1342, 1342, 0, 1342, 1342, 1342, 1342, 1342,
2296  1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
2297  1342, 1342, 1343, 1343, 1343, 0, 0, 0, 0, 1343,
2298  0, 0, 0, 0, 1343, 0, 0, 0, 1343, 1344,
2299  1344, 1344, 0, 0, 1344, 0, 1344, 1344, 1344, 1344,
2300  1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 0, 1344,
2301  1345, 1345, 1345, 0, 1345, 1345, 1345, 1345, 1345, 1345,
2302  1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345,
2303  1345, 1346, 1346, 1346, 0, 1346, 1346, 1346, 1346, 1346,
2304 
2305  1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
2306  1346, 1346, 1347, 0, 0, 0, 0, 0, 0, 1347,
2307  0, 0, 0, 0, 1347, 0, 0, 0, 1347, 1348,
2308  1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
2309  1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 0, 1348,
2310  1349, 1349, 0, 0, 0, 0, 0, 1349, 0, 0,
2311  0, 0, 1349, 0, 0, 0, 1349, 1349, 1350, 0,
2312  0, 0, 0, 0, 0, 0, 0, 0, 1350, 0,
2313  1350, 0, 0, 0, 1350, 1352, 1352, 1352, 1352, 1352,
2314  1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
2315 
2316  1352, 1352, 1352, 1352, 1352, 1352, 1353, 0, 1353, 0,
2317  1353, 1353, 1353, 1353, 1353, 1353, 1353, 0, 1353, 0,
2318  1353, 1353, 1353, 0, 1353, 1354, 1354, 1354, 0, 1354,
2319  1354, 1354, 1354, 1354, 1354, 1354, 0, 1354, 1354, 1354,
2320  1354, 1354, 1354, 1354, 1354, 1354, 1355, 1355, 1355, 0,
2321  1355, 1355, 1355, 1355, 1355, 1355, 1355, 0, 1355, 1355,
2322  1355, 1355, 1355, 1355, 0, 1355, 1355, 1356, 1356, 1356,
2323  0, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
2324  1356, 1356, 1356, 1356, 0, 1356, 0, 1356, 1357, 1357,
2325  1357, 0, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
2326 
2327  1357, 0, 1357, 1357, 1357, 0, 1357, 0, 1357, 1358,
2328  0, 1358, 0, 1358, 1358, 1358, 1358, 1358, 1358, 1358,
2329  1358, 1358, 1358, 1358, 1358, 1358, 0, 1358, 0, 1358,
2330  1359, 0, 1359, 0, 1359, 1359, 1359, 1359, 1359, 1359,
2331  1359, 0, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
2332  1359, 1360, 0, 1360, 0, 1360, 1360, 1360, 1360, 1360,
2333  1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360,
2334  1360, 1360, 1364, 1364, 1364, 0, 1364, 1364, 1364, 1364,
2335  1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,
2336  1364, 1364, 1364, 1366, 1366, 1366, 0, 1366, 1366, 1366,
2337 
2338  1366, 0, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
2339  1366, 1366, 1366, 1366, 1367, 1367, 1367, 0, 1367, 1367,
2340  1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367,
2341  1367, 1367, 1367, 1367, 1367, 1368, 0, 0, 1368, 0,
2342  1368, 0, 1368, 1368, 0, 1368, 0, 1368, 0, 0,
2343  0, 1368, 1369, 1369, 1369, 0, 1369, 0, 1369, 1369,
2344  1369, 1369, 1369, 0, 1369, 0, 1369, 1369, 1369, 0,
2345  1369, 0, 1369, 1370, 0, 0, 1370, 1370, 1370, 0,
2346  0, 1370, 0, 1370, 1370, 1373, 1373, 1373, 0, 1373,
2347  1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373, 1373,
2348 
2349  1373, 1373, 1373, 1373, 1373, 1373, 1374, 1374, 1374, 0,
2350  1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374,
2351  1374, 1374, 1374, 1374, 1374, 1374, 1374, 1376, 1376, 1376,
2352  0, 1376, 1376, 0, 1376, 0, 1376, 1376, 1376, 1376,
2353  0, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1377, 1377,
2354  1377, 0, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377,
2355  1377, 1377, 1377, 1377, 1377, 1377, 1377, 0, 1377, 1378,
2356  1378, 1378, 0, 1378, 1378, 1378, 1378, 1378, 1378, 1378,
2357  1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378,
2358  1379, 1379, 1379, 0, 1379, 1379, 0, 1379, 1379, 1379,
2359 
2360  1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 0,
2361  1379, 1380, 1380, 1380, 0, 1380, 1380, 1380, 1380, 1380,
2362  1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380,
2363  1380, 1380, 1381, 1381, 1381, 0, 1381, 1381, 1381, 1381,
2364  1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381,
2365  1381, 1381, 1381, 1382, 1382, 1382, 0, 1382, 1382, 1382,
2366  1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
2367  1382, 1382, 1382, 1382, 1383, 1383, 1383, 0, 0, 0,
2368  0, 1383, 0, 0, 0, 0, 1383, 0, 0, 0,
2369  1383, 1384, 1384, 1384, 0, 0, 1384, 0, 1384, 1384,
2370 
2371  1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384,
2372  0, 1384, 1385, 1385, 1385, 0, 1385, 1385, 1385, 1385,
2373  1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385,
2374  1385, 1385, 1385, 1386, 0, 0, 0, 0, 0, 0,
2375  1386, 0, 0, 0, 0, 1386, 0, 0, 0, 1386,
2376  1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
2377  1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 0,
2378  1387, 1388, 1388, 0, 0, 0, 0, 0, 1388, 0,
2379  0, 0, 0, 1388, 0, 0, 0, 1388, 1388, 1389,
2380  0, 0, 0, 0, 0, 0, 0, 0, 0, 1389,
2381 
2382  0, 1389, 0, 0, 0, 1389, 1391, 1391, 1391, 1391,
2383  1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391,
2384  1391, 1391, 1391, 1391, 1391, 1391, 1391, 1392, 0, 1392,
2385  0, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 0, 1392,
2386  0, 1392, 1392, 1392, 0, 1392, 1393, 1393, 1393, 0,
2387  1393, 1393, 1393, 1393, 1393, 1393, 1393, 0, 1393, 1393,
2388  1393, 1393, 1393, 1393, 1393, 1393, 1393, 1394, 1394, 1394,
2389  0, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 0, 1394,
2390  1394, 1394, 1394, 1394, 1394, 0, 1394, 1394, 1395, 1395,
2391  1395, 0, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
2392 
2393  1395, 1395, 1395, 1395, 1395, 0, 1395, 0, 1395, 1396,
2394  1396, 1396, 0, 1396, 1396, 1396, 1396, 1396, 1396, 1396,
2395  1396, 1396, 0, 1396, 1396, 1396, 0, 1396, 0, 1396,
2396  1397, 0, 1397, 0, 1397, 1397, 1397, 1397, 1397, 1397,
2397  1397, 1397, 1397, 1397, 1397, 1397, 1397, 0, 1397, 0,
2398  1397, 1398, 0, 1398, 0, 1398, 1398, 1398, 1398, 1398,
2399  1398, 1398, 0, 1398, 1398, 1398, 1398, 1398, 1398, 1398,
2400  1398, 1398, 1399, 0, 1399, 0, 1399, 1399, 1399, 1399,
2401  1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399,
2402  1399, 1399, 1399, 1404, 1404, 1404, 0, 1404, 1404, 1404,
2403 
2404  1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404,
2405  1404, 1404, 0, 1404, 1405, 1405, 1405, 0, 1405, 1405,
2406  1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405,
2407  1405, 1405, 1405, 1405, 1405, 1406, 0, 0, 1406, 0,
2408  1406, 0, 1406, 1406, 0, 1406, 0, 1406, 0, 0,
2409  0, 1406, 1407, 1407, 1407, 0, 1407, 0, 1407, 1407,
2410  1407, 1407, 1407, 0, 1407, 0, 1407, 1407, 1407, 0,
2411  1407, 0, 1407, 1408, 1408, 1408, 0, 1408, 1408, 1408,
2412  1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
2413  1408, 1408, 1408, 1408, 1409, 1409, 1409, 0, 1409, 1409,
2414 
2415  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
2416  1409, 1409, 1409, 1409, 1409, 1411, 1411, 1411, 0, 1411,
2417  1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
2418  1411, 1411, 1411, 1411, 1411, 1411, 1412, 1412, 1412, 0,
2419  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
2420  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1414, 1414, 1414,
2421  0, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
2422  1414, 1414, 1414, 1414, 1414, 1414, 0, 1414, 1415, 1415,
2423  1415, 0, 1415, 1415, 0, 1415, 0, 1415, 1415, 1415,
2424  1415, 0, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1416,
2425 
2426  1416, 1416, 0, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
2427  1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
2428  1417, 1417, 1417, 0, 1417, 1417, 1417, 1417, 1417, 1417,
2429  1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417,
2430  1417, 1418, 1418, 1418, 0, 1418, 1418, 1418, 1418, 1418,
2431  1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418,
2432  1418, 1418, 1419, 1419, 1419, 0, 1419, 1419, 1419, 1419,
2433  1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,
2434  1419, 1419, 1419, 1420, 1420, 1420, 0, 1420, 1420, 0,
2435  1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420,
2436 
2437  1420, 1420, 0, 1420, 1421, 1421, 1421, 0, 0, 0,
2438  0, 1421, 0, 0, 0, 0, 1421, 0, 0, 0,
2439  1421, 1422, 1422, 1422, 0, 0, 1422, 0, 1422, 1422,
2440  1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
2441  0, 1422, 1423, 1423, 1423, 0, 1423, 1423, 1423, 1423,
2442  1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423,
2443  1423, 1423, 1423, 1424, 1424, 1424, 1424, 1424, 1424, 1424,
2444  1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424,
2445  1424, 1424, 0, 1424, 1425, 1425, 1425, 0, 1425, 1425,
2446  1425, 1425, 1425, 1425, 1425, 0, 1425, 1425, 1425, 1425,
2447 
2448  1425, 1425, 1425, 1425, 1425, 1426, 1426, 1426, 0, 1426,
2449  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426,
2450  1426, 1426, 1426, 1426, 0, 1426, 1427, 1427, 1427, 0,
2451  1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
2452  1427, 1427, 1427, 1427, 1427, 1427, 1427, 1428, 1428, 1428,
2453  0, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428,
2454  1428, 1428, 1428, 1428, 1428, 1428, 0, 1428, 1429, 1429,
2455  1429, 0, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429,
2456  1429, 1429, 1429, 1429, 1429, 1429, 1429, 0, 1429, 1430,
2457  1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430,
2458 
2459  1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430,
2460  1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431,
2461  1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431,
2462  1431, 1432, 0, 0, 0, 1432, 0, 0, 0, 0,
2463  0, 0, 0, 0, 1432, 0, 0, 1432, 1433, 1433,
2464  1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433,
2465  1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1435,
2466  1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435,
2467  1435, 1435, 1435, 0, 1435, 1435, 1435, 0, 1435, 1435,
2468  1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436,
2469 
2470  1436, 1436, 1436, 1436, 0, 1436, 1436, 1436, 0, 1436,
2471  1436, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437,
2472  1437, 1437, 1437, 1437, 1437, 0, 1437, 1437, 1437, 0,
2473  1437, 1437, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
2474  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
2475  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
2476  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
2477  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
2478  1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
2479  1315, 1315, 1315
2480 
2481  } ;
2482 
2483 extern int preYY_flex_debug;
2484 int preYY_flex_debug = 0;
2485 
2486 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
2487 static char *yy_full_match;
2488 static int yy_lp;
2490 static int yy_full_lp;
2491 static int *yy_full_state;
2492 #define YY_TRAILING_MASK 0x2000
2493 #define YY_TRAILING_HEAD_MASK 0x4000
2494 #define REJECT \
2495 { \
2496 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ \
2497 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
2498 (yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
2499 (yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
2500 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
2501 ++(yy_lp); \
2502 goto find_rule; \
2503 }
2504 
2505 #define yymore() yymore_used_but_not_detected
2506 #define YY_MORE_ADJ 0
2507 #define YY_RESTORE_YY_MORE_OFFSET
2509 #line 1 "pre.l"
2510 /******************************************************************************
2511  *
2512  *
2513  *
2514  * Copyright (C) 1997-2015 by Dimitri van Heesch.
2515  *
2516  * Permission to use, copy, modify, and distribute this software and its
2517  * documentation under the terms of the GNU General Public License is hereby
2518  * granted. No representations are made about the suitability of this software
2519  * for any purpose. It is provided "as is" without express or implied warranty.
2520  * See the GNU General Public License for more details.
2521  *
2522  * Documents produced by Doxygen are derivative works derived from the
2523  * input used in their production; they are not affected by this license.
2524  *
2525  */
2526 #line 19 "pre.l"
2527 
2528 /*
2529  * includes
2530  */
2531 
2532 #include <stdio.h>
2533 #include <assert.h>
2534 #include <ctype.h>
2535 #include <errno.h>
2536 
2537 #include <qarray.h>
2538 #include <qstack.h>
2539 #include <qfile.h>
2540 #include <qstrlist.h>
2541 #include <qdict.h>
2542 #include <qregexp.h>
2543 #include <qfileinfo.h>
2544 #include <qdir.h>
2545 
2546 #include "pre.h"
2547 #include "constexp.h"
2548 #include "define.h"
2549 #include "doxygen.h"
2550 #include "message.h"
2551 #include "util.h"
2552 #include "defargs.h"
2553 #include "debug.h"
2554 #include "bufstr.h"
2555 #include "portable.h"
2556 #include "bufstr.h"
2557 #include "arguments.h"
2558 #include "entry.h"
2559 #include "condparser.h"
2560 #include "config.h"
2561 #include "filedef.h"
2562 #include "memberdef.h"
2563 #include "membername.h"
2564 
2565 #define YY_NO_UNISTD_H 1
2566 
2567 // Toggle for some debugging info
2568 //#define DBG_CTX(x) fprintf x
2569 #define DBG_CTX(x) do { } while(0)
2570 
2571 struct CondCtx
2572 {
2573  CondCtx(int line,QCString id,bool b)
2574  : lineNr(line),sectionId(id), skip(b) {}
2575  int lineNr;
2576  QCString sectionId;
2577  bool skip;
2578 };
2579 
2581 {
2582  FileState(int size) : lineNr(1), fileBuf(size),
2583  oldFileBuf(0), oldFileBufPos(0), bufState(0) {}
2584  int lineNr;
2588  YY_BUFFER_STATE bufState;
2590 };
2591 
2592 /** @brief Singleton that manages the defines available while
2593  * proprocessing files.
2594  */
2596 {
2597  /** Local class used to hold the defines for a single file */
2599  {
2600  public:
2601  /** Creates an empty container for defines */
2602  DefinesPerFile() : m_defines(257), m_includedFiles(17)
2603  {
2604  m_defines.setAutoDelete(TRUE);
2605  }
2606  /** Destroys the object */
2608  {
2609  }
2610  /** Adds a define in the context of a file. Will replace
2611  * an existing define with the same name (redefinition)
2612  * @param def The Define object to add.
2613  */
2614  void addDefine(Define *def)
2615  {
2616  Define *d = m_defines.find(def->name);
2617  if (d!=0) // redefine
2618  {
2619  m_defines.remove(d->name);
2620  }
2621  m_defines.insert(def->name,def);
2622  }
2623  /** Adds an include file for this file
2624  * @param fileName The name of the include file
2625  */
2626  void addInclude(const char *fileName)
2627  {
2628  m_includedFiles.insert(fileName,(void*)0x8);
2629  }
2630  void collectDefines(DefineDict *dict,QDict<void> &includeStack);
2631  private:
2633  QDict<void> m_includedFiles;
2634  };
2635 
2636  public:
2637  friend class DefinesPerFile;
2638  /** Returns a reference to the singleton */
2640  {
2641  if (theInstance==0) theInstance = new DefineManager;
2642  return *theInstance;
2643  }
2644  /** Deletes the singleton */
2645  static void deleteInstance()
2646  {
2647  delete theInstance;
2648  theInstance = 0;
2649  }
2650  /** Starts a context in which defines are collected.
2651  * Called at the start of a new file that is preprocessed.
2652  * @param fileName the name of the file to process.
2653  */
2654  void startContext(const char *fileName)
2655  {
2656  //printf("DefineManager::startContext()\n");
2657  m_contextDefines.clear();
2658  if (fileName==0) return;
2659  DefinesPerFile *dpf = m_fileMap.find(fileName);
2660  if (dpf==0)
2661  {
2662  //printf("New file!\n");
2663  dpf = new DefinesPerFile;
2664  m_fileMap.insert(fileName,dpf);
2665  }
2666  }
2667  /** Ends the context started with startContext() freeing any
2668  * defines collected within in this context.
2669  */
2670  void endContext()
2671  {
2672  //printf("DefineManager::endContext()\n");
2673  m_contextDefines.clear();
2674  }
2675  /** Add an included file to the current context.
2676  * If the file has been pre-processed already, all defines are added
2677  * to the context.
2678  * @param fileName The name of the include file to add to the context.
2679  */
2680  void addFileToContext(const char *fileName)
2681  {
2682  if (fileName==0) return;
2683  //printf("DefineManager::addFileToContext(%s)\n",fileName);
2684  DefinesPerFile *dpf = m_fileMap.find(fileName);
2685  if (dpf==0)
2686  {
2687  //printf("New file!\n");
2688  dpf = new DefinesPerFile;
2689  m_fileMap.insert(fileName,dpf);
2690  }
2691  else
2692  {
2693  //printf("existing file!\n");
2694  QDict<void> includeStack(17);
2695  dpf->collectDefines(&m_contextDefines,includeStack);
2696  }
2697  }
2698 
2699  /** Add a define to the manager object.
2700  * @param fileName The file in which the define was found
2701  * @param def The Define object to add.
2702  */
2703  void addDefine(const char *fileName,Define *def)
2704  {
2705  if (fileName==0) return;
2706  //printf("DefineManager::addDefine(%s,%s)\n",fileName,def->name.data());
2707  Define *d = m_contextDefines.find(def->name);
2708  if (d!=0) // redefine
2709  {
2710  m_contextDefines.remove(d->name);
2711  }
2712  m_contextDefines.insert(def->name,def);
2713 
2714  DefinesPerFile *dpf = m_fileMap.find(fileName);
2715  if (dpf==0)
2716  {
2717  dpf = new DefinesPerFile;
2718  m_fileMap.insert(fileName,dpf);
2719  }
2720  dpf->addDefine(def);
2721  }
2722 
2723  /** Add an include relation to the manager object.
2724  * @param fromFileName file name in which the include was found.
2725  * @param toFileName file name that is included.
2726  */
2727  void addInclude(const char *fromFileName,const char *toFileName)
2728  {
2729  //printf("DefineManager::addInclude(%s,%s)\n",fromFileName,toFileName);
2730  if (fromFileName==0 || toFileName==0) return;
2731  DefinesPerFile *dpf = m_fileMap.find(fromFileName);
2732  if (dpf==0)
2733  {
2734  dpf = new DefinesPerFile;
2735  m_fileMap.insert(fromFileName,dpf);
2736  }
2737  dpf->addInclude(toFileName);
2738  }
2739  /** Returns a Define object given its name or 0 if the Define does
2740  * not exist.
2741  */
2742  Define *isDefined(const char *name) const
2743  {
2744  Define *d = m_contextDefines.find(name);
2745  if (d && d->undef) d=0;
2746  //printf("isDefined(%s)=%p\n",name,d);
2747  return d;
2748  }
2749  /** Returns a reference to the defines found in the current context. */
2750  const DefineDict &defineContext() const
2751  {
2752  return m_contextDefines;
2753  }
2754  private:
2756 
2757  /** Helper function to collect all define for a given file */
2759  {
2760  if (fileName==0) return;
2761  DefinesPerFile *dpf = m_fileMap.find(fileName);
2762  if (dpf)
2763  {
2764  QDict<void> includeStack(17);
2765  dpf->collectDefines(dict,includeStack);
2766  }
2767  }
2768 
2769  /** Helper function to return the DefinesPerFile object for a given file name. */
2770  DefinesPerFile *find(const char *fileName) const
2771  {
2772  if (fileName==0) return 0;
2773  return m_fileMap.find(fileName);
2774  }
2775 
2776  /** Creates a new DefineManager object */
2777  DefineManager() : m_fileMap(1009), m_contextDefines(1009)
2778  {
2779  m_fileMap.setAutoDelete(TRUE);
2780  }
2781 
2782  /** Destroys the object */
2783  virtual ~DefineManager()
2784  {
2785  }
2786 
2787  QDict<DefinesPerFile> m_fileMap;
2789 };
2790 
2791 /** Singleton instance */
2793 
2794 /** Collects all defines for a file and all files that the file includes.
2795  * This function will recursively call itself for each file.
2796  * @param dict The dictionary to fill with the defines. A redefine will
2797  * replace a previous definition.
2798  * @param includeStack The stack of includes, used to stop recursion in
2799  * case there is a cyclic include dependency.
2800  */
2802  DefineDict *dict,QDict<void> &includeStack)
2803 {
2804  //printf("DefinesPerFile::collectDefines #defines=%d\n",m_defines.count());
2805  {
2806  QDictIterator<void> di(m_includedFiles);
2807  for (di.toFirst();(di.current());++di)
2808  {
2809  QCString incFile = di.currentKey();
2810  DefinesPerFile *dpf = DefineManager::instance().find(incFile);
2811  if (dpf && includeStack.find(incFile)==0)
2812  {
2813  //printf(" processing include %s\n",incFile.data());
2814  includeStack.insert(incFile,(void*)0x8);
2815  dpf->collectDefines(dict,includeStack);
2816  }
2817  }
2818  }
2819  {
2820  QDictIterator<Define> di(m_defines);
2821  Define *def;
2822  for (di.toFirst();(def=di.current());++di)
2823  {
2824  Define *d = dict->find(def->name);
2825  if (d!=0) // redefine
2826  {
2827  dict->remove(d->name);
2828  }
2829  dict->insert(def->name,def);
2830  //printf(" adding define %s\n",def->name.data());
2831  }
2832  }
2833 }
2834 
2835 /* -----------------------------------------------------------------
2836  *
2837  * scanner's state
2838  */
2839 
2840 static int g_yyLineNr = 1;
2841 static int g_yyMLines = 1;
2842 static int g_yyColNr = 1;
2846 static int g_ifcount = 0;
2847 static QStrList *g_pathList = 0;
2849 static QDict<int> *g_argDict;
2850 static int g_defArgs = -1;
2856 static bool g_defVarArgs;
2857 static int g_level;
2858 static int g_lastCContext;
2859 static int g_lastCPPContext;
2862 static int g_inputBufPos;
2864 static int g_roundCount;
2865 static bool g_quoteArg;
2868 static bool g_expectGuard;
2873 static int g_curlyCount;
2874 static bool g_nospaces; // add extra spaces during macro expansion
2875 
2876 static bool g_macroExpansion; // from the configuration
2877 static bool g_expandOnlyPredef; // from the configuration
2878 static int g_commentCount;
2879 static bool g_insideComment;
2880 static bool g_isImported;
2882 static int g_condCtx;
2883 static bool g_skip;
2885 static bool g_insideCS; // C# has simpler preprocessor
2886 static bool g_isSource;
2887 
2888 static bool g_lexInit = FALSE;
2889 static int g_fenceSize = 0;
2890 static bool g_ccomment;
2891 
2892 //DefineDict* getGlobalDefineDict()
2893 //{
2894 // return g_globalDefineDict;
2895 //}
2896 
2897 static void setFileName(const char *name)
2898 {
2899  bool ambig;
2900  QFileInfo fi(name);
2901  g_yyFileName=fi.absFilePath().utf8();
2902  g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig);
2903  if (g_yyFileDef==0) // if this is not an input file check if it is an
2904  // include file
2905  {
2906  g_yyFileDef=findFileDef(Doxygen::includeNameDict,g_yyFileName,ambig);
2907  }
2908  //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n",
2909  // name,g_yyFileName.data(),g_yyFileDef);
2910  if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
2911  g_insideCS = getLanguageFromFileName(g_yyFileName)==SrcLangExt_CSharp;
2912  g_isSource = guessSection(g_yyFileName);
2913 }
2914 
2915 static void incrLevel()
2916 {
2917  g_level++;
2918  g_levelGuard.resize(g_level);
2919  g_levelGuard[g_level-1]=FALSE;
2920  //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
2921 }
2922 
2923 static void decrLevel()
2924 {
2925  //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
2926  if (g_level > 0)
2927  {
2928  g_level--;
2929  g_levelGuard.resize(g_level);
2930  }
2931  else
2932  {
2933  warn(g_yyFileName,g_yyLineNr,"More #endif's than #if's found.\n");
2934  }
2935 }
2936 
2937 static bool otherCaseDone()
2938 {
2939  if (g_level==0)
2940  {
2941  warn(g_yyFileName,g_yyLineNr,"Found an #else without a preceding #if.\n");
2942  return TRUE;
2943  }
2944  else
2945  {
2946  return g_levelGuard[g_level-1];
2947  }
2948 }
2949 
2950 static void setCaseDone(bool value)
2951 {
2952  g_levelGuard[g_level-1]=value;
2953 }
2954 
2955 static QDict<void> g_allIncludes(10009);
2956 
2957 static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded)
2958 {
2959  alreadyIncluded = FALSE;
2960  FileState *fs = 0;
2961  //printf("checkAndOpenFile(%s)\n",fileName.data());
2962  QFileInfo fi(fileName);
2963  if (fi.exists() && fi.isFile())
2964  {
2965  static QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS");
2966  if (patternMatch(fi,&exclPatterns)) return 0;
2967 
2968  QCString absName = fi.absFilePath().utf8();
2969 
2970  // global guard
2971  if (g_curlyCount==0) // not #include inside { ... }
2972  {
2973  if (g_allIncludes.find(absName)!=0)
2974  {
2975  alreadyIncluded = TRUE;
2976  //printf(" already included 1\n");
2977  return 0; // already done
2978  }
2979  g_allIncludes.insert(absName,(void *)0x8);
2980  }
2981  // check include stack for absName
2982 
2983  QStack<FileState> tmpStack;
2984  g_includeStack.setAutoDelete(FALSE);
2985  while ((fs=g_includeStack.pop()))
2986  {
2987  if (fs->fileName==absName) alreadyIncluded=TRUE;
2988  tmpStack.push(fs);
2989  }
2990  while ((fs=tmpStack.pop()))
2991  {
2992  g_includeStack.push(fs);
2993  }
2994  g_includeStack.setAutoDelete(TRUE);
2995 
2996  if (alreadyIncluded)
2997  {
2998  //printf(" already included 2\n");
2999  return 0;
3000  }
3001  //printf("#include %s\n",absName.data());
3002 
3003  fs = new FileState(fi.size()+4096);
3004  alreadyIncluded = FALSE;
3005  if (!readInputFile(absName,fs->fileBuf))
3006  { // error
3007  //printf(" error reading\n");
3008  delete fs;
3009  fs=0;
3010  }
3011  else
3012  {
3013  fs->oldFileBuf = g_inputBuf;
3015  }
3016  }
3017  return fs;
3018 }
3019 
3020 static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyIncluded)
3021 {
3022  //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data());
3023  if (portable_isAbsolutePath(fileName))
3024  {
3025  FileState *fs = checkAndOpenFile(fileName,alreadyIncluded);
3026  if (fs)
3027  {
3028  setFileName(fileName);
3029  g_yyLineNr=1;
3030  return fs;
3031  }
3032  else if (alreadyIncluded)
3033  {
3034  return 0;
3035  }
3036  }
3037  if (localInclude && !g_yyFileName.isEmpty())
3038  {
3039  QFileInfo fi(g_yyFileName);
3040  if (fi.exists())
3041  {
3042  QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+fileName;
3043  FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
3044  if (fs)
3045  {
3046  setFileName(absName);
3047  g_yyLineNr=1;
3048  return fs;
3049  }
3050  else if (alreadyIncluded)
3051  {
3052  return 0;
3053  }
3054  }
3055  }
3056  if (g_pathList==0)
3057  {
3058  return 0;
3059  }
3060  char *s=g_pathList->first();
3061  while (s)
3062  {
3063  QCString absName = (QCString)s+"/"+fileName;
3064  //printf(" Looking for %s in %s\n",fileName,s);
3065  FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
3066  if (fs)
3067  {
3068  setFileName(absName);
3069  g_yyLineNr=1;
3070  //printf(" -> found it\n");
3071  return fs;
3072  }
3073  else if (alreadyIncluded)
3074  {
3075  return 0;
3076  }
3077 
3078  s=g_pathList->next();
3079  }
3080  return 0;
3081 }
3082 
3083 static QCString extractTrailingComment(const char *s)
3084 {
3085  if (s==0) return "";
3086  int i=strlen(s)-1;
3087  while (i>=0)
3088  {
3089  char c=s[i];
3090  switch (c)
3091  {
3092  case '/':
3093  {
3094  i--;
3095  if (i>=0 && s[i]=='*') // end of a comment block
3096  {
3097  i--;
3098  while (i>0 && !(s[i-1]=='/' && s[i]=='*')) i--;
3099  if (i==0)
3100  {
3101  i++;
3102  }
3103  // only /*!< or /**< are treated as a comment for the macro name,
3104  // otherwise the comment is treated as part of the macro definition
3105  return ((s[i+1]=='*' || s[i+1]=='!') && s[i+2]=='<') ? &s[i-1] : "";
3106  }
3107  else
3108  {
3109  return "";
3110  }
3111  }
3112  break;
3113  // whitespace or line-continuation
3114  case ' ':
3115  case '\t':
3116  case '\r':
3117  case '\n':
3118  case '\\':
3119  break;
3120  default:
3121  return "";
3122  }
3123  i--;
3124  }
3125  return "";
3126 }
3127 
3128 static int getNextChar(const QCString &expr,QCString *rest,uint &pos);
3129 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos);
3130 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c);
3131 static void expandExpression(QCString &expr,QCString *rest,int pos);
3132 
3134 {
3135  QCString result;
3136  uint i=0;
3137  bool inString=FALSE;
3138  bool inChar=FALSE;
3139  char c,pc;
3140  while (i<s.length())
3141  {
3142  if (!inString && !inChar)
3143  {
3144  while (i<s.length() && !inString && !inChar)
3145  {
3146  c=s.at(i++);
3147  if (c=='"')
3148  {
3149  result+="\\\"";
3150  inString=TRUE;
3151  }
3152  else if (c=='\'')
3153  {
3154  result+=c;
3155  inChar=TRUE;
3156  }
3157  else
3158  {
3159  result+=c;
3160  }
3161  }
3162  }
3163  else if (inChar)
3164  {
3165  while (i<s.length() && inChar)
3166  {
3167  c=s.at(i++);
3168  if (c=='\'')
3169  {
3170  result+='\'';
3171  inChar=FALSE;
3172  }
3173  else if (c=='\\')
3174  {
3175  result+="\\\\";
3176  }
3177  else
3178  {
3179  result+=c;
3180  }
3181  }
3182  }
3183  else
3184  {
3185  pc=0;
3186  while (i<s.length() && inString)
3187  {
3188  char c=s.at(i++);
3189  if (c=='"')
3190  {
3191  result+="\\\"";
3192  inString= pc=='\\';
3193  }
3194  else if (c=='\\')
3195  result+="\\\\";
3196  else
3197  result+=c;
3198  pc=c;
3199  }
3200  }
3201  }
3202  //printf("stringize `%s'->`%s'\n",s.data(),result.data());
3203  return result;
3204 }
3205 
3206 /*! Execute all ## operators in expr.
3207  * If the macro name before or after the operator contains a no-rescan
3208  * marker (@-) then this is removed (before the concatenated macro name
3209  * may be expanded again.
3210  */
3212 {
3213  //printf("processConcatOperators: in=`%s'\n",expr.data());
3214  QRegExp r("[ \\t\\n]*##[ \\t\\n]*");
3215  int l,n,i=0;
3216  if (expr.isEmpty()) return;
3217  while ((n=r.match(expr,i,&l))!=-1)
3218  {
3219  //printf("Match: `%s'\n",expr.data()+i);
3220  if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-')
3221  {
3222  // remove no-rescan marker after ID
3223  l+=2;
3224  }
3225  //printf("found `%s'\n",expr.mid(n,l).data());
3226  // remove the ## operator and the surrounding whitespace
3227  expr=expr.left(n)+expr.right(expr.length()-n-l);
3228  int k=n-1;
3229  while (k>=0 && isId(expr.at(k))) k--;
3230  if (k>0 && expr.at(k)=='-' && expr.at(k-1)=='@')
3231  {
3232  // remove no-rescan marker before ID
3233  expr=expr.left(k-1)+expr.right(expr.length()-k-1);
3234  n-=2;
3235  }
3236  i=n;
3237  }
3238  //printf("processConcatOperators: out=`%s'\n",expr.data());
3239 }
3240 
3241 static void yyunput (int c,char *buf_ptr );
3242 static void returnCharToStream(char c)
3243 {
3244  unput(c);
3245 }
3246 
3247 static inline void addTillEndOfString(const QCString &expr,QCString *rest,
3248  uint &pos,char term,QCString &arg)
3249 {
3250  int cc;
3251  while ((cc=getNextChar(expr,rest,pos))!=EOF && cc!=0)
3252  {
3253  if (cc=='\\') arg+=(char)cc,cc=getNextChar(expr,rest,pos);
3254  else if (cc==term) return;
3255  arg+=(char)cc;
3256  }
3257 }
3258 
3259 /*! replaces the function macro \a def whose argument list starts at
3260  * \a pos in expression \a expr.
3261  * Notice that this routine may scan beyond the \a expr string if needed.
3262  * In that case the characters will be read from the input file.
3263  * The replacement string will be returned in \a result and the
3264  * length of the (unexpanded) argument list is stored in \a len.
3265  */
3266 static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result)
3267 {
3268  //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level);
3269  uint j=pos;
3270  len=0;
3271  result.resize(0);
3272  int cc;
3273  while ((cc=getCurrentChar(expr,rest,j))!=EOF && isspace(cc))
3274  {
3275  len++;
3276  getNextChar(expr,rest,j);
3277  }
3278  if (cc!='(')
3279  {
3280  unputChar(expr,rest,j,' ');
3281  return FALSE;
3282  }
3283  getNextChar(expr,rest,j); // eat the `(' character
3284 
3285  QDict<QCString> argTable; // list of arguments
3286  argTable.setAutoDelete(TRUE);
3287  QCString arg;
3288  int argCount=0;
3289  bool done=FALSE;
3290 
3291  // PHASE 1: read the macro arguments
3292  if (def->nargs==0)
3293  {
3294  while ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
3295  {
3296  char c = (char)cc;
3297  if (c==')') break;
3298  }
3299  }
3300  else
3301  {
3302  while (!done && (argCount<def->nargs || def->varArgs) &&
3303  ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
3304  )
3305  {
3306  char c=(char)cc;
3307  if (c=='(') // argument is a function => search for matching )
3308  {
3309  int level=1;
3310  arg+=c;
3311  //char term='\0';
3312  while ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
3313  {
3314  char c=(char)cc;
3315  //printf("processing %c: term=%c (%d)\n",c,term,term);
3316  if (c=='\'' || c=='\"') // skip ('s and )'s inside strings
3317  {
3318  arg+=c;
3319  addTillEndOfString(expr,rest,j,c,arg);
3320  }
3321  if (c==')')
3322  {
3323  level--;
3324  arg+=c;
3325  if (level==0) break;
3326  }
3327  else if (c=='(')
3328  {
3329  level++;
3330  arg+=c;
3331  }
3332  else
3333  arg+=c;
3334  }
3335  }
3336  else if (c==')' || c==',') // last or next argument found
3337  {
3338  if (c==',' && argCount==def->nargs-1 && def->varArgs)
3339  {
3340  arg=arg.stripWhiteSpace();
3341  arg+=',';
3342  }
3343  else
3344  {
3345  QCString argKey;
3346  argKey.sprintf("@%d",argCount++); // key name
3347  arg=arg.stripWhiteSpace();
3348  // add argument to the lookup table
3349  argTable.insert(argKey, new QCString(arg));
3350  arg.resize(0);
3351  if (c==')') // end of the argument list
3352  {
3353  done=TRUE;
3354  }
3355  }
3356  }
3357  else if (c=='\"') // append literal strings
3358  {
3359  arg+=c;
3360  bool found=FALSE;
3361  while (!found && (cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
3362  {
3363  found = cc=='"';
3364  if (cc=='\\')
3365  {
3366  c=(char)cc;
3367  arg+=c;
3368  if ((cc=getNextChar(expr,rest,j))==EOF || cc==0) break;
3369  }
3370  c=(char)cc;
3371  arg+=c;
3372  }
3373  }
3374  else if (c=='\'') // append literal characters
3375  {
3376  arg+=c;
3377  bool found=FALSE;
3378  while (!found && (cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
3379  {
3380  found = cc=='\'';
3381  if (cc=='\\')
3382  {
3383  c=(char)cc;
3384  arg+=c;
3385  if ((cc=getNextChar(expr,rest,j))==EOF || cc==0) break;
3386  }
3387  c=(char)cc;
3388  arg+=c;
3389  }
3390  }
3391  else // append other characters
3392  {
3393  arg+=c;
3394  }
3395  }
3396  }
3397 
3398  // PHASE 2: apply the macro function
3399  if (argCount==def->nargs || // same number of arguments
3400  (argCount>=def->nargs-1 && def->varArgs)) // variadic macro with at least as many
3401  // params as the non-variadic part (see bug731985)
3402  {
3403  uint k=0;
3404  // substitution of all formal arguments
3405  QCString resExpr;
3406  const QCString d=def->definition.stripWhiteSpace();
3407  //printf("Macro definition: %s\n",d.data());
3408  bool inString=FALSE;
3409  while (k<d.length())
3410  {
3411  if (d.at(k)=='@') // maybe a marker, otherwise an escaped @
3412  {
3413  if (d.at(k+1)=='@') // escaped @ => copy it (is unescaped later)
3414  {
3415  k+=2;
3416  resExpr+="@@"; // we unescape these later
3417  }
3418  else if (d.at(k+1)=='-') // no-rescan marker
3419  {
3420  k+=2;
3421  resExpr+="@-";
3422  }
3423  else // argument marker => read the argument number
3424  {
3425  QCString key="@";
3426  QCString *subst=0;
3427  bool hash=FALSE;
3428  int l=k-1;
3429  // search for ## backward
3430  if (l>=0 && d.at(l)=='"') l--;
3431  while (l>=0 && d.at(l)==' ') l--;
3432  if (l>0 && d.at(l)=='#' && d.at(l-1)=='#') hash=TRUE;
3433  k++;
3434  // scan the number
3435  while (k<d.length() && d.at(k)>='0' && d.at(k)<='9') key+=d.at(k++);
3436  if (!hash)
3437  {
3438  // search for ## forward
3439  l=k;
3440  if (l<(int)d.length() && d.at(l)=='"') l++;
3441  while (l<(int)d.length() && d.at(l)==' ') l++;
3442  if (l<(int)d.length()-1 && d.at(l)=='#' && d.at(l+1)=='#') hash=TRUE;
3443  }
3444  //printf("request key %s result %s\n",key.data(),argTable[key]->data());
3445  if (key.length()>1 && (subst=argTable[key]))
3446  {
3447  QCString substArg=*subst;
3448  //printf("substArg=`%s'\n",substArg.data());
3449  // only if no ## operator is before or after the argument
3450  // marker we do macro expansion.
3451  if (!hash) expandExpression(substArg,0,0);
3452  if (inString)
3453  {
3454  //printf("`%s'=stringize(`%s')\n",stringize(*subst).data(),subst->data());
3455 
3456  // if the marker is inside a string (because a # was put
3457  // before the macro name) we must escape " and \ characters
3458  resExpr+=stringize(substArg);
3459  }
3460  else
3461  {
3462  if (hash && substArg.isEmpty())
3463  {
3464  resExpr+="@E"; // empty argument will be remove later on
3465  }
3466  else if (g_nospaces)
3467  {
3468  resExpr+=substArg;
3469  }
3470  else
3471  {
3472  resExpr+=" "+substArg+" ";
3473  }
3474  }
3475  }
3476  }
3477  }
3478  else // no marker, just copy
3479  {
3480  if (!inString && d.at(k)=='\"')
3481  {
3482  inString=TRUE; // entering a literal string
3483  }
3484  else if (inString && d.at(k)=='\"' && (d.at(k-1)!='\\' || d.at(k-2)=='\\'))
3485  {
3486  inString=FALSE; // leaving a literal string
3487  }
3488  resExpr+=d.at(k++);
3489  }
3490  }
3491  len=j-pos;
3492  result=resExpr;
3493  //printf("result after substitution `%s' expr=`%s'\n",
3494  // result.data(),expr.mid(pos,len).data());
3495  return TRUE;
3496  }
3497  return FALSE;
3498 }
3499 
3500 
3501 /*! returns the next identifier in string \a expr by starting at position \a p.
3502  * The position of the identifier is returned (or -1 if nothing is found)
3503  * and \a l is its length. Any quoted strings are skipping during the search.
3504  */
3505 static int getNextId(const QCString &expr,int p,int *l)
3506 {
3507  int n;
3508  while (p<(int)expr.length())
3509  {
3510  char c=expr.at(p++);
3511  if (isdigit(c)) // skip number
3512  {
3513  while (p<(int)expr.length() && isId(expr.at(p))) p++;
3514  }
3515  else if (isalpha(c) || c=='_') // read id
3516  {
3517  n=p-1;
3518  while (p<(int)expr.length() && isId(expr.at(p))) p++;
3519  *l=p-n;
3520  return n;
3521  }
3522  else if (c=='"') // skip string
3523  {
3524  char ppc=0,pc=c;
3525  if (p<(int)expr.length()) c=expr.at(p);
3526  while (p<(int)expr.length() && (c!='"' || (pc=='\\' && ppc!='\\')))
3527  // continue as long as no " is found, but ignoring \", but not \\"
3528  {
3529  ppc=pc;
3530  pc=c;
3531  c=expr.at(p);
3532  p++;
3533  }
3534  if (p<(int)expr.length()) ++p; // skip closing quote
3535  }
3536  else if (c=='/') // skip C Comment
3537  {
3538  //printf("Found C comment at p=%d\n",p);
3539  char pc=c;
3540  if (p<(int)expr.length())
3541  {
3542  c=expr.at(p);
3543  if (c=='*') // Start of C comment
3544  {
3545  p++;
3546  while (p<(int)expr.length() && !(pc=='*' && c=='/'))
3547  {
3548  pc=c;
3549  c=expr.at(p++);
3550  }
3551  }
3552  }
3553  //printf("Found end of C comment at p=%d\n",p);
3554  }
3555  }
3556  return -1;
3557 }
3558 
3559 /*! preforms recursive macro expansion on the string \a expr
3560  * starting at position \a pos.
3561  * May read additional characters from the input while re-scanning!
3562  * If \a expandAll is \c TRUE then all macros in the expression are
3563  * expanded, otherwise only the first is expanded.
3564  */
3565 static void expandExpression(QCString &expr,QCString *rest,int pos)
3566 {
3567  //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0);
3568  QCString macroName;
3569  QCString expMacro;
3570  bool definedTest=FALSE;
3571  int i=pos,l,p,len;
3572  while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name
3573  {
3574  bool replaced=FALSE;
3575  macroName=expr.mid(p,l);
3576  //printf("macroName=%s\n",macroName.data());
3577  if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
3578  {
3579  if (g_expandedDict->find(macroName)==0) // expand macro
3580  {
3581  Define *def=DefineManager::instance().isDefined(macroName);
3582  if (definedTest) // macro name was found after defined
3583  {
3584  if (def) expMacro = " 1 "; else expMacro = " 0 ";
3585  replaced=TRUE;
3586  len=l;
3587  definedTest=FALSE;
3588  }
3589  else if (def && def->nargs==-1) // simple macro
3590  {
3591  // substitute the definition of the macro
3592  //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
3593  if (g_nospaces)
3594  {
3595  expMacro=def->definition.stripWhiteSpace();
3596  }
3597  else
3598  {
3599  expMacro=" "+def->definition.stripWhiteSpace()+" ";
3600  }
3601  //expMacro=def->definition.stripWhiteSpace();
3602  replaced=TRUE;
3603  len=l;
3604  //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
3605  }
3606  else if (def && def->nargs>=0) // function macro
3607  {
3608  replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro);
3609  len+=l;
3610  }
3611  else if (macroName=="defined")
3612  {
3613  //printf("found defined inside macro definition '%s'\n",expr.right(expr.length()-p).data());
3614  definedTest=TRUE;
3615  }
3616 
3617  if (replaced) // expand the macro and rescan the expression
3618  {
3619 
3620  //printf("replacing `%s'->`%s'\n",expr.mid(p,len).data(),expMacro.data());
3621  QCString resultExpr=expMacro;
3622  QCString restExpr=expr.right(expr.length()-len-p);
3623  processConcatOperators(resultExpr);
3624  if (def && !def->nonRecursive)
3625  {
3626  g_expandedDict->insert(macroName,def);
3627  expandExpression(resultExpr,&restExpr,0);
3628  g_expandedDict->remove(macroName);
3629  }
3630  expr=expr.left(p)+resultExpr+restExpr;
3631  i=p;
3632  //printf("new expression: %s\n",expr.data());
3633  }
3634  else // move to the next macro name
3635  {
3636  //printf("moving to the next macro old=%d new=%d\n",i,p+l);
3637  i=p+l;
3638  }
3639  }
3640  else // move to the next macro name
3641  {
3642  expr=expr.left(p)+"@-"+expr.right(expr.length()-p);
3643  //printf("macro already expanded, moving to the next macro expr=%s\n",expr.data());
3644  i=p+l+2;
3645  //i=p+l;
3646  }
3647  }
3648  else // no re-scan marker found, skip the macro name
3649  {
3650  //printf("skipping marked macro\n");
3651  i=p+l;
3652  }
3653  }
3654 }
3655 
3656 /*! replaces all occurrences of @@@@ in \a s by @@
3657  * and removes all occurrences of @@E.
3658  * All identifiers found are replaced by 0L
3659  */
3661 {
3662  //printf("removeIdsAndMarkers(%s)\n",s);
3663  const char *p=s;
3664  char c;
3665  bool inNum=FALSE;
3666  QCString result;
3667  if (p)
3668  {
3669  while ((c=*p))
3670  {
3671  if (c=='@') // replace @@ with @ and remove @E
3672  {
3673  if (*(p+1)=='@')
3674  {
3675  result+=c;
3676  }
3677  else if (*(p+1)=='E')
3678  {
3679  // skip
3680  }
3681  p+=2;
3682  }
3683  else if (isdigit(c)) // number
3684  {
3685  result+=c;
3686  p++;
3687  inNum=TRUE;
3688  }
3689  else if (c=='d' && !inNum) // identifier starting with a `d'
3690  {
3691  if (qstrncmp(p,"defined ",8)==0 || qstrncmp(p,"defined(",8)==0)
3692  // defined keyword
3693  {
3694  p+=7; // skip defined
3695  }
3696  else
3697  {
3698  result+="0L";
3699  p++;
3700  while ((c=*p) && isId(c)) p++;
3701  }
3702  }
3703  else if ((isalpha(c) || c=='_') && !inNum) // replace identifier with 0L
3704  {
3705  result+="0L";
3706  p++;
3707  while ((c=*p) && isId(c)) p++;
3708  if (*p=='(') // undefined function macro
3709  {
3710  p++;
3711  int count=1;
3712  while ((c=*p++))
3713  {
3714  if (c=='(') count++;
3715  else if (c==')')
3716  {
3717  count--;
3718  if (count==0) break;
3719  }
3720  else if (c=='/')
3721  {
3722  char pc=c;
3723  c=*++p;
3724  if (c=='*') // start of C comment
3725  {
3726  while (*p && !(pc=='*' && c=='/')) // search end of comment
3727  {
3728  pc=c;
3729  c=*++p;
3730  }
3731  p++;
3732  }
3733  }
3734  }
3735  }
3736  }
3737  else if (c=='/') // skip C comments
3738  {
3739  char pc=c;
3740  c=*++p;
3741  if (c=='*') // start of C comment
3742  {
3743  while (*p && !(pc=='*' && c=='/')) // search end of comment
3744  {
3745  pc=c;
3746  c=*++p;
3747  }
3748  p++;
3749  }
3750  else // oops, not comment but division
3751  {
3752  result+=pc;
3753  goto nextChar;
3754  }
3755  }
3756  else
3757  {
3758 nextChar:
3759  result+=c;
3760  char lc=tolower(c);
3761  if (!isId(lc) && lc!='.' /*&& lc!='-' && lc!='+'*/) inNum=FALSE;
3762  p++;
3763  }
3764  }
3765  }
3766  //printf("removeIdsAndMarkers(%s)=%s\n",s,result.data());
3767  return result;
3768 }
3769 
3770 /*! replaces all occurrences of @@ in \a s by @
3771  * \par assumption:
3772  * \a s only contains pairs of @@'s
3773  */
3775 {
3776  const char *p=s;
3777  char c;
3778  QCString result;
3779  if (p)
3780  {
3781  while ((c=*p))
3782  {
3783  switch(c)
3784  {
3785  case '@': // replace @@ with @
3786  {
3787  if (*(p+1)=='@')
3788  {
3789  result+=c;
3790  }
3791  p+=2;
3792  }
3793  break;
3794  case '/': // skip C comments
3795  {
3796  result+=c;
3797  char pc=c;
3798  c=*++p;
3799  if (c=='*') // start of C comment
3800  {
3801  while (*p && !(pc=='*' && c=='/')) // search end of comment
3802  {
3803  if (*p=='@' && *(p+1)=='@')
3804  result+=c,p++;
3805  else
3806  result+=c;
3807  pc=c;
3808  c=*++p;
3809  }
3810  if (*p) result+=c,p++;
3811  }
3812  }
3813  break;
3814  case '"': // skip string literals
3815  {
3816  result+=c;
3817  char pc=c;
3818  c=*++p;
3819  while (*p && (c!='"' || pc=='\\')) // no end quote
3820  {
3821  result+=c;
3822  c=*++p;
3823  }
3824  if (*p) result+=c,p++;
3825  }
3826  break;
3827  case '\'': // skip char literals
3828  {
3829  result+=c;
3830  char pc=c;
3831  c=*++p;
3832  while (*p && (c!='\'' || pc=='\\')) // no end quote
3833  {
3834  result+=c;
3835  c=*++p;
3836  }
3837  if (*p) result+=c,p++;
3838  }
3839  break;
3840  default:
3841  {
3842  result+=c;
3843  p++;
3844  }
3845  break;
3846  }
3847  }
3848  }
3849  //printf("RemoveMarkers(%s)=%s\n",s,result.data());
3850  return result;
3851 }
3852 
3853 /*! compute the value of the expression in string \a expr.
3854  * If needed the function may read additional characters from the input.
3855  */
3856 
3857 bool computeExpression(const QCString &expr)
3858 {
3859  QCString e=expr;
3860  expandExpression(e,0,0);
3861  //printf("after expansion `%s'\n",e.data());
3862  e = removeIdsAndMarkers(e);
3863  if (e.isEmpty()) return FALSE;
3864  //printf("parsing `%s'\n",e.data());
3865  return parseconstexp(g_yyFileName,g_yyLineNr,e);
3866 }
3867 
3868 /*! expands the macro definition in \a name
3869  * If needed the function may read additional characters from the input
3870  */
3871 
3873 {
3874  QCString n=name;
3875  expandExpression(n,0,0);
3876  n=removeMarkers(n);
3877  //printf("expandMacro `%s'->`%s'\n",name.data(),n.data());
3878  return n;
3879 }
3880 
3882 {
3883  Define *def=new Define;
3884  def->name = g_defName;
3885  def->definition = g_defText.stripWhiteSpace();
3886  def->nargs = g_defArgs;
3887  def->fileName = g_yyFileName;
3888  def->fileDef = g_yyFileDef;
3889  def->lineNr = g_yyLineNr-g_yyMLines;
3890  def->columnNr = g_yyColNr;
3891  def->varArgs = g_defVarArgs;
3892  //printf("newDefine: %s %s file: %s\n",def->name.data(),def->definition.data(),
3893  // def->fileDef ? def->fileDef->name().data() : def->fileName.data());
3894  //printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
3895  if (!def->name.isEmpty() && Doxygen::expandAsDefinedDict[def->name])
3896  {
3897  def->isPredefined=TRUE;
3898  }
3899  return def;
3900 }
3901 
3903 {
3904  if (g_skip) return; // do not add this define as it is inside a
3905  // conditional section (cond command) that is disabled.
3906  if (!Doxygen::gatherDefines) return;
3907 
3908  //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
3909  //ArgumentList *al = new ArgumentList;
3910  //stringToArgumentList(g_defArgsStr,al);
3911  MemberDef *md=new MemberDef(
3912  g_yyFileName,g_yyLineNr-g_yyMLines,g_yyColNr,
3913  "#define",g_defName,g_defArgsStr,0,
3915  if (!g_defArgsStr.isEmpty())
3916  {
3917  ArgumentList *argList = new ArgumentList;
3918  //printf("addDefine() g_defName=`%s' g_defArgsStr=`%s'\n",g_defName.data(),g_defArgsStr.data());
3919  stringToArgumentList(g_defArgsStr,argList);
3920  md->setArgumentList(argList);
3921  }
3922  //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
3923  int l=g_defLitText.find('\n');
3924  if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\")
3925  {
3926  // strip first line if it only contains a slash
3927  g_defLitText = g_defLitText.right(g_defLitText.length()-l-1);
3928  }
3929  else if (l>0)
3930  {
3931  // align the items on the first line with the items on the second line
3932  int k=l+1;
3933  const char *p=g_defLitText.data()+k;
3934  char c;
3935  while ((c=*p++) && (c==' ' || c=='\t')) k++;
3936  g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace();
3937  }
3938  md->setInitializer(g_defLitText.stripWhiteSpace());
3939 
3940  //printf("pre.l: md->setFileDef(%p)\n",g_inputFileDef);
3941  md->setFileDef(g_inputFileDef);
3942  md->setDefinition("#define "+g_defName);
3943 
3944  MemberName *mn=Doxygen::functionNameSDict->find(g_defName);
3945  if (mn==0)
3946  {
3947  mn = new MemberName(g_defName);
3948  Doxygen::functionNameSDict->append(g_defName,mn);
3949  }
3950  mn->append(md);
3951  if (g_yyFileDef)
3952  {
3953  g_yyFileDef->insertMember(md);
3954  }
3955 
3956  //Define *d;
3957  //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine());
3958 }
3959 
3960 static inline void outputChar(char c)
3961 {
3962  if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c);
3963 }
3964 
3965 static inline void outputArray(const char *a,int len)
3966 {
3967  if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len);
3968 }
3969 
3970 static void readIncludeFile(const QCString &inc)
3971 {
3972  static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
3973  uint i=0;
3974 
3975  // find the start of the include file name
3976  while (i<inc.length() &&
3977  (inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<')
3978  ) i++;
3979  uint s=i;
3980 
3981  // was it a local include?
3982  bool localInclude = s>0 && inc.at(s-1)=='"';
3983 
3984  // find the end of the include file name
3985  while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++;
3986 
3987  if (s<inc.length() && i>s) // valid include file name found
3988  {
3989  // extract include path+name
3990  QCString incFileName=inc.mid(s,i-s).stripWhiteSpace();
3991 
3992  QCString dosExt = incFileName.right(4);
3993  if (dosExt==".exe" || dosExt==".dll" || dosExt==".tlb")
3994  {
3995  // skip imported binary files (e.g. M$ type libraries)
3996  return;
3997  }
3998 
3999  QCString oldFileName = g_yyFileName;
4000  FileDef *oldFileDef = g_yyFileDef;
4001  int oldLineNr = g_yyLineNr;
4002  //printf("Searching for `%s'\n",incFileName.data());
4003 
4004  // absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336)
4005  QCString absIncFileName = incFileName;
4006  {
4007  QFileInfo fi(g_yyFileName);
4008  if (fi.exists())
4009  {
4010  QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+incFileName;
4011  QFileInfo fi2(absName);
4012  if (fi2.exists())
4013  {
4014  absIncFileName=fi2.absFilePath().utf8();
4015  }
4016  else if (searchIncludes) // search in INCLUDE_PATH as well
4017  {
4018  QStrList &includePath = Config_getList("INCLUDE_PATH");
4019  char *s=includePath.first();
4020  while (s)
4021  {
4022  QFileInfo fi(s);
4023  if (fi.exists() && fi.isDir())
4024  {
4025  QCString absName = QCString(fi.absFilePath().utf8())+"/"+incFileName;
4026  //printf("trying absName=%s\n",absName.data());
4027  QFileInfo fi2(absName);
4028  if (fi2.exists())
4029  {
4030  absIncFileName=fi2.absFilePath().utf8();
4031  break;
4032  }
4033  //printf( "absIncFileName = %s\n", absIncFileName.data() );
4034  }
4035  s=includePath.next();
4036  }
4037  }
4038  //printf( "absIncFileName = %s\n", absIncFileName.data() );
4039  }
4040  }
4041  DefineManager::instance().addInclude(g_yyFileName,absIncFileName);
4042  DefineManager::instance().addFileToContext(absIncFileName);
4043 
4044  // findFile will overwrite g_yyFileDef if found
4045  FileState *fs;
4046  bool alreadyIncluded = FALSE;
4047  //printf("calling findFile(%s)\n",incFileName.data());
4048  if ((fs=findFile(incFileName,localInclude,alreadyIncluded))) // see if the include file can be found
4049  {
4050  //printf("Found include file!\n");
4052  {
4053  for (i=0;i<g_includeStack.count();i++)
4054  {
4056  }
4057  //msg("#include %s: parsing...\n",incFileName.data());
4058  }
4059  if (oldFileDef)
4060  {
4061  // add include dependency to the file in which the #include was found
4062  bool ambig;
4063  // change to absolute name for bug 641336
4064  FileDef *incFd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
4065  oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported,FALSE);
4066  // add included by dependency
4067  if (g_yyFileDef)
4068  {
4069  //printf("Adding include dependency %s->%s\n",oldFileDef->name().data(),incFileName.data());
4070  g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
4071  }
4072  }
4073  else if (g_inputFileDef)
4074  {
4075  g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
4076  }
4078  fs->lineNr = oldLineNr;
4079  fs->fileName = oldFileName;
4080  // push the state on the stack
4081  g_includeStack.push(fs);
4082  // set the scanner to the include file
4083 
4084  // Deal with file changes due to
4085  // #include's within { .. } blocks
4086  QCString lineStr(g_yyFileName.length()+20);
4087  lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
4088  outputArray(lineStr.data(),lineStr.length());
4089 
4090  DBG_CTX((stderr,"Switching to include file %s\n",incFileName.data()));
4091  g_expectGuard=TRUE;
4092  g_inputBuf = &fs->fileBuf;
4093  g_inputBufPos=0;
4095  }
4096  else
4097  {
4098  //printf(" calling findFile(%s) alreadyInc=%d\n",incFileName.data(),alreadyIncluded);
4099  if (oldFileDef)
4100  {
4101  bool ambig;
4102  //QCString absPath = incFileName;
4103  //if (QDir::isRelativePath(incFileName))
4104  //{
4105  // absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName);
4106  // //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data());
4107  //}
4108 
4109  // change to absolute name for bug 641336
4110  FileDef *fd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
4111  //printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd);
4112  // add include dependency to the file in which the #include was found
4113  oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported,FALSE);
4114  // add included by dependency
4115  if (fd)
4116  {
4117  //printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig);
4118  fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
4119  }
4120  }
4121  else if (g_inputFileDef)
4122  {
4123  g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
4124  }
4126  {
4127  if (alreadyIncluded)
4128  {
4129  Debug::print(Debug::Preprocessor,0,"#include %s: already included! skipping...\n",qPrint(incFileName));
4130  }
4131  else
4132  {
4133  Debug::print(Debug::Preprocessor,0,"#include %s: not found! skipping...\n",qPrint(incFileName));
4134  }
4135  //printf("error: include file %s not found\n",preYYtext);
4136  }
4137  if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
4138  {
4139  warn(g_yyFileName,g_yyLineNr,"include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
4140  }
4141  }
4142  }
4143 }
4144 
4145 /* ----------------------------------------------------------------- */
4146 
4147 static void startCondSection(const char *sectId)
4148 {
4149  //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
4150  CondParser prs;
4151  bool expResult = prs.parse(g_yyFileName,g_yyLineNr,sectId);
4152  g_condStack.push(new CondCtx(g_yyLineNr,sectId,g_skip));
4153  if (!expResult)
4154  {
4155  g_skip=TRUE;
4156  }
4157  //printf(" expResult=%d skip=%d\n",expResult,g_skip);
4158 }
4159 
4160 static void endCondSection()
4161 {
4162  if (g_condStack.isEmpty())
4163  {
4164  g_skip=FALSE;
4165  }
4166  else
4167  {
4168  CondCtx *ctx = g_condStack.pop();
4169  g_skip=ctx->skip;
4170  delete ctx;
4171  }
4172  //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
4173 }
4174 
4175 static void forceEndCondSection()
4176 {
4177  while (!g_condStack.isEmpty())
4178  {
4179  delete g_condStack.pop();
4180  }
4181  g_skip=FALSE;
4182 }
4183 
4184 static QCString escapeAt(const char *text)
4185 {
4186  QCString result;
4187  if (text)
4188  {
4189  char c;
4190  const char *p=text;
4191  while ((c=*p++))
4192  {
4193  if (c=='@') result+="@@"; else result+=c;
4194  }
4195  }
4196  return result;
4197 }
4198 
4199 static char resolveTrigraph(char c)
4200 {
4201  switch (c)
4202  {
4203  case '=': return '#';
4204  case '/': return '\\';
4205  case '\'': return '^';
4206  case '(': return '[';
4207  case ')': return ']';
4208  case '!': return '|';
4209  case '<': return '{';
4210  case '>': return '}';
4211  case '-': return '~';
4212  }
4213  return '?';
4214 }
4215 
4216 /* ----------------------------------------------------------------- */
4217 
4218 #undef YY_INPUT
4219 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
4220 
4221 static int yyread(char *buf,int max_size)
4222 {
4223  int bytesInBuf = g_inputBuf->curPos()-g_inputBufPos;
4224  int bytesToCopy = QMIN(max_size,bytesInBuf);
4225  memcpy(buf,g_inputBuf->data()+g_inputBufPos,bytesToCopy);
4226  g_inputBufPos+=bytesToCopy;
4227  return bytesToCopy;
4228 }
4229 
4230 /* ----------------------------------------------------------------- */
4231 
4232 
4233 
4234 
4235 
4236 
4237 
4238 
4239 
4240 
4241 
4242 
4243 
4244 
4245 
4246 
4247 
4248 
4249 
4250 
4251 
4252 
4253 
4254 
4255 
4256 
4257 
4258 
4259 
4260 
4261 
4262 
4263 
4264 
4265 
4266 
4267 #line 4268 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pre.cpp"
4268 
4269 #define INITIAL 0
4270 #define Start 1
4271 #define Command 2
4272 #define SkipCommand 3
4273 #define SkipLine 4
4274 #define SkipString 5
4275 #define CopyLine 6
4276 #define CopyString 7
4277 #define Include 8
4278 #define IncludeID 9
4279 #define EndImport 10
4280 #define DefName 11
4281 #define DefineArg 12
4282 #define DefineText 13
4283 #define SkipCPPBlock 14
4284 #define Ifdef 15
4285 #define Ifndef 16
4286 #define SkipCComment 17
4287 #define ArgCopyCComment 18
4288 #define CopyCComment 19
4289 #define SkipVerbatim 20
4290 #define SkipCPPComment 21
4291 #define RemoveCComment 22
4292 #define RemoveCPPComment 23
4293 #define Guard 24
4294 #define DefinedExpr1 25
4295 #define DefinedExpr2 26
4296 #define SkipDoubleQuote 27
4297 #define SkipSingleQuote 28
4298 #define UndefName 29
4299 #define IgnoreLine 30
4300 #define FindDefineArgs 31
4301 #define ReadString 32
4302 #define CondLineC 33
4303 #define CondLineCpp 34
4304 #define SkipCond 35
4305 
4306 #ifndef YY_NO_UNISTD_H
4307 /* Special case for "unistd.h", since it is non-ANSI. We include it way
4308  * down here because we want the user's section 1 to have been scanned first.
4309  * The user has a chance to override it with an option.
4310  */
4311 #include <unistd.h>
4312 #endif
4313 
4314 #ifndef YY_EXTRA_TYPE
4315 #define YY_EXTRA_TYPE void *
4316 #endif
4317 
4318 static int yy_init_globals (void );
4319 
4320 /* Accessor methods to globals.
4321  These are made visible to non-reentrant scanners for convenience. */
4322 
4323 int preYYlex_destroy (void );
4324 
4325 int preYYget_debug (void );
4326 
4327 void preYYset_debug (int debug_flag );
4328 
4330 
4331 void preYYset_extra (YY_EXTRA_TYPE user_defined );
4332 
4333 FILE *preYYget_in (void );
4334 
4335 void preYYset_in (FILE * in_str );
4336 
4337 FILE *preYYget_out (void );
4338 
4339 void preYYset_out (FILE * out_str );
4340 
4341 int preYYget_leng (void );
4342 
4343 char *preYYget_text (void );
4344 
4345 int preYYget_lineno (void );
4346 
4347 void preYYset_lineno (int line_number );
4348 
4349 /* Macros after this point can all be overridden by user definitions in
4350  * section 1.
4351  */
4352 
4353 #ifndef YY_SKIP_YYWRAP
4354 #ifdef __cplusplus
4355 extern "C" int preYYwrap (void );
4356 #else
4357 extern int preYYwrap (void );
4358 #endif
4359 #endif
4360 
4361  static void yyunput (int c,char *buf_ptr );
4362 
4363 #ifndef yytext_ptr
4364 static void yy_flex_strncpy (char *,yyconst char *,int );
4365 #endif
4366 
4367 #ifdef YY_NEED_STRLEN
4368 static int yy_flex_strlen (yyconst char * );
4369 #endif
4370 
4371 #ifndef YY_NO_INPUT
4372 
4373 #ifdef __cplusplus
4374 static int yyinput (void );
4375 #else
4376 static int input (void );
4377 #endif
4378 
4379 #endif
4380 
4381 /* Amount of stuff to slurp up with each read. */
4382 #ifndef YY_READ_BUF_SIZE
4383 #define YY_READ_BUF_SIZE 8192
4384 #endif
4385 
4386 /* Copy whatever the last rule matched to the standard output. */
4387 #ifndef ECHO
4388 /* This used to be an fputs(), but since the string might contain NUL's,
4389  * we now use fwrite().
4390  */
4391 #define ECHO do { if (fwrite( preYYtext, preYYleng, 1, preYYout )) {} } while (0)
4392 #endif
4393 
4394 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
4395  * is returned in "result".
4396  */
4397 #ifndef YY_INPUT
4398 #define YY_INPUT(buf,result,max_size) \
4399  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
4400  { \
4401  int c = '*'; \
4402  unsigned n; \
4403  for ( n = 0; n < max_size && \
4404  (c = getc( preYYin )) != EOF && c != '\n'; ++n ) \
4405  buf[n] = (char) c; \
4406  if ( c == '\n' ) \
4407  buf[n++] = (char) c; \
4408  if ( c == EOF && ferror( preYYin ) ) \
4409  YY_FATAL_ERROR( "input in flex scanner failed" ); \
4410  result = n; \
4411  } \
4412  else \
4413  { \
4414  errno=0; \
4415  while ( (result = fread(buf, 1, max_size, preYYin))==0 && ferror(preYYin)) \
4416  { \
4417  if( errno != EINTR) \
4418  { \
4419  YY_FATAL_ERROR( "input in flex scanner failed" ); \
4420  break; \
4421  } \
4422  errno=0; \
4423  clearerr(preYYin); \
4424  } \
4425  }\
4426 \
4427 
4428 #endif
4429 
4430 /* No semi-colon after return; correct usage is to write "yyterminate();" -
4431  * we don't want an extra ';' after the "return" because that will cause
4432  * some compilers to complain about unreachable statements.
4433  */
4434 #ifndef yyterminate
4435 #define yyterminate() return YY_NULL
4436 #endif
4437 
4438 /* Number of entries by which start-condition stack grows. */
4439 #ifndef YY_START_STACK_INCR
4440 #define YY_START_STACK_INCR 25
4441 #endif
4442 
4443 /* Report a fatal error. */
4444 #ifndef YY_FATAL_ERROR
4445 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
4446 #endif
4447 
4448 /* end tables serialization structures and prototypes */
4449 
4450 /* Default declaration of generated scanner - a define so the user can
4451  * easily add parameters.
4452  */
4453 #ifndef YY_DECL
4454 #define YY_DECL_IS_OURS 1
4455 
4456 extern int preYYlex (void);
4457 
4458 #define YY_DECL int preYYlex (void)
4459 #endif /* !YY_DECL */
4460 
4461 /* Code executed at the beginning of each rule, after preYYtext and preYYleng
4462  * have been set up.
4463  */
4464 #ifndef YY_USER_ACTION
4465 #define YY_USER_ACTION
4466 #endif
4467 
4468 /* Code executed at the end of each rule. */
4469 #ifndef YY_BREAK
4470 #define YY_BREAK break;
4471 #endif
4472 
4473 #define YY_RULE_SETUP \
4474  if ( preYYleng > 0 ) \
4475  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
4476  (preYYtext[preYYleng - 1] == '\n'); \
4477  YY_USER_ACTION
4478 
4479 /** The main scanner function which does all the work.
4480  */
4481 YY_DECL
4483  register yy_state_type yy_current_state;
4484  register char *yy_cp, *yy_bp;
4485  register int yy_act;
4486 
4487 #line 1769 "pre.l"
4488 
4489 
4490 #line 4491 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pre.cpp"
4491 
4492  if ( !(yy_init) )
4493  {
4494  (yy_init) = 1;
4495 
4496 #ifdef YY_USER_INIT
4497  YY_USER_INIT;
4498 #endif
4499 
4500  /* Create the reject buffer large enough to save one state per allowed character. */
4501  if ( ! (yy_state_buf) )
4502  (yy_state_buf) = (yy_state_type *)preYYalloc(YY_STATE_BUF_SIZE );
4503  if ( ! (yy_state_buf) )
4504  YY_FATAL_ERROR( "out of dynamic memory in preYYlex()" );
4505 
4506  if ( ! (yy_start) )
4507  (yy_start) = 1; /* first start state */
4508 
4509  if ( ! preYYin )
4510  preYYin = stdin;
4511 
4512  if ( ! preYYout )
4513  preYYout = stdout;
4514 
4515  if ( ! YY_CURRENT_BUFFER ) {
4519  }
4520 
4522  }
4523 
4524  while ( 1 ) /* loops until end-of-file is reached */
4525  {
4526  yy_cp = (yy_c_buf_p);
4527 
4528  /* Support of preYYtext. */
4529  *yy_cp = (yy_hold_char);
4530 
4531  /* yy_bp points to the position in yy_ch_buf of the start of
4532  * the current run.
4533  */
4534  yy_bp = yy_cp;
4535 
4536  yy_current_state = (yy_start);
4537  yy_current_state += YY_AT_BOL();
4538 
4539  (yy_state_ptr) = (yy_state_buf);
4540  *(yy_state_ptr)++ = yy_current_state;
4541 
4542 yy_match:
4543  do
4544  {
4545  register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
4546  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
4547  {
4548  yy_current_state = (int) yy_def[yy_current_state];
4549  if ( yy_current_state >= 1316 )
4550  yy_c = yy_meta[(unsigned int) yy_c];
4551  }
4552  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
4553  *(yy_state_ptr)++ = yy_current_state;
4554  ++yy_cp;
4555  }
4556  while ( yy_current_state != 1315 );
4557 
4558 yy_find_action:
4559  yy_current_state = *--(yy_state_ptr);
4560  (yy_lp) = yy_accept[yy_current_state];
4561 find_rule: /* we branch to this label when backing up */
4562  for ( ; ; ) /* until we find what rule we matched */
4563  {
4564  if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
4565  {
4566  yy_act = yy_acclist[(yy_lp)];
4567  if ( yy_act & YY_TRAILING_HEAD_MASK ||
4568  (yy_looking_for_trail_begin) )
4569  {
4570  if ( yy_act == (yy_looking_for_trail_begin) )
4571  {
4573  yy_act &= ~YY_TRAILING_HEAD_MASK;
4574  break;
4575  }
4576  }
4577  else if ( yy_act & YY_TRAILING_MASK )
4578  {
4579  (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
4581  (yy_full_match) = yy_cp;
4583  (yy_full_lp) = (yy_lp);
4584  }
4585  else
4586  {
4587  (yy_full_match) = yy_cp;
4589  (yy_full_lp) = (yy_lp);
4590  break;
4591  }
4592  ++(yy_lp);
4593  goto find_rule;
4594  }
4595  --yy_cp;
4596  yy_current_state = *--(yy_state_ptr);
4597  (yy_lp) = yy_accept[yy_current_state];
4598  }
4599 
4601 
4602 do_action: /* This label is used only to access EOF actions. */
4603 
4604  switch ( yy_act )
4605  { /* beginning of action switch */
4606 case 1:
4608 #line 1771 "pre.l"
4609 
4610  YY_BREAK
4611 case 2:
4613 #line 1772 "pre.l"
4614 
4615  YY_BREAK
4616 case 3:
4618 #line 1773 "pre.l"
4619 
4620  YY_BREAK
4621 case 4:
4623 #line 1774 "pre.l"
4624 { // Trigraph
4625  unput(resolveTrigraph(preYYtext[2]));
4626  }
4627  YY_BREAK
4628 case 5:
4630 #line 1777 "pre.l"
4631 { BEGIN(Command); g_yyColNr+=preYYleng; g_yyMLines=0;}
4632  YY_BREAK
4633 case 6:
4634 /* rule 6 can match eol */
4635 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4636 (yy_c_buf_p) = yy_cp -= 1;
4637 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4639 #line 1778 "pre.l"
4640 {
4641  outputArray(preYYtext,(int)preYYleng);
4642  BEGIN(CopyLine);
4643  }
4644  YY_BREAK
4645 case 7:
4646 /* rule 7 can match eol */
4648 #line 1782 "pre.l"
4649 { // constructors?
4650  int i;
4651  for (i=(int)preYYleng-1;i>=0;i--)
4652  {
4653  unput(preYYtext[i]);
4654  }
4655  BEGIN(CopyLine);
4656  }
4657  YY_BREAK
4658 case 8:
4659 /* rule 8 can match eol */
4660 #line 1791 "pre.l"
4661 case 9:
4662 /* rule 9 can match eol */
4664 #line 1791 "pre.l"
4665 { // function like macro
4666  static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
4667  QCString name(preYYtext);
4668  name=name.left(name.find('(')).stripWhiteSpace();
4669 
4670  Define *def=0;
4671  if (skipFuncMacros &&
4672  name!="Q_PROPERTY" &&
4673  !(
4674  (g_includeStack.isEmpty() || g_curlyCount>0) &&
4675  g_macroExpansion &&
4676  (def=DefineManager::instance().isDefined(name)) &&
4677  /*macroIsAccessible(def) &&*/
4678  (!g_expandOnlyPredef || def->isPredefined)
4679  )
4680  )
4681  {
4682  outputChar('\n');
4683  g_yyLineNr++;
4684  }
4685  else // don't skip
4686  {
4687  int i;
4688  for (i=(int)preYYleng-1;i>=0;i--)
4689  {
4690  unput(preYYtext[i]);
4691  }
4692  BEGIN(CopyLine);
4693  }
4694  }
4695  YY_BREAK
4696 case 10:
4697 /* rule 10 can match eol */
4699 #line 1821 "pre.l"
4700 {
4701  QCString text=preYYtext;
4702  g_yyLineNr+=text.contains('\n');
4703  outputArray(preYYtext,(int)preYYleng);
4704  }
4705  YY_BREAK
4706 case 11:
4708 #line 1826 "pre.l"
4709 { // count brackets inside the main file
4710  if (g_includeStack.isEmpty())
4711  {
4712  g_curlyCount++;
4713  }
4714  outputChar(*preYYtext);
4715  }
4716  YY_BREAK
4717 case 12:
4719 #line 1833 "pre.l"
4720 { // count brackets inside the main file
4721  if (g_includeStack.isEmpty() && g_curlyCount>0)
4722  {
4723  g_curlyCount--;
4724  }
4725  outputChar(*preYYtext);
4726  }
4727  YY_BREAK
4728 case 13:
4730 #line 1840 "pre.l"
4731 {
4732  outputArray(preYYtext,(int)preYYleng);
4733  }
4734  YY_BREAK
4735 case 14:
4737 #line 1843 "pre.l"
4738 {
4739  outputArray(preYYtext,(int)preYYleng);
4740  }
4741  YY_BREAK
4742 case 15:
4744 #line 1846 "pre.l"
4745 {
4746  outputArray(preYYtext,(int)preYYleng);
4747  }
4748  YY_BREAK
4749 case 16:
4751 #line 1849 "pre.l"
4752 {
4753  outputChar(*preYYtext);
4754  BEGIN( CopyString );
4755  }
4756  YY_BREAK
4757 case 17:
4759 #line 1853 "pre.l"
4760 {
4761  outputArray(preYYtext,(int)preYYleng);
4762  }
4763  YY_BREAK
4764 case 18:
4766 #line 1856 "pre.l"
4767 {
4768  outputArray(preYYtext,(int)preYYleng);
4769  }
4770  YY_BREAK
4771 case 19:
4773 #line 1859 "pre.l"
4774 {
4775  outputChar(*preYYtext);
4776  BEGIN( CopyLine );
4777  }
4778  YY_BREAK
4779 case 20:
4780 /* rule 20 can match eol */
4782 #line 1863 "pre.l"
4783 {
4784  g_expectGuard = FALSE;
4785  Define *def=0;
4786  //def=g_globalDefineDict->find(preYYtext);
4787  //def=DefineManager::instance().isDefined(preYYtext);
4788  //printf("Search for define %s found=%d g_includeStack.isEmpty()=%d "
4789  // "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d "
4790  // "isPreDefined=%d\n",preYYtext,def ? 1 : 0,
4791  // g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef,
4792  // def ? def->isPredefined : -1
4793  // );
4794  if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
4795  g_macroExpansion &&
4796  (def=DefineManager::instance().isDefined(preYYtext)) &&
4797  /*(def->isPredefined || macroIsAccessible(def)) && */
4798  (!g_expandOnlyPredef || def->isPredefined)
4799  )
4800  {
4801  //printf("Found it! #args=%d\n",def->nargs);
4802  g_roundCount=0;
4803  g_defArgsStr=preYYtext;
4804  if (def->nargs==-1) // no function macro
4805  {
4806  QCString result = def->isPredefined ? def->definition : expandMacro(g_defArgsStr);
4807  outputArray(result,result.length());
4808  }
4809  else // zero or more arguments
4810  {
4811  g_findDefArgContext = CopyLine;
4813  }
4814  }
4815  else
4816  {
4817  outputArray(preYYtext,(int)preYYleng);
4818  }
4819  }
4820  YY_BREAK
4821 case 21:
4823 #line 1900 "pre.l"
4824 {
4825  Define *def=0;
4826  if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
4827  g_macroExpansion &&
4828  (def=DefineManager::instance().isDefined(preYYtext)) &&
4829  def->nargs==-1 &&
4830  /*(def->isPredefined || macroIsAccessible(def)) &&*/
4831  (!g_expandOnlyPredef || def->isPredefined)
4832  )
4833  {
4834  QCString result=def->isPredefined ? def->definition : expandMacro(preYYtext);
4835  outputArray(result,result.length());
4836  }
4837  else
4838  {
4839  outputArray(preYYtext,(int)preYYleng);
4840  }
4841  }
4842  YY_BREAK
4843 case 22:
4844 /* rule 22 can match eol */
4845 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4846 (yy_c_buf_p) = yy_cp -= 1;
4847 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4849 #line 1918 "pre.l"
4850 { // strip line continuation characters
4851  }
4852  YY_BREAK
4853 case 23:
4855 #line 1920 "pre.l"
4856 {
4857  outputChar(*preYYtext);
4858  }
4859  YY_BREAK
4860 case 24:
4861 /* rule 24 can match eol */
4863 #line 1923 "pre.l"
4864 {
4865  outputChar('\n');
4866  BEGIN(Start);
4867  g_yyLineNr++;
4868  g_yyColNr=1;
4869  }
4870  YY_BREAK
4871 case 25:
4873 #line 1929 "pre.l"
4874 {
4875  g_defArgsStr+='(';
4876  g_roundCount++;
4877  }
4878  YY_BREAK
4879 case 26:
4881 #line 1933 "pre.l"
4882 {
4883  g_defArgsStr+=')';
4884  g_roundCount--;
4885  if (g_roundCount==0)
4886  {
4887  QCString result=expandMacro(g_defArgsStr);
4888  //printf("g_defArgsStr=`%s'->`%s'\n",g_defArgsStr.data(),result.data());
4889  if (g_findDefArgContext==CopyLine)
4890  {
4891  outputArray(result,result.length());
4892  BEGIN(g_findDefArgContext);
4893  }
4894  else // g_findDefArgContext==IncludeID
4895  {
4896  readIncludeFile(result);
4897  g_nospaces=FALSE;
4898  BEGIN(Start);
4899  }
4900  }
4901  }
4902  YY_BREAK
4903 /*
4904 <FindDefineArgs>")"{B}*"(" {
4905  g_defArgsStr+=preYYtext;
4906  }
4907  */
4908 case 27:
4910 #line 1958 "pre.l"
4911 {
4912  g_defArgsStr+=preYYtext;
4913  }
4914  YY_BREAK
4915 case 28:
4917 #line 1961 "pre.l"
4918 {
4919  g_defArgsStr+=preYYtext;
4921  }
4922  YY_BREAK
4923 case 29:
4925 #line 1965 "pre.l"
4926 {
4927  g_defArgsStr+=*preYYtext;
4928  BEGIN(ReadString);
4929  }
4930  YY_BREAK
4931 case 30:
4932 /* rule 30 can match eol */
4934 #line 1969 "pre.l"
4935 {
4936  g_defArgsStr+=' ';
4937  g_yyLineNr++;
4938  outputChar('\n');
4939  }
4940  YY_BREAK
4941 case 31:
4943 #line 1974 "pre.l"
4944 {
4945  g_defArgsStr+="@@";
4946  }
4947  YY_BREAK
4948 case 32:
4950 #line 1977 "pre.l"
4951 {
4952  g_defArgsStr+=*preYYtext;
4953  }
4954  YY_BREAK
4955 case 33:
4957 #line 1980 "pre.l"
4958 {
4959  g_defArgsStr+=preYYtext;
4960  }
4961  YY_BREAK
4962 case 34:
4964 #line 1983 "pre.l"
4965 {
4966  g_defArgsStr+=preYYtext;
4968  }
4969  YY_BREAK
4970 case 35:
4971 /* rule 35 can match eol */
4973 #line 1987 "pre.l"
4974 {
4975  g_defArgsStr+=' ';
4976  g_yyLineNr++;
4977  outputChar('\n');
4978  }
4979  YY_BREAK
4980 case 36:
4982 #line 1992 "pre.l"
4983 {
4984  g_defArgsStr+=preYYtext;
4985  }
4986  YY_BREAK
4987 case 37:
4989 #line 1995 "pre.l"
4990 {
4991  g_defArgsStr+=*preYYtext;
4993  }
4994  YY_BREAK
4995 case 38:
4997 #line 1999 "pre.l"
4998 {
4999  g_defArgsStr+=preYYtext;
5000  }
5001  YY_BREAK
5002 case 39:
5004 #line 2002 "pre.l"
5005 {
5006  g_defArgsStr+=preYYtext;
5007  }
5008  YY_BREAK
5009 case 40:
5011 #line 2005 "pre.l"
5012 {
5013  g_defArgsStr+=*preYYtext;
5014  }
5015  YY_BREAK
5016 case 41:
5018 #line 2008 "pre.l"
5019 {
5020  g_isImported = preYYtext[1]=='m';
5021  if (g_macroExpansion)
5022  BEGIN(IncludeID);
5023  }
5024  YY_BREAK
5025 case 42:
5027 #line 2013 "pre.l"
5028 {
5029  g_isImported = preYYtext[1]=='m';
5030  char c[2];
5031  c[0]=preYYtext[preYYleng-1];c[1]='\0';
5032  g_incName=c;
5033  BEGIN(Include);
5034  }
5035  YY_BREAK
5036 case 43:
5038 #line 2020 "pre.l"
5039 {
5040  //printf("!!!DefName\n");
5041  g_yyColNr+=preYYleng;
5042  BEGIN(DefName);
5043  }
5044  YY_BREAK
5045 case 44:
5046 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5047 (yy_c_buf_p) = yy_cp = yy_bp + 5;
5048 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5050 #line 2025 "pre.l"
5051 {
5052  incrLevel();
5053  g_guardExpr.resize(0);
5055  }
5056  YY_BREAK
5057 case 45:
5058 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5059 (yy_c_buf_p) = yy_cp = yy_bp + 5;
5060 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5062 #line 2030 "pre.l"
5063 {
5064  //printf("Pre.l: ifdef\n");
5065  incrLevel();
5066  g_guardExpr.resize(0);
5068  }
5069  YY_BREAK
5070 case 46:
5071 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5072 (yy_c_buf_p) = yy_cp = yy_bp + 6;
5073 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5075 #line 2036 "pre.l"
5076 {
5077  incrLevel();
5078  g_guardExpr="! ";
5080  }
5081  YY_BREAK
5082 case 47:
5083 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5084 (yy_c_buf_p) = yy_cp = yy_bp + 6;
5085 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5087 #line 2041 "pre.l"
5088 {
5089  incrLevel();
5090  g_guardExpr="! ";
5092  }
5093  YY_BREAK
5094 case 48:
5095 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5096 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5097 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5099 #line 2046 "pre.l"
5100 {
5101  incrLevel();
5102  g_guardExpr.resize(0);
5103  BEGIN(Guard);
5104  }
5105  YY_BREAK
5106 case 49:
5107 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5108 (yy_c_buf_p) = yy_cp -= 1;
5109 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5111 #line 2051 "pre.l"
5112 {
5113  if (!otherCaseDone())
5114  {
5115  g_guardExpr.resize(0);
5116  BEGIN(Guard);
5117  }
5118  else
5119  {
5120  g_ifcount=0;
5122  }
5123  }
5124  YY_BREAK
5125 case 50:
5126 /* rule 50 can match eol */
5127 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5128 (yy_c_buf_p) = yy_cp = yy_bp + 4;
5129 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5131 #line 2063 "pre.l"
5132 {
5133  //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
5134  if (otherCaseDone())
5135  {
5136  g_ifcount=0;
5138  }
5139  else
5140  {
5141  setCaseDone(TRUE);
5142  //g_levelGuard[g_level-1]=TRUE;
5143  }
5144  }
5145  YY_BREAK
5146 case 51:
5148 #line 2076 "pre.l"
5149 {
5150  BEGIN(UndefName);
5151  }
5152  YY_BREAK
5153 case 52:
5154 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5155 (yy_c_buf_p) = yy_cp -= 1;
5156 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5158 #line 2079 "pre.l"
5159 {
5160  if (!otherCaseDone())
5161  {
5162  g_guardExpr.resize(0);
5163  BEGIN(Guard);
5164  }
5165  }
5166  YY_BREAK
5167 case 53:
5168 /* rule 53 can match eol */
5169 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5170 (yy_c_buf_p) = yy_cp = yy_bp + 5;
5171 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5173 #line 2086 "pre.l"
5174 {
5175  //printf("Pre.l: #endif\n");
5176  decrLevel();
5177  }
5178  YY_BREAK
5179 case 54:
5180 /* rule 54 can match eol */
5182 #line 2090 "pre.l"
5183 {
5184  outputChar('\n');
5185  BEGIN(Start);
5186  g_yyLineNr++;
5187  }
5188  YY_BREAK
5189 case 55:
5191 #line 2095 "pre.l"
5192 {
5193  g_expectGuard = FALSE;
5194  }
5195  YY_BREAK
5196 case 56:
5198 #line 2098 "pre.l"
5199 { // unknown directive
5200  BEGIN(IgnoreLine);
5201  }
5202  YY_BREAK
5203 case 57:
5204 /* rule 57 can match eol */
5206 #line 2101 "pre.l"
5207 {
5208  outputChar('\n');
5209  g_yyLineNr++;
5210  }
5211  YY_BREAK
5212 case 58:
5214 #line 2105 "pre.l"
5215 
5216  YY_BREAK
5217 case 59:
5219 #line 2106 "pre.l"
5220 {g_yyColNr+=preYYleng;}
5221  YY_BREAK
5222 case 60:
5224 #line 2107 "pre.l"
5225 {
5226  Define *def;
5227  if ((def=DefineManager::instance().isDefined(preYYtext))
5228  /*&& !def->isPredefined*/
5229  && !def->nonRecursive
5230  )
5231  {
5232  //printf("undefining %s\n",preYYtext);
5233  def->undef=TRUE;
5234  }
5235  BEGIN(Start);
5236  }
5237  YY_BREAK
5238 case 61:
5239 /* rule 61 can match eol */
5241 #line 2119 "pre.l"
5242 {
5243  outputChar('\n');
5244  g_guardExpr+=' ';
5245  g_yyLineNr++;
5246  }
5247  YY_BREAK
5248 case 62:
5249 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5250 (yy_c_buf_p) = yy_cp = yy_bp + 7;
5251 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5253 #line 2124 "pre.l"
5254 {
5256  }
5257  YY_BREAK
5258 case 63:
5259 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5260 (yy_c_buf_p) = yy_cp = yy_bp + 7;
5261 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5263 #line 2127 "pre.l"
5264 {
5266  }
5267  YY_BREAK
5268 case 64:
5270 #line 2130 "pre.l"
5271 { g_guardExpr+=preYYtext; }
5272  YY_BREAK
5273 case 65:
5275 #line 2131 "pre.l"
5276 { g_guardExpr+=*preYYtext; }
5277  YY_BREAK
5278 case 66:
5279 /* rule 66 can match eol */
5281 #line 2132 "pre.l"
5282 {
5283  unput(*preYYtext);
5284  //printf("Guard: `%s'\n",
5285  // g_guardExpr.data());
5286  bool guard=computeExpression(g_guardExpr);
5287  setCaseDone(guard);
5288  //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
5289  if (guard)
5290  {
5291  BEGIN(Start);
5292  }
5293  else
5294  {
5295  g_ifcount=0;
5297  }
5298  }
5299  YY_BREAK
5300 case 67:
5301 /* rule 67 can match eol */
5303 #line 2149 "pre.l"
5304 { g_yyLineNr++; outputChar('\n'); }
5305  YY_BREAK
5306 case 68:
5308 #line 2150 "pre.l"
5309 {
5310  if (DefineManager::instance().isDefined(preYYtext) || g_guardName==preYYtext)
5311  g_guardExpr+=" 1L ";
5312  else
5313  g_guardExpr+=" 0L ";
5314  g_lastGuardName=preYYtext;
5315  BEGIN(Guard);
5316  }
5317  YY_BREAK
5318 case 69:
5320 #line 2158 "pre.l"
5321 {
5322  if (DefineManager::instance().isDefined(preYYtext) || g_guardName==preYYtext)
5323  g_guardExpr+=" 1L ";
5324  else
5325  g_guardExpr+=" 0L ";
5326  g_lastGuardName=preYYtext;
5327  }
5328  YY_BREAK
5329 case 70:
5330 /* rule 70 can match eol */
5332 #line 2165 "pre.l"
5333 { // should not happen, handle anyway
5334  g_yyLineNr++;
5335  g_ifcount=0;
5336  BEGIN(SkipCPPBlock);
5337  }
5338  YY_BREAK
5339 case 71:
5341 #line 2170 "pre.l"
5342 {
5343  BEGIN(Guard);
5344  }
5345  YY_BREAK
5346 case 72:
5348 #line 2173 "pre.l"
5349 
5350  YY_BREAK
5351 case 73:
5353 #line 2174 "pre.l"
5354 { BEGIN(SkipCommand); }
5355  YY_BREAK
5356 case 74:
5357 /* rule 74 can match eol */
5358 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5359 (yy_c_buf_p) = yy_cp -= 1;
5360 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5362 #line 2175 "pre.l"
5363 { BEGIN(SkipLine); }
5364  YY_BREAK
5365 case 75:
5366 /* rule 75 can match eol */
5368 #line 2176 "pre.l"
5369 { g_yyLineNr++; outputChar('\n'); }
5370  YY_BREAK
5371 case 76:
5373 #line 2177 "pre.l"
5374 
5375  YY_BREAK
5376 case 77:
5377 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5378 (yy_c_buf_p) = yy_cp -= 1;
5379 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5381 #line 2178 "pre.l"
5382 {
5383  incrLevel();
5384  g_ifcount++;
5385  //printf("#if... depth=%d\n",g_ifcount);
5386  }
5387  YY_BREAK
5388 case 78:
5390 #line 2183 "pre.l"
5391 {
5392  //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone());
5393  if (g_ifcount==0 && !otherCaseDone())
5394  {
5395  setCaseDone(TRUE);
5396  //outputChar('\n');
5397  BEGIN(Start);
5398  }
5399  }
5400  YY_BREAK
5401 case 79:
5402 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5403 (yy_c_buf_p) = yy_cp -= 1;
5404 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5406 #line 2192 "pre.l"
5407 {
5408  if (g_ifcount==0)
5409  {
5410  if (!otherCaseDone())
5411  {
5412  g_guardExpr.resize(0);
5413  g_lastGuardName.resize(0);
5414  BEGIN(Guard);
5415  }
5416  else
5417  {
5419  }
5420  }
5421  }
5422  YY_BREAK
5423 case 80:
5425 #line 2207 "pre.l"
5426 {
5427  g_expectGuard = FALSE;
5428  decrLevel();
5429  if (--g_ifcount<0)
5430  {
5431  //outputChar('\n');
5432  BEGIN(Start);
5433  }
5434  }
5435  YY_BREAK
5436 case 81:
5437 /* rule 81 can match eol */
5439 #line 2216 "pre.l"
5440 {
5441  outputChar('\n');
5442  g_yyLineNr++;
5444  }
5445  YY_BREAK
5446 case 82:
5448 #line 2221 "pre.l"
5449 { // unknown directive
5450  BEGIN(SkipLine);
5451  }
5452  YY_BREAK
5453 case 83:
5455 #line 2224 "pre.l"
5456 
5457  YY_BREAK
5458 case 84:
5460 #line 2225 "pre.l"
5461 
5462  YY_BREAK
5463 case 85:
5465 #line 2226 "pre.l"
5466 { }
5467  YY_BREAK
5468 case 86:
5470 #line 2227 "pre.l"
5471 {
5472  BEGIN(SkipString);
5473  }
5474  YY_BREAK
5475 case 87:
5477 #line 2230 "pre.l"
5478 
5479  YY_BREAK
5480 case 88:
5481 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5482 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5483 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5485 #line 2231 "pre.l"
5486 {
5487  }
5488  YY_BREAK
5489 case 89:
5491 #line 2233 "pre.l"
5492 {
5493  g_lastCPPContext=YY_START;
5495  }
5496  YY_BREAK
5497 case 90:
5498 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5499 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5500 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5502 #line 2237 "pre.l"
5503 {
5504  }
5505  YY_BREAK
5506 case 91:
5507 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5508 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5509 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5511 #line 2239 "pre.l"
5512 {
5513  g_lastCContext=YY_START;
5515  }
5516  YY_BREAK
5517 case 92:
5518 /* rule 92 can match eol */
5520 #line 2243 "pre.l"
5521 {
5522  outputChar('\n');
5523  g_yyLineNr++;
5525  }
5526  YY_BREAK
5527 case 93:
5529 #line 2248 "pre.l"
5530 { }
5531  YY_BREAK
5532 case 94:
5534 #line 2249 "pre.l"
5535 { }
5536  YY_BREAK
5537 case 95:
5539 #line 2250 "pre.l"
5540 {
5541  BEGIN(SkipLine);
5542  }
5543  YY_BREAK
5544 case 96:
5546 #line 2253 "pre.l"
5547 { }
5548  YY_BREAK
5549 case 97:
5550 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5551 (yy_c_buf_p) = yy_cp -= 1;
5552 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5554 #line 2254 "pre.l"
5555 {
5556  g_nospaces=TRUE;
5557  g_roundCount=0;
5558  g_defArgsStr=preYYtext;
5559  g_findDefArgContext = IncludeID;
5561  }
5562  YY_BREAK
5563 case 98:
5565 #line 2261 "pre.l"
5566 {
5567  g_nospaces=TRUE;
5568  readIncludeFile(expandMacro(preYYtext));
5569  BEGIN(Start);
5570  }
5571  YY_BREAK
5572 case 99:
5574 #line 2266 "pre.l"
5575 {
5576  g_incName+=preYYtext;
5577  readIncludeFile(g_incName);
5578  if (g_isImported)
5579  {
5580  BEGIN(EndImport);
5581  }
5582  else
5583  {
5584  BEGIN(Start);
5585  }
5586  }
5587  YY_BREAK
5588 case 100:
5589 /* rule 100 can match eol */
5590 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5591 (yy_c_buf_p) = yy_cp -= 1;
5592 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5594 #line 2278 "pre.l"
5595 {
5596  BEGIN(Start);
5597  }
5598  YY_BREAK
5599 case 101:
5600 /* rule 101 can match eol */
5602 #line 2281 "pre.l"
5603 {
5604  outputChar('\n');
5605  g_yyLineNr++;
5606  }
5607  YY_BREAK
5608 case 102:
5610 #line 2285 "pre.l"
5611 {
5612  }
5613  YY_BREAK
5614 case 103:
5615 /* rule 103 can match eol */
5617 #line 2287 "pre.l"
5618 { // define with argument
5619  //printf("Define() `%s'\n",preYYtext);
5620  delete g_argDict;
5621  g_argDict = new QDict<int>(31);
5622  g_argDict->setAutoDelete(TRUE);
5623  g_defArgs = 0;
5624  g_defArgsStr.resize(0);
5625  g_defText.resize(0);
5626  g_defLitText.resize(0);
5627  g_defName = preYYtext;
5628  g_defVarArgs = FALSE;
5629  g_defExtraSpacing.resize(0);
5630  BEGIN(DefineArg);
5631  }
5632  YY_BREAK
5633 case 104:
5634 /* rule 104 can match eol */
5635 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5636 (yy_c_buf_p) = yy_cp -= 1;
5637 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5639 #line 2301 "pre.l"
5640 { // special case: define with 1 -> can be "guard"
5641  //printf("Define `%s'\n",preYYtext);
5642  delete g_argDict; g_argDict=0;
5643  g_defArgs = -1;
5644  g_defArgsStr.resize(0);
5645  g_defName = preYYtext;
5646  g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace();
5647  g_defVarArgs = FALSE;
5648  //printf("Guard check: %s!=%s || %d\n",
5649  // g_defName.data(),g_lastGuardName.data(),g_expectGuard);
5650  if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
5651  { // define may appear in the output
5652  QCString tmp=(QCString)"#define "+g_defName;
5653  outputArray(tmp.data(),tmp.length());
5654  g_quoteArg=FALSE;
5655  g_insideComment=FALSE;
5656  g_lastGuardName.resize(0);
5657  g_defText="1";
5658  g_defLitText="1";
5659  BEGIN(DefineText);
5660  }
5661  else // define is a guard => hide
5662  {
5663  //printf("Found a guard %s\n",preYYtext);
5664  g_defText.resize(0);
5665  g_defLitText.resize(0);
5666  BEGIN(Start);
5667  }
5668  g_expectGuard=FALSE;
5669  }
5670  YY_BREAK
5671 case 105:
5672 /* rule 105 can match eol */
5674 #line 2331 "pre.l"
5675 { // empty define
5676  delete g_argDict; g_argDict=0;
5677  g_defArgs = -1;
5678  g_defName = preYYtext;
5679  g_defArgsStr.resize(0);
5680  g_defText.resize(0);
5681  g_defLitText.resize(0);
5682  g_defVarArgs = FALSE;
5683  //printf("Guard check: %s!=%s || %d\n",
5684  // g_defName.data(),g_lastGuardName.data(),g_expectGuard);
5685  if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
5686  { // define may appear in the output
5687  QCString tmp=(QCString)"#define "+g_defName;
5688  outputArray(tmp.data(),tmp.length());
5689  g_quoteArg=FALSE;
5690  g_insideComment=FALSE;
5691  if (g_insideCS) g_defText="1"; // for C#, use "1" as define text
5692  BEGIN(DefineText);
5693  }
5694  else // define is a guard => hide
5695  {
5696  //printf("Found a guard %s\n",preYYtext);
5697  g_guardName = preYYtext;
5698  g_lastGuardName.resize(0);
5699  BEGIN(Start);
5700  }
5701  g_expectGuard=FALSE;
5702  }
5703  YY_BREAK
5704 case 106:
5706 #line 2359 "pre.l"
5707 { // define with content
5708  //printf("Define `%s'\n",preYYtext);
5709  delete g_argDict; g_argDict=0;
5710  g_defArgs = -1;
5711  g_defArgsStr.resize(0);
5712  g_defText.resize(0);
5713  g_defLitText.resize(0);
5714  g_defName = preYYtext;
5715  g_defVarArgs = FALSE;
5716  QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
5717  outputArray(tmp.data(),tmp.length());
5718  g_quoteArg=FALSE;
5719  g_insideComment=FALSE;
5720  BEGIN(DefineText);
5721  }
5722  YY_BREAK
5723 case 107:
5724 /* rule 107 can match eol */
5726 #line 2374 "pre.l"
5727 {
5728  g_defExtraSpacing+="\n";
5729  g_yyLineNr++;
5730  }
5731  YY_BREAK
5732 case 108:
5734 #line 2378 "pre.l"
5735 { g_defArgsStr+=preYYtext; }
5736  YY_BREAK
5737 case 109:
5739 #line 2379 "pre.l"
5740 { g_defArgsStr+=preYYtext; }
5741  YY_BREAK
5742 case 110:
5744 #line 2380 "pre.l"
5745 {
5746  g_defArgsStr+=preYYtext;
5747  QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr+g_defExtraSpacing;
5748  outputArray(tmp.data(),tmp.length());
5749  g_quoteArg=FALSE;
5750  g_insideComment=FALSE;
5751  BEGIN(DefineText);
5752  }
5753  YY_BREAK
5754 case 111:
5756 #line 2388 "pre.l"
5757 { // Variadic macro
5758  g_defVarArgs = TRUE;
5759  g_defArgsStr+=preYYtext;
5760  g_argDict->insert("__VA_ARGS__",new int(g_defArgs));
5761  g_defArgs++;
5762  }
5763  YY_BREAK
5764 case 112:
5766 #line 2394 "pre.l"
5767 {
5768  //printf("Define addArg(%s)\n",preYYtext);
5770  g_defVarArgs = preYYtext[preYYleng-1]=='.';
5771  if (g_defVarArgs) // strip ellipsis
5772  {
5773  argName=argName.left(argName.length()-3);
5774  }
5775  argName = argName.stripWhiteSpace();
5776  g_defArgsStr+=preYYtext;
5777  g_argDict->insert(argName,new int(g_defArgs));
5778  g_defArgs++;
5779  }
5780  YY_BREAK
5781 /*
5782 <DefineText>"/ **"|"/ *!" {
5783  g_defText+=preYYtext;
5784  g_defLitText+=preYYtext;
5785  g_insideComment=TRUE;
5786  }
5787 <DefineText>"* /" {
5788  g_defText+=preYYtext;
5789  g_defLitText+=preYYtext;
5790  g_insideComment=FALSE;
5791  }
5792  */
5793 case 113:
5795 #line 2419 "pre.l"
5796 {
5797  g_defText+=preYYtext;
5798  g_defLitText+=preYYtext;
5799  g_lastCContext=YY_START;
5800  g_commentCount=1;
5802  }
5803  YY_BREAK
5804 case 114:
5806 #line 2426 "pre.l"
5807 {
5808  outputArray(preYYtext,(int)preYYleng);
5809  g_lastCPPContext=YY_START;
5810  g_defLitText+=' ';
5812  }
5813  YY_BREAK
5814 case 115:
5816 #line 2432 "pre.l"
5817 {
5818  if (preYYtext[0]=='/') outputChar('/');
5819  outputChar('*');outputChar('/');
5820  if (--g_commentCount<=0)
5821  {
5822  if (g_lastCContext==Start)
5823  // small hack to make sure that ^... rule will
5824  // match when going to Start... Example: "/*...*/ some stuff..."
5825  {
5826  YY_CURRENT_BUFFER->yy_at_bol=1;
5827  }
5828  BEGIN(g_lastCContext);
5829  }
5830  }
5831  YY_BREAK
5832 case 116:
5834 #line 2446 "pre.l"
5835 {
5836  outputArray(preYYtext,(int)preYYleng);
5837  }
5838  YY_BREAK
5839 case 117:
5841 #line 2449 "pre.l"
5842 {
5843  outputChar('/');outputChar('*');
5844  //g_commentCount++;
5845  }
5846  YY_BREAK
5847 case 118:
5849 #line 2453 "pre.l"
5850 {
5851  outputArray(preYYtext,(int)preYYleng);
5852  }
5853  YY_BREAK
5854 case 119:
5856 #line 2456 "pre.l"
5857 {
5858  static bool markdownSupport = Config_getBool("MARKDOWN_SUPPORT");
5859  if (!markdownSupport)
5860  {
5861  REJECT;
5862  }
5863  else
5864  {
5865  outputArray(preYYtext,(int)preYYleng);
5866  g_fenceSize=preYYleng;
5868  }
5869  }
5870  YY_BREAK
5871 case 120:
5873 #line 2469 "pre.l"
5874 {
5875  static bool markdownSupport = Config_getBool("MARKDOWN_SUPPORT");
5876  if (!markdownSupport)
5877  {
5878  REJECT;
5879  }
5880  else
5881  {
5882  outputArray(preYYtext,(int)preYYleng);
5883  g_fenceSize=preYYleng;
5885  }
5886  }
5887  YY_BREAK
5888 case 121:
5889 /* rule 121 can match eol */
5891 #line 2482 "pre.l"
5892 {
5893  outputArray(preYYtext,(int)preYYleng);
5894  g_yyLineNr+=QCString(preYYtext).contains('\n');
5895  }
5896  YY_BREAK
5897 case 122:
5898 /* rule 122 can match eol */
5900 #line 2486 "pre.l"
5901 {
5902  outputArray(preYYtext,(int)preYYleng);
5903  g_yyLineNr+=QCString(preYYtext).contains('\n');
5904  g_fenceSize=0;
5905  if (preYYtext[1]=='f')
5906  {
5907  g_blockName="f";
5908  }
5909  else
5910  {
5911  QCString bn=&preYYtext[1];
5912  int i = bn.find('{'); // for \code{.c}
5913  if (i!=-1) bn=bn.left(i);
5914  g_blockName=bn.stripWhiteSpace();
5915  }
5917  }
5918  YY_BREAK
5919 case 123:
5921 #line 2503 "pre.l"
5922 { // escaped @cond
5923  outputArray(preYYtext,(int)preYYleng);
5924  }
5925  YY_BREAK
5926 case 124:
5928 #line 2506 "pre.l"
5929 { // conditional section
5930  g_ccomment=TRUE;
5931  g_condCtx=YY_START;
5932  BEGIN(CondLineCpp);
5933  }
5934  YY_BREAK
5935 case 125:
5937 #line 2511 "pre.l"
5938 { // conditional section
5939  g_ccomment=FALSE;
5940  g_condCtx=YY_START;
5941  BEGIN(CondLineC);
5942  }
5943  YY_BREAK
5944 case 126:
5946 #line 2516 "pre.l"
5947 {
5948  startCondSection(preYYtext);
5949  if (g_skip)
5950  {
5951  if (YY_START==CondLineC)
5952  {
5953  // end C comment
5954  outputArray("*/",2);
5955  g_ccomment=TRUE;
5956  }
5957  else
5958  {
5959  g_ccomment=FALSE;
5960  }
5961  BEGIN(SkipCond);
5962  }
5963  else
5964  {
5965  BEGIN(g_condCtx);
5966  }
5967  }
5968  YY_BREAK
5969 case 127:
5971 #line 2537 "pre.l"
5972 { // non-guard character
5973  unput(*preYYtext);
5974  startCondSection(" ");
5975  if (g_skip)
5976  {
5977  if (YY_START==CondLineC)
5978  {
5979  // end C comment
5980  outputArray("*/",2);
5981  g_ccomment=TRUE;
5982  }
5983  else
5984  {
5985  g_ccomment=FALSE;
5986  }
5987  BEGIN(SkipCond);
5988  }
5989  else
5990  {
5991  BEGIN(g_condCtx);
5992  }
5993  }
5994  YY_BREAK
5995 case 128:
5996 /* rule 128 can match eol */
5997 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5998 (yy_c_buf_p) = yy_cp -= 1;
5999 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
6001 #line 2559 "pre.l"
6002 { // no guard
6003  if (YY_START==SkipCComment)
6004  {
6005  g_ccomment=TRUE;
6006  // end C comment
6007  outputArray("*/",2);
6008  }
6009  else
6010  {
6011  g_ccomment=FALSE;
6012  }
6013  g_condCtx=YY_START;
6014  startCondSection(" ");
6015  BEGIN(SkipCond);
6016  }
6017  YY_BREAK
6018 case 129:
6019 /* rule 129 can match eol */
6021 #line 2574 "pre.l"
6022 { g_yyLineNr++; outputChar('\n'); }
6023  YY_BREAK
6024 case 130:
6026 #line 2575 "pre.l"
6027 { }
6028  YY_BREAK
6029 case 131:
6031 #line 2576 "pre.l"
6032 { }
6033  YY_BREAK
6034 case 132:
6036 #line 2577 "pre.l"
6037 { g_ccomment=FALSE; }
6038  YY_BREAK
6039 case 133:
6041 #line 2578 "pre.l"
6042 { g_ccomment=TRUE; }
6043  YY_BREAK
6044 case 134:
6045 /* rule 134 can match eol */
6046 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
6047 (yy_c_buf_p) = yy_cp = yy_bp + 9;
6048 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
6050 #line 2579 "pre.l"
6051 {
6052  if (!g_skip)
6053  {
6054  outputArray(preYYtext,(int)preYYleng);
6055  }
6056  }
6057  YY_BREAK
6058 case 135:
6059 /* rule 135 can match eol */
6060 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
6061 (yy_c_buf_p) = yy_cp = yy_bp + 8;
6062 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
6064 #line 2585 "pre.l"
6065 {
6066  bool oldSkip = g_skip;
6067  endCondSection();
6068  if (oldSkip && !g_skip)
6069  {
6070  if (g_ccomment)
6071  {
6072  outputArray("/** ",4);
6073  }
6074  BEGIN(g_condCtx);
6075  }
6076  }
6077  YY_BREAK
6078 case 136:
6079 /* rule 136 can match eol */
6080 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
6081 (yy_c_buf_p) = yy_cp = yy_bp + 8;
6082 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
6084 #line 2597 "pre.l"
6085 {
6086  bool oldSkip = g_skip;
6087  endCondSection();
6088  if (oldSkip && !g_skip)
6089  {
6090  BEGIN(g_condCtx);
6091  }
6092  }
6093  YY_BREAK
6094 case 137:
6096 #line 2605 "pre.l"
6097 { /* end of verbatim block */
6098  outputArray(preYYtext,(int)preYYleng);
6099  if (preYYtext[1]=='f' && g_blockName=="f")
6100  {
6102  }
6103  else if (&preYYtext[4]==g_blockName)
6104  {
6106  }
6107  }
6108  YY_BREAK
6109 case 138:
6111 #line 2616 "pre.l"
6112 {
6113  outputArray(preYYtext,(int)preYYleng);
6114  if (g_fenceSize==preYYleng)
6115  {
6117  }
6118  }
6119  YY_BREAK
6120 case 139:
6122 #line 2623 "pre.l"
6123 {
6124  outputArray(preYYtext,(int)preYYleng);
6125  if (g_fenceSize==preYYleng)
6126  {
6128  }
6129  }
6130  YY_BREAK
6131 case 140:
6133 #line 2630 "pre.l"
6134 {
6135  outputArray(preYYtext,(int)preYYleng);
6136  }
6137  YY_BREAK
6138 case 141:
6140 #line 2633 "pre.l"
6141 {
6142  outputArray(preYYtext,(int)preYYleng);
6143  }
6144  YY_BREAK
6145 case 142:
6146 /* rule 142 can match eol */
6148 #line 2636 "pre.l"
6149 {
6150  g_yyLineNr++;
6151  outputChar('\n');
6152  }
6153  YY_BREAK
6154 case 143:
6156 #line 2640 "pre.l"
6157 {
6158  outputChar(*preYYtext);
6159  }
6160  YY_BREAK
6161 case 144:
6163 #line 2643 "pre.l"
6164 {
6165  g_defLitText+=preYYtext;
6166  g_defText+=escapeAt(preYYtext);
6167  }
6168  YY_BREAK
6169 case 145:
6171 #line 2647 "pre.l"
6172 {
6173  g_defLitText+=preYYtext;
6174  g_defText+=preYYtext;
6175  BEGIN(g_lastCContext);
6176  }
6177  YY_BREAK
6178 case 146:
6179 /* rule 146 can match eol */
6181 #line 2652 "pre.l"
6182 {
6183  g_yyLineNr++;
6184  outputChar('\n');
6185  g_defLitText+=preYYtext;
6186  g_defText+=' ';
6187  }
6188  YY_BREAK
6189 case 147:
6191 #line 2658 "pre.l"
6192 { // see bug 594021 for a usecase for this rule
6193  if (g_lastCContext==SkipCPPBlock)
6194  {
6195  BEGIN(SkipCommand);
6196  }
6197  else
6198  {
6199  REJECT;
6200  }
6201  }
6202  YY_BREAK
6203 case 148:
6205 #line 2668 "pre.l"
6206 { BEGIN(g_lastCContext); }
6207  YY_BREAK
6208 case 149:
6210 #line 2669 "pre.l"
6211 
6212  YY_BREAK
6213 case 150:
6215 #line 2670 "pre.l"
6216 
6217  YY_BREAK
6218 case 151:
6220 #line 2671 "pre.l"
6221 
6222  YY_BREAK
6223 case 152:
6224 /* rule 152 can match eol */
6226 #line 2672 "pre.l"
6227 { g_yyLineNr++; outputChar('\n'); }
6228  YY_BREAK
6229 case 153:
6231 #line 2673 "pre.l"
6232 
6233  YY_BREAK
6234 case 154:
6236 #line 2674 "pre.l"
6237 {
6238  outputArray(preYYtext,(int)preYYleng);
6239  }
6240  YY_BREAK
6241 case 155:
6242 /* rule 155 can match eol */
6244 #line 2677 "pre.l"
6245 {
6246  unput(*preYYtext);
6247  BEGIN(g_lastCPPContext);
6248  }
6249  YY_BREAK
6250 case 156:
6252 #line 2681 "pre.l"
6253 {
6254  outputChar('/');outputChar('*');
6255  }
6256  YY_BREAK
6257 case 157:
6259 #line 2684 "pre.l"
6260 {
6261  outputChar('/');outputChar('/');
6262  }
6263  YY_BREAK
6264 case 158:
6266 #line 2687 "pre.l"
6267 {
6268  outputArray(preYYtext,(int)preYYleng);
6269  }
6270  YY_BREAK
6271 case 159:
6273 #line 2690 "pre.l"
6274 {
6275  outputChar(*preYYtext);
6276  }
6277  YY_BREAK
6278 case 160:
6280 #line 2693 "pre.l"
6281 
6282  YY_BREAK
6283 case 161:
6285 #line 2694 "pre.l"
6286 
6287  YY_BREAK
6288 case 162:
6290 #line 2695 "pre.l"
6291 
6292  YY_BREAK
6293 case 163:
6295 #line 2696 "pre.l"
6296 
6297  YY_BREAK
6298 case 164:
6300 #line 2697 "pre.l"
6301 {
6302  g_quoteArg=TRUE;
6303  g_defLitText+=preYYtext;
6304  }
6305  YY_BREAK
6306 case 165:
6308 #line 2701 "pre.l"
6309 {
6310  g_defLitText+=preYYtext;
6311  if (g_quoteArg)
6312  {
6313  g_defText+="\"";
6314  }
6315  if (g_defArgs>0)
6316  {
6317  int *n;
6318  if ((n=(*g_argDict)[preYYtext]))
6319  {
6320  //if (!g_quoteArg) g_defText+=' ';
6321  g_defText+='@';
6322  QCString numStr;
6323  numStr.sprintf("%d",*n);
6324  g_defText+=numStr;
6325  //if (!g_quoteArg) g_defText+=' ';
6326  }
6327  else
6328  {
6329  g_defText+=preYYtext;
6330  }
6331  }
6332  else
6333  {
6334  g_defText+=preYYtext;
6335  }
6336  if (g_quoteArg)
6337  {
6338  g_defText+="\"";
6339  }
6340  g_quoteArg=FALSE;
6341  }
6342  YY_BREAK
6343 case 166:
6345 #line 2734 "pre.l"
6346 {
6347  g_defLitText+=preYYtext;
6348  g_defText+=preYYtext;
6349  }
6350  YY_BREAK
6351 case 167:
6352 /* rule 167 can match eol */
6354 #line 2738 "pre.l"
6355 {
6356  g_defLitText+=preYYtext;
6357  outputChar('\n');
6358  g_defText += ' ';
6359  g_yyLineNr++;
6360  g_yyMLines++;
6361  }
6362  YY_BREAK
6363 case 168:
6364 /* rule 168 can match eol */
6366 #line 2745 "pre.l"
6367 {
6368  QCString comment=extractTrailingComment(g_defLitText);
6369  g_defLitText+=preYYtext;
6370  if (!comment.isEmpty())
6371  {
6372  outputArray(comment,comment.length());
6373  g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
6374  }
6375  outputChar('\n');
6376  Define *def=0;
6377  //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());
6378  if (g_includeStack.isEmpty() || g_curlyCount>0)
6379  {
6380  addDefine();
6381  }
6382  def=DefineManager::instance().isDefined(g_defName);
6383  if (def==0) // new define
6384  {
6385  //printf("new define '%s'!\n",g_defName.data());
6386  Define *nd = newDefine();
6387  DefineManager::instance().addDefine(g_yyFileName,nd);
6388 
6389  // also add it to the local file list if it is a source file
6390  //if (g_isSource && g_includeStack.isEmpty())
6391  //{
6392  // g_fileDefineDict->insert(g_defName,nd);
6393  //}
6394  }
6395  else if (def /*&& macroIsAccessible(def)*/)
6396  // name already exists
6397  {
6398  //printf("existing define!\n");
6399  //printf("define found\n");
6400  if (def->undef) // undefined name
6401  {
6402  def->undef = FALSE;
6403  def->name = g_defName;
6404  def->definition = g_defText.stripWhiteSpace();
6405  def->nargs = g_defArgs;
6406  def->fileName = g_yyFileName.copy();
6407  def->lineNr = g_yyLineNr-g_yyMLines;
6408  def->columnNr = g_yyColNr;
6409  }
6410  else
6411  {
6412  //printf("error: define %s is defined more than once!\n",g_defName.data());
6413  }
6414  }
6415  delete g_argDict; g_argDict=0;
6416  g_yyLineNr++;
6417  g_yyColNr=1;
6418  g_lastGuardName.resize(0);
6419  BEGIN(Start);
6420  }
6421  YY_BREAK
6422 case 169:
6424 #line 2799 "pre.l"
6425 { g_defText += ' '; g_defLitText+=preYYtext; }
6426  YY_BREAK
6427 case 170:
6429 #line 2800 "pre.l"
6430 { g_defText += "##"; g_defLitText+=preYYtext; }
6431  YY_BREAK
6432 case 171:
6434 #line 2801 "pre.l"
6435 { g_defText += "@@"; g_defLitText+=preYYtext; }
6436  YY_BREAK
6437 case 172:
6439 #line 2802 "pre.l"
6440 {
6441  g_defText += *preYYtext;
6442  g_defLitText+=preYYtext;
6443  if (!g_insideComment)
6444  {
6446  }
6447  }
6448  YY_BREAK
6449 case 173:
6451 #line 2810 "pre.l"
6452 { g_defText += *preYYtext;
6453  g_defLitText+=preYYtext;
6454  if (!g_insideComment)
6455  {
6457  }
6458  }
6459  YY_BREAK
6460 case 174:
6462 #line 2817 "pre.l"
6463 { g_defText += preYYtext; g_defLitText+=preYYtext; }
6464  YY_BREAK
6465 case 175:
6467 #line 2818 "pre.l"
6468 { g_defText += preYYtext; g_defLitText+=preYYtext; }
6469  YY_BREAK
6470 case 176:
6472 #line 2819 "pre.l"
6473 {
6474  g_defText += *preYYtext; g_defLitText+=preYYtext;
6475  BEGIN(DefineText);
6476  }
6477  YY_BREAK
6478 case 177:
6480 #line 2823 "pre.l"
6481 {
6482  g_defText += preYYtext; g_defLitText+=preYYtext;
6483  }
6484  YY_BREAK
6485 case 178:
6487 #line 2826 "pre.l"
6488 {
6489  g_defText += *preYYtext; g_defLitText+=preYYtext;
6490  BEGIN(DefineText);
6491  }
6492  YY_BREAK
6493 case 179:
6495 #line 2830 "pre.l"
6496 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
6497  YY_BREAK
6498 case 180:
6500 #line 2831 "pre.l"
6501 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
6502  YY_BREAK
6503 case 181:
6505 #line 2832 "pre.l"
6506 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
6507  YY_BREAK
6508 case YY_STATE_EOF(INITIAL):
6509 case YY_STATE_EOF(Start):
6510 case YY_STATE_EOF(Command):
6512 case YY_STATE_EOF(SkipLine):
6513 case YY_STATE_EOF(SkipString):
6514 case YY_STATE_EOF(CopyLine):
6515 case YY_STATE_EOF(CopyString):
6516 case YY_STATE_EOF(Include):
6517 case YY_STATE_EOF(IncludeID):
6518 case YY_STATE_EOF(EndImport):
6519 case YY_STATE_EOF(DefName):
6520 case YY_STATE_EOF(DefineArg):
6521 case YY_STATE_EOF(DefineText):
6523 case YY_STATE_EOF(Ifdef):
6524 case YY_STATE_EOF(Ifndef):
6532 case YY_STATE_EOF(Guard):
6537 case YY_STATE_EOF(UndefName):
6538 case YY_STATE_EOF(IgnoreLine):
6540 case YY_STATE_EOF(ReadString):
6541 case YY_STATE_EOF(CondLineC):
6543 case YY_STATE_EOF(SkipCond):
6544 #line 2833 "pre.l"
6545 {
6546  DBG_CTX((stderr,"End of include file\n"));
6547  //printf("Include stack depth=%d\n",g_includeStack.count());
6548  if (g_includeStack.isEmpty())
6549  {
6550  DBG_CTX((stderr,"Terminating scanner!\n"));
6551  yyterminate();
6552  }
6553  else
6554  {
6555  FileState *fs=g_includeStack.pop();
6556  //fileDefineCache->merge(g_yyFileName,fs->fileName);
6557  YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
6559  preYY_delete_buffer(oldBuf );
6560  g_yyLineNr = fs->lineNr;
6561  //preYYin = fs->oldYYin;
6562  g_inputBuf = fs->oldFileBuf;
6563  g_inputBufPos = fs->oldFileBufPos;
6564  setFileName(fs->fileName);
6565  DBG_CTX((stderr,"######## FileName %s\n",g_yyFileName.data()));
6566 
6567  // Deal with file changes due to
6568  // #include's within { .. } blocks
6569  QCString lineStr(15+g_yyFileName.length());
6570  lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
6571  outputArray(lineStr.data(),lineStr.length());
6572 
6573  delete fs; fs=0;
6574  }
6575  }
6576  YY_BREAK
6577 case 182:
6578 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
6579 (yy_c_buf_p) = yy_cp = yy_bp + 2;
6580 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
6581 #line 2865 "pre.l"
6582 case 183:
6584 #line 2865 "pre.l"
6585 {
6587  {
6588  REJECT;
6589  }
6590  else
6591  {
6592  outputArray(preYYtext,(int)preYYleng);
6593  g_lastCContext=YY_START;
6594  g_commentCount=1;
6595  if (preYYleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
6597  }
6598  }
6599  YY_BREAK
6600 case 184:
6602 #line 2879 "pre.l"
6603 {
6605  {
6606  REJECT;
6607  }
6608  else
6609  {
6610  outputArray(preYYtext,(int)preYYleng);
6611  g_lastCPPContext=YY_START;
6612  if (preYYleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
6614  }
6615  }
6616  YY_BREAK
6617 case 185:
6618 /* rule 185 can match eol */
6620 #line 2892 "pre.l"
6621 {
6622  outputChar('\n');
6623  g_yyLineNr++;
6624  }
6625  YY_BREAK
6626 case 186:
6628 #line 2896 "pre.l"
6629 {
6630  g_expectGuard = FALSE;
6631  outputChar(*preYYtext);
6632  }
6633  YY_BREAK
6634 case 187:
6636 #line 2901 "pre.l"
6637 ECHO;
6638  YY_BREAK
6639 #line 6640 "/nova/app/home/novasoft/doxygen/doxygen-1.8.11/build/generated_src/pre.cpp"
6640 
6641  case YY_END_OF_BUFFER:
6642  {
6643  /* Amount of text matched not including the EOB char. */
6644  int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
6645 
6646  /* Undo the effects of YY_DO_BEFORE_ACTION. */
6647  *yy_cp = (yy_hold_char);
6649 
6650  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
6651  {
6652  /* We're scanning a new file or input source. It's
6653  * possible that this happened because the user
6654  * just pointed preYYin at a new source and called
6655  * preYYlex(). If so, then we have to assure
6656  * consistency between YY_CURRENT_BUFFER and our
6657  * globals. Here is the right place to do so, because
6658  * this is the first action (other than possibly a
6659  * back-up) that will match for the new input source.
6660  */
6661  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
6662  YY_CURRENT_BUFFER_LVALUE->yy_input_file = preYYin;
6663  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
6664  }
6665 
6666  /* Note that here we test for yy_c_buf_p "<=" to the position
6667  * of the first EOB in the buffer, since yy_c_buf_p will
6668  * already have been incremented past the NUL character
6669  * (since all states make transitions on EOB to the
6670  * end-of-buffer state). Contrast this with the test
6671  * in input().
6672  */
6673  if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
6674  { /* This was really a NUL. */
6675  yy_state_type yy_next_state;
6676 
6677  (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
6678 
6679  yy_current_state = yy_get_previous_state( );
6680 
6681  /* Okay, we're now positioned to make the NUL
6682  * transition. We couldn't have
6683  * yy_get_previous_state() go ahead and do it
6684  * for us because it doesn't know how to deal
6685  * with the possibility of jamming (and we don't
6686  * want to build jamming into it because then it
6687  * will run more slowly).
6688  */
6689 
6690  yy_next_state = yy_try_NUL_trans( yy_current_state );
6691 
6692  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6693 
6694  if ( yy_next_state )
6695  {
6696  /* Consume the NUL. */
6697  yy_cp = ++(yy_c_buf_p);
6698  yy_current_state = yy_next_state;
6699  goto yy_match;
6700  }
6701 
6702  else
6703  {
6704  yy_cp = (yy_c_buf_p);
6705  goto yy_find_action;
6706  }
6707  }
6708 
6709  else switch ( yy_get_next_buffer( ) )
6710  {
6711  case EOB_ACT_END_OF_FILE:
6712  {
6714 
6715  if ( preYYwrap( ) )
6716  {
6717  /* Note: because we've taken care in
6718  * yy_get_next_buffer() to have set up
6719  * preYYtext, we can now set up
6720  * yy_c_buf_p so that if some total
6721  * hoser (like flex itself) wants to
6722  * call the scanner after we return the
6723  * YY_NULL, it'll still work - another
6724  * YY_NULL will get returned.
6725  */
6727 
6728  yy_act = YY_STATE_EOF(YY_START);
6729  goto do_action;
6730  }
6731 
6732  else
6733  {
6734  if ( ! (yy_did_buffer_switch_on_eof) )
6735  YY_NEW_FILE;
6736  }
6737  break;
6738  }
6739 
6740  case EOB_ACT_CONTINUE_SCAN:
6741  (yy_c_buf_p) =
6742  (yytext_ptr) + yy_amount_of_matched_text;
6743 
6744  yy_current_state = yy_get_previous_state( );
6745 
6746  yy_cp = (yy_c_buf_p);
6747  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6748  goto yy_match;
6749 
6750  case EOB_ACT_LAST_MATCH:
6751  (yy_c_buf_p) =
6752  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
6753 
6754  yy_current_state = yy_get_previous_state( );
6755 
6756  yy_cp = (yy_c_buf_p);
6757  yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6758  goto yy_find_action;
6759  }
6760  break;
6761  }
6762 
6763  default:
6765  "fatal flex scanner internal error--no action found" );
6766  } /* end of action switch */
6767  } /* end of scanning one token */
6768 } /* end of preYYlex */
6769 
6770 /* yy_get_next_buffer - try to read in a new buffer
6771  *
6772  * Returns a code representing an action:
6773  * EOB_ACT_LAST_MATCH -
6774  * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
6775  * EOB_ACT_END_OF_FILE - end of file
6776  */
6777 static int yy_get_next_buffer (void)
6778 {
6779  register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
6780  register char *source = (yytext_ptr);
6781  register int number_to_move, i;
6782  int ret_val;
6783 
6784  if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
6786  "fatal flex scanner internal error--end of buffer missed" );
6787 
6788  if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
6789  { /* Don't try to fill the buffer, so this is an EOF. */
6790  if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
6791  {
6792  /* We matched a single character, the EOB, so
6793  * treat this as a final EOF.
6794  */
6795  return EOB_ACT_END_OF_FILE;
6796  }
6797 
6798  else
6799  {
6800  /* We matched some text prior to the EOB, first
6801  * process it.
6802  */
6803  return EOB_ACT_LAST_MATCH;
6804  }
6805  }
6806 
6807  /* Try to read more data. */
6808 
6809  /* First move last chars to start of buffer. */
6810  number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
6811 
6812  for ( i = 0; i < number_to_move; ++i )
6813  *(dest++) = *(source++);
6814 
6815  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
6816  /* don't do the read, it's not guaranteed to return an EOF,
6817  * just force an EOF
6818  */
6819  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
6820 
6821  else
6822  {
6823  int num_to_read =
6824  YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
6825 
6826  while ( num_to_read <= 0 )
6827  { /* Not enough room in the buffer - grow it. */
6828 
6830 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
6831 
6832  }
6833 
6834  if ( num_to_read > YY_READ_BUF_SIZE )
6835  num_to_read = YY_READ_BUF_SIZE;
6836 
6837  /* Read in more data. */
6838  YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
6839  (yy_n_chars), (size_t) num_to_read );
6840 
6841  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6842  }
6843 
6844  if ( (yy_n_chars) == 0 )
6845  {
6846  if ( number_to_move == YY_MORE_ADJ )
6847  {
6848  ret_val = EOB_ACT_END_OF_FILE;
6850  }
6851 
6852  else
6853  {
6854  ret_val = EOB_ACT_LAST_MATCH;
6855  YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
6857  }
6858  }
6859 
6860  else
6861  ret_val = EOB_ACT_CONTINUE_SCAN;
6862 
6863  if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
6864  /* Extend the array by 50%, plus the number we really need. */
6865  yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
6866  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) preYYrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
6867  if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
6868  YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
6869  }
6870 
6871  (yy_n_chars) += number_to_move;
6874 
6875  (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
6876 
6877  return ret_val;
6878 }
6879 
6880 /* yy_get_previous_state - get the state just before the EOB char was reached */
6881 
6882  static yy_state_type yy_get_previous_state (void)
6883 {
6884  register yy_state_type yy_current_state;
6885  register char *yy_cp;
6886 
6887  yy_current_state = (yy_start);
6888  yy_current_state += YY_AT_BOL();
6889 
6890  (yy_state_ptr) = (yy_state_buf);
6891  *(yy_state_ptr)++ = yy_current_state;
6892 
6893  for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
6894  {
6895  register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 60);
6896  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
6897  {
6898  yy_current_state = (int) yy_def[yy_current_state];
6899  if ( yy_current_state >= 1316 )
6900  yy_c = yy_meta[(unsigned int) yy_c];
6901  }
6902  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
6903  *(yy_state_ptr)++ = yy_current_state;
6904  }
6905 
6906  return yy_current_state;
6907 }
6908 
6909 /* yy_try_NUL_trans - try to make a transition on the NUL character
6910  *
6911  * synopsis
6912  * next_state = yy_try_NUL_trans( current_state );
6913  */
6914  static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
6915 {
6916  register int yy_is_jam;
6917 
6918  register YY_CHAR yy_c = 60;
6919  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
6920  {
6921  yy_current_state = (int) yy_def[yy_current_state];
6922  if ( yy_current_state >= 1316 )
6923  yy_c = yy_meta[(unsigned int) yy_c];
6924  }
6925  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
6926  yy_is_jam = (yy_current_state == 1315);
6927  if ( ! yy_is_jam )
6928  *(yy_state_ptr)++ = yy_current_state;
6929 
6930  return yy_is_jam ? 0 : yy_current_state;
6931 }
6932 
6933  static void yyunput (int c, register char * yy_bp )
6934 {
6935  register char *yy_cp;
6936 
6937  yy_cp = (yy_c_buf_p);
6938 
6939  /* undo effects of setting up preYYtext */
6940  *yy_cp = (yy_hold_char);
6941 
6942  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
6943  { /* need to shift things up to make room */
6944  /* +2 for EOB chars. */
6945  register int number_to_move = (yy_n_chars) + 2;
6946  register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
6947  YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
6948  register char *source =
6949  &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
6950 
6951  while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
6952  *--dest = *--source;
6953 
6954  yy_cp += (int) (dest - source);
6955  yy_bp += (int) (dest - source);
6956  YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
6957  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
6958 
6959  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
6960  YY_FATAL_ERROR( "flex scanner push-back overflow" );
6961  }
6962 
6963  *--yy_cp = (char) c;
6964 
6965  (yytext_ptr) = yy_bp;
6966  (yy_hold_char) = *yy_cp;
6967  (yy_c_buf_p) = yy_cp;
6968 }
6969 
6970 #ifndef YY_NO_INPUT
6971 #ifdef __cplusplus
6972  static int yyinput (void)
6973 #else
6974  static int input (void)
6975 #endif
6976 
6977 {
6978  int c;
6979 
6980  *(yy_c_buf_p) = (yy_hold_char);
6981 
6982  if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
6983  {
6984  /* yy_c_buf_p now points to the character we want to return.
6985  * If this occurs *before* the EOB characters, then it's a
6986  * valid NUL; if not, then we've hit the end of the buffer.
6987  */
6988  if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
6989  /* This was really a NUL. */
6990  *(yy_c_buf_p) = '\0';
6991 
6992  else
6993  { /* need more input */
6994  int offset = (yy_c_buf_p) - (yytext_ptr);
6995  ++(yy_c_buf_p);
6996 
6997  switch ( yy_get_next_buffer( ) )
6998  {
6999  case EOB_ACT_LAST_MATCH:
7000  /* This happens because yy_g_n_b()
7001  * sees that we've accumulated a
7002  * token and flags that we need to
7003  * try matching the token before
7004  * proceeding. But for input(),
7005  * there's no matching to consider.
7006  * So convert the EOB_ACT_LAST_MATCH
7007  * to EOB_ACT_END_OF_FILE.
7008  */
7009 
7010  /* Reset buffer status. */
7012 
7013  /*FALLTHROUGH*/
7014 
7015  case EOB_ACT_END_OF_FILE:
7016  {
7017  if ( preYYwrap( ) )
7018  return EOF;
7019 
7020  if ( ! (yy_did_buffer_switch_on_eof) )
7021  YY_NEW_FILE;
7022 #ifdef __cplusplus
7023  return yyinput();
7024 #else
7025  return input();
7026 #endif
7027  }
7028 
7029  case EOB_ACT_CONTINUE_SCAN:
7030  (yy_c_buf_p) = (yytext_ptr) + offset;
7031  break;
7032  }
7033  }
7034  }
7035 
7036  c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
7037  *(yy_c_buf_p) = '\0'; /* preserve preYYtext */
7038  (yy_hold_char) = *++(yy_c_buf_p);
7039 
7040  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
7041 
7042  return c;
7043 }
7044 #endif /* ifndef YY_NO_INPUT */
7045 
7046 /** Immediately switch to a different input stream.
7047  * @param input_file A readable stream.
7048  *
7049  * @note This function does not reset the start condition to @c INITIAL .
7050  */
7051  void preYYrestart (FILE * input_file )
7052 {
7053 
7054  if ( ! YY_CURRENT_BUFFER ){
7058  }
7059 
7060  preYY_init_buffer(YY_CURRENT_BUFFER,input_file );
7062 }
7063 
7064 /** Switch to a different input buffer.
7065  * @param new_buffer The new input buffer.
7066  *
7067  */
7068  void preYY_switch_to_buffer (YY_BUFFER_STATE new_buffer )
7069 {
7070 
7071  /* TODO. We should be able to replace this entire function body
7072  * with
7073  * preYYpop_buffer_state();
7074  * preYYpush_buffer_state(new_buffer);
7075  */
7077  if ( YY_CURRENT_BUFFER == new_buffer )
7078  return;
7079 
7080  if ( YY_CURRENT_BUFFER )
7081  {
7082  /* Flush out information for old buffer. */
7083  *(yy_c_buf_p) = (yy_hold_char);
7084  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
7085  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
7086  }
7087 
7088  YY_CURRENT_BUFFER_LVALUE = new_buffer;
7090 
7091  /* We don't actually know whether we did this switch during
7092  * EOF (preYYwrap()) processing, but the only time this flag
7093  * is looked at is after preYYwrap() is called, so it's safe
7094  * to go ahead and always set it.
7095  */
7097 }
7098 
7099 static void preYY_load_buffer_state (void)
7100 {
7101  (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
7102  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
7103  preYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
7104  (yy_hold_char) = *(yy_c_buf_p);
7105 }
7106 
7107 /** Allocate and initialize an input buffer state.
7108  * @param file A readable stream.
7109  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
7110  *
7111  * @return the allocated buffer state.
7112  */
7113  YY_BUFFER_STATE preYY_create_buffer (FILE * file, int size )
7114 {
7115  YY_BUFFER_STATE b;
7116 
7117  b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state ) );
7118  if ( ! b )
7119  YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" );
7120 
7121  b->yy_buf_size = size;
7122 
7123  /* yy_ch_buf has to be 2 characters longer than the size given because
7124  * we need to put in 2 end-of-buffer characters.
7125  */
7126  b->yy_ch_buf = (char *) preYYalloc(b->yy_buf_size + 2 );
7127  if ( ! b->yy_ch_buf )
7128  YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" );
7129 
7130  b->yy_is_our_buffer = 1;
7131 
7132  preYY_init_buffer(b,file );
7133 
7134  return b;
7135 }
7136 
7137 /** Destroy the buffer.
7138  * @param b a buffer created with preYY_create_buffer()
7139  *
7140  */
7141  void preYY_delete_buffer (YY_BUFFER_STATE b )
7142 {
7143 
7144  if ( ! b )
7145  return;
7146 
7147  if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
7149 
7150  if ( b->yy_is_our_buffer )
7151  preYYfree((void *) b->yy_ch_buf );
7152 
7153  preYYfree((void *) b );
7154 }
7155 
7156 /* Initializes or reinitializes a buffer.
7157  * This function is sometimes called more than once on the same buffer,
7158  * such as during a preYYrestart() or at EOF.
7159  */
7160  static void preYY_init_buffer (YY_BUFFER_STATE b, FILE * file )
7161 
7162 {
7163  int oerrno = errno;
7164 
7165  preYY_flush_buffer(b );
7166 
7167  b->yy_input_file = file;
7168  b->yy_fill_buffer = 1;
7169 
7170  /* If b is the current buffer, then preYY_init_buffer was _probably_
7171  * called from preYYrestart() or through yy_get_next_buffer.
7172  * In that case, we don't want to reset the lineno or column.
7173  */
7174  if (b != YY_CURRENT_BUFFER){
7175  b->yy_bs_lineno = 1;
7176  b->yy_bs_column = 0;
7177  }
7178 
7179  b->yy_is_interactive = 0;
7180 
7181  errno = oerrno;
7182 }
7183 
7184 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
7185  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
7186  *
7187  */
7188  void preYY_flush_buffer (YY_BUFFER_STATE b )
7189 {
7190  if ( ! b )
7191  return;
7192 
7193  b->yy_n_chars = 0;
7194 
7195  /* We always need two end-of-buffer characters. The first causes
7196  * a transition to the end-of-buffer state. The second causes
7197  * a jam in that state.
7198  */
7201 
7202  b->yy_buf_pos = &b->yy_ch_buf[0];
7203 
7204  b->yy_at_bol = 1;
7206 
7207  if ( b == YY_CURRENT_BUFFER )
7209 }
7210 
7211 /** Pushes the new state onto the stack. The new state becomes
7212  * the current state. This function will allocate the stack
7213  * if necessary.
7214  * @param new_buffer The new state.
7215  *
7216  */
7217 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
7218 {
7219  if (new_buffer == NULL)
7220  return;
7221 
7223 
7224  /* This block is copied from preYY_switch_to_buffer. */
7225  if ( YY_CURRENT_BUFFER )
7226  {
7227  /* Flush out information for old buffer. */
7228  *(yy_c_buf_p) = (yy_hold_char);
7229  YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
7230  YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
7231  }
7232 
7233  /* Only push if top exists. Otherwise, replace top. */
7234  if (YY_CURRENT_BUFFER)
7235  (yy_buffer_stack_top)++;
7236  YY_CURRENT_BUFFER_LVALUE = new_buffer;
7237 
7238  /* copied from preYY_switch_to_buffer. */
7241 }
7242 
7243 /** Removes and deletes the top of the stack, if present.
7244  * The next element becomes the new top.
7245  *
7246  */
7247 void preYYpop_buffer_state (void)
7248 {
7249  if (!YY_CURRENT_BUFFER)
7250  return;
7251 
7253  YY_CURRENT_BUFFER_LVALUE = NULL;
7254  if ((yy_buffer_stack_top) > 0)
7255  --(yy_buffer_stack_top);
7256 
7257  if (YY_CURRENT_BUFFER) {
7260  }
7261 }
7262 
7263 /* Allocates the stack if it does not exist.
7264  * Guarantees space for at least one push.
7265  */
7266 static void preYYensure_buffer_stack (void)
7267 {
7268  int num_to_alloc;
7269 
7270  if (!(yy_buffer_stack)) {
7271 
7272  /* First allocation is just for 2 elements, since we don't know if this
7273  * scanner will even need a stack. We use 2 instead of 1 to avoid an
7274  * immediate realloc on the next call.
7275  */
7276  num_to_alloc = 1;
7278  (num_to_alloc * sizeof(struct yy_buffer_state*)
7279  );
7280  if ( ! (yy_buffer_stack) )
7281  YY_FATAL_ERROR( "out of dynamic memory in preYYensure_buffer_stack()" );
7282 
7283  memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
7284 
7285  (yy_buffer_stack_max) = num_to_alloc;
7286  (yy_buffer_stack_top) = 0;
7287  return;
7288  }
7289 
7290  if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
7291 
7292  /* Increase the buffer to prepare for a possible push. */
7293  int grow_size = 8 /* arbitrary grow size */;
7294 
7295  num_to_alloc = (yy_buffer_stack_max) + grow_size;
7297  ((yy_buffer_stack),
7298  num_to_alloc * sizeof(struct yy_buffer_state*)
7299  );
7300  if ( ! (yy_buffer_stack) )
7301  YY_FATAL_ERROR( "out of dynamic memory in preYYensure_buffer_stack()" );
7302 
7303  /* zero only the new slots.*/
7304  memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
7305  (yy_buffer_stack_max) = num_to_alloc;
7306  }
7307 }
7308 
7309 /** Setup the input buffer state to scan directly from a user-specified character buffer.
7310  * @param base the character buffer
7311  * @param size the size in bytes of the character buffer
7312  *
7313  * @return the newly allocated buffer state object.
7314  */
7315 YY_BUFFER_STATE preYY_scan_buffer (char * base, yy_size_t size )
7316 {
7317  YY_BUFFER_STATE b;
7318 
7319  if ( size < 2 ||
7320  base[size-2] != YY_END_OF_BUFFER_CHAR ||
7321  base[size-1] != YY_END_OF_BUFFER_CHAR )
7322  /* They forgot to leave room for the EOB's. */
7323  return 0;
7324 
7325  b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state ) );
7326  if ( ! b )
7327  YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_buffer()" );
7328 
7329  b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
7330  b->yy_buf_pos = b->yy_ch_buf = base;
7331  b->yy_is_our_buffer = 0;
7332  b->yy_input_file = 0;
7333  b->yy_n_chars = b->yy_buf_size;
7334  b->yy_is_interactive = 0;
7335  b->yy_at_bol = 1;
7336  b->yy_fill_buffer = 0;
7338 
7340 
7341  return b;
7342 }
7343 
7344 /** Setup the input buffer state to scan a string. The next call to preYYlex() will
7345  * scan from a @e copy of @a str.
7346  * @param yystr a NUL-terminated string to scan
7347  *
7348  * @return the newly allocated buffer state object.
7349  * @note If you want to scan bytes that may contain NUL values, then use
7350  * preYY_scan_bytes() instead.
7351  */
7352 YY_BUFFER_STATE preYY_scan_string (yyconst char * yystr )
7353 {
7354 
7355  return preYY_scan_bytes(yystr,strlen(yystr) );
7356 }
7357 
7358 /** Setup the input buffer state to scan the given bytes. The next call to preYYlex() will
7359  * scan from a @e copy of @a bytes.
7360  * @param bytes the byte buffer to scan
7361  * @param len the number of bytes in the buffer pointed to by @a bytes.
7362  *
7363  * @return the newly allocated buffer state object.
7364  */
7365 YY_BUFFER_STATE preYY_scan_bytes (yyconst char * yybytes, int _yybytes_len )
7366 {
7367  YY_BUFFER_STATE b;
7368  char *buf;
7369  yy_size_t n;
7370  int i;
7371 
7372  /* Get memory for full buffer, including space for trailing EOB's. */
7373  n = _yybytes_len + 2;
7374  buf = (char *) preYYalloc(n );
7375  if ( ! buf )
7376  YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_bytes()" );
7377 
7378  for ( i = 0; i < _yybytes_len; ++i )
7379  buf[i] = yybytes[i];
7380 
7381  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
7382 
7383  b = preYY_scan_buffer(buf,n );
7384  if ( ! b )
7385  YY_FATAL_ERROR( "bad buffer in preYY_scan_bytes()" );
7386 
7387  /* It's okay to grow etc. this buffer, and we should throw it
7388  * away when we're done.
7389  */
7390  b->yy_is_our_buffer = 1;
7391 
7392  return b;
7393 }
7394 
7395 #ifndef YY_EXIT_FAILURE
7396 #define YY_EXIT_FAILURE 2
7397 #endif
7398 
7399 static void yy_fatal_error (yyconst char* msg )
7400 {
7401  (void) fprintf( stderr, "%s\n", msg );
7402  exit( YY_EXIT_FAILURE );
7403 }
7404 
7405 /* Redefine yyless() so it works in section 3 code. */
7406 
7407 #undef yyless
7408 #define yyless(n) \
7409  do \
7410  { \
7411  /* Undo effects of setting up preYYtext. */ \
7412  int yyless_macro_arg = (n); \
7413  YY_LESS_LINENO(yyless_macro_arg);\
7414  preYYtext[preYYleng] = (yy_hold_char); \
7415  (yy_c_buf_p) = preYYtext + yyless_macro_arg; \
7416  (yy_hold_char) = *(yy_c_buf_p); \
7417  *(yy_c_buf_p) = '\0'; \
7418  preYYleng = yyless_macro_arg; \
7419  } \
7420  while ( 0 )
7421 
7422 /* Accessor methods (get/set functions) to struct members. */
7423 
7424 /** Get the current line number.
7425  *
7426  */
7427 int preYYget_lineno (void)
7428 {
7429 
7430  return preYYlineno;
7431 }
7432 
7433 /** Get the input stream.
7434  *
7435  */
7436 FILE *preYYget_in (void)
7437 {
7438  return preYYin;
7439 }
7440 
7441 /** Get the output stream.
7442  *
7443  */
7444 FILE *preYYget_out (void)
7445 {
7446  return preYYout;
7447 }
7448 
7449 /** Get the length of the current token.
7450  *
7451  */
7452 int preYYget_leng (void)
7453 {
7454  return preYYleng;
7455 }
7456 
7457 /** Get the current token.
7458  *
7459  */
7460 
7461 char *preYYget_text (void)
7462 {
7463  return preYYtext;
7464 }
7465 
7466 /** Set the current line number.
7467  * @param line_number
7468  *
7469  */
7470 void preYYset_lineno (int line_number )
7471 {
7472 
7473  preYYlineno = line_number;
7474 }
7475 
7476 /** Set the input stream. This does not discard the current
7477  * input buffer.
7478  * @param in_str A readable stream.
7479  *
7480  * @see preYY_switch_to_buffer
7481  */
7482 void preYYset_in (FILE * in_str )
7483 {
7484  preYYin = in_str ;
7485 }
7486 
7487 void preYYset_out (FILE * out_str )
7488 {
7489  preYYout = out_str ;
7490 }
7491 
7492 int preYYget_debug (void)
7493 {
7494  return preYY_flex_debug;
7495 }
7496 
7497 void preYYset_debug (int bdebug )
7498 {
7499  preYY_flex_debug = bdebug ;
7500 }
7501 
7502 static int yy_init_globals (void)
7503 {
7504  /* Initialization is the same as for the non-reentrant scanner.
7505  * This function is called from preYYlex_destroy(), so don't allocate here.
7506  */
7507 
7508  (yy_buffer_stack) = 0;
7509  (yy_buffer_stack_top) = 0;
7510  (yy_buffer_stack_max) = 0;
7511  (yy_c_buf_p) = (char *) 0;
7512  (yy_init) = 0;
7513  (yy_start) = 0;
7514 
7515  (yy_state_buf) = 0;
7516  (yy_state_ptr) = 0;
7517  (yy_full_match) = 0;
7518  (yy_lp) = 0;
7519 
7520 /* Defined in main.c */
7521 #ifdef YY_STDINIT
7522  preYYin = stdin;
7523  preYYout = stdout;
7524 #else
7525  preYYin = (FILE *) 0;
7526  preYYout = (FILE *) 0;
7527 #endif
7528 
7529  /* For future reference: Set errno on error, since we are called by
7530  * preYYlex_init()
7531  */
7532  return 0;
7533 }
7534 
7535 /* preYYlex_destroy is for both reentrant and non-reentrant scanners. */
7536 int preYYlex_destroy (void)
7537 {
7538 
7539  /* Pop the buffer stack, destroying each element. */
7540  while(YY_CURRENT_BUFFER){
7542  YY_CURRENT_BUFFER_LVALUE = NULL;
7544  }
7545 
7546  /* Destroy the stack itself. */
7547  preYYfree((yy_buffer_stack) );
7548  (yy_buffer_stack) = NULL;
7549 
7550  preYYfree ( (yy_state_buf) );
7551  (yy_state_buf) = NULL;
7552 
7553  /* Reset the globals. This is important in a non-reentrant scanner so the next time
7554  * preYYlex() is called, initialization will occur. */
7555  yy_init_globals( );
7556 
7557  return 0;
7558 }
7559 
7560 /*
7561  * Internal utility routines.
7562  */
7563 
7564 #ifndef yytext_ptr
7565 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
7566 {
7567  register int i;
7568  for ( i = 0; i < n; ++i )
7569  s1[i] = s2[i];
7570 }
7571 #endif
7572 
7573 #ifdef YY_NEED_STRLEN
7574 static int yy_flex_strlen (yyconst char * s )
7575 {
7576  register int n;
7577  for ( n = 0; s[n]; ++n )
7578  ;
7579 
7580  return n;
7581 }
7582 #endif
7583 
7584 void *preYYalloc (yy_size_t size )
7585 {
7586  return (void *) malloc( size );
7587 }
7588 
7589 void *preYYrealloc (void * ptr, yy_size_t size )
7590 {
7591  /* The cast to (char *) in the following accommodates both
7592  * implementations that use char* generic pointers, and those
7593  * that use void* generic pointers. It works with the latter
7594  * because both ANSI C and C++ allow castless assignment from
7595  * any pointer type to void*, and deal with argument conversions
7596  * as though doing an assignment.
7597  */
7598  return (void *) realloc( (char *) ptr, size );
7599 }
7600 
7601 void preYYfree (void * ptr )
7602 {
7603  free( (char *) ptr ); /* see preYYrealloc() for (char *) cast */
7604 }
7605 
7606 #define YYTABLES_NAME "yytables"
7607 
7608 #line 2901 "pre.l"
7609 
7610 
7611 
7612 /*@ ----------------------------------------------------------------------------
7613  */
7614 
7615 static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
7616 {
7617  //printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
7618  if (pos<expr.length())
7619  {
7620  //printf("%c=expr()\n",expr.at(pos));
7621  return expr.at(pos++);
7622  }
7623  else if (rest && !rest->isEmpty())
7624  {
7625  int cc=rest->at(0);
7626  *rest=rest->right(rest->length()-1);
7627  //printf("%c=rest\n",cc);
7628  return cc;
7629  }
7630  else
7631  {
7632  int cc=yyinput();
7633  //printf("%d=yyinput() %d\n",cc,EOF);
7634  return cc;
7635  }
7636 }
7637 
7638 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
7639 {
7640  //printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
7641  if (pos<expr.length())
7642  {
7643  //printf("%c=expr()\n",expr.at(pos));
7644  return expr.at(pos);
7645  }
7646  else if (rest && !rest->isEmpty())
7647  {
7648  int cc=rest->at(0);
7649  //printf("%c=rest\n",cc);
7650  return cc;
7651  }
7652  else
7653  {
7654  int cc=yyinput();
7655  returnCharToStream(cc);
7656  //unput((char)cc);
7657  //printf("%c=yyinput()\n",cc);
7658  return cc;
7659  }
7660 }
7661 
7662 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
7663 {
7664  //printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
7665  if (pos<expr.length())
7666  {
7667  pos++;
7668  }
7669  else if (rest)
7670  {
7671  //printf("Prepending to rest!\n");
7672  char cs[2];cs[0]=c;cs[1]='\0';
7673  rest->prepend(cs);
7674  }
7675  else
7676  {
7677  //unput(c);
7678  returnCharToStream(c);
7679  }
7680  //printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
7681 }
7682 
7683 void addSearchDir(const char *dir)
7684 {
7685  QFileInfo fi(dir);
7686  if (fi.isDir()) g_pathList->append(fi.absFilePath().utf8());
7687 }
7688 
7689 void initPreprocessor()
7690 {
7691  g_pathList = new QStrList;
7692  addSearchDir(".");
7693  g_expandedDict = new DefineDict(17);
7694 }
7695 
7696 void cleanUpPreprocessor()
7697 {
7698  delete g_expandedDict; g_expandedDict=0;
7699  delete g_pathList; g_pathList=0;
7701 }
7702 
7703 
7704 void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
7705 {
7706  printlex(preYY_flex_debug, TRUE, __FILE__, fileName);
7707  uint orgOffset=output.curPos();
7708  //printf("##########################\n%s\n####################\n",
7709  // input.data());
7710 
7711  g_macroExpansion = Config_getBool("MACRO_EXPANSION");
7712  g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF");
7713  g_skip=FALSE;
7714  g_curlyCount=0;
7715  g_nospaces=FALSE;
7716  g_inputBuf=&input;
7717  g_inputBufPos=0;
7718  g_outputBuf=&output;
7719  g_includeStack.setAutoDelete(TRUE);
7720  g_includeStack.clear();
7721  g_expandedDict->setAutoDelete(FALSE);
7722  g_expandedDict->clear();
7723  g_condStack.setAutoDelete(TRUE);
7724  g_condStack.clear();
7725  //g_fileDefineDict->clear();
7726 
7727  setFileName(fileName);
7728  g_inputFileDef = g_yyFileDef;
7729  DefineManager::instance().startContext(g_yyFileName);
7730 
7731  static bool firstTime=TRUE;
7732  if (firstTime)
7733  {
7734  // add predefined macros
7735  char *defStr;
7736  QStrList &predefList = Config_getList("PREDEFINED");
7737  QStrListIterator sli(predefList);
7738  for (sli.toFirst();(defStr=sli.current());++sli)
7739  {
7740  QCString ds = defStr;
7741  int i_equals=ds.find('=');
7742  int i_obrace=ds.find('(');
7743  int i_cbrace=ds.find(')');
7744  bool nonRecursive = i_equals>0 && ds.at(i_equals-1)==':';
7745 
7746  if (i_obrace==0) continue; // no define name
7747 
7748  if (i_obrace<i_equals && i_cbrace<i_equals &&
7749  i_obrace!=-1 && i_cbrace!=-1 &&
7750  i_obrace<i_cbrace
7751  ) // predefined function macro definition
7752  {
7753  //printf("predefined function macro '%s'\n",defStr);
7754  QRegExp reId("[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*"); // regexp matching an id
7755  QDict<int> argDict(17);
7756  argDict.setAutoDelete(TRUE);
7757  int i=i_obrace+1,p,l,count=0;
7758  // gather the formal arguments in a dictionary
7759  while (i<i_cbrace && (p=reId.match(ds,i,&l)))
7760  {
7761  if (l>0) // see bug375037
7762  {
7763  argDict.insert(ds.mid(p,l),new int(count++));
7764  i=p+l;
7765  }
7766  else
7767  {
7768  i++;
7769  }
7770  }
7771  // strip definition part
7772  QCString tmp=ds.right(ds.length()-i_equals-1);
7773  QCString definition;
7774  i=0;
7775  // substitute all occurrences of formal arguments by their
7776  // corresponding markers
7777  while ((p=reId.match(tmp,i,&l))!=-1)
7778  {
7779  if (p>i) definition+=tmp.mid(i,p-i);
7780  int *argIndex;
7781  if ((argIndex=argDict[tmp.mid(p,l)])!=0)
7782  {
7783  QCString marker;
7784  marker.sprintf(" @%d ",*argIndex);
7785  definition+=marker;
7786  }
7787  else
7788  {
7789  definition+=tmp.mid(p,l);
7790  }
7791  i=p+l;
7792  }
7793  if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i);
7794 
7795  // add define definition to the dictionary of defines for this file
7796  QCString dname = ds.left(i_obrace);
7797  if (!dname.isEmpty())
7798  {
7799  Define *def = new Define;
7800  def->name = dname;
7801  def->definition = definition;
7802  def->nargs = count;
7803  def->isPredefined = TRUE;
7804  def->nonRecursive = nonRecursive;
7805  def->fileDef = g_yyFileDef;
7806  def->fileName = fileName;
7807  DefineManager::instance().addDefine(g_yyFileName,def);
7808  }
7809 
7810  //printf("#define `%s' `%s' #nargs=%d\n",
7811  // def->name.data(),def->definition.data(),def->nargs);
7812  }
7813  else if ((i_obrace==-1 || i_obrace>i_equals) &&
7814  (i_cbrace==-1 || i_cbrace>i_equals) &&
7815  !ds.isEmpty() && (int)ds.length()>i_equals
7816  ) // predefined non-function macro definition
7817  {
7818  //printf("predefined normal macro '%s'\n",defStr);
7819  Define *def = new Define;
7820  if (i_equals==-1) // simple define without argument
7821  {
7822  def->name = ds;
7823  def->definition = "1"; // substitute occurrences by 1 (true)
7824  }
7825  else // simple define with argument
7826  {
7827  int ine=i_equals - (nonRecursive ? 1 : 0);
7828  def->name = ds.left(ine);
7829  def->definition = ds.right(ds.length()-i_equals-1);
7830  }
7831  if (!def->name.isEmpty())
7832  {
7833  def->nargs = -1;
7834  def->isPredefined = TRUE;
7835  def->nonRecursive = nonRecursive;
7836  def->fileDef = g_yyFileDef;
7837  def->fileName = fileName;
7838  DefineManager::instance().addDefine(g_yyFileName,def);
7839  }
7840  else
7841  {
7842  delete def;
7843  }
7844 
7845  //printf("#define `%s' `%s' #nargs=%d\n",
7846  // def->name.data(),def->definition.data(),def->nargs);
7847  }
7848  }
7849  //firstTime=FALSE;
7850  }
7851 
7852  g_yyLineNr = 1;
7853  g_yyColNr = 1;
7854  g_level = 0;
7855  g_ifcount = 0;
7856 
7857  BEGIN( Start );
7858 
7859  g_expectGuard = guessSection(fileName)==Entry::HEADER_SEC;
7860  g_guardName.resize(0);
7861  g_lastGuardName.resize(0);
7862  g_guardExpr.resize(0);
7863 
7864  preYYlex();
7865  g_lexInit=TRUE;
7866 
7867  while (!g_condStack.isEmpty())
7868  {
7869  CondCtx *ctx = g_condStack.pop();
7870  QCString sectionInfo = " ";
7871  if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data());
7872  warn(fileName,ctx->lineNr,"Conditional section%sdoes not have "
7873  "a corresponding \\endcond command within this file.",sectionInfo.data());
7874  delete ctx;
7875  }
7876  // make sure we don't extend a \cond with missing \endcond over multiple files (see bug 624829)
7878 
7879  // remove locally defined macros so they can be redefined in another source file
7880  //if (g_fileDefineDict->count()>0)
7881  //{
7882  // QDictIterator<Define> di(*g_fileDefineDict);
7883  // Define *d;
7884  // for (di.toFirst();(d=di.current());++di)
7885  // {
7886  // g_globalDefineDict->remove(di.currentKey());
7887  // }
7888  // g_fileDefineDict->clear();
7889  //}
7890 
7892  {
7893  char *orgPos=output.data()+orgOffset;
7894  char *newPos=output.data()+output.curPos();
7895  Debug::print(Debug::Preprocessor,0,"Preprocessor output (size: %d bytes):\n",newPos-orgPos);
7896  int line=1;
7897  Debug::print(Debug::Preprocessor,0,"---------\n00001 ");
7898  while (orgPos<newPos)
7899  {
7900  putchar(*orgPos);
7901  if (*orgPos=='\n') Debug::print(Debug::Preprocessor,0,"%05d ",++line);
7902  orgPos++;
7903  }
7904  Debug::print(Debug::Preprocessor,0,"\n---------\n");
7905  if (DefineManager::instance().defineContext().count()>0)
7906  {
7907  Debug::print(Debug::Preprocessor,0,"Macros accessible in this file:\n");
7908  Debug::print(Debug::Preprocessor,0,"---------\n");
7909  QDictIterator<Define> di(DefineManager::instance().defineContext());
7910  Define *def;
7911  for (di.toFirst();(def=di.current());++di)
7912  {
7914  }
7915  Debug::print(Debug::Preprocessor,0,"\n---------\n");
7916  }
7917  else
7918  {
7919  Debug::print(Debug::Preprocessor,0,"No macros accessible in this file.\n");
7920  }
7921  }
7923  printlex(preYY_flex_debug, FALSE, __FILE__, fileName);
7924 }
7925 
7926 void preFreeScanner()
7927 {
7928 #if defined(YY_FLEX_SUBMINOR_VERSION)
7929  if (g_lexInit)
7930  {
7931  preYYlex_destroy();
7932  }
7933 #endif
7934 }
7935 
7936 #if !defined(YY_FLEX_SUBMINOR_VERSION)
7937 extern "C" { // some bogus code to keep the compiler happy
7938 // int preYYwrap() { return 1 ; }
7939  void preYYdummy() { yy_flex_realloc(0,0); }
7940 }
7941 #endif
7942 
7943 
Singleton that manages the defines available while proprocessing files.
Definition: pre.cpp:2595
static QCString name
Definition: declinfo.cpp:673
static FileDef * g_inputFileDef
Definition: pre.cpp:2845
#define YY_END_OF_BUFFER_CHAR
Definition: pre.cpp:159
static yy_state_type * yy_state_ptr
Definition: pre.cpp:2486
void setAutoDelete(bool del)
Definition: qstack.h:55
DefinesPerFile * find(const char *fileName) const
Definition: pre.cpp:2770
FILE * preYYget_in(void)
char * data() const
Definition: bufstr.h:81
bool resize(uint newlen)
Definition: qcstring.h:225
Q_EXPORT int qstrncmp(const char *str1, const char *str2, uint len)
Definition: qcstring.h:101
static MemberNameSDict * functionNameSDict
Definition: doxygen.h:116
FILE * preYYout
Definition: pre.cpp:359
#define Command
Definition: pre.cpp:4271
void setArgumentList(ArgumentList *al)
Definition: memberdef.cpp:3876
bool portable_isAbsolutePath(const char *fileName)
Definition: portable.cpp:434
void preprocessFile(const char *fileName, BufStr &input, BufStr &output)
int lineNr
Definition: define.h:42
static QCString g_blockName
Definition: pre.cpp:2881
static char * yy_c_buf_p
Definition: pre.cpp:297
char * yy_buf_pos
Definition: code.cpp:213
YY_BUFFER_STATE preYY_scan_string(yyconst char *yy_str)
FILE * yy_input_file
Definition: code.cpp:210
static int g_ifcount
Definition: pre.cpp:2846
short int flex_int16_t
Definition: code.cpp:71
static bool replaceFunctionMacro(const QCString &expr, QCString *rest, int pos, int &len, const Define *def, QCString &result)
Definition: pre.cpp:3266
static yyconst flex_int16_t yy_chk[6394]
Definition: pre.cpp:1775
int yy_n_chars
Definition: code.cpp:223
YY_BUFFER_STATE preYY_scan_bytes(yyconst char *bytes, int len)
YY_BUFFER_STATE preYY_create_buffer(FILE *file, int size)
static void startCondSection(const char *sectId)
Definition: pre.cpp:4147
void setDefinition(const char *d)
Definition: memberdef.cpp:4619
This class represents an function or template argument list.
Definition: arguments.h:82
void preYYset_out(FILE *out_str)
static BufStr * g_outputBuf
Definition: pre.cpp:2863
QCString stripWhiteSpace() const
Definition: qcstring.cpp:295
Define * isDefined(const char *name) const
Definition: pre.cpp:2742
static bool gatherDefines
Definition: doxygen.h:147
#define SkipCPPComment
Definition: pre.cpp:4290
void insertMember(MemberDef *md)
Definition: filedef.cpp:1100
static QCString escapeAt(const char *text)
Definition: pre.cpp:4184
BufStr fileBuf
Definition: pre.cpp:2585
short int flex_int16_t
Definition: pre.cpp:71
DefineManager()
Definition: pre.cpp:2777
static int g_defArgs
Definition: pre.cpp:2850
unsigned int flex_uint32_t
Definition: pre.cpp:75
unsigned short int flex_uint16_t
Definition: pre.cpp:74
bool readInputFile(const char *fileName, BufStr &inBuf, bool filter, bool isSourceCode)
read a file name fileName and optionally filter and transcode it
Definition: util.cpp:7673
int preYYget_lineno(void)
static QCString g_yyFileName
Definition: pre.cpp:2843
#define CopyString
Definition: pre.cpp:4276
#define SkipCond
Definition: pre.cpp:4304
#define YY_DO_BEFORE_ACTION
Definition: pre.cpp:378
static QCString result
bool isEmpty() const
Definition: qcstring.h:189
static QCString g_defLitText
Definition: pre.cpp:2853
The QRegExp class provides pattern matching using regular expressions or wildcards.
Definition: qregexp.h:46
static bool g_expandOnlyPredef
Definition: pre.cpp:2877
static QCString g_defArgsStr
Definition: pre.cpp:2854
void msg(const char *fmt,...)
Definition: message.cpp:107
static bool g_insideCS
Definition: pre.cpp:2885
register char * yy_cp
Definition: pre.cpp:4484
#define SkipCComment
Definition: pre.cpp:4286
#define YY_READ_BUF_SIZE
Definition: pre.cpp:4383
static QCString stringize(const QCString &s)
Definition: pre.cpp:3133
bool computeExpression(const QCString &expr)
Definition: pre.cpp:3857
static void expandExpression(QCString &expr, QCString *rest, int pos)
Definition: pre.cpp:3565
void printlex(int dbg, bool enter, const char *lexName, const char *fileName)
Definition: message.cpp:242
int preYYlex_destroy(void)
static FileDef * g_yyFileDef
Definition: pre.cpp:2844
int yy_fill_buffer
Definition: code.cpp:250
int flex_int32_t
Definition: pre.cpp:72
uint length() const
Definition: qcstring.h:195
static FileNameDict * includeNameDict
Definition: doxygen.h:105
int contains(char c, bool cs=TRUE) const
Definition: qcstring.cpp:153
void append(const type *d)
Definition: qlist.h:73
static DefineDict * g_expandedDict
Definition: pre.cpp:2866
FILE * preYYget_out(void)
int guessSection(const char *name)
Definition: util.cpp:315
static int yy_lp
Definition: pre.cpp:2488
static void processConcatOperators(QCString &expr)
Definition: pre.cpp:3211
Definition: types.h:26
#define Define
Definition: scanner.cpp:11520
bool resize(uint size)
Definition: qarray.h:69
#define YY_FATAL_ERROR(msg)
Definition: pre.cpp:4445
void startContext(const char *fileName)
Definition: pre.cpp:2654
#define REJECT
Definition: pre.cpp:2494
static void decrLevel()
Definition: pre.cpp:2923
static QStrList * g_pathList
Definition: pre.cpp:2847
type * first()
Definition: qinternallist.h:87
static bool g_lexInit
Definition: pre.cpp:2888
static int yyread(char *buf, int max_size)
Definition: pre.cpp:4221
int columnNr
Definition: define.h:43
static int yy_did_buffer_switch_on_eof
Definition: pre.cpp:304
char & at(uint i) const
Definition: qcstring.h:326
static yyconst flex_int16_t yy_nxt[6394]
Definition: pre.cpp:1067
#define CondLineCpp
Definition: pre.cpp:4303
bool nonRecursive
Definition: define.h:48
static int g_level
Definition: pre.cpp:2857
#define RemoveCComment
Definition: pre.cpp:4291
#define SkipCommand
Definition: pre.cpp:4272
static yyconst flex_int16_t yy_base[1438]
Definition: pre.cpp:743
#define YY_END_OF_BUFFER
Definition: pre.cpp:386
int yy_state_type
Definition: pre.cpp:361
#define DefinedExpr2
Definition: pre.cpp:4295
const bool FALSE
Definition: qglobal.h:370
static char * yy_full_match
Definition: pre.cpp:2487
bool isPredefined
Definition: define.h:47
static constexpr double fs
Definition: Units.h:100
#define preYYwrap(n)
Definition: pre.cpp:354
static int g_lastCPPContext
Definition: pre.cpp:2859
void addSearchDir(const char *dir)
void preYYfree(void *)
#define YY_BREAK
Definition: pre.cpp:4470
Definition: qstack.h:46
static char resolveTrigraph(char c)
Definition: pre.cpp:4199
int yy_bs_lineno
Definition: code.cpp:244
unsigned char YY_CHAR
Definition: pre.cpp:357
static DefineManager & instance()
Definition: pre.cpp:2639
static yyconst flex_int32_t yy_meta[61]
Definition: pre.cpp:733
#define DefineArg
Definition: pre.cpp:4281
static size_t yy_buffer_stack_max
Definition: pre.cpp:273
#define Config_getList(val)
Definition: config.cpp:662
static bool g_macroExpansion
Definition: pre.cpp:2876
Definition: qarray.h:46
static FileNameDict * inputNameDict
Definition: doxygen.h:108
static yy_state_type * yy_state_buf
Definition: pre.cpp:2486
QCString left(uint len) const
Definition: qcstring.cpp:213
#define Start
Definition: pre.cpp:4270
static FileState * findFile(const char *fileName, bool localInclude, bool &alreadyIncluded)
Definition: pre.cpp:3020
void addChar(char c)
Definition: bufstr.h:42
virtual bool isReference() const
static yyconst flex_int32_t yy_ec[256]
Definition: pre.cpp:701
#define YY_MORE_ADJ
Definition: pre.cpp:2506
#define EndImport
Definition: pre.cpp:4279
string dir
int errno
Contains the last error code.
Definition: structcmd.h:53
#define INITIAL
Definition: pre.cpp:4269
int find(char c, int index=0, bool cs=TRUE) const
Definition: qcstring.cpp:41
static int getNextId(const QCString &expr, int p, int *l)
Definition: pre.cpp:3505
void * preYYalloc(yy_size_t)
static DefineManager * theInstance
Definition: pre.cpp:2755
static QCString extractTrailingComment(const char *s)
Definition: pre.cpp:3083
#define YY_BUFFER_NEW
Definition: pre.cpp:254
yy_size_t yy_buf_size
Definition: code.cpp:218
void append(const char *key, const T *d)
Definition: sortdict.h:135
#define yyconst
Definition: pre.cpp:127
static QStrList * l
Definition: config.cpp:1044
uint curPos() const
Definition: bufstr.h:97
int comment
register int yy_act
Definition: pre.cpp:4485
int preYYleng
Definition: pre.cpp:294
void cleanUpPreprocessor()
void preYYset_extra(YY_EXTRA_TYPE user_defined)
Definition: types.h:29
static bool g_skip
Definition: pre.cpp:2883
#define DefineText
Definition: pre.cpp:4282
static QCString g_defText
Definition: pre.cpp:2852
QCString expandMacro(const QCString &name)
Definition: pre.cpp:3872
static bool g_defVarArgs
Definition: pre.cpp:2856
const DefineDict & defineContext() const
Definition: pre.cpp:2750
static yyconst flex_int16_t yy_acclist[1399]
Definition: pre.cpp:394
#define Include
Definition: pre.cpp:4277
static void setCaseDone(bool value)
Definition: pre.cpp:2950
char * preYYget_text(void)
QCString copy() const
Definition: qcstring.h:250
static int g_findDefArgContext
Definition: pre.cpp:2867
bool isFile() const
static void endCondSection()
Definition: pre.cpp:4160
void push(const type *d)
Definition: qstack.h:58
QCString fileName
Definition: pre.cpp:2589
void preYYset_in(FILE *in_str)
QString absFilePath() const
#define QMIN(a, b)
Definition: qglobal.h:391
QDict< DefinesPerFile > m_fileMap
Definition: pre.cpp:2787
#define DefName
Definition: pre.cpp:4280
#define Ifndef
Definition: pre.cpp:4285
static void deleteInstance()
Definition: pre.cpp:2645
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
Definition: StdUtils.h:92
#define ECHO
Definition: pre.cpp:4391
int oldFileBufPos
Definition: pre.cpp:2587
QCString sectionId
static size_t yy_buffer_stack_top
Definition: pre.cpp:272
static QStack< ConfigFileState > includeStack
Definition: config.cpp:1048
YY_BUFFER_STATE bufState
Definition: pre.cpp:2588
const char * data() const
Definition: qstring.h:542
#define EOB_ACT_END_OF_FILE
Definition: pre.cpp:180
#define CondLineC
Definition: pre.cpp:4302
#define IgnoreLine
Definition: pre.cpp:4299
static int yy_full_lp
Definition: pre.cpp:2490
static void outputChar(char c)
Definition: pre.cpp:3960
static int * yy_full_state
Definition: pre.cpp:2491
#define BEGIN
Definition: pre.cpp:144
#define ArgCopyCComment
Definition: pre.cpp:4287
#define DefinedExpr1
Definition: pre.cpp:4294
type * current() const
static YY_BUFFER_STATE * yy_buffer_stack
Definition: pre.cpp:274
const double e
int yy_bs_column
Definition: code.cpp:245
virtual ~DefineManager()
Definition: pre.cpp:2783
int preYY_flex_debug
Definition: pre.cpp:2484
static int g_yyColNr
Definition: pre.cpp:2842
FileState(int size)
Definition: pre.cpp:2582
static QCString g_defName
Definition: pre.cpp:2851
fileName
Definition: dumpTree.py:9
void preYY_switch_to_buffer(YY_BUFFER_STATE new_buffer)
uint count() const
Definition: qstack.h:56
QString dirPath(bool absPath=FALSE) const
Define * newDefine()
Definition: pre.cpp:3881
size_t yy_size_t
Definition: pre.cpp:203
void addArray(const char *a, int len)
Definition: bufstr.h:47
Definition: define.h:27
bool isEmpty() const
Definition: qstack.h:57
def key(type, name=None)
Definition: graph.py:13
#define RemoveCPPComment
Definition: pre.cpp:4292
static void preYY_load_buffer_state(void)
#define YY_STATE_EOF(state)
Definition: pre.cpp:154
QCString right(uint len) const
Definition: qcstring.cpp:231
std::void_t< T > n
static void preYY_init_buffer(YY_BUFFER_STATE b, FILE *file)
static int getNextChar(const QCString &expr, QCString *rest, uint &pos)
const double a
#define YY_AT_BOL()
Definition: pre.cpp:350
void preYY_flush_buffer(YY_BUFFER_STATE b)
int preYYlineno
Definition: pre.cpp:365
void * preYYrealloc(void *, yy_size_t)
FILE * preYYin
Definition: pre.cpp:359
static QCString argName
FileDef * findFileDef(const FileNameDict *fnDict, const char *n, bool &ambig)
Definition: util.cpp:4963
static void addTillEndOfString(const QCString &expr, QCString *rest, uint &pos, char term, QCString &arg)
Definition: pre.cpp:3247
void addFileToContext(const char *fileName)
Definition: pre.cpp:2680
signed char flex_int8_t
Definition: pre.cpp:70
void collectDefines(DefineDict *dict, QDict< void > &includeStack)
Definition: pre.cpp:2801
#define YY_START
Definition: pre.cpp:150
static bool g_quoteArg
Definition: pre.cpp:2865
#define IncludeID
Definition: pre.cpp:4278
static QStack< CondCtx > g_condStack
Definition: pre.cpp:2884
static void print(DebugMask mask, int prio, const char *fmt,...)
Definition: debug.cpp:84
void stringToArgumentList(const char *argsString, ArgumentList *al, QCString *extraTypeChars)
Definition: defargs.cpp:2922
#define SkipString
Definition: pre.cpp:4274
QCString & prepend(const char *s)
Definition: qcstring.cpp:387
p
Definition: test.py:223
#define YY_STATE_BUF_SIZE
Definition: pre.cpp:168
static QStack< FileState > g_includeStack
Definition: pre.cpp:2848
void append(const type *d)
Definition: qinternallist.h:61
static void setFileName(const char *name)
Definition: pre.cpp:2897
A bunch of utility functions.
#define YY_BUFFER_NORMAL
Definition: pre.cpp:255
int preYYget_leng(void)
static int g_roundCount
Definition: pre.cpp:2864
const char * data() const
Definition: qcstring.h:207
static QCString g_lastGuardName
Definition: pre.cpp:2870
#define EOB_ACT_LAST_MATCH
Definition: pre.cpp:181
static bool g_expectGuard
Definition: pre.cpp:2868
char * yy_ch_buf
Definition: code.cpp:212
string tmp
Definition: languages.py:63
static void yy_fatal_error(yyconst char msg[])
static QDict< void > g_allIncludes(10009)
static int g_commentCount
Definition: pre.cpp:2878
register char * yy_bp
Definition: pre.cpp:4484
#define Config_getBool(val)
Definition: config.cpp:664
void preFreeScanner()
void initPreprocessor()
BufStr * oldFileBuf
Definition: pre.cpp:2586
unsigned char YY_CHAR
Definition: code.cpp:357
bool varArgs
Definition: define.h:46
static char yy_hold_char
Definition: pre.cpp:292
#define Guard
Definition: pre.cpp:4293
void preYYset_lineno(int line_number)
QCString & insert(uint index, const char *s)
Definition: qcstring.cpp:355
type * next()
Definition: qinternallist.h:89
void warn(const char *file, int line, const char *fmt,...)
Definition: message.cpp:183
static QCString g_guardName
Definition: pre.cpp:2869
YY_EXTRA_TYPE preYYget_extra(void)
int flex_int32_t
Definition: code.cpp:72
static int yy_start
Definition: pre.cpp:299
DefineDict m_contextDefines
Definition: pre.cpp:2788
unsigned char flex_uint8_t
Definition: pre.cpp:73
QCString fileName
Definition: define.h:36
type * pop()
Definition: qstack.h:59
#define Ifdef
Definition: pre.cpp:4284
void addDefine(const char *fileName, Define *def)
Definition: pre.cpp:2703
int yy_is_our_buffer
Definition: code.cpp:229
int preYYget_debug(void)
CondCtx(int line, QCString id, bool b)
Definition: pre.cpp:2573
bool parseconstexp(const char *fileName, int lineNr, const QCString &s)
Definition: constexp.cpp:1986
#define YY_RESTORE_YY_MORE_OFFSET
Definition: pre.cpp:2507
#define SkipLine
Definition: pre.cpp:4273
static int g_yyMLines
Definition: pre.cpp:2841
static BufStr * g_inputBuf
Definition: pre.cpp:2861
static QCString g_guardExpr
Definition: pre.cpp:2872
#define ReadString
Definition: pre.cpp:4301
Buffer used to store strings.
Definition: bufstr.h:30
QCString mid(uint index, uint len=0xffffffff) const
Definition: qcstring.cpp:246
#define YY_EXTRA_TYPE
Definition: pre.cpp:4315
#define EOB_ACT_CONTINUE_SCAN
Definition: pre.cpp:179
int match(const QCString &str, int index=0, int *len=0, bool indexIsStart=TRUE) const
Definition: qregexp.cpp:649
static int input(void)
#define YY_RULE_SETUP
Definition: pre.cpp:4473
QCString & sprintf(const char *format,...)
Definition: qcstring.cpp:27
void addInclude(const char *fileName)
Definition: pre.cpp:2626
#define unput(c)
Definition: pre.cpp:199
static FileState * checkAndOpenFile(const QCString &fileName, bool &alreadyIncluded)
Definition: pre.cpp:2957
uint size() const
static void unputChar(const QCString &expr, QCString *rest, uint &pos, char c)
#define YY_EXIT_FAILURE
Definition: code.cpp:16117
static int g_condCtx
Definition: pre.cpp:2882
static int yy_init_globals(void)
#define YY_TRAILING_MASK
Definition: pre.cpp:2492
Definition: types.h:38
static bool g_ccomment
Definition: pre.cpp:2890
void preYYset_debug(int debug_flag)
#define UndefName
Definition: pre.cpp:4298
SrcLangExt getLanguageFromFileName(const QCString fileName)
Definition: util.cpp:7061
#define CopyCComment
Definition: pre.cpp:4288
FileDef * fileDef
Definition: define.h:41
static bool g_isSource
Definition: pre.cpp:2886
char * preYYtext
Definition: pre.cpp:2508
static QDict< int > * g_argDict
Definition: pre.cpp:2849
static yyconst flex_int16_t yy_accept[1317]
Definition: pre.cpp:552
QCString removeIdsAndMarkers(const char *s)
Definition: pre.cpp:3660
#define YY_TRAILING_HEAD_MASK
Definition: pre.cpp:2493
static void yyunput(int c, char *buf_ptr)
#define SkipVerbatim
Definition: pre.cpp:4289
#define yyterminate()
Definition: pre.cpp:4435
static QCString g_incName
Definition: pre.cpp:2871
static bool g_nospaces
Definition: pre.cpp:2874
void addDefine()
Definition: pre.cpp:3902
void setInitializer(const char *i)
Definition: memberdef.cpp:3470
void preYYpush_buffer_state(YY_BUFFER_STATE new_buffer)
void line(double t, double *p, double &x, double &y, double &z)
#define YY_BUFFER_EOF_PENDING
Definition: pre.cpp:266
static void forceEndCondSection()
Definition: pre.cpp:4175
void preYYpop_buffer_state(void)
void preYY_delete_buffer(YY_BUFFER_STATE b)
#define YY_SC_TO_UI(c)
Definition: pre.cpp:138
static int yy_looking_for_trail_begin
Definition: pre.cpp:2489
#define YY_INPUT(buf, result, max_size)
Definition: pre.cpp:4219
static void outputArray(const char *a, int len)
Definition: pre.cpp:3965
static int g_lastCContext
Definition: pre.cpp:2858
QDict< Define > DefineDict
Definition: define.h:94
static bool * b
Definition: config.cpp:1043
#define YY_CURRENT_BUFFER_LVALUE
Definition: pre.cpp:289
#define yytext_ptr
Definition: pre.cpp:368
QCString removeMarkers(const char *s)
Definition: pre.cpp:3774
void addIncludedByDependency(FileDef *fd, const char *incName, bool local, bool imported)
Definition: filedef.cpp:1366
void addIncludeDependency(FileDef *fd, const char *incName, bool local, bool imported, bool indirect)
Definition: filedef.cpp:1269
static void preYYensure_buffer_stack(void)
static QCString g_defExtraSpacing
Definition: pre.cpp:2855
static bool g_insideComment
Definition: pre.cpp:2879
bool isId(int c)
Definition: util.h:224
int lineNr
Definition: pre.cpp:2584
bool undef
Definition: define.h:45
static int g_fenceSize
Definition: pre.cpp:2889
int yy_is_interactive
Definition: code.cpp:236
static QArray< int > g_levelGuard
Definition: pre.cpp:2860
static yyconst flex_int16_t yy_def[1438]
Definition: pre.cpp:905
#define SkipSingleQuote
Definition: pre.cpp:4297
static int yy_get_next_buffer(void)
static void returnCharToStream(char c)
Definition: pre.cpp:3242
static int yy_init
Definition: pre.cpp:298
static QDict< void > expandAsDefinedDict
Definition: doxygen.h:127
void clear()
Definition: qstack.h:61
const char * cs
static bool isFlagSet(DebugMask mask)
Definition: debug.cpp:119
The QFileInfo class provides system-independent file information.
Definition: qfileinfo.h:51
static void incrLevel()
Definition: pre.cpp:2915
QDict< void > m_includedFiles
Definition: pre.cpp:2633
void setFileDef(FileDef *fd)
Definition: memberdef.cpp:4624
struct yy_buffer_state * YY_BUFFER_STATE
Definition: pre.cpp:172
bool parse(const char *fileName, int lineNr, const char *expr)
Definition: condparser.cpp:34
T * find(const char *key)
Definition: sortdict.h:232
#define YY_CURRENT_BUFFER
Definition: pre.cpp:282
QCString utf8() const
Definition: qstring.cpp:14507
bool patternMatch(const QFileInfo &fi, const QStrList *patList)
Definition: util.cpp:7784
static void readIncludeFile(const QCString &inc)
Definition: pre.cpp:3970
YY_BUFFER_STATE preYY_scan_buffer(char *base, yy_size_t size)
unsigned uint
Definition: qglobal.h:351
#define FindDefineArgs
Definition: pre.cpp:4300
#define SkipDoubleQuote
Definition: pre.cpp:4296
byte bytes
Alias for common language habits.
Definition: datasize.h:101
static yy_state_type yy_get_previous_state(void)
if(!(yy_init))
Definition: pre.cpp:4492
#define YY_BUF_SIZE
Definition: pre.cpp:163
static bool otherCaseDone()
Definition: pre.cpp:2937
const QCString & docName() const
Definition: filedef.h:99
size_t yy_size_t
Definition: code.cpp:203
QCString definition
Definition: define.h:35
int yy_buffer_status
Definition: code.cpp:252
static int g_curlyCount
Definition: pre.cpp:2873
static QCString * s
Definition: config.cpp:1042
bool isDir() const
static yy_state_type yy_try_NUL_trans(yy_state_type current_state)
const char * qPrint(const char *s)
Definition: qcstring.h:797
const bool TRUE
Definition: qglobal.h:371
#define YY_DECL
Definition: pre.cpp:4458
void endContext()
Definition: pre.cpp:2670
#define YY_NEW_FILE
Definition: pre.cpp:157
Portable versions of functions that are platform dependent.
static int getCurrentChar(const QCString &expr, QCString *rest, uint pos)
#define CopyLine
Definition: pre.cpp:4275
int preYYlex(void)
static int g_inputBufPos
Definition: pre.cpp:2862
#define DBG_CTX(x)
Definition: pre.cpp:2569
#define SkipCPPBlock
Definition: pre.cpp:4283
void collectDefinesForFile(const char *fileName, DefineDict *dict)
Definition: pre.cpp:2758
void preYYrestart(FILE *input_file)
void addInclude(const char *fromFileName, const char *toFileName)
Definition: pre.cpp:2727
void addDefine(Define *def)
Definition: pre.cpp:2614
bool exists() const
Definition: qfileinfo.cpp:265
int nargs
Definition: define.h:44
QCString name
Definition: define.h:34
static int g_yyLineNr
Definition: pre.cpp:2840
static bool g_isImported
Definition: pre.cpp:2880