Merge Steve Murphy's (murf) complete re-implementation of AEL, which is now no longer...
[asterisk/asterisk.git] / ast_expr2f.c
1 #line 2 "ast_expr2f.c"
2
3 #line 4 "ast_expr2f.c"
4
5 #define  YY_INT_ALIGNED short int
6
7 /* A lexical scanner generated by flex */
8
9 #define FLEX_SCANNER
10 #define YY_FLEX_MAJOR_VERSION 2
11 #define YY_FLEX_MINOR_VERSION 5
12 #define YY_FLEX_SUBMINOR_VERSION 31
13 #if YY_FLEX_SUBMINOR_VERSION > 0
14 #define FLEX_BETA
15 #endif
16
17 /* First, we deal with  platform-specific or compiler-specific issues. */
18
19 /* begin standard C headers. */
20 #include <stdio.h>
21 #include <string.h>
22 #include <errno.h>
23 #include <stdlib.h>
24
25 /* end standard C headers. */
26
27 /* flex integer type definitions */
28
29 #ifndef FLEXINT_H
30 #define FLEXINT_H
31
32 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
33
34 #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
35 #include <inttypes.h>
36 typedef int8_t flex_int8_t;
37 typedef uint8_t flex_uint8_t;
38 typedef int16_t flex_int16_t;
39 typedef uint16_t flex_uint16_t;
40 typedef int32_t flex_int32_t;
41 typedef uint32_t flex_uint32_t;
42 #else
43 typedef signed char flex_int8_t;
44 typedef short int flex_int16_t;
45 typedef int flex_int32_t;
46 typedef unsigned char flex_uint8_t; 
47 typedef unsigned short int flex_uint16_t;
48 typedef unsigned int flex_uint32_t;
49 #endif /* ! C99 */
50
51 /* Limits of integral types. */
52 #ifndef INT8_MIN
53 #define INT8_MIN               (-128)
54 #endif
55 #ifndef INT16_MIN
56 #define INT16_MIN              (-32767-1)
57 #endif
58 #ifndef INT32_MIN
59 #define INT32_MIN              (-2147483647-1)
60 #endif
61 #ifndef INT8_MAX
62 #define INT8_MAX               (127)
63 #endif
64 #ifndef INT16_MAX
65 #define INT16_MAX              (32767)
66 #endif
67 #ifndef INT32_MAX
68 #define INT32_MAX              (2147483647)
69 #endif
70 #ifndef UINT8_MAX
71 #define UINT8_MAX              (255U)
72 #endif
73 #ifndef UINT16_MAX
74 #define UINT16_MAX             (65535U)
75 #endif
76 #ifndef UINT32_MAX
77 #define UINT32_MAX             (4294967295U)
78 #endif
79
80 #endif /* ! FLEXINT_H */
81
82 #ifdef __cplusplus
83
84 /* The "const" storage-class-modifier is valid. */
85 #define YY_USE_CONST
86
87 #else   /* ! __cplusplus */
88
89 #if __STDC__
90
91 #define YY_USE_CONST
92
93 #endif  /* __STDC__ */
94 #endif  /* ! __cplusplus */
95
96 #ifdef YY_USE_CONST
97 #define yyconst const
98 #else
99 #define yyconst
100 #endif
101
102 /* Returned upon end-of-file. */
103 #define YY_NULL 0
104
105 /* Promotes a possibly negative, possibly signed char to an unsigned
106  * integer for use as an array index.  If the signed char is negative,
107  * we want to instead treat it as an 8-bit unsigned char, hence the
108  * double cast.
109  */
110 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
111
112 /* An opaque pointer. */
113 #ifndef YY_TYPEDEF_YY_SCANNER_T
114 #define YY_TYPEDEF_YY_SCANNER_T
115 typedef void* yyscan_t;
116 #endif
117
118 /* For convenience, these vars (plus the bison vars far below)
119    are macros in the reentrant scanner. */
120 #define yyin yyg->yyin_r
121 #define yyout yyg->yyout_r
122 #define yyextra yyg->yyextra_r
123 #define yyleng yyg->yyleng_r
124 #define yytext yyg->yytext_r
125 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
126 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
127 #define yy_flex_debug yyg->yy_flex_debug_r
128
129 int ast_yylex_init (yyscan_t* scanner);
130
131 /* Enter a start condition.  This macro really ought to take a parameter,
132  * but we do it the disgusting crufty way forced on us by the ()-less
133  * definition of BEGIN.
134  */
135 #define BEGIN yyg->yy_start = 1 + 2 *
136
137 /* Translate the current start state into a value that can be later handed
138  * to BEGIN to return to the state.  The YYSTATE alias is for lex
139  * compatibility.
140  */
141 #define YY_START ((yyg->yy_start - 1) / 2)
142 #define YYSTATE YY_START
143
144 /* Action number for EOF rule of a given start state. */
145 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
146
147 /* Special action meaning "start processing a new file". */
148 #define YY_NEW_FILE ast_yyrestart(yyin ,yyscanner )
149
150 #define YY_END_OF_BUFFER_CHAR 0
151
152 /* Size of default input buffer. */
153 #ifndef YY_BUF_SIZE
154 #define YY_BUF_SIZE 16384
155 #endif
156
157 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
158 #define YY_TYPEDEF_YY_BUFFER_STATE
159 typedef struct yy_buffer_state *YY_BUFFER_STATE;
160 #endif
161
162 #define EOB_ACT_CONTINUE_SCAN 0
163 #define EOB_ACT_END_OF_FILE 1
164 #define EOB_ACT_LAST_MATCH 2
165
166     #define YY_LESS_LINENO(n)
167     
168 /* Return all but the first "n" matched characters back to the input stream. */
169 #define yyless(n) \
170         do \
171                 { \
172                 /* Undo effects of setting up yytext. */ \
173         int yyless_macro_arg = (n); \
174         YY_LESS_LINENO(yyless_macro_arg);\
175                 *yy_cp = yyg->yy_hold_char; \
176                 YY_RESTORE_YY_MORE_OFFSET \
177                 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
178                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
179                 } \
180         while ( 0 )
181
182 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
183
184 /* The following is because we cannot portably get our hands on size_t
185  * (without autoconf's help, which isn't available because we want
186  * flex-generated scanners to compile on their own).
187  */
188
189 #ifndef YY_TYPEDEF_YY_SIZE_T
190 #define YY_TYPEDEF_YY_SIZE_T
191 typedef unsigned int yy_size_t;
192 #endif
193
194 #ifndef YY_STRUCT_YY_BUFFER_STATE
195 #define YY_STRUCT_YY_BUFFER_STATE
196 struct yy_buffer_state
197         {
198         FILE *yy_input_file;
199
200         char *yy_ch_buf;                /* input buffer */
201         char *yy_buf_pos;               /* current position in input buffer */
202
203         /* Size of input buffer in bytes, not including room for EOB
204          * characters.
205          */
206         yy_size_t yy_buf_size;
207
208         /* Number of characters read into yy_ch_buf, not including EOB
209          * characters.
210          */
211         int yy_n_chars;
212
213         /* Whether we "own" the buffer - i.e., we know we created it,
214          * and can realloc() it to grow it, and should free() it to
215          * delete it.
216          */
217         int yy_is_our_buffer;
218
219         /* Whether this is an "interactive" input source; if so, and
220          * if we're using stdio for input, then we want to use getc()
221          * instead of fread(), to make sure we stop fetching input after
222          * each newline.
223          */
224         int yy_is_interactive;
225
226         /* Whether we're considered to be at the beginning of a line.
227          * If so, '^' rules will be active on the next match, otherwise
228          * not.
229          */
230         int yy_at_bol;
231
232     int yy_bs_lineno; /**< The line count. */
233     int yy_bs_column; /**< The column count. */
234     
235         /* Whether to try to fill the input buffer when we reach the
236          * end of it.
237          */
238         int yy_fill_buffer;
239
240         int yy_buffer_status;
241
242 #define YY_BUFFER_NEW 0
243 #define YY_BUFFER_NORMAL 1
244         /* When an EOF's been seen but there's still some text to process
245          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
246          * shouldn't try reading from the input source any more.  We might
247          * still have a bunch of tokens to match, though, because of
248          * possible backing-up.
249          *
250          * When we actually see the EOF, we change the status to "new"
251          * (via ast_yyrestart()), so that the user can continue scanning by
252          * just pointing yyin at a new input file.
253          */
254 #define YY_BUFFER_EOF_PENDING 2
255
256         };
257 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
258
259 /* We provide macros for accessing buffer states in case in the
260  * future we want to put the buffer states in a more general
261  * "scanner state".
262  *
263  * Returns the top of the stack, or NULL.
264  */
265 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
266                           ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
267                           : NULL)
268
269 /* Same as previous macro, but useful when we know that the buffer stack is not
270  * NULL or when we need an lvalue. For internal use only.
271  */
272 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
273
274 void ast_yyrestart (FILE *input_file ,yyscan_t yyscanner );
275 void ast_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
276 YY_BUFFER_STATE ast_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
277 void ast_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
278 void ast_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
279 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
280 void ast_yypop_buffer_state (yyscan_t yyscanner );
281
282 static void ast_yyensure_buffer_stack (yyscan_t yyscanner );
283 static void ast_yy_load_buffer_state (yyscan_t yyscanner );
284 static void ast_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
285
286 #define YY_FLUSH_BUFFER ast_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
287
288 YY_BUFFER_STATE ast_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
289 YY_BUFFER_STATE ast_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
290 YY_BUFFER_STATE ast_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
291
292 void *ast_yyalloc (yy_size_t ,yyscan_t yyscanner );
293 void *ast_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
294 void ast_yyfree (void * ,yyscan_t yyscanner );
295
296 #define yy_new_buffer ast_yy_create_buffer
297
298 #define yy_set_interactive(is_interactive) \
299         { \
300         if ( ! YY_CURRENT_BUFFER ){ \
301         ast_yyensure_buffer_stack (yyscanner); \
302                 YY_CURRENT_BUFFER_LVALUE =    \
303             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
304         } \
305         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
306         }
307
308 #define yy_set_bol(at_bol) \
309         { \
310         if ( ! YY_CURRENT_BUFFER ){\
311         ast_yyensure_buffer_stack (yyscanner); \
312                 YY_CURRENT_BUFFER_LVALUE =    \
313             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
314         } \
315         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
316         }
317
318 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
319
320 /* Begin user sect3 */
321
322 #define ast_yywrap(n) 1
323 #define YY_SKIP_YYWRAP
324
325 typedef char YY_CHAR;
326
327 typedef int yy_state_type;
328
329 #define yytext_ptr yytext_r
330 static yyconst flex_int16_t yy_nxt[][128] =
331     {
332     {
333         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
334         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
335         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
336         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
337         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
338         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
339         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
340         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
341         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
342         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
343
344         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
345         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
346         0,    0,    0,    0,    0,    0,    0,    0
347     },
348
349     {
350         7,    8,    8,    8,    8,    8,    8,    8,    8,    9,
351        10,    8,    8,    9,    8,    8,    8,    8,    8,    8,
352         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
353         8,    8,    9,   11,   12,   13,   14,   15,   16,   13,
354        17,   18,   19,   20,   13,   21,   13,   22,   23,   23,
355        23,   23,   23,   23,   23,   23,   23,   23,   24,   13,
356        25,   26,   27,   28,   13,   13,   13,   13,   13,   13,
357
358        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
359        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
360        13,    8,   13,    8,   13,   13,    8,   13,   13,   13,
361        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
362        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
363        13,   13,   13,    8,   29,    8,    8,    8
364     },
365
366     {
367         7,    8,    8,    8,    8,    8,    8,    8,    8,    9,
368        10,    8,    8,    9,    8,    8,    8,    8,    8,    8,
369         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
370         8,    8,    9,   11,   12,   13,   14,   15,   16,   13,
371
372        17,   18,   19,   20,   13,   21,   13,   22,   23,   23,
373        23,   23,   23,   23,   23,   23,   23,   23,   24,   13,
374        25,   26,   27,   28,   13,   13,   13,   13,   13,   13,
375        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
376        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
377        13,    8,   13,    8,   13,   13,    8,   13,   13,   13,
378        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
379        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
380        13,   13,   13,    8,   29,    8,    8,    8
381     },
382
383     {
384         7,   30,   30,   30,   30,   30,   30,   30,   30,   30,
385
386        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
387        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
388        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
389        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
390        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
391        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
392        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
393        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
394        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
395        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
396
397        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
398        30,   30,   30,   31,   30,   32,   30,   30
399     },
400
401     {
402         7,   30,   30,   30,   30,   30,   30,   30,   30,   30,
403        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
404        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
405        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
406        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
407        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
408        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
409        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
410
411        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
412        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
413        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
414        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
415        30,   30,   30,   31,   30,   32,   30,   30
416     },
417
418     {
419         7,   33,   33,   33,   33,   33,   33,   33,   33,   34,
420        34,   33,   33,   34,   33,   33,   33,   33,   33,   33,
421        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
422        33,   33,   34,   34,   33,   33,   35,   34,   34,   33,
423        34,   34,   34,   34,   33,   34,   33,   34,   33,   33,
424
425        33,   33,   33,   33,   33,   33,   33,   33,   34,   33,
426        34,   34,   34,   34,   33,   33,   33,   33,   33,   33,
427        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
428        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
429        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
430        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
431        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
432        33,   33,   33,   33,   34,   33,   33,   33
433     },
434
435     {
436         7,   33,   33,   33,   33,   33,   33,   33,   33,   34,
437        34,   33,   33,   34,   33,   33,   33,   33,   33,   33,
438
439        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
440        33,   33,   34,   34,   33,   33,   35,   34,   34,   33,
441        34,   34,   34,   34,   33,   34,   33,   34,   33,   33,
442        33,   33,   33,   33,   33,   33,   33,   33,   34,   33,
443        34,   34,   34,   34,   33,   33,   33,   33,   33,   33,
444        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
445        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
446        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
447        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
448        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
449
450        33,   33,   33,   33,   34,   33,   33,   33
451     },
452
453     {
454        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
455        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
456        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
457        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
458        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
459        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
460        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
461        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
462        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
463
464        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
465        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
466        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
467        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7
468     },
469
470     {
471         7,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
472        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
473        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
474        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
475        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
476        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
477
478        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
479        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
480        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
481        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
482        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
483        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
484        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8
485     },
486
487     {
488         7,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
489        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
490        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
491
492        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
493        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
494        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
495        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
496        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
497        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
498        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
499        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
500        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
501        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9
502
503     },
504
505     {
506         7,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
507       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
508       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
509       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
510       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
511       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
512       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
513       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
514       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
515       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
516
517       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
518       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
519       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10
520     },
521
522     {
523         7,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
524       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
525       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
526       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
527       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
528       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
529       -11,   36,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
530
531       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
532       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
533       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
534       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
535       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
536       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11
537     },
538
539     {
540         7,   37,   37,   37,   37,   37,   37,   37,   37,   37,
541        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
542        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
543        37,   37,   37,   37,   38,   37,   37,   37,   37,   37,
544
545        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
546        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
547        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
548        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
549        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
550        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
551        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
552        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
553        37,   37,   37,   37,   37,   37,   37,   37
554     },
555
556     {
557         7,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
558
559       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
560       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
561       -13,  -13,  -13,  -13,  -13,   39,   39,  -13,  -13,   39,
562       -13,  -13,  -13,  -13,   39,  -13,   39,  -13,   39,   39,
563        39,   39,   39,   39,   39,   39,   39,   39,  -13,   39,
564       -13,  -13,  -13,  -13,   39,   39,   39,   39,   39,   39,
565        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
566        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
567        39,  -13,   39,  -13,   39,   39,  -13,   39,   39,   39,
568        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
569
570        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
571        39,   39,   39,  -13,  -13,  -13,  -13,  -13
572     },
573
574     {
575         7,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
576       -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
577       -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
578       -14,  -14,  -14,  -14,  -14,   39,   39,  -14,  -14,   39,
579       -14,  -14,  -14,  -14,   39,  -14,   39,  -14,   39,   39,
580        39,   39,   39,   39,   39,   39,   39,   39,  -14,   39,
581       -14,  -14,  -14,  -14,   39,   39,   39,   39,   39,   39,
582        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
583
584        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
585        39,  -14,   39,  -14,   39,   39,  -14,   39,   39,   39,
586        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
587        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
588        39,   39,   39,   40,  -14,  -14,  -14,  -14
589     },
590
591     {
592         7,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
593       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
594       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
595       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
596       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
597
598       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
599       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
600       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
601       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
602       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
603       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
604       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
605       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15
606     },
607
608     {
609         7,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
610       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
611
612       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
613       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,   41,  -16,
614       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
615       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
616       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
617       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
618       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
619       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
620       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
621       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
622
623       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16
624     },
625
626     {
627         7,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
628       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
629       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
630       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
631       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
632       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
633       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
634       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
635       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
636
637       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
638       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
639       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
640       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17
641     },
642
643     {
644         7,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
645       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
646       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
647       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
648       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
649       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
650
651       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
652       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
653       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
654       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
655       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
656       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
657       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18
658     },
659
660     {
661         7,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
662       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
663       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
664
665       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
666       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
667       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
668       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
669       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
670       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
671       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
672       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
673       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
674       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19
675
676     },
677
678     {
679         7,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
680       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
681       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
682       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
683       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
684       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
685       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
686       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
687       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
688       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
689
690       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
691       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
692       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20
693     },
694
695     {
696         7,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
697       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
698       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
699       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
700       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
701       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
702       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
703
704       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
705       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
706       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
707       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
708       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
709       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21
710     },
711
712     {
713         7,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
714       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
715       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
716       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
717
718       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
719       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
720       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
721       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
722       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
723       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
724       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
725       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
726       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22
727     },
728
729     {
730         7,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
731
732       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
733       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
734       -23,  -23,  -23,  -23,  -23,   39,   39,  -23,  -23,   39,
735       -23,  -23,  -23,  -23,   39,  -23,   39,  -23,   42,   42,
736        42,   42,   42,   42,   42,   42,   42,   42,  -23,   39,
737       -23,  -23,  -23,  -23,   39,   39,   39,   39,   39,   39,
738        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
739        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
740        39,  -23,   39,  -23,   39,   39,  -23,   39,   39,   39,
741        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
742
743        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
744        39,   39,   39,  -23,  -23,  -23,  -23,  -23
745     },
746
747     {
748         7,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
749       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
750       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
751       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
752       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
753       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,   43,  -24,
754       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
755       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
756
757       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
758       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
759       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
760       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
761       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24
762     },
763
764     {
765         7,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
766       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
767       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
768       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
769       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
770
771       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
772       -25,   44,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
773       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
774       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
775       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
776       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
777       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
778       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25
779     },
780
781     {
782         7,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
783       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
784
785       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
786       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
787       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
788       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
789       -26,   45,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
790       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
791       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
792       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
793       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
794       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
795
796       -26,  -26,  -26,  -26,  -26,  -26,   46,  -26
797     },
798
799     {
800         7,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
801       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
802       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
803       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
804       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
805       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
806       -27,   47,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
807       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
808       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
809
810       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
811       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
812       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
813       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27
814     },
815
816     {
817         7,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
818       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
819       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
820       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
821       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
822       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
823
824       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
825       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
826       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
827       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
828       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
829       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
830       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28
831     },
832
833     {
834         7,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
835       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
836       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
837
838       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
839       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
840       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
841       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
842       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
843       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
844       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
845       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
846       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
847       -29,  -29,  -29,  -29,   48,  -29,  -29,  -29
848
849     },
850
851     {
852         7,   49,   49,   49,   49,   49,   49,   49,   49,   49,
853        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
854        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
855        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
856        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
857        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
858        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
859        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
860        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
861        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
862
863        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
864        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
865        49,   49,   49,   50,   49,   51,   49,   49
866     },
867
868     {
869         7,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
870       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
871       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
872       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
873       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
874       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
875       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
876
877       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
878       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
879       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
880       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
881       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
882       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31
883     },
884
885     {
886         7,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
887       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
888       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
889       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
890
891       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
892       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
893       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
894       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
895       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
896       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
897       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
898       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
899       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32
900     },
901
902     {
903         7,   52,   52,   52,   52,   52,   52,   52,   52,  -33,
904
905       -33,   52,   52,  -33,   52,   52,   52,   52,   52,   52,
906        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
907        52,   52,  -33,  -33,   52,   52,  -33,  -33,  -33,   52,
908       -33,  -33,  -33,  -33,   52,  -33,   52,  -33,   52,   52,
909        52,   52,   52,   52,   52,   52,   52,   52,  -33,   52,
910       -33,  -33,  -33,  -33,   52,   52,   52,   52,   52,   52,
911        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
912        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
913        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
914        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
915
916        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
917        52,   52,   52,   52,  -33,   52,   52,   52
918     },
919
920     {
921         7,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
922       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
923       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
924       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
925       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
926       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
927       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
928       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
929
930       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
931       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
932       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
933       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
934       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34
935     },
936
937     {
938         7,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
939       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
940       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
941       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
942       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
943
944       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
945       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
946       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
947       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
948       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
949       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
950       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
951       -35,  -35,  -35,   53,  -35,  -35,  -35,  -35
952     },
953
954     {
955         7,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
956       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
957
958       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
959       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
960       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
961       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
962       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
963       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
964       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
965       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
966       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
967       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
968
969       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36
970     },
971
972     {
973         7,   37,   37,   37,   37,   37,   37,   37,   37,   37,
974        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
975        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
976        37,   37,   37,   37,   38,   37,   37,   37,   37,   37,
977        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
978        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
979        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
980        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
981        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
982
983        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
984        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
985        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
986        37,   37,   37,   37,   37,   37,   37,   37
987     },
988
989     {
990         7,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
991       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
992       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
993       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
994       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
995       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
996
997       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
998       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
999       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1000       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1001       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1002       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1003       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38
1004     },
1005
1006     {
1007         7,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
1008       -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
1009       -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
1010
1011       -39,  -39,  -39,  -39,  -39,   39,   39,  -39,  -39,   39,
1012       -39,  -39,  -39,  -39,   39,  -39,   39,  -39,   39,   39,
1013        39,   39,   39,   39,   39,   39,   39,   39,  -39,   39,
1014       -39,  -39,  -39,  -39,   39,   39,   39,   39,   39,   39,
1015        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1016        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1017        39,  -39,   39,  -39,   39,   39,  -39,   39,   39,   39,
1018        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1019        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1020        39,   39,   39,  -39,  -39,  -39,  -39,  -39
1021
1022     },
1023
1024     {
1025         7,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1026       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1027       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1028       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1029       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1030       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1031       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1032       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1033       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1034       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1035
1036       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1037       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1038       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40
1039     },
1040
1041     {
1042         7,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1043       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1044       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1045       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1046       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1047       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1048       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1049
1050       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1051       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1052       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1053       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1054       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1055       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41
1056     },
1057
1058     {
1059         7,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
1060       -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
1061       -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
1062       -42,  -42,  -42,  -42,  -42,   39,   39,  -42,  -42,   39,
1063
1064       -42,  -42,  -42,  -42,   39,  -42,   39,  -42,   42,   42,
1065        42,   42,   42,   42,   42,   42,   42,   42,  -42,   39,
1066       -42,  -42,  -42,  -42,   39,   39,   39,   39,   39,   39,
1067        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1068        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1069        39,  -42,   39,  -42,   39,   39,  -42,   39,   39,   39,
1070        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1071        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1072        39,   39,   39,  -42,  -42,  -42,  -42,  -42
1073     },
1074
1075     {
1076         7,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1077
1078       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1079       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1080       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1081       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1082       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1083       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1084       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1085       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1086       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1087       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1088
1089       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1090       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43
1091     },
1092
1093     {
1094         7,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1095       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1096       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1097       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1098       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1099       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1100       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1101       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1102
1103       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1104       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1105       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1106       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1107       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44
1108     },
1109
1110     {
1111         7,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1112       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1113       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1114       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1115       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1116
1117       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1118       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1119       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1120       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1121       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1122       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1123       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1124       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45
1125     },
1126
1127     {
1128         7,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1129       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1130
1131       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1132       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1133       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1134       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1135       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1136       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1137       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1138       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1139       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1140       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1141
1142       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46
1143     },
1144
1145     {
1146         7,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1147       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1148       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1149       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1150       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1151       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1152       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1153       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1154       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1155
1156       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1157       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1158       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1159       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47
1160     },
1161
1162     {
1163         7,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1164       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1165       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1166       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1167       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1168       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1169
1170       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1171       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1172       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1173       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1174       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1175       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1176       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48
1177     },
1178
1179     {
1180         7,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1181        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1182        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1183
1184        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1185        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1186        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1187        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1188        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1189        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1190        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1191        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1192        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1193        49,   49,   49,   50,   49,   51,   49,   49
1194
1195     },
1196
1197     {
1198         7,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1199       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1200       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1201       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1202       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1203       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1204       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1205       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1206       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1207       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1208
1209       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1210       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1211       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50
1212     },
1213
1214     {
1215         7,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1216       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1217       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1218       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1219       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1220       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1221       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1222
1223       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1224       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1225       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1226       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1227       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1228       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51
1229     },
1230
1231     {
1232         7,   52,   52,   52,   52,   52,   52,   52,   52,  -52,
1233       -52,   52,   52,  -52,   52,   52,   52,   52,   52,   52,
1234        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1235        52,   52,  -52,  -52,   52,   52,  -52,  -52,  -52,   52,
1236
1237       -52,  -52,  -52,  -52,   52,  -52,   52,  -52,   52,   52,
1238        52,   52,   52,   52,   52,   52,   52,   52,  -52,   52,
1239       -52,  -52,  -52,  -52,   52,   52,   52,   52,   52,   52,
1240        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1241        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1242        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1243        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1244        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1245        52,   52,   52,   52,  -52,   52,   52,   52
1246     },
1247
1248     {
1249         7,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1250
1251       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1252       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1253       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1254       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1255       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1256       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1257       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1258       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1259       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1260       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1261
1262       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1263       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53
1264     },
1265
1266     } ;
1267
1268 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
1269 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
1270 static int yy_get_next_buffer (yyscan_t yyscanner );
1271 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
1272
1273 /* Done after the current pattern has been matched and before the
1274  * corresponding action - sets up yytext.
1275  */
1276 #define YY_DO_BEFORE_ACTION \
1277         yyg->yytext_ptr = yy_bp; \
1278         yyg->yytext_ptr -= yyg->yy_more_len; \
1279         yyleng = (size_t) (yy_cp - yyg->yytext_ptr); \
1280         yyg->yy_hold_char = *yy_cp; \
1281         *yy_cp = '\0'; \
1282         yyg->yy_c_buf_p = yy_cp;
1283
1284 #define YY_NUM_RULES 35
1285 #define YY_END_OF_BUFFER 36
1286 /* This struct is not used in this scanner,
1287    but its presence is necessary. */
1288 struct yy_trans_info
1289         {
1290         flex_int32_t yy_verify;
1291         flex_int32_t yy_nxt;
1292         };
1293 static yyconst flex_int16_t yy_accept[54] =
1294     {   0,
1295         0,    0,    0,    0,   32,   32,   36,   35,   25,   27,
1296        19,   35,   29,   29,   17,    2,   22,   23,   15,   13,
1297        14,   16,   28,   20,    9,    3,    8,   18,    1,   35,
1298        31,   30,   32,   33,   33,   12,    0,   26,   29,   24,
1299         5,   28,   21,   11,    6,    7,   10,    4,    0,   31,
1300        30,   32,   34
1301     } ;
1302
1303 static yyconst yy_state_type yy_NUL_trans[54] =
1304     {   0,
1305         8,    8,   30,   30,   33,   33,    0,    0,    0,    0,
1306         0,   37,    0,    0,    0,    0,    0,    0,    0,    0,
1307         0,    0,    0,    0,    0,    0,    0,    0,    0,   49,
1308         0,    0,   52,    0,    0,    0,   37,    0,    0,    0,
1309         0,    0,    0,    0,    0,    0,    0,    0,   49,    0,
1310         0,   52,    0
1311     } ;
1312
1313 /* The intent behind this definition is that it'll catch
1314  * any uses of REJECT which flex missed.
1315  */
1316 #define REJECT reject_used_but_not_detected
1317 #define yymore() (yyg->yy_more_flag = 1)
1318 #define YY_MORE_ADJ yyg->yy_more_len
1319 #define YY_RESTORE_YY_MORE_OFFSET
1320 #line 1 "ast_expr2.fl"
1321 #line 2 "ast_expr2.fl"
1322 /*
1323  * Asterisk -- An open source telephony toolkit.
1324  *
1325  * Copyright (C) 1999 - 2006, Digium, Inc.
1326  *
1327  * Mark Spencer <markster@digium.com>
1328  *
1329  * See http://www.asterisk.org for more information about
1330  * the Asterisk project. Please do not directly contact
1331  * any of the maintainers of this project for assistance;
1332  * the project provides a web site, mailing lists and IRC
1333  * channels for your use.
1334  *
1335  * This program is free software, distributed under the terms of
1336  * the GNU General Public License Version 2. See the LICENSE file
1337  * at the top of the source tree.
1338  */
1339
1340 /*! \file
1341  *
1342  * \brief Dialplan Expression Lexical Scanner
1343  */
1344
1345 #include <sys/types.h>
1346 #include <stdio.h>
1347 #include <stdlib.h>
1348 #include <string.h>
1349 #include <locale.h>
1350 #include <ctype.h>
1351 #if !defined(SOLARIS) && !defined(__CYGWIN__)
1352 #include <err.h>
1353 #else
1354 #define quad_t int64_t
1355 #endif
1356 #include <errno.h>
1357 #include <regex.h>
1358 #include <limits.h>
1359
1360 #include "asterisk.h"
1361
1362 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
1363
1364 #include "asterisk/ast_expr.h"
1365 #include "asterisk/logger.h"
1366 #include "asterisk/strings.h"
1367
1368 enum valtype {
1369         AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string
1370 } ;
1371
1372 struct val {
1373         enum valtype type;
1374         union {
1375                 char *s;
1376                 quad_t i;
1377         } u;
1378 } ;
1379
1380 #include "ast_expr2.h" /* the o/p of the bison on ast_expr2.y */
1381
1382 #define SET_COLUMNS yylloc_param->first_column = (int)(yyg->yytext_r - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);yylloc_param->last_column = yylloc_param->last_column + yyleng - 1; yylloc_param->first_line = yylloc_param->last_line = 1
1383 #define SET_STRING yylval_param->val = (struct val *)calloc(sizeof(struct val),1); yylval_param->val->type = AST_EXPR_string; yylval_param->val->u.s = strdup(yytext);
1384 #define SET_NUMERIC_STRING yylval_param->val = (struct val *)calloc(sizeof(struct val),1); yylval_param->val->type = AST_EXPR_numeric_string; yylval_param->val->u.s = strdup(yytext);
1385
1386 struct parse_io
1387 {
1388         char *string;
1389         struct val *val;
1390         yyscan_t scanner;
1391 };
1392  
1393 void ast_yyset_column(int column_no, yyscan_t yyscanner);
1394 int ast_yyget_column(yyscan_t yyscanner);
1395 static int curlycount = 0;
1396 static char *expr2_token_subst(char *mess);
1397
1398 #line 1394 "ast_expr2f.c"
1399
1400 #define INITIAL 0
1401 #define var 1
1402 #define trail 2
1403
1404 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1405  * down here because we want the user's section 1 to have been scanned first.
1406  * The user has a chance to override it with an option.
1407  */
1408 #include <unistd.h>
1409
1410 #ifndef YY_EXTRA_TYPE
1411 #define YY_EXTRA_TYPE void *
1412 #endif
1413
1414 /* Holds the entire state of the reentrant scanner. */
1415 struct yyguts_t
1416     {
1417
1418     /* User-defined. Not touched by flex. */
1419     YY_EXTRA_TYPE yyextra_r;
1420
1421     /* The rest are the same as the globals declared in the non-reentrant scanner. */
1422     FILE *yyin_r, *yyout_r;
1423     size_t yy_buffer_stack_top; /**< index of top of stack. */
1424     size_t yy_buffer_stack_max; /**< capacity of stack. */
1425     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
1426     char yy_hold_char;
1427     int yy_n_chars;
1428     int yyleng_r;
1429     char *yy_c_buf_p;
1430     int yy_init;
1431     int yy_start;
1432     int yy_did_buffer_switch_on_eof;
1433     int yy_start_stack_ptr;
1434     int yy_start_stack_depth;
1435     int *yy_start_stack;
1436     yy_state_type yy_last_accepting_state;
1437     char* yy_last_accepting_cpos;
1438
1439     int yylineno_r;
1440     int yy_flex_debug_r;
1441
1442     char *yytext_r;
1443     int yy_more_flag;
1444     int yy_more_len;
1445
1446     YYSTYPE * yylval_r;
1447
1448     YYLTYPE * yylloc_r;
1449
1450     }; /* end struct yyguts_t */
1451
1452     /* This must go here because YYSTYPE and YYLTYPE are included
1453      * from bison output in section 1.*/
1454     #    define yylval yyg->yylval_r
1455     
1456     #    define yylloc yyg->yylloc_r
1457     
1458 /* Accessor methods to globals.
1459    These are made visible to non-reentrant scanners for convenience. */
1460
1461 int ast_yylex_destroy (yyscan_t yyscanner );
1462
1463 int ast_yyget_debug (yyscan_t yyscanner );
1464
1465 void ast_yyset_debug (int debug_flag ,yyscan_t yyscanner );
1466
1467 YY_EXTRA_TYPE ast_yyget_extra (yyscan_t yyscanner );
1468
1469 void ast_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
1470
1471 FILE *ast_yyget_in (yyscan_t yyscanner );
1472
1473 void ast_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
1474
1475 FILE *ast_yyget_out (yyscan_t yyscanner );
1476
1477 void ast_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
1478
1479 int ast_yyget_leng (yyscan_t yyscanner );
1480
1481 char *ast_yyget_text (yyscan_t yyscanner );
1482
1483 int ast_yyget_lineno (yyscan_t yyscanner );
1484
1485 void ast_yyset_lineno (int line_number ,yyscan_t yyscanner );
1486
1487 YYSTYPE * ast_yyget_lval (yyscan_t yyscanner );
1488
1489 void ast_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
1490
1491        YYLTYPE *ast_yyget_lloc (yyscan_t yyscanner );
1492     
1493         void ast_yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
1494     
1495 /* Macros after this point can all be overridden by user definitions in
1496  * section 1.
1497  */
1498
1499 #ifndef YY_SKIP_YYWRAP
1500 #ifdef __cplusplus
1501 extern "C" int ast_yywrap (yyscan_t yyscanner );
1502 #else
1503 extern int ast_yywrap (yyscan_t yyscanner );
1504 #endif
1505 #endif
1506
1507     static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
1508     
1509 #ifndef yytext_ptr
1510 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
1511 #endif
1512
1513 #ifdef YY_NEED_STRLEN
1514 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
1515 #endif
1516
1517 #ifndef YY_NO_INPUT
1518
1519 #ifdef __cplusplus
1520 static int yyinput (yyscan_t yyscanner );
1521 #else
1522 static int input (yyscan_t yyscanner );
1523 #endif
1524
1525 #endif
1526
1527 /* Amount of stuff to slurp up with each read. */
1528 #ifndef YY_READ_BUF_SIZE
1529 #define YY_READ_BUF_SIZE 8192
1530 #endif
1531
1532 /* Copy whatever the last rule matched to the standard output. */
1533 #ifndef ECHO
1534 /* This used to be an fputs(), but since the string might contain NUL's,
1535  * we now use fwrite().
1536  */
1537 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1538 #endif
1539
1540 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1541  * is returned in "result".
1542  */
1543 #ifndef YY_INPUT
1544 #define YY_INPUT(buf,result,max_size) \
1545         errno=0; \
1546         while ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
1547         { \
1548                 if( errno != EINTR) \
1549                 { \
1550                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1551                         break; \
1552                 } \
1553                 errno=0; \
1554                 clearerr(yyin); \
1555         }\
1556 \
1557
1558 #endif
1559
1560 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1561  * we don't want an extra ';' after the "return" because that will cause
1562  * some compilers to complain about unreachable statements.
1563  */
1564 #ifndef yyterminate
1565 #define yyterminate() return YY_NULL
1566 #endif
1567
1568 /* Number of entries by which start-condition stack grows. */
1569 #ifndef YY_START_STACK_INCR
1570 #define YY_START_STACK_INCR 25
1571 #endif
1572
1573 /* Report a fatal error. */
1574 #ifndef YY_FATAL_ERROR
1575 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
1576 #endif
1577
1578 /* end tables serialization structures and prototypes */
1579
1580 /* Default declaration of generated scanner - a define so the user can
1581  * easily add parameters.
1582  */
1583 #ifndef YY_DECL
1584 #define YY_DECL_IS_OURS 1
1585
1586 extern int ast_yylex (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
1587
1588 #define YY_DECL int ast_yylex (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
1589 #endif /* !YY_DECL */
1590
1591 /* Code executed at the beginning of each rule, after yytext and yyleng
1592  * have been set up.
1593  */
1594 #ifndef YY_USER_ACTION
1595 #define YY_USER_ACTION
1596 #endif
1597
1598 /* Code executed at the end of each rule. */
1599 #ifndef YY_BREAK
1600 #define YY_BREAK break;
1601 #endif
1602
1603 #define YY_RULE_SETUP \
1604         YY_USER_ACTION
1605
1606 /** The main scanner function which does all the work.
1607  */
1608 YY_DECL
1609 {
1610         register yy_state_type yy_current_state;
1611         register char *yy_cp, *yy_bp;
1612         register int yy_act;
1613     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1614
1615 #line 83 "ast_expr2.fl"
1616
1617
1618 #line 1614 "ast_expr2f.c"
1619
1620     yylval = yylval_param;
1621
1622     yylloc = yylloc_param;
1623
1624         if ( yyg->yy_init )
1625                 {
1626                 yyg->yy_init = 0;
1627
1628 #ifdef YY_USER_INIT
1629                 YY_USER_INIT;
1630 #endif
1631
1632                 if ( ! yyg->yy_start )
1633                         yyg->yy_start = 1;      /* first start state */
1634
1635                 if ( ! yyin )
1636                         yyin = stdin;
1637
1638                 if ( ! yyout )
1639                         yyout = stdout;
1640
1641                 if ( ! YY_CURRENT_BUFFER ) {
1642                         ast_yyensure_buffer_stack (yyscanner);
1643                         YY_CURRENT_BUFFER_LVALUE =
1644                                 ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
1645                 }
1646
1647                 ast_yy_load_buffer_state(yyscanner );
1648                 }
1649
1650         while ( 1 )             /* loops until end-of-file is reached */
1651                 {
1652                 yyg->yy_more_len = 0;
1653                 if ( yyg->yy_more_flag )
1654                         {
1655                         yyg->yy_more_len = yyg->yy_c_buf_p - yyg->yytext_ptr;
1656                         yyg->yy_more_flag = 0;
1657                         }
1658                 yy_cp = yyg->yy_c_buf_p;
1659
1660                 /* Support of yytext. */
1661                 *yy_cp = yyg->yy_hold_char;
1662
1663                 /* yy_bp points to the position in yy_ch_buf of the start of
1664                  * the current run.
1665                  */
1666                 yy_bp = yy_cp;
1667
1668                 yy_current_state = yyg->yy_start;
1669 yy_match:
1670                 while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 )
1671                         {
1672                         if ( yy_accept[yy_current_state] )
1673                                 {
1674                                 yyg->yy_last_accepting_state = yy_current_state;
1675                                 yyg->yy_last_accepting_cpos = yy_cp;
1676                                 }
1677
1678                         ++yy_cp;
1679                         }
1680
1681                 yy_current_state = -yy_current_state;
1682
1683 yy_find_action:
1684                 yy_act = yy_accept[yy_current_state];
1685
1686                 YY_DO_BEFORE_ACTION;
1687
1688 do_action:      /* This label is used only to access EOF actions. */
1689
1690                 switch ( yy_act )
1691         { /* beginning of action switch */
1692                         case 0: /* must back up */
1693                         /* undo the effects of YY_DO_BEFORE_ACTION */
1694                         *yy_cp = yyg->yy_hold_char;
1695                         yy_cp = yyg->yy_last_accepting_cpos + 1;
1696                         yy_current_state = yyg->yy_last_accepting_state;
1697                         goto yy_find_action;
1698
1699 case 1:
1700 YY_RULE_SETUP
1701 #line 85 "ast_expr2.fl"
1702 { SET_COLUMNS; SET_STRING; return TOK_OR;}
1703         YY_BREAK
1704 case 2:
1705 YY_RULE_SETUP
1706 #line 86 "ast_expr2.fl"
1707 { SET_COLUMNS; SET_STRING; return TOK_AND;}
1708         YY_BREAK
1709 case 3:
1710 YY_RULE_SETUP
1711 #line 87 "ast_expr2.fl"
1712 { SET_COLUMNS; SET_STRING; return TOK_EQ;}
1713         YY_BREAK
1714 case 4:
1715 YY_RULE_SETUP
1716 #line 88 "ast_expr2.fl"
1717 { SET_COLUMNS; SET_STRING; return TOK_OR;}
1718         YY_BREAK
1719 case 5:
1720 YY_RULE_SETUP
1721 #line 89 "ast_expr2.fl"
1722 { SET_COLUMNS; SET_STRING; return TOK_AND;}
1723         YY_BREAK
1724 case 6:
1725 YY_RULE_SETUP
1726 #line 90 "ast_expr2.fl"
1727 { SET_COLUMNS; SET_STRING; return TOK_EQ;}
1728         YY_BREAK
1729 case 7:
1730 YY_RULE_SETUP
1731 #line 91 "ast_expr2.fl"
1732 { SET_COLUMNS; SET_STRING; return TOK_EQTILDE;}
1733         YY_BREAK
1734 case 8:
1735 YY_RULE_SETUP
1736 #line 92 "ast_expr2.fl"
1737 { SET_COLUMNS; SET_STRING; return TOK_GT;}
1738         YY_BREAK
1739 case 9:
1740 YY_RULE_SETUP
1741 #line 93 "ast_expr2.fl"
1742 { SET_COLUMNS; SET_STRING; return TOK_LT;}
1743         YY_BREAK
1744 case 10:
1745 YY_RULE_SETUP
1746 #line 94 "ast_expr2.fl"
1747 { SET_COLUMNS; SET_STRING; return TOK_GE;}
1748         YY_BREAK
1749 case 11:
1750 YY_RULE_SETUP
1751 #line 95 "ast_expr2.fl"
1752 { SET_COLUMNS; SET_STRING; return TOK_LE;}
1753         YY_BREAK
1754 case 12:
1755 YY_RULE_SETUP
1756 #line 96 "ast_expr2.fl"
1757 { SET_COLUMNS; SET_STRING; return TOK_NE;}
1758         YY_BREAK
1759 case 13:
1760 YY_RULE_SETUP
1761 #line 97 "ast_expr2.fl"
1762 { SET_COLUMNS; SET_STRING; return TOK_PLUS;}
1763         YY_BREAK
1764 case 14:
1765 YY_RULE_SETUP
1766 #line 98 "ast_expr2.fl"
1767 { SET_COLUMNS; SET_STRING; return TOK_MINUS;}
1768         YY_BREAK
1769 case 15:
1770 YY_RULE_SETUP
1771 #line 99 "ast_expr2.fl"
1772 { SET_COLUMNS; SET_STRING; return TOK_MULT;}
1773         YY_BREAK
1774 case 16:
1775 YY_RULE_SETUP
1776 #line 100 "ast_expr2.fl"
1777 { SET_COLUMNS; SET_STRING; return TOK_DIV;}
1778         YY_BREAK
1779 case 17:
1780 YY_RULE_SETUP
1781 #line 101 "ast_expr2.fl"
1782 { SET_COLUMNS; SET_STRING; return TOK_MOD;}
1783         YY_BREAK
1784 case 18:
1785 YY_RULE_SETUP
1786 #line 102 "ast_expr2.fl"
1787 { SET_COLUMNS; SET_STRING; return TOK_COND;}
1788         YY_BREAK
1789 case 19:
1790 YY_RULE_SETUP
1791 #line 103 "ast_expr2.fl"
1792 { SET_COLUMNS; SET_STRING; return TOK_COMPL;}
1793         YY_BREAK
1794 case 20:
1795 YY_RULE_SETUP
1796 #line 104 "ast_expr2.fl"
1797 { SET_COLUMNS; SET_STRING; return TOK_COLON;}
1798         YY_BREAK
1799 case 21:
1800 YY_RULE_SETUP
1801 #line 105 "ast_expr2.fl"
1802 { SET_COLUMNS; SET_STRING; return TOK_COLONCOLON;}
1803         YY_BREAK
1804 case 22:
1805 YY_RULE_SETUP
1806 #line 106 "ast_expr2.fl"
1807 { SET_COLUMNS; SET_STRING; return TOK_LP;}
1808         YY_BREAK
1809 case 23:
1810 YY_RULE_SETUP
1811 #line 107 "ast_expr2.fl"
1812 { SET_COLUMNS; SET_STRING; return TOK_RP;}
1813         YY_BREAK
1814 case 24:
1815 YY_RULE_SETUP
1816 #line 108 "ast_expr2.fl"
1817 {/* gather the contents of ${} expressions, with trailing stuff, into a single TOKEN. They are much more complex now than they used to be */
1818                        curlycount = 0; BEGIN(var); yymore();}
1819         YY_BREAK
1820 case 25:
1821 YY_RULE_SETUP
1822 #line 111 "ast_expr2.fl"
1823 {}
1824         YY_BREAK
1825 case 26:
1826 /* rule 26 can match eol */
1827 YY_RULE_SETUP
1828 #line 112 "ast_expr2.fl"
1829 {SET_COLUMNS; SET_STRING; return TOKEN;}
1830         YY_BREAK
1831 case 27:
1832 /* rule 27 can match eol */
1833 YY_RULE_SETUP
1834 #line 114 "ast_expr2.fl"
1835 {/* what to do with eol */}
1836         YY_BREAK
1837 case 28:
1838 YY_RULE_SETUP
1839 #line 115 "ast_expr2.fl"
1840 {   SET_COLUMNS;  /* the original behavior of the expression parser was to bring in numbers as a numeric string */
1841                                 SET_NUMERIC_STRING;
1842                                 return TOKEN;}
1843         YY_BREAK
1844 case 29:
1845 YY_RULE_SETUP
1846 #line 119 "ast_expr2.fl"
1847 {SET_COLUMNS; SET_STRING; return TOKEN;}
1848         YY_BREAK
1849 case 30:
1850 /* rule 30 can match eol */
1851 YY_RULE_SETUP
1852 #line 121 "ast_expr2.fl"
1853 {curlycount--; if(curlycount < 0){ BEGIN(trail);  yymore();} else {  yymore();}}
1854         YY_BREAK
1855 case 31:
1856 /* rule 31 can match eol */
1857 YY_RULE_SETUP
1858 #line 122 "ast_expr2.fl"
1859 {curlycount++; yymore();  }
1860         YY_BREAK
1861 case 32:
1862 YY_RULE_SETUP
1863 #line 123 "ast_expr2.fl"
1864 {BEGIN(0); SET_COLUMNS; SET_STRING; return TOKEN;}
1865         YY_BREAK
1866 case 33:
1867 /* rule 33 can match eol */
1868 YY_RULE_SETUP
1869 #line 124 "ast_expr2.fl"
1870 {char c = yytext[yyleng-1]; BEGIN(0); unput(c); SET_COLUMNS; SET_STRING; return TOKEN;}
1871         YY_BREAK
1872 case 34:
1873 YY_RULE_SETUP
1874 #line 125 "ast_expr2.fl"
1875 {curlycount = 0; BEGIN(var); yymore();  }
1876         YY_BREAK
1877 case YY_STATE_EOF(trail):
1878 #line 126 "ast_expr2.fl"
1879 {BEGIN(0); SET_COLUMNS; SET_STRING; return TOKEN; /*actually, if an expr is only a variable ref, this could happen a LOT */}
1880         YY_BREAK
1881 case 35:
1882 YY_RULE_SETUP
1883 #line 128 "ast_expr2.fl"
1884 ECHO;
1885         YY_BREAK
1886 #line 1882 "ast_expr2f.c"
1887 case YY_STATE_EOF(INITIAL):
1888 case YY_STATE_EOF(var):
1889         yyterminate();
1890
1891         case YY_END_OF_BUFFER:
1892                 {
1893                 /* Amount of text matched not including the EOB char. */
1894                 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
1895
1896                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
1897                 *yy_cp = yyg->yy_hold_char;
1898                 YY_RESTORE_YY_MORE_OFFSET
1899
1900                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1901                         {
1902                         /* We're scanning a new file or input source.  It's
1903                          * possible that this happened because the user
1904                          * just pointed yyin at a new source and called
1905                          * ast_yylex().  If so, then we have to assure
1906                          * consistency between YY_CURRENT_BUFFER and our
1907                          * globals.  Here is the right place to do so, because
1908                          * this is the first action (other than possibly a
1909                          * back-up) that will match for the new input source.
1910                          */
1911                         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1912                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
1913                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1914                         }
1915
1916                 /* Note that here we test for yy_c_buf_p "<=" to the position
1917                  * of the first EOB in the buffer, since yy_c_buf_p will
1918                  * already have been incremented past the NUL character
1919                  * (since all states make transitions on EOB to the
1920                  * end-of-buffer state).  Contrast this with the test
1921                  * in input().
1922                  */
1923                 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
1924                         { /* This was really a NUL. */
1925                         yy_state_type yy_next_state;
1926
1927                         yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
1928
1929                         yy_current_state = yy_get_previous_state( yyscanner );
1930
1931                         /* Okay, we're now positioned to make the NUL
1932                          * transition.  We couldn't have
1933                          * yy_get_previous_state() go ahead and do it
1934                          * for us because it doesn't know how to deal
1935                          * with the possibility of jamming (and we don't
1936                          * want to build jamming into it because then it
1937                          * will run more slowly).
1938                          */
1939
1940                         yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
1941
1942                         yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1943
1944                         if ( yy_next_state )
1945                                 {
1946                                 /* Consume the NUL. */
1947                                 yy_cp = ++yyg->yy_c_buf_p;
1948                                 yy_current_state = yy_next_state;
1949                                 goto yy_match;
1950                                 }
1951
1952                         else
1953                                 {
1954                                 yy_cp = yyg->yy_c_buf_p;
1955                                 goto yy_find_action;
1956                                 }
1957                         }
1958
1959                 else switch ( yy_get_next_buffer( yyscanner ) )
1960                         {
1961                         case EOB_ACT_END_OF_FILE:
1962                                 {
1963                                 yyg->yy_did_buffer_switch_on_eof = 0;
1964
1965                                 if ( ast_yywrap(yyscanner ) )
1966                                         {
1967                                         /* Note: because we've taken care in
1968                                          * yy_get_next_buffer() to have set up
1969                                          * yytext, we can now set up
1970                                          * yy_c_buf_p so that if some total
1971                                          * hoser (like flex itself) wants to
1972                                          * call the scanner after we return the
1973                                          * YY_NULL, it'll still work - another
1974                                          * YY_NULL will get returned.
1975                                          */
1976                                         yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
1977
1978                                         yy_act = YY_STATE_EOF(YY_START);
1979                                         goto do_action;
1980                                         }
1981
1982                                 else
1983                                         {
1984                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
1985                                                 YY_NEW_FILE;
1986                                         }
1987                                 break;
1988                                 }
1989
1990                         case EOB_ACT_CONTINUE_SCAN:
1991                                 yyg->yy_c_buf_p =
1992                                         yyg->yytext_ptr + yy_amount_of_matched_text;
1993
1994                                 yy_current_state = yy_get_previous_state( yyscanner );
1995
1996                                 yy_cp = yyg->yy_c_buf_p;
1997                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1998                                 goto yy_match;
1999
2000                         case EOB_ACT_LAST_MATCH:
2001                                 yyg->yy_c_buf_p =
2002                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
2003
2004                                 yy_current_state = yy_get_previous_state( yyscanner );
2005
2006                                 yy_cp = yyg->yy_c_buf_p;
2007                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2008                                 goto yy_find_action;
2009                         }
2010                 break;
2011                 }
2012
2013         default:
2014                 YY_FATAL_ERROR(
2015                         "fatal flex scanner internal error--no action found" );
2016         } /* end of action switch */
2017                 } /* end of scanning one token */
2018 } /* end of ast_yylex */
2019
2020 /* yy_get_next_buffer - try to read in a new buffer
2021  *
2022  * Returns a code representing an action:
2023  *      EOB_ACT_LAST_MATCH -
2024  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2025  *      EOB_ACT_END_OF_FILE - end of file
2026  */
2027 static int yy_get_next_buffer (yyscan_t yyscanner)
2028 {
2029     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2030         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2031         register char *source = yyg->yytext_ptr;
2032         register int number_to_move, i;
2033         int ret_val;
2034
2035         if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
2036                 YY_FATAL_ERROR(
2037                 "fatal flex scanner internal error--end of buffer missed" );
2038
2039         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2040                 { /* Don't try to fill the buffer, so this is an EOF. */
2041                 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
2042                         {
2043                         /* We matched a single character, the EOB, so
2044                          * treat this as a final EOF.
2045                          */
2046                         return EOB_ACT_END_OF_FILE;
2047                         }
2048
2049                 else
2050                         {
2051                         /* We matched some text prior to the EOB, first
2052                          * process it.
2053                          */
2054                         return EOB_ACT_LAST_MATCH;
2055                         }
2056                 }
2057
2058         /* Try to read more data. */
2059
2060         /* First move last chars to start of buffer. */
2061         number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
2062
2063         for ( i = 0; i < number_to_move; ++i )
2064                 *(dest++) = *(source++);
2065
2066         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2067                 /* don't do the read, it's not guaranteed to return an EOF,
2068                  * just force an EOF
2069                  */
2070                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
2071
2072         else
2073                 {
2074                         size_t num_to_read =
2075                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2076
2077                 while ( num_to_read <= 0 )
2078                         { /* Not enough room in the buffer - grow it. */
2079
2080                         /* just a shorter name for the current buffer */
2081                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
2082
2083                         int yy_c_buf_p_offset =
2084                                 (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
2085
2086                         if ( b->yy_is_our_buffer )
2087                                 {
2088                                 int new_size = b->yy_buf_size * 2;
2089
2090                                 if ( new_size <= 0 )
2091                                         b->yy_buf_size += b->yy_buf_size / 8;
2092                                 else
2093                                         b->yy_buf_size *= 2;
2094
2095                                 b->yy_ch_buf = (char *)
2096                                         /* Include room in for 2 EOB chars. */
2097                                         ast_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
2098                                 }
2099                         else
2100                                 /* Can't grow it, we don't own it. */
2101                                 b->yy_ch_buf = 0;
2102
2103                         if ( ! b->yy_ch_buf )
2104                                 YY_FATAL_ERROR(
2105                                 "fatal error - scanner input buffer overflow" );
2106
2107                         yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2108
2109                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
2110                                                 number_to_move - 1;
2111
2112                         }
2113
2114                 if ( num_to_read > YY_READ_BUF_SIZE )
2115                         num_to_read = YY_READ_BUF_SIZE;
2116
2117                 /* Read in more data. */
2118                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2119                         yyg->yy_n_chars, num_to_read );
2120
2121                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2122                 }
2123
2124         if ( yyg->yy_n_chars == 0 )
2125                 {
2126                 if ( number_to_move == YY_MORE_ADJ )
2127                         {
2128                         ret_val = EOB_ACT_END_OF_FILE;
2129                         ast_yyrestart(yyin  ,yyscanner);
2130                         }
2131
2132                 else
2133                         {
2134                         ret_val = EOB_ACT_LAST_MATCH;
2135                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2136                                 YY_BUFFER_EOF_PENDING;
2137                         }
2138                 }
2139
2140         else
2141                 ret_val = EOB_ACT_CONTINUE_SCAN;
2142
2143         yyg->yy_n_chars += number_to_move;
2144         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
2145         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
2146
2147         yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2148
2149         return ret_val;
2150 }
2151
2152 /* yy_get_previous_state - get the state just before the EOB char was reached */
2153
2154     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
2155 {
2156         register yy_state_type yy_current_state;
2157         register char *yy_cp;
2158     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2159
2160         yy_current_state = yyg->yy_start;
2161
2162         for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
2163                 {
2164                 if ( *yy_cp )
2165                         {
2166                         yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)];
2167                         }
2168                 else
2169                         yy_current_state = yy_NUL_trans[yy_current_state];
2170                 if ( yy_accept[yy_current_state] )
2171                         {
2172                         yyg->yy_last_accepting_state = yy_current_state;
2173                         yyg->yy_last_accepting_cpos = yy_cp;
2174                         }
2175                 }
2176
2177         return yy_current_state;
2178 }
2179
2180 /* yy_try_NUL_trans - try to make a transition on the NUL character
2181  *
2182  * synopsis
2183  *      next_state = yy_try_NUL_trans( current_state );
2184  */
2185     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
2186 {
2187         register int yy_is_jam;
2188     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2189         register char *yy_cp = yyg->yy_c_buf_p;
2190
2191         yy_current_state = yy_NUL_trans[yy_current_state];
2192         yy_is_jam = (yy_current_state == 0);
2193
2194         if ( ! yy_is_jam )
2195                 {
2196                 if ( yy_accept[yy_current_state] )
2197                         {
2198                         yyg->yy_last_accepting_state = yy_current_state;
2199                         yyg->yy_last_accepting_cpos = yy_cp;
2200                         }
2201                 }
2202
2203         return yy_is_jam ? 0 : yy_current_state;
2204 }
2205
2206     static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
2207 {
2208         register char *yy_cp;
2209     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2210
2211     yy_cp = yyg->yy_c_buf_p;
2212
2213         /* undo effects of setting up yytext */
2214         *yy_cp = yyg->yy_hold_char;
2215
2216         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2217                 { /* need to shift things up to make room */
2218                 /* +2 for EOB chars. */
2219                 register int number_to_move = yyg->yy_n_chars + 2;
2220                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
2221                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
2222                 register char *source =
2223                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
2224
2225                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2226                         *--dest = *--source;
2227
2228                 yy_cp += (int) (dest - source);
2229                 yy_bp += (int) (dest - source);
2230                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
2231                         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
2232
2233                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2234                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
2235                 }
2236
2237         *--yy_cp = (char) c;
2238
2239         yyg->yytext_ptr = yy_bp;
2240         yyg->yy_hold_char = *yy_cp;
2241         yyg->yy_c_buf_p = yy_cp;
2242 }
2243
2244 #ifndef YY_NO_INPUT
2245 #ifdef __cplusplus
2246     static int yyinput (yyscan_t yyscanner)
2247 #else
2248     static int input  (yyscan_t yyscanner)
2249 #endif
2250
2251 {
2252         int c;
2253     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2254
2255         *yyg->yy_c_buf_p = yyg->yy_hold_char;
2256
2257         if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2258                 {
2259                 /* yy_c_buf_p now points to the character we want to return.
2260                  * If this occurs *before* the EOB characters, then it's a
2261                  * valid NUL; if not, then we've hit the end of the buffer.
2262                  */
2263                 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2264                         /* This was really a NUL. */
2265                         *yyg->yy_c_buf_p = '\0';
2266
2267                 else
2268                         { /* need more input */
2269                         int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
2270                         ++yyg->yy_c_buf_p;
2271
2272                         switch ( yy_get_next_buffer( yyscanner ) )
2273                                 {
2274                                 case EOB_ACT_LAST_MATCH:
2275                                         /* This happens because yy_g_n_b()
2276                                          * sees that we've accumulated a
2277                                          * token and flags that we need to
2278                                          * try matching the token before
2279                                          * proceeding.  But for input(),
2280                                          * there's no matching to consider.
2281                                          * So convert the EOB_ACT_LAST_MATCH
2282                                          * to EOB_ACT_END_OF_FILE.
2283                                          */
2284
2285                                         /* Reset buffer status. */
2286                                         ast_yyrestart(yyin ,yyscanner);
2287
2288                                         /*FALLTHROUGH*/
2289
2290                                 case EOB_ACT_END_OF_FILE:
2291                                         {
2292                                         if ( ast_yywrap(yyscanner ) )
2293                                                 return EOF;
2294
2295                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
2296                                                 YY_NEW_FILE;
2297 #ifdef __cplusplus
2298                                         return yyinput(yyscanner);
2299 #else
2300                                         return input(yyscanner);
2301 #endif
2302                                         }
2303
2304                                 case EOB_ACT_CONTINUE_SCAN:
2305                                         yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
2306                                         break;
2307                                 }
2308                         }
2309                 }
2310
2311         c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
2312         *yyg->yy_c_buf_p = '\0';        /* preserve yytext */
2313         yyg->yy_hold_char = *++yyg->yy_c_buf_p;
2314
2315         return c;
2316 }
2317 #endif  /* ifndef YY_NO_INPUT */
2318
2319 /** Immediately switch to a different input stream.
2320  * @param input_file A readable stream.
2321  * @param yyscanner The scanner object.
2322  * @note This function does not reset the start condition to @c INITIAL .
2323  */
2324     void ast_yyrestart  (FILE * input_file , yyscan_t yyscanner)
2325 {
2326     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2327
2328         if ( ! YY_CURRENT_BUFFER ){
2329         ast_yyensure_buffer_stack (yyscanner);
2330                 YY_CURRENT_BUFFER_LVALUE =
2331             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
2332         }
2333
2334         ast_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
2335         ast_yy_load_buffer_state(yyscanner );
2336 }
2337
2338 /** Switch to a different input buffer.
2339  * @param new_buffer The new input buffer.
2340  * @param yyscanner The scanner object.
2341  */
2342     void ast_yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
2343 {
2344     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2345
2346         /* TODO. We should be able to replace this entire function body
2347          * with
2348          *              ast_yypop_buffer_state();
2349          *              ast_yypush_buffer_state(new_buffer);
2350      */
2351         ast_yyensure_buffer_stack (yyscanner);
2352         if ( YY_CURRENT_BUFFER == new_buffer )
2353                 return;
2354
2355         if ( YY_CURRENT_BUFFER )
2356                 {
2357                 /* Flush out information for old buffer. */
2358                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2359                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2360                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2361                 }
2362
2363         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2364         ast_yy_load_buffer_state(yyscanner );
2365
2366         /* We don't actually know whether we did this switch during
2367          * EOF (ast_yywrap()) processing, but the only time this flag
2368          * is looked at is after ast_yywrap() is called, so it's safe
2369          * to go ahead and always set it.
2370          */
2371         yyg->yy_did_buffer_switch_on_eof = 1;
2372 }
2373
2374 static void ast_yy_load_buffer_state  (yyscan_t yyscanner)
2375 {
2376     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2377         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2378         yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2379         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2380         yyg->yy_hold_char = *yyg->yy_c_buf_p;
2381 }
2382
2383 /** Allocate and initialize an input buffer state.
2384  * @param file A readable stream.
2385  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2386  * @param yyscanner The scanner object.
2387  * @return the allocated buffer state.
2388  */
2389     YY_BUFFER_STATE ast_yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
2390 {
2391         YY_BUFFER_STATE b;
2392     
2393         b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2394         if ( ! b )
2395                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" );
2396
2397         b->yy_buf_size = size;
2398
2399         /* yy_ch_buf has to be 2 characters longer than the size given because
2400          * we need to put in 2 end-of-buffer characters.
2401          */
2402         b->yy_ch_buf = (char *) ast_yyalloc(b->yy_buf_size + 2 ,yyscanner );
2403         if ( ! b->yy_ch_buf )
2404                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" );
2405
2406         b->yy_is_our_buffer = 1;
2407
2408         ast_yy_init_buffer(b,file ,yyscanner);
2409
2410         return b;
2411 }
2412
2413 /** Destroy the buffer.
2414  * @param b a buffer created with ast_yy_create_buffer()
2415  * @param yyscanner The scanner object.
2416  */
2417     void ast_yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
2418 {
2419     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2420
2421         if ( ! b )
2422                 return;
2423
2424         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2425                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2426
2427         if ( b->yy_is_our_buffer )
2428                 ast_yyfree((void *) b->yy_ch_buf ,yyscanner );
2429
2430         ast_yyfree((void *) b ,yyscanner );
2431 }
2432
2433 #ifndef __cplusplus
2434 extern int isatty (int );
2435 #endif /* __cplusplus */
2436     
2437 /* Initializes or reinitializes a buffer.
2438  * This function is sometimes called more than once on the same buffer,
2439  * such as during a ast_yyrestart() or at EOF.
2440  */
2441     static void ast_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
2442
2443 {
2444         int oerrno = errno;
2445     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2446
2447         ast_yy_flush_buffer(b ,yyscanner);
2448
2449         b->yy_input_file = file;
2450         b->yy_fill_buffer = 1;
2451
2452     /* If b is the current buffer, then ast_yy_init_buffer was _probably_
2453      * called from ast_yyrestart() or through yy_get_next_buffer.
2454      * In that case, we don't want to reset the lineno or column.
2455      */
2456     if (b != YY_CURRENT_BUFFER){
2457         b->yy_bs_lineno = 1;
2458         b->yy_bs_column = 0;
2459     }
2460
2461         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
2462     
2463         errno = oerrno;
2464 }
2465
2466 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2467  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2468  * @param yyscanner The scanner object.
2469  */
2470     void ast_yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
2471 {
2472     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2473         if ( ! b )
2474                 return;
2475
2476         b->yy_n_chars = 0;
2477
2478         /* We always need two end-of-buffer characters.  The first causes
2479          * a transition to the end-of-buffer state.  The second causes
2480          * a jam in that state.
2481          */
2482         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2483         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2484
2485         b->yy_buf_pos = &b->yy_ch_buf[0];
2486
2487         b->yy_at_bol = 1;
2488         b->yy_buffer_status = YY_BUFFER_NEW;
2489
2490         if ( b == YY_CURRENT_BUFFER )
2491                 ast_yy_load_buffer_state(yyscanner );
2492 }
2493
2494 /** Pushes the new state onto the stack. The new state becomes
2495  *  the current state. This function will allocate the stack
2496  *  if necessary.
2497  *  @param new_buffer The new state.
2498  *  @param yyscanner The scanner object.
2499  */
2500 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2501 {
2502     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2503         if (new_buffer == NULL)
2504                 return;
2505
2506         ast_yyensure_buffer_stack(yyscanner);
2507
2508         /* This block is copied from ast_yy_switch_to_buffer. */
2509         if ( YY_CURRENT_BUFFER )
2510                 {
2511                 /* Flush out information for old buffer. */
2512                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2513                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2514                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2515                 }
2516
2517         /* Only push if top exists. Otherwise, replace top. */
2518         if (YY_CURRENT_BUFFER)
2519                 yyg->yy_buffer_stack_top++;
2520         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2521
2522         /* copied from ast_yy_switch_to_buffer. */
2523         ast_yy_load_buffer_state(yyscanner );
2524         yyg->yy_did_buffer_switch_on_eof = 1;
2525 }
2526
2527 /** Removes and deletes the top of the stack, if present.
2528  *  The next element becomes the new top.
2529  *  @param yyscanner The scanner object.
2530  */
2531 void ast_yypop_buffer_state (yyscan_t yyscanner)
2532 {
2533     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2534         if (!YY_CURRENT_BUFFER)
2535                 return;
2536
2537         ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
2538         YY_CURRENT_BUFFER_LVALUE = NULL;
2539         if (yyg->yy_buffer_stack_top > 0)
2540                 --yyg->yy_buffer_stack_top;
2541
2542         if (YY_CURRENT_BUFFER) {
2543                 ast_yy_load_buffer_state(yyscanner );
2544                 yyg->yy_did_buffer_switch_on_eof = 1;
2545         }
2546 }
2547
2548 /* Allocates the stack if it does not exist.
2549  *  Guarantees space for at least one push.
2550  */
2551 static void ast_yyensure_buffer_stack (yyscan_t yyscanner)
2552 {
2553         int num_to_alloc;
2554     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2555
2556         if (!yyg->yy_buffer_stack) {
2557
2558                 /* First allocation is just for 2 elements, since we don't know if this
2559                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2560                  * immediate realloc on the next call.
2561          */
2562                 num_to_alloc = 1;
2563                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyalloc
2564                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
2565                                                                 , yyscanner);
2566                 
2567                 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2568                                 
2569                 yyg->yy_buffer_stack_max = num_to_alloc;
2570                 yyg->yy_buffer_stack_top = 0;
2571                 return;
2572         }
2573
2574         if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
2575
2576                 /* Increase the buffer to prepare for a possible push. */
2577                 int grow_size = 8 /* arbitrary grow size */;
2578
2579                 num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
2580                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyrealloc
2581                                                                 (yyg->yy_buffer_stack,
2582                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
2583                                                                 , yyscanner);
2584
2585                 /* zero only the new slots.*/
2586                 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
2587                 yyg->yy_buffer_stack_max = num_to_alloc;
2588         }
2589 }
2590
2591 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2592  * @param base the character buffer
2593  * @param size the size in bytes of the character buffer
2594  * @param yyscanner The scanner object.
2595  * @return the newly allocated buffer state object. 
2596  */
2597 YY_BUFFER_STATE ast_yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
2598 {
2599         YY_BUFFER_STATE b;
2600     
2601         if ( size < 2 ||
2602              base[size-2] != YY_END_OF_BUFFER_CHAR ||
2603              base[size-1] != YY_END_OF_BUFFER_CHAR )
2604                 /* They forgot to leave room for the EOB's. */
2605                 return 0;
2606
2607         b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2608         if ( ! b )
2609                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_buffer()" );
2610
2611         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
2612         b->yy_buf_pos = b->yy_ch_buf = base;
2613         b->yy_is_our_buffer = 0;
2614         b->yy_input_file = 0;
2615         b->yy_n_chars = b->yy_buf_size;
2616         b->yy_is_interactive = 0;
2617         b->yy_at_bol = 1;
2618         b->yy_fill_buffer = 0;
2619         b->yy_buffer_status = YY_BUFFER_NEW;
2620
2621         ast_yy_switch_to_buffer(b ,yyscanner );
2622
2623         return b;
2624 }
2625
2626 /** Setup the input buffer state to scan a string. The next call to ast_yylex() will
2627  * scan from a @e copy of @a str.
2628  * @param str a NUL-terminated string to scan
2629  * @param yyscanner The scanner object.
2630  * @return the newly allocated buffer state object.
2631  * @note If you want to scan bytes that may contain NUL values, then use
2632  *       ast_yy_scan_bytes() instead.
2633  */
2634 YY_BUFFER_STATE ast_yy_scan_string (yyconst char * str , yyscan_t yyscanner)
2635 {
2636     
2637         return ast_yy_scan_bytes(str,strlen(str) ,yyscanner);
2638 }
2639
2640 /** Setup the input buffer state to scan the given bytes. The next call to ast_yylex() will
2641  * scan from a @e copy of @a bytes.
2642  * @param bytes the byte buffer to scan
2643  * @param len the number of bytes in the buffer pointed to by @a bytes.
2644  * @param yyscanner The scanner object.
2645  * @return the newly allocated buffer state object.
2646  */
2647 YY_BUFFER_STATE ast_yy_scan_bytes  (yyconst char * bytes, int  len , yyscan_t yyscanner)
2648 {
2649         YY_BUFFER_STATE b;
2650         char *buf;
2651         yy_size_t n;
2652         int i;
2653     
2654         /* Get memory for full buffer, including space for trailing EOB's. */
2655         n = len + 2;
2656         buf = (char *) ast_yyalloc(n ,yyscanner );
2657         if ( ! buf )
2658                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_bytes()" );
2659
2660         for ( i = 0; i < len; ++i )
2661                 buf[i] = bytes[i];
2662
2663         buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
2664
2665         b = ast_yy_scan_buffer(buf,n ,yyscanner);
2666         if ( ! b )
2667                 YY_FATAL_ERROR( "bad buffer in ast_yy_scan_bytes()" );
2668
2669         /* It's okay to grow etc. this buffer, and we should throw it
2670          * away when we're done.
2671          */
2672         b->yy_is_our_buffer = 1;
2673
2674         return b;
2675 }
2676
2677 #ifndef YY_EXIT_FAILURE
2678 #define YY_EXIT_FAILURE 2
2679 #endif
2680
2681 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
2682 {
2683         (void) fprintf( stderr, "%s\n", msg );
2684         exit( YY_EXIT_FAILURE );
2685 }
2686
2687 /* Redefine yyless() so it works in section 3 code. */
2688
2689 #undef yyless
2690 #define yyless(n) \
2691         do \
2692                 { \
2693                 /* Undo effects of setting up yytext. */ \
2694         int yyless_macro_arg = (n); \
2695         YY_LESS_LINENO(yyless_macro_arg);\
2696                 yytext[yyleng] = yyg->yy_hold_char; \
2697                 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
2698                 yyg->yy_hold_char = *yyg->yy_c_buf_p; \
2699                 *yyg->yy_c_buf_p = '\0'; \
2700                 yyleng = yyless_macro_arg; \
2701                 } \
2702         while ( 0 )
2703
2704 /* Accessor  methods (get/set functions) to struct members. */
2705
2706 /** Get the user-defined data for this scanner.
2707  * @param yyscanner The scanner object.
2708  */
2709 YY_EXTRA_TYPE ast_yyget_extra  (yyscan_t yyscanner)
2710 {
2711     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2712     return yyextra;
2713 }
2714
2715 /** Get the current line number.
2716  * @param yyscanner The scanner object.
2717  */
2718 int ast_yyget_lineno  (yyscan_t yyscanner)
2719 {
2720     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2721     
2722         if (! YY_CURRENT_BUFFER)
2723             return 0;
2724     
2725     return yylineno;
2726 }
2727
2728 /** Get the current column number.
2729  * @param yyscanner The scanner object.
2730  */
2731 int ast_yyget_column  (yyscan_t yyscanner)
2732 {
2733     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2734     
2735         if (! YY_CURRENT_BUFFER)
2736             return 0;
2737     
2738     return yycolumn;
2739 }
2740
2741 /** Get the input stream.
2742  * @param yyscanner The scanner object.
2743  */
2744 FILE *ast_yyget_in  (yyscan_t yyscanner)
2745 {
2746     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2747     return yyin;
2748 }
2749
2750 /** Get the output stream.
2751  * @param yyscanner The scanner object.
2752  */
2753 FILE *ast_yyget_out  (yyscan_t yyscanner)
2754 {
2755     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2756     return yyout;
2757 }
2758
2759 /** Get the length of the current token.
2760  * @param yyscanner The scanner object.
2761  */
2762 int ast_yyget_leng  (yyscan_t yyscanner)
2763 {
2764     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2765     return yyleng;
2766 }
2767
2768 /** Get the current token.
2769  * @param yyscanner The scanner object.
2770  */
2771
2772 char *ast_yyget_text  (yyscan_t yyscanner)
2773 {
2774     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2775     return yytext;
2776 }
2777
2778 /** Set the user-defined data. This data is never touched by the scanner.
2779  * @param user_defined The data to be associated with this scanner.
2780  * @param yyscanner The scanner object.
2781  */
2782 void ast_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
2783 {
2784     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2785     yyextra = user_defined ;
2786 }
2787
2788 /** Set the current line number.
2789  * @param line_number
2790  * @param yyscanner The scanner object.
2791  */
2792 void ast_yyset_lineno (int  line_number , yyscan_t yyscanner)
2793 {
2794     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2795
2796         /* lineno is only valid if an input buffer exists. */
2797         if (! YY_CURRENT_BUFFER )
2798            yy_fatal_error( "ast_yyset_lineno called with no buffer" , yyscanner); 
2799     
2800     yylineno = line_number;
2801 }
2802
2803 /** Set the current column.
2804  * @param line_number
2805  * @param yyscanner The scanner object.
2806  */
2807 void ast_yyset_column (int  column_no , yyscan_t yyscanner)
2808 {
2809     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2810
2811         /* column is only valid if an input buffer exists. */
2812         if (! YY_CURRENT_BUFFER )
2813            yy_fatal_error( "ast_yyset_column called with no buffer" , yyscanner); 
2814     
2815     yycolumn = column_no;
2816 }
2817
2818 /** Set the input stream. This does not discard the current
2819  * input buffer.
2820  * @param in_str A readable stream.
2821  * @param yyscanner The scanner object.
2822  * @see ast_yy_switch_to_buffer
2823  */
2824 void ast_yyset_in (FILE *  in_str , yyscan_t yyscanner)
2825 {
2826     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2827     yyin = in_str ;
2828 }
2829
2830 void ast_yyset_out (FILE *  out_str , yyscan_t yyscanner)
2831 {
2832     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2833     yyout = out_str ;
2834 }
2835
2836 int ast_yyget_debug  (yyscan_t yyscanner)
2837 {
2838     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2839     return yy_flex_debug;
2840 }
2841
2842 void ast_yyset_debug (int  bdebug , yyscan_t yyscanner)
2843 {
2844     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2845     yy_flex_debug = bdebug ;
2846 }
2847
2848 /* Accessor methods for yylval and yylloc */
2849
2850 YYSTYPE * ast_yyget_lval  (yyscan_t yyscanner)
2851 {
2852     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2853     return yylval;
2854 }
2855
2856 void ast_yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
2857 {
2858     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2859     yylval = yylval_param;
2860 }
2861
2862 YYLTYPE *ast_yyget_lloc  (yyscan_t yyscanner)
2863 {
2864     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2865     return yylloc;
2866 }
2867     
2868 void ast_yyset_lloc (YYLTYPE *  yylloc_param , yyscan_t yyscanner)
2869 {
2870     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2871     yylloc = yylloc_param;
2872 }
2873     
2874 static int yy_init_globals (yyscan_t yyscanner)
2875 {
2876     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2877     /* Initialization is the same as for the non-reentrant scanner.
2878        This function is called once per scanner lifetime. */
2879
2880     yyg->yy_buffer_stack = 0;
2881     yyg->yy_buffer_stack_top = 0;
2882     yyg->yy_buffer_stack_max = 0;
2883     yyg->yy_c_buf_p = (char *) 0;
2884     yyg->yy_init = 1;
2885     yyg->yy_start = 0;
2886     yyg->yy_start_stack_ptr = 0;
2887     yyg->yy_start_stack_depth = 0;
2888     yyg->yy_start_stack = (int *) 0;
2889
2890 /* Defined in main.c */
2891 #ifdef YY_STDINIT
2892     yyin = stdin;
2893     yyout = stdout;
2894 #else
2895     yyin = (FILE *) 0;
2896     yyout = (FILE *) 0;
2897 #endif
2898
2899     /* For future reference: Set errno on error, since we are called by
2900      * ast_yylex_init()
2901      */
2902     return 0;
2903 }
2904
2905 /* User-visible API */
2906
2907 /* ast_yylex_init is special because it creates the scanner itself, so it is
2908  * the ONLY reentrant function that doesn't take the scanner as the last argument.
2909  * That's why we explicitly handle the declaration, instead of using our macros.
2910  */
2911
2912 int ast_yylex_init(yyscan_t* ptr_yy_globals)
2913
2914 {
2915     if (ptr_yy_globals == NULL){
2916         errno = EINVAL;
2917         return 1;
2918     }
2919
2920     *ptr_yy_globals = (yyscan_t) ast_yyalloc ( sizeof( struct yyguts_t ), NULL );
2921
2922     if (*ptr_yy_globals == NULL){
2923         errno = ENOMEM;
2924         return 1;
2925     }
2926
2927     memset(*ptr_yy_globals,0,sizeof(struct yyguts_t));
2928
2929     return yy_init_globals ( *ptr_yy_globals );
2930 }
2931
2932 /* ast_yylex_destroy is for both reentrant and non-reentrant scanners. */
2933 int ast_yylex_destroy  (yyscan_t yyscanner)
2934 {
2935     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2936
2937     /* Pop the buffer stack, destroying each element. */
2938         while(YY_CURRENT_BUFFER){
2939                 ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
2940                 YY_CURRENT_BUFFER_LVALUE = NULL;
2941                 ast_yypop_buffer_state(yyscanner);
2942         }
2943
2944         /* Destroy the stack itself. */
2945         ast_yyfree(yyg->yy_buffer_stack ,yyscanner);
2946         yyg->yy_buffer_stack = NULL;
2947
2948     /* Destroy the start condition stack. */
2949         ast_yyfree(yyg->yy_start_stack ,yyscanner );
2950         yyg->yy_start_stack = NULL;
2951
2952     /* Destroy the main struct (reentrant only). */
2953     ast_yyfree ( yyscanner , yyscanner );
2954     return 0;
2955 }
2956
2957 /*
2958  * Internal utility routines.
2959  */
2960
2961 #ifndef yytext_ptr
2962 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
2963 {
2964         register int i;
2965     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2966         for ( i = 0; i < n; ++i )
2967                 s1[i] = s2[i];
2968 }
2969 #endif
2970
2971 #ifdef YY_NEED_STRLEN
2972 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
2973 {
2974         register int n;
2975     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2976         for ( n = 0; s[n]; ++n )
2977                 ;
2978
2979         return n;
2980 }
2981 #endif
2982
2983 void *ast_yyalloc (yy_size_t  size , yyscan_t yyscanner)
2984 {
2985         return (void *) malloc( size );
2986 }
2987
2988 void *ast_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
2989 {
2990         /* The cast to (char *) in the following accommodates both
2991          * implementations that use char* generic pointers, and those
2992          * that use void* generic pointers.  It works with the latter
2993          * because both ANSI C and C++ allow castless assignment from
2994          * any pointer type to void*, and deal with argument conversions
2995          * as though doing an assignment.
2996          */
2997         return (void *) realloc( (char *) ptr, size );
2998 }
2999
3000 void ast_yyfree (void * ptr , yyscan_t yyscanner)
3001 {
3002         free( (char *) ptr );   /* see ast_yyrealloc() for (char *) cast */
3003 }
3004
3005 #define YYTABLES_NAME "yytables"
3006
3007 #undef YY_NEW_FILE
3008 #undef YY_FLUSH_BUFFER
3009 #undef yy_set_bol
3010 #undef yy_new_buffer
3011 #undef yy_set_interactive
3012 #undef yytext_ptr
3013 #undef YY_DO_BEFORE_ACTION
3014
3015 #ifdef YY_DECL_IS_OURS
3016 #undef YY_DECL_IS_OURS
3017 #undef YY_DECL
3018 #endif
3019 #line 128 "ast_expr2.fl"
3020
3021
3022
3023 /* I'm putting the interface routine to the whole parse here in the flexer input file
3024    mainly because of all the flexer initialization that has to be done. Shouldn't matter
3025    where it is, as long as it's somewhere. I didn't want to define a prototype for the
3026    ast_yy_scan_string in the .y file, because then, I'd have to define YY_BUFFER_STATE there...
3027         UGH! that would be inappropriate. */
3028
3029 int ast_yyparse(void *); /* need to/should define this prototype for the call to yyparse */
3030 int ast_yyerror(const char *, YYLTYPE *, struct parse_io *); /* likewise */
3031
3032 int ast_expr(char *expr, char *buf, int length)
3033 {
3034         struct parse_io io;
3035         int return_value = 0;
3036         
3037         memset(&io, 0, sizeof(io));
3038         io.string = expr;  /* to pass to the error routine */
3039         
3040         ast_yylex_init(&io.scanner);
3041         
3042         ast_yy_scan_string(expr, io.scanner);
3043         
3044         ast_yyparse ((void *) &io);
3045
3046         ast_yylex_destroy(io.scanner);
3047
3048         if (!io.val) {
3049                 if (length > 1) {
3050                         strcpy(buf, "0");
3051                         return_value = 1;
3052                 }
3053         } else {
3054                 if (io.val->type == AST_EXPR_integer) {
3055                         int res_length;
3056
3057                         res_length = snprintf(buf, length, "%ld", (long int) io.val->u.i);
3058                         return_value = (res_length <= length) ? res_length : length;
3059                 } else {
3060 #ifdef STANDALONE
3061                         strncpy(buf, io.val->u.s, length - 1);
3062 #else /* !STANDALONE */
3063                         ast_copy_string(buf, io.val->u.s, length);
3064 #endif /* STANDALONE */
3065                         return_value = strlen(buf);
3066                         free(io.val->u.s);
3067                 }
3068                 free(io.val);
3069         }
3070         return return_value;
3071 }
3072
3073
3074 char extra_error_message[4095];
3075 int extra_error_message_supplied = 0;
3076 void  ast_expr_register_extra_error_info(char *message);
3077 void  ast_expr_clear_extra_error_info(void);
3078
3079 void  ast_expr_register_extra_error_info(char *message)
3080 {
3081        extra_error_message_supplied=1;
3082        strcpy(extra_error_message, message);
3083 }
3084
3085 void  ast_expr_clear_extra_error_info(void)
3086 {
3087        extra_error_message_supplied=0;
3088        extra_error_message[0] = 0;
3089 }
3090
3091 static char *expr2_token_equivs1[] = 
3092 {
3093         "TOKEN",
3094         "TOK_COND",
3095         "TOK_COLONCOLON",
3096         "TOK_OR",
3097         "TOK_AND",
3098         "TOK_EQ",
3099         "TOK_GT",
3100         "TOK_LT",
3101         "TOK_GE",
3102         "TOK_LE",
3103         "TOK_NE",
3104         "TOK_PLUS",
3105         "TOK_MINUS",
3106         "TOK_MULT",
3107         "TOK_DIV",
3108         "TOK_MOD",
3109         "TOK_COMPL",
3110         "TOK_COLON",
3111         "TOK_EQTILDE",
3112         "TOK_RP",
3113         "TOK_LP"
3114 };
3115
3116 static char *expr2_token_equivs2[] = 
3117 {
3118         "<token>",
3119         "?",
3120         "::",
3121         "|",
3122         "&",
3123         "=",
3124         ">",
3125         "<",
3126         ">=",
3127         "<=",
3128         "!=",
3129         "+",
3130         "-",
3131         "*",
3132         "/",
3133         "%",
3134         "!",
3135         ":",
3136         "=~",
3137         ")",
3138         "("
3139 };
3140
3141
3142 static char *expr2_token_subst(char *mess)
3143 {
3144         /* calc a length, malloc, fill, and return; yyerror had better free it! */
3145         int len=0,i;
3146         char *p;
3147         char *res, *s,*t;
3148         int expr2_token_equivs_entries = sizeof(expr2_token_equivs1)/sizeof(char*);
3149
3150         for (p=mess; *p; p++) {
3151                 for (i=0; i<expr2_token_equivs_entries; i++) {
3152                         if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 )
3153                         {
3154                                 len+=strlen(expr2_token_equivs2[i])+2;
3155                                 p += strlen(expr2_token_equivs1[i])-1;
3156                                 break;
3157                         }
3158                 }
3159                 len++;
3160         }
3161         res = (char*)malloc(len+1);
3162         res[0] = 0;
3163         s = res;
3164         for (p=mess; *p;) {
3165                 int found = 0;
3166                 for (i=0; i<expr2_token_equivs_entries; i++) {
3167                         if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 ) {
3168                                 *s++ = '\'';
3169                                 for (t=expr2_token_equivs2[i]; *t;) {
3170                                         *s++ = *t++;
3171                                 }
3172                                 *s++ = '\'';
3173                                 p += strlen(expr2_token_equivs1[i]);
3174                                 found = 1;
3175                                 break;
3176                         }
3177                 }
3178                 if( !found )
3179                         *s++ = *p++;
3180         }
3181         *s++ = 0;
3182         return res;
3183 }
3184
3185 int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio )
3186 {       
3187         struct yyguts_t * yyg = (struct yyguts_t*)(parseio->scanner);
3188         char spacebuf[8000]; /* best safe than sorry */
3189         char spacebuf2[8000]; /* best safe than sorry */
3190         int i=0;
3191         char *s2 = expr2_token_subst((char *)s);
3192         spacebuf[0] = 0;
3193         
3194         for(i=0;i< (int)(yytext - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);i++) spacebuf2[i] = ' ';  /* uh... assuming yyg is defined, then I can use the yycolumn macro,
3195                                                                                                                                                                                                 which is the same thing as... get this:
3196                                                                                                         yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]->yy_bs_column
3197                                                                                                         I was tempted to just use yy_buf_pos in the STATE, but..., well:
3198                                                                                                                 a. the yy_buf_pos is the current position in the buffer, which
3199                                                                                                                         may not relate to the entire string/buffer because of the
3200                                                                                                                         buffering.
3201                                                                                                                 b. but, analysis of the situation is that when you use the
3202                                                                                                                         ast_yy_scan_string func, it creates a single buffer the size of
3203                                                                                                                         string, so the two would be the same... 
3204                                                                                                         so, in the end, the yycolumn macro is available, shorter, therefore easier. */
3205         spacebuf2[i++]='^';
3206         spacebuf2[i]= 0;
3207
3208 #ifdef STANDALONE3
3209         /* easier to read in the standalone version */
3210         printf("ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n",  
3211                         (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2);
3212 #else
3213         ast_log(LOG_WARNING,"ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n",  
3214                         (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2);
3215 #endif
3216 #ifndef STANDALONE
3217         ast_log(LOG_WARNING,"If you have questions, please refer to doc/channelvariables.txt in the asterisk source.\n");
3218 #endif
3219         free(s2);
3220         return(0);
3221 }
3222