Upgrade one-true-awk to e9c99065fd31253a4db4a6bce673decd143f7a3e am: 69b38a7b2d am: b449b2550c am: a8dca89194

Change-Id: I03638f7dfb56f76f3ff8ddd3e614deed18cd7daf
diff --git a/ChangeLog b/ChangeLog
index 1afd9de..4e95699 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2020-01-20         Arnold D. Robbins     <arnold@skeeve.com>
+
+	* run.c (openfile): Set the close-on-exec flag for file
+	and pipe redirections that aren't stdin/stdout/stderr.
+
 2020-01-06         Arnold D. Robbins     <arnold@skeeve.com>
 
 	Minor fixes.
diff --git a/FIXES b/FIXES
index 6889e30..598608a 100644
--- a/FIXES
+++ b/FIXES
@@ -25,6 +25,30 @@
 This file lists all bug fixes, changes, etc., made since the AWK book
 was sent to the printers in August, 1987.
 
+February 6, 2020:
+	Additional small cleanups from Christos Zoulas. awk is now
+	a little more robust about reporting I/O errors upon exit.
+
+January 31, 2020:
+	Merge PR #70, which avoids use of variable length arrays. Thanks
+	to GitHub user michaelforney.  Fix issue #60 ({0} in interval
+	expressions doesn't work).  Also get all tests working again.
+	Thanks to Arnold Robbins.
+
+January 24, 2020:
+	A number of small cleanups from Christos Zoulas.  Add the close
+	on exec flag to files/pipes opened for redirection; courtesy of
+	Arnold Robbins.
+
+January 19, 2020:
+	If POSIXLY_CORRECT is set in the environment, then sub and gsub
+	use POSIX rules for multiple backslashes.  This fixes Issue #66,
+	while maintaining backwards compatibility.
+
+January 9, 2020:
+	Input/output errors on closing files are now fatal instead of
+	mere warnings. Thanks to Martijn Dekker <martijn@inlv.org>.
+
 January 5, 2020:
 	Fix a bug in the concatentation of two string constants into
 	one done in the grammar.  Fixes GitHub issue #61.  Thanks
@@ -63,13 +87,13 @@
 
 October 24, 2019:
 	Import second round of code cleanups from NetBSD. Much thanks
-	to Christos Zoulas (Github user zoulasc). Merges PR 53.
+	to Christos Zoulas (GitHub user zoulasc). Merges PR 53.
 	Add an optimization for string concatenation, also from
 	Christos.
 
 October 17, 2019:
 	Import code cleanups from NetBSD. Much thanks to Christos
-	Zoulas (Github user zoulasc). Merges PR 51.
+	Zoulas (GitHub user zoulasc). Merges PR 51.
 
 October 6, 2019:
 	Import code from NetBSD awk that implements RS as a regular
@@ -77,7 +101,7 @@
 
 September 10, 2019:
 	Fixes for various array / memory overruns found via gcc's
-	-fsanitize=unknown. Thanks to Alexander Richardson (Github
+	-fsanitize=unknown. Thanks to Alexander Richardson (GitHub
 	user arichardson). Merges PRs 47 and 48.
 
 July 28, 2019:
diff --git a/METADATA b/METADATA
index a4d2203..7918382 100644
--- a/METADATA
+++ b/METADATA
@@ -5,11 +5,11 @@
     type: GIT
     value: "https://github.com/onetrueawk/awk.git"
   }
-  version: "944989bf683d30f306d8f29a3eb8c68c7c603fb4"
+  version: "e9c99065fd31253a4db4a6bce673decd143f7a3e"
   license_type: NOTICE
   last_upgrade_date {
     year: 2020
-    month: 1
-    day: 8
+    month: 2
+    day: 7
   }
 }
diff --git a/README.md b/README.md
index 77701d7..ab6aae1 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,19 @@
 
 ## Submitting Pull Requests
 
-Pull requests are welcome.  However, please create them with a request
+Pull requests are welcome. Some guidelines:
+
+* Please do not use functions or facilities that are not standard (e.g.,
+`strlcpy()`, `fpurge()`).
+
+* Please run the test suite and make sure that your changes pass before
+posting the pull request. To do so:
+
+  1. Save the previous version of `awk` somewhere in your path. Call it `nawk` (for example).
+  1. Run `oldawk=nawk make check > check.out 2>&1`.
+  1. Search for `BAD` or `error` in the result. In general, look over it manually to make sure there are no errors.
+
+* Please create the pull request with a request
 to merge into the `staging` branch instead of into the `master` branch.
 This allows us to do testing, and to make any additional edits or changes
 after the merge but before merging to `master`.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..13f2925
--- /dev/null
+++ b/TODO
@@ -0,0 +1,19 @@
+Wed Jan 22 02:10:35 MST 2020
+============================
+
+Here are some things that it'd be nice to have volunteer
+help on.
+
+1. Rework the test suite so that it's easier to maintain
+and see exactly which tests fail:
+	A. Extract beebe.tar into separate file and update scripts
+	B. Split apart multiple tests into separate tests with input
+	   and "ok" files for comparisons.
+
+2. Pull in more of the tests from gawk that only test standard features.
+   The beebe.tar file appears to be from sometime in the 1990s.
+
+3. Make the One True Awk valgrind clean. In particular add a
+   a test suite target that runs valgrind on all the tests and
+   reports if there are any definite losses or any invalid reads
+   or writes (similar to gawk's test of this nature).
diff --git a/awk.1 b/awk.1
index 5c05b01..aa66f06 100644
--- a/awk.1
+++ b/awk.1
@@ -502,6 +502,16 @@
 Parameters are local to the function; all other variables are global.
 Thus local variables may be created by providing excess parameters in
 the function definition.
+.SH ENVIRONMENT VARIABLES
+If
+.B POSIXLY_CORRECT
+is set in the environment, then
+.I awk
+follows the POSIX rules for
+.B sub
+and
+.B gsub
+with respect to consecutive backslashes and ampersands.
 .SH EXAMPLES
 .TP
 .EX
diff --git a/awk.h b/awk.h
index bede1b0..6865438 100644
--- a/awk.h
+++ b/awk.h
@@ -60,6 +60,7 @@
 #define	RECSIZE	(8 * 1024)	/* sets limit on records, fields, etc., etc. */
 extern int	recsize;	/* size of current record, orig RECSIZE */
 
+extern char	EMPTY[];	/* this avoid -Wwritable-strings issues */
 extern char	**FS;
 extern char	**RS;
 extern char	**ORS;
@@ -78,8 +79,6 @@
 extern int	errorflag;	/* 1 if error has occurred */
 extern bool	donefld;	/* true if record broken into fields */
 extern bool	donerec;	/* true if record is valid (no fld has changed */
-extern char	inputFS[];	/* FS at time of input, for field splitting */
-
 extern int	dbg;
 
 extern const char *patbeg;	/* beginning of pattern matched */
diff --git a/awkgram.y b/awkgram.y
index 894f9b5..8fc1709 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -50,7 +50,7 @@
 %token	<i>	NL ',' '{' '(' '|' ';' '/' ')' '}' '[' ']'
 %token	<i>	ARRAY
 %token	<i>	MATCH NOTMATCH MATCHOP
-%token	<i>	FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE
+%token	<i>	FINAL DOT ALL CCL NCCL CHAR OR STAR QUEST PLUS EMPTYRE ZERO
 %token	<i>	AND BOR APPEND EQ GE GT LE LT NE IN
 %token	<i>	ARG BLTIN BREAK CLOSE CONTINUE DELETE DO EXIT FOR FUNC
 %token	<i>	SUB GSUB IF INDEX LSUBSTR MATCHFCN NEXT NEXTFILE
diff --git a/b.c b/b.c
index 5671796..545fb7d 100644
--- a/b.c
+++ b/b.c
@@ -263,6 +263,8 @@
 		parent(left(p)) = p;
 		parent(right(p)) = p;
 		break;
+	case ZERO:
+		break;
 	default:	/* can't happen */
 		FATAL("can't happen: unknown type %d in penter", type(p));
 		break;
@@ -277,6 +279,7 @@
 		xfree(p);
 		break;
 	UNARY
+	case ZERO:
 		freetr(left(p));
 		xfree(p);
 		break;
@@ -436,6 +439,8 @@
 		cfoll(f,left(v));
 		cfoll(f,right(v));
 		break;
+	case ZERO:
+		break;
 	default:	/* can't happen */
 		FATAL("can't happen: unknown type %d in cfoll", type(v));
 	}
@@ -479,6 +484,8 @@
 		b = first(right(p));
 		if (first(left(p)) == 0 || b == 0) return(0);
 		return(1);
+	case ZERO:
+		return 0;
 	}
 	FATAL("can't happen: unknown type %d in first", type(p));	/* can't happen */
 	return(-1);
@@ -838,6 +845,9 @@
 	case QUEST:
 		rtok = relex();
 		return (unary(op2(QUEST, np, NIL)));
+	case ZERO:
+		rtok = relex();
+		return (unary(op2(ZERO, np, NIL)));
 	default:
 		return (np);
 	}
@@ -873,7 +883,7 @@
 
 #endif
 
-struct charclass {
+static const struct charclass {
 	const char *cc_name;
 	int cc_namelen;
 	int (*cc_func)(int);
@@ -1017,7 +1027,7 @@
 	static uschar *buf = NULL;
 	static int bufsz = 100;
 	uschar *bp;
-	struct charclass *cc;
+	const struct charclass *cc;
 	int i;
 	int num, m;
 	bool commafound, digitfound;
@@ -1191,7 +1201,7 @@
 				if (repeat(starttok, prestr-starttok, lastatom,
 					   startreptok - lastatom, n, m) > 0) {
 					if (n == 0 && m == 0) {
-						return EMPTYRE;
+						return ZERO;
 					}
 					/* must rescan input for next token */
 					goto rescan;
diff --git a/lex.c b/lex.c
index d729516..1c23212 100644
--- a/lex.c
+++ b/lex.c
@@ -43,7 +43,7 @@
 	int	type;
 } Keyword;
 
-Keyword keywords[] ={	/* keep sorted: binary searched */
+const Keyword keywords[] = {	/* keep sorted: binary searched */
 	{ "BEGIN",	XBEGIN,		XBEGIN },
 	{ "END",	XEND,		XEND },
 	{ "NF",		VARNF,		VARNF },
@@ -91,14 +91,14 @@
 
 #define	RET(x)	{ if(dbg)printf("lex %s\n", tokname(x)); return(x); }
 
-int peek(void)
+static int peek(void)
 {
 	int c = input();
 	unput(c);
 	return c;
 }
 
-int gettok(char **pbuf, int *psz)	/* get next input token */
+static int gettok(char **pbuf, int *psz)	/* get next input token */
 {
 	int c, retc;
 	char *buf = *pbuf;
@@ -210,6 +210,11 @@
 			while ((c = input()) != '\n' && c != 0)
 				;
 			unput(c);
+			/*
+			 * Next line is a hack, itcompensates for
+			 * unput's treatment of \n.
+			 */
+			lineno++;
 			break;
 		case ';':
 			RET(';');
@@ -440,7 +445,7 @@
 }
 
 
-int binsearch(char *w, Keyword *kp, int n)
+static int binsearch(char *w, const Keyword *kp, int n)
 {
 	int cond, low, mid, high;
 
@@ -460,7 +465,7 @@
 
 int word(char *w)
 {
-	Keyword *kp;
+	const Keyword *kp;
 	int c, n;
 
 	n = binsearch(w, keywords, sizeof(keywords)/sizeof(keywords[0]));
@@ -572,6 +577,8 @@
 
 void unput(int c)	/* put lexical character back on input */
 {
+	if (c == '\n')  
+		lineno--;
 	if (yysptr >= yysbuf + sizeof(yysbuf))
 		FATAL("pushed back too much: %.20s...", yysbuf);
 	*yysptr++ = c;
diff --git a/lib.c b/lib.c
index dbc09c3..0485e5a 100644
--- a/lib.c
+++ b/lib.c
@@ -29,18 +29,21 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <stdarg.h>
+#include <limits.h>
 #include "awk.h"
 #include "ytab.h"
 
+char	EMPTY[] = { '\0' };
 FILE	*infile	= NULL;
-char	*file	= "";
+char	*file	= EMPTY;
 char	*record;
 int	recsize	= RECSIZE;
 char	*fields;
 int	fieldssize = RECSIZE;
 
 Cell	**fldtab;	/* pointers to Cells */
-char	inputFS[100] = " ";
+static size_t	len_inputFS = 0;
+static char	*inputFS = NULL; /* FS at time of input, for field splitting */
 
 #define	MAXFLD	2
 int	nfields	= MAXFLD;	/* last allocated slot for $i */
@@ -52,8 +55,8 @@
 int	argno	= 1;	/* current input argument number */
 extern	Awkfloat *ARGC;
 
-static Cell dollar0 = { OCELL, CFLD, NULL, "", 0.0, REC|STR|DONTFREE };
-static Cell dollar1 = { OCELL, CFLD, NULL, "", 0.0, FLD|STR|DONTFREE };
+static Cell dollar0 = { OCELL, CFLD, NULL, EMPTY, 0.0, REC|STR|DONTFREE };
+static Cell dollar1 = { OCELL, CFLD, NULL, EMPTY, 0.0, FLD|STR|DONTFREE };
 
 void recinit(unsigned int n)
 {
@@ -116,9 +119,17 @@
  */
 void savefs(void)
 {
-	if (strlen(getsval(fsloc)) >= sizeof (inputFS))
+	size_t len;
+	if ((len = strlen(getsval(fsloc))) < len_inputFS) {
+		strcpy(inputFS, *FS);	/* for subsequent field splitting */
+		return;
+	}
+
+	len_inputFS = len + 1;
+	inputFS = realloc(inputFS, len_inputFS);
+	if (inputFS == NULL)
 		FATAL("field separator %.10s... is too long", *FS);
-	strcpy(inputFS, *FS);
+	memcpy(inputFS, *FS, len_inputFS);
 }
 
 static bool firsttime = true;
@@ -333,14 +344,14 @@
 		*fr = 0;
 	} else if ((sep = *inputFS) == 0) {		/* new: FS="" => 1 char/field */
 		for (i = 0; *r != '\0'; r += n) {
-			char buf[MB_CUR_MAX + 1];
+			char buf[MB_LEN_MAX + 1];
 
 			i++;
 			if (i > nfields)
 				growfldtab(i);
 			if (freeable(fldtab[i]))
 				xfree(fldtab[i]->sval);
-			n = mblen(r, MB_CUR_MAX);
+			n = mblen(r, MB_LEN_MAX);
 			if (n < 0)
 				n = 1;
 			memcpy(buf, r, n);
@@ -404,7 +415,7 @@
 		p = fldtab[i];
 		if (freeable(p))
 			xfree(p->sval);
-		p->sval = "";
+		p->sval = EMPTY,
 		p->tval = FLD | STR | DONTFREE;
 	}
 }
diff --git a/main.c b/main.c
index abfa312..832d971 100644
--- a/main.c
+++ b/main.c
@@ -22,7 +22,7 @@
 THIS SOFTWARE.
 ****************************************************************/
 
-const char	*version = "version 20200105";
+const char	*version = "version 20200206";
 
 #define DEBUG
 #include <stdio.h>
diff --git a/maketab.c b/maketab.c
index c3ce5c6..9ac833e 100644
--- a/maketab.c
+++ b/maketab.c
@@ -122,8 +122,6 @@
 	printf("#include <stdio.h>\n");
 	printf("#include \"awk.h\"\n");
 	printf("#include \"ytab.h\"\n\n");
-	for (i = SIZE; --i >= 0; )
-		names[i] = "";
 
 	if (argc != 2) {
 		fprintf(stderr, "usage: maketab YTAB_H\n");
@@ -160,10 +158,8 @@
 		table[p->token-FIRSTTOKEN] = p->name;
 	printf("\nCell *(*proctab[%d])(Node **, int) = {\n", SIZE);
 	for (i=0; i<SIZE; i++)
-		if (table[i]==NULL)
-			printf("\tnullproc,\t/* %s */\n", names[i]);
-		else
-			printf("\t%s,\t/* %s */\n", table[i], names[i]);
+		printf("\t%s,\t/* %s */\n",
+		    table[i] ? table[i] : "nullproc", names[i] ? names[i] : "");
 	printf("};\n\n");
 
 	printf("const char *tokname(int n)\n");	/* print a tokname() function */
diff --git a/proctab.c b/proctab.c
index 5ec8c6e..5ae6786 100644
--- a/proctab.c
+++ b/proctab.c
@@ -2,7 +2,7 @@
 #include "awk.h"
 #include "ytab.h"
 
-static const char * const printname[94] = {
+static const char * const printname[95] = {
 	"FIRSTTOKEN",	/* 258 */
 	"PROGRAM",	/* 259 */
 	"PASTAT",	/* 260 */
@@ -25,82 +25,83 @@
 	"QUEST",	/* 277 */
 	"PLUS",	/* 278 */
 	"EMPTYRE",	/* 279 */
-	"AND",	/* 280 */
-	"BOR",	/* 281 */
-	"APPEND",	/* 282 */
-	"EQ",	/* 283 */
-	"GE",	/* 284 */
-	"GT",	/* 285 */
-	"LE",	/* 286 */
-	"LT",	/* 287 */
-	"NE",	/* 288 */
-	"IN",	/* 289 */
-	"ARG",	/* 290 */
-	"BLTIN",	/* 291 */
-	"BREAK",	/* 292 */
-	"CLOSE",	/* 293 */
-	"CONTINUE",	/* 294 */
-	"DELETE",	/* 295 */
-	"DO",	/* 296 */
-	"EXIT",	/* 297 */
-	"FOR",	/* 298 */
-	"FUNC",	/* 299 */
-	"SUB",	/* 300 */
-	"GSUB",	/* 301 */
-	"IF",	/* 302 */
-	"INDEX",	/* 303 */
-	"LSUBSTR",	/* 304 */
-	"MATCHFCN",	/* 305 */
-	"NEXT",	/* 306 */
-	"NEXTFILE",	/* 307 */
-	"ADD",	/* 308 */
-	"MINUS",	/* 309 */
-	"MULT",	/* 310 */
-	"DIVIDE",	/* 311 */
-	"MOD",	/* 312 */
-	"ASSIGN",	/* 313 */
-	"ASGNOP",	/* 314 */
-	"ADDEQ",	/* 315 */
-	"SUBEQ",	/* 316 */
-	"MULTEQ",	/* 317 */
-	"DIVEQ",	/* 318 */
-	"MODEQ",	/* 319 */
-	"POWEQ",	/* 320 */
-	"PRINT",	/* 321 */
-	"PRINTF",	/* 322 */
-	"SPRINTF",	/* 323 */
-	"ELSE",	/* 324 */
-	"INTEST",	/* 325 */
-	"CONDEXPR",	/* 326 */
-	"POSTINCR",	/* 327 */
-	"PREINCR",	/* 328 */
-	"POSTDECR",	/* 329 */
-	"PREDECR",	/* 330 */
-	"VAR",	/* 331 */
-	"IVAR",	/* 332 */
-	"VARNF",	/* 333 */
-	"CALL",	/* 334 */
-	"NUMBER",	/* 335 */
-	"STRING",	/* 336 */
-	"REGEXPR",	/* 337 */
-	"GETLINE",	/* 338 */
-	"RETURN",	/* 339 */
-	"SPLIT",	/* 340 */
-	"SUBSTR",	/* 341 */
-	"WHILE",	/* 342 */
-	"CAT",	/* 343 */
-	"NOT",	/* 344 */
-	"UMINUS",	/* 345 */
-	"UPLUS",	/* 346 */
-	"POWER",	/* 347 */
-	"DECR",	/* 348 */
-	"INCR",	/* 349 */
-	"INDIRECT",	/* 350 */
-	"LASTTOKEN",	/* 351 */
+	"ZERO",	/* 280 */
+	"AND",	/* 281 */
+	"BOR",	/* 282 */
+	"APPEND",	/* 283 */
+	"EQ",	/* 284 */
+	"GE",	/* 285 */
+	"GT",	/* 286 */
+	"LE",	/* 287 */
+	"LT",	/* 288 */
+	"NE",	/* 289 */
+	"IN",	/* 290 */
+	"ARG",	/* 291 */
+	"BLTIN",	/* 292 */
+	"BREAK",	/* 293 */
+	"CLOSE",	/* 294 */
+	"CONTINUE",	/* 295 */
+	"DELETE",	/* 296 */
+	"DO",	/* 297 */
+	"EXIT",	/* 298 */
+	"FOR",	/* 299 */
+	"FUNC",	/* 300 */
+	"SUB",	/* 301 */
+	"GSUB",	/* 302 */
+	"IF",	/* 303 */
+	"INDEX",	/* 304 */
+	"LSUBSTR",	/* 305 */
+	"MATCHFCN",	/* 306 */
+	"NEXT",	/* 307 */
+	"NEXTFILE",	/* 308 */
+	"ADD",	/* 309 */
+	"MINUS",	/* 310 */
+	"MULT",	/* 311 */
+	"DIVIDE",	/* 312 */
+	"MOD",	/* 313 */
+	"ASSIGN",	/* 314 */
+	"ASGNOP",	/* 315 */
+	"ADDEQ",	/* 316 */
+	"SUBEQ",	/* 317 */
+	"MULTEQ",	/* 318 */
+	"DIVEQ",	/* 319 */
+	"MODEQ",	/* 320 */
+	"POWEQ",	/* 321 */
+	"PRINT",	/* 322 */
+	"PRINTF",	/* 323 */
+	"SPRINTF",	/* 324 */
+	"ELSE",	/* 325 */
+	"INTEST",	/* 326 */
+	"CONDEXPR",	/* 327 */
+	"POSTINCR",	/* 328 */
+	"PREINCR",	/* 329 */
+	"POSTDECR",	/* 330 */
+	"PREDECR",	/* 331 */
+	"VAR",	/* 332 */
+	"IVAR",	/* 333 */
+	"VARNF",	/* 334 */
+	"CALL",	/* 335 */
+	"NUMBER",	/* 336 */
+	"STRING",	/* 337 */
+	"REGEXPR",	/* 338 */
+	"GETLINE",	/* 339 */
+	"RETURN",	/* 340 */
+	"SPLIT",	/* 341 */
+	"SUBSTR",	/* 342 */
+	"WHILE",	/* 343 */
+	"CAT",	/* 344 */
+	"NOT",	/* 345 */
+	"UMINUS",	/* 346 */
+	"UPLUS",	/* 347 */
+	"POWER",	/* 348 */
+	"DECR",	/* 349 */
+	"INCR",	/* 350 */
+	"INDIRECT",	/* 351 */
+	"LASTTOKEN",	/* 352 */
 };
 
 
-Cell *(*proctab[94])(Node **, int) = {
+Cell *(*proctab[95])(Node **, int) = {
 	nullproc,	/* FIRSTTOKEN */
 	program,	/* PROGRAM */
 	pastat,	/* PASTAT */
@@ -123,6 +124,7 @@
 	nullproc,	/* QUEST */
 	nullproc,	/* PLUS */
 	nullproc,	/* EMPTYRE */
+	nullproc,	/* ZERO */
 	boolop,	/* AND */
 	boolop,	/* BOR */
 	nullproc,	/* APPEND */
diff --git a/proto.h b/proto.h
index 6918e1f..aac2547 100644
--- a/proto.h
+++ b/proto.h
@@ -111,6 +111,7 @@
 extern	char	*getsval(Cell *);
 extern	char	*getpssval(Cell *);     /* for print */
 extern	char	*tostring(const char *);
+extern	char	*tostringN(const char *, size_t);
 extern	char	*qstring(const char *, int);
 extern	Cell	*catstr(Cell *, Cell *);
 
@@ -135,9 +136,12 @@
 extern	void	fpecatch(int);
 extern	void	bracecheck(void);
 extern	void	bcheck2(int, int, int);
-extern	void	SYNTAX(const char *, ...);
-extern	void	FATAL(const char *, ...) __attribute__((__noreturn__));
-extern	void	WARNING(const char *, ...);
+extern	void	SYNTAX(const char *, ...)
+    __attribute__((__format__(__printf__, 1, 2)));
+extern	void	FATAL(const char *, ...)
+    __attribute__((__format__(__printf__, 1, 2), __noreturn__));
+extern	void	WARNING(const char *, ...)
+    __attribute__((__format__(__printf__, 1, 2)));
 extern	void	error(void);
 extern	void	eprint(void);
 extern	void	bclass(int);
diff --git a/run.c b/run.c
index a331449..4270e54 100644
--- a/run.c
+++ b/run.c
@@ -25,6 +25,9 @@
 #define DEBUG
 #include <stdio.h>
 #include <ctype.h>
+#include <wchar.h>
+#include <wctype.h>
+#include <fcntl.h>
 #include <setjmp.h>
 #include <limits.h>
 #include <math.h>
@@ -36,11 +39,12 @@
 #include "awk.h"
 #include "ytab.h"
 
-#define tempfree(x)	if (istemp(x)) tfree(x); else
+static void stdinit(void);
+static void flush_all(void);
 
-/*
-#undef tempfree
-
+#if 1
+#define tempfree(x)	do { if (istemp(x)) tfree(x); } while (/*CONSTCOND*/0)
+#else
 void tempfree(Cell *p) {
 	if (p->ctype == OCELL && (p->csub < CUNK || p->csub > CFREE)) {
 		WARNING("bad csub %d in Cell %d %s",
@@ -49,7 +53,7 @@
 	if (istemp(p))
 		tfree(p);
 }
-*/
+#endif
 
 /* do we really need these? */
 /* #ifdef _NFILE */
@@ -89,7 +93,7 @@
 Cell	*jexit	= &exitcell;
 static Cell	retcell		={ OJUMP, JRET, 0, 0, 0.0, NUM, NULL };
 Cell	*jret	= &retcell;
-static Cell	tempcell	={ OCELL, CTEMP, 0, "", 0.0, NUM|STR|DONTFREE, NULL };
+static Cell	tempcell	={ OCELL, CTEMP, 0, EMPTY, 0.0, NUM|STR|DONTFREE, NULL };
 
 Node	*curnode = NULL;	/* the node being executed, for debugging */
 
@@ -130,7 +134,6 @@
 
 void run(Node *a)	/* execution of parse tree starts here */
 {
-	extern void stdinit(void);
 
 	stdinit();
 	execute(a);
@@ -219,11 +222,11 @@
 
 struct Frame *frame = NULL;	/* base of stack frames; dynamically allocated */
 int	nframe = 0;		/* number of frames allocated */
-struct Frame *fp = NULL;	/* frame pointer. bottom level unused */
+struct Frame *frp = NULL;	/* frame pointer. bottom level unused */
 
 Cell *call(Node **a, int n)	/* function call.  very kludgy and fragile */
 {
-	static Cell newcopycell = { OCELL, CCOPY, 0, "", 0.0, NUM|STR|DONTFREE, NULL };
+	static const Cell newcopycell = { OCELL, CCOPY, 0, EMPTY, 0.0, NUM|STR|DONTFREE, NULL };
 	int i, ncall, ndef;
 	int freed = 0; /* handles potential double freeing when fcn & param share a tempcell */
 	Node *x;
@@ -236,21 +239,21 @@
 	if (!isfcn(fcn))
 		FATAL("calling undefined function %s", s);
 	if (frame == NULL) {
-		fp = frame = calloc(nframe += 100, sizeof(*frame));
+		frp = frame = calloc(nframe += 100, sizeof(*frame));
 		if (frame == NULL)
 			FATAL("out of space for stack frames calling %s", s);
 	}
 	for (ncall = 0, x = a[1]; x != NULL; x = x->nnext)	/* args in call */
 		ncall++;
 	ndef = (int) fcn->fval;			/* args in defn */
-	   dprintf( ("calling %s, %d args (%d in defn), fp=%d\n", s, ncall, ndef, (int) (fp-frame)) );
+	   dprintf( ("calling %s, %d args (%d in defn), frp=%d\n", s, ncall, ndef, (int) (frp-frame)) );
 	if (ncall > ndef)
 		WARNING("function %s called with %d args, uses only %d",
 			s, ncall, ndef);
 	if (ncall + ndef > NARGS)
 		FATAL("function %s has %d arguments, limit %d", s, ncall+ndef, NARGS);
 	for (i = 0, x = a[1]; x != NULL; i++, x = x->nnext) {	/* get call args */
-		   dprintf( ("evaluate args[%d], fp=%d:\n", i, (int) (fp-frame)) );
+		   dprintf( ("evaluate args[%d], frp=%d:\n", i, (int) (frp-frame)) );
 		y = execute(x);
 		oargs[i] = y;
 		   dprintf( ("args[%d]: %s %f <%s>, t=%o\n",
@@ -267,25 +270,25 @@
 		args[i] = gettemp();
 		*args[i] = newcopycell;
 	}
-	fp++;	/* now ok to up frame */
-	if (fp >= frame + nframe) {
-		int dfp = fp - frame;	/* old index */
+	frp++;	/* now ok to up frame */
+	if (frp >= frame + nframe) {
+		int dfp = frp - frame;	/* old index */
 		frame = realloc(frame, (nframe += 100) * sizeof(*frame));
 		if (frame == NULL)
 			FATAL("out of space for stack frames in %s", s);
-		fp = frame + dfp;
+		frp = frame + dfp;
 	}
-	fp->fcncell = fcn;
-	fp->args = args;
-	fp->nargs = ndef;	/* number defined with (excess are locals) */
-	fp->retval = gettemp();
+	frp->fcncell = fcn;
+	frp->args = args;
+	frp->nargs = ndef;	/* number defined with (excess are locals) */
+	frp->retval = gettemp();
 
-	   dprintf( ("start exec of %s, fp=%d\n", s, (int) (fp-frame)) );
+	   dprintf( ("start exec of %s, frp=%d\n", s, (int) (frp-frame)) );
 	y = execute((Node *)(fcn->sval));	/* execute body */
-	   dprintf( ("finished exec of %s, fp=%d\n", s, (int) (fp-frame)) );
+	   dprintf( ("finished exec of %s, frp=%d\n", s, (int) (frp-frame)) );
 
 	for (i = 0; i < ndef; i++) {
-		Cell *t = fp->args[i];
+		Cell *t = frp->args[i];
 		if (isarr(t)) {
 			if (t->csub == CCOPY) {
 				if (i >= ncall) {
@@ -314,9 +317,9 @@
 	if (freed == 0) {
 		tempfree(y);	/* don't free twice! */
 	}
-	z = fp->retval;			/* return value */
+	z = frp->retval;			/* return value */
 	   dprintf( ("%s returns %g |%s| %o\n", s, getfval(z), getsval(z), z->tval) );
-	fp--;
+	frp--;
 	return(z);
 }
 
@@ -343,11 +346,11 @@
 {
 
 	n = ptoi(a[0]);	/* argument number, counting from 0 */
-	   dprintf( ("arg(%d), fp->nargs=%d\n", n, fp->nargs) );
-	if (n+1 > fp->nargs)
+	   dprintf( ("arg(%d), frp->nargs=%d\n", n, frp->nargs) );
+	if (n+1 > frp->nargs)
 		FATAL("argument #%d of function %s was not supplied",
-			n+1, fp->fcncell->nval);
-	return fp->args[n];
+			n+1, frp->fcncell->nval);
+	return frp->args[n];
 }
 
 Cell *jump(Node **a, int n)	/* break, continue, next, nextfile, return */
@@ -366,14 +369,14 @@
 		if (a[0] != NULL) {
 			y = execute(a[0]);
 			if ((y->tval & (STR|NUM)) == (STR|NUM)) {
-				setsval(fp->retval, getsval(y));
-				fp->retval->fval = getfval(y);
-				fp->retval->tval |= NUM;
+				setsval(frp->retval, getsval(y));
+				frp->retval->fval = getfval(y);
+				frp->retval->tval |= NUM;
 			}
 			else if (y->tval & STR)
-				setsval(fp->retval, getsval(y));
+				setsval(frp->retval, getsval(y));
 			else if (y->tval & NUM)
-				setfval(fp->retval, getfval(y));
+				setfval(frp->retval, getfval(y));
 			else		/* can't happen */
 				FATAL("bad type variable %d", y->tval);
 			tempfree(y);
@@ -792,8 +795,8 @@
 
 	z = gettemp();
 	for (p1 = s1; *p1 != '\0'; p1++) {
-		for (q=p1, p2=s2; *p2 != '\0' && *q == *p2; q++, p2++)
-			;
+		for (q = p1, p2 = s2; *p2 != '\0' && *q == *p2; q++, p2++)
+			continue;
 		if (*p2 == '\0') {
 			v = (Awkfloat) (p1 - s1 + 1);	/* origin 1 */
 			break;
@@ -1063,7 +1066,7 @@
 	case UMINUS:
 		i = -i;
 		break;
-    case UPLUS: /* handled by getfval(), above */
+	case UPLUS: /* handled by getfval(), above */
 		break;
 	case POWER:
 		if (j >= 0 && modf(j, &v) == 0.0)	/* pos integer exponent */
@@ -1245,7 +1248,8 @@
 {
 	Cell *x = NULL, *y, *ap;
 	const char *s, *origs, *t;
-	char *fs = NULL, *origfs = NULL;
+	const char *fs = NULL;
+	char *origfs = NULL;
 	int sep;
 	char temp, num[50];
 	int n, tempstat, arg3type;
@@ -1257,7 +1261,7 @@
 		fs = getsval(fsloc);
 	else if (arg3type == STRING) {	/* split(str,arr,"string") */
 		x = execute(a[2]);
-		origfs = fs = strdup(getsval(x));
+		fs = origfs = strdup(getsval(x));
 		tempfree(x);
 	} else if (arg3type == REGEXPR)
 		fs = "(regexpr)";	/* split(str,arr,/regexpr/) */
@@ -1299,7 +1303,7 @@
 					setsymtab(num, s, 0.0, STR, (Array *) ap->sval);
 				setptr(patbeg, temp);
 				s = patbeg + patlen;
-				if (*(patbeg+patlen-1) == 0 || *s == 0) {
+				if (*(patbeg+patlen-1) == '\0' || *s == '\0') {
 					n++;
 					snprintf(num, sizeof(num), "%d", n);
 					setsymtab(num, "", 0.0, STR, (Array *) ap->sval);
@@ -1320,15 +1324,16 @@
 		pfa = NULL;
 	} else if (sep == ' ') {
 		for (n = 0; ; ) {
-			while (*s == ' ' || *s == '\t' || *s == '\n')
+#define ISWS(c)	((c) == ' ' || (c) == '\t' || (c) == '\n')
+			while (ISWS(*s))
 				s++;
-			if (*s == 0)
+			if (*s == '\0')
 				break;
 			n++;
 			t = s;
 			do
 				s++;
-			while (*s!=' ' && *s!='\t' && *s!='\n' && *s!='\0');
+			while (*s != '\0' && !ISWS(*s));
 			temp = *s;
 			setptr(s, '\0');
 			snprintf(num, sizeof(num), "%d", n);
@@ -1337,22 +1342,22 @@
 			else
 				setsymtab(num, t, 0.0, STR, (Array *) ap->sval);
 			setptr(s, temp);
-			if (*s != 0)
+			if (*s != '\0')
 				s++;
 		}
 	} else if (sep == 0) {	/* new: split(s, a, "") => 1 char/elem */
-		for (n = 0; *s != 0; s++) {
+		for (n = 0; *s != '\0'; s++) {
 			char buf[2];
 			n++;
 			snprintf(num, sizeof(num), "%d", n);
 			buf[0] = *s;
-			buf[1] = 0;
+			buf[1] = '\0';
 			if (isdigit((uschar)buf[0]))
 				setsymtab(num, buf, atof(buf), STR|NUM, (Array *) ap->sval);
 			else
 				setsymtab(num, buf, 0.0, STR, (Array *) ap->sval);
 		}
-	} else if (*s != 0) {
+	} else if (*s != '\0') {
 		for (;;) {
 			n++;
 			t = s;
@@ -1366,7 +1371,7 @@
 			else
 				setsymtab(num, t, 0.0, STR, (Array *) ap->sval);
 			setptr(s, temp);
-			if (*s++ == 0)
+			if (*s++ == '\0')
 				break;
 		}
 	}
@@ -1503,16 +1508,73 @@
 	return True;
 }
 
+static char *nawk_convert(const char *s, int (*fun_c)(int),
+    wint_t (*fun_wc)(wint_t))
+{
+	char *buf      = NULL;
+	char *pbuf     = NULL;
+	const char *ps = NULL;
+	size_t n       = 0;
+	mbstate_t mbs, mbs2;
+	wchar_t wc;
+	size_t sz = MB_CUR_MAX;
+
+	if (sz == 1) {
+		buf = tostring(s);
+
+		for (pbuf = buf; *pbuf; pbuf++)
+			*pbuf = fun_c((uschar)*pbuf);
+
+		return buf;
+	} else {
+		/* upper/lower character may be shorter/longer */
+		buf = tostringN(s, strlen(s) * sz + 1);
+
+		memset(&mbs,  0, sizeof(mbs));
+		memset(&mbs2, 0, sizeof(mbs2));
+
+		ps   = s;
+		pbuf = buf;
+		while (n = mbrtowc(&wc, ps, sz, &mbs),
+		       n > 0 && n != (size_t)-1 && n != (size_t)-2)
+		{
+			ps += n;
+
+			n = wcrtomb(pbuf, fun_wc(wc), &mbs2);
+			if (n == (size_t)-1)
+				FATAL("illegal wide character %s", s);
+
+			pbuf += n;
+		}
+
+		*pbuf = '\0';
+
+		if (n)
+			FATAL("illegal byte sequence %s", s);
+
+		return buf;
+	}
+}
+
+static char *nawk_toupper(const char *s)
+{
+	return nawk_convert(s, toupper, towupper);
+}
+
+static char *nawk_tolower(const char *s)
+{
+	return nawk_convert(s, tolower, towlower);
+}
+
 Cell *bltin(Node **a, int n)	/* builtin functions. a[0] is type, a[1] is arg list */
 {
 	Cell *x, *y;
 	Awkfloat u;
 	int t;
 	Awkfloat tmp;
-	char *p, *buf;
+	char *buf;
 	Node *nextarg;
 	FILE *fp;
-	void flush_all(void);
 	int status = 0;
 
 	t = ptoi(a[0]);
@@ -1583,16 +1645,10 @@
 		break;
 	case FTOUPPER:
 	case FTOLOWER:
-		buf = tostring(getsval(x));
-		if (t == FTOUPPER) {
-			for (p = buf; *p; p++)
-				if (islower((uschar) *p))
-					*p = toupper((uschar)*p);
-		} else {
-			for (p = buf; *p; p++)
-				if (isupper((uschar) *p))
-					*p = tolower((uschar)*p);
-		}
+		if (t == FTOUPPER)
+			buf = nawk_toupper(getsval(x));
+		else
+			buf = nawk_tolower(getsval(x));
 		tempfree(x);
 		x = gettemp();
 		setsval(x, buf);
@@ -1675,14 +1731,14 @@
 	int	mode;	/* '|', 'a', 'w' => LE/LT, GT */
 } *files;
 
-int nfiles;
+size_t nfiles;
 
-void stdinit(void)	/* in case stdin, etc., are not constants */
+static void stdinit(void)	/* in case stdin, etc., are not constants */
 {
 	nfiles = FOPEN_MAX;
 	files = calloc(nfiles, sizeof(*files));
 	if (files == NULL)
-		FATAL("can't allocate file memory for %u files", nfiles);
+		FATAL("can't allocate file memory for %zu files", nfiles);
         files[0].fp = stdin;
 	files[0].fname = "/dev/stdin";
 	files[0].mode = LT;
@@ -1697,12 +1753,13 @@
 FILE *openfile(int a, const char *us)
 {
 	const char *s = us;
-	int i, m;
+	size_t i;
+	int m;
 	FILE *fp = NULL;
 
 	if (*s == '\0')
 		FATAL("null file name in print or getline");
-	for (i=0; i < nfiles; i++)
+	for (i = 0; i < nfiles; i++)
 		if (files[i].fname && strcmp(s, files[i].fname) == 0) {
 			if (a == files[i].mode || (a==APPEND && files[i].mode==GT))
 				return files[i].fp;
@@ -1712,15 +1769,15 @@
 	if (a == FFLUSH)	/* didn't find it, so don't create it! */
 		return NULL;
 
-	for (i=0; i < nfiles; i++)
+	for (i = 0; i < nfiles; i++)
 		if (files[i].fp == NULL)
 			break;
 	if (i >= nfiles) {
 		struct files *nf;
-		int nnf = nfiles + FOPEN_MAX;
+		size_t nnf = nfiles + FOPEN_MAX;
 		nf = realloc(files, nnf * sizeof(*nf));
 		if (nf == NULL)
-			FATAL("cannot grow files for %s and %d files", s, nnf);
+			FATAL("cannot grow files for %s and %zu files", s, nnf);
 		memset(&nf[nfiles], 0, FOPEN_MAX * sizeof(*nf));
 		nfiles = nnf;
 		files = nf;
@@ -1744,13 +1801,15 @@
 		files[i].fname = tostring(s);
 		files[i].fp = fp;
 		files[i].mode = m;
+		if (fp != stdin && fp != stdout && fp != stderr)
+			(void) fcntl(fileno(fp), F_SETFD, FD_CLOEXEC);
 	}
 	return fp;
 }
 
 const char *filename(FILE *fp)
 {
-	int i;
+	size_t i;
 
 	for (i = 0; i < nfiles; i++)
 		if (fp == files[i].fp)
@@ -1758,55 +1817,57 @@
 	return "???";
 }
 
-Cell *closefile(Node **a, int n)
-{
-	Cell *x;
-	int i, stat;
-
-	x = execute(a[0]);
-	getsval(x);
-	stat = -1;
-	for (i = 0; i < nfiles; i++) {
-		if (files[i].fname && strcmp(x->sval, files[i].fname) == 0) {
-			if (ferror(files[i].fp))
-				WARNING( "i/o error occurred on %s", files[i].fname );
-			if (files[i].mode == '|' || files[i].mode == LE)
-				stat = pclose(files[i].fp);
-			else
-				stat = fclose(files[i].fp);
-			if (stat == EOF)
-				WARNING( "i/o error occurred closing %s", files[i].fname );
-			if (i > 2)	/* don't do /dev/std... */
-				xfree(files[i].fname);
-			files[i].fname = NULL;	/* watch out for ref thru this */
-			files[i].fp = NULL;
-		}
-	}
-	tempfree(x);
-	x = gettemp();
-	setfval(x, (Awkfloat) stat);
-	return(x);
-}
+ Cell *closefile(Node **a, int n)
+ {
+ 	Cell *x;
+	size_t i;
+	bool stat;
+ 
+ 	x = execute(a[0]);
+ 	getsval(x);
+	stat = true;
+ 	for (i = 0; i < nfiles; i++) {
+		if (!files[i].fname || strcmp(x->sval, files[i].fname) != 0)
+			continue;
+		if (ferror(files[i].fp))
+			FATAL("i/o error occurred on %s", files[i].fname);
+		if (files[i].mode == '|' || files[i].mode == LE)
+			stat = pclose(files[i].fp) == -1;
+		else
+			stat = fclose(files[i].fp) == EOF;
+		if (stat)
+			FATAL("i/o error occurred closing %s", files[i].fname);
+		if (i > 2)	/* don't do /dev/std... */
+			xfree(files[i].fname);
+		files[i].fname = NULL;	/* watch out for ref thru this */
+		files[i].fp = NULL;
+ 	}
+ 	tempfree(x);
+ 	x = gettemp();
+	setfval(x, (Awkfloat) (stat ? -1 : 0));
+ 	return(x);
+ }
 
 void closeall(void)
 {
-	int i, stat;
+	size_t i;
+	bool stat = false;
 
-	for (i = 0; i < FOPEN_MAX; i++) {
-		if (files[i].fp) {
-			if (ferror(files[i].fp))
-				WARNING( "i/o error occurred on %s", files[i].fname );
-			if (files[i].mode == '|' || files[i].mode == LE)
-				stat = pclose(files[i].fp);
-			else
-				stat = fclose(files[i].fp);
-			if (stat == EOF)
-				WARNING( "i/o error occurred while closing %s", files[i].fname );
-		}
+	for (i = 0; i < nfiles; i++) {
+		if (! files[i].fp)
+			continue;
+		if (ferror(files[i].fp))
+			FATAL( "i/o error occurred on %s", files[i].fname );
+		if (files[i].mode == '|' || files[i].mode == LE)
+			stat = pclose(files[i].fp) == -1;
+		else
+			stat = fclose(files[i].fp) == EOF;
+		if (stat)
+			FATAL( "i/o error occurred while closing %s", files[i].fname );
 	}
 }
 
-void flush_all(void)
+static void flush_all(void)
 {
 	int i;
 
@@ -1845,7 +1906,7 @@
 		while (sptr < patbeg)
 			*pb++ = *sptr++;
 		sptr = getsval(y);
-		while (*sptr != 0) {
+		while (*sptr != '\0') {
 			adjbuf(&buf, &bufsz, 5+pb-buf, recsize, &pb, "sub");
 			if (*sptr == '\\') {
 				backsub(&pb, &sptr);
@@ -1863,8 +1924,8 @@
 		sptr = patbeg + patlen;
 		if ((patlen == 0 && *patbeg) || (patlen && *(sptr-1))) {
 			adjbuf(&buf, &bufsz, 1+strlen(sptr)+pb-buf, 0, &pb, "sub");
-			while ((*pb++ = *sptr++) != 0)
-				;
+			while ((*pb++ = *sptr++) != '\0')
+				continue;
 		}
 		if (pb > buf + bufsz)
 			FATAL("sub result2 %.30s too big; can't happen", buf);
@@ -1907,11 +1968,11 @@
 		pb = buf;
 		rptr = getsval(y);
 		do {
-			if (patlen == 0 && *patbeg != 0) {	/* matched empty string */
+			if (patlen == 0 && *patbeg != '\0') {	/* matched empty string */
 				if (mflag == 0) {	/* can replace empty */
 					num++;
 					sptr = rptr;
-					while (*sptr != 0) {
+					while (*sptr != '\0') {
 						adjbuf(&buf, &bufsz, 5+pb-buf, recsize, &pb, "gsub");
 						if (*sptr == '\\') {
 							backsub(&pb, &sptr);
@@ -1924,7 +1985,7 @@
 							*pb++ = *sptr++;
 					}
 				}
-				if (*t == 0)	/* at end */
+				if (*t == '\0')	/* at end */
 					goto done;
 				adjbuf(&buf, &bufsz, 2+pb-buf, recsize, &pb, "gsub");
 				*pb++ = *t++;
@@ -1939,7 +2000,7 @@
 				while (sptr < patbeg)
 					*pb++ = *sptr++;
 				sptr = rptr;
-				while (*sptr != 0) {
+				while (*sptr != '\0') {
 					adjbuf(&buf, &bufsz, 5+pb-buf, recsize, &pb, "gsub");
 					if (*sptr == '\\') {
 						backsub(&pb, &sptr);
@@ -1952,7 +2013,7 @@
 						*pb++ = *sptr++;
 				}
 				t = patbeg + patlen;
-				if (patlen == 0 || *t == 0 || *(t-1) == 0)
+				if (patlen == 0 || *t == '\0' || *(t-1) == '\0')
 					goto done;
 				if (pb > buf + bufsz)
 					FATAL("gsub result1 %.30s too big; can't happen", buf);
@@ -1961,8 +2022,8 @@
 		} while (pmatch(pfa,t));
 		sptr = t;
 		adjbuf(&buf, &bufsz, 1+strlen(sptr)+pb-buf, 0, &pb, "gsub");
-		while ((*pb++ = *sptr++) != 0)
-			;
+		while ((*pb++ = *sptr++) != '\0')
+			continue;
 	done:	if (pb < buf + bufsz)
 			*pb = '\0';
 		else if (*(pb-1) != '\0')
@@ -1983,6 +2044,13 @@
 {						/* sptr[0] == '\\' */
 	char *pb = *pb_ptr;
 	const char *sptr = *sptr_ptr;
+	static bool first = true;
+	static bool do_posix = false;
+
+	if (first) {
+		first = false;
+		do_posix = (getenv("POSIXLY_CORRECT") != NULL);
+	}
 
 	if (sptr[1] == '\\') {
 		if (sptr[2] == '\\' && sptr[3] == '&') { /* \\\& -> \& */
@@ -1992,6 +2060,9 @@
 		} else if (sptr[2] == '&') {	/* \\& -> \ + matched */
 			*pb++ = '\\';
 			sptr += 2;
+		} else if (do_posix) {		/* \\x -> \x */
+			sptr++;
+			*pb++ = *sptr++;
 		} else {			/* \\x -> \\x */
 			*pb++ = *sptr++;
 			*pb++ = *sptr++;
diff --git a/testdir/T.builtin b/testdir/T.builtin
index 411a5e5..b36f6cb 100755
--- a/testdir/T.builtin
+++ b/testdir/T.builtin
@@ -29,6 +29,14 @@
 echo 'hello, world!|HELLO, WORLD!|hello, WORLD!' >foo2
 diff foo1 foo2 || echo 'BAD: T.builtin (toupper/tolower)'
 
+
+if locale -a | grep -qsi de_DE.UTF-8; then
+	(export LANG=de_DE.UTF-8 && echo 'Dürst' |
+	$awk '{ printf("%s|%s|%s\n", tolower($0), toupper($0), $0)}') >foo1
+	echo 'dürst|DÜRST|Dürst' >foo2
+	diff foo1 foo2 || echo 'BAD: T.builtin (toupper/tolower) for utf-8'
+fi
+
 $awk 'BEGIN {
 	j = 1; sprintf("%d", 99, ++j)	# does j get incremented?
 	if (j != 2)
diff --git a/testdir/T.concat b/testdir/T.csconcat
similarity index 76%
rename from testdir/T.concat
rename to testdir/T.csconcat
index c6bd016..5199600 100755
--- a/testdir/T.concat
+++ b/testdir/T.csconcat
@@ -1,4 +1,4 @@
-echo T.concat: test constant string concatentation
+echo T.csconcat: test constant string concatentation
 
 awk=${awk-../a.out}
 
@@ -26,4 +26,4 @@
 hello world
 EOF
 
-diff foo1 foo2 || echo 'BAD: T.concat (1)'
+diff foo1 foo2 || echo 'BAD: T.csconcat (1)'
diff --git a/testdir/T.int-expr b/testdir/T.int-expr
index e71a075..de77532 100755
--- a/testdir/T.int-expr
+++ b/testdir/T.int-expr
@@ -18,6 +18,34 @@
 ac	1
 abc	0
 
+pat	a(b{0})c
+ac	1
+abc	0
+
+pat	ab{0}*c
+ac	1
+abc	0
+
+pat	a(b{0})*c
+ac	1
+abc	0
+
+pat	ab{0,}c
+ac	1
+abc	1
+
+pat	a(b{0,})c
+ac	1
+abc	1
+
+pat	ab{0,}*c
+ac	1
+abc	1
+
+pat	a(b{0,})*c
+ac	1
+abc	1
+
 pat	ab{1}c
 ac	0
 abc	1
@@ -53,6 +81,20 @@
 cat << \EOF > foo1
 ac ~ /ab{0}c/ -> should be 1, is 1
 abc ~ /ab{0}c/ -> should be 0, is 0
+ac ~ /a(b{0})c/ -> should be 1, is 1
+abc ~ /a(b{0})c/ -> should be 0, is 0
+ac ~ /ab{0}*c/ -> should be 1, is 1
+abc ~ /ab{0}*c/ -> should be 0, is 0
+ac ~ /a(b{0})*c/ -> should be 1, is 1
+abc ~ /a(b{0})*c/ -> should be 0, is 0
+ac ~ /ab{0,}c/ -> should be 1, is 1
+abc ~ /ab{0,}c/ -> should be 1, is 1
+ac ~ /a(b{0,})c/ -> should be 1, is 1
+abc ~ /a(b{0,})c/ -> should be 1, is 1
+ac ~ /ab{0,}*c/ -> should be 1, is 1
+abc ~ /ab{0,}*c/ -> should be 1, is 1
+ac ~ /a(b{0,})*c/ -> should be 1, is 1
+abc ~ /a(b{0,})*c/ -> should be 1, is 1
 ac ~ /ab{1}c/ -> should be 0, is 0
 abc ~ /ab{1}c/ -> should be 1, is 1
 abbc ~ /ab{1}c/ -> should be 0, is 0
diff --git a/testdir/T.misc b/testdir/T.misc
index 7fc196a..3903606 100755
--- a/testdir/T.misc
+++ b/testdir/T.misc
Binary files differ
diff --git a/tran.c b/tran.c
index d659cfa..4efaa21 100644
--- a/tran.c
+++ b/tran.c
@@ -344,7 +344,7 @@
 	if (vp->tval & FCN)
 		FATAL("can't %s %s; it's a function.", rw, vp->nval);
 	WARNING("funny variable %p: n=%s s=\"%s\" f=%g t=%o",
-		vp, vp->nval, vp->sval, vp->fval, vp->tval);
+		(void *)vp, vp->nval, vp->sval, vp->fval, vp->tval);
 }
 
 char *setsval(Cell *vp, const char *s)	/* set string val of a Cell */
@@ -516,6 +516,17 @@
 	return(p);
 }
 
+char *tostringN(const char *s, size_t n)	/* make a copy of string s */
+{
+	char *p;
+
+	p = malloc(n);
+	if (p == NULL)
+		FATAL("out of space in tostring on %s", s);
+	strcpy(p, s);
+	return(p);
+}
+
 Cell *catstr(Cell *a, Cell *b) /* concatenate a and b */
 {
 	Cell *c;
diff --git a/ytab.c b/ytab.c
index b880c37..fb38155 100644
--- a/ytab.c
+++ b/ytab.c
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.2.2.  */
+/* A Bison parser, made by GNU Bison 3.4.1.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -47,7 +48,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.2.2"
+#define YYBISON_VERSION "3.4.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -65,7 +66,7 @@
 
 
 /* First part of user prologue.  */
-#line 25 "awkgram.y" /* yacc.c:338  */
+#line 25 "awkgram.y"
 
 #include <stdio.h>
 #include <string.h>
@@ -76,12 +77,13 @@
 
 Node	*beginloc = 0;
 Node	*endloc = 0;
-int	infunc	= 0;	/* = 1 if in arglist or body of func */
-int	inloop	= 0;	/* = 1 if in while, for, do */
+bool	infunc	= false;	/* = true if in arglist or body of func */
+int	inloop	= 0;	/* >= 1 if in while, for, do; can't be bool, since loops can next */
 char	*curfname = 0;	/* current function name */
 Node	*arglist = 0;	/* list of args for current function */
 
-#line 85 "ytab.c" /* yacc.c:338  */
+#line 86 "y.tab.c"
+
 # ifndef YY_NULLPTR
 #  if defined __cplusplus
 #   if 201103L <= __cplusplus
@@ -102,10 +104,10 @@
 # define YYERROR_VERBOSE 0
 #endif
 
-/* In a future release of Bison, this section will be replaced
-   by #include "ytab.h".  */
-#ifndef YY_YY_YTAB_H_INCLUDED
-# define YY_YY_YTAB_H_INCLUDED
+/* Use api.header.include to #include this header
+   instead of duplicating it here.  */
+#ifndef YY_YY_Y_TAB_H_INCLUDED
+# define YY_YY_Y_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -141,78 +143,79 @@
     QUEST = 277,
     PLUS = 278,
     EMPTYRE = 279,
-    AND = 280,
-    BOR = 281,
-    APPEND = 282,
-    EQ = 283,
-    GE = 284,
-    GT = 285,
-    LE = 286,
-    LT = 287,
-    NE = 288,
-    IN = 289,
-    ARG = 290,
-    BLTIN = 291,
-    BREAK = 292,
-    CLOSE = 293,
-    CONTINUE = 294,
-    DELETE = 295,
-    DO = 296,
-    EXIT = 297,
-    FOR = 298,
-    FUNC = 299,
-    SUB = 300,
-    GSUB = 301,
-    IF = 302,
-    INDEX = 303,
-    LSUBSTR = 304,
-    MATCHFCN = 305,
-    NEXT = 306,
-    NEXTFILE = 307,
-    ADD = 308,
-    MINUS = 309,
-    MULT = 310,
-    DIVIDE = 311,
-    MOD = 312,
-    ASSIGN = 313,
-    ASGNOP = 314,
-    ADDEQ = 315,
-    SUBEQ = 316,
-    MULTEQ = 317,
-    DIVEQ = 318,
-    MODEQ = 319,
-    POWEQ = 320,
-    PRINT = 321,
-    PRINTF = 322,
-    SPRINTF = 323,
-    ELSE = 324,
-    INTEST = 325,
-    CONDEXPR = 326,
-    POSTINCR = 327,
-    PREINCR = 328,
-    POSTDECR = 329,
-    PREDECR = 330,
-    VAR = 331,
-    IVAR = 332,
-    VARNF = 333,
-    CALL = 334,
-    NUMBER = 335,
-    STRING = 336,
-    REGEXPR = 337,
-    GETLINE = 338,
-    RETURN = 339,
-    SPLIT = 340,
-    SUBSTR = 341,
-    WHILE = 342,
-    CAT = 343,
-    NOT = 344,
-    UMINUS = 345,
-    UPLUS = 346,
-    POWER = 347,
-    DECR = 348,
-    INCR = 349,
-    INDIRECT = 350,
-    LASTTOKEN = 351
+    ZERO = 280,
+    AND = 281,
+    BOR = 282,
+    APPEND = 283,
+    EQ = 284,
+    GE = 285,
+    GT = 286,
+    LE = 287,
+    LT = 288,
+    NE = 289,
+    IN = 290,
+    ARG = 291,
+    BLTIN = 292,
+    BREAK = 293,
+    CLOSE = 294,
+    CONTINUE = 295,
+    DELETE = 296,
+    DO = 297,
+    EXIT = 298,
+    FOR = 299,
+    FUNC = 300,
+    SUB = 301,
+    GSUB = 302,
+    IF = 303,
+    INDEX = 304,
+    LSUBSTR = 305,
+    MATCHFCN = 306,
+    NEXT = 307,
+    NEXTFILE = 308,
+    ADD = 309,
+    MINUS = 310,
+    MULT = 311,
+    DIVIDE = 312,
+    MOD = 313,
+    ASSIGN = 314,
+    ASGNOP = 315,
+    ADDEQ = 316,
+    SUBEQ = 317,
+    MULTEQ = 318,
+    DIVEQ = 319,
+    MODEQ = 320,
+    POWEQ = 321,
+    PRINT = 322,
+    PRINTF = 323,
+    SPRINTF = 324,
+    ELSE = 325,
+    INTEST = 326,
+    CONDEXPR = 327,
+    POSTINCR = 328,
+    PREINCR = 329,
+    POSTDECR = 330,
+    PREDECR = 331,
+    VAR = 332,
+    IVAR = 333,
+    VARNF = 334,
+    CALL = 335,
+    NUMBER = 336,
+    STRING = 337,
+    REGEXPR = 338,
+    GETLINE = 339,
+    RETURN = 340,
+    SPLIT = 341,
+    SUBSTR = 342,
+    WHILE = 343,
+    CAT = 344,
+    NOT = 345,
+    UMINUS = 346,
+    UPLUS = 347,
+    POWER = 348,
+    DECR = 349,
+    INCR = 350,
+    INDIRECT = 351,
+    LASTTOKEN = 352
   };
 #endif
 /* Tokens.  */
@@ -238,94 +241,94 @@
 #define QUEST 277
 #define PLUS 278
 #define EMPTYRE 279
-#define AND 280
-#define BOR 281
-#define APPEND 282
-#define EQ 283
-#define GE 284
-#define GT 285
-#define LE 286
-#define LT 287
-#define NE 288
-#define IN 289
-#define ARG 290
-#define BLTIN 291
-#define BREAK 292
-#define CLOSE 293
-#define CONTINUE 294
-#define DELETE 295
-#define DO 296
-#define EXIT 297
-#define FOR 298
-#define FUNC 299
-#define SUB 300
-#define GSUB 301
-#define IF 302
-#define INDEX 303
-#define LSUBSTR 304
-#define MATCHFCN 305
-#define NEXT 306
-#define NEXTFILE 307
-#define ADD 308
-#define MINUS 309
-#define MULT 310
-#define DIVIDE 311
-#define MOD 312
-#define ASSIGN 313
-#define ASGNOP 314
-#define ADDEQ 315
-#define SUBEQ 316
-#define MULTEQ 317
-#define DIVEQ 318
-#define MODEQ 319
-#define POWEQ 320
-#define PRINT 321
-#define PRINTF 322
-#define SPRINTF 323
-#define ELSE 324
-#define INTEST 325
-#define CONDEXPR 326
-#define POSTINCR 327
-#define PREINCR 328
-#define POSTDECR 329
-#define PREDECR 330
-#define VAR 331
-#define IVAR 332
-#define VARNF 333
-#define CALL 334
-#define NUMBER 335
-#define STRING 336
-#define REGEXPR 337
-#define GETLINE 338
-#define RETURN 339
-#define SPLIT 340
-#define SUBSTR 341
-#define WHILE 342
-#define CAT 343
-#define NOT 344
-#define UMINUS 345
-#define UPLUS 346
-#define POWER 347
-#define DECR 348
-#define INCR 349
-#define INDIRECT 350
-#define LASTTOKEN 351
+#define ZERO 280
+#define AND 281
+#define BOR 282
+#define APPEND 283
+#define EQ 284
+#define GE 285
+#define GT 286
+#define LE 287
+#define LT 288
+#define NE 289
+#define IN 290
+#define ARG 291
+#define BLTIN 292
+#define BREAK 293
+#define CLOSE 294
+#define CONTINUE 295
+#define DELETE 296
+#define DO 297
+#define EXIT 298
+#define FOR 299
+#define FUNC 300
+#define SUB 301
+#define GSUB 302
+#define IF 303
+#define INDEX 304
+#define LSUBSTR 305
+#define MATCHFCN 306
+#define NEXT 307
+#define NEXTFILE 308
+#define ADD 309
+#define MINUS 310
+#define MULT 311
+#define DIVIDE 312
+#define MOD 313
+#define ASSIGN 314
+#define ASGNOP 315
+#define ADDEQ 316
+#define SUBEQ 317
+#define MULTEQ 318
+#define DIVEQ 319
+#define MODEQ 320
+#define POWEQ 321
+#define PRINT 322
+#define PRINTF 323
+#define SPRINTF 324
+#define ELSE 325
+#define INTEST 326
+#define CONDEXPR 327
+#define POSTINCR 328
+#define PREINCR 329
+#define POSTDECR 330
+#define PREDECR 331
+#define VAR 332
+#define IVAR 333
+#define VARNF 334
+#define CALL 335
+#define NUMBER 336
+#define STRING 337
+#define REGEXPR 338
+#define GETLINE 339
+#define RETURN 340
+#define SPLIT 341
+#define SUBSTR 342
+#define WHILE 343
+#define CAT 344
+#define NOT 345
+#define UMINUS 346
+#define UPLUS 347
+#define POWER 348
+#define DECR 349
+#define INCR 350
+#define INDIRECT 351
+#define LASTTOKEN 352
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 41 "awkgram.y" /* yacc.c:353  */
+#line 41 "awkgram.y"
 
 	Node	*p;
 	Cell	*cp;
 	int	i;
 	char	*s;
 
-#line 327 "ytab.c" /* yacc.c:353  */
-};
+#line 330 "y.tab.c"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -336,7 +339,7 @@
 
 int yyparse (void);
 
-#endif /* !YY_YY_YTAB_H_INCLUDED  */
+#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
 
 
 
@@ -440,6 +443,8 @@
 #endif
 
 
+#define YY_ASSERT(E) ((void) (0 && (E)))
+
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -571,10 +576,10 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  8
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   4682
+#define YYLAST   4608
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  113
+#define YYNTOKENS  114
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  50
 /* YYNRULES -- Number of rules.  */
@@ -582,25 +587,25 @@
 /* YYNSTATES -- Number of states.  */
 #define YYNSTATES  370
 
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   351
+#define YYMAXUTOK   352
 
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+   as returned by yylex, with out-of-bounds checking.  */
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
+   as returned by yylex.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,   104,     2,     2,
-      12,    16,   103,   101,    10,   102,     2,    15,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    94,    14,
-       2,     2,     2,    93,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,   105,     2,     2,
+      12,    16,   104,   102,    10,   103,     2,    15,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    95,    14,
+       2,     2,     2,    94,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,    18,     2,    19,     2,     2,     2,     2,     2,     2,
@@ -627,9 +632,9 @@
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    95,    96,
-      97,    98,    99,   100,   105,   106,   107,   108,   109,   110,
-     111,   112
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    96,
+      97,    98,    99,   100,   101,   106,   107,   108,   109,   110,
+     111,   112,   113
 };
 
 #if YYDEBUG
@@ -667,21 +672,21 @@
   "PASTAT2", "XBEGIN", "XEND", "NL", "','", "'{'", "'('", "'|'", "';'",
   "'/'", "')'", "'}'", "'['", "']'", "ARRAY", "MATCH", "NOTMATCH",
   "MATCHOP", "FINAL", "DOT", "ALL", "CCL", "NCCL", "CHAR", "OR", "STAR",
-  "QUEST", "PLUS", "EMPTYRE", "AND", "BOR", "APPEND", "EQ", "GE", "GT",
-  "LE", "LT", "NE", "IN", "ARG", "BLTIN", "BREAK", "CLOSE", "CONTINUE",
-  "DELETE", "DO", "EXIT", "FOR", "FUNC", "SUB", "GSUB", "IF", "INDEX",
-  "LSUBSTR", "MATCHFCN", "NEXT", "NEXTFILE", "ADD", "MINUS", "MULT",
-  "DIVIDE", "MOD", "ASSIGN", "ASGNOP", "ADDEQ", "SUBEQ", "MULTEQ", "DIVEQ",
-  "MODEQ", "POWEQ", "PRINT", "PRINTF", "SPRINTF", "ELSE", "INTEST",
-  "CONDEXPR", "POSTINCR", "PREINCR", "POSTDECR", "PREDECR", "VAR", "IVAR",
-  "VARNF", "CALL", "NUMBER", "STRING", "REGEXPR", "'?'", "':'", "GETLINE",
-  "RETURN", "SPLIT", "SUBSTR", "WHILE", "CAT", "'+'", "'-'", "'*'", "'%'",
-  "NOT", "UMINUS", "UPLUS", "POWER", "DECR", "INCR", "INDIRECT",
-  "LASTTOKEN", "$accept", "program", "and", "bor", "comma", "do", "else",
-  "for", "$@1", "$@2", "$@3", "funcname", "if", "lbrace", "nl", "opt_nl",
-  "opt_pst", "opt_simple_stmt", "pas", "pa_pat", "pa_stat", "$@4",
-  "pa_stats", "patlist", "ppattern", "pattern", "plist", "pplist", "prarg",
-  "print", "pst", "rbrace", "re", "reg_expr", "$@5", "rparen",
+  "QUEST", "PLUS", "EMPTYRE", "ZERO", "AND", "BOR", "APPEND", "EQ", "GE",
+  "GT", "LE", "LT", "NE", "IN", "ARG", "BLTIN", "BREAK", "CLOSE",
+  "CONTINUE", "DELETE", "DO", "EXIT", "FOR", "FUNC", "SUB", "GSUB", "IF",
+  "INDEX", "LSUBSTR", "MATCHFCN", "NEXT", "NEXTFILE", "ADD", "MINUS",
+  "MULT", "DIVIDE", "MOD", "ASSIGN", "ASGNOP", "ADDEQ", "SUBEQ", "MULTEQ",
+  "DIVEQ", "MODEQ", "POWEQ", "PRINT", "PRINTF", "SPRINTF", "ELSE",
+  "INTEST", "CONDEXPR", "POSTINCR", "PREINCR", "POSTDECR", "PREDECR",
+  "VAR", "IVAR", "VARNF", "CALL", "NUMBER", "STRING", "REGEXPR", "'?'",
+  "':'", "GETLINE", "RETURN", "SPLIT", "SUBSTR", "WHILE", "CAT", "'+'",
+  "'-'", "'*'", "'%'", "NOT", "UMINUS", "UPLUS", "POWER", "DECR", "INCR",
+  "INDIRECT", "LASTTOKEN", "$accept", "program", "and", "bor", "comma",
+  "do", "else", "for", "$@1", "$@2", "$@3", "funcname", "if", "lbrace",
+  "nl", "opt_nl", "opt_pst", "opt_simple_stmt", "pas", "pa_pat", "pa_stat",
+  "$@4", "pa_stats", "patlist", "ppattern", "pattern", "plist", "pplist",
+  "prarg", "print", "pst", "rbrace", "re", "reg_expr", "$@5", "rparen",
   "simple_stmt", "st", "stmt", "$@6", "$@7", "$@8", "stmtlist", "subop",
   "string", "term", "var", "varlist", "varname", "while", YY_NULLPTR
 };
@@ -701,16 +706,16 @@
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,    63,    58,   338,   339,   340,   341,   342,
-     343,    43,    45,    42,    37,   344,   345,   346,   347,   348,
-     349,   350,   351
+     335,   336,   337,   338,    63,    58,   339,   340,   341,   342,
+     343,   344,    43,    45,    42,    37,   345,   346,   347,   348,
+     349,   350,   351,   352
 };
 # endif
 
-#define YYPACT_NINF -324
+#define YYPACT_NINF -316
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-324)))
+  (!!((Yystate) == (-316)))
 
 #define YYTABLE_NINF -32
 
@@ -721,43 +726,43 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     682,  -324,  -324,  -324,     7,  1583,  -324,   156,  -324,    12,
-      12,  -324,  4212,  -324,  -324,    56,  4571,    49,  -324,  -324,
-      58,    71,    79,  -324,  -324,  -324,    81,  -324,  -324,   -31,
-      83,    94,  4571,  4571,  4270,    57,    57,  4571,   795,   187,
-    -324,   158,  3498,  -324,  -324,   146,   -57,    -5,   -23,    30,
-    -324,  -324,   795,   795,  2185,    26,   -34,  4027,  4212,  4571,
-      -5,    90,  -324,  -324,   163,  4212,  4212,  4212,  4085,  4571,
-     148,  4212,  4212,    85,    85,  -324,    85,  -324,  -324,  -324,
-    -324,  -324,   193,   160,   160,   -13,  -324,  1735,   191,   192,
-     160,   160,  -324,  -324,  1735,   195,   196,  -324,  1409,   795,
-    3498,  4328,   160,  -324,   863,  -324,   193,   795,  1583,   114,
-    4212,  -324,  -324,  4212,  4212,  4212,  4212,  4212,  4212,   -13,
-    4212,  1793,  1851,    -5,  4212,  -324,  4386,  4571,  4571,  4571,
-    4571,  4571,  4212,  -324,  -324,  4212,   931,   999,  -324,  -324,
-    1909,   166,  1909,   200,  -324,    62,  3498,  2676,   125,  2585,
-    2585,   111,  -324,   132,    -5,  4571,  2585,  2585,  -324,   208,
-    -324,   193,   208,  -324,  -324,   201,  1677,  -324,  1467,  4212,
-    -324,  -324,  1677,  -324,  4212,  -324,  1409,   141,  1067,  4212,
-    3900,   219,    39,  -324,    -5,   -20,  -324,  -324,  -324,  1409,
-    4212,  1135,  -324,    57,  3749,  -324,  3749,  3749,  3749,  3749,
-    3749,  3749,  -324,  2767,  -324,  3669,  -324,  3589,  2585,   219,
-    4571,    85,    -3,    -3,    85,    85,    85,  3498,    98,  -324,
-    -324,  -324,  3498,   -13,  3498,  -324,  -324,  1909,  -324,   136,
-    1909,  1909,  -324,  -324,    -5,    32,  1909,  -324,  -324,  4212,
-    -324,   218,  -324,    22,  2858,  -324,  2858,  -324,  -324,  1205,
-    -324,   224,   143,  4444,   -13,  4444,  1967,  2025,    -5,  2083,
-    4571,  4571,  4571,  4444,  -324,    12,  -324,  -324,  4212,  1909,
-    1909,    -5,  -324,  -324,  3498,  -324,    21,   226,  2949,   220,
-    3040,   222,   147,  2287,   106,   162,   -13,   226,   226,   149,
-    -324,  -324,  -324,   198,  4212,  4513,  -324,  -324,  3820,  4154,
-    3969,  3900,    -5,    -5,    -5,  3900,   795,  3498,  2389,  2491,
-    -324,  -324,    12,  -324,  -324,  -324,  -324,  -324,  1909,  -324,
-    1909,  -324,   193,  4212,   234,   239,   -13,   150,  4444,  1273,
-    -324,    36,  -324,    36,   795,  3131,   237,  3222,  1525,  3316,
-     226,  4212,  -324,   198,  3900,  -324,   238,   240,  1341,  -324,
-    -324,  -324,   234,   193,  1409,  3407,  -324,  -324,  -324,   226,
-    1525,  -324,   160,  1409,   234,  -324,  -324,   226,  1409,  -324
+     635,  -316,  -316,  -316,    10,  1580,  -316,   151,  -316,     3,
+       3,  -316,  4178,  -316,  -316,    29,  4496,    18,  -316,  -316,
+      40,    44,    56,  -316,  -316,  -316,    71,  -316,  -316,    81,
+      95,   104,  4496,  4496,  4226,   261,   261,  4496,   763,    76,
+    -316,   157,  3511,  -316,  -316,   106,   -62,    -3,   -34,   117,
+    -316,  -316,   763,   763,  2184,    39,    53,  4014,  4178,  4496,
+      -3,    32,  -316,  -316,   113,  4178,  4178,  4178,  4072,  4496,
+     115,  4178,  4178,    65,    65,  -316,    65,  -316,  -316,  -316,
+    -316,  -316,   166,   158,   158,   -14,  -316,  1733,   164,   178,
+     158,   158,  -316,  -316,  1733,   186,   190,  -316,  1386,   763,
+    3511,  4284,   158,  -316,   832,  -316,   166,   763,  1580,   108,
+    4178,  -316,  -316,  4178,  4178,  4178,  4178,  4178,  4178,   -14,
+    4178,  1791,  1849,    -3,  4178,  -316,  4332,  4496,  4496,  4496,
+    4496,  4496,  4178,  -316,  -316,  4178,   901,   970,  -316,  -316,
+    1907,   155,  1907,   192,  -316,    62,  3511,  2680,   116,  2588,
+    2588,    80,  -316,    87,    -3,  4496,  2588,  2588,  -316,   196,
+    -316,   166,   196,  -316,  -316,   191,  1675,  -316,  1454,  4178,
+    -316,  -316,  1675,  -316,  4178,  -316,  1386,   130,  1039,  4178,
+    3894,   201,    57,  -316,    -3,   -30,  -316,  -316,  -316,  1386,
+    4178,  1108,  -316,   261,  3765,  -316,  3765,  3765,  3765,  3765,
+    3765,  3765,  -316,  2772,  -316,  3684,  -316,  3603,  2588,   201,
+    4496,    65,    43,    43,    65,    65,    65,  3511,    27,  -316,
+    -316,  -316,  3511,   -14,  3511,  -316,  -316,  1907,  -316,   107,
+    1907,  1907,  -316,  -316,    -3,     2,  1907,  -316,  -316,  4178,
+    -316,   203,  -316,   -11,  2864,  -316,  2864,  -316,  -316,  1179,
+    -316,   206,   128,  4400,   -14,  4400,  1965,  2023,    -3,  2081,
+    4496,  4496,  4496,  4400,  -316,     3,  -316,  -316,  4178,  1907,
+    1907,    -3,  -316,  -316,  3511,  -316,     6,   210,  2956,   204,
+    3048,   213,   143,  2287,    47,   188,   -14,   210,   210,   132,
+    -316,  -316,  -316,   193,  4178,  4448,  -316,  -316,  3813,  4120,
+    3966,  3894,    -3,    -3,    -3,  3894,   763,  3511,  2390,  2493,
+    -316,  -316,     3,  -316,  -316,  -316,  -316,  -316,  1907,  -316,
+    1907,  -316,   166,  4178,   217,   223,   -14,   147,  4400,  1248,
+    -316,    33,  -316,    33,   763,  3140,   220,  3232,  1522,  3327,
+     210,  4178,  -316,   193,  3894,  -316,   226,   232,  1317,  -316,
+    -316,  -316,   217,   166,  1386,  3419,  -316,  -316,  -316,   210,
+    1522,  -316,   158,  1386,   217,  -316,  -316,   210,  1386,  -316
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -807,11 +812,11 @@
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -324,  -324,    -1,    46,     5,  -324,  -324,  -324,  -324,  -324,
-    -324,  -324,  -324,    -4,   -73,   -67,   225,  -323,  -324,    69,
-     152,  -324,  -324,   -43,  -192,   482,  -175,  -324,  -324,  -324,
-    -324,  -324,   -32,  -102,  -324,  -215,  -165,   -40,   381,  -324,
-    -324,  -324,   -25,  -324,  -324,   236,   -16,  -324,   103,  -324
+    -316,  -316,    -1,    46,     5,  -316,  -316,  -316,  -316,  -316,
+    -316,  -316,  -316,    -4,   -73,   -67,   209,  -315,  -316,    61,
+     145,  -316,  -316,   -43,  -192,   482,  -175,  -316,  -316,  -316,
+    -316,  -316,   -32,  -102,  -316,  -215,  -165,   -40,   381,  -316,
+    -316,  -316,   -25,  -316,  -316,   236,   -16,  -316,   103,  -316
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -829,44 +834,44 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      61,    38,    75,   242,   252,    52,    53,     8,   195,   159,
-     126,    69,   126,    70,    14,   352,    61,    61,    61,    77,
-      78,    61,   209,    11,   151,   153,    61,   136,   137,   287,
-     221,   288,    14,   159,   125,   107,   138,   364,    61,   190,
-     135,   221,   141,    61,   164,   221,   132,   167,   135,   263,
-     170,   171,   260,    61,   173,    23,    24,    25,   143,   140,
-     142,   295,   186,   298,   299,   300,   286,   301,    57,   183,
-      65,   305,   138,    23,   178,    25,   261,    14,   226,   262,
-      37,    14,   191,    66,    61,   185,   133,   134,   159,   133,
-     134,    67,   218,    68,   238,    71,   127,   128,   129,   130,
-     129,   130,    14,   131,    38,   131,    72,   310,   138,   340,
-      61,    61,    61,    61,    61,    61,   138,   272,    23,   327,
-      25,   138,    23,    24,    25,   321,   240,   232,   279,   281,
-      61,    61,   245,    61,    61,    62,   344,   359,    63,    61,
-      61,    61,   138,    23,    24,    25,   138,    37,   233,   367,
-      61,   296,   275,   138,   230,   231,    61,   138,   124,   293,
-     138,   235,   236,   317,    61,    50,   343,     2,    37,   158,
-      51,   158,     3,   242,   161,   148,   322,   267,    61,   256,
+      61,    38,    75,   242,   252,    52,    53,   135,   195,   159,
+       8,   221,   126,    70,    11,   221,    61,    61,    61,    77,
+      78,    61,   209,   352,   151,   153,    61,   136,   137,   287,
+     125,   288,    14,   159,   286,   107,   132,   138,    61,   190,
+     263,    57,   221,    61,   164,   364,   272,   167,    14,   138,
+     170,   171,    65,    61,   173,   141,    66,   138,   126,   140,
+     142,   295,   186,   298,   299,   300,   321,   301,    67,   183,
+     260,   305,   138,    23,   178,    25,   133,   134,   226,    14,
+     133,   134,   191,    68,    61,   185,   106,    11,   159,    23,
+     138,    25,   218,   310,   238,   261,   232,   138,   262,   127,
+     128,   129,   130,   233,    38,    62,   131,    71,    63,   340,
+      61,    61,    61,    61,    61,    61,    72,   138,   124,   327,
+      23,    24,    25,   275,    69,   148,   240,    14,   279,   281,
+      61,    61,   245,    61,    61,   135,   344,   359,   138,    61,
+      61,    61,   133,   134,   293,    37,   143,   129,   130,   367,
+      61,   296,   131,   138,   230,   231,    61,   138,   155,   317,
+      50,   235,   236,   343,    61,    51,     2,   158,    23,    24,
+      25,     3,   161,   242,   131,   158,   168,   267,    61,   256,
       61,    61,    61,    61,    61,    61,   259,    61,   165,    61,
-     155,    61,    61,   131,    61,   242,   284,   106,    11,   133,
-     134,    61,   158,   168,   169,   175,    61,   174,    61,   193,
-     223,   228,   159,   269,   270,   225,   336,   237,   323,   239,
-     248,   183,   202,   183,   183,   183,   257,   183,    61,   138,
-      61,   183,   285,   292,   276,   311,   314,   185,   316,   185,
-     185,   185,   326,   185,    61,    61,    61,   185,   325,   159,
-     275,   341,    60,   350,   356,   338,   357,   142,    61,   265,
-     192,   306,    61,     0,    61,     0,   108,    61,    73,    74,
+     169,    61,    61,    37,    61,   242,   284,   158,   174,   175,
+     223,    61,   322,   228,   193,   237,    61,   225,    61,   239,
+     248,   138,   159,   269,   270,   292,   336,   285,   323,   311,
+     314,   183,   202,   183,   183,   183,   257,   183,    61,   316,
+      61,   183,   325,   275,   276,   341,   350,   185,   326,   185,
+     185,   185,   356,   185,    61,    61,    61,   185,   357,   159,
+     108,   265,    60,   192,     0,   338,     0,   142,    61,     0,
+       0,   306,    61,     0,    61,     0,     0,    61,    73,    74,
       76,   243,     0,    79,     0,     0,     0,     0,   123,    61,
      159,   329,    61,    61,    61,    61,   360,   318,   320,    61,
      123,    61,    61,    61,   256,    76,   183,   256,   256,   256,
-     256,     0,     0,     0,   256,   154,     0,     0,   334,   348,
+     256,     0,     0,     0,   256,   154,     0,    14,   334,   348,
        0,     0,   185,   331,   333,   346,     0,   347,     0,    61,
        0,    61,   365,    61,     0,     0,   273,     0,    61,     0,
        0,     0,   142,     0,     0,     0,   123,   184,   282,    61,
-       0,   257,     0,   256,   257,   257,   257,   257,     0,     0,
-       0,   257,     0,     0,     0,     0,     0,   297,     0,     0,
+       0,   257,     0,   256,   257,   257,   257,   257,    23,    24,
+      25,   257,     0,     0,     0,     0,     0,   297,     0,     0,
        0,     0,   211,   212,   213,   214,   215,   216,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    37,     0,     0,     0,     0,     0,     0,
        0,     0,   123,   123,     0,   123,   123,     0,     0,   324,
      257,   234,   123,   123,     0,     0,     0,     0,     0,     0,
        0,     0,   123,     0,     0,     0,     0,     0,   123,     0,
@@ -892,164 +897,164 @@
      201,     0,   203,   205,   207,     0,   208,     0,     0,     0,
        0,     0,     0,     0,   217,     0,     0,   146,     0,     0,
        0,     0,   222,     0,   224,     0,     0,     0,     0,     0,
-     291,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   244,     0,     0,     0,     0,   246,     0,     0,     0,
+     291,     0,     0,     0,     0,   -29,     1,     0,     0,     0,
+       0,     0,   -29,   -29,     2,     0,   -29,   -29,     0,     3,
+     -29,   244,     0,     0,     0,     0,   246,     0,     0,     0,
        0,    54,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    42,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   -29,     1,     0,     0,     0,     0,     0,   -29,
-     -29,     2,     0,   -29,   -29,     0,     3,   -29,     0,     0,
+       0,   -29,   -29,     0,   -29,     0,     0,     0,     0,     0,
+     -29,   -29,   -29,     0,   -29,     0,   -29,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   274,
-     188,     0,   278,   280,     0,     0,     0,     0,   283,     0,
-       0,   146,     0,     0,     0,     0,     0,   -29,   -29,   188,
-     -29,     0,     0,     0,     0,   361,   -29,   -29,   -29,     0,
-     -29,     0,   -29,     0,   366,     0,     0,     0,     0,   369,
+     188,     0,   278,   280,   -29,     0,     0,     0,   283,     0,
+       0,   146,   -29,   -29,   -29,   -29,   -29,   -29,     0,   188,
+       0,   -29,     0,   -29,   -29,   361,     0,   -29,   -29,     0,
+       0,   -29,     0,     0,   366,   -29,   -29,   -29,     0,   369,
      307,   308,   309,     0,     0,     0,     0,     0,     0,     0,
-     -29,     0,     0,     0,     0,     0,     0,     0,   -29,   -29,
-     -29,   -29,   -29,   -29,     0,     0,    54,   -29,     0,   -29,
-     -29,     0,     0,   -29,   -29,     0,     0,   -29,     0,     0,
-       0,   -29,   -29,   -29,     0,     0,    80,     0,     0,     0,
-     335,     0,   337,     0,    81,   339,    11,    12,     0,    82,
-      13,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      14,    15,    83,    16,    84,    85,    86,    87,    88,     0,
-      18,    19,    89,    20,     0,    21,    90,    91,     0,     0,
        0,     0,     0,     0,    80,     0,     0,     0,     0,     0,
-       0,    92,    93,    22,    11,    12,     0,    82,    13,     0,
-     187,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,    94,    30,    31,    95,     0,    32,    33,     0,     0,
-      34,     0,     0,     0,    35,    36,    37,     0,    14,    15,
+       0,     0,    81,     0,    11,    12,    54,    82,    13,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     335,     0,   337,     0,     0,   339,     0,     0,     0,    14,
+      15,    83,    16,    84,    85,    86,    87,    88,     0,    18,
+      19,    89,    20,   355,    21,    90,    91,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,     0,     0,     0,     0,
+      92,    93,    22,    11,    12,     0,    82,    13,     0,   187,
+      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
+      94,    30,    31,    95,     0,    32,    33,     0,     0,    34,
+       0,     0,     0,    35,    36,    37,     0,     0,    14,    15,
       83,    16,    84,    85,    86,    87,    88,     0,    18,    19,
       89,    20,     0,    21,    90,    91,     0,     0,     0,     0,
        0,     0,    80,     0,     0,     0,     0,     0,     0,    92,
       93,    22,    11,    12,     0,    82,    13,     0,   219,    23,
       24,    25,    26,    27,    28,     0,     0,     0,    29,    94,
       30,    31,    95,     0,    32,    33,     0,     0,    34,     0,
-       0,     0,    35,    36,    37,     0,    14,    15,    83,    16,
+       0,     0,    35,    36,    37,     0,     0,    14,    15,    83,
+      16,    84,    85,    86,    87,    88,     0,    18,    19,    89,
+      20,     0,    21,    90,    91,     0,     0,     0,     0,     0,
+       0,    80,     0,     0,     0,     0,     0,     0,    92,    93,
+      22,    11,    12,     0,    82,    13,     0,   220,    23,    24,
+      25,    26,    27,    28,     0,     0,     0,    29,    94,    30,
+      31,    95,     0,    32,    33,     0,     0,    34,     0,     0,
+       0,    35,    36,    37,     0,     0,    14,    15,    83,    16,
       84,    85,    86,    87,    88,     0,    18,    19,    89,    20,
        0,    21,    90,    91,     0,     0,     0,     0,     0,     0,
       80,     0,     0,     0,     0,     0,     0,    92,    93,    22,
-      11,    12,     0,    82,    13,     0,   220,    23,    24,    25,
+      11,    12,     0,    82,    13,     0,   250,    23,    24,    25,
       26,    27,    28,     0,     0,     0,    29,    94,    30,    31,
       95,     0,    32,    33,     0,     0,    34,     0,     0,     0,
-      35,    36,    37,     0,    14,    15,    83,    16,    84,    85,
+      35,    36,    37,     0,     0,    14,    15,    83,    16,    84,
+      85,    86,    87,    88,     0,    18,    19,    89,    20,     0,
+      21,    90,    91,     0,     0,     0,     0,     0,     0,    80,
+       0,     0,     0,     0,     0,     0,    92,    93,    22,    11,
+      12,     0,    82,    13,     0,   266,    23,    24,    25,    26,
+      27,    28,     0,     0,     0,    29,    94,    30,    31,    95,
+       0,    32,    33,     0,     0,    34,     0,     0,     0,    35,
+      36,    37,     0,     0,    14,    15,    83,    16,    84,    85,
+      86,    87,    88,     0,    18,    19,    89,    20,     0,    21,
+      90,    91,     0,     0,     0,     0,     0,     0,     0,     0,
+      80,     0,     0,     0,     0,    92,    93,    22,   290,     0,
+      11,    12,     0,    82,    13,    23,    24,    25,    26,    27,
+      28,     0,     0,     0,    29,    94,    30,    31,    95,     0,
+      32,    33,     0,     0,    34,     0,     0,     0,    35,    36,
+      37,     0,     0,     0,     0,    14,    15,    83,    16,    84,
+      85,    86,    87,    88,     0,    18,    19,    89,    20,     0,
+      21,    90,    91,     0,     0,     0,     0,     0,     0,    80,
+       0,     0,     0,     0,     0,     0,    92,    93,    22,    11,
+      12,     0,    82,    13,     0,   345,    23,    24,    25,    26,
+      27,    28,     0,     0,     0,    29,    94,    30,    31,    95,
+       0,    32,    33,     0,     0,    34,     0,     0,     0,    35,
+      36,    37,     0,     0,    14,    15,    83,    16,    84,    85,
       86,    87,    88,     0,    18,    19,    89,    20,     0,    21,
       90,    91,     0,     0,     0,     0,     0,     0,    80,     0,
        0,     0,     0,     0,     0,    92,    93,    22,    11,    12,
-       0,    82,    13,     0,   250,    23,    24,    25,    26,    27,
+       0,    82,    13,     0,   358,    23,    24,    25,    26,    27,
       28,     0,     0,     0,    29,    94,    30,    31,    95,     0,
       32,    33,     0,     0,    34,     0,     0,     0,    35,    36,
-      37,     0,    14,    15,    83,    16,    84,    85,    86,    87,
+      37,     0,     0,    14,    15,    83,    16,    84,    85,    86,
+      87,    88,     0,    18,    19,    89,    20,     0,    21,    90,
+      91,     0,     0,     0,     0,     0,     0,    80,     0,     0,
+       0,     0,     0,     0,    92,    93,    22,    11,    12,     0,
+      82,    13,     0,     0,    23,    24,    25,    26,    27,    28,
+       0,     0,     0,    29,    94,    30,    31,    95,     0,    32,
+      33,     0,     0,    34,     0,     0,     0,    35,    36,    37,
+       0,     0,    14,    15,    83,    16,    84,    85,    86,    87,
       88,     0,    18,    19,    89,    20,     0,    21,    90,    91,
-       0,     0,     0,     0,     0,     0,    80,     0,     0,     0,
-       0,     0,     0,    92,    93,    22,    11,    12,     0,    82,
-      13,     0,   266,    23,    24,    25,    26,    27,    28,     0,
+       0,     0,     0,     0,     0,    80,     0,     0,     0,     0,
+       0,     0,     0,    92,    93,    22,    12,     0,   -31,    13,
+       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
        0,     0,    29,    94,    30,    31,    95,     0,    32,    33,
        0,     0,    34,     0,     0,     0,    35,    36,    37,     0,
-      14,    15,    83,    16,    84,    85,    86,    87,    88,     0,
-      18,    19,    89,    20,     0,    21,    90,    91,     0,     0,
-       0,     0,     0,     0,     0,     0,    80,     0,     0,     0,
-       0,    92,    93,    22,   290,     0,    11,    12,     0,    82,
-      13,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,    94,    30,    31,    95,     0,    32,    33,     0,     0,
-      34,     0,     0,     0,    35,    36,    37,     0,     0,     0,
-      14,    15,    83,    16,    84,    85,    86,    87,    88,     0,
-      18,    19,    89,    20,     0,    21,    90,    91,     0,     0,
-       0,     0,     0,     0,    80,     0,     0,     0,     0,     0,
-       0,    92,    93,    22,    11,    12,     0,    82,    13,     0,
-     345,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,    94,    30,    31,    95,     0,    32,    33,     0,     0,
+      14,    15,     0,    16,     0,    85,     0,     0,     0,     0,
+      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,     0,     0,     0,     0,
+       0,    92,    93,    22,    12,     0,     0,    13,   -31,     0,
+       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
+      29,     0,    30,    31,     0,     0,    32,    33,     0,     0,
       34,     0,     0,     0,    35,    36,    37,     0,    14,    15,
-      83,    16,    84,    85,    86,    87,    88,     0,    18,    19,
-      89,    20,     0,    21,    90,    91,     0,     0,     0,     0,
-       0,     0,    80,     0,     0,     0,     0,     0,     0,    92,
-      93,    22,    11,    12,     0,    82,    13,     0,   358,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,    29,    94,
-      30,    31,    95,     0,    32,    33,     0,     0,    34,     0,
-       0,     0,    35,    36,    37,     0,    14,    15,    83,    16,
-      84,    85,    86,    87,    88,     0,    18,    19,    89,    20,
-       0,    21,    90,    91,     0,     0,     0,     0,     0,     0,
-      80,     0,     0,     0,     0,     0,     0,    92,    93,    22,
-      11,    12,     0,    82,    13,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,    29,    94,    30,    31,
-      95,     0,    32,    33,     0,     0,    34,     0,     0,     0,
-      35,    36,    37,     0,    14,    15,    83,    16,    84,    85,
-      86,    87,    88,     0,    18,    19,    89,    20,    80,    21,
-      90,    91,     0,     0,     0,     0,     0,     0,     0,    12,
-       0,   -31,    13,     0,     0,    92,    93,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,     0,     0,    29,    94,    30,    31,    95,     0,
-      32,    33,    14,    15,    34,    16,     0,    85,    35,    36,
-      37,     0,    18,    19,     0,    20,    80,    21,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    12,     0,     0,
-      13,   -31,     0,    92,    93,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-       0,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-      14,    15,    34,    16,     0,    85,    35,    36,    37,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       9,    10,     0,     0,    11,    12,     0,     0,    13,     0,
-       0,    92,    93,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,    14,    15,
-      34,    16,     0,     0,    35,    36,    37,    17,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,    29,     0,
-      30,    31,     0,     0,    32,    33,   158,     0,    34,    58,
-     109,   161,    35,    36,    37,     0,     0,     0,     0,     0,
-     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,   112,     0,   113,   114,   115,   116,   117,
-     118,   119,    14,    15,     0,    16,     0,     0,     0,     0,
-       0,     0,    18,    19,     0,    20,     0,    21,     0,     0,
-       0,     0,     0,     0,   158,     0,     0,    12,     0,   161,
-      13,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-     120,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-      14,    15,    59,    16,     0,     0,    35,    36,    37,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,   204,     0,     0,    12,     0,     0,    13,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,    14,    15,
-      34,    16,     0,     0,    35,    36,    37,     0,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
-     206,     0,     0,    12,     0,     0,    13,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
+       0,    16,     0,    85,     0,     0,     0,     0,    18,    19,
+       0,    20,     0,    21,     0,     0,     0,     9,    10,     0,
+       0,    11,    12,     0,     0,    13,     0,     0,     0,    92,
+      93,    22,     0,     0,     0,     0,     0,     0,     0,    23,
       24,    25,    26,    27,    28,     0,     0,     0,    29,     0,
       30,    31,     0,     0,    32,    33,    14,    15,    34,    16,
-       0,     0,    35,    36,    37,     0,    18,    19,     0,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,   221,     0,
-       0,    12,     0,     0,    13,     0,     0,     0,     0,    22,
+       0,     0,    35,    36,    37,    17,    18,    19,     0,    20,
+       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
        0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
       26,    27,    28,     0,     0,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,    14,    15,    34,    16,     0,     0,
-      35,    36,    37,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,   204,     0,     0,   294,
-       0,     0,    13,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,     0,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,    14,    15,    34,    16,     0,     0,    35,    36,
-      37,     0,    18,    19,     0,    20,     0,    21,     0,     0,
-       0,     0,     0,     0,   206,     0,     0,   294,     0,     0,
-      13,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-       0,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-      14,    15,    34,    16,     0,     0,    35,    36,    37,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,   221,     0,     0,   294,     0,     0,    13,     0,
-       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,    14,    15,
-      34,    16,     0,     0,    35,    36,    37,     0,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
+       0,     0,    32,    33,   158,     0,    34,    58,   109,   161,
+      35,    36,    37,     0,     0,     0,     0,     0,   110,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,    29,     0,
-      30,    31,     0,     0,    32,    33,     0,     0,    34,     0,
-       0,     0,    35,    36,    37,   138,     0,    58,   109,     0,
-       0,   139,     0,     0,     0,     0,     0,     0,   110,     0,
+       0,   111,   112,     0,   113,   114,   115,   116,   117,   118,
+     119,    14,    15,     0,    16,     0,     0,     0,     0,     0,
+       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
+       0,     0,   158,     0,     0,    12,     0,   161,    13,     0,
+       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
+       0,     0,    23,    24,    25,    26,    27,    28,     0,   120,
+       0,    29,     0,    30,    31,     0,     0,    32,    33,    14,
+      15,    59,    16,     0,     0,    35,    36,    37,     0,    18,
+      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
+     204,     0,     0,    12,     0,     0,    13,     0,     0,     0,
+       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
+       0,    30,    31,     0,     0,    32,    33,    14,    15,    34,
+      16,     0,     0,    35,    36,    37,     0,    18,    19,     0,
+      20,     0,    21,     0,     0,     0,     0,     0,   206,     0,
+       0,    12,     0,     0,    13,     0,     0,     0,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
+      25,    26,    27,    28,     0,     0,     0,    29,     0,    30,
+      31,     0,     0,    32,    33,    14,    15,    34,    16,     0,
+       0,    35,    36,    37,     0,    18,    19,     0,    20,     0,
+      21,     0,     0,     0,     0,     0,   221,     0,     0,    12,
+       0,     0,    13,     0,     0,     0,     0,     0,    22,     0,
+       0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
+      27,    28,     0,     0,     0,    29,     0,    30,    31,     0,
+       0,    32,    33,    14,    15,    34,    16,     0,     0,    35,
+      36,    37,     0,    18,    19,     0,    20,     0,    21,     0,
+       0,     0,     0,     0,   204,     0,     0,   294,     0,     0,
+      13,     0,     0,     0,     0,     0,    22,     0,     0,     0,
+       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
+       0,     0,     0,    29,     0,    30,    31,     0,     0,    32,
+      33,    14,    15,    34,    16,     0,     0,    35,    36,    37,
+       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
+       0,     0,   206,     0,     0,   294,     0,     0,    13,     0,
+       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
+       0,     0,    23,    24,    25,    26,    27,    28,     0,     0,
+       0,    29,     0,    30,    31,     0,     0,    32,    33,    14,
+      15,    34,    16,     0,     0,    35,    36,    37,     0,    18,
+      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
+     221,     0,     0,   294,     0,     0,    13,     0,     0,     0,
+       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
+       0,    30,    31,     0,     0,    32,    33,    14,    15,    34,
+      16,     0,     0,    35,    36,    37,     0,    18,    19,     0,
+      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
+      25,    26,    27,    28,     0,     0,     0,    29,     0,    30,
+      31,     0,     0,    32,    33,     0,     0,    34,     0,     0,
+       0,    35,    36,    37,   138,     0,    58,   109,     0,     0,
+     139,     0,     0,     0,     0,     0,     0,   110,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      111,   112,     0,   113,   114,   115,   116,   117,   118,   119,
       14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
@@ -1061,26 +1066,16 @@
       59,     0,     0,     0,    35,    36,    37,   138,     0,    58,
      109,     0,     0,   319,     0,     0,     0,     0,     0,     0,
      110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,   112,     0,   113,   114,   115,   116,   117,
-     118,   119,    14,    15,     0,    16,     0,     0,     0,     0,
-       0,     0,    18,    19,     0,    20,     0,    21,     0,     0,
+       0,     0,     0,   111,   112,     0,   113,   114,   115,   116,
+     117,   118,   119,    14,    15,     0,    16,     0,     0,     0,
+       0,     0,     0,    18,    19,     0,    20,     0,    21,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-     120,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-       0,     0,    59,     0,     0,     0,    35,    36,    37,   138,
-       0,    58,   109,     0,     0,   330,     0,     0,     0,     0,
-       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   111,   112,     0,   113,   114,   115,
-     116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,   120,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,     0,     0,    59,     0,     0,     0,    35,    36,
-      37,   138,     0,    58,   109,     0,     0,   332,     0,     0,
-       0,     0,     0,     0,   110,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
+       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
+       0,   120,     0,    29,     0,    30,    31,     0,     0,    32,
+      33,     0,     0,    59,     0,     0,     0,    35,    36,    37,
+     138,     0,    58,   109,     0,     0,   330,     0,     0,     0,
+       0,     0,     0,   110,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   111,   112,     0,   113,
      114,   115,   116,   117,   118,   119,    14,    15,     0,    16,
        0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
@@ -1088,8 +1083,46 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
        0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
       26,    27,    28,     0,   120,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,     0,   138,    59,    58,   109,     0,
-      35,    36,    37,     0,     0,     0,     0,     0,   110,     0,
+       0,     0,    32,    33,     0,     0,    59,     0,     0,     0,
+      35,    36,    37,   138,     0,    58,   109,     0,     0,   332,
+       0,     0,     0,     0,     0,     0,   110,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   111,
+     112,     0,   113,   114,   115,   116,   117,   118,   119,    14,
+      15,     0,    16,     0,     0,     0,     0,     0,     0,    18,
+      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,     0,   120,     0,    29,
+       0,    30,    31,     0,     0,    32,    33,     0,   138,    59,
+      58,   109,     0,    35,    36,    37,     0,     0,     0,     0,
+       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   111,   112,     0,   113,   114,   115,
+     116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
+       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
+       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
+      28,     0,   120,     0,    29,     0,    30,    31,     0,     0,
+      32,    33,    58,   109,    59,     0,   139,     0,    35,    36,
+      37,     0,     0,   110,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   111,   112,     0,   113,
+     114,   115,   116,   117,   118,   119,    14,    15,     0,    16,
+       0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
+       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
+       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
+      26,    27,    28,     0,   120,     0,    29,     0,    30,    31,
+       0,     0,    32,    33,    58,   109,    59,     0,     0,     0,
+      35,    36,    37,     0,     0,   110,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   111,   112,
+       0,   113,   114,   115,   116,   117,   118,   119,    14,    15,
+       0,    16,     0,     0,     0,     0,     0,     0,    18,    19,
+       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
+      24,    25,    26,    27,    28,     0,   120,   268,    29,     0,
+      30,    31,     0,     0,    32,    33,    58,   109,    59,     0,
+     275,     0,    35,    36,    37,     0,     0,   110,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      111,   112,     0,   113,   114,   115,   116,   117,   118,   119,
       14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
@@ -1098,35 +1131,17 @@
        0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
        0,    23,    24,    25,    26,    27,    28,     0,   120,     0,
       29,     0,    30,    31,     0,     0,    32,    33,    58,   109,
-      59,     0,   139,     0,    35,    36,    37,     0,     0,   110,
+      59,     0,   313,     0,    35,    36,    37,     0,     0,   110,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   111,   112,     0,   113,   114,   115,   116,   117,   118,
-     119,    14,    15,     0,    16,     0,     0,     0,     0,     0,
-       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
-       0,     0,    23,    24,    25,    26,    27,    28,     0,   120,
-       0,    29,     0,    30,    31,     0,     0,    32,    33,    58,
-     109,    59,     0,     0,     0,    35,    36,    37,     0,     0,
-     110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   111,   112,     0,   113,   114,   115,   116,   117,
      118,   119,    14,    15,     0,    16,     0,     0,     0,     0,
        0,     0,    18,    19,     0,    20,     0,    21,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
        0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-     120,   268,    29,     0,    30,    31,     0,     0,    32,    33,
-      58,   109,    59,     0,   275,     0,    35,    36,    37,     0,
+     120,     0,    29,     0,    30,    31,     0,     0,    32,    33,
+      58,   109,    59,     0,   315,     0,    35,    36,    37,     0,
        0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   111,   112,     0,   113,   114,   115,   116,
-     117,   118,   119,    14,    15,     0,    16,     0,     0,     0,
-       0,     0,     0,    18,    19,     0,    20,     0,    21,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
-       0,   120,     0,    29,     0,    30,    31,     0,     0,    32,
-      33,    58,   109,    59,     0,   313,     0,    35,    36,    37,
-       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,   111,   112,     0,   113,   114,   115,
      116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
        0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
@@ -1134,17 +1149,8 @@
        0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
        0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
       28,     0,   120,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,    58,   109,    59,     0,   315,     0,    35,    36,
+      32,    33,    58,   109,    59,     0,   349,     0,    35,    36,
       37,     0,     0,   110,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   111,   112,     0,   113,   114,
-     115,   116,   117,   118,   119,    14,    15,     0,    16,     0,
-       0,     0,     0,     0,     0,    18,    19,     0,    20,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    22,     0,
-       0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,     0,   120,     0,    29,     0,    30,    31,     0,
-       0,    32,    33,    58,   109,    59,     0,   349,     0,    35,
-      36,    37,     0,     0,   110,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   111,   112,     0,   113,
      114,   115,   116,   117,   118,   119,    14,    15,     0,    16,
        0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
@@ -1154,34 +1160,16 @@
       26,    27,    28,     0,   120,     0,    29,     0,    30,    31,
        0,     0,    32,    33,    58,   109,    59,     0,   351,     0,
       35,    36,    37,     0,     0,   110,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   111,   112,     0,
-     113,   114,   115,   116,   117,   118,   119,    14,    15,     0,
-      16,     0,     0,     0,     0,     0,     0,    18,    19,     0,
-      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   111,   112,
+       0,   113,   114,   115,   116,   117,   118,   119,    14,    15,
+       0,    16,     0,     0,     0,     0,     0,     0,    18,    19,
+       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
-      25,    26,    27,    28,     0,   120,     0,    29,     0,    30,
-      31,     0,     0,    32,    33,     0,     0,    59,    58,   109,
-     353,    35,    36,    37,     0,     0,     0,     0,     0,   110,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   111,   112,     0,   113,   114,   115,   116,   117,   118,
-     119,    14,    15,     0,    16,     0,     0,     0,     0,     0,
-       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
-       0,     0,    23,    24,    25,    26,    27,    28,     0,   120,
-       0,    29,     0,    30,    31,     0,     0,    32,    33,    58,
-     109,    59,     0,   362,     0,    35,    36,    37,     0,     0,
+       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
+      24,    25,    26,    27,    28,     0,   120,     0,    29,     0,
+      30,    31,     0,     0,    32,    33,     0,     0,    59,    58,
+     109,   353,    35,    36,    37,     0,     0,     0,     0,     0,
      110,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,   112,     0,   113,   114,   115,   116,   117,
-     118,   119,    14,    15,     0,    16,     0,     0,     0,     0,
-       0,     0,    18,    19,     0,    20,     0,    21,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
-     120,     0,    29,     0,    30,    31,     0,     0,    32,    33,
-      58,   109,    59,     0,     0,     0,    35,    36,    37,     0,
-       0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   111,   112,     0,   113,   114,   115,   116,
      117,   118,   119,    14,    15,     0,    16,     0,     0,     0,
        0,     0,     0,    18,    19,     0,    20,     0,    21,     0,
@@ -1189,157 +1177,166 @@
        0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
        0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
        0,   120,     0,    29,     0,    30,    31,     0,     0,    32,
-      33,    58,   109,    59,     0,     0,     0,    35,    36,    37,
+      33,    58,   109,    59,     0,   362,     0,    35,    36,    37,
        0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   111,     0,     0,   113,   114,   115,
-     116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,    58,   109,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,   110,     0,    59,     0,     0,     0,    35,    36,
-      37,     0,     0,     0,     0,     0,     0,   113,   114,   115,
-     116,   117,   118,   119,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,    58,   -32,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,   -32,     0,    59,     0,     0,     0,    35,    36,
-      37,     0,     0,     0,     0,     0,     0,   -32,   -32,   -32,
-     -32,   -32,   -32,   -32,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
-       0,     0,    58,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,     0,   253,     0,     0,    30,    31,     0,     0,
-      32,    33,     0,     0,    59,   111,   112,     0,    35,    36,
-      37,     0,     0,     0,   254,    14,    15,     0,    16,     0,
+       0,     0,     0,     0,     0,   111,   112,     0,   113,   114,
+     115,   116,   117,   118,   119,    14,    15,     0,    16,     0,
        0,     0,     0,     0,     0,    18,    19,     0,    20,     0,
       21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    22,     0,
        0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,    58,   255,   328,    29,     0,    30,    31,     0,
-       0,    32,    33,   253,     0,    59,     0,     0,     0,    35,
-      36,    37,     0,     0,     0,   111,   112,     0,     0,     0,
-       0,     0,     0,     0,   254,    14,    15,     0,    16,     0,
-       0,     0,     0,     0,     0,    18,    19,     0,    20,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    22,     0,
-       0,    58,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,   253,   255,     0,    29,     0,    30,    31,     0,
-       0,    32,    33,     0,   111,    59,     0,     0,     0,    35,
-      36,    37,     0,   254,    14,    15,     0,    16,     0,     0,
-       0,     0,     0,     0,    18,    19,     0,    20,     0,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
-       0,     0,    13,   144,     0,     0,     0,    22,     0,     0,
+      27,    28,     0,   120,     0,    29,     0,    30,    31,     0,
+       0,    32,    33,    58,   109,    59,     0,     0,     0,    35,
+      36,    37,     0,     0,   110,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   111,   112,     0,
+     113,   114,   115,   116,   117,   118,   119,    14,    15,     0,
+      16,     0,     0,     0,     0,     0,     0,    18,    19,     0,
+      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
+      25,    26,    27,    28,     0,   120,     0,    29,     0,    30,
+      31,     0,     0,    32,    33,    58,   109,    59,     0,     0,
+       0,    35,    36,    37,     0,     0,   110,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   111,
+       0,     0,   113,   114,   115,   116,   117,   118,   119,    14,
+      15,     0,    16,     0,     0,     0,     0,     0,     0,    18,
+      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,    58,   109,     0,    29,
+       0,    30,    31,     0,     0,    32,    33,   110,     0,    59,
+       0,     0,     0,    35,    36,    37,     0,     0,     0,     0,
+       0,     0,     0,   113,   114,   115,   116,   117,   118,   119,
+      14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
+      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
+       0,    23,    24,    25,    26,    27,    28,    58,   -32,     0,
+      29,     0,    30,    31,     0,     0,    32,    33,   -32,     0,
+      59,     0,     0,     0,    35,    36,    37,     0,     0,     0,
+       0,     0,     0,     0,   -32,   -32,   -32,   -32,   -32,   -32,
+     -32,    14,    15,     0,    16,     0,     0,     0,     0,     0,
+       0,    18,    19,     0,    20,    58,    21,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   253,     0,     0,     0,
+       0,     0,     0,     0,    22,     0,     0,     0,     0,   111,
+     112,     0,    23,    24,    25,    26,    27,    28,   254,    14,
+      15,     0,    16,    30,    31,     0,     0,    32,    33,    18,
+      19,    59,    20,     0,    21,    35,    36,    37,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,    58,   255,   328,    29,
+       0,    30,    31,     0,     0,    32,    33,   253,     0,    59,
+       0,     0,     0,    35,    36,    37,     0,     0,     0,     0,
+     111,   112,     0,     0,     0,     0,     0,     0,     0,   254,
+      14,    15,     0,    16,     0,     0,     0,     0,     0,     0,
+      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    22,     0,     0,     0,     0,    58,     0,
+       0,    23,    24,    25,    26,    27,    28,     0,   255,   253,
+      29,     0,    30,    31,     0,     0,    32,    33,     0,     0,
+      59,     0,   111,     0,    35,    36,    37,     0,     0,     0,
+       0,   254,    14,    15,     0,    16,     0,     0,     0,     0,
+       0,     0,    18,    19,     0,    20,    12,    21,     0,    13,
+     144,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
+       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
+      14,    15,    29,    16,    30,    31,     0,     0,    32,    33,
+      18,    19,    59,    20,     0,    21,    35,    36,    37,     0,
+       0,     0,     0,     0,    12,     0,     0,    13,   152,     0,
+       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
+       0,    23,    24,    25,    26,    27,    28,     0,     0,     0,
+      29,     0,    30,    31,     0,     0,    32,    33,    14,    15,
+      34,    16,     0,     0,    35,    36,    37,     0,    18,    19,
+       0,    20,    58,    21,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   253,     0,     0,     0,     0,     0,     0,
+       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
+      24,    25,    26,    27,    28,   254,    14,    15,    29,    16,
+      30,    31,     0,     0,    32,    33,    18,    19,    34,    20,
+       0,    21,    35,    36,    37,     0,     0,     0,     0,     0,
+      12,     0,     0,    13,     0,     0,     0,     0,     0,    22,
+       0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
+      26,    27,    28,     0,     0,     0,    29,     0,    30,    31,
+       0,     0,    32,    33,    14,    15,    59,    16,     0,     0,
+      35,    36,    37,     0,    18,    19,     0,    20,    58,    21,
+       0,    13,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
        0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
-      28,     0,     0,     0,    29,     0,    30,    31,     0,     0,
-      32,    33,    14,    15,    59,    16,     0,     0,    35,    36,
-      37,     0,    18,    19,     0,    20,     0,    21,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    12,     0,     0,
-      13,   152,     0,     0,     0,    22,     0,     0,     0,     0,
+      28,     0,    14,    15,    29,    16,    30,    31,     0,     0,
+      32,    33,    18,    19,    34,    20,     0,    21,    35,    36,
+      37,     0,     0,     0,     0,     0,   179,     0,     0,    13,
+       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
        0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
        0,     0,    29,     0,    30,    31,     0,     0,    32,    33,
       14,    15,    34,    16,     0,     0,    35,    36,    37,     0,
-      18,    19,     0,    20,     0,    21,     0,     0,     0,     0,
+      18,    19,     0,    20,    58,    21,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    22,     0,     0,    58,     0,     0,     0,
-       0,    23,    24,    25,    26,    27,    28,   253,     0,     0,
-      29,     0,    30,    31,     0,     0,    32,    33,     0,     0,
-      34,     0,     0,     0,    35,    36,    37,     0,   254,    14,
-      15,     0,    16,     0,     0,     0,     0,     0,     0,    18,
-      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,     0,     0,    13,     0,     0,
-       0,     0,    22,     0,     0,     0,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,     0,     0,     0,    29,
-       0,    30,    31,     0,     0,    32,    33,    14,    15,    59,
-      16,     0,     0,    35,    36,    37,     0,    18,    19,     0,
-      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    58,     0,     0,    13,     0,     0,     0,     0,
-      22,     0,     0,     0,     0,     0,     0,     0,    23,    24,
-      25,    26,    27,    28,     0,     0,     0,    29,     0,    30,
-      31,     0,     0,    32,    33,    14,    15,    34,    16,     0,
-       0,    35,    36,    37,     0,    18,    19,     0,    20,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     179,     0,     0,    13,     0,     0,     0,     0,    22,     0,
-       0,     0,     0,     0,     0,     0,    23,    24,    25,    26,
-      27,    28,     0,     0,     0,    29,     0,    30,    31,     0,
-       0,    32,    33,    14,    15,    34,    16,     0,     0,    35,
-      36,    37,     0,    18,    19,     0,    20,     0,    21,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    58,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,     0,     0,
-       0,     0,     0,     0,    23,    24,    25,    26,    27,    28,
-       0,     0,     0,    29,     0,    30,    31,     0,     0,    32,
-      33,    14,    15,    34,    16,     0,     0,    35,    36,    37,
-       0,    18,    19,     0,    20,     0,    21,     0,     0,     0,
-       0,     0,     0,     0,     0,   210,   294,     0,     0,    13,
-       0,     0,     0,     0,    22,     0,     0,     0,     0,     0,
-       0,     0,    23,    24,    25,    26,    27,    28,     0,     0,
-       0,    29,     0,    30,    31,     0,     0,    32,    33,    14,
-      15,    59,    16,     0,     0,    35,    36,    37,     0,    18,
-      19,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    22,     0,     0,    58,     0,     0,     0,     0,
-      23,    24,    25,    26,    27,    28,   -32,     0,     0,    29,
-       0,    30,    31,     0,     0,    32,    33,     0,     0,    34,
-       0,     0,     0,    35,    36,    37,     0,   -32,    14,    15,
-       0,    16,     0,     0,     0,     0,     0,     0,    18,    19,
-       0,    20,     0,    21,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    58,     0,     0,     0,     0,     0,     0,
-       0,    22,     0,     0,     0,     0,     0,     0,     0,    23,
-      24,    25,    26,    27,    28,     0,     0,     0,     0,     0,
-      30,    31,     0,     0,    32,    33,    14,    15,    59,    16,
-       0,     0,    35,    36,    37,     0,    18,    19,     0,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    22,
+       0,     0,     0,    22,     0,     0,     0,     0,     0,     0,
+       0,    23,    24,    25,    26,    27,    28,     0,    14,    15,
+      29,    16,    30,    31,     0,     0,    32,    33,    18,    19,
+      34,    20,     0,    21,    35,    36,    37,     0,     0,     0,
+       0,     0,   210,     0,     0,     0,     0,     0,     0,     0,
+       0,    22,   294,     0,     0,    13,     0,     0,     0,    23,
+      24,    25,    26,    27,    28,     0,     0,     0,    29,     0,
+      30,    31,     0,     0,    32,    33,     0,     0,    59,     0,
+       0,     0,    35,    36,    37,     0,    14,    15,     0,    16,
+       0,     0,     0,     0,     0,     0,    18,    19,     0,    20,
+      58,    21,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   -32,     0,     0,     0,     0,     0,     0,     0,    22,
        0,     0,     0,     0,     0,     0,     0,    23,    24,    25,
-      26,    27,    28,     0,     0,     0,    29,     0,    30,    31,
-       0,     0,    32,    33,     0,     0,    59,     0,     0,     0,
-      35,    36,    37
+      26,    27,    28,   -32,    14,    15,    29,    16,    30,    31,
+       0,     0,    32,    33,    18,    19,    34,    20,    58,    21,
+      35,    36,    37,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    22,     0,     0,
+       0,     0,     0,     0,     0,    23,    24,    25,    26,    27,
+      28,     0,    14,    15,     0,    16,    30,    31,     0,     0,
+      32,    33,    18,    19,    59,    20,     0,    21,    35,    36,
+      37,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    22,     0,     0,     0,     0,
+       0,     0,     0,    23,    24,    25,    26,    27,    28,     0,
+       0,     0,    29,     0,    30,    31,     0,     0,    32,    33,
+       0,     0,    59,     0,     0,     0,    35,    36,    37
 };
 
 static const yytype_int16 yycheck[] =
 {
-      16,     5,    34,   168,   179,     9,    10,     0,   110,    82,
-      15,    42,    15,    29,    45,   338,    32,    33,    34,    35,
-      36,    37,   124,    11,    67,    68,    42,    52,    53,   244,
-       9,   246,    45,   106,    91,    39,    10,   360,    54,   106,
-      18,     9,    16,    59,    84,     9,    69,    87,    18,    69,
-      90,    91,    13,    69,    94,    86,    87,    88,    92,    54,
-      55,   253,   102,   255,   256,   257,    44,   259,    12,   101,
-      12,   263,    10,    86,    99,    88,    37,    45,    16,    40,
-     111,    45,   107,    12,   100,   101,   109,   110,   161,   109,
-     110,    12,   135,    12,   161,    12,   101,   102,   103,   104,
-     103,   104,    45,   108,   108,   108,    12,    86,    10,   324,
-     126,   127,   128,   129,   130,   131,    10,    19,    86,   294,
-      88,    10,    86,    87,    88,    19,   166,    16,   230,   231,
-     146,   147,   172,   149,   150,    86,   328,   352,    89,   155,
-     156,   157,    10,    86,    87,    88,    10,   111,    16,   364,
-     166,   253,    16,    10,   149,   150,   172,    10,    12,    16,
-      10,   156,   157,    16,   180,     9,    16,     9,   111,     9,
-      14,     9,    14,   338,    14,    12,    14,   193,   194,   180,
+      16,     5,    34,   168,   179,     9,    10,    18,   110,    82,
+       0,     9,    15,    29,    11,     9,    32,    33,    34,    35,
+      36,    37,   124,   338,    67,    68,    42,    52,    53,   244,
+      92,   246,    46,   106,    45,    39,    70,    10,    54,   106,
+      70,    12,     9,    59,    84,   360,    19,    87,    46,    10,
+      90,    91,    12,    69,    94,    16,    12,    10,    15,    54,
+      55,   253,   102,   255,   256,   257,    19,   259,    12,   101,
+      13,   263,    10,    87,    99,    89,   110,   111,    16,    46,
+     110,   111,   107,    12,   100,   101,    10,    11,   161,    87,
+      10,    89,   135,    87,   161,    38,    16,    10,    41,   102,
+     103,   104,   105,    16,   108,    87,   109,    12,    90,   324,
+     126,   127,   128,   129,   130,   131,    12,    10,    12,   294,
+      87,    88,    89,    16,    43,    12,   166,    46,   230,   231,
+     146,   147,   172,   149,   150,    18,   328,   352,    10,   155,
+     156,   157,   110,   111,    16,   112,    93,   104,   105,   364,
+     166,   253,   109,    10,   149,   150,   172,    10,    43,    16,
+       9,   156,   157,    16,   180,    14,     9,     9,    87,    88,
+      89,    14,    14,   338,   109,     9,    12,   193,   194,   180,
      196,   197,   198,   199,   200,   201,   181,   203,    85,   205,
-      42,   207,   208,   108,   210,   360,   239,    10,    11,   109,
-     110,   217,     9,    12,    12,     9,   222,    12,   224,    95,
-      44,    86,   285,   208,   209,    15,   318,     9,   285,    18,
-      79,   253,   119,   255,   256,   257,   180,   259,   244,    10,
-     246,   263,    14,     9,   229,     9,    16,   253,    16,   255,
-     256,   257,    44,   259,   260,   261,   262,   263,    99,   322,
-      16,    12,    16,    16,    16,   322,    16,   252,   274,   190,
-     108,   265,   278,    -1,   280,    -1,    41,   283,    32,    33,
+      12,   207,   208,   112,   210,   360,   239,     9,    12,     9,
+      45,   217,    14,    87,    96,     9,   222,    15,   224,    18,
+      80,    10,   285,   208,   209,     9,   318,    14,   285,     9,
+      16,   253,   119,   255,   256,   257,   180,   259,   244,    16,
+     246,   263,   100,    16,   229,    12,    16,   253,    45,   255,
+     256,   257,    16,   259,   260,   261,   262,   263,    16,   322,
+      41,   190,    16,   108,    -1,   322,    -1,   252,   274,    -1,
+      -1,   265,   278,    -1,   280,    -1,    -1,   283,    32,    33,
       34,   168,    -1,    37,    -1,    -1,    -1,    -1,    42,   295,
      353,   306,   298,   299,   300,   301,   353,   282,   283,   305,
       54,   307,   308,   309,   295,    59,   328,   298,   299,   300,
-     301,    -1,    -1,    -1,   305,    69,    -1,    -1,   312,   334,
+     301,    -1,    -1,    -1,   305,    69,    -1,    46,   312,   334,
       -1,    -1,   328,   308,   309,   331,    -1,   333,    -1,   335,
       -1,   337,   362,   339,    -1,    -1,   223,    -1,   344,    -1,
       -1,    -1,   327,    -1,    -1,    -1,   100,   101,   235,   355,
-      -1,   295,    -1,   344,   298,   299,   300,   301,    -1,    -1,
-      -1,   305,    -1,    -1,    -1,    -1,    -1,   254,    -1,    -1,
+      -1,   295,    -1,   344,   298,   299,   300,   301,    87,    88,
+      89,   305,    -1,    -1,    -1,    -1,    -1,   254,    -1,    -1,
       -1,    -1,   126,   127,   128,   129,   130,   131,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   112,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   146,   147,    -1,   149,   150,    -1,    -1,   286,
      344,   155,   156,   157,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   166,    -1,    -1,    -1,    -1,    -1,   172,    -1,
@@ -1365,479 +1362,471 @@
      118,    -1,   120,   121,   122,    -1,   124,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   132,    -1,    -1,   135,    -1,    -1,
       -1,    -1,   140,    -1,   142,    -1,    -1,    -1,    -1,    -1,
-     249,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   169,    -1,    -1,    -1,    -1,   174,    -1,    -1,    -1,
+     249,    -1,    -1,    -1,    -1,     0,     1,    -1,    -1,    -1,
+      -1,    -1,     7,     8,     9,    -1,    11,    12,    -1,    14,
+      15,   169,    -1,    -1,    -1,    -1,   174,    -1,    -1,    -1,
       -1,   179,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,     7,
-       8,     9,    -1,    11,    12,    -1,    14,    15,    -1,    -1,
+      -1,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+      55,    56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,
-     329,    -1,   230,   231,    -1,    -1,    -1,    -1,   236,    -1,
-      -1,   239,    -1,    -1,    -1,    -1,    -1,    45,    46,   348,
-      48,    -1,    -1,    -1,    -1,   354,    54,    55,    56,    -1,
-      58,    -1,    60,    -1,   363,    -1,    -1,    -1,    -1,   368,
+     329,    -1,   230,   231,    79,    -1,    -1,    -1,   236,    -1,
+      -1,   239,    87,    88,    89,    90,    91,    92,    -1,   348,
+      -1,    96,    -1,    98,    99,   354,    -1,   102,   103,    -1,
+      -1,   106,    -1,    -1,   363,   110,   111,   112,    -1,   368,
      268,   269,   270,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      88,    89,    90,    91,    -1,    -1,   294,    95,    -1,    97,
-      98,    -1,    -1,   101,   102,    -1,    -1,   105,    -1,    -1,
-      -1,   109,   110,   111,    -1,    -1,     1,    -1,    -1,    -1,
-     318,    -1,   320,    -1,     9,   323,    11,    12,    -1,    14,
-      15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   341,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    -1,    60,    61,    62,    -1,    -1,
       -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,
-      -1,    76,    77,    78,    11,    12,    -1,    14,    15,    -1,
-      17,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      95,    96,    97,    98,    99,    -1,   101,   102,    -1,    -1,
-     105,    -1,    -1,    -1,   109,   110,   111,    -1,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    -1,    55,    56,
-      57,    58,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
-      -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    78,    11,    12,    -1,    14,    15,    -1,    17,    86,
-      87,    88,    89,    90,    91,    -1,    -1,    -1,    95,    96,
-      97,    98,    99,    -1,   101,   102,    -1,    -1,   105,    -1,
-      -1,    -1,   109,   110,   111,    -1,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
-      11,    12,    -1,    14,    15,    -1,    17,    86,    87,    88,
-      89,    90,    91,    -1,    -1,    -1,    95,    96,    97,    98,
-      99,    -1,   101,   102,    -1,    -1,   105,    -1,    -1,    -1,
-     109,   110,   111,    -1,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    55,    56,    57,    58,    -1,    60,
-      61,    62,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    11,    12,
-      -1,    14,    15,    -1,    17,    86,    87,    88,    89,    90,
-      91,    -1,    -1,    -1,    95,    96,    97,    98,    99,    -1,
-     101,   102,    -1,    -1,   105,    -1,    -1,    -1,   109,   110,
-     111,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    -1,    55,    56,    57,    58,    -1,    60,    61,    62,
-      -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77,    78,    11,    12,    -1,    14,
-      15,    -1,    17,    86,    87,    88,    89,    90,    91,    -1,
-      -1,    -1,    95,    96,    97,    98,    99,    -1,   101,   102,
-      -1,    -1,   105,    -1,    -1,    -1,   109,   110,   111,    -1,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    -1,    60,    61,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,
-      -1,    76,    77,    78,     9,    -1,    11,    12,    -1,    14,
-      15,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      95,    96,    97,    98,    99,    -1,   101,   102,    -1,    -1,
-     105,    -1,    -1,    -1,   109,   110,   111,    -1,    -1,    -1,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
-      55,    56,    57,    58,    -1,    60,    61,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,
-      -1,    76,    77,    78,    11,    12,    -1,    14,    15,    -1,
-      17,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      95,    96,    97,    98,    99,    -1,   101,   102,    -1,    -1,
-     105,    -1,    -1,    -1,   109,   110,   111,    -1,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    -1,    55,    56,
-      57,    58,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
-      -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    78,    11,    12,    -1,    14,    15,    -1,    17,    86,
-      87,    88,    89,    90,    91,    -1,    -1,    -1,    95,    96,
-      97,    98,    99,    -1,   101,   102,    -1,    -1,   105,    -1,
-      -1,    -1,   109,   110,   111,    -1,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    -1,    55,    56,    57,    58,
-      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
-      11,    12,    -1,    14,    15,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    -1,    -1,    -1,    95,    96,    97,    98,
-      99,    -1,   101,   102,    -1,    -1,   105,    -1,    -1,    -1,
-     109,   110,   111,    -1,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    -1,    55,    56,    57,    58,     1,    60,
-      61,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,
-      -1,    14,    15,    -1,    -1,    76,    77,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    -1,    -1,    -1,    95,    96,    97,    98,    99,    -1,
-     101,   102,    45,    46,   105,    48,    -1,    50,   109,   110,
-     111,    -1,    55,    56,    -1,    58,     1,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,    -1,    -1,
-      15,    16,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      -1,    -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      45,    46,   105,    48,    -1,    50,   109,   110,   111,    -1,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
-       7,     8,    -1,    -1,    11,    12,    -1,    -1,    15,    -1,
-      -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      95,    -1,    97,    98,    -1,    -1,   101,   102,    45,    46,
-     105,    48,    -1,    -1,   109,   110,   111,    54,    55,    56,
-      -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     9,    -1,    11,    12,   294,    14,    15,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    88,    89,    90,    91,    -1,    -1,    -1,    95,    -1,
-      97,    98,    -1,    -1,   101,   102,     9,    -1,   105,    12,
-      13,    14,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    35,    36,    -1,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,     9,    -1,    -1,    12,    -1,    14,
-      15,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      93,    -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      45,    46,   105,    48,    -1,    -1,   109,   110,   111,    -1,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,     9,    -1,    -1,    12,    -1,    -1,    15,    -1,
-      -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      95,    -1,    97,    98,    -1,    -1,   101,   102,    45,    46,
-     105,    48,    -1,    -1,   109,   110,   111,    -1,    55,    56,
-      -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     318,    -1,   320,    -1,    -1,   323,    -1,    -1,    -1,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    -1,    56,
+      57,    58,    59,   341,    61,    62,    63,    -1,    -1,    -1,
+      -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    79,    11,    12,    -1,    14,    15,    -1,    17,
+      87,    88,    89,    90,    91,    92,    -1,    -1,    -1,    96,
+      97,    98,    99,   100,    -1,   102,   103,    -1,    -1,   106,
+      -1,    -1,    -1,   110,   111,   112,    -1,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
+      58,    59,    -1,    61,    62,    63,    -1,    -1,    -1,    -1,
+      -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    77,
+      78,    79,    11,    12,    -1,    14,    15,    -1,    17,    87,
+      88,    89,    90,    91,    92,    -1,    -1,    -1,    96,    97,
+      98,    99,   100,    -1,   102,   103,    -1,    -1,   106,    -1,
+      -1,    -1,   110,   111,   112,    -1,    -1,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
+      59,    -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,
+      -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,
+      79,    11,    12,    -1,    14,    15,    -1,    17,    87,    88,
+      89,    90,    91,    92,    -1,    -1,    -1,    96,    97,    98,
+      99,   100,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,
+      -1,   110,   111,   112,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    -1,    56,    57,    58,    59,
+      -1,    61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+       1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,
+      11,    12,    -1,    14,    15,    -1,    17,    87,    88,    89,
+      90,    91,    92,    -1,    -1,    -1,    96,    97,    98,    99,
+     100,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,
+     110,   111,   112,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    -1,    56,    57,    58,    59,    -1,
+      61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,     1,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    11,
+      12,    -1,    14,    15,    -1,    17,    87,    88,    89,    90,
+      91,    92,    -1,    -1,    -1,    96,    97,    98,    99,   100,
+      -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,
+     111,   112,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    -1,    56,    57,    58,    59,    -1,    61,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       1,    -1,    -1,    -1,    -1,    77,    78,    79,     9,    -1,
+      11,    12,    -1,    14,    15,    87,    88,    89,    90,    91,
+      92,    -1,    -1,    -1,    96,    97,    98,    99,   100,    -1,
+     102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,
+     112,    -1,    -1,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    -1,    56,    57,    58,    59,    -1,
+      61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,     1,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    79,    11,
+      12,    -1,    14,    15,    -1,    17,    87,    88,    89,    90,
+      91,    92,    -1,    -1,    -1,    96,    97,    98,    99,   100,
+      -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,
+     111,   112,    -1,    -1,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    -1,    56,    57,    58,    59,    -1,    61,
+      62,    63,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
+      -1,    -1,    -1,    -1,    -1,    77,    78,    79,    11,    12,
+      -1,    14,    15,    -1,    17,    87,    88,    89,    90,    91,
+      92,    -1,    -1,    -1,    96,    97,    98,    99,   100,    -1,
+     102,   103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,
+     112,    -1,    -1,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    -1,    56,    57,    58,    59,    -1,    61,    62,
+      63,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    78,    79,    11,    12,    -1,
+      14,    15,    -1,    -1,    87,    88,    89,    90,    91,    92,
+      -1,    -1,    -1,    96,    97,    98,    99,   100,    -1,   102,
+     103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    -1,    56,    57,    58,    59,    -1,    61,    62,    63,
+      -1,    -1,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    77,    78,    79,    12,    -1,    14,    15,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
+      -1,    -1,    96,    97,    98,    99,   100,    -1,   102,   103,
+      -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,    -1,
+      46,    47,    -1,    49,    -1,    51,    -1,    -1,    -1,    -1,
+      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    79,    12,    -1,    -1,    15,    16,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
+      96,    -1,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
+     106,    -1,    -1,    -1,   110,   111,   112,    -1,    46,    47,
+      -1,    49,    -1,    51,    -1,    -1,    -1,    -1,    56,    57,
+      -1,    59,    -1,    61,    -1,    -1,    -1,     7,     8,    -1,
+      -1,    11,    12,    -1,    -1,    15,    -1,    -1,    -1,    77,
+      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,
+      98,    99,    -1,    -1,   102,   103,    46,    47,   106,    49,
+      -1,    -1,   110,   111,   112,    55,    56,    57,    -1,    59,
+      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,    99,
+      -1,    -1,   102,   103,     9,    -1,   106,    12,    13,    14,
+     110,   111,   112,    -1,    -1,    -1,    -1,    -1,    23,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    36,    37,    -1,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+      -1,    56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,
+      -1,    -1,     9,    -1,    -1,    12,    -1,    14,    15,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    89,    90,    91,    92,    -1,    94,
+      -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,    46,
+      47,   106,    49,    -1,    -1,   110,   111,   112,    -1,    56,
+      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
        9,    -1,    -1,    12,    -1,    -1,    15,    -1,    -1,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    88,    89,    90,    91,    -1,    -1,    -1,    95,    -1,
-      97,    98,    -1,    -1,   101,   102,    45,    46,   105,    48,
-      -1,    -1,   109,   110,   111,    -1,    55,    56,    -1,    58,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,     9,    -1,
-      -1,    12,    -1,    -1,    15,    -1,    -1,    -1,    -1,    78,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    -1,    -1,    -1,    95,    -1,    97,    98,
-      -1,    -1,   101,   102,    45,    46,   105,    48,    -1,    -1,
-     109,   110,   111,    -1,    55,    56,    -1,    58,    -1,    60,
-      -1,    -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,    12,
-      -1,    -1,    15,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,
-     101,   102,    45,    46,   105,    48,    -1,    -1,   109,   110,
-     111,    -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    -1,    -1,    -1,    96,
+      -1,    98,    99,    -1,    -1,   102,   103,    46,    47,   106,
+      49,    -1,    -1,   110,   111,   112,    -1,    56,    57,    -1,
+      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,     9,    -1,
+      -1,    12,    -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,
+      99,    -1,    -1,   102,   103,    46,    47,   106,    49,    -1,
+      -1,   110,   111,   112,    -1,    56,    57,    -1,    59,    -1,
+      61,    -1,    -1,    -1,    -1,    -1,     9,    -1,    -1,    12,
+      -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,    79,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    92,    -1,    -1,    -1,    96,    -1,    98,    99,    -1,
+      -1,   102,   103,    46,    47,   106,    49,    -1,    -1,   110,
+     111,   112,    -1,    56,    57,    -1,    59,    -1,    61,    -1,
       -1,    -1,    -1,    -1,     9,    -1,    -1,    12,    -1,    -1,
-      15,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      -1,    -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      45,    46,   105,    48,    -1,    -1,   109,   110,   111,    -1,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
+      15,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
+      -1,    -1,    -1,    96,    -1,    98,    99,    -1,    -1,   102,
+     103,    46,    47,   106,    49,    -1,    -1,   110,   111,   112,
+      -1,    56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,
       -1,    -1,     9,    -1,    -1,    12,    -1,    -1,    15,    -1,
-      -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    -1,    -1,    -1,
-      95,    -1,    97,    98,    -1,    -1,   101,   102,    45,    46,
-     105,    48,    -1,    -1,   109,   110,   111,    -1,    55,    56,
-      -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    89,    90,    91,    92,    -1,    -1,
+      -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,    46,
+      47,   106,    49,    -1,    -1,   110,   111,   112,    -1,    56,
+      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
+       9,    -1,    -1,    12,    -1,    -1,    15,    -1,    -1,    -1,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    -1,    -1,    -1,    96,
+      -1,    98,    99,    -1,    -1,   102,   103,    46,    47,   106,
+      49,    -1,    -1,   110,   111,   112,    -1,    56,    57,    -1,
+      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    88,    89,    90,    91,    -1,    -1,    -1,    95,    -1,
-      97,    98,    -1,    -1,   101,   102,    -1,    -1,   105,    -1,
-      -1,    -1,   109,   110,   111,    10,    -1,    12,    13,    -1,
-      -1,    16,    -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,
+      99,    -1,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,
+      -1,   110,   111,   112,    10,    -1,    12,    13,    -1,    -1,
+      16,    -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
+      36,    37,    -1,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    -1,    93,    -1,
-      95,    -1,    97,    98,    -1,    -1,   101,   102,    -1,    -1,
-     105,    -1,    -1,    -1,   109,   110,   111,    10,    -1,    12,
+      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    -1,
+      96,    -1,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
+     106,    -1,    -1,    -1,   110,   111,   112,    10,    -1,    12,
       13,    -1,    -1,    16,    -1,    -1,    -1,    -1,    -1,    -1,
       23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    35,    36,    -1,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
+      -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      93,    -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      -1,    -1,   105,    -1,    -1,    -1,   109,   110,   111,    10,
-      -1,    12,    13,    -1,    -1,    16,    -1,    -1,    -1,    -1,
-      -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    35,    36,    -1,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,
+      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
+      -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,   102,
+     103,    -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112,
+      10,    -1,    12,    13,    -1,    -1,    16,    -1,    -1,    -1,
+      -1,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
+      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    -1,    94,    -1,    96,    -1,    98,    99,
+      -1,    -1,   102,   103,    -1,    -1,   106,    -1,    -1,    -1,
+     110,   111,   112,    10,    -1,    12,    13,    -1,    -1,    16,
+      -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
+      37,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,
+      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    -1,    93,    -1,    95,    -1,    97,    98,    -1,    -1,
-     101,   102,    -1,    -1,   105,    -1,    -1,    -1,   109,   110,
-     111,    10,    -1,    12,    13,    -1,    -1,    16,    -1,    -1,
-      -1,    -1,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    35,    36,    -1,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    -1,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    58,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    -1,    93,    -1,    95,    -1,    97,    98,
-      -1,    -1,   101,   102,    -1,    10,   105,    12,    13,    -1,
-     109,   110,   111,    -1,    -1,    -1,    -1,    -1,    23,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      35,    36,    -1,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    -1,    93,    -1,
-      95,    -1,    97,    98,    -1,    -1,   101,   102,    12,    13,
-     105,    -1,    16,    -1,   109,   110,   111,    -1,    -1,    23,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    91,    -1,    93,
-      -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,    12,
-      13,   105,    -1,    -1,    -1,   109,   110,   111,    -1,    -1,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    35,    36,    -1,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      93,    94,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      12,    13,   105,    -1,    16,    -1,   109,   110,   111,    -1,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    -1,    94,    -1,    96,
+      -1,    98,    99,    -1,    -1,   102,   103,    -1,    10,   106,
+      12,    13,    -1,   110,   111,   112,    -1,    -1,    -1,    -1,
       -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    35,    36,    -1,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,    -1,
+      -1,    -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    91,
-      -1,    93,    -1,    95,    -1,    97,    98,    -1,    -1,   101,
-     102,    12,    13,   105,    -1,    16,    -1,   109,   110,   111,
-      -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    35,    36,    -1,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,
+     102,   103,    12,    13,   106,    -1,    16,    -1,   110,   111,
+     112,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
+      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    -1,    94,    -1,    96,    -1,    98,    99,
+      -1,    -1,   102,   103,    12,    13,   106,    -1,    -1,    -1,
+     110,   111,   112,    -1,    -1,    23,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,
+      -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
+      -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    -1,    93,    -1,    95,    -1,    97,    98,    -1,    -1,
-     101,   102,    12,    13,   105,    -1,    16,    -1,   109,   110,
-     111,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    35,    36,    -1,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,
-      60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    91,    -1,    93,    -1,    95,    -1,    97,    98,    -1,
-      -1,   101,   102,    12,    13,   105,    -1,    16,    -1,   109,
-     110,   111,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    35,    36,    -1,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    -1,    48,
-      -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    58,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    -1,    93,    -1,    95,    -1,    97,    98,
-      -1,    -1,   101,   102,    12,    13,   105,    -1,    16,    -1,
-     109,   110,   111,    -1,    -1,    23,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    35,    36,    -1,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    -1,
-      48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    56,    -1,
-      58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    -1,    94,    95,    96,    -1,
+      98,    99,    -1,    -1,   102,   103,    12,    13,   106,    -1,
+      16,    -1,   110,   111,   112,    -1,    -1,    23,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      88,    89,    90,    91,    -1,    93,    -1,    95,    -1,    97,
-      98,    -1,    -1,   101,   102,    -1,    -1,   105,    12,    13,
-      14,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,    23,
+      36,    37,    -1,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,
+      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    -1,
+      96,    -1,    98,    99,    -1,    -1,   102,   103,    12,    13,
+     106,    -1,    16,    -1,   110,   111,   112,    -1,    -1,    23,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    91,    -1,    93,
-      -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,    12,
-      13,   105,    -1,    16,    -1,   109,   110,   111,    -1,    -1,
-      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    35,    36,    -1,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
+      -1,    -1,    36,    37,    -1,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    -1,    59,    -1,    61,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      93,    -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      12,    13,   105,    -1,    -1,    -1,   109,   110,   111,    -1,
+      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
+      94,    -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,
+      12,    13,   106,    -1,    16,    -1,   110,   111,   112,    -1,
       -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    35,    36,    -1,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,    -1,
+      -1,    -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    -1,    49,    -1,    -1,
+      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    91,
-      -1,    93,    -1,    95,    -1,    97,    98,    -1,    -1,   101,
-     102,    12,    13,   105,    -1,    -1,    -1,   109,   110,   111,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,
+     102,   103,    12,    13,   106,    -1,    16,    -1,   110,   111,
+     112,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    -1,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
+      -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    -1,    94,    -1,    96,    -1,    98,    99,
+      -1,    -1,   102,   103,    12,    13,   106,    -1,    16,    -1,
+     110,   111,   112,    -1,    -1,    23,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,
+      -1,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
+      -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    -1,    94,    -1,    96,    -1,
+      98,    99,    -1,    -1,   102,   103,    -1,    -1,   106,    12,
+      13,    14,   110,   111,   112,    -1,    -1,    -1,    -1,    -1,
+      23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    36,    37,    -1,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    56,    57,    -1,    59,    -1,    61,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
+      -1,    94,    -1,    96,    -1,    98,    99,    -1,    -1,   102,
+     103,    12,    13,   106,    -1,    16,    -1,   110,   111,   112,
       -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    35,    -1,    -1,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,
+      -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    -1,    49,    -1,
+      -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,
+      61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    92,    -1,    94,    -1,    96,    -1,    98,    99,    -1,
+      -1,   102,   103,    12,    13,   106,    -1,    -1,    -1,   110,
+     111,   112,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    -1,
+      49,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,
+      59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    12,    13,    -1,    95,    -1,    97,    98,    -1,    -1,
-     101,   102,    23,    -1,   105,    -1,    -1,    -1,   109,   110,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    -1,    94,    -1,    96,    -1,    98,
+      99,    -1,    -1,   102,   103,    12,    13,   106,    -1,    -1,
+      -1,   110,   111,   112,    -1,    -1,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
+      -1,    -1,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    56,
+      57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    12,    13,    -1,    95,    -1,    97,    98,    -1,    -1,
-     101,   102,    23,    -1,   105,    -1,    -1,    -1,   109,   110,
-     111,    -1,    -1,    -1,    -1,    -1,    -1,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    12,    13,    -1,    96,
+      -1,    98,    99,    -1,    -1,   102,   103,    23,    -1,   106,
+      -1,    -1,    -1,   110,   111,   112,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    12,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    -1,    -1,    23,    -1,    -1,    97,    98,    -1,    -1,
-     101,   102,    -1,    -1,   105,    35,    36,    -1,   109,   110,
-     111,    -1,    -1,    -1,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,
-      60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    91,    12,    93,    94,    95,    -1,    97,    98,    -1,
-      -1,   101,   102,    23,    -1,   105,    -1,    -1,    -1,   109,
-     110,   111,    -1,    -1,    -1,    35,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    44,    45,    46,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,
-      60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    12,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    91,    23,    93,    -1,    95,    -1,    97,    98,    -1,
-      -1,   101,   102,    -1,    35,   105,    -1,    -1,    -1,   109,
-     110,   111,    -1,    44,    45,    46,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    55,    56,    -1,    58,    -1,    60,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,
-      -1,    -1,    15,    16,    -1,    -1,    -1,    78,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,
-      91,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,
-     101,   102,    45,    46,   105,    48,    -1,    -1,   109,   110,
-     111,    -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,    -1,    -1,
-      15,    16,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    87,    88,    89,    90,    91,    -1,
-      -1,    -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,
-      45,    46,   105,    48,    -1,    -1,   109,   110,   111,    -1,
-      55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    12,    13,    -1,
+      96,    -1,    98,    99,    -1,    -1,   102,   103,    23,    -1,
+     106,    -1,    -1,    -1,   110,   111,   112,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+      -1,    56,    57,    -1,    59,    12,    61,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    23,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    36,
+      37,    -1,    87,    88,    89,    90,    91,    92,    45,    46,
+      47,    -1,    49,    98,    99,    -1,    -1,   102,   103,    56,
+      57,   106,    59,    -1,    61,   110,   111,   112,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    -1,    -1,    12,    -1,    -1,    -1,
-      -1,    86,    87,    88,    89,    90,    91,    23,    -1,    -1,
-      95,    -1,    97,    98,    -1,    -1,   101,   102,    -1,    -1,
-     105,    -1,    -1,    -1,   109,   110,   111,    -1,    44,    45,
-      46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,
-      56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    12,    -1,    -1,    15,    -1,    -1,
-      -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    87,    88,    89,    90,    91,    -1,    -1,    -1,    95,
-      -1,    97,    98,    -1,    -1,   101,   102,    45,    46,   105,
-      48,    -1,    -1,   109,   110,   111,    -1,    55,    56,    -1,
-      58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    12,    -1,    -1,    15,    -1,    -1,    -1,    -1,
-      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      88,    89,    90,    91,    -1,    -1,    -1,    95,    -1,    97,
-      98,    -1,    -1,   101,   102,    45,    46,   105,    48,    -1,
-      -1,   109,   110,   111,    -1,    55,    56,    -1,    58,    -1,
-      60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      12,    -1,    -1,    15,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    91,    -1,    -1,    -1,    95,    -1,    97,    98,    -1,
-      -1,   101,   102,    45,    46,   105,    48,    -1,    -1,   109,
-     110,   111,    -1,    55,    56,    -1,    58,    -1,    60,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    91,
-      -1,    -1,    -1,    95,    -1,    97,    98,    -1,    -1,   101,
-     102,    45,    46,   105,    48,    -1,    -1,   109,   110,   111,
-      -1,    55,    56,    -1,    58,    -1,    60,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    69,    12,    -1,    -1,    15,
-      -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    91,    -1,    -1,
-      -1,    95,    -1,    97,    98,    -1,    -1,   101,   102,    45,
-      46,   105,    48,    -1,    -1,   109,   110,   111,    -1,    55,
-      56,    -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    92,    12,    94,    95,    96,
+      -1,    98,    99,    -1,    -1,   102,   103,    23,    -1,   106,
+      -1,    -1,    -1,   110,   111,   112,    -1,    -1,    -1,    -1,
+      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    -1,    59,    -1,    61,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    78,    -1,    -1,    12,    -1,    -1,    -1,    -1,
-      86,    87,    88,    89,    90,    91,    23,    -1,    -1,    95,
-      -1,    97,    98,    -1,    -1,   101,   102,    -1,    -1,   105,
-      -1,    -1,    -1,   109,   110,   111,    -1,    44,    45,    46,
-      -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    55,    56,
-      -1,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
-      87,    88,    89,    90,    91,    -1,    -1,    -1,    -1,    -1,
-      97,    98,    -1,    -1,   101,   102,    45,    46,   105,    48,
-      -1,    -1,   109,   110,   111,    -1,    55,    56,    -1,    58,
-      -1,    60,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
-      89,    90,    91,    -1,    -1,    -1,    95,    -1,    97,    98,
-      -1,    -1,   101,   102,    -1,    -1,   105,    -1,    -1,    -1,
-     109,   110,   111
+      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    12,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    94,    23,
+      96,    -1,    98,    99,    -1,    -1,   102,   103,    -1,    -1,
+     106,    -1,    36,    -1,   110,   111,   112,    -1,    -1,    -1,
+      -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    -1,    59,    12,    61,    -1,    15,
+      16,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
+      46,    47,    96,    49,    98,    99,    -1,    -1,   102,   103,
+      56,    57,   106,    59,    -1,    61,   110,   111,   112,    -1,
+      -1,    -1,    -1,    -1,    12,    -1,    -1,    15,    16,    -1,
+      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    -1,    -1,
+      96,    -1,    98,    99,    -1,    -1,   102,   103,    46,    47,
+     106,    49,    -1,    -1,   110,   111,   112,    -1,    56,    57,
+      -1,    59,    12,    61,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    45,    46,    47,    96,    49,
+      98,    99,    -1,    -1,   102,   103,    56,    57,   106,    59,
+      -1,    61,   110,   111,   112,    -1,    -1,    -1,    -1,    -1,
+      12,    -1,    -1,    15,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    -1,    -1,    -1,    96,    -1,    98,    99,
+      -1,    -1,   102,   103,    46,    47,   106,    49,    -1,    -1,
+     110,   111,   112,    -1,    56,    57,    -1,    59,    12,    61,
+      -1,    15,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    -1,    46,    47,    96,    49,    98,    99,    -1,    -1,
+     102,   103,    56,    57,   106,    59,    -1,    61,   110,   111,
+     112,    -1,    -1,    -1,    -1,    -1,    12,    -1,    -1,    15,
+      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
+      -1,    -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,
+      46,    47,   106,    49,    -1,    -1,   110,   111,   112,    -1,
+      56,    57,    -1,    59,    12,    61,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    -1,    46,    47,
+      96,    49,    98,    99,    -1,    -1,   102,   103,    56,    57,
+     106,    59,    -1,    61,   110,   111,   112,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    12,    -1,    -1,    15,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    -1,    -1,    -1,    96,    -1,
+      98,    99,    -1,    -1,   102,   103,    -1,    -1,   106,    -1,
+      -1,    -1,   110,   111,   112,    -1,    46,    47,    -1,    49,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
+      12,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    23,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    45,    46,    47,    96,    49,    98,    99,
+      -1,    -1,   102,   103,    56,    57,   106,    59,    12,    61,
+     110,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      92,    -1,    46,    47,    -1,    49,    98,    99,    -1,    -1,
+     102,   103,    56,    57,   106,    59,    -1,    61,   110,   111,
+     112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    -1,
+      -1,    -1,    96,    -1,    98,    99,    -1,    -1,   102,   103,
+      -1,    -1,   106,    -1,    -1,    -1,   110,   111,   112
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     1,     9,    14,   114,   129,   131,   143,     0,     7,
-       8,    11,    12,    15,    45,    46,    48,    54,    55,    56,
-      58,    60,    78,    86,    87,    88,    89,    90,    91,    95,
-      97,    98,   101,   102,   105,   109,   110,   111,   126,   132,
-     133,   135,   138,   145,   146,   156,   157,   158,   159,   161,
-       9,    14,   126,   126,   138,   139,   147,    12,    12,   105,
-     158,   159,    86,    89,   124,    12,    12,    12,    12,    42,
-     159,    12,    12,   158,   158,   145,   158,   159,   159,   158,
-       1,     9,    14,    47,    49,    50,    51,    52,    53,    57,
-      61,    62,    76,    77,    96,    99,   118,   120,   125,   126,
-     138,   142,   149,   151,   155,   162,    10,   126,   129,    13,
-      23,    35,    36,    38,    39,    40,    41,    42,    43,    44,
-      93,   115,   116,   158,    12,    91,    15,   101,   102,   103,
-     104,   108,    69,   109,   110,    18,   155,   155,    10,    16,
-     117,    16,   117,    92,    16,   136,   138,   138,    12,   138,
-     138,   136,    16,   136,   158,    42,   138,   138,     9,   127,
-     128,    14,   127,   150,   150,   161,   138,   150,    12,    12,
-     150,   150,   138,   150,    12,     9,   152,   151,   155,    12,
-     137,   140,   141,   145,   158,   159,   150,    17,   151,   154,
-     128,   155,   133,    95,   138,   146,   138,   138,   138,   138,
-     138,   138,   161,   138,     9,   138,     9,   138,   138,   146,
-      69,   158,   158,   158,   158,   158,   158,   138,   136,    17,
-      17,     9,   138,    44,   138,    15,    16,   117,    86,   160,
-     117,   117,    16,    16,   158,   117,   117,     9,   128,    18,
-     150,   130,   149,   161,   138,   150,   138,   151,    79,   119,
-      17,   144,   139,    23,    44,    93,   115,   116,   158,   117,
-      13,    37,    40,    69,   151,   132,    17,   159,    94,   117,
-     117,   158,    19,   161,   138,    16,   117,   148,   138,   146,
-     138,   146,   161,   138,   136,    14,    44,   148,   148,   153,
-       9,   151,     9,    16,    12,   137,   146,   161,   137,   137,
-     137,   137,   158,   158,   158,   137,   126,   138,   138,   138,
-      86,     9,   134,    16,    16,    16,    16,    16,   117,    16,
-     117,    19,    14,   128,   161,    99,    44,   139,    94,   155,
-      16,   117,    16,   117,   126,   138,   146,   138,   128,   138,
-     148,    12,   161,    16,   137,    17,   159,   159,   155,    16,
-      16,    16,   130,    14,   123,   138,    16,    16,    17,   148,
-     128,   151,    16,   122,   130,   150,   151,   148,   121,   151
+       0,     1,     9,    14,   115,   130,   132,   144,     0,     7,
+       8,    11,    12,    15,    46,    47,    49,    55,    56,    57,
+      59,    61,    79,    87,    88,    89,    90,    91,    92,    96,
+      98,    99,   102,   103,   106,   110,   111,   112,   127,   133,
+     134,   136,   139,   146,   147,   157,   158,   159,   160,   162,
+       9,    14,   127,   127,   139,   140,   148,    12,    12,   106,
+     159,   160,    87,    90,   125,    12,    12,    12,    12,    43,
+     160,    12,    12,   159,   159,   146,   159,   160,   160,   159,
+       1,     9,    14,    48,    50,    51,    52,    53,    54,    58,
+      62,    63,    77,    78,    97,   100,   119,   121,   126,   127,
+     139,   143,   150,   152,   156,   163,    10,   127,   130,    13,
+      23,    36,    37,    39,    40,    41,    42,    43,    44,    45,
+      94,   116,   117,   159,    12,    92,    15,   102,   103,   104,
+     105,   109,    70,   110,   111,    18,   156,   156,    10,    16,
+     118,    16,   118,    93,    16,   137,   139,   139,    12,   139,
+     139,   137,    16,   137,   159,    43,   139,   139,     9,   128,
+     129,    14,   128,   151,   151,   162,   139,   151,    12,    12,
+     151,   151,   139,   151,    12,     9,   153,   152,   156,    12,
+     138,   141,   142,   146,   159,   160,   151,    17,   152,   155,
+     129,   156,   134,    96,   139,   147,   139,   139,   139,   139,
+     139,   139,   162,   139,     9,   139,     9,   139,   139,   147,
+      70,   159,   159,   159,   159,   159,   159,   139,   137,    17,
+      17,     9,   139,    45,   139,    15,    16,   118,    87,   161,
+     118,   118,    16,    16,   159,   118,   118,     9,   129,    18,
+     151,   131,   150,   162,   139,   151,   139,   152,    80,   120,
+      17,   145,   140,    23,    45,    94,   116,   117,   159,   118,
+      13,    38,    41,    70,   152,   133,    17,   160,    95,   118,
+     118,   159,    19,   162,   139,    16,   118,   149,   139,   147,
+     139,   147,   162,   139,   137,    14,    45,   149,   149,   154,
+       9,   152,     9,    16,    12,   138,   147,   162,   138,   138,
+     138,   138,   159,   159,   159,   138,   127,   139,   139,   139,
+      87,     9,   135,    16,    16,    16,    16,    16,   118,    16,
+     118,    19,    14,   129,   162,   100,    45,   140,    95,   156,
+      16,   118,    16,   118,   127,   139,   147,   139,   129,   139,
+     149,    12,   162,    16,   138,    17,   160,   160,   156,    16,
+      16,    16,   131,    14,   124,   139,    16,    16,    17,   149,
+     129,   152,    16,   123,   131,   151,   152,   149,   122,   152
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   113,   114,   114,   115,   115,   116,   116,   117,   117,
-     118,   118,   119,   119,   121,   120,   122,   120,   123,   120,
-     124,   124,   125,   126,   126,   127,   127,   128,   128,   129,
-     129,   130,   130,   131,   131,   132,   133,   133,   133,   133,
-     133,   133,   133,   134,   133,   135,   135,   136,   136,   137,
-     137,   137,   137,   137,   137,   137,   137,   137,   137,   137,
+       0,   114,   115,   115,   116,   116,   117,   117,   118,   118,
+     119,   119,   120,   120,   122,   121,   123,   121,   124,   121,
+     125,   125,   126,   127,   127,   128,   128,   129,   129,   130,
+     130,   131,   131,   132,   132,   133,   134,   134,   134,   134,
+     134,   134,   134,   135,   134,   136,   136,   137,   137,   138,
      138,   138,   138,   138,   138,   138,   138,   138,   138,   138,
-     138,   138,   138,   138,   138,   138,   138,   138,   138,   139,
-     139,   140,   140,   141,   141,   141,   142,   142,   143,   143,
-     143,   143,   144,   144,   145,   145,   147,   146,   148,   148,
-     149,   149,   149,   149,   149,   149,   149,   149,   150,   150,
-     151,   151,   152,   153,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   154,   151,   151,   155,
-     155,   156,   156,   157,   157,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   159,   159,   159,
-     159,   160,   160,   160,   161,   161,   161,   162
+     139,   139,   139,   139,   139,   139,   139,   139,   139,   139,
+     139,   139,   139,   139,   139,   139,   139,   139,   139,   140,
+     140,   141,   141,   142,   142,   142,   143,   143,   144,   144,
+     144,   144,   145,   145,   146,   146,   148,   147,   149,   149,
+     150,   150,   150,   150,   150,   150,   150,   150,   151,   151,
+     152,   152,   153,   154,   152,   152,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   155,   152,   152,   156,
+     156,   157,   157,   158,   158,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   160,   160,   160,
+     160,   161,   161,   161,   162,   162,   162,   163
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1877,22 +1866,22 @@
 
 #define YYRECOVERING()  (!!yyerrstatus)
 
-#define YYBACKUP(Token, Value)                                  \
-do                                                              \
-  if (yychar == YYEMPTY)                                        \
-    {                                                           \
-      yychar = (Token);                                         \
-      yylval = (Value);                                         \
-      YYPOPSTACK (yylen);                                       \
-      yystate = *yyssp;                                         \
-      goto yybackup;                                            \
-    }                                                           \
-  else                                                          \
-    {                                                           \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                  \
-    }                                                           \
-while (0)
+#define YYBACKUP(Token, Value)                                    \
+  do                                                              \
+    if (yychar == YYEMPTY)                                        \
+      {                                                           \
+        yychar = (Token);                                         \
+        yylval = (Value);                                         \
+        YYPOPSTACK (yylen);                                       \
+        yystate = *yyssp;                                         \
+        goto yybackup;                                            \
+      }                                                           \
+    else                                                          \
+      {                                                           \
+        yyerror (YY_("syntax error: cannot back up")); \
+        YYERROR;                                                  \
+      }                                                           \
+  while (0)
 
 /* Error token number */
 #define YYTERROR        1
@@ -2007,7 +1996,7 @@
       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
       yy_symbol_print (stderr,
                        yystos[yyssp[yyi + 1 - yynrhs]],
-                       &(yyvsp[(yyi + 1) - (yynrhs)])
+                       &yyvsp[(yyi + 1) - (yynrhs)]
                                               );
       YYFPRINTF (stderr, "\n");
     }
@@ -2111,7 +2100,10 @@
           case '\\':
             if (*++yyp != '\\')
               goto do_not_strip_quotes;
-            /* Fall through.  */
+            else
+              goto append;
+
+          append:
           default:
             if (yyres)
               yyres[yyn] = *yyp;
@@ -2207,10 +2199,10 @@
                 yyarg[yycount++] = yytname[yyx];
                 {
                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
-                  if (! (yysize <= yysize1
-                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+                    yysize = yysize1;
+                  else
                     return 2;
-                  yysize = yysize1;
                 }
               }
         }
@@ -2234,9 +2226,10 @@
 
   {
     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
-    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
+      yysize = yysize1;
+    else
       return 2;
-    yysize = yysize1;
   }
 
   if (*yymsg_alloc < yysize)
@@ -2362,23 +2355,33 @@
   yychar = YYEMPTY; /* Cause a token to be read.  */
   goto yysetstate;
 
+
 /*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
+| yynewstate -- push a new state, which is found in yystate.  |
 `------------------------------------------------------------*/
- yynewstate:
+yynewstate:
   /* In all cases, when you get here, the value and location stacks
      have just been pushed.  So pushing a state here evens the stacks.  */
   yyssp++;
 
- yysetstate:
+
+/*--------------------------------------------------------------------.
+| yynewstate -- set current state (the top of the stack) to yystate.  |
+`--------------------------------------------------------------------*/
+yysetstate:
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
   *yyssp = (yytype_int16) yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
+#if !defined yyoverflow && !defined YYSTACK_RELOCATE
+    goto yyexhaustedlab;
+#else
     {
       /* Get the current used size of the three stacks, in elements.  */
       YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
 
-#ifdef yyoverflow
+# if defined yyoverflow
       {
         /* Give user a chance to reallocate the stack.  Use copies of
            these so that the &'s don't force the real ones into
@@ -2397,10 +2400,7 @@
         yyss = yyss1;
         yyvs = yyvs1;
       }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
+# else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
         goto yyexhaustedlab;
@@ -2416,12 +2416,11 @@
           goto yyexhaustedlab;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
+# undef YYSTACK_RELOCATE
         if (yyss1 != yyssa)
           YYSTACK_FREE (yyss1);
       }
 # endif
-#endif /* no yyoverflow */
 
       yyssp = yyss + yysize - 1;
       yyvsp = yyvs + yysize - 1;
@@ -2432,19 +2431,18 @@
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
     }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
   if (yystate == YYFINAL)
     YYACCEPT;
 
   goto yybackup;
 
+
 /*-----------.
 | yybackup.  |
 `-----------*/
 yybackup:
-
   /* Do appropriate processing given the current state.  Read a
      lookahead token if we need one and don't already have one.  */
 
@@ -2502,7 +2500,6 @@
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   *++yyvsp = yylval;
   YY_IGNORE_MAYBE_UNINITIALIZED_END
-
   goto yynewstate;
 
 
@@ -2517,7 +2514,7 @@
 
 
 /*-----------------------------.
-| yyreduce -- Do a reduction.  |
+| yyreduce -- do a reduction.  |
 `-----------------------------*/
 yyreduce:
   /* yyn is the number of a rule to reduce with.  */
@@ -2537,889 +2534,890 @@
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-        case 2:
-#line 99 "awkgram.y" /* yacc.c:1645  */
+  case 2:
+#line 99 "awkgram.y"
     { if (errorflag==0)
 			winner = (Node *)stat3(PROGRAM, beginloc, (yyvsp[0].p), endloc); }
-#line 2545 "ytab.c" /* yacc.c:1645  */
+#line 2542 "y.tab.c"
     break;
 
   case 3:
-#line 101 "awkgram.y" /* yacc.c:1645  */
+#line 101 "awkgram.y"
     { yyclearin; bracecheck(); SYNTAX("bailing out"); }
-#line 2551 "ytab.c" /* yacc.c:1645  */
+#line 2548 "y.tab.c"
     break;
 
   case 14:
-#line 125 "awkgram.y" /* yacc.c:1645  */
+#line 125 "awkgram.y"
     {inloop++;}
-#line 2557 "ytab.c" /* yacc.c:1645  */
+#line 2554 "y.tab.c"
     break;
 
   case 15:
-#line 126 "awkgram.y" /* yacc.c:1645  */
+#line 126 "awkgram.y"
     { --inloop; (yyval.p) = stat4(FOR, (yyvsp[-9].p), notnull((yyvsp[-6].p)), (yyvsp[-3].p), (yyvsp[0].p)); }
-#line 2563 "ytab.c" /* yacc.c:1645  */
+#line 2560 "y.tab.c"
     break;
 
   case 16:
-#line 127 "awkgram.y" /* yacc.c:1645  */
+#line 127 "awkgram.y"
     {inloop++;}
-#line 2569 "ytab.c" /* yacc.c:1645  */
+#line 2566 "y.tab.c"
     break;
 
   case 17:
-#line 128 "awkgram.y" /* yacc.c:1645  */
+#line 128 "awkgram.y"
     { --inloop; (yyval.p) = stat4(FOR, (yyvsp[-7].p), NIL, (yyvsp[-3].p), (yyvsp[0].p)); }
-#line 2575 "ytab.c" /* yacc.c:1645  */
+#line 2572 "y.tab.c"
     break;
 
   case 18:
-#line 129 "awkgram.y" /* yacc.c:1645  */
+#line 129 "awkgram.y"
     {inloop++;}
-#line 2581 "ytab.c" /* yacc.c:1645  */
+#line 2578 "y.tab.c"
     break;
 
   case 19:
-#line 130 "awkgram.y" /* yacc.c:1645  */
+#line 130 "awkgram.y"
     { --inloop; (yyval.p) = stat3(IN, (yyvsp[-5].p), makearr((yyvsp[-3].p)), (yyvsp[0].p)); }
-#line 2587 "ytab.c" /* yacc.c:1645  */
+#line 2584 "y.tab.c"
     break;
 
   case 20:
-#line 134 "awkgram.y" /* yacc.c:1645  */
+#line 134 "awkgram.y"
     { setfname((yyvsp[0].cp)); }
-#line 2593 "ytab.c" /* yacc.c:1645  */
+#line 2590 "y.tab.c"
     break;
 
   case 21:
-#line 135 "awkgram.y" /* yacc.c:1645  */
+#line 135 "awkgram.y"
     { setfname((yyvsp[0].cp)); }
-#line 2599 "ytab.c" /* yacc.c:1645  */
+#line 2596 "y.tab.c"
     break;
 
   case 22:
-#line 139 "awkgram.y" /* yacc.c:1645  */
+#line 139 "awkgram.y"
     { (yyval.p) = notnull((yyvsp[-1].p)); }
-#line 2605 "ytab.c" /* yacc.c:1645  */
+#line 2602 "y.tab.c"
     break;
 
   case 27:
-#line 151 "awkgram.y" /* yacc.c:1645  */
+#line 151 "awkgram.y"
     { (yyval.i) = 0; }
-#line 2611 "ytab.c" /* yacc.c:1645  */
+#line 2608 "y.tab.c"
     break;
 
   case 29:
-#line 156 "awkgram.y" /* yacc.c:1645  */
+#line 156 "awkgram.y"
     { (yyval.i) = 0; }
-#line 2617 "ytab.c" /* yacc.c:1645  */
+#line 2614 "y.tab.c"
     break;
 
   case 31:
-#line 162 "awkgram.y" /* yacc.c:1645  */
+#line 162 "awkgram.y"
     { (yyval.p) = 0; }
-#line 2623 "ytab.c" /* yacc.c:1645  */
+#line 2620 "y.tab.c"
     break;
 
   case 33:
-#line 167 "awkgram.y" /* yacc.c:1645  */
+#line 167 "awkgram.y"
     { (yyval.p) = 0; }
-#line 2629 "ytab.c" /* yacc.c:1645  */
+#line 2626 "y.tab.c"
     break;
 
   case 34:
-#line 168 "awkgram.y" /* yacc.c:1645  */
+#line 168 "awkgram.y"
     { (yyval.p) = (yyvsp[-1].p); }
-#line 2635 "ytab.c" /* yacc.c:1645  */
+#line 2632 "y.tab.c"
     break;
 
   case 35:
-#line 172 "awkgram.y" /* yacc.c:1645  */
+#line 172 "awkgram.y"
     { (yyval.p) = notnull((yyvsp[0].p)); }
-#line 2641 "ytab.c" /* yacc.c:1645  */
+#line 2638 "y.tab.c"
     break;
 
   case 36:
-#line 176 "awkgram.y" /* yacc.c:1645  */
+#line 176 "awkgram.y"
     { (yyval.p) = stat2(PASTAT, (yyvsp[0].p), stat2(PRINT, rectonode(), NIL)); }
-#line 2647 "ytab.c" /* yacc.c:1645  */
+#line 2644 "y.tab.c"
     break;
 
   case 37:
-#line 177 "awkgram.y" /* yacc.c:1645  */
+#line 177 "awkgram.y"
     { (yyval.p) = stat2(PASTAT, (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 2653 "ytab.c" /* yacc.c:1645  */
+#line 2650 "y.tab.c"
     break;
 
   case 38:
-#line 178 "awkgram.y" /* yacc.c:1645  */
+#line 178 "awkgram.y"
     { (yyval.p) = pa2stat((yyvsp[-3].p), (yyvsp[0].p), stat2(PRINT, rectonode(), NIL)); }
-#line 2659 "ytab.c" /* yacc.c:1645  */
+#line 2656 "y.tab.c"
     break;
 
   case 39:
-#line 179 "awkgram.y" /* yacc.c:1645  */
+#line 179 "awkgram.y"
     { (yyval.p) = pa2stat((yyvsp[-6].p), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 2665 "ytab.c" /* yacc.c:1645  */
+#line 2662 "y.tab.c"
     break;
 
   case 40:
-#line 180 "awkgram.y" /* yacc.c:1645  */
+#line 180 "awkgram.y"
     { (yyval.p) = stat2(PASTAT, NIL, (yyvsp[-1].p)); }
-#line 2671 "ytab.c" /* yacc.c:1645  */
+#line 2668 "y.tab.c"
     break;
 
   case 41:
-#line 182 "awkgram.y" /* yacc.c:1645  */
+#line 182 "awkgram.y"
     { beginloc = linkum(beginloc, (yyvsp[-1].p)); (yyval.p) = 0; }
-#line 2677 "ytab.c" /* yacc.c:1645  */
+#line 2674 "y.tab.c"
     break;
 
   case 42:
-#line 184 "awkgram.y" /* yacc.c:1645  */
+#line 184 "awkgram.y"
     { endloc = linkum(endloc, (yyvsp[-1].p)); (yyval.p) = 0; }
-#line 2683 "ytab.c" /* yacc.c:1645  */
+#line 2680 "y.tab.c"
     break;
 
   case 43:
-#line 185 "awkgram.y" /* yacc.c:1645  */
-    {infunc++;}
-#line 2689 "ytab.c" /* yacc.c:1645  */
+#line 185 "awkgram.y"
+    {infunc = true;}
+#line 2686 "y.tab.c"
     break;
 
   case 44:
-#line 186 "awkgram.y" /* yacc.c:1645  */
-    { infunc--; curfname=0; defn((Cell *)(yyvsp[-7].p), (yyvsp[-5].p), (yyvsp[-1].p)); (yyval.p) = 0; }
-#line 2695 "ytab.c" /* yacc.c:1645  */
+#line 186 "awkgram.y"
+    { infunc = false; curfname=0; defn((Cell *)(yyvsp[-7].p), (yyvsp[-5].p), (yyvsp[-1].p)); (yyval.p) = 0; }
+#line 2692 "y.tab.c"
     break;
 
   case 46:
-#line 191 "awkgram.y" /* yacc.c:1645  */
+#line 191 "awkgram.y"
     { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2701 "ytab.c" /* yacc.c:1645  */
+#line 2698 "y.tab.c"
     break;
 
   case 48:
-#line 196 "awkgram.y" /* yacc.c:1645  */
+#line 196 "awkgram.y"
     { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2707 "ytab.c" /* yacc.c:1645  */
+#line 2704 "y.tab.c"
     break;
 
   case 49:
-#line 200 "awkgram.y" /* yacc.c:1645  */
+#line 200 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2713 "ytab.c" /* yacc.c:1645  */
+#line 2710 "y.tab.c"
     break;
 
   case 50:
-#line 202 "awkgram.y" /* yacc.c:1645  */
+#line 202 "awkgram.y"
     { (yyval.p) = op3(CONDEXPR, notnull((yyvsp[-4].p)), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2719 "ytab.c" /* yacc.c:1645  */
+#line 2716 "y.tab.c"
     break;
 
   case 51:
-#line 204 "awkgram.y" /* yacc.c:1645  */
+#line 204 "awkgram.y"
     { (yyval.p) = op2(BOR, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2725 "ytab.c" /* yacc.c:1645  */
+#line 2722 "y.tab.c"
     break;
 
   case 52:
-#line 206 "awkgram.y" /* yacc.c:1645  */
+#line 206 "awkgram.y"
     { (yyval.p) = op2(AND, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2731 "ytab.c" /* yacc.c:1645  */
+#line 2728 "y.tab.c"
     break;
 
   case 53:
-#line 207 "awkgram.y" /* yacc.c:1645  */
+#line 207 "awkgram.y"
     { (yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa((yyvsp[0].s), 0)); }
-#line 2737 "ytab.c" /* yacc.c:1645  */
+#line 2734 "y.tab.c"
     break;
 
   case 54:
-#line 209 "awkgram.y" /* yacc.c:1645  */
+#line 209 "awkgram.y"
     { if (constnode((yyvsp[0].p)))
 			(yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa(strnode((yyvsp[0].p)), 0));
 		  else
 			(yyval.p) = op3((yyvsp[-1].i), (Node *)1, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2746 "ytab.c" /* yacc.c:1645  */
+#line 2743 "y.tab.c"
     break;
 
   case 55:
-#line 213 "awkgram.y" /* yacc.c:1645  */
+#line 213 "awkgram.y"
     { (yyval.p) = op2(INTEST, (yyvsp[-2].p), makearr((yyvsp[0].p))); }
-#line 2752 "ytab.c" /* yacc.c:1645  */
+#line 2749 "y.tab.c"
     break;
 
   case 56:
-#line 214 "awkgram.y" /* yacc.c:1645  */
+#line 214 "awkgram.y"
     { (yyval.p) = op2(INTEST, (yyvsp[-3].p), makearr((yyvsp[0].p))); }
-#line 2758 "ytab.c" /* yacc.c:1645  */
+#line 2755 "y.tab.c"
     break;
 
   case 57:
-#line 215 "awkgram.y" /* yacc.c:1645  */
+#line 215 "awkgram.y"
     { (yyval.p) = op2(CAT, (yyvsp[-1].p), (yyvsp[0].p)); }
-#line 2764 "ytab.c" /* yacc.c:1645  */
+#line 2761 "y.tab.c"
     break;
 
   case 60:
-#line 221 "awkgram.y" /* yacc.c:1645  */
+#line 221 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2770 "ytab.c" /* yacc.c:1645  */
+#line 2767 "y.tab.c"
     break;
 
   case 61:
-#line 223 "awkgram.y" /* yacc.c:1645  */
+#line 223 "awkgram.y"
     { (yyval.p) = op3(CONDEXPR, notnull((yyvsp[-4].p)), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2776 "ytab.c" /* yacc.c:1645  */
+#line 2773 "y.tab.c"
     break;
 
   case 62:
-#line 225 "awkgram.y" /* yacc.c:1645  */
+#line 225 "awkgram.y"
     { (yyval.p) = op2(BOR, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2782 "ytab.c" /* yacc.c:1645  */
+#line 2779 "y.tab.c"
     break;
 
   case 63:
-#line 227 "awkgram.y" /* yacc.c:1645  */
+#line 227 "awkgram.y"
     { (yyval.p) = op2(AND, notnull((yyvsp[-2].p)), notnull((yyvsp[0].p))); }
-#line 2788 "ytab.c" /* yacc.c:1645  */
+#line 2785 "y.tab.c"
     break;
 
   case 64:
-#line 228 "awkgram.y" /* yacc.c:1645  */
+#line 228 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2794 "ytab.c" /* yacc.c:1645  */
+#line 2791 "y.tab.c"
     break;
 
   case 65:
-#line 229 "awkgram.y" /* yacc.c:1645  */
+#line 229 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2800 "ytab.c" /* yacc.c:1645  */
+#line 2797 "y.tab.c"
     break;
 
   case 66:
-#line 230 "awkgram.y" /* yacc.c:1645  */
+#line 230 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2806 "ytab.c" /* yacc.c:1645  */
+#line 2803 "y.tab.c"
     break;
 
   case 67:
-#line 231 "awkgram.y" /* yacc.c:1645  */
+#line 231 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2812 "ytab.c" /* yacc.c:1645  */
+#line 2809 "y.tab.c"
     break;
 
   case 68:
-#line 232 "awkgram.y" /* yacc.c:1645  */
+#line 232 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2818 "ytab.c" /* yacc.c:1645  */
+#line 2815 "y.tab.c"
     break;
 
   case 69:
-#line 233 "awkgram.y" /* yacc.c:1645  */
+#line 233 "awkgram.y"
     { (yyval.p) = op2((yyvsp[-1].i), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2824 "ytab.c" /* yacc.c:1645  */
+#line 2821 "y.tab.c"
     break;
 
   case 70:
-#line 234 "awkgram.y" /* yacc.c:1645  */
+#line 234 "awkgram.y"
     { (yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa((yyvsp[0].s), 0)); }
-#line 2830 "ytab.c" /* yacc.c:1645  */
+#line 2827 "y.tab.c"
     break;
 
   case 71:
-#line 236 "awkgram.y" /* yacc.c:1645  */
+#line 236 "awkgram.y"
     { if (constnode((yyvsp[0].p)))
 			(yyval.p) = op3((yyvsp[-1].i), NIL, (yyvsp[-2].p), (Node*)makedfa(strnode((yyvsp[0].p)), 0));
 		  else
 			(yyval.p) = op3((yyvsp[-1].i), (Node *)1, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2839 "ytab.c" /* yacc.c:1645  */
+#line 2836 "y.tab.c"
     break;
 
   case 72:
-#line 240 "awkgram.y" /* yacc.c:1645  */
+#line 240 "awkgram.y"
     { (yyval.p) = op2(INTEST, (yyvsp[-2].p), makearr((yyvsp[0].p))); }
-#line 2845 "ytab.c" /* yacc.c:1645  */
+#line 2842 "y.tab.c"
     break;
 
   case 73:
-#line 241 "awkgram.y" /* yacc.c:1645  */
+#line 241 "awkgram.y"
     { (yyval.p) = op2(INTEST, (yyvsp[-3].p), makearr((yyvsp[0].p))); }
-#line 2851 "ytab.c" /* yacc.c:1645  */
+#line 2848 "y.tab.c"
     break;
 
   case 74:
-#line 242 "awkgram.y" /* yacc.c:1645  */
+#line 242 "awkgram.y"
     {
 			if (safe) SYNTAX("cmd | getline is unsafe");
 			else (yyval.p) = op3(GETLINE, (yyvsp[0].p), itonp((yyvsp[-2].i)), (yyvsp[-3].p)); }
-#line 2859 "ytab.c" /* yacc.c:1645  */
+#line 2856 "y.tab.c"
     break;
 
   case 75:
-#line 245 "awkgram.y" /* yacc.c:1645  */
+#line 245 "awkgram.y"
     {
 			if (safe) SYNTAX("cmd | getline is unsafe");
 			else (yyval.p) = op3(GETLINE, (Node*)0, itonp((yyvsp[-1].i)), (yyvsp[-2].p)); }
-#line 2867 "ytab.c" /* yacc.c:1645  */
+#line 2864 "y.tab.c"
     break;
 
   case 76:
-#line 248 "awkgram.y" /* yacc.c:1645  */
+#line 248 "awkgram.y"
     { (yyval.p) = op2(CAT, (yyvsp[-1].p), (yyvsp[0].p)); }
-#line 2873 "ytab.c" /* yacc.c:1645  */
+#line 2870 "y.tab.c"
     break;
 
   case 79:
-#line 254 "awkgram.y" /* yacc.c:1645  */
+#line 254 "awkgram.y"
     { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2879 "ytab.c" /* yacc.c:1645  */
+#line 2876 "y.tab.c"
     break;
 
   case 80:
-#line 255 "awkgram.y" /* yacc.c:1645  */
+#line 255 "awkgram.y"
     { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2885 "ytab.c" /* yacc.c:1645  */
+#line 2882 "y.tab.c"
     break;
 
   case 82:
-#line 260 "awkgram.y" /* yacc.c:1645  */
+#line 260 "awkgram.y"
     { (yyval.p) = linkum((yyvsp[-2].p), (yyvsp[0].p)); }
-#line 2891 "ytab.c" /* yacc.c:1645  */
+#line 2888 "y.tab.c"
     break;
 
   case 83:
-#line 264 "awkgram.y" /* yacc.c:1645  */
+#line 264 "awkgram.y"
     { (yyval.p) = rectonode(); }
-#line 2897 "ytab.c" /* yacc.c:1645  */
+#line 2894 "y.tab.c"
     break;
 
   case 85:
-#line 266 "awkgram.y" /* yacc.c:1645  */
+#line 266 "awkgram.y"
     { (yyval.p) = (yyvsp[-1].p); }
-#line 2903 "ytab.c" /* yacc.c:1645  */
+#line 2900 "y.tab.c"
     break;
 
   case 94:
-#line 283 "awkgram.y" /* yacc.c:1645  */
+#line 283 "awkgram.y"
     { (yyval.p) = op3(MATCH, NIL, rectonode(), (Node*)makedfa((yyvsp[0].s), 0)); }
-#line 2909 "ytab.c" /* yacc.c:1645  */
+#line 2906 "y.tab.c"
     break;
 
   case 95:
-#line 284 "awkgram.y" /* yacc.c:1645  */
+#line 284 "awkgram.y"
     { (yyval.p) = op1(NOT, notnull((yyvsp[0].p))); }
-#line 2915 "ytab.c" /* yacc.c:1645  */
+#line 2912 "y.tab.c"
     break;
 
   case 96:
-#line 288 "awkgram.y" /* yacc.c:1645  */
+#line 288 "awkgram.y"
     {startreg();}
-#line 2921 "ytab.c" /* yacc.c:1645  */
+#line 2918 "y.tab.c"
     break;
 
   case 97:
-#line 288 "awkgram.y" /* yacc.c:1645  */
+#line 288 "awkgram.y"
     { (yyval.s) = (yyvsp[-1].s); }
-#line 2927 "ytab.c" /* yacc.c:1645  */
+#line 2924 "y.tab.c"
     break;
 
   case 100:
-#line 296 "awkgram.y" /* yacc.c:1645  */
+#line 296 "awkgram.y"
     {
 			if (safe) SYNTAX("print | is unsafe");
 			else (yyval.p) = stat3((yyvsp[-3].i), (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 2935 "ytab.c" /* yacc.c:1645  */
+#line 2932 "y.tab.c"
     break;
 
   case 101:
-#line 299 "awkgram.y" /* yacc.c:1645  */
+#line 299 "awkgram.y"
     {
 			if (safe) SYNTAX("print >> is unsafe");
 			else (yyval.p) = stat3((yyvsp[-3].i), (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 2943 "ytab.c" /* yacc.c:1645  */
+#line 2940 "y.tab.c"
     break;
 
   case 102:
-#line 302 "awkgram.y" /* yacc.c:1645  */
+#line 302 "awkgram.y"
     {
 			if (safe) SYNTAX("print > is unsafe");
 			else (yyval.p) = stat3((yyvsp[-3].i), (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 2951 "ytab.c" /* yacc.c:1645  */
+#line 2948 "y.tab.c"
     break;
 
   case 103:
-#line 305 "awkgram.y" /* yacc.c:1645  */
+#line 305 "awkgram.y"
     { (yyval.p) = stat3((yyvsp[-1].i), (yyvsp[0].p), NIL, NIL); }
-#line 2957 "ytab.c" /* yacc.c:1645  */
+#line 2954 "y.tab.c"
     break;
 
   case 104:
-#line 306 "awkgram.y" /* yacc.c:1645  */
+#line 306 "awkgram.y"
     { (yyval.p) = stat2(DELETE, makearr((yyvsp[-3].p)), (yyvsp[-1].p)); }
-#line 2963 "ytab.c" /* yacc.c:1645  */
+#line 2960 "y.tab.c"
     break;
 
   case 105:
-#line 307 "awkgram.y" /* yacc.c:1645  */
+#line 307 "awkgram.y"
     { (yyval.p) = stat2(DELETE, makearr((yyvsp[0].p)), 0); }
-#line 2969 "ytab.c" /* yacc.c:1645  */
+#line 2966 "y.tab.c"
     break;
 
   case 106:
-#line 308 "awkgram.y" /* yacc.c:1645  */
+#line 308 "awkgram.y"
     { (yyval.p) = exptostat((yyvsp[0].p)); }
-#line 2975 "ytab.c" /* yacc.c:1645  */
+#line 2972 "y.tab.c"
     break;
 
   case 107:
-#line 309 "awkgram.y" /* yacc.c:1645  */
+#line 309 "awkgram.y"
     { yyclearin; SYNTAX("illegal statement"); }
-#line 2981 "ytab.c" /* yacc.c:1645  */
+#line 2978 "y.tab.c"
     break;
 
   case 110:
-#line 318 "awkgram.y" /* yacc.c:1645  */
+#line 318 "awkgram.y"
     { if (!inloop) SYNTAX("break illegal outside of loops");
 				  (yyval.p) = stat1(BREAK, NIL); }
-#line 2988 "ytab.c" /* yacc.c:1645  */
+#line 2985 "y.tab.c"
     break;
 
   case 111:
-#line 320 "awkgram.y" /* yacc.c:1645  */
+#line 320 "awkgram.y"
     {  if (!inloop) SYNTAX("continue illegal outside of loops");
 				  (yyval.p) = stat1(CONTINUE, NIL); }
-#line 2995 "ytab.c" /* yacc.c:1645  */
+#line 2992 "y.tab.c"
     break;
 
   case 112:
-#line 322 "awkgram.y" /* yacc.c:1645  */
+#line 322 "awkgram.y"
     {inloop++;}
-#line 3001 "ytab.c" /* yacc.c:1645  */
+#line 2998 "y.tab.c"
     break;
 
   case 113:
-#line 322 "awkgram.y" /* yacc.c:1645  */
+#line 322 "awkgram.y"
     {--inloop;}
-#line 3007 "ytab.c" /* yacc.c:1645  */
+#line 3004 "y.tab.c"
     break;
 
   case 114:
-#line 323 "awkgram.y" /* yacc.c:1645  */
+#line 323 "awkgram.y"
     { (yyval.p) = stat2(DO, (yyvsp[-6].p), notnull((yyvsp[-2].p))); }
-#line 3013 "ytab.c" /* yacc.c:1645  */
+#line 3010 "y.tab.c"
     break;
 
   case 115:
-#line 324 "awkgram.y" /* yacc.c:1645  */
+#line 324 "awkgram.y"
     { (yyval.p) = stat1(EXIT, (yyvsp[-1].p)); }
-#line 3019 "ytab.c" /* yacc.c:1645  */
+#line 3016 "y.tab.c"
     break;
 
   case 116:
-#line 325 "awkgram.y" /* yacc.c:1645  */
+#line 325 "awkgram.y"
     { (yyval.p) = stat1(EXIT, NIL); }
-#line 3025 "ytab.c" /* yacc.c:1645  */
+#line 3022 "y.tab.c"
     break;
 
   case 118:
-#line 327 "awkgram.y" /* yacc.c:1645  */
+#line 327 "awkgram.y"
     { (yyval.p) = stat3(IF, (yyvsp[-3].p), (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3031 "ytab.c" /* yacc.c:1645  */
+#line 3028 "y.tab.c"
     break;
 
   case 119:
-#line 328 "awkgram.y" /* yacc.c:1645  */
+#line 328 "awkgram.y"
     { (yyval.p) = stat3(IF, (yyvsp[-1].p), (yyvsp[0].p), NIL); }
-#line 3037 "ytab.c" /* yacc.c:1645  */
+#line 3034 "y.tab.c"
     break;
 
   case 120:
-#line 329 "awkgram.y" /* yacc.c:1645  */
+#line 329 "awkgram.y"
     { (yyval.p) = (yyvsp[-1].p); }
-#line 3043 "ytab.c" /* yacc.c:1645  */
+#line 3040 "y.tab.c"
     break;
 
   case 121:
-#line 330 "awkgram.y" /* yacc.c:1645  */
+#line 330 "awkgram.y"
     { if (infunc)
 				SYNTAX("next is illegal inside a function");
 			  (yyval.p) = stat1(NEXT, NIL); }
-#line 3051 "ytab.c" /* yacc.c:1645  */
+#line 3048 "y.tab.c"
     break;
 
   case 122:
-#line 333 "awkgram.y" /* yacc.c:1645  */
+#line 333 "awkgram.y"
     { if (infunc)
 				SYNTAX("nextfile is illegal inside a function");
 			  (yyval.p) = stat1(NEXTFILE, NIL); }
-#line 3059 "ytab.c" /* yacc.c:1645  */
+#line 3056 "y.tab.c"
     break;
 
   case 123:
-#line 336 "awkgram.y" /* yacc.c:1645  */
+#line 336 "awkgram.y"
     { (yyval.p) = stat1(RETURN, (yyvsp[-1].p)); }
-#line 3065 "ytab.c" /* yacc.c:1645  */
+#line 3062 "y.tab.c"
     break;
 
   case 124:
-#line 337 "awkgram.y" /* yacc.c:1645  */
+#line 337 "awkgram.y"
     { (yyval.p) = stat1(RETURN, NIL); }
-#line 3071 "ytab.c" /* yacc.c:1645  */
+#line 3068 "y.tab.c"
     break;
 
   case 126:
-#line 339 "awkgram.y" /* yacc.c:1645  */
+#line 339 "awkgram.y"
     {inloop++;}
-#line 3077 "ytab.c" /* yacc.c:1645  */
+#line 3074 "y.tab.c"
     break;
 
   case 127:
-#line 339 "awkgram.y" /* yacc.c:1645  */
+#line 339 "awkgram.y"
     { --inloop; (yyval.p) = stat2(WHILE, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3083 "ytab.c" /* yacc.c:1645  */
+#line 3080 "y.tab.c"
     break;
 
   case 128:
-#line 340 "awkgram.y" /* yacc.c:1645  */
+#line 340 "awkgram.y"
     { (yyval.p) = 0; }
-#line 3089 "ytab.c" /* yacc.c:1645  */
+#line 3086 "y.tab.c"
     break;
 
   case 130:
-#line 345 "awkgram.y" /* yacc.c:1645  */
+#line 345 "awkgram.y"
     { (yyval.p) = linkum((yyvsp[-1].p), (yyvsp[0].p)); }
-#line 3095 "ytab.c" /* yacc.c:1645  */
+#line 3092 "y.tab.c"
     break;
 
   case 134:
-#line 354 "awkgram.y" /* yacc.c:1645  */
+#line 354 "awkgram.y"
     { (yyval.cp) = catstr((yyvsp[-1].cp), (yyvsp[0].cp)); }
-#line 3101 "ytab.c" /* yacc.c:1645  */
+#line 3098 "y.tab.c"
     break;
 
   case 135:
-#line 358 "awkgram.y" /* yacc.c:1645  */
+#line 358 "awkgram.y"
     { (yyval.p) = op2(DIVEQ, (yyvsp[-3].p), (yyvsp[0].p)); }
-#line 3107 "ytab.c" /* yacc.c:1645  */
+#line 3104 "y.tab.c"
     break;
 
   case 136:
-#line 359 "awkgram.y" /* yacc.c:1645  */
+#line 359 "awkgram.y"
     { (yyval.p) = op2(ADD, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3113 "ytab.c" /* yacc.c:1645  */
+#line 3110 "y.tab.c"
     break;
 
   case 137:
-#line 360 "awkgram.y" /* yacc.c:1645  */
+#line 360 "awkgram.y"
     { (yyval.p) = op2(MINUS, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3119 "ytab.c" /* yacc.c:1645  */
+#line 3116 "y.tab.c"
     break;
 
   case 138:
-#line 361 "awkgram.y" /* yacc.c:1645  */
+#line 361 "awkgram.y"
     { (yyval.p) = op2(MULT, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3125 "ytab.c" /* yacc.c:1645  */
+#line 3122 "y.tab.c"
     break;
 
   case 139:
-#line 362 "awkgram.y" /* yacc.c:1645  */
+#line 362 "awkgram.y"
     { (yyval.p) = op2(DIVIDE, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3131 "ytab.c" /* yacc.c:1645  */
+#line 3128 "y.tab.c"
     break;
 
   case 140:
-#line 363 "awkgram.y" /* yacc.c:1645  */
+#line 363 "awkgram.y"
     { (yyval.p) = op2(MOD, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3137 "ytab.c" /* yacc.c:1645  */
+#line 3134 "y.tab.c"
     break;
 
   case 141:
-#line 364 "awkgram.y" /* yacc.c:1645  */
+#line 364 "awkgram.y"
     { (yyval.p) = op2(POWER, (yyvsp[-2].p), (yyvsp[0].p)); }
-#line 3143 "ytab.c" /* yacc.c:1645  */
+#line 3140 "y.tab.c"
     break;
 
   case 142:
-#line 365 "awkgram.y" /* yacc.c:1645  */
+#line 365 "awkgram.y"
     { (yyval.p) = op1(UMINUS, (yyvsp[0].p)); }
-#line 3149 "ytab.c" /* yacc.c:1645  */
+#line 3146 "y.tab.c"
     break;
 
   case 143:
-#line 366 "awkgram.y" /* yacc.c:1645  */
+#line 366 "awkgram.y"
     { (yyval.p) = op1(UPLUS, (yyvsp[0].p)); }
-#line 3155 "ytab.c" /* yacc.c:1645  */
+#line 3152 "y.tab.c"
     break;
 
   case 144:
-#line 367 "awkgram.y" /* yacc.c:1645  */
+#line 367 "awkgram.y"
     { (yyval.p) = op1(NOT, notnull((yyvsp[0].p))); }
-#line 3161 "ytab.c" /* yacc.c:1645  */
+#line 3158 "y.tab.c"
     break;
 
   case 145:
-#line 368 "awkgram.y" /* yacc.c:1645  */
+#line 368 "awkgram.y"
     { (yyval.p) = op2(BLTIN, itonp((yyvsp[-2].i)), rectonode()); }
-#line 3167 "ytab.c" /* yacc.c:1645  */
+#line 3164 "y.tab.c"
     break;
 
   case 146:
-#line 369 "awkgram.y" /* yacc.c:1645  */
+#line 369 "awkgram.y"
     { (yyval.p) = op2(BLTIN, itonp((yyvsp[-3].i)), (yyvsp[-1].p)); }
-#line 3173 "ytab.c" /* yacc.c:1645  */
+#line 3170 "y.tab.c"
     break;
 
   case 147:
-#line 370 "awkgram.y" /* yacc.c:1645  */
+#line 370 "awkgram.y"
     { (yyval.p) = op2(BLTIN, itonp((yyvsp[0].i)), rectonode()); }
-#line 3179 "ytab.c" /* yacc.c:1645  */
+#line 3176 "y.tab.c"
     break;
 
   case 148:
-#line 371 "awkgram.y" /* yacc.c:1645  */
+#line 371 "awkgram.y"
     { (yyval.p) = op2(CALL, celltonode((yyvsp[-2].cp),CVAR), NIL); }
-#line 3185 "ytab.c" /* yacc.c:1645  */
+#line 3182 "y.tab.c"
     break;
 
   case 149:
-#line 372 "awkgram.y" /* yacc.c:1645  */
+#line 372 "awkgram.y"
     { (yyval.p) = op2(CALL, celltonode((yyvsp[-3].cp),CVAR), (yyvsp[-1].p)); }
-#line 3191 "ytab.c" /* yacc.c:1645  */
+#line 3188 "y.tab.c"
     break;
 
   case 150:
-#line 373 "awkgram.y" /* yacc.c:1645  */
+#line 373 "awkgram.y"
     { (yyval.p) = op1(CLOSE, (yyvsp[0].p)); }
-#line 3197 "ytab.c" /* yacc.c:1645  */
+#line 3194 "y.tab.c"
     break;
 
   case 151:
-#line 374 "awkgram.y" /* yacc.c:1645  */
+#line 374 "awkgram.y"
     { (yyval.p) = op1(PREDECR, (yyvsp[0].p)); }
-#line 3203 "ytab.c" /* yacc.c:1645  */
+#line 3200 "y.tab.c"
     break;
 
   case 152:
-#line 375 "awkgram.y" /* yacc.c:1645  */
+#line 375 "awkgram.y"
     { (yyval.p) = op1(PREINCR, (yyvsp[0].p)); }
-#line 3209 "ytab.c" /* yacc.c:1645  */
+#line 3206 "y.tab.c"
     break;
 
   case 153:
-#line 376 "awkgram.y" /* yacc.c:1645  */
+#line 376 "awkgram.y"
     { (yyval.p) = op1(POSTDECR, (yyvsp[-1].p)); }
-#line 3215 "ytab.c" /* yacc.c:1645  */
+#line 3212 "y.tab.c"
     break;
 
   case 154:
-#line 377 "awkgram.y" /* yacc.c:1645  */
+#line 377 "awkgram.y"
     { (yyval.p) = op1(POSTINCR, (yyvsp[-1].p)); }
-#line 3221 "ytab.c" /* yacc.c:1645  */
+#line 3218 "y.tab.c"
     break;
 
   case 155:
-#line 378 "awkgram.y" /* yacc.c:1645  */
+#line 378 "awkgram.y"
     { (yyval.p) = op3(GETLINE, (yyvsp[-2].p), itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 3227 "ytab.c" /* yacc.c:1645  */
+#line 3224 "y.tab.c"
     break;
 
   case 156:
-#line 379 "awkgram.y" /* yacc.c:1645  */
+#line 379 "awkgram.y"
     { (yyval.p) = op3(GETLINE, NIL, itonp((yyvsp[-1].i)), (yyvsp[0].p)); }
-#line 3233 "ytab.c" /* yacc.c:1645  */
+#line 3230 "y.tab.c"
     break;
 
   case 157:
-#line 380 "awkgram.y" /* yacc.c:1645  */
+#line 380 "awkgram.y"
     { (yyval.p) = op3(GETLINE, (yyvsp[0].p), NIL, NIL); }
-#line 3239 "ytab.c" /* yacc.c:1645  */
+#line 3236 "y.tab.c"
     break;
 
   case 158:
-#line 381 "awkgram.y" /* yacc.c:1645  */
+#line 381 "awkgram.y"
     { (yyval.p) = op3(GETLINE, NIL, NIL, NIL); }
-#line 3245 "ytab.c" /* yacc.c:1645  */
+#line 3242 "y.tab.c"
     break;
 
   case 159:
-#line 383 "awkgram.y" /* yacc.c:1645  */
+#line 383 "awkgram.y"
     { (yyval.p) = op2(INDEX, (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3251 "ytab.c" /* yacc.c:1645  */
+#line 3248 "y.tab.c"
     break;
 
   case 160:
-#line 385 "awkgram.y" /* yacc.c:1645  */
+#line 385 "awkgram.y"
     { SYNTAX("index() doesn't permit regular expressions");
 		  (yyval.p) = op2(INDEX, (yyvsp[-3].p), (Node*)(yyvsp[-1].s)); }
-#line 3258 "ytab.c" /* yacc.c:1645  */
+#line 3255 "y.tab.c"
     break;
 
   case 161:
-#line 387 "awkgram.y" /* yacc.c:1645  */
+#line 387 "awkgram.y"
     { (yyval.p) = (yyvsp[-1].p); }
-#line 3264 "ytab.c" /* yacc.c:1645  */
+#line 3261 "y.tab.c"
     break;
 
   case 162:
-#line 389 "awkgram.y" /* yacc.c:1645  */
+#line 389 "awkgram.y"
     { (yyval.p) = op3(MATCHFCN, NIL, (yyvsp[-3].p), (Node*)makedfa((yyvsp[-1].s), 1)); }
-#line 3270 "ytab.c" /* yacc.c:1645  */
+#line 3267 "y.tab.c"
     break;
 
   case 163:
-#line 391 "awkgram.y" /* yacc.c:1645  */
+#line 391 "awkgram.y"
     { if (constnode((yyvsp[-1].p)))
 			(yyval.p) = op3(MATCHFCN, NIL, (yyvsp[-3].p), (Node*)makedfa(strnode((yyvsp[-1].p)), 1));
 		  else
 			(yyval.p) = op3(MATCHFCN, (Node *)1, (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3279 "ytab.c" /* yacc.c:1645  */
+#line 3276 "y.tab.c"
     break;
 
   case 164:
-#line 395 "awkgram.y" /* yacc.c:1645  */
+#line 395 "awkgram.y"
     { (yyval.p) = celltonode((yyvsp[0].cp), CCON); }
-#line 3285 "ytab.c" /* yacc.c:1645  */
+#line 3282 "y.tab.c"
     break;
 
   case 165:
-#line 397 "awkgram.y" /* yacc.c:1645  */
+#line 397 "awkgram.y"
     { (yyval.p) = op4(SPLIT, (yyvsp[-5].p), makearr((yyvsp[-3].p)), (yyvsp[-1].p), (Node*)STRING); }
-#line 3291 "ytab.c" /* yacc.c:1645  */
+#line 3288 "y.tab.c"
     break;
 
   case 166:
-#line 399 "awkgram.y" /* yacc.c:1645  */
+#line 399 "awkgram.y"
     { (yyval.p) = op4(SPLIT, (yyvsp[-5].p), makearr((yyvsp[-3].p)), (Node*)makedfa((yyvsp[-1].s), 1), (Node *)REGEXPR); }
-#line 3297 "ytab.c" /* yacc.c:1645  */
+#line 3294 "y.tab.c"
     break;
 
   case 167:
-#line 401 "awkgram.y" /* yacc.c:1645  */
+#line 401 "awkgram.y"
     { (yyval.p) = op4(SPLIT, (yyvsp[-3].p), makearr((yyvsp[-1].p)), NIL, (Node*)STRING); }
-#line 3303 "ytab.c" /* yacc.c:1645  */
+#line 3300 "y.tab.c"
     break;
 
   case 168:
-#line 402 "awkgram.y" /* yacc.c:1645  */
+#line 402 "awkgram.y"
     { (yyval.p) = op1((yyvsp[-3].i), (yyvsp[-1].p)); }
-#line 3309 "ytab.c" /* yacc.c:1645  */
+#line 3306 "y.tab.c"
     break;
 
   case 169:
-#line 403 "awkgram.y" /* yacc.c:1645  */
+#line 403 "awkgram.y"
     { (yyval.p) = celltonode((yyvsp[0].cp), CCON); }
-#line 3315 "ytab.c" /* yacc.c:1645  */
+#line 3312 "y.tab.c"
     break;
 
   case 170:
-#line 405 "awkgram.y" /* yacc.c:1645  */
+#line 405 "awkgram.y"
     { (yyval.p) = op4((yyvsp[-5].i), NIL, (Node*)makedfa((yyvsp[-3].s), 1), (yyvsp[-1].p), rectonode()); }
-#line 3321 "ytab.c" /* yacc.c:1645  */
+#line 3318 "y.tab.c"
     break;
 
   case 171:
-#line 407 "awkgram.y" /* yacc.c:1645  */
+#line 407 "awkgram.y"
     { if (constnode((yyvsp[-3].p)))
 			(yyval.p) = op4((yyvsp[-5].i), NIL, (Node*)makedfa(strnode((yyvsp[-3].p)), 1), (yyvsp[-1].p), rectonode());
 		  else
 			(yyval.p) = op4((yyvsp[-5].i), (Node *)1, (yyvsp[-3].p), (yyvsp[-1].p), rectonode()); }
-#line 3330 "ytab.c" /* yacc.c:1645  */
+#line 3327 "y.tab.c"
     break;
 
   case 172:
-#line 412 "awkgram.y" /* yacc.c:1645  */
+#line 412 "awkgram.y"
     { (yyval.p) = op4((yyvsp[-7].i), NIL, (Node*)makedfa((yyvsp[-5].s), 1), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3336 "ytab.c" /* yacc.c:1645  */
+#line 3333 "y.tab.c"
     break;
 
   case 173:
-#line 414 "awkgram.y" /* yacc.c:1645  */
+#line 414 "awkgram.y"
     { if (constnode((yyvsp[-5].p)))
 			(yyval.p) = op4((yyvsp[-7].i), NIL, (Node*)makedfa(strnode((yyvsp[-5].p)), 1), (yyvsp[-3].p), (yyvsp[-1].p));
 		  else
 			(yyval.p) = op4((yyvsp[-7].i), (Node *)1, (yyvsp[-5].p), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3345 "ytab.c" /* yacc.c:1645  */
+#line 3342 "y.tab.c"
     break;
 
   case 174:
-#line 419 "awkgram.y" /* yacc.c:1645  */
+#line 419 "awkgram.y"
     { (yyval.p) = op3(SUBSTR, (yyvsp[-5].p), (yyvsp[-3].p), (yyvsp[-1].p)); }
-#line 3351 "ytab.c" /* yacc.c:1645  */
+#line 3348 "y.tab.c"
     break;
 
   case 175:
-#line 421 "awkgram.y" /* yacc.c:1645  */
+#line 421 "awkgram.y"
     { (yyval.p) = op3(SUBSTR, (yyvsp[-3].p), (yyvsp[-1].p), NIL); }
-#line 3357 "ytab.c" /* yacc.c:1645  */
+#line 3354 "y.tab.c"
     break;
 
   case 178:
-#line 427 "awkgram.y" /* yacc.c:1645  */
+#line 427 "awkgram.y"
     { (yyval.p) = op2(ARRAY, makearr((yyvsp[-3].p)), (yyvsp[-1].p)); }
-#line 3363 "ytab.c" /* yacc.c:1645  */
+#line 3360 "y.tab.c"
     break;
 
   case 179:
-#line 428 "awkgram.y" /* yacc.c:1645  */
+#line 428 "awkgram.y"
     { (yyval.p) = op1(INDIRECT, celltonode((yyvsp[0].cp), CVAR)); }
-#line 3369 "ytab.c" /* yacc.c:1645  */
+#line 3366 "y.tab.c"
     break;
 
   case 180:
-#line 429 "awkgram.y" /* yacc.c:1645  */
+#line 429 "awkgram.y"
     { (yyval.p) = op1(INDIRECT, (yyvsp[0].p)); }
-#line 3375 "ytab.c" /* yacc.c:1645  */
+#line 3372 "y.tab.c"
     break;
 
   case 181:
-#line 433 "awkgram.y" /* yacc.c:1645  */
+#line 433 "awkgram.y"
     { arglist = (yyval.p) = 0; }
-#line 3381 "ytab.c" /* yacc.c:1645  */
+#line 3378 "y.tab.c"
     break;
 
   case 182:
-#line 434 "awkgram.y" /* yacc.c:1645  */
+#line 434 "awkgram.y"
     { arglist = (yyval.p) = celltonode((yyvsp[0].cp),CVAR); }
-#line 3387 "ytab.c" /* yacc.c:1645  */
+#line 3384 "y.tab.c"
     break;
 
   case 183:
-#line 435 "awkgram.y" /* yacc.c:1645  */
+#line 435 "awkgram.y"
     {
 			checkdup((yyvsp[-2].p), (yyvsp[0].cp));
 			arglist = (yyval.p) = linkum((yyvsp[-2].p),celltonode((yyvsp[0].cp),CVAR)); }
-#line 3395 "ytab.c" /* yacc.c:1645  */
+#line 3392 "y.tab.c"
     break;
 
   case 184:
-#line 441 "awkgram.y" /* yacc.c:1645  */
+#line 441 "awkgram.y"
     { (yyval.p) = celltonode((yyvsp[0].cp), CVAR); }
-#line 3401 "ytab.c" /* yacc.c:1645  */
+#line 3398 "y.tab.c"
     break;
 
   case 185:
-#line 442 "awkgram.y" /* yacc.c:1645  */
+#line 442 "awkgram.y"
     { (yyval.p) = op1(ARG, itonp((yyvsp[0].i))); }
-#line 3407 "ytab.c" /* yacc.c:1645  */
+#line 3404 "y.tab.c"
     break;
 
   case 186:
-#line 443 "awkgram.y" /* yacc.c:1645  */
+#line 443 "awkgram.y"
     { (yyval.p) = op1(VARNF, (Node *) (yyvsp[0].cp)); }
-#line 3413 "ytab.c" /* yacc.c:1645  */
+#line 3410 "y.tab.c"
     break;
 
   case 187:
-#line 448 "awkgram.y" /* yacc.c:1645  */
+#line 448 "awkgram.y"
     { (yyval.p) = notnull((yyvsp[-1].p)); }
-#line 3419 "ytab.c" /* yacc.c:1645  */
+#line 3416 "y.tab.c"
     break;
 
 
-#line 3423 "ytab.c" /* yacc.c:1645  */
+#line 3420 "y.tab.c"
+
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -3533,12 +3531,10 @@
 | yyerrorlab -- error raised explicitly by YYERROR.  |
 `---------------------------------------------------*/
 yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
+  /* Pacify compilers when the user code never invokes YYERROR and the
+     label yyerrorlab therefore never appears in user code.  */
+  if (0)
+    YYERROR;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -3600,6 +3596,7 @@
   yyresult = 0;
   goto yyreturn;
 
+
 /*-----------------------------------.
 | yyabortlab -- YYABORT comes here.  |
 `-----------------------------------*/
@@ -3607,6 +3604,7 @@
   yyresult = 1;
   goto yyreturn;
 
+
 #if !defined yyoverflow || YYERROR_VERBOSE
 /*-------------------------------------------------.
 | yyexhaustedlab -- memory exhaustion comes here.  |
@@ -3617,6 +3615,10 @@
   /* Fall through.  */
 #endif
 
+
+/*-----------------------------------------------------.
+| yyreturn -- parsing is finished, return the result.  |
+`-----------------------------------------------------*/
 yyreturn:
   if (yychar != YYEMPTY)
     {
@@ -3646,7 +3648,7 @@
 #endif
   return yyresult;
 }
-#line 451 "awkgram.y" /* yacc.c:1903  */
+#line 451 "awkgram.y"
 
 
 void setfname(Cell *p)
diff --git a/ytab.h b/ytab.h
index 1a3d5da..c6e296f 100644
--- a/ytab.h
+++ b/ytab.h
@@ -1,8 +1,9 @@
-/* A Bison parser, made by GNU Bison 3.2.2.  */
+/* A Bison parser, made by GNU Bison 3.4.1.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -33,8 +34,8 @@
 /* Undocumented macros, especially those whose name start with YY_,
    are private implementation details.  Do not rely on them.  */
 
-#ifndef YY_YY_YTAB_H_INCLUDED
-# define YY_YY_YTAB_H_INCLUDED
+#ifndef YY_YY_Y_TAB_H_INCLUDED
+# define YY_YY_Y_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -70,78 +71,79 @@
     QUEST = 277,
     PLUS = 278,
     EMPTYRE = 279,
-    AND = 280,
-    BOR = 281,
-    APPEND = 282,
-    EQ = 283,
-    GE = 284,
-    GT = 285,
-    LE = 286,
-    LT = 287,
-    NE = 288,
-    IN = 289,
-    ARG = 290,
-    BLTIN = 291,
-    BREAK = 292,
-    CLOSE = 293,
-    CONTINUE = 294,
-    DELETE = 295,
-    DO = 296,
-    EXIT = 297,
-    FOR = 298,
-    FUNC = 299,
-    SUB = 300,
-    GSUB = 301,
-    IF = 302,
-    INDEX = 303,
-    LSUBSTR = 304,
-    MATCHFCN = 305,
-    NEXT = 306,
-    NEXTFILE = 307,
-    ADD = 308,
-    MINUS = 309,
-    MULT = 310,
-    DIVIDE = 311,
-    MOD = 312,
-    ASSIGN = 313,
-    ASGNOP = 314,
-    ADDEQ = 315,
-    SUBEQ = 316,
-    MULTEQ = 317,
-    DIVEQ = 318,
-    MODEQ = 319,
-    POWEQ = 320,
-    PRINT = 321,
-    PRINTF = 322,
-    SPRINTF = 323,
-    ELSE = 324,
-    INTEST = 325,
-    CONDEXPR = 326,
-    POSTINCR = 327,
-    PREINCR = 328,
-    POSTDECR = 329,
-    PREDECR = 330,
-    VAR = 331,
-    IVAR = 332,
-    VARNF = 333,
-    CALL = 334,
-    NUMBER = 335,
-    STRING = 336,
-    REGEXPR = 337,
-    GETLINE = 338,
-    RETURN = 339,
-    SPLIT = 340,
-    SUBSTR = 341,
-    WHILE = 342,
-    CAT = 343,
-    NOT = 344,
-    UMINUS = 345,
-    UPLUS = 346,
-    POWER = 347,
-    DECR = 348,
-    INCR = 349,
-    INDIRECT = 350,
-    LASTTOKEN = 351
+    ZERO = 280,
+    AND = 281,
+    BOR = 282,
+    APPEND = 283,
+    EQ = 284,
+    GE = 285,
+    GT = 286,
+    LE = 287,
+    LT = 288,
+    NE = 289,
+    IN = 290,
+    ARG = 291,
+    BLTIN = 292,
+    BREAK = 293,
+    CLOSE = 294,
+    CONTINUE = 295,
+    DELETE = 296,
+    DO = 297,
+    EXIT = 298,
+    FOR = 299,
+    FUNC = 300,
+    SUB = 301,
+    GSUB = 302,
+    IF = 303,
+    INDEX = 304,
+    LSUBSTR = 305,
+    MATCHFCN = 306,
+    NEXT = 307,
+    NEXTFILE = 308,
+    ADD = 309,
+    MINUS = 310,
+    MULT = 311,
+    DIVIDE = 312,
+    MOD = 313,
+    ASSIGN = 314,
+    ASGNOP = 315,
+    ADDEQ = 316,
+    SUBEQ = 317,
+    MULTEQ = 318,
+    DIVEQ = 319,
+    MODEQ = 320,
+    POWEQ = 321,
+    PRINT = 322,
+    PRINTF = 323,
+    SPRINTF = 324,
+    ELSE = 325,
+    INTEST = 326,
+    CONDEXPR = 327,
+    POSTINCR = 328,
+    PREINCR = 329,
+    POSTDECR = 330,
+    PREDECR = 331,
+    VAR = 332,
+    IVAR = 333,
+    VARNF = 334,
+    CALL = 335,
+    NUMBER = 336,
+    STRING = 337,
+    REGEXPR = 338,
+    GETLINE = 339,
+    RETURN = 340,
+    SPLIT = 341,
+    SUBSTR = 342,
+    WHILE = 343,
+    CAT = 344,
+    NOT = 345,
+    UMINUS = 346,
+    UPLUS = 347,
+    POWER = 348,
+    DECR = 349,
+    INCR = 350,
+    INDIRECT = 351,
+    LASTTOKEN = 352
   };
 #endif
 /* Tokens.  */
@@ -167,94 +169,94 @@
 #define QUEST 277
 #define PLUS 278
 #define EMPTYRE 279
-#define AND 280
-#define BOR 281
-#define APPEND 282
-#define EQ 283
-#define GE 284
-#define GT 285
-#define LE 286
-#define LT 287
-#define NE 288
-#define IN 289
-#define ARG 290
-#define BLTIN 291
-#define BREAK 292
-#define CLOSE 293
-#define CONTINUE 294
-#define DELETE 295
-#define DO 296
-#define EXIT 297
-#define FOR 298
-#define FUNC 299
-#define SUB 300
-#define GSUB 301
-#define IF 302
-#define INDEX 303
-#define LSUBSTR 304
-#define MATCHFCN 305
-#define NEXT 306
-#define NEXTFILE 307
-#define ADD 308
-#define MINUS 309
-#define MULT 310
-#define DIVIDE 311
-#define MOD 312
-#define ASSIGN 313
-#define ASGNOP 314
-#define ADDEQ 315
-#define SUBEQ 316
-#define MULTEQ 317
-#define DIVEQ 318
-#define MODEQ 319
-#define POWEQ 320
-#define PRINT 321
-#define PRINTF 322
-#define SPRINTF 323
-#define ELSE 324
-#define INTEST 325
-#define CONDEXPR 326
-#define POSTINCR 327
-#define PREINCR 328
-#define POSTDECR 329
-#define PREDECR 330
-#define VAR 331
-#define IVAR 332
-#define VARNF 333
-#define CALL 334
-#define NUMBER 335
-#define STRING 336
-#define REGEXPR 337
-#define GETLINE 338
-#define RETURN 339
-#define SPLIT 340
-#define SUBSTR 341
-#define WHILE 342
-#define CAT 343
-#define NOT 344
-#define UMINUS 345
-#define UPLUS 346
-#define POWER 347
-#define DECR 348
-#define INCR 349
-#define INDIRECT 350
-#define LASTTOKEN 351
+#define ZERO 280
+#define AND 281
+#define BOR 282
+#define APPEND 283
+#define EQ 284
+#define GE 285
+#define GT 286
+#define LE 287
+#define LT 288
+#define NE 289
+#define IN 290
+#define ARG 291
+#define BLTIN 292
+#define BREAK 293
+#define CLOSE 294
+#define CONTINUE 295
+#define DELETE 296
+#define DO 297
+#define EXIT 298
+#define FOR 299
+#define FUNC 300
+#define SUB 301
+#define GSUB 302
+#define IF 303
+#define INDEX 304
+#define LSUBSTR 305
+#define MATCHFCN 306
+#define NEXT 307
+#define NEXTFILE 308
+#define ADD 309
+#define MINUS 310
+#define MULT 311
+#define DIVIDE 312
+#define MOD 313
+#define ASSIGN 314
+#define ASGNOP 315
+#define ADDEQ 316
+#define SUBEQ 317
+#define MULTEQ 318
+#define DIVEQ 319
+#define MODEQ 320
+#define POWEQ 321
+#define PRINT 322
+#define PRINTF 323
+#define SPRINTF 324
+#define ELSE 325
+#define INTEST 326
+#define CONDEXPR 327
+#define POSTINCR 328
+#define PREINCR 329
+#define POSTDECR 330
+#define PREDECR 331
+#define VAR 332
+#define IVAR 333
+#define VARNF 334
+#define CALL 335
+#define NUMBER 336
+#define STRING 337
+#define REGEXPR 338
+#define GETLINE 339
+#define RETURN 340
+#define SPLIT 341
+#define SUBSTR 342
+#define WHILE 343
+#define CAT 344
+#define NOT 345
+#define UMINUS 346
+#define UPLUS 347
+#define POWER 348
+#define DECR 349
+#define INCR 350
+#define INDIRECT 351
+#define LASTTOKEN 352
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-
 union YYSTYPE
 {
-#line 41 "awkgram.y" /* yacc.c:1906  */
+#line 41 "awkgram.y"
 
 	Node	*p;
 	Cell	*cp;
 	int	i;
 	char	*s;
 
-#line 256 "ytab.h" /* yacc.c:1906  */
-};
+#line 258 "y.tab.h"
 
+};
 typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -265,4 +267,4 @@
 
 int yyparse (void);
 
-#endif /* !YY_YY_YTAB_H_INCLUDED  */
+#endif /* !YY_YY_Y_TAB_H_INCLUDED  */