#include #include #include # define U(x) x # define NLSTATE yyprevious=YYNEWLINE # define BEGIN yybgin = yysvec + 1 + # define INITIAL 0 # define YYLERR yysvec # define YYSTATE (yyestate-yysvec-1) # define YYOPTIM 1 # ifndef YYLMAX # define YYLMAX BUFSIZ # endif #ifndef __cplusplus # define output(c) (void)putc(c,yyout) #else # define lex_output(c) (void)putc(c,yyout) #endif #if defined(__cplusplus) || defined(__STDC__) #if defined(__cplusplus) && defined(__EXTERN_C__) extern "C" { #endif int yyback(int *, int); int yyinput(void); int yylook(void); void yyoutput(int); int yyracc(int); int yyreject(void); void yyunput(int); int yylex(void); #ifdef YYLEX_E void yywoutput(wchar_t); wchar_t yywinput(void); void yywunput(wchar_t); #endif #ifndef yyless int yyless(int); #endif #ifndef yywrap int yywrap(void); #endif #ifdef LEXDEBUG void allprint(char); void sprint(char *); #endif #if defined(__cplusplus) && defined(__EXTERN_C__) } #endif #ifdef __cplusplus extern "C" { #endif void exit(int); #ifdef __cplusplus } #endif #endif # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;} # define yymore() (yymorfg=1) #ifndef __cplusplus # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) #else # define lex_input() (((yytchar=yysptr>yysbuf?U(*--yysptr):getc(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar) #endif #define ECHO fprintf(yyout, "%s",yytext) # define REJECT { nstr = yyreject(); goto yyfussy;} int yyleng; char yy_tbuf[YYLMAX]; char * yytext = yy_tbuf; int yytextsz = YYLMAX; #ifndef YYTEXTSZINC #define YYTEXTSZINC 100 #endif int yymorfg; extern char *yysptr, yysbuf[]; int yytchar; FILE *yyin = {stdin}, *yyout = {stdout}; extern int yylineno; struct yysvf { struct yywork *yystoff; struct yysvf *yyother; int *yystops;}; struct yysvf *yyestate; extern struct yysvf yysvec[], *yybgin; # line 5 "../../../common/mdb/mdb_lex.l" /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ # line 29 "../../../common/mdb/mdb_lex.l" /* * Copyright 2011 Nexenta Systems, Inc. All rights reserved. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mdb_grammar.h" # line 54 "../../../common/mdb/mdb_lex.l" /* * lex hardcodes yyin and yyout to stdin and stdout, respectively, before we get * control. We've redirected printf and fprintf (see mdb_lex.h) to yyprintf and * yyfprintf, which ignore the FILE * provided by yyout. __iob-based stdin and * stdout are useless in kmdb, since we don't have stdio. We define __iob here * to shut the linker up. */ #ifdef _KMDB FILE __iob[_NFILE]; #endif # line 65 "../../../common/mdb/mdb_lex.l" /* * We need to undefine lex's input, unput, and output macros so that references * to these call the functions we provide at the end of this source file, * instead of the default versions based on libc's stdio. */ #ifdef input #undef input #endif #ifdef unput #undef unput #endif #ifdef output #undef output #endif static int input(void); static void unput(int); static void output(int); static void string_unquote(char *); extern int yydebug; # line 90 "../../../common/mdb/mdb_lex.l" /* * This will prevent lex from trying to malloc() and resize our yytext variable, * instead it will just print out an error message and exit(), which seems * a lesser of two evils. */ #define YYISARRAY # define S_SHELLCMD 2 # define S_INITIAL 4 # define S_FMTLIST 6 # define S_ARGLIST 8 # define S_EXPR 10 # define YYNEWLINE 10 int yylex(){ int nstr; extern int yyprevious; #ifdef __cplusplus /* to avoid CC and lint complaining yyfussy not being used ...*/ static int __lex_hack = 0; if (__lex_hack) goto yyfussy; #endif while((nstr = yylook()) >= 0) yyfussy: switch(nstr){ case 0: if(yywrap()) return(0); break; case 1: # line 116 "../../../common/mdb/mdb_lex.l" case 2: # line 117 "../../../common/mdb/mdb_lex.l" case 3: # line 118 "../../../common/mdb/mdb_lex.l" { /* * Comments are legal in these three states -- if we see one * eat the line and return the newline character. */ BEGIN(S_INITIAL); return ('\n'); } break; case 4: # line 127 "../../../common/mdb/mdb_lex.l" case 5: # line 128 "../../../common/mdb/mdb_lex.l" return (MDB_TOK_EQUAL); break; case 6: # line 130 "../../../common/mdb/mdb_lex.l" case 7: # line 131 "../../../common/mdb/mdb_lex.l" return (MDB_TOK_NOTEQUAL); break; case 8: # line 133 "../../../common/mdb/mdb_lex.l" case 9: # line 134 "../../../common/mdb/mdb_lex.l" case 10: # line 135 "../../../common/mdb/mdb_lex.l" { /* * Shell escapes are legal in all of these states -- switch to * the shell command state and return the ! character. */ BEGIN(S_SHELLCMD); return (yytext[0]); } break; case 11: # line 144 "../../../common/mdb/mdb_lex.l" case 12: # line 145 "../../../common/mdb/mdb_lex.l" { /* * Pipelines can appear in any of these states -- switch to * the initial state and return the | character. */ BEGIN(S_INITIAL); return (yytext[0]); } break; case 13: # line 154 "../../../common/mdb/mdb_lex.l" { /* * Once in the shell-command state, we return all remaining * characters up to a newline or ';' delimiter as a single * string which will be passed to $SHELL -c. */ yylval.l_string = strdup(yytext); BEGIN(S_INITIAL); return (MDB_TOK_STRING); } break; case 14: # line 165 "../../../common/mdb/mdb_lex.l" { /* * Verb ::command-name -- lookup the correspond dcmd and * switch to the argument list state. */ if ((yylval.l_dcmd = mdb_dcmd_lookup(yytext + 2)) == NULL) yyperror("invalid command '%s'", yytext); BEGIN(S_ARGLIST); return (MDB_TOK_DCMD); } break; case 15: # line 177 "../../../common/mdb/mdb_lex.l" case 16: # line 178 "../../../common/mdb/mdb_lex.l" { /* * Old-style :c or $c command -- lookup the corresponding dcmd * and switch to the argument list state. */ if ((yylval.l_dcmd = mdb_dcmd_lookup(yytext)) == NULL) yyperror("invalid command '%s'", yytext); BEGIN(S_ARGLIST); return (MDB_TOK_DCMD); } break; case 17: # line 190 "../../../common/mdb/mdb_lex.l" { /* * Variable assignment with size cast -- append the cast letter * to the argument list, and switch to the argument list state. */ mdb_arg_t arg; arg.a_un.a_char = yytext[2]; arg.a_type = MDB_TYPE_CHAR; mdb_argvec_append(&mdb.m_frame->f_argvec, &arg); yylval.l_dcmd = mdb_dcmd_lookup(">"); BEGIN(S_ARGLIST); return (MDB_TOK_DCMD); } break; case 18: # line 207 "../../../common/mdb/mdb_lex.l" { /* * Variable assignment -- switch to the argument list state. */ yylval.l_dcmd = mdb_dcmd_lookup(yytext); BEGIN(S_ARGLIST); return (MDB_TOK_DCMD); } break; case 19: # line 216 "../../../common/mdb/mdb_lex.l" { /* * Format verb followed by write or match signifier -- switch * to the value list state and return the verb character. We * also append the actual format character to the arg list. */ mdb_arg_t arg; arg.a_un.a_char = yytext[yyleng - 1]; arg.a_type = MDB_TYPE_CHAR; mdb_argvec_append(&mdb.m_frame->f_argvec, &arg); BEGIN(S_ARGLIST); return yytext[0]; } break; case 20: # line 233 "../../../common/mdb/mdb_lex.l" { /* * Format verb -- switch to the format list state and return * the actual verb character verbatim. */ BEGIN(S_FMTLIST); return (yytext[0]); } break; case 21: # line 242 "../../../common/mdb/mdb_lex.l" case 22: # line 243 "../../../common/mdb/mdb_lex.l" yyerror("syntax error: ' unmatched"); break; case 23: # line 245 "../../../common/mdb/mdb_lex.l" case 24: # line 246 "../../../common/mdb/mdb_lex.l" { char *s, *p, *q; size_t nbytes; /* * If the character sequence is zero-length, return 0. */ if (yyleng == 2) { yylval.l_immediate = 0; return (MDB_TOK_IMMEDIATE); } s = yytext + 1; /* Skip past initial quote */ yytext[yyleng - 1] = '\0'; /* Overwrite final quote */ nbytes = stresc2chr(s); /* Convert escapes */ yylval.l_immediate = 0; /* Initialize token value */ if (nbytes > sizeof (uintmax_t)) { yyerror("character constant may not exceed %lu bytes\n", (ulong_t)sizeof (uintmax_t)); } #ifdef _LITTLE_ENDIAN p = ((char*)&yylval.l_immediate) + nbytes - 1; for (q = s; nbytes != 0; nbytes--) *p-- = *q++; #else bcopy(s, ((char *)&yylval.l_immediate) + sizeof (uintmax_t) - nbytes, nbytes); #endif return (MDB_TOK_IMMEDIATE); } break; case 25: # line 280 "../../../common/mdb/mdb_lex.l" yyerror("syntax error: \" unmatched"); break; case 26: # line 282 "../../../common/mdb/mdb_lex.l" { /* * Quoted string -- convert C escape sequences and return the * string as a token. */ yylval.l_string = strndup(yytext + 1, yyleng - 2); (void) stresc2chr(yylval.l_string); return (MDB_TOK_STRING); } break; case 27: # line 292 "../../../common/mdb/mdb_lex.l" case 28: # line 293 "../../../common/mdb/mdb_lex.l" { /* * Start of expression -- begin expression state and save the * current state so we can return at the end of the expression. */ mdb.m_frame->f_oldstate = YYSTATE; BEGIN(S_EXPR); return (MDB_TOK_LEXPR); } break; case 29: # line 303 "../../../common/mdb/mdb_lex.l" { /* * String token -- create a copy of the string and return it. * We need to handle embedded single and double-quote pairs, * which overcomplicates this slightly. */ yylval.l_string = strdup(yytext); string_unquote(yylval.l_string); return (MDB_TOK_STRING); } break; case 30: # line 314 "../../../common/mdb/mdb_lex.l" { /* * Immediate value -- in the format list, all immediates * are assumed to be in decimal. */ yylval.l_immediate = strtonum(yytext, 10); return (MDB_TOK_IMMEDIATE); } break; case 31: # line 323 "../../../common/mdb/mdb_lex.l" { /* * Non-meta character -- in the format list, we return each * character as a separate token to be added as an argument. */ yylval.l_char = yytext[0]; return (MDB_TOK_CHAR); } break; case 32: # line 332 "../../../common/mdb/mdb_lex.l" { /* * In the expression state only, we cannot see a command * delimiter or shell escape before we end the expression. */ yyerror("syntax error: $[ unmatched"); } break; case 33: # line 340 "../../../common/mdb/mdb_lex.l" { /* * End of expression state. Restore the state we were in * before the "$[" which started this expression. */ BEGIN(mdb.m_frame->f_oldstate); return (MDB_TOK_REXPR); } break; case 34: # line 349 "../../../common/mdb/mdb_lex.l" case 35: # line 350 "../../../common/mdb/mdb_lex.l" case 36: # line 351 "../../../common/mdb/mdb_lex.l" case 37: # line 352 "../../../common/mdb/mdb_lex.l" { /* * Variable reference -- lookup the variable and return a * pointer to it. Referencing undefined variables is an error. */ yylval.l_var = mdb_nv_lookup(&mdb.m_nv, &yytext[1]); if (yylval.l_var == NULL) yyerror("variable '%s' is not defined", &yytext[1]); return (MDB_TOK_VAR_REF); } break; case 38: # line 365 "../../../common/mdb/mdb_lex.l" case 39: # line 366 "../../../common/mdb/mdb_lex.l" return (MDB_TOK_LSHIFT); break; case 40: # line 368 "../../../common/mdb/mdb_lex.l" case 41: # line 369 "../../../common/mdb/mdb_lex.l" return (MDB_TOK_RSHIFT); break; case 42: # line 371 "../../../common/mdb/mdb_lex.l" case 43: # line 372 "../../../common/mdb/mdb_lex.l" { switch (yytext[2]) { case 'c': case '1': return (MDB_TOK_COR1_DEREF); case 's': case '2': return (MDB_TOK_COR2_DEREF); case 'i': case '4': #ifdef _ILP32 case 'l': #endif return (MDB_TOK_COR4_DEREF); #ifdef _LP64 case 'l': #endif case '8': return (MDB_TOK_COR8_DEREF); } yyerror("invalid cast -- %s\n", yytext); } break; case 44: # line 392 "../../../common/mdb/mdb_lex.l" case 45: # line 393 "../../../common/mdb/mdb_lex.l" { switch (yytext[2]) { case 'c': case '1': return (MDB_TOK_OBJ1_DEREF); case 's': case '2': return (MDB_TOK_OBJ2_DEREF); case 'i': case '4': #ifdef _ILP32 case 'l': #endif return (MDB_TOK_OBJ4_DEREF); #ifdef _LP64 case 'l': #endif case '8': return (MDB_TOK_OBJ8_DEREF); } yyerror("invalid cast -- %s\n", yytext); } break; case 46: # line 413 "../../../common/mdb/mdb_lex.l" case 47: # line 414 "../../../common/mdb/mdb_lex.l" { /* * Binary immediate value. */ yylval.l_immediate = strtonum(yytext + 2, 2); return (MDB_TOK_IMMEDIATE); } break; case 48: # line 422 "../../../common/mdb/mdb_lex.l" case 49: # line 423 "../../../common/mdb/mdb_lex.l" { /* * Octal immediate value. */ yylval.l_immediate = strtonum(yytext + 2, 8); return (MDB_TOK_IMMEDIATE); } break; case 50: # line 431 "../../../common/mdb/mdb_lex.l" case 51: # line 432 "../../../common/mdb/mdb_lex.l" { #ifdef _KMDB yyerror("floating point not supported\n"); #else /* * Decimal floating point value. */ char *p, c; double d; int i; if ((p = strsplit(yytext, '.')) == NULL) yyerror("internal scanning error -- expected '.'\n"); d = (double)strtonum(yytext + 2, 10); for (i = 0; (c = *p++) != '\0'; i++) d = d * 10 + c - '0'; while (i-- != 0) d /= 10; yylval.l_immediate = *((uintmax_t *)&d); return (MDB_TOK_IMMEDIATE); #endif } break; case 52: # line 459 "../../../common/mdb/mdb_lex.l" case 53: # line 460 "../../../common/mdb/mdb_lex.l" { /* * Decimal immediate value. */ yylval.l_immediate = strtonum(yytext + 2, 10); return (MDB_TOK_IMMEDIATE); } break; case 54: # line 468 "../../../common/mdb/mdb_lex.l" case 55: # line 469 "../../../common/mdb/mdb_lex.l" { /* * Hexadecimal value. */ yylval.l_immediate = strtonum(yytext + 2, 16); return (MDB_TOK_IMMEDIATE); } break; case 56: # line 477 "../../../common/mdb/mdb_lex.l" case 57: # line 478 "../../../common/mdb/mdb_lex.l" { GElf_Sym sym; /* * Immediate values without an explicit base are converted * using the default radix (user configurable). However, if * the token does *not* begin with a digit, it is also a * potential symbol (e.g. "f") so we have to check that first. */ if (strchr("0123456789", yytext[0]) == NULL && mdb_tgt_lookup_by_name(mdb.m_target, MDB_TGT_OBJ_EVERY, yytext, &sym, NULL) == 0) yylval.l_immediate = (uintmax_t)sym.st_value; else yylval.l_immediate = strtonum(yytext, mdb.m_radix); return (MDB_TOK_IMMEDIATE); } break; case 58: # line 495 "../../../common/mdb/mdb_lex.l" case 59: # line 496 "../../../common/mdb/mdb_lex.l" { /* * Symbol -- parser will look up in symbol table. */ yylval.l_string = strdup(yytext); return (MDB_TOK_SYMBOL); } break; case 60: # line 504 "../../../common/mdb/mdb_lex.l" { /* * End of command -- return to start state and return literal. */ BEGIN(S_INITIAL); return (yytext[0]); } break; case 61: # line 512 "../../../common/mdb/mdb_lex.l" ; break; case 62: # line 514 "../../../common/mdb/mdb_lex.l" return (yytext[0]); break; case -1: break; default: (void)fprintf(yyout,"bad switch yylook %d",nstr); } return(0); } /* end of yylex */ # line 517 "../../../common/mdb/mdb_lex.l" void mdb_lex_debug(int i) { yydebug = i; } void mdb_lex_reset(void) { BEGIN(S_INITIAL); } void yydiscard(void) { int c; /* * If stdin is a string, pipeline, or tty, throw away all our buffered * data. Otherwise discard characters up to the next likely delimiter. */ if (mdb_iob_isastr(mdb.m_in) || mdb_iob_isatty(mdb.m_in) || mdb_iob_isapipe(mdb.m_in)) mdb_iob_discard(mdb.m_in); else { while ((c = mdb_iob_getc(mdb.m_in)) != (int)EOF) { if (c == ';' || c == '\n') break; } } BEGIN(S_INITIAL); } static void yyerror_reset(void) { yydiscard(); mdb_argvec_reset(&mdb.m_frame->f_argvec); longjmp(mdb.m_frame->f_pcb, MDB_ERR_PARSE); } void yyerror(const char *format, ...) { va_list alist; char *s; mdb_iob_printf(mdb.m_err, "%s: ", mdb.m_pname); va_start(alist, format); mdb_iob_vprintf(mdb.m_err, format, alist); va_end(alist); if (strchr(format, '\n') == NULL) { if (!mdb_iob_isatty(mdb.m_in)) { mdb_iob_printf(mdb.m_err, " on line %d of %s", yylineno, mdb_iob_name(mdb.m_in)); } s = strchr2esc(yytext, strlen(yytext)); mdb_iob_printf(mdb.m_err, " near \"%s\"\n", s); strfree(s); } yyerror_reset(); } void yyperror(const char *format, ...) { va_list alist; va_start(alist, format); vwarn(format, alist); va_end(alist); yyerror_reset(); } int yywrap(void) { mdb_dprintf(MDB_DBG_PARSER, "yywrap at line %d\n", yylineno); return (1); /* indicate that lex should return a zero token for EOF */ } /*PRINTFLIKE2*/ /*ARGSUSED*/ int yyfprintf(FILE *stream, const char *format, ...) { va_list alist; va_start(alist, format); mdb_iob_vprintf(mdb.m_err, format, alist); va_end(alist); return (0); } /*PRINTFLIKE1*/ int yyprintf(const char *format, ...) { va_list alist; va_start(alist, format); mdb_iob_vprintf(mdb.m_err, format, alist); va_end(alist); return (0); } static int input(void) { int c = mdb_iob_getc(mdb.m_in); if (c == '\n') yylineno++; return (c == EOF ? 0 : c); } static void unput(int c) { if (c == '\n') yylineno--; (void) mdb_iob_ungetc(mdb.m_in, c == 0 ? EOF : c); } static void output(int c) { char ch = c; mdb_iob_nputs(mdb.m_out, &ch, sizeof (ch)); } static char * string_nextquote(char *s, char q1, char q2) { char c = 0; do { if (c != '\\' && (*s == q1 || *s == q2)) return (s); } while ((c = *s++) != '\0'); return (NULL); } static void string_unquote(char *s) { char *o, *p, *q, c; for (o = p = s; (p = string_nextquote(p, '\'', '"')) != NULL; o = p) { /* * If the quote wasn't the first character, advance * the destination buffer past what we skipped. */ if (p > o) { /* Using memmove to prevent possible overlap. */ (void) memmove(s, o, p - o); s += p - o; } c = *p; /* Save the current quote */ /* * Look ahead and find the matching quote. If none is * found, use yyerror to longjmp out of the lexer. */ if (c == '"') q = string_nextquote(p + 1, c, c); else q = strchr(p + 1, c); if (q == NULL) yyerror("syntax error: %c unmatched", c); /* * If the string is non-empty, copy it to the destination * and convert escape sequences if *p is double-quote. */ if (q > p + 1) { (void) memmove(s, p + 1, q - p - 1); if (c == '"') { s[q - p - 1] = '\0'; s += stresc2chr(s); } else s += q - p - 1; } p = q + 1; /* Advance p past matching quote */ } (void) memmove(s, o, strlen(o) + 1); } /* * Unfortunately, lex and yacc produces code that is inherently global. They do * not provide routines to save and restore state, instead relying on global * variables. There is one single lex state, so that if a frame switch then * tries to perform any evaluation, the old values are corrupted. This * structure and corresponding function provide a means of preserving lex state * across frame switches. Note that this is tied to the lex implementation, so * if the lex compiler is changed or upgraded to a different format, then this * may need to be altered. This is unavoidable due to the implementation of lex * and yacc. This is essentially a collection of all the global variables * defined by the lex code, excluding those that do not change through the * course of yylex() and yyparse(). */ extern struct yysvf *yylstate[], **yylsp, **yyolsp; extern int yyprevious; extern int *yyfnd; extern YYSTYPE *yypv; extern int *yyps; extern int yytmp; extern int yystate; extern int yynerrs; extern int yyerrflag; extern int yychar; extern YYSTYPE yylval; extern YYSTYPE yyval; extern int *yys; extern YYSTYPE *yyv; typedef struct mdb_lex_state { /* Variables needed by yylex */ int yyleng; char yytext[YYLMAX]; int yymorfg; int yylineno; void *yyestate; void *yylstate[BUFSIZ]; void *yylsp; void *yyolsp; int *yyfnd; int yyprevious; void *yybgin; /* Variables needed by yyparse */ void *yypv; int *yyps; int yytmp; int yystate; int yynerrs; int yyerrflag; int yychar; YYSTYPE yylval; YYSTYPE yyval; int yys[YYMAXDEPTH]; YYSTYPE yyv[YYMAXDEPTH]; } mdb_lex_state_t; void mdb_lex_state_save(mdb_lex_state_t *s) { ASSERT(s != NULL); s->yyleng = yyleng; s->yymorfg = yymorfg; s->yylineno = yylineno; s->yyestate = yyestate; bcopy(yylstate, s->yylstate, YYLMAX * sizeof (void *)); s->yylsp = yylsp; s->yyolsp = yyolsp; s->yyfnd = yyfnd; s->yyprevious = yyprevious; s->yybgin = yybgin; s->yypv = yypv; s->yyps = yyps; s->yystate = yystate; s->yytmp = yytmp; s->yynerrs = yynerrs; s->yyerrflag = yyerrflag; s->yychar = yychar; s->yylval = yylval; s->yyval = yyval; } void mdb_lex_state_restore(mdb_lex_state_t *s) { ASSERT(s != NULL); yyleng = s->yyleng; yytext = s->yytext; yymorfg = s->yymorfg; yylineno = s->yylineno; yyestate = s->yyestate; bcopy(s->yylstate, yylstate, YYLMAX * sizeof (void *)); yylsp = s->yylsp; yyolsp = s->yyolsp; yyfnd = s->yyfnd; yyprevious = s->yyprevious; yybgin = s->yybgin; yypv = s->yypv; yyps = s->yyps; yystate = s->yystate; yytmp = s->yytmp; yynerrs = s->yynerrs; yyerrflag = s->yyerrflag; yychar = s->yychar; yylval = s->yylval; yyval = s->yyval; yys = s->yys; yyv = s->yyv; } /* * Create and initialize the lex/yacc-specific state associated with a frame * structure. We set all fields to known safe values so that * mdb_lex_state_restore() can be used safely before mdb_lex_state_save(). */ void mdb_lex_state_create(mdb_frame_t *f) { f->f_lstate = mdb_alloc(sizeof (mdb_lex_state_t), UM_SLEEP); yyleng = 0; yymorfg = 0; /* yytext is fine with garbage in it */ yytext = f->f_lstate->yytext; yylineno = 1; yyestate = NULL; bzero(yylstate, YYLMAX * sizeof (void *)); yylsp = NULL; yyolsp = NULL; yyfnd = 0; yyprevious = YYNEWLINE; yys = f->f_lstate->yys; yyv = f->f_lstate->yyv; mdb_argvec_create(&f->f_argvec); f->f_oldstate = 0; mdb_lex_reset(); /* Responsible for setting yybgin */ } void mdb_lex_state_destroy(mdb_frame_t *f) { mdb_free(f->f_lstate, sizeof (mdb_lex_state_t)); f->f_lstate = NULL; mdb_argvec_destroy(&f->f_argvec); } int yyvstop[] = { 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 62, 0, 61, 62, 0, 60, 0, 62, -25, 0, 60, 62, 0, 13, 62, 0, 13, 61, 62, 0, 13, 62, -25, 0, 8, 62, 0, 62, 0, 62, 0, 62, -21, 0, 62, 0, 58, 62, 0, 20, 62, 0, 56, 62, 0, 56, 62, 0, 62, 0, 62, 0, 20, 62, 0, 18, 62, 0, 20, 62, 0, 20, 62, 0, 56, 58, 62, 0, 31, 62, 0, 9, 62, 0, 62, 0, 31, 62, 0, 30, 31, 62, 0, 11, 62, 0, 29, 62, 0, 10, 62, 0, 62, -25, 0, 62, 0, 62, 0, 29, 62, 0, 12, 62, 0, 32, 60, 0, 32, 62, 0, 62, 0, 62, -22, 0, 62, 0, 59, 62, 0, 57, 62, 0, 57, 62, 0, 32, 60, 62, 0, 62, 0, 62, 0, 62, 0, 57, 59, 62, 0, 33, 62, 0, -25, 0, 25, 0, 26, 0, 13, 0, 13, -25, 0, 13, 26, 0, 13, 0, 6, 0, 16, 0, 15, 0, 15, 0, -21, 0, 21, 0, 23, 0, -21, 0, 58, 0, 19, 0, 56, 0, 34, 0, 35, 0, 38, 0, 4, 0, 40, 0, 56, 58, 0, 28, 0, 30, 0, 29, 0, -25, 0, 26, 29, 0, 27, 0, 29, 0, 29, 0, 7, 0, -22, 0, 22, 0, 24, 0, -22, 0, 59, 0, 57, 0, 36, 0, 37, 0, 39, 0, 5, 0, 41, 0, 57, 59, 0, 23, -21, 0, 1, 0, 46, 0, 48, 0, 52, 0, 54, 0, 14, 0, 2, 0, 29, 0, 3, 0, 24, -22, 0, 47, 0, 49, 0, 53, 0, 55, 0, 44, 0, 42, 0, 17, 0, 29, 0, 29, 0, 45, 0, 43, 0, 50, 0, 29, 0, 29, 0, 51, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 29, 0, 0}; # define YYTYPE unsigned char struct yywork { YYTYPE verify, advance; } yycrank[] = { 0,0, 0,0, 1,13, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,14, 1,15, 0,0, 0,0, 0,0, 0,0, 0,0, 104,0, 0,0, 19,0, 0,0, 0,0, 0,0, 110,0, 0,0, 0,0, 67,0, 0,0, 0,0, 0,0, 68,0, 0,0, 70,0, 0,0, 1,13, 1,16, 0,0, 1,13, 1,13, 0,0, 1,13, 0,0, 0,0, 0,0, 0,0, 0,0, 80,132, 1,13, 1,13, 1,13, 67,64, 1,13, 110,143, 117,149, 23,76, 25,81, 33,96, 1,13, 40,100, 1,13, 1,17, 52,113, 1,13, 54,118, 1,13, 1,13, 1,13, 3,18, 19,0, 21,72, 32,95, 33,97, 1,13, 51,112, 1,13, 3,19, 60,128, 1,13, 61,129, 68,0, 1,13, 70,0, 74,75, 48,0, 48,0, 1,13, 87,135, 87,135, 131,155, 1,13, 133,156, 6,25, 137,157, 1,13, 121,151, 121,151, 1,13, 1,13, 6,29, 3,18, 3,20, 39,99, 3,18, 3,18, 46,108, 3,18, 48,0, 48,0, 67,64, 6,31, 48,0, 6,33, 3,18, 3,18, 3,18, 140,158, 3,18, 142,0, 148,164, 150,165, 153,166, 48,111, 3,18, 0,0, 3,18, 102,0, 102,0, 3,18, 174,0, 3,18, 3,18, 3,18, 4,18, 48,0, 0,0, 0,0, 0,0, 3,18, 0,0, 3,18, 4,19, 142,103, 3,18, 6,13, 0,0, 3,18, 0,0, 0,0, 102,0, 102,0, 3,18, 0,0, 102,0, 0,0, 3,18, 0,0, 0,0, 174,173, 3,18, 169,0, 0,0, 3,18, 3,18, 0,0, 4,18, 4,20, 0,0, 4,18, 4,18, 0,0, 4,18, 0,0, 0,0, 6,13, 0,0, 102,0, 0,0, 4,18, 4,18, 4,18, 0,0, 4,18, 0,0, 169,159, 0,0, 0,0, 0,0, 4,18, 169,173, 4,18, 0,0, 0,0, 4,18, 0,0, 4,18, 4,18, 4,18, 5,13, 48,0, 142,103, 0,0, 0,0, 4,18, 0,0, 4,18, 5,14, 5,15, 4,18, 0,0, 0,0, 4,18, 0,0, 0,0, 0,0, 0,0, 4,18, 0,0, 0,0, 0,0, 4,18, 0,0, 0,0, 0,0, 4,18, 0,0, 0,0, 4,18, 4,18, 0,0, 5,21, 5,16, 0,0, 5,22, 5,23, 0,0, 5,24, 0,0, 0,0, 5,25, 0,0, 102,0, 169,174, 5,26, 5,27, 5,28, 5,29, 5,29, 0,0, 0,0, 0,0, 0,0, 7,37, 5,29, 0,0, 5,30, 5,17, 5,31, 5,32, 5,33, 5,34, 5,35, 5,36, 0,0, 0,0, 0,0, 0,0, 0,0, 5,26, 0,0, 5,26, 0,0, 0,0, 5,26, 0,0, 0,0, 5,26, 0,0, 0,0, 0,0, 0,0, 5,26, 0,0, 0,0, 7,38, 5,26, 0,0, 7,39, 7,37, 5,34, 0,0, 5,13, 5,26, 5,13, 0,0, 0,0, 0,0, 7,37, 7,40, 7,41, 0,0, 7,41, 0,0, 0,0, 0,0, 0,0, 8,37, 7,41, 0,0, 7,37, 0,0, 0,0, 7,37, 0,0, 7,37, 7,37, 7,37, 0,0, 0,0, 0,0, 0,0, 5,13, 7,37, 0,0, 7,37, 0,0, 0,0, 7,37, 0,0, 0,0, 7,37, 0,0, 0,0, 0,0, 0,0, 7,37, 0,0, 0,0, 8,38, 7,37, 0,0, 8,39, 8,37, 7,37, 0,0, 0,0, 7,37, 7,37, 0,0, 0,0, 0,0, 8,37, 8,40, 8,41, 0,0, 8,41, 0,0, 0,0, 0,0, 0,0, 0,0, 8,41, 0,0, 8,37, 0,0, 0,0, 8,37, 0,0, 8,37, 8,37, 8,37, 9,43, 0,0, 0,0, 0,0, 7,42, 8,37, 0,0, 8,37, 0,0, 0,0, 8,37, 0,0, 0,0, 8,37, 0,0, 0,0, 0,0, 0,0, 8,37, 0,0, 0,0, 0,0, 8,37, 0,0, 0,0, 0,0, 8,37, 0,0, 0,0, 8,37, 8,37, 0,0, 9,44, 9,45, 0,0, 9,46, 9,43, 0,0, 9,47, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 9,43, 9,48, 9,43, 0,0, 9,43, 0,0, 0,0, 0,0, 0,0, 0,0, 9,43, 0,0, 9,43, 8,42, 0,0, 9,43, 0,0, 9,43, 9,43, 9,43, 10,43, 0,0, 0,0, 0,0, 0,0, 9,43, 0,0, 9,43, 0,0, 0,0, 9,43, 0,0, 0,0, 9,43, 0,0, 0,0, 0,0, 0,0, 9,43, 0,0, 0,0, 0,0, 9,43, 0,0, 0,0, 0,0, 9,43, 0,0, 0,0, 9,43, 9,43, 0,0, 10,44, 10,45, 0,0, 10,46, 10,43, 0,0, 10,47, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 10,43, 10,48, 10,43, 0,0, 10,43, 11,50, 0,0, 0,0, 0,0, 0,0, 10,43, 0,0, 10,43, 9,49, 0,0, 10,43, 0,0, 10,43, 10,43, 10,43, 0,0, 0,0, 0,0, 0,0, 0,0, 10,43, 0,0, 10,43, 11,51, 0,0, 10,43, 0,0, 11,52, 10,43, 11,53, 0,0, 0,0, 11,54, 10,43, 0,0, 0,0, 11,55, 10,43, 11,56, 11,57, 11,57, 10,43, 0,0, 0,0, 10,43, 10,43, 11,57, 0,0, 0,0, 11,58, 11,59, 11,60, 11,61, 0,0, 0,0, 11,62, 0,0, 0,0, 0,0, 0,0, 0,0, 11,55, 0,0, 11,55, 0,0, 0,0, 11,55, 12,50, 0,0, 11,55, 0,0, 0,0, 0,0, 10,49, 11,55, 0,0, 0,0, 0,0, 11,55, 0,0, 0,0, 0,0, 0,0, 11,63, 11,13, 11,55, 0,0, 0,0, 0,0, 0,0, 12,51, 0,0, 0,0, 0,0, 12,52, 0,0, 12,53, 0,0, 0,0, 12,54, 0,0, 27,83, 0,0, 12,55, 0,0, 12,56, 12,57, 12,57, 0,0, 0,0, 0,0, 0,0, 0,0, 12,57, 11,13, 0,0, 12,58, 12,59, 12,60, 12,61, 0,0, 0,0, 12,62, 0,0, 27,83, 0,0, 0,0, 0,0, 12,55, 16,64, 12,55, 0,0, 0,0, 12,55, 0,0, 0,0, 12,55, 16,64, 16,65, 27,84, 0,0, 12,55, 0,0, 0,0, 0,0, 12,55, 0,0, 0,0, 0,0, 0,0, 12,63, 12,13, 12,55, 88,136, 88,136, 88,136, 88,136, 88,136, 88,136, 88,136, 88,136, 16,64, 16,66, 0,0, 16,64, 16,64, 0,0, 16,64, 27,85, 27,85, 0,0, 0,0, 0,0, 0,0, 16,64, 16,64, 16,64, 0,0, 16,64, 27,85, 0,0, 12,13, 27,85, 0,0, 16,64, 0,0, 16,64, 16,64, 0,0, 16,64, 0,0, 16,64, 16,64, 16,64, 18,68, 0,0, 0,0, 0,0, 0,0, 16,64, 27,85, 16,64, 18,68, 18,0, 16,64, 0,0, 0,0, 16,64, 0,0, 0,0, 27,85, 27,85, 16,64, 0,0, 0,0, 0,0, 16,64, 0,0, 0,0, 0,0, 16,67, 0,0, 0,0, 16,64, 16,64, 0,0, 18,68, 18,68, 0,0, 18,68, 18,68, 0,0, 18,68, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 18,68, 18,68, 18,68, 0,0, 18,68, 0,0, 0,0, 0,0, 0,0, 0,0, 18,68, 0,0, 18,68, 18,0, 0,0, 18,68, 0,0, 18,68, 18,68, 18,68, 20,69, 0,0, 0,0, 0,0, 0,0, 18,68, 0,0, 18,68, 20,69, 0,0, 18,68, 0,0, 0,0, 18,68, 0,0, 0,0, 0,0, 0,0, 18,68, 0,0, 0,0, 0,0, 18,68, 0,0, 0,0, 0,0, 18,68, 0,0, 0,0, 18,68, 18,68, 0,0, 20,69, 20,70, 0,0, 20,69, 20,69, 0,0, 20,69, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 20,69, 20,69, 20,69, 0,0, 20,69, 0,0, 0,0, 0,0, 0,0, 0,0, 20,69, 0,0, 20,69, 0,0, 0,0, 20,69, 0,0, 20,69, 20,69, 20,69, 0,0, 0,0, 0,0, 0,0, 0,0, 20,69, 0,0, 20,69, 22,73, 0,0, 20,69, 0,0, 0,0, 20,69, 0,0, 0,0, 0,0, 0,0, 20,69, 0,0, 0,0, 0,0, 20,69, 0,0, 0,0, 0,0, 20,71, 0,0, 0,0, 20,69, 20,69, 22,74, 0,0, 22,75, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 0,0, 0,0, 0,0, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 22,73, 24,77, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 24,77, 24,78, 41,101, 41,101, 41,101, 41,101, 41,101, 41,101, 41,101, 41,101, 41,101, 41,101, 89,137, 89,137, 89,137, 89,137, 89,137, 89,137, 89,137, 89,137, 89,137, 89,137, 0,0, 0,0, 24,77, 24,77, 0,0, 24,77, 24,77, 0,0, 24,79, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 24,77, 24,77, 24,77, 0,0, 24,77, 0,0, 0,0, 0,0, 0,0, 0,0, 24,77, 0,0, 24,77, 24,77, 0,0, 24,77, 0,0, 24,77, 24,77, 24,77, 0,0, 0,0, 0,0, 0,0, 0,0, 24,77, 0,0, 24,77, 0,0, 0,0, 24,77, 0,0, 0,0, 24,77, 0,0, 0,0, 0,0, 0,0, 24,77, 0,0, 0,0, 0,0, 24,77, 0,0, 0,0, 0,0, 24,80, 0,0, 0,0, 24,77, 24,77, 26,82, 0,0, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 0,0, 0,0, 0,0, 0,0, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 26,82, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 0,0, 0,0, 28,87, 0,0, 0,0, 0,0, 0,0, 0,0, 28,88, 0,0, 0,0, 0,0, 0,0, 28,89, 0,0, 0,0, 0,0, 28,90, 122,152, 122,152, 122,152, 122,152, 122,152, 122,152, 122,152, 122,152, 28,86, 28,86, 28,86, 28,86, 28,86, 28,86, 0,0, 0,0, 28,87, 0,0, 0,0, 0,0, 0,0, 0,0, 28,88, 0,0, 0,0, 0,0, 0,0, 28,89, 0,0, 0,0, 0,0, 28,90, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 123,153, 123,153, 123,153, 123,153, 123,153, 123,153, 123,153, 123,153, 123,153, 123,153, 0,0, 30,73, 157,167, 157,167, 157,167, 157,167, 157,167, 157,167, 157,167, 157,167, 157,167, 157,167, 0,0, 0,0, 0,0, 0,0, 29,86, 29,86, 29,86, 29,86, 29,86, 29,86, 30,91, 0,0, 0,0, 0,0, 0,0, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 0,0, 0,0, 0,0, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 30,73, 31,92, 0,0, 31,93, 31,93, 31,93, 31,93, 31,93, 31,93, 31,93, 31,93, 31,93, 31,93, 0,0, 0,0, 31,94, 0,0, 0,0, 0,0, 0,0, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 0,0, 0,0, 0,0, 0,0, 31,92, 0,0, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 31,92, 34,83, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 34,83, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 0,0, 0,0, 0,0, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 36,98, 36,98, 36,98, 36,98, 36,98, 36,98, 0,0, 0,0, 0,0, 0,0, 0,0, 34,85, 34,85, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 34,85, 0,0, 43,102, 34,85, 57,120, 57,120, 57,120, 57,120, 57,120, 57,120, 43,0, 43,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 34,85, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 34,85, 34,85, 43,0, 43,0, 43,103, 0,0, 43,0, 43,102, 0,0, 43,104, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 43,102, 43,102, 43,102, 0,0, 43,102, 0,0, 0,0, 0,0, 0,0, 0,0, 43,102, 0,0, 43,102, 43,0, 0,0, 43,102, 0,0, 43,102, 43,102, 43,102, 0,0, 0,0, 0,0, 0,0, 45,105, 43,102, 0,0, 43,102, 0,0, 0,0, 43,102, 0,0, 45,105, 43,102, 0,0, 0,0, 0,0, 0,0, 43,102, 0,0, 0,0, 0,0, 43,102, 0,0, 0,0, 0,0, 43,102, 0,0, 0,0, 43,102, 43,102, 0,0, 0,0, 0,0, 0,0, 0,0, 45,105, 45,106, 0,0, 45,105, 45,105, 0,0, 45,105, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 45,105, 45,105, 45,105, 0,0, 45,105, 0,0, 0,0, 0,0, 0,0, 43,0, 45,105, 0,0, 45,105, 45,105, 0,0, 45,105, 0,0, 45,105, 45,105, 45,105, 47,104, 0,0, 0,0, 0,0, 0,0, 45,105, 0,0, 45,105, 47,104, 47,0, 45,105, 0,0, 0,0, 45,105, 0,0, 0,0, 0,0, 0,0, 45,105, 0,0, 0,0, 0,0, 45,105, 0,0, 0,0, 0,0, 45,107, 0,0, 0,0, 45,105, 45,105, 0,0, 47,104, 47,104, 0,0, 47,104, 47,104, 0,0, 47,109, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 47,104, 47,104, 47,104, 0,0, 47,104, 0,0, 0,0, 0,0, 0,0, 0,0, 47,104, 0,0, 47,104, 47,104, 0,0, 47,104, 0,0, 47,104, 47,104, 47,104, 53,114, 0,0, 0,0, 0,0, 0,0, 47,104, 0,0, 47,104, 53,114, 53,115, 47,104, 0,0, 0,0, 47,104, 0,0, 0,0, 0,0, 0,0, 47,104, 0,0, 0,0, 0,0, 47,104, 0,0, 0,0, 0,0, 47,110, 0,0, 0,0, 47,104, 47,104, 0,0, 53,114, 53,114, 0,0, 53,114, 53,114, 0,0, 53,116, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 53,114, 53,114, 53,114, 0,0, 53,114, 0,0, 0,0, 0,0, 0,0, 0,0, 53,114, 0,0, 53,114, 53,114, 0,0, 53,114, 0,0, 53,114, 53,114, 53,114, 0,0, 0,0, 0,0, 0,0, 0,0, 53,114, 0,0, 53,114, 0,0, 0,0, 53,114, 0,0, 0,0, 53,114, 0,0, 0,0, 0,0, 0,0, 53,114, 0,0, 0,0, 0,0, 53,114, 0,0, 0,0, 0,0, 53,117, 0,0, 0,0, 53,114, 53,114, 55,119, 0,0, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 0,0, 0,0, 0,0, 0,0, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 55,119, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 0,0, 0,0, 56,121, 0,0, 0,0, 0,0, 0,0, 0,0, 56,122, 0,0, 0,0, 0,0, 0,0, 56,123, 0,0, 0,0, 0,0, 56,124, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 56,120, 56,120, 56,120, 56,120, 56,120, 56,120, 0,0, 0,0, 56,121, 0,0, 0,0, 0,0, 0,0, 0,0, 56,122, 0,0, 0,0, 0,0, 0,0, 56,123, 0,0, 0,0, 59,125, 56,124, 59,126, 59,126, 59,126, 59,126, 59,126, 59,126, 59,126, 59,126, 59,126, 59,126, 0,0, 0,0, 59,127, 0,0, 0,0, 0,0, 0,0, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 0,0, 0,0, 0,0, 0,0, 59,125, 0,0, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 59,125, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 69,69, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 69,69, 0,0, 139,139, 139,139, 139,139, 139,139, 139,139, 139,139, 139,139, 139,139, 139,139, 139,139, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 62,130, 62,130, 62,130, 62,130, 62,130, 62,130, 69,69, 69,70, 0,0, 69,69, 69,69, 0,0, 69,69, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 69,69, 69,69, 69,69, 0,0, 69,69, 0,0, 0,0, 0,0, 0,0, 0,0, 69,69, 0,0, 69,69, 139,139, 0,0, 69,69, 0,0, 69,69, 69,69, 69,69, 71,69, 0,0, 0,0, 0,0, 0,0, 69,69, 0,0, 69,69, 71,69, 71,0, 69,69, 0,0, 0,0, 69,69, 0,0, 0,0, 0,0, 0,0, 69,69, 0,0, 0,0, 0,0, 69,69, 0,0, 0,0, 0,0, 69,71, 0,0, 0,0, 69,69, 69,69, 0,0, 71,69, 71,69, 0,0, 71,69, 71,69, 0,0, 71,69, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 71,69, 71,69, 71,69, 0,0, 71,69, 0,0, 0,0, 0,0, 0,0, 0,0, 71,69, 0,0, 71,69, 0,0, 0,0, 71,69, 0,0, 71,69, 71,69, 71,69, 0,0, 0,0, 0,0, 0,0, 0,0, 71,69, 0,0, 71,69, 0,0, 0,0, 71,69, 0,0, 0,0, 71,69, 0,0, 0,0, 0,0, 0,0, 71,69, 0,0, 0,0, 0,0, 71,69, 0,0, 0,0, 0,0, 71,69, 0,0, 0,0, 71,69, 71,69, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 76,131, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 81,133, 84,84, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 84,84, 84,134, 166,171, 166,171, 166,171, 166,171, 166,171, 166,171, 166,171, 166,171, 166,171, 166,171, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 84,84, 84,84, 0,0, 84,84, 84,84, 0,0, 84,84, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 84,84, 84,84, 84,84, 0,0, 84,84, 0,0, 0,0, 0,0, 0,0, 0,0, 84,84, 0,0, 84,84, 84,84, 0,0, 84,84, 0,0, 84,84, 84,84, 84,84, 0,0, 0,0, 0,0, 0,0, 0,0, 84,84, 0,0, 84,84, 0,0, 0,0, 84,84, 0,0, 0,0, 84,84, 0,0, 0,0, 0,0, 0,0, 84,84, 0,0, 0,0, 0,0, 84,84, 0,0, 0,0, 0,0, 84,84, 0,0, 0,0, 84,84, 84,84, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 91,139, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 90,138, 90,138, 90,138, 90,138, 90,138, 90,138, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 0,0, 0,0, 0,0, 0,0, 91,139, 0,0, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 91,139, 92,92, 0,0, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 0,0, 0,0, 0,0, 0,0, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 92,92, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 96,140, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 100,100, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 100,100, 100,141, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 98,98, 98,98, 98,98, 98,98, 98,98, 98,98, 100,100, 100,100, 0,0, 100,100, 100,100, 0,0, 100,100, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 100,100, 100,100, 100,100, 0,0, 100,100, 0,0, 0,0, 0,0, 0,0, 0,0, 100,100, 0,0, 100,100, 100,100, 0,0, 100,100, 0,0, 100,100, 100,100, 100,100, 103,103, 0,0, 0,0, 0,0, 0,0, 100,100, 0,0, 100,100, 103,103, 103,0, 100,100, 0,0, 0,0, 100,100, 0,0, 0,0, 0,0, 0,0, 100,100, 0,0, 0,0, 0,0, 100,100, 0,0, 0,0, 0,0, 100,100, 0,0, 0,0, 100,100, 100,100, 0,0, 103,103, 103,109, 0,0, 103,103, 103,103, 0,0, 103,103, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 103,103, 103,103, 103,103, 0,0, 103,103, 0,0, 0,0, 0,0, 0,0, 0,0, 103,103, 0,0, 103,103, 103,103, 0,0, 103,103, 0,0, 103,103, 103,103, 103,103, 105,105, 0,0, 0,0, 0,0, 0,0, 103,103, 0,0, 103,103, 105,105, 0,0, 103,103, 0,0, 0,0, 103,103, 0,0, 0,0, 0,0, 0,0, 103,103, 0,0, 0,0, 0,0, 103,103, 0,0, 0,0, 0,0, 103,142, 0,0, 0,0, 103,103, 103,103, 0,0, 105,105, 105,106, 0,0, 105,105, 105,105, 0,0, 105,105, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 105,105, 105,105, 105,105, 0,0, 105,105, 0,0, 0,0, 0,0, 0,0, 0,0, 105,105, 0,0, 105,105, 105,105, 0,0, 105,105, 0,0, 105,105, 105,105, 105,105, 106,109, 0,0, 0,0, 0,0, 0,0, 105,105, 0,0, 105,105, 106,0, 106,0, 105,105, 0,0, 0,0, 105,105, 0,0, 0,0, 0,0, 0,0, 105,105, 0,0, 0,0, 0,0, 105,105, 0,0, 0,0, 0,0, 105,107, 0,0, 0,0, 105,105, 105,105, 106,0, 106,0, 0,0, 0,0, 106,0, 106,109, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 106,109, 106,109, 106,109, 0,0, 106,109, 0,0, 0,0, 0,0, 0,0, 0,0, 106,109, 0,0, 106,109, 106,0, 0,0, 106,109, 0,0, 106,109, 106,109, 106,109, 0,0, 0,0, 0,0, 0,0, 0,0, 106,109, 107,105, 106,109, 0,0, 0,0, 106,109, 0,0, 0,0, 106,109, 107,105, 107,0, 0,0, 0,0, 106,109, 0,0, 0,0, 0,0, 106,109, 0,0, 0,0, 0,0, 106,109, 0,0, 0,0, 106,109, 106,109, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 107,105, 107,105, 0,0, 107,105, 107,105, 0,0, 107,105, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 107,105, 107,105, 107,105, 0,0, 107,105, 0,0, 0,0, 106,0, 0,0, 0,0, 107,105, 0,0, 107,105, 107,105, 0,0, 107,105, 0,0, 107,105, 107,105, 107,105, 109,109, 0,0, 0,0, 0,0, 0,0, 107,105, 0,0, 107,105, 109,0, 109,0, 107,105, 0,0, 0,0, 107,105, 0,0, 0,0, 0,0, 0,0, 107,105, 0,0, 0,0, 0,0, 107,105, 0,0, 0,0, 0,0, 107,105, 0,0, 0,0, 107,105, 107,105, 109,0, 109,0, 0,0, 0,0, 109,0, 109,109, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 109,109, 109,109, 109,109, 0,0, 109,109, 0,0, 0,0, 0,0, 0,0, 0,0, 109,109, 0,0, 109,109, 109,0, 0,0, 109,109, 0,0, 109,109, 109,109, 109,109, 0,0, 0,0, 0,0, 0,0, 0,0, 109,109, 111,111, 109,109, 0,0, 0,0, 109,109, 0,0, 0,0, 109,109, 111,144, 111,145, 0,0, 0,0, 109,109, 0,0, 0,0, 0,0, 109,109, 0,0, 0,0, 0,0, 109,109, 0,0, 0,0, 109,109, 109,109, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 111,144, 111,146, 0,0, 111,144, 111,111, 0,0, 111,147, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 111,111, 111,111, 111,111, 0,0, 111,111, 0,0, 0,0, 109,0, 0,0, 0,0, 111,111, 0,0, 111,111, 111,144, 0,0, 111,111, 0,0, 111,111, 111,111, 111,111, 0,0, 0,0, 0,0, 0,0, 0,0, 111,111, 0,0, 111,111, 0,0, 0,0, 111,111, 0,0, 0,0, 111,111, 0,0, 0,0, 0,0, 0,0, 111,111, 0,0, 0,0, 0,0, 111,111, 0,0, 0,0, 0,0, 111,111, 0,0, 0,0, 111,111, 111,111, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 113,148, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 118,150, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 125,125, 0,0, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 0,0, 124,154, 124,154, 124,154, 124,154, 124,154, 124,154, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 0,0, 0,0, 0,0, 0,0, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 125,125, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 143,143, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 143,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 130,130, 130,130, 130,130, 130,130, 130,130, 130,130, 0,0, 143,159, 0,0, 0,0, 143,143, 0,0, 143,143, 0,0, 0,0, 0,0, 0,0, 144,144, 0,0, 143,143, 143,143, 143,143, 0,0, 143,143, 0,0, 0,0, 0,0, 0,0, 0,0, 143,143, 0,0, 143,143, 0,0, 0,0, 143,143, 0,0, 143,143, 143,143, 143,143, 0,0, 0,0, 0,0, 0,0, 0,0, 143,143, 0,0, 143,143, 0,0, 0,0, 143,143, 144,144, 0,0, 143,143, 144,144, 0,0, 144,144, 0,0, 143,143, 0,0, 0,0, 0,0, 143,143, 144,144, 144,144, 144,144, 143,160, 144,144, 0,0, 143,143, 143,143, 0,0, 0,0, 144,144, 0,0, 144,144, 0,0, 0,0, 144,144, 0,0, 144,144, 144,144, 144,144, 146,146, 0,0, 0,0, 0,0, 0,0, 144,144, 0,0, 144,144, 146,146, 0,0, 144,144, 0,0, 0,0, 144,144, 0,0, 0,0, 0,0, 0,0, 144,144, 0,0, 0,0, 0,0, 144,144, 0,0, 0,0, 0,0, 144,144, 0,0, 0,0, 144,144, 144,144, 0,0, 146,146, 146,161, 0,0, 146,146, 146,146, 0,0, 146,146, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 146,146, 146,146, 146,146, 0,0, 146,146, 0,0, 0,0, 0,0, 0,0, 0,0, 146,146, 0,0, 146,146, 146,146, 0,0, 146,146, 0,0, 146,146, 146,146, 146,146, 147,147, 0,0, 0,0, 0,0, 0,0, 146,146, 0,0, 146,146, 147,147, 0,0, 146,146, 0,0, 0,0, 146,146, 0,0, 0,0, 0,0, 0,0, 146,146, 0,0, 0,0, 0,0, 146,146, 0,0, 0,0, 0,0, 146,162, 0,0, 0,0, 146,146, 146,146, 0,0, 147,147, 147,147, 0,0, 147,147, 147,147, 0,0, 147,161, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 147,147, 147,147, 147,147, 0,0, 147,147, 0,0, 0,0, 0,0, 0,0, 0,0, 147,147, 0,0, 147,147, 147,147, 0,0, 147,147, 0,0, 147,147, 147,147, 147,147, 159,159, 0,0, 0,0, 0,0, 0,0, 147,147, 0,0, 147,147, 159,159, 159,0, 147,147, 0,0, 0,0, 147,147, 0,0, 0,0, 0,0, 0,0, 147,147, 0,0, 0,0, 0,0, 147,147, 0,0, 0,0, 0,0, 147,163, 0,0, 0,0, 147,147, 147,147, 0,0, 159,159, 159,143, 0,0, 159,159, 159,159, 0,0, 159,168, 0,0, 0,0, 0,0, 0,0, 160,143, 0,0, 159,159, 159,159, 159,159, 0,0, 159,159, 0,0, 0,0, 160,0, 0,0, 0,0, 159,159, 0,0, 159,159, 159,159, 0,0, 159,159, 0,0, 159,159, 159,159, 159,159, 0,0, 0,0, 0,0, 0,0, 0,0, 159,159, 0,0, 159,159, 0,0, 0,0, 159,159, 160,159, 0,0, 159,159, 160,143, 0,0, 160,143, 0,0, 159,159, 0,0, 0,0, 161,161, 159,159, 160,143, 160,143, 160,143, 159,169, 160,143, 0,0, 159,159, 159,159, 0,0, 0,0, 160,143, 0,0, 160,143, 0,0, 0,0, 160,143, 0,0, 160,143, 160,143, 160,143, 0,0, 0,0, 0,0, 0,0, 0,0, 160,143, 0,0, 160,143, 0,0, 0,0, 160,143, 0,0, 0,0, 160,143, 161,161, 0,0, 0,0, 0,0, 160,143, 0,0, 0,0, 0,0, 160,143, 161,161, 161,161, 161,161, 160,160, 161,161, 0,0, 160,143, 160,143, 0,0, 0,0, 161,161, 0,0, 161,161, 0,0, 0,0, 161,161, 162,146, 161,161, 161,161, 161,161, 0,0, 0,0, 0,0, 0,0, 162,146, 161,161, 0,0, 161,161, 0,0, 0,0, 161,161, 0,0, 0,0, 161,161, 0,0, 0,0, 0,0, 0,0, 161,161, 0,0, 0,0, 0,0, 161,161, 0,0, 0,0, 0,0, 161,161, 0,0, 162,146, 161,161, 161,161, 162,146, 162,146, 0,0, 162,146, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 162,146, 162,146, 162,146, 0,0, 162,146, 0,0, 0,0, 0,0, 0,0, 0,0, 162,146, 0,0, 162,146, 162,146, 0,0, 162,146, 0,0, 162,146, 162,146, 162,146, 163,147, 0,0, 0,0, 0,0, 0,0, 162,146, 0,0, 162,146, 163,147, 0,0, 162,146, 0,0, 0,0, 162,146, 0,0, 0,0, 0,0, 0,0, 162,146, 0,0, 0,0, 0,0, 162,146, 0,0, 0,0, 0,0, 162,146, 0,0, 0,0, 162,146, 162,146, 0,0, 163,147, 163,147, 0,0, 163,147, 163,147, 0,0, 163,170, 0,0, 0,0, 0,0, 0,0, 168,168, 0,0, 163,147, 163,147, 163,147, 0,0, 163,147, 0,0, 0,0, 168,0, 0,0, 0,0, 163,147, 0,0, 163,147, 163,147, 0,0, 163,147, 0,0, 163,147, 163,147, 163,147, 0,0, 0,0, 0,0, 0,0, 0,0, 163,147, 0,0, 163,147, 0,0, 0,0, 163,147, 168,168, 0,0, 163,147, 168,168, 0,0, 168,159, 0,0, 163,147, 0,0, 0,0, 0,0, 163,147, 168,168, 168,168, 168,168, 163,163, 168,168, 0,0, 163,147, 163,147, 0,0, 0,0, 168,168, 0,0, 168,168, 0,0, 0,0, 168,168, 0,0, 168,168, 168,168, 168,168, 170,170, 0,0, 0,0, 0,0, 0,0, 168,168, 0,0, 168,168, 170,147, 0,0, 168,168, 0,0, 0,0, 168,168, 0,0, 0,0, 0,0, 0,0, 168,168, 0,0, 0,0, 0,0, 168,168, 0,0, 0,0, 0,0, 168,172, 0,0, 0,0, 168,168, 168,168, 0,0, 170,147, 170,175, 0,0, 170,147, 170,170, 0,0, 170,170, 0,0, 0,0, 0,0, 0,0, 172,168, 0,0, 170,170, 170,170, 170,170, 0,0, 170,170, 0,0, 0,0, 172,0, 0,0, 0,0, 170,170, 0,0, 170,170, 170,147, 0,0, 170,170, 0,0, 170,170, 170,170, 170,170, 0,0, 0,0, 0,0, 0,0, 0,0, 170,170, 0,0, 170,170, 0,0, 0,0, 170,170, 172,103, 0,0, 170,170, 172,168, 0,0, 172,159, 0,0, 170,170, 0,0, 0,0, 0,0, 170,170, 172,168, 172,168, 172,168, 170,176, 172,168, 0,0, 170,170, 170,170, 0,0, 0,0, 172,168, 0,0, 172,168, 0,0, 0,0, 172,168, 0,0, 172,168, 172,168, 172,168, 173,173, 0,0, 0,0, 0,0, 0,0, 172,168, 0,0, 172,168, 0,0, 173,0, 172,168, 0,0, 0,0, 172,168, 0,0, 0,0, 0,0, 0,0, 172,168, 0,0, 0,0, 0,0, 172,168, 0,0, 0,0, 0,0, 172,168, 0,0, 0,0, 172,168, 172,168, 0,0, 0,0, 173,173, 0,0, 0,0, 173,173, 0,0, 173,173, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 173,173, 173,173, 173,173, 0,0, 173,173, 0,0, 0,0, 0,0, 0,0, 0,0, 173,173, 0,0, 173,173, 0,0, 0,0, 173,173, 0,0, 173,173, 173,173, 173,173, 175,175, 0,0, 0,0, 0,0, 0,0, 173,173, 0,0, 173,173, 175,175, 0,0, 173,173, 0,0, 0,0, 173,173, 0,0, 0,0, 0,0, 0,0, 173,173, 0,0, 0,0, 0,0, 173,173, 0,0, 0,0, 0,0, 173,177, 0,0, 0,0, 173,173, 173,173, 0,0, 175,175, 175,170, 0,0, 175,175, 175,175, 0,0, 175,178, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 175,175, 175,175, 175,175, 0,0, 175,175, 0,0, 0,0, 0,0, 0,0, 0,0, 175,175, 0,0, 175,175, 175,175, 0,0, 175,175, 0,0, 175,175, 175,175, 175,175, 176,170, 0,0, 0,0, 0,0, 0,0, 175,175, 0,0, 175,175, 176,147, 0,0, 175,175, 0,0, 0,0, 175,175, 0,0, 0,0, 0,0, 0,0, 175,175, 0,0, 0,0, 0,0, 175,175, 0,0, 0,0, 0,0, 175,179, 0,0, 0,0, 175,175, 175,175, 0,0, 176,147, 176,175, 0,0, 176,147, 176,170, 0,0, 176,170, 0,0, 0,0, 0,0, 0,0, 177,173, 0,0, 176,170, 176,170, 176,170, 0,0, 176,170, 0,0, 0,0, 177,0, 0,0, 0,0, 176,170, 0,0, 176,170, 176,147, 0,0, 176,170, 0,0, 176,170, 176,170, 176,170, 0,0, 0,0, 0,0, 0,0, 0,0, 176,170, 0,0, 176,170, 0,0, 0,0, 176,170, 177,159, 0,0, 176,170, 177,173, 0,0, 177,173, 0,0, 176,170, 0,0, 0,0, 0,0, 176,170, 177,173, 177,173, 177,173, 176,176, 177,173, 0,0, 176,170, 176,170, 0,0, 0,0, 177,173, 0,0, 177,173, 0,0, 0,0, 177,173, 0,0, 177,173, 177,173, 177,173, 178,178, 0,0, 0,0, 0,0, 0,0, 177,173, 0,0, 177,173, 178,146, 0,0, 177,173, 0,0, 0,0, 177,173, 0,0, 0,0, 0,0, 0,0, 177,173, 0,0, 0,0, 0,0, 177,173, 0,0, 0,0, 0,0, 177,180, 0,0, 0,0, 177,173, 177,173, 0,0, 178,146, 178,178, 0,0, 178,146, 178,178, 0,0, 178,175, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 178,178, 178,178, 178,178, 0,0, 178,178, 0,0, 0,0, 0,0, 0,0, 0,0, 178,178, 0,0, 178,178, 178,146, 0,0, 178,178, 0,0, 178,178, 178,178, 178,178, 179,175, 0,0, 0,0, 0,0, 0,0, 178,178, 0,0, 178,178, 179,175, 0,0, 178,178, 0,0, 0,0, 178,178, 0,0, 0,0, 0,0, 0,0, 178,178, 0,0, 0,0, 0,0, 178,178, 0,0, 0,0, 0,0, 178,181, 0,0, 0,0, 178,178, 178,178, 0,0, 179,175, 179,175, 0,0, 179,175, 179,175, 0,0, 179,182, 0,0, 0,0, 0,0, 0,0, 180,173, 0,0, 179,175, 179,175, 179,175, 0,0, 179,175, 0,0, 0,0, 180,0, 0,0, 0,0, 179,175, 0,0, 179,175, 179,175, 0,0, 179,175, 0,0, 179,175, 179,175, 179,175, 0,0, 0,0, 0,0, 0,0, 0,0, 179,175, 0,0, 179,175, 0,0, 0,0, 179,175, 180,173, 0,0, 179,175, 180,173, 0,0, 180,173, 0,0, 179,175, 0,0, 0,0, 0,0, 179,175, 180,173, 180,173, 180,173, 179,183, 180,173, 0,0, 179,175, 179,175, 0,0, 0,0, 180,173, 0,0, 180,173, 0,0, 0,0, 180,173, 181,178, 180,173, 180,173, 180,173, 0,0, 0,0, 0,0, 0,0, 181,146, 180,173, 0,0, 180,173, 0,0, 0,0, 180,173, 0,0, 0,0, 180,173, 0,0, 0,0, 0,0, 0,0, 180,173, 0,0, 0,0, 0,0, 180,173, 0,0, 0,0, 0,0, 180,177, 0,0, 181,146, 180,173, 180,173, 181,146, 181,178, 0,0, 181,175, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 181,178, 181,178, 181,178, 0,0, 181,178, 0,0, 0,0, 0,0, 0,0, 0,0, 181,178, 0,0, 181,178, 181,146, 0,0, 181,178, 0,0, 181,178, 181,178, 181,178, 182,182, 0,0, 0,0, 0,0, 0,0, 181,178, 0,0, 181,178, 182,175, 0,0, 181,178, 0,0, 0,0, 181,178, 0,0, 0,0, 0,0, 0,0, 181,178, 0,0, 0,0, 0,0, 181,178, 0,0, 0,0, 0,0, 181,178, 0,0, 0,0, 181,178, 181,178, 0,0, 182,175, 182,182, 0,0, 182,175, 182,182, 0,0, 182,182, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 182,182, 182,182, 182,182, 0,0, 182,182, 0,0, 0,0, 0,0, 0,0, 0,0, 182,182, 0,0, 182,182, 182,175, 0,0, 182,182, 0,0, 182,182, 182,182, 182,182, 183,175, 0,0, 0,0, 0,0, 0,0, 182,182, 0,0, 182,182, 183,175, 0,0, 182,182, 0,0, 0,0, 182,182, 0,0, 0,0, 0,0, 0,0, 182,182, 0,0, 0,0, 0,0, 182,182, 0,0, 0,0, 0,0, 182,184, 0,0, 0,0, 182,182, 182,182, 0,0, 183,175, 183,170, 0,0, 183,175, 183,175, 0,0, 183,182, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 183,175, 183,175, 183,175, 0,0, 183,175, 0,0, 0,0, 0,0, 0,0, 0,0, 183,175, 0,0, 183,175, 183,175, 0,0, 183,175, 0,0, 183,175, 183,175, 183,175, 184,182, 0,0, 0,0, 0,0, 0,0, 183,175, 0,0, 183,175, 184,175, 0,0, 183,175, 0,0, 0,0, 183,175, 0,0, 0,0, 0,0, 0,0, 183,175, 0,0, 0,0, 0,0, 183,175, 0,0, 0,0, 0,0, 183,179, 0,0, 0,0, 183,175, 183,175, 0,0, 184,175, 184,175, 0,0, 184,175, 184,182, 0,0, 184,182, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 184,182, 184,182, 184,182, 0,0, 184,182, 0,0, 0,0, 0,0, 0,0, 0,0, 184,182, 0,0, 184,182, 184,175, 0,0, 184,182, 0,0, 184,182, 184,182, 184,182, 185,182, 0,0, 0,0, 0,0, 0,0, 184,182, 0,0, 184,182, 185,175, 0,0, 184,182, 0,0, 0,0, 184,182, 0,0, 0,0, 0,0, 0,0, 184,182, 0,0, 0,0, 0,0, 184,182, 0,0, 0,0, 0,0, 184,185, 0,0, 0,0, 184,182, 184,182, 0,0, 185,175, 185,182, 0,0, 185,175, 185,182, 0,0, 185,182, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 185,182, 185,182, 185,182, 0,0, 185,182, 0,0, 0,0, 0,0, 0,0, 0,0, 185,182, 0,0, 185,182, 185,175, 0,0, 185,182, 0,0, 185,182, 185,182, 185,182, 0,0, 0,0, 0,0, 0,0, 0,0, 185,182, 0,0, 185,182, 0,0, 0,0, 185,182, 0,0, 0,0, 185,182, 0,0, 0,0, 0,0, 0,0, 185,182, 0,0, 0,0, 0,0, 185,182, 0,0, 0,0, 0,0, 185,184, 0,0, 0,0, 185,182, 185,182, 0,0, 0,0, 0,0, 0,0}; struct yysvf yysvec[] = { 0, 0, 0, yycrank+-1, 0, yyvstop+1, yycrank+0, yysvec+1, yyvstop+3, yycrank+-66, yysvec+1, yyvstop+5, yycrank+-131, yysvec+1, yyvstop+7, yycrank+-196, 0, yyvstop+9, yycrank+-49, yysvec+5, yyvstop+11, yycrank+-250, yysvec+1, yyvstop+13, yycrank+-304, yysvec+1, yyvstop+15, yycrank+-369, yysvec+1, yyvstop+17, yycrank+-434, yysvec+1, yyvstop+19, yycrank+-475, yysvec+1, yyvstop+21, yycrank+-542, yysvec+1, yyvstop+23, yycrank+0, 0, yyvstop+25, yycrank+0, 0, yyvstop+27, yycrank+0, 0, yyvstop+30, yycrank+-613, 0, yyvstop+32, yycrank+0, 0, yyvstop+35, yycrank+-678, 0, yyvstop+38, yycrank+-9, yysvec+18, yyvstop+41, yycrank+-743, yysvec+16, yyvstop+45, yycrank+8, 0, yyvstop+49, yycrank+780, 0, yyvstop+52, yycrank+7, 0, yyvstop+54, yycrank+-902, 0, yyvstop+56, yycrank+8, 0, yyvstop+59, yycrank+953, 0, yyvstop+61, yycrank+577, 0, yyvstop+64, yycrank+1028, 0, yyvstop+67, yycrank+1101, 0, yyvstop+70, yycrank+1146, 0, yyvstop+73, yycrank+1223, 0, yyvstop+75, yycrank+9, 0, yyvstop+77, yycrank+9, 0, yyvstop+80, yycrank+1337, 0, yyvstop+83, yycrank+0, 0, yyvstop+86, yycrank+1305, yysvec+26, yyvstop+89, yycrank+0, 0, yyvstop+93, yycrank+0, 0, yyvstop+96, yycrank+10, 0, yyvstop+99, yycrank+11, 0, yyvstop+101, yycrank+865, 0, yyvstop+104, yycrank+0, 0, yyvstop+108, yycrank+-1425, 0, yyvstop+111, yycrank+0, 0, yyvstop+114, yycrank+-1494, yysvec+16, yyvstop+117, yycrank+13, 0, yyvstop+120, yycrank+-1559, 0, yyvstop+122, yycrank+-74, yysvec+43, yyvstop+124, yycrank+0, 0, yyvstop+127, yycrank+0, 0, yyvstop+130, yycrank+12, 0, yyvstop+133, yycrank+14, 0, yyvstop+136, yycrank+-1624, 0, yyvstop+138, yycrank+16, 0, yyvstop+141, yycrank+1675, 0, yyvstop+143, yycrank+1750, 0, yyvstop+146, yycrank+1331, 0, yyvstop+149, yycrank+0, 0, yyvstop+152, yycrank+1823, 0, yyvstop+156, yycrank+15, 0, yyvstop+158, yycrank+16, 0, yyvstop+160, yycrank+1898, yysvec+55, yyvstop+162, yycrank+0, 0, yyvstop+166, yycrank+0, yysvec+16, yyvstop+169, yycrank+0, 0, yyvstop+171, yycrank+0, 0, yyvstop+173, yycrank+-16, yysvec+16, 0, yycrank+-20, yysvec+18, yyvstop+175, yycrank+-1968, yysvec+16, yyvstop+177, yycrank+-22, yysvec+18, yyvstop+180, yycrank+-2033, yysvec+16, yyvstop+183, yycrank+0, 0, yyvstop+185, yycrank+0, 0, yyvstop+187, yycrank+22, 0, yyvstop+189, yycrank+0, 0, yyvstop+191, yycrank+2082, 0, 0, yycrank+0, yysvec+24, yyvstop+193, yycrank+0, 0, yyvstop+195, yycrank+0, 0, yyvstop+197, yycrank+-7, yysvec+24, yyvstop+199, yycrank+2157, 0, 0, yycrank+0, yysvec+26, yyvstop+201, yycrank+0, yysvec+34, 0, yycrank+-2279, 0, 0, yycrank+0, 0, yyvstop+203, yycrank+0, yysvec+29, yyvstop+205, yycrank+38, 0, 0, yycrank+590, 0, 0, yycrank+875, 0, 0, yycrank+2328, 0, 0, yycrank+2366, 0, 0, yycrank+2443, 0, yyvstop+207, yycrank+0, 0, yyvstop+209, yycrank+0, 0, yyvstop+211, yycrank+0, 0, yyvstop+213, yycrank+2518, 0, 0, yycrank+0, 0, yyvstop+215, yycrank+2593, yysvec+26, yyvstop+217, yycrank+0, 0, yyvstop+220, yycrank+-2663, 0, 0, yycrank+0, yysvec+41, yyvstop+222, yycrank+-116, yysvec+43, yyvstop+224, yycrank+-2728, 0, 0, yycrank+-7, yysvec+47, 0, yycrank+-2793, yysvec+16, yyvstop+226, yycrank+-2858, yysvec+43, yyvstop+228, yycrank+-2929, 0, 0, yycrank+0, 0, yyvstop+231, yycrank+-2994, yysvec+43, yyvstop+233, yycrank+-13, yysvec+47, 0, yycrank+-3065, 0, yyvstop+235, yycrank+0, 0, yyvstop+237, yycrank+3114, 0, 0, yycrank+0, yysvec+53, yyvstop+239, yycrank+0, 0, yyvstop+241, yycrank+0, 0, yyvstop+243, yycrank+-14, yysvec+53, yyvstop+245, yycrank+3189, 0, 0, yycrank+0, yysvec+55, yyvstop+247, yycrank+0, yysvec+57, yyvstop+249, yycrank+46, 0, 0, yycrank+1069, 0, 0, yycrank+1124, 0, 0, yycrank+3264, 0, 0, yycrank+3302, 0, yyvstop+251, yycrank+0, 0, yyvstop+253, yycrank+0, 0, yyvstop+255, yycrank+0, 0, yyvstop+257, yycrank+0, 0, yyvstop+259, yycrank+3377, yysvec+55, yyvstop+261, yycrank+41, 0, 0, yycrank+0, yysvec+24, yyvstop+264, yycrank+43, 0, 0, yycrank+0, 0, yyvstop+267, yycrank+0, yysvec+87, yyvstop+269, yycrank+0, yysvec+88, yyvstop+271, yycrank+46, yysvec+89, yyvstop+273, yycrank+0, yysvec+90, yyvstop+275, yycrank+1931, yysvec+91, yyvstop+277, yycrank+68, 0, 0, yycrank+0, 0, yyvstop+279, yycrank+-107, yysvec+103, 0, yycrank+-3447, yysvec+47, yyvstop+281, yycrank+-3490, yysvec+111, 0, yycrank+0, 0, yyvstop+283, yycrank+-3555, yysvec+111, 0, yycrank+-3620, yysvec+111, 0, yycrank+71, 0, 0, yycrank+0, yysvec+53, yyvstop+285, yycrank+72, 0, 0, yycrank+0, yysvec+121, yyvstop+288, yycrank+0, yysvec+122, yyvstop+290, yycrank+74, yysvec+123, yyvstop+292, yycrank+0, yysvec+124, yyvstop+294, yycrank+0, 0, yyvstop+296, yycrank+0, 0, yyvstop+298, yycrank+1136, 0, 0, yycrank+0, 0, yyvstop+300, yycrank+-3685, 0, 0, yycrank+-3728, yysvec+47, yyvstop+302, yycrank+-3771, yysvec+111, yyvstop+304, yycrank+-3832, yysvec+111, 0, yycrank+-3897, yysvec+111, 0, yycrank+0, 0, yyvstop+306, yycrank+0, 0, yyvstop+308, yycrank+2242, 0, 0, yycrank+0, yysvec+157, yyvstop+310, yycrank+-3940, yysvec+103, yyvstop+312, yycrank+-149, yysvec+159, 0, yycrank+-4005, yysvec+111, yyvstop+314, yycrank+0, yysvec+166, yyvstop+316, yycrank+-4048, yysvec+103, yyvstop+318, yycrank+-4113, yysvec+159, yyvstop+320, yycrank+-118, yysvec+159, 0, yycrank+-4178, yysvec+111, 0, yycrank+-4243, yysvec+111, yyvstop+322, yycrank+-4286, yysvec+159, yyvstop+324, yycrank+-4351, yysvec+111, yyvstop+326, yycrank+-4416, yysvec+111, 0, yycrank+-4459, yysvec+159, yyvstop+328, yycrank+-4520, yysvec+111, yyvstop+330, yycrank+-4585, yysvec+111, yyvstop+332, yycrank+-4650, yysvec+111, 0, yycrank+-4715, yysvec+111, yyvstop+334, yycrank+-4780, yysvec+111, yyvstop+336, 0, 0, 0}; struct yywork *yytop = yycrank+4876; struct yysvf *yybgin = yysvec+1; char yymatch[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 33, 34, 1, 36, 37, 1, 39, 1, 1, 1, 1, 1, 1, 46, 47, 48, 48, 50, 50, 50, 50, 50, 50, 56, 56, 58, 59, 1, 61, 1, 63, 64, 65, 65, 65, 65, 65, 65, 71, 71, 73, 71, 71, 76, 76, 71, 79, 71, 71, 71, 71, 84, 71, 71, 76, 88, 71, 76, 1, 92, 1, 37, 95, 96, 65, 65, 65, 65, 65, 65, 71, 71, 73, 71, 71, 76, 71, 71, 79, 71, 71, 71, 71, 84, 71, 76, 76, 88, 71, 71, 1, 33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}; char yyextra[] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0, 0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0}; /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* Copyright (c) 1989 AT&T */ /* All Rights Reserved */ #pragma ident "%Z%%M% %I% %E% SMI" int yylineno =1; # define YYU(x) x # define NLSTATE yyprevious=YYNEWLINE struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; char yysbuf[YYLMAX]; char *yysptr = yysbuf; int *yyfnd; extern struct yysvf *yyestate; int yyprevious = YYNEWLINE; #if defined(__cplusplus) || defined(__STDC__) int yylook(void) #else yylook() #endif { register struct yysvf *yystate, **lsp; register struct yywork *yyt; struct yysvf *yyz; int yych, yyfirst; struct yywork *yyr; # ifdef LEXDEBUG int debug; # endif char *yylastch; /* start off machines */ # ifdef LEXDEBUG debug = 0; # endif yyfirst=1; if (!yymorfg) yylastch = yytext; else { yymorfg=0; yylastch = yytext+yyleng; } for(;;){ lsp = yylstate; yyestate = yystate = yybgin; if (yyprevious==YYNEWLINE) yystate++; for (;;){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); # endif yyt = yystate->yystoff; if(yyt == yycrank && !yyfirst){ /* may not be any transitions */ yyz = yystate->yyother; if(yyz == 0)break; if(yyz->yystoff == yycrank)break; } #ifndef __cplusplus *yylastch++ = yych = input(); #else *yylastch++ = yych = lex_input(); #endif #ifdef YYISARRAY if(yylastch > &yytext[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } #else if (yylastch >= &yytext[ yytextsz ]) { int x = yylastch - yytext; yytextsz += YYTEXTSZINC; if (yytext == yy_tbuf) { yytext = (char *) malloc(yytextsz); memcpy(yytext, yy_tbuf, sizeof (yy_tbuf)); } else yytext = (char *) realloc(yytext, yytextsz); if (!yytext) { fprintf(yyout, "Cannot realloc yytext\n"); exit(1); } yylastch = yytext + x; } #endif yyfirst=0; tryagain: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"char "); allprint(yych); putchar('\n'); } # endif yyr = yyt; if ( (uintptr_t)yyt > (uintptr_t)yycrank){ yyt = yyr + yych; if (yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } goto contin; } } # ifdef YYOPTIM else if((uintptr_t)yyt < (uintptr_t)yycrank) { /* r < yycrank */ yyt = yyr = yycrank+(yycrank-yyt); # ifdef LEXDEBUG if(debug)fprintf(yyout,"compressed state\n"); # endif yyt = yyt + yych; if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } goto contin; } yyt = yyr + YYU(yymatch[yych]); # ifdef LEXDEBUG if(debug){ fprintf(yyout,"try fall back character "); allprint(YYU(yymatch[yych])); putchar('\n'); } # endif if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transition */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; if(lsp > &yylstate[YYLMAX]) { fprintf(yyout,"Input string too long, limit %d\n",YYLMAX); exit(1); } goto contin; } } if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); # endif goto tryagain; } # endif else {unput(*--yylastch);break;} contin: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"state %d char ",yystate-yysvec-1); allprint(yych); putchar('\n'); } # endif ; } # ifdef LEXDEBUG if(debug){ fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1); allprint(yych); putchar('\n'); } # endif while (lsp-- > yylstate){ *yylastch-- = 0; if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ yyolsp = lsp; if(yyextra[*yyfnd]){ /* must backup */ while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ lsp--; unput(*yylastch--); } } yyprevious = YYU(*yylastch); yylsp = lsp; yyleng = yylastch-yytext+1; yytext[yyleng] = 0; # ifdef LEXDEBUG if(debug){ fprintf(yyout,"\nmatch "); sprint(yytext); fprintf(yyout," action %d\n",*yyfnd); } # endif return(*yyfnd++); } unput(*yylastch); } if (yytext[0] == 0 /* && feof(yyin) */) { yysptr=yysbuf; return(0); } #ifndef __cplusplus yyprevious = yytext[0] = input(); if (yyprevious>0) output(yyprevious); #else yyprevious = yytext[0] = lex_input(); if (yyprevious>0) lex_output(yyprevious); #endif yylastch=yytext; # ifdef LEXDEBUG if(debug)putchar('\n'); # endif } } #if defined(__cplusplus) || defined(__STDC__) int yyback(int *p, int m) #else yyback(p, m) int *p; #endif { if (p==0) return(0); while (*p) { if (*p++ == m) return(1); } return(0); } /* the following are only used in the lex library */ #if defined(__cplusplus) || defined(__STDC__) int yyinput(void) #else yyinput() #endif { #ifndef __cplusplus return(input()); #else return(lex_input()); #endif } #if defined(__cplusplus) || defined(__STDC__) void yyoutput(int c) #else yyoutput(c) int c; #endif { #ifndef __cplusplus output(c); #else lex_output(c); #endif } #if defined(__cplusplus) || defined(__STDC__) void yyunput(int c) #else yyunput(c) int c; #endif { unput(c); }