Imported Upstream version 1.7.4p5 upstream/1.7.4p5
authorBdale Garbee <bdale@gag.com>
Sun, 16 Jan 2011 02:31:35 +0000 (19:31 -0700)
committerBdale Garbee <bdale@gag.com>
Sun, 16 Jan 2011 02:31:35 +0000 (19:31 -0700)
19 files changed:
ChangeLog
NEWS
bsm_audit.c
check.c
configure
configure.in
install-sh
linux_audit.c
match.c
pp
pwutil.c
set_perms.c
sudo.c
sudoers.cat
sudoers.man.in
sudoers.pod
term.c
toke.c
toke.l

index d5247b7f7c7cd2cc0646cee9fb3cd3728747da12..69c48b76bde845d6b19f17b098e7589317795b2d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,102 @@
+2011-01-11  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * check.c:
+       If the user is running sudo as himself but as a different group we
+       need to prompt for a password.
+       [fe8a94f96542]
+
+2011-01-10  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * pwutil.c:
+       If user has no supplementary groups, fall back on checking the group
+       file explicitly.
+       [c536ddb16bb6]
+
+2011-01-04  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * match.c:
+       Fix NULL dereference with "sudo -g group" when the sudoers rule has
+       no runas user or group listed. Fixes RedHat bug Bug 667103.
+       [c51e2be737b2]
+
+2010-12-21  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * term.c:
+       Clear OPOST from c_oflag like we used to. Fixes screen-based
+       editors such as vi.
+       [e26055d17b72]
+
+       * sudoers.pod:
+       Clarify umask option description. From Reuben Thomas.
+       [fb8bdcb54feb]
+
+2010-11-24  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * pp:
+       Add support for RHEL 6 file modes that include a trailing dot on
+       files with an SELinux security context
+       [fcc1daaf4df0]
+
+2010-11-22  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * sudoers.pod:
+       fix typo; from Michael T Hunter
+       [46e70e2063af]
+
+2010-10-07  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * check.c:
+       Having a timestamp file defined is no longer indicative of tty
+       tickets being enabled. Check def_tty_tickets directly.
+       [6c3803c239d9]
+
+2010-10-01  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * set_perms.c:
+       Sync set_project() with trunk.
+       [646fd9bc0537]
+
+       * set_perms.c, sudo.c:
+       Move set_project() into runas_setup(). Fixes a NULL deref when
+       project support is enabled and sudo's -g flag is used without the
+       -u flag.
+       [6ffd892243ab]
+
+2010-09-21  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * linux_audit.c:
+       Ignore ECONNREFUSED from audit_log_user_command() which will occur
+       if auditd is not running.
+       [a686884684ca]
+
+2010-09-13  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * install-sh:
+       Use sed instead of expr to split a flag from its argument. Fixes a
+       problem with expr interpreting its arguments as a flag when they
+       start with a dash.
+       [16372da8a286]
+
+2010-09-08  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * bsm_audit.c:
+       Solaris BSM audit return EINVAL when auditing is not enabled,
+       whereas OpenBSM returns ENOSYS.
+       [bb9c94a8fa7d]
+
+2010-09-07  Todd C. Miller  <Todd.Miller@courtesan.com>
+
+       * toke.c, toke.l:
+       Add missing LOG_INPUT/LOG_OUTPUT support in the lexer.
+       [0a5519756bf1]
+
+       * sudo.c:
+       Set NewArgv[0] to the name of the pseudo-command we are running.
+       Fixes a problem with "sudo -l" when auditing is enabled and the user
+       is not allowed to run any commands on the host. Adapted from a patch
+       from Daniel Kopecek.
+       [694ed1a75a4a]
+
 2010-09-06  Todd C. Miller  <Todd.Miller@courtesan.com>
 
        * match.c:
diff --git a/NEWS b/NEWS
index 21d4e611454b46ad6bce4463d655242707835eb3..ffb6d78167928fe38d53fc6d33bc61a080d8f9f6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,85 @@
+What's new in Sudo 1.7.4p5?
+
+ * A bug has been fixed that would allow a command to be run without the
+   user entering a password when sudo's -g flag is used without the -u flag.
+
+ * If user has no supplementary groups, sudo will now fall back on checking
+   the group file explicitly, which restores historic sudo behavior.
+
+ * A crash has been fixed when sudo's -g flag is used without the -u flag
+   and the sudoers file contains an entry with no runas user or group listed.
+
+ * A bug has been fixed in the I/O logging support that could cause
+   visual artifacts in full-screen programs such as text editors,.
+
+ * A crash has been fixed when the Solaris project support is enabled
+   and sudo's -g flag is used without the -u flag.
+
+ * Sudo no longer exits with an error when support for auditing is
+   compiled in but auditing is not enabled.
+
+ * Fixed a bug introduced in sudo 1.7.3 where the ticket file was not
+   being honored when the "targetpw" sudoers Defaults option was enabled.
+
+ * The LOG_INPUT and LOG_OUTPUT tags in sudoers are now parsed correctly.
+
+ * A crash has been fixed in "sudo -l" when sudo is built with auditing
+   support and the user is not allowed to run any commands on the host.
+
+What's new in Sudo 1.7.4p4?
+
+ * A potential security issue has been fixed with respect to the handling
+   of sudo's -g command line option when -u is also specified.  The flaw
+   may allow an attacker to run commands as a user that is not authorized
+   by the sudoers file.
+
+ * A bug has been fixed where "sudo -l" output was incomplete if multiple
+   sudoers sources were defined in nsswitch.conf and there was an error
+   querying one of the sources.
+
+ * The log_input, log_output, and use_pty sudoers options now work correctly
+   on AIX.  Previously, sudo would hang if they were enabled.
+
+ * The "make install" target now works correctly when sudo is built in a
+   directory other than the source directory.
+
+ * The "runas_default" sudoers setting now works properly in a per-command
+   Defaults line.
+
+ * Suspending and resuming the bash shell when PAM is in use now works
+   correctly.  The SIGCONT signal was not propagated to the child process.
+
+What's new in Sudo 1.7.4p3?
+
+ * A bug has been fixed where duplicate HOME environment variables could be
+   present when the env_reset setting was disabled and the always_set_home
+   setting was enabled in sudoers.
+
+ * The value of sysconfdir is now substituted into the path to the sudoers.d
+   directory in the installed sudoers file.
+
+ * Compilation problems on IRIX and other platforms have been fixed.
+
+ * If multiple PAM "auth" actions are specified and the user enters ^C at
+   the password prompt, sudo will no longer prompt for a password for any
+   subsequent "auth" actions.  Previously it was necessary to enter ^C for
+   each "auth" action.
+
+What's new in Sudo 1.7.4p2?
+
+ * A bug where sudo could spin in a busy loop waiting for the child process
+   has been fixed.
+
+What's new in Sudo 1.7.4p1?
+
+ * A bug introduced in sudo 1.7.3 that prevented the -k and -K options from
+   functioning when the tty_tickets sudoers option is enabled has been fixed.
+
+ * Sudo no longer prints a warning when the -k or -K options are specified
+   and the ticket file does not exist.
+
+ * It is now easier to cross-compile sudo.
+
 What's new in Sudo 1.7.4?
 
  * Sudoedit will now preserve the file extension in the name of the
index b388b86f73e974c0a3e04598e1e62ddd3c39f40f..a673d281e3c1a7f0456d3635adcdd6dfe98f51aa 100644 (file)
 
 #include "bsm_audit.h"
 
+/*
+ * Solaris auditon() returns EINVAL if BSM audit not configured.
+ * OpenBSM returns ENOSYS for unimplemented options.
+ */
+#ifdef __sun__
+# define AUDIT_NOT_CONFIGURED  EINVAL
+#else
+# define AUDIT_NOT_CONFIGURED  ENOSYS
+#endif
+
 void log_error(int flags, const char *fmt, ...) __attribute__((__noreturn__));
 
 static int
@@ -71,7 +81,7 @@ bsm_audit_success(char **exec_args)
         * If we are not auditing, don't cut an audit record; just return.
         */
        if (auditon(A_GETCOND, (caddr_t)&au_cond, sizeof(long)) < 0) {
-               if (errno == ENOSYS)
+               if (errno == AUDIT_NOT_CONFIGURED)
                        return;
                log_error(0, "Could not determine audit condition");
        }
@@ -132,7 +142,7 @@ bsm_audit_failure(char **exec_args, char const *const fmt, va_list ap)
         * If we are not auditing, don't cut an audit record; just return.
         */
        if (auditon(A_GETCOND, &au_cond, sizeof(long)) < 0) {
-               if (errno == ENOSYS)
+               if (errno == AUDIT_NOT_CONFIGURED)
                        return;
                log_error(0, "Could not determine audit condition");
        }
diff --git a/check.c b/check.c
index d6efa6d0befe153b9d8dcb251fda09371bbf538e..badf3e4007735df5ec8ad5e454bd3cefc811cf9b 100644 (file)
--- a/check.c
+++ b/check.c
@@ -119,7 +119,13 @@ check_user(validated, mode)
     if (ISSET(mode, MODE_INVALIDATE)) {
        SET(validated, FLAG_CHECK_USER);
     } else {
-       if (user_uid == 0 || user_uid == runas_pw->pw_uid || user_is_exempt())
+       /*
+        * Don't prompt for the root passwd or if the user is exempt.
+        * If the user is not changing uid/gid, no need for a password.
+        */
+       if (user_uid == 0 || (user_uid == runas_pw->pw_uid &&
+           (!runas_gr || user_in_group(sudo_user.pw, runas_gr->gr_name))) ||
+           user_is_exempt())
            return;
     }
 
@@ -205,7 +211,7 @@ update_timestamp(timestampdir, timestampfile)
     char *timestampfile;
 {
     /* If using tty timestamps but we have no tty there is nothing to do. */
-    if (timestampfile && !user_ttypath)
+    if (def_tty_tickets && !user_ttypath)
        return;
 
     if (timestamp_uid != 0)
@@ -528,7 +534,7 @@ timestamp_status(timestampdir, timestampfile, user, flags)
     if (timestampfile && status != TS_ERROR) {
        if (status != TS_MISSING)
            status = TS_NOFILE;                 /* dir there, file missing */
-       if (!user_ttypath)
+       if (def_tty_tickets && !user_ttypath)
            goto done;                          /* no tty, always prompt */
        if (lstat(timestampfile, &sb) == 0) {
            if (!S_ISREG(sb.st_mode)) {
index e66f189c5ac79703e47ceb63aef642956a6f24a9..209de36edce3bebd8a9769fbf5b11d8862a311b2 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for sudo 1.7.4p4.
+# Generated by GNU Autoconf 2.65 for sudo 1.7.4p5.
 #
 # Report bugs to <http://www.sudo.ws/bugs/>.
 #
@@ -701,8 +701,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='sudo'
 PACKAGE_TARNAME='sudo'
-PACKAGE_VERSION='1.7.4p4'
-PACKAGE_STRING='sudo 1.7.4p4'
+PACKAGE_VERSION='1.7.4p5'
+PACKAGE_STRING='sudo 1.7.4p5'
 PACKAGE_BUGREPORT='http://www.sudo.ws/bugs/'
 PACKAGE_URL=''
 
@@ -1552,7 +1552,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures sudo 1.7.4p4 to adapt to many kinds of systems.
+\`configure' configures sudo 1.7.4p5 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1617,7 +1617,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of sudo 1.7.4p4:";;
+     short | recursive ) echo "Configuration of sudo 1.7.4p5:";;
    esac
   cat <<\_ACEOF
 
@@ -1828,7 +1828,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-sudo configure 1.7.4p4
+sudo configure 1.7.4p5
 generated by GNU Autoconf 2.65
 
 Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2527,7 +2527,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by sudo $as_me 1.7.4p4, which was
+It was created by sudo $as_me 1.7.4p5, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   $ $0 $@
@@ -18977,7 +18977,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by sudo $as_me 1.7.4p4, which was
+This file was extended by sudo $as_me 1.7.4p5, which was
 generated by GNU Autoconf 2.65.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19043,7 +19043,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-sudo config.status 1.7.4p4
+sudo config.status 1.7.4p5
 configured by $0, generated by GNU Autoconf 2.65,
   with options \\"\$ac_cs_config\\"
 
index 4186b886d4d3213b11123ad44f24a880d8e1a179..aed2ff0bbdf1ce98031d95ce5940600b4cf8cde7 100644 (file)
@@ -3,7 +3,7 @@ dnl Process this file with GNU autoconf to produce a configure script.
 dnl
 dnl Copyright (c) 1994-1996,1998-2010 Todd C. Miller <Todd.Miller@courtesan.com>
 dnl
-AC_INIT([sudo], [1.7.4p4], [http://www.sudo.ws/bugs/], [sudo])
+AC_INIT([sudo], [1.7.4p5], [http://www.sudo.ws/bugs/], [sudo])
 AC_CONFIG_HEADER(config.h pathnames.h)
 dnl
 dnl This won't work before AC_INIT
index 7a207e2d502c941647925048e15ef44c642f66ce..79e7f408172c0e9d0e7dd4e58e9d31e38b82ff62 100755 (executable)
@@ -71,7 +71,7 @@ while ${MORETODO} ; do
        ;;
     X-b*)
        BACKIT=true
-       BACKUP=`expr "$1" : '-b\(.*\)'`
+       BACKUP="`echo \"$1\" | sed 's/^..//'`"
        ;;
     X-c)
        # backwards compatibility
@@ -85,7 +85,7 @@ while ${MORETODO} ; do
        shift
        ;;
     X-g*)
-       GROUP=`expr "$1" : '-g\(.*\)'`
+       GROUP="`echo \"$1\" | sed 's/^..//'`"
        CHGROUPIT=true
        ;;
     X-G)
@@ -95,7 +95,7 @@ while ${MORETODO} ; do
        ;;
     X-G*)
        if ${ROOT} ; then
-           GROUP=`expr "$1" : '-g\(.*\)'`
+           GROUP="`echo \"$1\" | sed 's/^..//'`"
            CHGROUPIT=true
        fi
        ;;
@@ -105,7 +105,7 @@ while ${MORETODO} ; do
        shift
        ;;
     X-m*)
-       MODE=`expr "$1" : '-m\(.*\)'`
+       MODE="`echo \"$1\" | sed 's/^..//'`"
        CHMODIT=true
        ;;
     X-M)
@@ -114,7 +114,7 @@ while ${MORETODO} ; do
        shift
        ;;
     X-M*)
-       MODE=`expr "$1" : '-m\(.*\)'`
+       MODE="`echo \"$1\" | sed 's/^..//'`"
        ${ROOT} && CHMODIT=true
        ;;
     X-n)
@@ -126,7 +126,7 @@ while ${MORETODO} ; do
        shift
        ;;
     X-o*)
-       OWNER=`expr "$1" : '-o\(.*\)'`
+       OWNER="`echo \"$1\" | sed 's/^..//'`"
        CHOWNIT=true
        ;;
     X-O)
@@ -136,7 +136,7 @@ while ${MORETODO} ; do
        ;;
     X-O*)
        if ${ROOT} ; then
-           OWNER=`expr "$1" : '-o\(.*\)'`
+           OWNER="`echo \"$1\" | sed 's/^..//'`"
            CHOWNIT=true
        fi
        ;;
index ba87e788517bfa5312907709fe4b9281d56107b3..b4160c99cd8ff66ad19f3bbfaeecf53d4084c890 100644 (file)
@@ -82,9 +82,9 @@ linux_audit_command(char *argv[], int result)
     }
     *--cp = '\0';
 
-    /* Log command, ignoring EPERM on error. */
+    /* Log command, ignoring ECONNREFUSED on error. */
     rc = audit_log_user_command(au_fd, AUDIT_USER_CMD, command, NULL, result);
-    if (rc <= 0)
+    if (rc <= 0 && errno != ECONNREFUSED)
        warning("unable to send audit message");
 
     efree(command);
diff --git a/match.c b/match.c
index 91ec315302c79e6f6250cd287f18a3ec79bbabc2..6431425df3fdde0c64f686f00d5e8b5a464b3460 100644 (file)
--- a/match.c
+++ b/match.c
@@ -174,10 +174,11 @@ _runaslist_matches(user_list, group_list)
     int user_matched = UNSPEC;
     int group_matched = UNSPEC;
 
-    if (tq_empty(user_list) && tq_empty(group_list))
-       return(userpw_matches(def_runas_default, runas_pw->pw_name, runas_pw));
-
     if (runas_pw != NULL) {
+       /* If no runas user or runas group listed in sudoers, use default. */
+       if (tq_empty(user_list) && tq_empty(group_list))
+           return(userpw_matches(def_runas_default, runas_pw->pw_name, runas_pw));
+
        tq_foreach_rev(user_list, m) {
            switch (m->type) {
                case ALL:
diff --git a/pp b/pp
index a997c0f4b7b5afecaac1ee111f802e12b43e3e14..2776485b663b7c2a5e82fd2e9c94a71066e53c8a 100755 (executable)
--- a/pp
+++ b/pp
@@ -438,7 +438,7 @@ pp_unique () {
 
 pp_mode_strip_altaccess () {
     case "$1" in
-       ??????????+)
+       ??????????[+.])
            echo `echo "$1" | cut -b -10`;;
        *)
            echo "$1";;
index 35524f355ee3220921b276b1dfc0c6f5e40e9597..86ae0ab2b92ebd16bf71fd27c5c72dd8060e7685 100644 (file)
--- a/pwutil.c
+++ b/pwutil.c
@@ -610,7 +610,7 @@ user_in_group(pw, group)
      * If we are matching the invoking or list user and that user has a
      * supplementary group vector, check it.
      */
-    if (user_ngroups >= 0 &&
+    if (user_ngroups > 0 &&
        strcmp(pw->pw_name, list_pw ? list_pw->pw_name : user_name) == 0) {
        for (i = 0; i < user_ngroups; i++) {
            if (grp->gr_gid == user_groups[i])
index 81e2e76057f618317350111ed5922e67bbe38211..d028b2c39104867a67e1e894237f7109aab4b0d7 100644 (file)
 #ifdef HAVE_LOGIN_CAP_H
 # include <login_cap.h>
 #endif
+#ifdef HAVE_PROJECT_H
+# include <project.h>
+# include <sys/task.h>
+#endif
 
 #include "sudo.h"
 
@@ -547,6 +551,69 @@ restore_groups()
 
 #endif /* HAVE_INITGROUPS */
 
+#ifdef HAVE_PROJECT_H
+static void
+set_project(pw)
+    struct passwd *pw;
+{
+    struct project proj;
+    char buf[PROJECT_BUFSZ];
+    int errval;
+
+    /*
+     * Collect the default project for the user and settaskid
+     */
+    setprojent();
+    if (getdefaultproj(pw->pw_name, &proj, buf, sizeof(buf)) != NULL) {
+       errval = setproject(proj.pj_name, pw->pw_name, TASK_NORMAL);
+       switch(errval) {
+       case 0:
+           break;
+       case SETPROJ_ERR_TASK:
+           switch (errno) {
+           case EAGAIN:
+               warningx("resource control limit has been reached");
+               break;
+           case ESRCH:
+               warningx("user \"%s\" is not a member of project \"%s\"",
+                   pw->pw_name, proj.pj_name);
+               break;
+           case EACCES:
+               warningx("the invoking task is final");
+               break;
+           default:
+               warningx("could not join project \"%s\"", proj.pj_name);
+           }
+       case SETPROJ_ERR_POOL:
+           switch (errno) {
+           case EACCES:
+               warningx("no resource pool accepting default bindings "
+                   "exists for project \"%s\"", proj.pj_name);
+               break;
+           case ESRCH:
+               warningx("specified resource pool does not exist for "
+                   "project \"%s\"", proj.pj_name);
+               break;
+           default:
+               warningx("could not bind to default resource pool for "
+                   "project \"%s\"", proj.pj_name);
+           }
+           break;
+       default:
+           if (errval <= 0) {
+               warningx("setproject failed for project \"%s\"", proj.pj_name);
+           } else {
+               warningx("warning, resource control assignment failed for "
+                   "project \"%s\"", proj.pj_name);
+           }
+       }
+    } else {
+       warning("getdefaultproj");
+    }
+    endprojent();
+}
+#endif /* HAVE_PROJECT_H */
+
 static void
 runas_setup()
 {
@@ -558,6 +625,9 @@ runas_setup()
 
     if (runas_pw->pw_name != NULL) {
        gid = runas_gr ? runas_gr->gr_gid : runas_pw->pw_gid;
+#ifdef HAVE_PROJECT_H
+       set_project(runas_pw);
+#endif
 #ifdef HAVE_GETUSERATTR
        aix_prep_user(runas_pw->pw_name, user_ttypath);
 #endif
diff --git a/sudo.c b/sudo.c
index 159a2c8351c53811f2194062894653d41b49922b..c03b726febaf255cebaff4d367ce5d78e697a407 100644 (file)
--- a/sudo.c
+++ b/sudo.c
 #  define LOGIN_DEFROOTCLASS   "daemon"
 # endif
 #endif
-#ifdef HAVE_PROJECT_H
-# include <project.h>
-# include <sys/task.h>
-#endif
 #ifdef HAVE_MBR_CHECK_MEMBERSHIP
 # include <membership.h>
 #endif
@@ -118,7 +114,6 @@ static void init_vars                       __P((char **));
 static int set_cmnd                    __P((int));
 static void initial_setup              __P((void));
 static void set_loginclass             __P((struct passwd *));
-static void set_project                        __P((struct passwd *));
 static void set_runasgr                        __P((char *));
 static void set_runaspw                        __P((char *));
 static void show_version               __P((void));
@@ -701,14 +696,10 @@ init_vars(envp)
        set_perms(PERM_ROOT);
 
     /*
-     * If we were given the '-e', '-i' or '-s' options we need to redo
-     * NewArgv and NewArgc.
+     * If in shell or edit mode, or if running a pseudo-command
+     * such as "list", we need to redo NewArgv and NewArgc.
      */
-    if (ISSET(sudo_mode, MODE_EDIT)) {
-       NewArgv--;
-       NewArgc++;
-       NewArgv[0] = "sudoedit";
-    } else if (ISSET(sudo_mode, MODE_SHELL)) {
+    if (ISSET(sudo_mode, MODE_SHELL)) {
        char **av;
 
        /* Allocate an extra slot for execve() failure (ENOEXEC). */
@@ -750,6 +741,10 @@ init_vars(envp)
        }
        av[++NewArgc] = NULL;
        NewArgv = av;
+    } else if (ISSET(sudo_mode, MODE_EDIT) || NewArgc == 0) {
+       NewArgv--;
+       NewArgc++;
+       NewArgv[0] = user_cmnd;
     }
 }
 
@@ -764,9 +759,6 @@ set_cmnd(sudo_mode)
     int rval;
     char *path = user_path;
 
-    /* Set project if applicable. */
-    set_project(runas_pw);
-
     /* Resolve the path and return. */
     rval = FOUND;
     user_stat = emalloc(sizeof(struct stat));
@@ -1142,72 +1134,6 @@ set_loginclass(pw)
 }
 #endif /* HAVE_LOGIN_CAP_H */
 
-#ifdef HAVE_PROJECT_H
-static void
-set_project(pw)
-    struct passwd *pw;
-{
-    int errflags = NO_MAIL|MSG_ONLY|NO_EXIT;
-    int errval;
-    struct project proj;
-    struct project *resultp = '\0';
-    char buf[1024];
-
-    /*
-     * Collect the default project for the user and settaskid
-     */
-    setprojent();
-    if (resultp = getdefaultproj(pw->pw_name, &proj, buf, sizeof(buf))) {
-       errval = setproject(resultp->pj_name, pw->pw_name, TASK_NORMAL);
-       if (errval != 0) {
-           switch(errval) {
-           case SETPROJ_ERR_TASK:
-               if (errno == EAGAIN)
-                   log_error(errflags, "resource control limit has been reached");
-               else if (errno == ESRCH)
-                   log_error(errflags, "user \"%s\" is not a member of "
-                       "project \"%s\"", pw->pw_name, resultp->pj_name);
-               else if (errno == EACCES)
-                   log_error(errflags, "the invoking task is final");
-               else
-                   log_error(errflags, "could not join project \"%s\"",
-                       resultp->pj_name);
-               break;
-           case SETPROJ_ERR_POOL:
-               if (errno == EACCES)
-                   log_error(errflags, "no resource pool accepting "
-                           "default bindings exists for project \"%s\"",
-                           resultp->pj_name);
-               else if (errno == ESRCH)
-                   log_error(errflags, "specified resource pool does "
-                           "not exist for project \"%s\"", resultp->pj_name);
-               else
-                   log_error(errflags, "could not bind to default "
-                           "resource pool for project \"%s\"", resultp->pj_name);
-               break;
-           default:
-               if (errval <= 0) {
-                   log_error(errflags, "setproject failed for project \"%s\"",
-                       resultp->pj_name);
-               } else {
-                   log_error(errflags, "warning, resource control assignment "
-                       "failed for project \"%s\"", resultp->pj_name);
-               }
-           }
-       }
-    } else {
-       log_error(errflags, "getdefaultproj() error: %s", strerror(errno));
-    }
-    endprojent();
-}
-#else
-static void
-set_project(pw)
-    struct passwd *pw;
-{
-}
-#endif /* HAVE_PROJECT_H */
-
 /*
  * Look up the fully qualified domain name and set user_host and user_shost.
  */
index 1649855355e81738e90abccde5cbc42c7c7dcdee..018d80566d49cb176fc50b9d81dd57668e7072db 100644 (file)
@@ -61,7 +61,7 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
 
 
-1.7.4                     July 21, 2010                         1
+1.7.4                    January 12, 2011                       1
 
 
 
@@ -127,7 +127,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         2
+1.7.4                    January 12, 2011                       2
 
 
 
@@ -193,7 +193,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         3
+1.7.4                    January 12, 2011                       3
 
 
 
@@ -259,7 +259,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         4
+1.7.4                    January 12, 2011                       4
 
 
 
@@ -325,7 +325,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         5
+1.7.4                    January 12, 2011                       5
 
 
 
@@ -391,7 +391,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         6
+1.7.4                    January 12, 2011                       6
 
 
 
@@ -457,7 +457,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         7
+1.7.4                    January 12, 2011                       7
 
 
 
@@ -523,7 +523,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         8
+1.7.4                    January 12, 2011                       8
 
 
 
@@ -589,7 +589,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                         9
+1.7.4                    January 12, 2011                       9
 
 
 
@@ -655,7 +655,7 @@ S\bSU\bUD\bDO\bOE\bER\bRS\bS O\bOP\bPT\bTI\bIO\bON\bNS\bS
 
 
 
-1.7.4                     July 21, 2010                        10
+1.7.4                    January 12, 2011                      10
 
 
 
@@ -721,7 +721,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        11
+1.7.4                    January 12, 2011                      11
 
 
 
@@ -787,7 +787,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        12
+1.7.4                    January 12, 2011                      12
 
 
 
@@ -853,7 +853,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        13
+1.7.4                    January 12, 2011                      13
 
 
 
@@ -919,7 +919,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        14
+1.7.4                    January 12, 2011                      14
 
 
 
@@ -985,7 +985,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        15
+1.7.4                    January 12, 2011                      15
 
 
 
@@ -1030,7 +1030,8 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
        umask           Umask to use when running the command.  Negate this
                        option or set it to 0777 to preserve the user's umask.
                        The actual umask that is used will be the union of the
-                       user's umask and 0022.  This guarantees that s\bsu\bud\bdo\bo never
+                       user's umask and the value of the _\bu_\bm_\ba_\bs_\bk option, which
+                       defaults to 0022.  This guarantees that s\bsu\bud\bdo\bo never
                        lowers the umask when running a command.  Note on
                        systems that use PAM, the default PAM configuration may
                        specify its own umask which will override the value set
@@ -1050,8 +1051,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-
-1.7.4                     July 21, 2010                        16
+1.7.4                    January 12, 2011                      16
 
 
 
@@ -1117,7 +1117,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        17
+1.7.4                    January 12, 2011                      17
 
 
 
@@ -1183,7 +1183,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        18
+1.7.4                    January 12, 2011                      18
 
 
 
@@ -1249,7 +1249,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        19
+1.7.4                    January 12, 2011                      19
 
 
 
@@ -1315,7 +1315,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        20
+1.7.4                    January 12, 2011                      20
 
 
 
@@ -1381,7 +1381,7 @@ E\bEX\bXA\bAM\bMP\bPL\bLE\bES\bS
 
 
 
-1.7.4                     July 21, 2010                        21
+1.7.4                    January 12, 2011                      21
 
 
 
@@ -1447,7 +1447,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        22
+1.7.4                    January 12, 2011                      22
 
 
 
@@ -1513,7 +1513,7 @@ SUDOERS(4)             MAINTENANCE COMMANDS            SUDOERS(4)
 
 
 
-1.7.4                     July 21, 2010                        23
+1.7.4                    January 12, 2011                      23
 
 
 
@@ -1579,7 +1579,7 @@ S\bSE\bEC\bCU\bUR\bRI\bIT\bTY\bY N\bNO\bOT\bTE\bES\bS
 
 
 
-1.7.4                     July 21, 2010                        24
+1.7.4                    January 12, 2011                      24
 
 
 
@@ -1621,7 +1621,7 @@ P\bPR\bRE\bEV\bVE\bEN\bNT\bTI\bIN\bNG\bG S\bSH\bHE\bEL\bLL\bL E\bES\bSC\bCA\bAP\bPE\bES\bS
                  where shell escapes are disabled, though s\bsu\bud\bdo\boe\bed\bdi\bit\bt is a better
                  solution to running editors via s\bsu\bud\bdo\bo.  Due to the large
                  number of programs that offer shell escapes, restricting
-                 users to the set of programs that do not if often unworkable.
+                 users to the set of programs that do not is often unworkable.
 
        noexec    Many systems that support shared libraries have the ability
                  to override default library functions by pointing an
@@ -1645,7 +1645,7 @@ P\bPR\bRE\bEV\bVE\bEN\bNT\bTI\bIN\bNG\bG S\bSH\bHE\bEL\bLL\bL E\bES\bSC\bCA\bAP\bPE\bES\bS
 
 
 
-1.7.4                     July 21, 2010                        25
+1.7.4                    January 12, 2011                      25
 
 
 
@@ -1711,7 +1711,7 @@ S\bSU\bUP\bPP\bPO\bOR\bRT\bT
 
 
 
-1.7.4                     July 21, 2010                        26
+1.7.4                    January 12, 2011                      26
 
 
 
@@ -1777,6 +1777,6 @@ D\bDI\bIS\bSC\bCL\bLA\bAI\bIM\bME\bER\bR
 
 
 
-1.7.4                     July 21, 2010                        27
+1.7.4                    January 12, 2011                      27
 
 
index 5dff200536874a6d53ac1a6ee432db833662889a..210cf9036935e65c97040c4d219928cb6dddbefe 100644 (file)
@@ -22,7 +22,7 @@
 .nr BA @BAMAN@
 .nr LC @LCMAN@
 .\"
-.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
 .\" ========================================================================
 .\"
 .IX Title "SUDOERS @mansectform@"
-.TH SUDOERS @mansectform@ "July 21, 2010" "1.7.4" "MAINTENANCE COMMANDS"
+.TH SUDOERS @mansectform@ "January 12, 2011" "1.7.4" "MAINTENANCE COMMANDS"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -1085,11 +1085,11 @@ own timestamps via \f(CW\*(C`sudo \-v\*(C'\fR and \f(CW\*(C`sudo \-k\*(C'\fR res
 .IX Item "umask"
 Umask to use when running the command.  Negate this option or set
 it to 0777 to preserve the user's umask.  The actual umask that is
-used will be the union of the user's umask and \f(CW\*(C`@sudo_umask@\*(C'\fR.
-This guarantees that \fBsudo\fR never lowers the umask when running a
-command.  Note on systems that use \s-1PAM\s0, the default \s-1PAM\s0 configuration
-may specify its own umask which will override the value set in
-\&\fIsudoers\fR.
+used will be the union of the user's umask and the value of the
+\&\fIumask\fR option, which defaults to \f(CW\*(C`@sudo_umask@\*(C'\fR.  This guarantees
+that \fBsudo\fR never lowers the umask when running a command.  Note
+on systems that use \s-1PAM\s0, the default \s-1PAM\s0 configuration may specify
+its own umask which will override the value set in \fIsudoers\fR.
 .PP
 \&\fBStrings\fR:
 .IP "badpass_message" 16
@@ -1670,7 +1670,7 @@ arbitrary commands.  Many editors have a restricted mode where shell
 escapes are disabled, though \fBsudoedit\fR is a better solution to
 running editors via \fBsudo\fR.  Due to the large number of programs that
 offer shell escapes, restricting users to the set of programs that
-do not if often unworkable.
+do not is often unworkable.
 .IP "noexec" 10
 .IX Item "noexec"
 Many systems that support shared libraries have the ability to
index 798295ce60ae55845828c67ecbeae4d84dd2e18b..da7ea5faa4b2b6aaa90773929741f1d8d0b732ca 100644 (file)
@@ -995,11 +995,11 @@ own timestamps via C<sudo -v> and C<sudo -k> respectively.
 
 Umask to use when running the command.  Negate this option or set
 it to 0777 to preserve the user's umask.  The actual umask that is
-used will be the union of the user's umask and C<@sudo_umask@>.
-This guarantees that B<sudo> never lowers the umask when running a
-command.  Note on systems that use PAM, the default PAM configuration
-may specify its own umask which will override the value set in
-I<sudoers>.
+used will be the union of the user's umask and the value of the
+I<umask> option, which defaults to C<@sudo_umask@>.  This guarantees
+that B<sudo> never lowers the umask when running a command.  Note
+on systems that use PAM, the default PAM configuration may specify
+its own umask which will override the value set in I<sudoers>.
 
 =back
 
@@ -1598,7 +1598,7 @@ arbitrary commands.  Many editors have a restricted mode where shell
 escapes are disabled, though B<sudoedit> is a better solution to
 running editors via B<sudo>.  Due to the large number of programs that
 offer shell escapes, restricting users to the set of programs that
-do not if often unworkable.
+do not is often unworkable.
 
 =item noexec
 
diff --git a/term.c b/term.c
index a3cad619687761ff0d78091495b4adc502ec3f6d..b1e9da65f07efb24f69578fcf67a7259519587d5 100644 (file)
--- a/term.c
+++ b/term.c
@@ -151,10 +151,11 @@ term_raw(fd, isig)
     /* Set terminal to raw mode */
     term.c_cc[VMIN] = 1;
     term.c_cc[VTIME] = 0;
-    CLR(term.c_lflag, ECHO | ECHONL | ICANON | ISIG | IEXTEN);
+    CLR(term.c_iflag, ICRNL | IGNCR | INLCR | IUCLC | IXON);
+    SET(term.c_oflag, OPOST);
+    CLR(term.c_lflag, ECHO | ICANON | ISIG | IEXTEN);
     if (isig)
        SET(term.c_lflag, ISIG);
-    CLR(term.c_iflag, ICRNL | IGNCR | INLCR | IUCLC | IXON);
     if (tcsetattr(fd, TCSADRAIN|TCSASOFT, &term) == 0) {
        changed = 1;
        return(1);
diff --git a/toke.c b/toke.c
index e8b92436458b0c0c20f8284fb85f8fb1888e2897..e58fed9f0f270ff2e70e98e19d8ea4fb9d869a09 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -1,9 +1,9 @@
-/*     $OpenBSD: flex.skl,v 1.10 2007/01/26 14:38:19 tsi Exp $ */
+/*     $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $     */
 
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.10 2007/01/26 14:38:19 tsi Exp $
+ * $Header: /home/cvs/openbsd/src/usr.bin/lex/flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $
  */
 
 #define FLEX_SCANNER
@@ -288,71 +288,76 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 50
-#define YY_END_OF_BUFFER 51
-static yyconst short int yy_accept[555] =
+#define YY_NUM_RULES 54
+#define YY_END_OF_BUFFER 55
+static yyconst short int yy_accept[593] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   51,   38,   46,   45,   44,   38,   49,   38,
-       39,   40,   38,   41,   38,   38,   38,   38,   43,   42,
-       49,   33,   33,   33,   33,   33,   33,   49,   38,   38,
-       46,   49,   33,   33,   33,   33,   33,    1,   49,   38,
-       38,   16,   15,   16,   15,   15,   49,   49,   49,    2,
-        8,    7,    8,    3,    8,    4,   49,   12,   12,   12,
-       10,   11,   38,    0,   46,   44,   38,    0,    0,    0,
-       48,    0,   38,   28,    0,    0,   27,    0,   36,   36,
-        0,   38,   38,    0,   38,   38,   38,   38,    0,   31,
-
-       33,   33,   33,   33,   33,   33,   38,   47,   38,   46,
-        0,    0,    0,    0,    0,    0,   38,   38,   38,   38,
-       38,    1,    0,   34,   34,    0,   38,   16,   16,   14,
-       13,   14,    0,    0,    2,    8,    0,    5,    6,    8,
-        8,   12,    0,   12,   12,    0,    9,   37,   37,    0,
-        0,   28,    0,    0,   38,   38,   38,   38,   38,    0,
-        0,   31,   31,   33,   33,   33,   33,   33,   33,   33,
-       38,    0,    0,    0,    0,    0,    0,   38,   38,   38,
-       38,   38,    0,   38,    9,    0,   38,   38,   38,   38,
-       38,   38,    0,   32,   32,   32,    0,    0,   31,   31,
-
-       31,   31,   31,   31,   31,   33,   33,   33,   33,   33,
-       33,   33,   38,    0,    0,    0,    0,    0,    0,   38,
-       38,   38,   38,   38,   38,   38,    0,    0,   32,   32,
-       32,    0,   31,   31,    0,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,    0,   24,   33,   33,
-       33,   33,   33,   38,    0,    0,    0,    0,   38,   38,
-       38,   38,   38,   38,   38,   38,    0,   32,    0,   31,
-       31,   31,    0,    0,    0,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   33,   33,
-       33,   33,   33,   38,    0,    0,    0,   38,   38,   38,
-
-       29,   29,   29,    0,    0,   31,   31,   31,   31,   31,
-       31,   31,    0,    0,    0,    0,    0,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,    0,   23,   33,   33,    0,   22,    0,   25,   38,
-        0,    0,    0,   38,   38,   38,   38,   29,   29,   29,
-       29,    0,   31,    0,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,    0,    0,    0,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   33,   33,   35,    0,    0,    0,   38,   19,   34,
-       38,   30,   30,   30,   31,    0,    0,    0,   31,   31,
-
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,    0,    0,    0,    0,    0,   31,   31,   31,   31,
-       31,   31,   31,   31,    0,   21,    0,   26,    0,   19,
-        0,    0,   38,    0,   38,   38,   38,   30,   30,   30,
-       30,   30,    0,    0,    0,    0,    0,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,    0,    0,    0,
-       20,   19,    0,    0,   19,    0,   38,   38,   38,   30,
-       30,    0,    0,    0,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-
-       31,   31,   20,    0,   17,    0,   38,   38,   38,   38,
-       38,    0,    0,    0,    0,    0,   31,   31,   31,   31,
-       31,   31,   31,   31,    0,   38,   38,   38,   31,   31,
-       31,   31,   31,   31,    0,   38,   38,   38,   38,   38,
-       31,   31,   31,   31,   31,    0,   18,   29,   29,   29,
-       29,   29,   29,    0
+        0,    0,   55,   42,   50,   49,   48,   42,   53,   42,
+       43,   44,   42,   45,   42,   42,   42,   42,   47,   46,
+       53,   37,   37,   37,   37,   37,   37,   37,   53,   42,
+       42,   50,   53,   37,   37,   37,   37,   37,    1,   53,
+       42,   42,   16,   15,   16,   15,   15,   53,   53,   53,
+        2,    8,    7,    8,    3,    8,    4,   53,   12,   12,
+       12,   10,   11,   42,    0,   50,   48,   42,    0,    0,
+        0,   52,    0,   42,   32,    0,    0,   31,    0,   40,
+       40,    0,   42,   42,    0,   42,   42,   42,   42,    0,
+
+       35,   37,   37,   37,   37,   37,   37,   37,   42,   51,
+       42,   50,    0,    0,    0,    0,    0,    0,   42,   42,
+       42,   42,   42,    1,    0,   38,   38,    0,   42,   16,
+       16,   14,   13,   14,    0,    0,    2,    8,    0,    5,
+        6,    8,    8,   12,    0,   12,   12,    0,    9,   41,
+       41,    0,    0,   32,    0,    0,   42,   42,   42,   42,
+       42,    0,    0,   35,   35,   37,   37,   37,   37,   37,
+       37,   37,   37,   37,   42,    0,    0,    0,    0,    0,
+        0,   42,   42,   42,   42,   42,    0,   42,    9,    0,
+       42,   42,   42,   42,   42,   42,    0,   36,   36,   36,
+
+        0,    0,   35,   35,   35,   35,   35,   35,   35,   37,
+       37,   37,   37,   37,   37,   37,   37,   37,   42,    0,
+        0,    0,    0,    0,    0,   42,   42,   42,   42,   42,
+       42,   42,    0,    0,   36,   36,   36,    0,   35,   35,
+        0,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,    0,   24,   37,   37,   37,   37,   37,   37,
+       37,   37,   42,    0,    0,    0,    0,   42,   42,   42,
+       42,   42,   42,   42,   42,    0,   36,    0,   35,   35,
+       35,    0,    0,    0,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   37,   37,   37,
+
+       37,   37,   37,   37,   37,   42,    0,    0,    0,   42,
+       42,   42,   33,   33,   33,    0,    0,   35,   35,   35,
+       35,   35,   35,   35,    0,    0,    0,    0,    0,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   37,   37,    0,   23,   37,   37,   37,
+       37,    0,   22,    0,   25,   42,    0,    0,    0,   42,
+       42,   42,   42,   33,   33,   33,   33,    0,   35,    0,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,    0,    0,    0,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   37,   37,   37,
+
+       37,   37,   37,   39,    0,    0,    0,   42,   19,   38,
+       42,   34,   34,   34,   35,    0,    0,    0,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,    0,    0,    0,    0,    0,   35,   35,   35,   35,
+       35,   35,   35,   35,   37,   37,   37,   37,    0,   21,
+        0,   26,    0,   19,    0,    0,   42,    0,   42,   42,
+       42,   34,   34,   34,   34,   34,    0,    0,    0,    0,
+        0,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,    0,   29,   37,   37,   37,    0,    0,    0,   20,
+
+       19,    0,    0,   19,    0,   42,   42,   42,   34,   34,
+        0,    0,    0,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,    0,   27,   37,   37,   20,    0,   17,    0,   42,
+       42,   42,   42,   42,    0,    0,    0,    0,    0,   35,
+       35,   35,   35,   35,   35,   35,   35,    0,   30,   37,
+        0,   42,   42,   42,   35,   35,   35,   35,   35,   35,
+        0,   28,    0,   42,   42,   42,   42,   42,   35,   35,
+       35,   35,   35,    0,   18,   33,   33,   33,   33,   33,
+       33,    0
+
     } ;
 
 static yyconst int yy_ec[256] =
@@ -364,13 +369,13 @@ static yyconst int yy_ec[256] =
         9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,    1,    1,
        25,   26,   10,   27,   28,   29,   30,   31,   32,   29,
-       33,   34,   33,   33,   33,   33,   33,   35,   36,   37,
-       33,   38,   39,   40,   41,   42,   43,   44,   33,   33,
-       10,   45,   10,    1,   46,    1,   47,   48,   49,   50,
+       33,   34,   35,   36,   36,   37,   36,   38,   39,   40,
+       36,   41,   42,   43,   44,   45,   46,   47,   36,   36,
+       10,   48,   10,    1,   49,    1,   50,   51,   52,   53,
 
-       51,   52,   53,   53,   54,   53,   53,   55,   56,   57,
-       58,   53,   53,   59,   60,   61,   62,   53,   53,   53,
-       53,   53,    1,    1,    1,    1,    1,    1,    1,    1,
+       54,   55,   56,   56,   57,   56,   56,   58,   59,   60,
+       61,   56,   56,   62,   63,   64,   65,   56,   56,   56,
+       56,   56,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -387,563 +392,579 @@ static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[63] =
+static yyconst int yy_meta[66] =
     {   0,
         1,    2,    3,    4,    5,    2,    1,    6,    6,    1,
         1,    2,    1,    7,    8,    9,    9,    9,    9,    9,
         9,    9,    9,   10,   11,    6,    1,    9,    9,    9,
         9,    9,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,   12,   13,   14,   14,   14,   14,
-       14,   14,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13
+        1,    1,    1,    1,    1,    1,    1,   12,   13,   14,
+       14,   14,   14,   14,   14,   13,   13,   13,   13,   13,
+       13,   13,   13,   13,   13
     } ;
 
-static yyconst short int yy_base[621] =
+static yyconst short int yy_base[659] =
     {   0,
-        0,   61,   62,   63,   69,   84,  128,  189,  250,  294,
-       80,  101, 2394, 2348, 2390, 3541, 2387,  338,  381,   52,
-     3541, 3541, 2345, 3541,  107,  391,  119,  137, 2351, 3541,
-     3541,  443, 2330,  490, 2337, 2335, 2320,  541,  145,   55,
-      167,  565, 2293, 2297, 2289, 2258, 2257, 2314,  193,  256,
-       56,    0, 3541, 2311, 3541,    0,  264,  617,   77,    0,
-     2261, 3541,   82, 3541,   99, 3541,  110, 2243,  126,  106,
-     3541,  145, 2240,  306, 2282, 2279,  639, 2277, 2276, 2263,
-     3541,  201,  209,   74, 2211,  347, 2208,  550,  276, 2199,
-      587,  410,  669, 2210, 2210,  306,  358,  317, 2163,  179,
-
-      706,    0, 2154,  240, 2111, 2109,  389, 3541,   76,  355,
-     2082, 2076, 2066, 2061, 2062,   63,  115,  219,   29,  212,
-       98, 2116,  507,  361, 2071,  598,  154,    0, 2111,  256,
-     3541, 3541,  636,  284,    0, 2069,  567, 3541, 3541, 2066,
-      532, 2050, 2087,  271,  300,  288, 2089, 2038, 3541, 2057,
-     2055, 1986,  669,  603,  745,  777,  809,  841, 2014, 2003,
-      878,  268,  916,  953, 1996, 1980, 1971, 1945, 1911, 1915,
-      236, 1862, 1866, 1856, 1843, 1848,  317,  157, 1851,  307,
-      266,  258,  777,  296, 1880, 1877,  686,  402,  992, 1024,
-      725,  337, 1839, 1838,  787,  499, 1782, 1781,  343,  755,
-
-     1056,  796,  694, 1094,  819, 1745,  393, 1736, 1728, 1711,
-     1707, 1697,  373, 1681, 1666, 1651, 1664, 1623,  543,  400,
-      556,  233,  506, 1133, 1165, 1197, 1657, 1655,  827, 1640,
-     1638, 1637, 1621,  540,  858,  546,  895,  602, 1229,    0,
-      935, 1240,  970,  731, 1278, 1002,  601, 3541, 1614, 1604,
-     1610, 1595, 1583,  486, 1565, 1548, 1548,  387,  343,  380,
-      616, 1010,  423, 1317, 1349, 1044, 1555, 1554, 1553, 1506,
-     1379,  645, 1076, 1113, 1143,  652,  983, 1035, 1151, 1042,
-     1418,    0, 1175, 1429, 1184,  866, 1467, 1207,  644, 1451,
-     1458,  648,  672,  625, 1447, 1419,  680,  576,  487,  715,
-
-     1505, 1536, 1567, 1449, 1447, 1432, 1215, 1599, 1257,  903,
-     1636, 1297, 1325, 1441, 1335, 1359, 1369,  841, 1024, 1067,
-     1124, 1396, 1308, 1675,    0, 1448, 1686, 1484, 1265, 1724,
-     1515,  955, 3541, 1423, 1364,  956, 3541,  975, 3541,  807,
-     1350, 1300,  591, 1074,  569,  917, 1523,  155, 1762, 1793,
-     1546, 1336, 1300, 1553,  768, 1576,  810, 1825,    0,  429,
-     1836, 1584, 1404, 1873, 1618, 1655, 1705, 1743, 1288, 1335,
-     1734, 1772, 1772, 1803, 1912,    0, 1805, 1923, 1781, 1492,
-     1814,  993, 1156, 1276, 1251, 1244,  730,  635, 1952, 1222,
-     1984, 2016, 2048, 2080, 1242, 1855, 1892, 1943, 1241, 1184,
-
-     1198, 1964, 1350, 2112,    0,  762, 2123, 1972, 1992, 2160,
-     2000, 2024, 1227, 2034, 2058, 2068, 1369, 1609, 1934,  772,
-      806, 2199,    0,  844, 1173, 3541, 1468, 3541, 1192, 2086,
-     1389,  142,  991,  604,  736, 2140, 1038, 2209, 2241, 2273,
-     2305, 2103, 2177, 1163, 2219, 2229, 2251, 1152, 1116, 1656,
-     1706, 2257, 1837, 2337,    0,  881, 2348, 2281, 2088, 2385,
-     2291, 2314, 2323, 2366, 1855, 1122,  927, 1042, 1031,  902,
-      951,  990, 1725, 2416, 1836, 2437, 2450, 2482, 2514, 2434,
-     1951, 2464, 2492, 2502,  936,  919, 1893, 2001, 2522, 2035,
-     2546,    0, 1031, 2557, 2530, 2148, 2576,  838, 2595, 2604,
-
-     2473,  773, 3541,  659, 3541, 1065, 2612, 1195, 2644, 2676,
-     2623, 2629,  618, 2655, 2665, 2686,  573,  566, 2049,  557,
-      549, 2694,    0, 1078, 1545, 2708, 2740, 2772, 2716, 2724,
-     2748,  509,    0,  455,  357, 2756, 1535, 2804, 2836, 2786,
-     3541, 2792, 2816, 2185, 3541,  345, 3541, 2824, 2844, 2854,
-       25, 2874, 2866, 3541, 2919, 2933, 2947, 2961, 2975, 2989,
-     3003, 3017, 3031, 3045, 3051, 3065, 3079, 1107, 3093, 3107,
-     3121, 3135, 3149, 3163, 3177, 3191, 3197, 3204, 3218, 3232,
-     3238, 3245, 3251, 3257, 3263, 3270, 3276, 3282, 3288, 3295,
-     3303, 3309, 3315, 3321, 3328, 3336, 3342, 3348, 3355, 3363,
-
-     3369, 3377, 3384, 3392, 3398, 3406, 3413, 3421, 3435, 3449,
-     3455, 3463, 3470, 3484, 3490, 3498, 3504, 3512, 1600, 3526
+        0,   64,   65,   66,   72,   87,  134,  198,  262,  309,
+       83,   98, 2616, 2548, 2586, 3619, 2562,  356,  402,   58,
+     3619, 3619, 2517, 3619,  106,  412,  139,  105, 2540, 3619,
+     3619,  467, 2516,  517, 2487, 2486, 2496, 2482,  571,  149,
+       44,  175,  595, 2444, 2446, 2438, 2433, 2434, 2494,  204,
+      268,   65,    0, 3619, 2474, 3619,    0,  276,  650,  114,
+        0, 2420, 3619,   79, 3619,   93, 3619,  131, 2417,   71,
+      103, 3619,  140, 2416,  206, 2461, 2458,  672, 2456, 2428,
+     2426, 3619,  217,  286,  125, 2380,  321, 2377,  347,  328,
+     2375,  382,  322,  705, 2398, 2407,  379,  429,  393, 2387,
+
+      124,  745,    0, 2366, 2361,  253, 2351, 2347,  241, 3619,
+       99,  558, 2329, 2333, 2325, 2319, 2320,  147,  116,  214,
+      233,  181,   29, 2380,  534,  555, 2325,  617,  126,    0,
+     2359,  178, 3619, 3619,  614,  268,    0, 2297,  677, 3619,
+     3619, 2296,  315, 2295, 2337,  243,  280,  295, 2339, 2292,
+     3619, 2336, 2320, 2274,  705,  777,  789,  824,  859,  894,
+     2307, 2259,  934,  129,  975, 1015, 2252, 2232, 2224, 2221,
+     2229, 2224, 2213, 2222,  287, 2193, 2197, 2162, 2162, 2167,
+      323,  321, 2170,  235,  163,  304,  811,  331, 2217, 2215,
+      638,  369, 1057, 1092,  724,  379, 2193, 2184,  730,  421,
+
+     2166, 2163,  363,  628, 1127,  808,  437, 1168,  834, 2162,
+      365,  434, 2153, 2151, 2141, 2139, 2119, 2117,  422, 2099,
+     2095, 2069, 2082, 2069,  413,  444,  542,  495,  528, 1210,
+     1245, 1280, 2106, 2105,  842, 2097, 2074, 2072, 2035,  563,
+      867,  570,  875,  586, 1315,    0,  885, 1326,  911,  674,
+     1367,  953,  603, 3619, 2006, 1993, 2006, 1986, 1962, 1965,
+     1965, 1929,  538, 1922, 1905, 1906,  328,  431,   21,  556,
+      920,  592, 1409, 1444,  994, 1944, 1942, 1874, 1872, 1477,
+      684, 1034, 1067, 1077,  686,  691,  756, 1000,  767, 1519,
+        0, 1102, 1530, 1111,  961, 1571, 1146, 1854, 1831,  663,
+
+      526, 1809, 1816,  790,  791,  655, 1823, 1742,  239,  580,
+      640,  721, 1612, 1646, 1680, 1774, 1765, 1757, 1185, 1715,
+     1193, 1042, 1755, 1220, 1228, 1766, 1255, 1265, 1290,  770,
+      985, 1025, 1298, 1298, 1337, 1797,    0, 1348, 1808, 1384,
+     1154, 1849, 1419, 1697, 1690,  847, 3619, 1689, 1682, 1693,
+     1632,  959, 3619, 1000, 3619,  652, 1618, 1595,  539, 1044,
+      576,  740, 1427,  670, 1890, 1924, 1462, 1634, 1633, 1392,
+      808, 1468, 1058, 1959,    0,  764, 1970, 1495, 1236, 2010,
+     1549, 1590, 1622, 1632, 1137, 1265, 1656, 1658, 1503, 1660,
+     2052,    0, 1690, 2063, 1669, 1435, 1699, 1534, 1531, 1534,
+
+     1530, 1100, 1101, 1509, 1447, 1439,  816,  572, 1849, 1428,
+     2105, 2140, 2175, 2210, 1450, 1734, 1774, 1827, 1368, 1211,
+     1246, 1866, 1281, 2245,    0,  798, 2256, 1898, 1452, 2296,
+     1908, 1932, 1346, 1942, 1989, 2029, 1540, 1581, 2073,  819,
+      853, 2338,    0,  896, 1152, 1284, 1248, 1113, 1193, 3619,
+     1351, 3619, 1089, 1552, 2087,  813,  872,  671, 1322, 2087,
+     1090, 2348, 2383, 2418, 2453, 1785, 2035, 1123, 2120, 2150,
+     2130, 1083, 1040, 1410, 1623, 2158, 1669, 2488,    0,  937,
+     2499, 2183, 1598, 2539, 2193, 2219, 2228, 2274, 1725, 1026,
+     1121, 1369, 3619, 1392,  958,  877,  811,  836, 1594,  742,
+
+     1455, 1675, 2383, 1677, 2418, 2581, 2616, 2651, 2282, 1875,
+     2315, 2358, 2396,  760,  715, 1828, 1943, 2429, 1971, 2686,
+        0, 1171, 2697, 2437, 1742, 2463,  717, 2472, 2517, 1998,
+      649, 1596, 3619, 1740,  619, 3619,  559, 3619, 1288, 2525,
+     1311, 2739, 2774, 2558, 2564,  530, 2591, 2601, 2626,  451,
+      437, 2087,  371,  363, 2634,    0, 1301, 1780, 3619, 1832,
+     2097, 2809, 2844, 2879, 2659, 2667, 2675,  326,    0,  305,
+     1833, 3619,  200, 2715, 1664, 2914, 2949, 2725, 3619, 2748,
+     2758, 1916, 3619,  175, 3619, 2785, 2793, 2826,  127, 2859,
+     2835, 3619, 2997, 3011, 3025, 3039, 3053, 3067, 3081, 3095,
+
+     3109, 3123, 3129, 3143, 3157, 1360, 3171, 3185, 3199, 3213,
+     3227, 3241, 3255, 3269, 3275, 3282, 3296, 3310, 3316, 3323,
+     3329, 3335, 3341, 3348, 3354, 3360, 3366, 3373, 3381, 3387,
+     3393, 3399, 3406, 3414, 3420, 3426, 3433, 3441, 3447, 3455,
+     3462, 3470, 3476, 3484, 3491, 3499, 3513, 3527, 3533, 3541,
+     3548, 3562, 3568, 3576, 3582, 3590, 1881, 3604
     } ;
 
-static yyconst short int yy_def[621] =
+static yyconst short int yy_def[659] =
     {   0,
-      554,    1,    1,    1,  555,  555,  556,  556,  557,  557,
-      558,  558,  554,  559,  554,  554,  554,  560,  561,  562,
-      554,  554,  563,  554,  564,  559,   26,   26,  565,  554,
-      554,  554,   32,   32,   34,   34,   34,  559,   26,  559,
-      554,  561,   32,   32,   34,   34,   34,  554,  554,  566,
-      559,  567,  554,  567,  554,  567,  554,  561,  554,  568,
-      569,  554,  569,  554,  569,  554,  570,  571,  571,  571,
-      554,  554,  559,  559,  554,  554,  560,  572,  560,  573,
-      554,  574,  554,  562,  575,  562,  563,  563,  564,  576,
-      559,  559,   26,  565,   93,   93,   93,   93,  577,  578,
-
-       32,   34,   34,   34,   34,   34,  559,  554,  559,  554,
-      554,  554,  554,  554,  554,  573,  559,   93,  559,  559,
-      559,  554,  554,  566,  579,  559,  559,  567,  567,  554,
-      554,  554,  574,  554,  568,  569,  569,  554,  554,  569,
-      569,  571,  554,  571,  571,  554,  554,  559,  554,  573,
-      580,  575,  575,  554,  559,  559,  559,   93,  158,  581,
-      554,  582,  554,   32,   34,   34,   34,   34,   34,   34,
-      559,  554,  554,  554,  554,  554,  573,  559,  158,  559,
-      559,  559,  554,  559,  554,  580,  559,  559,  559,  559,
-      559,  559,  583,  584,  584,  195,  585,  584,  586,  163,
-
-      554,  201,  201,  554,  201,   34,   34,   34,   34,   34,
-       34,   34,  559,  554,  554,  554,  554,  554,  573,  559,
-      559,  559,  559,  559,  559,  559,  554,  587,  587,  229,
-      587,  588,  589,  590,  554,  591,  204,  591,  591,  239,
-      591,  554,  242,  242,  554,  242,  554,  554,   34,   34,
-       34,   34,   34,  559,  554,  554,  554,  573,  559,  559,
-      559,  559,  559,  559,  559,  559,  592,  592,  593,  594,
-      554,  554,  554,  554,  554,  595,  595,  596,  245,  596,
-      596,  281,  596,  554,  284,  284,  554,  284,   34,   34,
-       34,   34,   34,  559,  554,  554,  573,  559,  559,  559,
-
-      559,  559,  559,  554,  597,  598,  271,  554,  308,  308,
-      554,  308,  554,  554,  554,  554,  554,  554,  599,  599,
-      600,  287,  600,  600,  324,  600,  554,  327,  327,  554,
-      327,  554,  554,   34,   34,  554,  554,  554,  554,  559,
-      554,  554,  573,  559,  559,  559,  559,  559,  559,  559,
-      559,  554,  601,  554,  602,  311,  602,  602,  358,  358,
-      554,  361,  361,  554,  361,  554,  554,  554,  554,  603,
-      603,  604,  330,  604,  604,  375,  604,  554,  378,  378,
-      378,   34,   34,  559,  554,  554,  573,  559,  559,  559,
-      559,  559,  559,  559,  554,  554,  554,  554,  605,  605,
-
-      606,  364,  606,  606,  404,  404,  554,  407,  407,  554,
-      407,  554,  554,  554,  554,  554,  554,  607,  607,  608,
-      608,  608,  422,  422,  554,  554,  554,  554,  554,  554,
-      573,  573,  559,  609,  610,  559,  559,  559,  559,  559,
-      559,  559,  554,  554,  554,  554,  554,  554,  611,  611,
-      612,  410,  612,  612,  454,  454,  554,  457,  457,  554,
-      457,  554,  554,  554,  554,  613,  613,  554,  614,  573,
-      559,  609,  609,  609,  610,  610,  559,  559,  559,  559,
-      559,  554,  554,  554,  554,  615,  615,  616,  460,  616,
-      616,  491,  491,  554,  494,  494,  494,  554,  554,  554,
-
-      554,  554,  554,  614,  554,  573,  559,  559,  559,  559,
-      559,  554,  554,  554,  554,  554,  554,  617,  617,  618,
-      618,  618,  522,  522,  573,  559,  559,  559,  554,  554,
-      554,  554,  619,  619,  620,  559,  559,  559,  559,  559,
-      554,  554,  554,  554,  554,  620,  554,  559,  559,  559,
-      559,  559,  559,    0,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554
+      592,    1,    1,    1,  593,  593,  594,  594,  595,  595,
+      596,  596,  592,  597,  592,  592,  592,  598,  599,  600,
+      592,  592,  601,  592,  602,  597,   26,   26,  603,  592,
+      592,  592,   32,   32,   34,   34,   34,   34,  597,   26,
+      597,  592,  599,   32,   32,   34,   34,   34,  592,  592,
+      604,  597,  605,  592,  605,  592,  605,  592,  599,  592,
+      606,  607,  592,  607,  592,  607,  592,  608,  609,  609,
+      609,  592,  592,  597,  597,  592,  592,  598,  610,  598,
+      611,  592,  612,  592,  600,  613,  600,  601,  601,  602,
+      614,  597,  597,   26,  603,   94,   94,   94,   94,  615,
+
+      616,   32,   34,   34,   34,   34,   34,   34,  597,  592,
+      597,  592,  592,  592,  592,  592,  592,  611,  597,   94,
+      597,  597,  597,  592,  592,  604,  617,  597,  597,  605,
+      605,  592,  592,  592,  612,  592,  606,  607,  607,  592,
+      592,  607,  607,  609,  592,  609,  609,  592,  592,  597,
+      592,  611,  618,  613,  613,  592,  597,  597,  597,   94,
+      160,  619,  592,  620,  592,   32,   34,   34,   34,   34,
+       34,   34,   34,   34,  597,  592,  592,  592,  592,  592,
+      611,  597,  160,  597,  597,  597,  592,  597,  592,  618,
+      597,  597,  597,  597,  597,  597,  621,  622,  622,  199,
+
+      623,  622,  624,  165,  592,  205,  205,  592,  205,   34,
+       34,   34,   34,   34,   34,   34,   34,   34,  597,  592,
+      592,  592,  592,  592,  611,  597,  597,  597,  597,  597,
+      597,  597,  592,  625,  625,  235,  625,  626,  627,  628,
+      592,  629,  208,  629,  629,  245,  629,  592,  248,  248,
+      592,  248,  592,  592,   34,   34,   34,   34,   34,   34,
+       34,   34,  597,  592,  592,  592,  611,  597,  597,  597,
+      597,  597,  597,  597,  597,  630,  630,  631,  632,  592,
+      592,  592,  592,  592,  633,  633,  634,  251,  634,  634,
+      290,  634,  592,  293,  293,  592,  293,   34,   34,   34,
+
+       34,   34,   34,   34,   34,  597,  592,  592,  611,  597,
+      597,  597,  597,  597,  597,  592,  635,  636,  280,  592,
+      320,  320,  592,  320,  592,  592,  592,  592,  592,  592,
+      637,  637,  638,  296,  638,  638,  336,  638,  592,  339,
+      339,  592,  339,   34,   34,  592,  592,   34,   34,   34,
+       34,  592,  592,  592,  592,  597,  592,  592,  611,  597,
+      597,  597,  597,  597,  597,  597,  597,  592,  639,  592,
+      640,  323,  640,  640,  374,  374,  592,  377,  377,  592,
+      377,  592,  592,  592,  592,  641,  641,  642,  342,  642,
+      642,  391,  642,  592,  394,  394,  394,   34,   34,   34,
+
+       34,   34,   34,  597,  592,  592,  611,  597,  597,  597,
+      597,  597,  597,  597,  592,  592,  592,  592,  643,  643,
+      644,  380,  644,  644,  424,  424,  592,  427,  427,  592,
+      427,  592,  592,  592,  592,  592,  592,  645,  645,  646,
+      646,  646,  442,  442,   34,   34,   34,   34,  592,  592,
+      592,  592,  592,  592,  611,  611,  597,  647,  648,  597,
+      597,  597,  597,  597,  597,  597,  592,  592,  592,  592,
+      592,  592,  649,  649,  650,  430,  650,  650,  478,  478,
+      592,  481,  481,  592,  481,  592,  592,  592,  592,  651,
+      651,  592,  592,   34,   34,   34,  592,  652,  611,  597,
+
+      647,  647,  647,  648,  648,  597,  597,  597,  597,  597,
+      592,  592,  592,  592,  653,  653,  654,  484,  654,  654,
+      520,  520,  592,  523,  523,  523,  592,  592,  592,  592,
+      592,  592,  592,   34,   34,  592,  652,  592,  611,  597,
+      597,  597,  597,  597,  592,  592,  592,  592,  592,  592,
+      655,  655,  656,  656,  656,  555,  555,  592,  592,   34,
+      611,  597,  597,  597,  592,  592,  592,  592,  657,  657,
+      592,  592,  658,  597,  597,  597,  597,  597,  592,  592,
+      592,  592,  592,  658,  592,  597,  597,  597,  597,  597,
+      597,    0,  592,  592,  592,  592,  592,  592,  592,  592,
+
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592
     } ;
 
-static yyconst short int yy_nxt[3604] =
+static yyconst short int yy_nxt[3685] =
     {   0,
        14,   15,   16,   17,   18,   19,   20,   21,   22,   14,
        23,   24,   14,   14,   25,   26,   27,   28,   26,   26,
        26,   26,   26,   29,   30,   31,   14,   32,   32,   32,
-       32,   33,   34,   34,   35,   34,   36,   34,   37,   34,
-       34,   34,   34,   34,   38,   14,   39,   39,   39,   39,
-       39,   39,   14,   14,   14,   14,   14,   14,   14,   40,
-       14,   14,   41,   48,   48,   81,   42,   49,   49,   74,
-       15,   53,   54,   74,   55,   85,   50,   50,  134,  108,
-       55,   69,   16,   70,   71,   15,   53,   54,  180,   55,
-       43,   44,   55,   56,   45,   55,   86,  554,   46,   74,
-
-       74,   47,   69,   16,   70,   71,  138,   55,   56,  145,
-       90,  141,  108,   57,   90,   90,  109,  127,   86,  177,
-       74,   51,   51,  139,   72,  171,  137,  144,   57,   15,
-       16,   17,   90,   58,   96,   96,   96,   96,   96,   96,
-       96,   96,   74,  137,   81,   72,  146,  147,  182,  142,
-      143,   91,   97,   97,   97,   97,   97,   98,   73,   74,
-       95,   95,   95,   95,   95,   95,   95,   95,  110,  347,
-      143,  178,   59,   60,   60,   60,   60,   60,   60,   60,
-       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
-       15,   16,   17,  161,   58,  470,  111,  112,   74,   74,
-
-      113,   74,  163,  184,  114,  123,  220,  115,   83,   83,
-       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
-       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
-       83,   83,   73,   59,   60,   60,   60,   60,   60,   60,
-       60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
-       60,   15,   16,   17,   62,   58,   74,  134,  108,  125,
-       63,   64,   65,  125,  125,  130,  108,  131,  181,  132,
-      179,  166,  144,  131,   66,  132,  167,   74,  168,   90,
-       74,  125,  161,   90,   90,  134,  108,  132,  132,  146,
-      147,  200,  220,  213,   67,   15,   16,   17,   62,   58,
-
-      126,   90,   74,  145,   63,   64,   65,   73,  132,   73,
-       74,   73,  222,   73,   73,  143,  220,   73,   66,   81,
-       91,  159,  159,  159,  159,  159,  159,  159,  159,   73,
-       73,   73,  159,  159,  159,  159,  159,  159,   67,   78,
-       74,   78,   73,   78,  143,   78,   78,  547,   84,   78,
-       84,   74,   84,  223,   84,   84,  110,  161,   84,  547,
-       94,   78,   78,   78,  125,  219,  200,  220,  125,  125,
-      298,   84,   84,  159,  159,  159,  159,  159,  159,  159,
-      159,   74,   79,   81,  111,  112,  125,   74,  113,   81,
-      134,  108,  114,   82,  247,  115,   83,   83,   83,   83,
-
-       83,   83,   83,   83,   92,  126,   93,   93,   93,   93,
-       93,   93,   93,   93,   94,  187,  248,   74,   95,   95,
-       95,   95,   95,  254,   74,  155,  156,  157,  155,  155,
-      155,  155,  155,   74,  299,   74,  262,   95,   95,   95,
-       95,   95,   95,   73,   74,  259,   74,   73,  297,   73,
-      399,  399,   73,   73,   74,   73,   73,   73,  101,  101,
-      101,  101,  101,  101,  101,  101,   94,   74,  354,   73,
-      101,  101,  101,  101,  101,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  102,  102,   74,  102,   95,
-       95,   95,   95,   95,   95,   73,   73,   73,   73,   73,
-
-       73,   73,   73,   73,   73,  102,  102,  102,  102,  102,
-      102,  102,  102,  554,  231,  231,  231,  102,  102,  102,
-      102,  102,   83,   83,   83,   83,   83,   83,   83,   83,
-       74,   74,  489,  134,  108,  294,   73,   73,   73,   73,
-       73,   73,  107,  108,   73,   81,   73,  345,   73,   73,
-       74,   87,   73,   87,  161,   87,  261,   87,   87,  235,
-      161,   87,  554,  200,   73,   73,   73,   81,  136,  237,
-      354,  136,  136,   87,   87,   87,  137,   82,  136,   94,
-       83,   83,   83,   83,   83,   83,   83,   83,   89,  489,
-       73,  136,   89,   81,   73,   73,  452,  258,   89,  124,
-
-       74,   73,  247,  124,   90,   73,   73,  473,   90,  124,
-       89,   89,   73,   74,   90,  554,  161,  260,  116,   81,
-       74,  124,  124,   73,  248,  237,   90,   90,  389,  133,
-      344,  512,  554,  554,  554,  554,  554,  554,  554,  554,
-       78,  387,   78,  148,   78,  332,   78,   78,  474,  336,
-       78,  554,  554,  554,  554,  554,  554,  554,  554,  161,
-       74,  505,   78,   78,   78,  300,  161,  333,  200,   74,
-      152,  337,  152,  338,  152,  237,  152,  152,  340,   74,
-      152,  433,   81,   79,  158,  158,  158,  158,  158,  158,
-      158,  158,  152,  152,  152,  339,  158,  158,  158,  158,
-
-      158,  224,  225,  226,  224,  224,  224,  224,  224,  240,
-      240,  240,  240,  240,  241,  158,  158,  158,  158,  158,
-      158,  164,  164,  164,  164,  164,  164,  164,  164,  343,
-       74,  431,   81,  164,  164,  164,  164,  164,  187,  473,
-      188,  188,  188,  188,  188,  188,  282,  282,  282,  282,
-      282,  283,  158,  158,  158,  158,  158,  158,  187,   74,
-      188,  188,  188,  188,  188,  188,  188,  188,  346,   74,
-      205,  205,  205,  205,  205,  205,  205,  205,  125,  432,
-      476,  354,  125,  449,  449,  235,  161,  161,  125,   74,
-      187,  356,  189,  189,  189,  189,  189,  189,  189,  189,
-
-      125,  125,  229,  229,  230,  231,  231,  231,  231,  231,
-      197,  239,  239,  239,  239,  239,  239,  239,  239,  554,
-      161,   74,  187,  554,  190,  190,  190,  190,  190,  191,
-      188,  188,  554,  356,  238,  238,  238,  238,  238,  238,
-      238,  238,  268,  268,  268,  268,  268,  268,  268,  268,
-      197,   74,  161,   74,   73,  161,  192,  192,  192,  192,
-      192,  192,  192,  192,  237,  466,  466,  384,  192,  192,
-      192,  192,  192,  273,  274,  275,  273,  273,  273,  273,
-      273,  325,  325,  325,  325,  325,  326,  192,  192,  192,
-      192,  192,  192,  194,  195,  196,  196,  196,  196,  196,
-
-      196,  197,  486,  486,   81,  198,  198,  198,  198,  198,
-      246,  246,  246,  246,  246,  246,  246,  246,  359,  359,
-      359,  359,  359,  360,  198,  198,  198,  198,  198,  198,
-      161,  201,  202,  203,  201,  201,  201,  201,  201,  204,
-      235,  161,  452,  205,  205,  205,  205,  205,  235,  161,
-      277,  277,  277,  277,  277,  277,  332,  336,  237,  402,
-      506,   74,  205,  205,  205,  205,  205,  205,  206,  206,
-      206,  206,  206,  206,  206,  206,  338,  390,  333,  337,
-      206,  206,  206,  206,  206,  281,  281,  281,  281,  281,
-      281,  281,  281,  554,  425,   74,  235,  161,  339,  192,
-
-      192,  192,  192,  192,  192,  187,  237,  188,  188,  188,
-      188,  188,  188,  188,  188,  554,  426,  280,  280,  280,
-      280,  280,  280,  280,  280,  301,  302,  303,  301,  301,
-      301,  301,  301,  505,  474,   74,   74,  187,  161,  188,
-      188,  188,  188,  188,  188,  188,  188,  279,  235,  161,
-      471,  436,  518,  518,   74,  554,  161,  262,  279,  263,
-      263,  263,  263,  263,  263,  279,  525,   81,   74,  235,
-      161,  236,  236,  236,  236,  236,  236,  236,  236,  237,
-      235,  161,   74,  238,  238,  238,  238,  238,   74,  313,
-      279,  314,  314,  314,  314,  314,  314,  314,  314,  533,
-
-      533,  503,  238,  238,  238,  238,  238,  238,  161,  242,
-      243,  244,  242,  242,  242,  242,  242,  245,   74,  135,
-      135,  246,  246,  246,  246,  246,  313,  388,  315,  315,
-      315,  315,  315,  315,  315,  315,  161,  235,  161,  402,
-      246,  246,  246,  246,  246,  246,  262,  322,  263,  263,
-      263,  263,  263,  263,  263,  263,  313,  427,  316,  316,
-      316,  316,  316,  317,  314,  314,  288,  288,  288,  288,
-      288,  288,  288,  288,  425,  356,  443,   74,  262,  428,
-      264,  264,  264,  264,  264,  264,  264,  264,  235,  161,
-      320,  320,  320,  320,  320,  320,  426,  354,  279,  324,
-
-      324,  324,  324,  324,  324,  324,  324,  356,  507,   74,
-      262,  354,  265,  265,  265,  265,  265,  266,  263,  263,
-      554,  402,  323,  323,  323,  323,  323,  323,  323,  323,
-      312,  312,  312,  312,  312,  312,  312,  312,  468,   74,
-      412,   74,  235,  161,  277,  277,  277,  277,  277,  277,
-      277,  277,  237,  235,  161,  278,  278,  278,  278,  278,
-      278,  278,  278,  279,  356,  307,   74,  280,  280,  280,
-      280,  280,  358,  358,  358,  358,  358,  358,  358,  358,
-      376,  376,  376,  376,  376,  377,  280,  280,  280,  280,
-      280,  280,  161,  284,  285,  286,  284,  284,  284,  284,
-
-      284,  287,  161,  430,  429,  288,  288,  288,  288,  288,
-      554,  279,  357,  357,  357,  357,  357,  357,  357,  357,
-       74,  554,  161,  307,  288,  288,  288,  288,  288,  288,
-      262,  322,  263,  263,  263,  263,  263,  263,  263,  263,
-      366,  367,  368,  366,  366,  366,  366,  366,  313,  161,
-      314,  314,  314,  314,  314,  314,  314,  314,  322,  233,
-      386,   74,  262,  554,  263,  263,  263,  263,  263,  263,
-      263,  263,  313,  402,  314,  314,  314,  314,  314,  314,
-      314,  314,  313,  161,  314,  314,  314,  314,  314,  314,
-      431,   81,  322,   74,  308,  309,  310,  308,  308,  308,
-
-      308,  308,  311,  469,  385,  383,  312,  312,  312,  312,
-      312,  331,  331,  331,  331,  331,  331,  331,  331,  405,
-      405,  405,  405,  405,  406,  312,  312,  312,  312,  312,
-      312,  235,  161,  320,  320,  320,  320,  320,  320,  320,
-      320,  279,  235,  161,  321,  321,  321,  321,  321,  321,
-      321,  321,  322,  382,  313,  307,  323,  323,  323,  323,
-      323,  235,  161,  371,  371,  371,  371,  371,  371,  427,
-      233,  322,  197,  342,  341,  323,  323,  323,  323,  323,
-      323,  161,  327,  328,  329,  327,  327,  327,  327,  327,
-      330,  428,  335,  334,  331,  331,  331,  331,  331,  375,
-
-      375,  375,  375,  375,  375,  375,  375,  423,  423,  423,
-      423,  423,  424,  331,  331,  331,  331,  331,  331,  347,
-      348,  348,  348,  348,  348,  348,  348,  348,  554,  307,
-      374,  374,  374,  374,  374,  374,  374,  374,  391,  392,
-      393,  394,  391,  391,  391,  391,  525,   81,  536,   74,
-      347,  349,  349,  349,  349,  349,  349,  349,  349,  535,
-      347,  348,  348,  348,  348,  348,  348,   74,  396,  397,
-      398,  396,  396,  396,  396,  396,  233,  197,  197,   74,
-       74,  347,  350,  350,  350,  350,  350,  351,  348,  348,
-       74,  365,  365,  365,  365,  365,  365,  365,  365,  404,
-
-      404,  404,  404,  404,  404,  404,  404,  255,  545,  296,
-      295,   74,  354,  545,  355,  355,  355,  355,  355,  355,
-      355,  355,  356,  161,  293,  292,  357,  357,  357,  357,
-      357,  554,  373,  403,  403,  403,  403,  403,  403,  403,
-      403,  291,  290,  289,  271,  357,  357,  357,  357,  357,
-      357,  361,  362,  363,  361,  361,  361,  361,  361,  364,
-      233,  197,  267,  365,  365,  365,  365,  365,  412,  354,
-      413,  413,  413,  413,  413,  413,  413,  413,  197,  402,
-      100,  255,  365,  365,  365,  365,  365,  365,  235,  161,
-      371,  371,  371,  371,  371,  371,  371,  371,  322,  235,
-
-      161,  372,  372,  372,  372,  372,  372,  372,  372,  373,
-      257,  255,  256,  374,  374,  374,  374,  374,  412,  354,
-      414,  414,  414,  414,  414,  414,  414,  414,  554,  452,
-      255,  253,  374,  374,  374,  374,  374,  374,  161,  378,
-      379,  380,  378,  378,  378,  378,  378,  235,  161,  252,
-      251,  381,  381,  381,  381,  381,  412,  322,  415,  415,
-      415,  415,  415,  416,  413,  413,  250,  249,   94,  474,
-      381,  381,  381,  381,  381,  381,  347,  348,  348,  348,
-      348,  348,  348,  348,  348,  235,  161,  381,  381,  381,
-      381,  381,  381,  381,  381,  373,  422,  422,  422,  422,
-
-      422,  422,  422,  422,  197,  233,   74,  347,  348,  348,
-      348,  348,  348,  348,  348,  348,  554,  161,  235,  161,
-      419,  419,  419,  419,  419,  419,  373,  554,  373,  421,
-      421,  421,  421,  421,  421,  421,  421,   74,  354,  554,
-      400,  400,  400,  400,  400,  400,  400,  400,  356,  354,
-      554,  401,  401,  401,  401,  401,  401,  401,  401,  402,
-      452,  197,  100,  403,  403,  403,  403,  403,  443,  161,
-      444,  444,  444,  444,  444,  444,  444,  444,  373,   81,
-      476,  185,  403,  403,  403,  403,  403,  403,  407,  408,
-      409,  407,  407,  407,  407,  407,  410,  221,  218,  217,
-
-      411,  411,  411,  411,  411,  443,  354,  445,  445,  445,
-      445,  445,  445,  445,  445,  216,  452,  215,  214,  411,
-      411,  411,  411,  411,  411,  235,  161,  419,  419,  419,
-      419,  419,  419,  419,  419,  373,  235,  161,  420,  420,
-      420,  420,  420,  420,  420,  420,  212,  235,  161,  211,
-      421,  421,  421,  421,  421,  434,  443,  373,  446,  446,
-      446,  446,  446,  447,  444,  444,  481,  481,  481,  421,
-      421,  421,  421,  421,  421,  434,  210,  434,  435,  411,
-      411,  411,  411,  411,  411,  411,  411,  454,  454,  454,
-      454,  454,  454,  454,  454,   74,   74,  436,  209,  437,
-
-      437,  437,  437,  437,  437,  437,  437,  455,  455,  455,
-      455,  455,  456,  554,  354,  453,  453,  453,  453,  453,
-      453,  453,  453,  208,  489,  207,  100,   92,   74,  436,
-      153,  438,  438,  438,  438,  438,  438,  438,  438,  462,
-      463,  464,  462,  462,  462,  462,  462,  412,  554,  413,
-      413,  413,  413,  413,  413,  413,  413,   81,  489,   81,
-       74,  436,  354,  439,  439,  439,  439,  439,  440,  441,
-      441,  412,  489,  413,  413,  413,  413,  413,  413,  413,
-      413,  412,   74,  413,  413,  413,  413,  413,  413,  434,
-      185,  142,   74,  436,  143,  442,  442,  442,  437,  437,
-
-      437,  437,  437,  492,  492,  492,  492,  492,  493,  434,
-      137,  434,  434,  137,  129,  183,  436,  122,  481,  481,
-      481,  176,  175,  174,   74,  354,  173,  450,  450,  450,
-      450,  450,  450,  450,  450,  402,  354,  172,  451,  451,
-      451,  451,  451,  451,  451,  451,  452,   74,  170,  169,
-      453,  453,  453,  453,  453,  477,  478,  479,  477,  477,
-      477,  477,  477,  523,  523,  523,  523,  523,  524,  453,
-      453,  453,  453,  453,  453,  457,  458,  459,  457,  457,
-      457,  457,  457,  460,   74,  165,  100,  461,  461,  461,
-      461,  461,  482,  483,  484,  482,  482,  482,  482,  482,
-
-      541,  541,  541,  541,  541,  541,  461,  461,  461,  461,
-      461,  461,  235,  161,  467,  467,  467,  467,  467,  467,
-      467,  467,  436,   73,  441,  441,  441,  441,  441,  441,
-      441,  441,  443,  100,  444,  444,  444,  444,  444,  444,
-      444,  444,  443,  154,  444,  444,  444,  444,  444,  444,
-      444,  444,   88,   74,  436,  153,  441,  441,  441,  441,
-      441,  441,  441,  441,  443,   81,  444,  444,  444,  444,
-      444,  444,  461,  461,  461,  461,  461,  461,  461,  461,
-      148,  149,   76,   75,   74,   74,  436,  143,  441,  441,
-      441,  441,  441,  441,  480,  480,  491,  491,  491,  491,
-
-      491,  491,  491,  491,  554,  137,  490,  490,  490,  490,
-      490,  490,  490,  490,  129,  122,  121,   74,  436,  120,
-      480,  480,  480,  480,  480,  480,  480,  480,  161,  498,
-      498,  498,  498,  498,  498,  498,  498,  161,  499,  499,
-      499,  499,  499,  499,  499,  499,  119,  118,  117,   74,
-      354,  106,  487,  487,  487,  487,  487,  487,  487,  487,
-      452,  354,  105,  488,  488,  488,  488,  488,  488,  488,
-      488,  489,  104,  103,  100,  490,  490,  490,  490,  490,
-      161,  500,  500,  500,  500,  500,  501,  498,  498,   88,
-       76,   75,   74,  554,  490,  490,  490,  490,  490,  490,
-
-      494,  495,  496,  494,  494,  494,  494,  494,  554,  554,
-      554,  554,  497,  497,  497,  497,  497,  472,  554,  554,
-      554,  472,  554,  472,  472,  554,  554,  472,  554,  554,
-      554,  497,  497,  497,  497,  497,  497,  554,  475,  472,
-      472,  472,  475,  554,  475,  475,  554,  554,  475,  480,
-      480,  480,  480,  480,  480,  480,  480,  554,  554,  554,
-      475,  475,  475,  507,  554,  508,  508,  508,  508,  508,
-      508,  508,  508,  554,  554,  554,  554,  512,   74,  513,
-      513,  513,  513,  513,  513,  513,  513,  161,  498,  498,
-      498,  498,  498,  498,   74,  507,  554,  509,  509,  509,
-
-      509,  509,  509,  509,  509,  512,  554,  514,  514,  514,
-      514,  514,  514,  514,  514,  512,  554,  515,  515,  515,
-      515,  515,  516,  513,  513,  554,   74,  507,  554,  510,
-      510,  510,  510,  510,  511,  508,  508,  497,  497,  497,
-      497,  497,  497,  497,  497,  522,  522,  522,  522,  522,
-      522,  522,  522,  554,  554,  554,  554,  554,   74,  354,
-      554,  519,  519,  519,  519,  519,  519,  519,  519,  489,
-      354,  554,  520,  520,  520,  520,  520,  520,  520,  520,
-      554,  554,  554,  554,  521,  521,  521,  521,  521,  554,
-      554,  521,  521,  521,  521,  521,  521,  521,  521,  554,
-
-      554,  554,  554,  521,  521,  521,  521,  521,  521,  161,
-      498,  498,  498,  498,  498,  498,  498,  498,  161,  498,
-      498,  498,  498,  498,  498,  498,  498,  526,  527,  528,
-      526,  526,  526,  526,  526,  554,  507,  554,  508,  508,
-      508,  508,  508,  508,  529,  530,  531,  529,  529,  529,
-      529,  529,  554,  554,  554,  554,   74,  507,  554,  508,
-      508,  508,  508,  508,  508,  508,  508,   74,  512,  554,
-      513,  513,  513,  513,  513,  513,  513,  513,  512,  554,
-      513,  513,  513,  513,  513,  513,  513,  513,   74,  507,
-      554,  508,  508,  508,  508,  508,  508,  508,  508,  512,
-
-      554,  513,  513,  513,  513,  513,  513,  354,  554,  534,
-      534,  534,  534,  534,  534,  534,  534,  554,  554,  554,
-       74,  536,  554,  537,  537,  537,  537,  537,  537,  537,
-      537,  541,  541,  541,  541,  541,  541,  541,  541,  542,
-      542,  542,  542,  542,  542,  542,  542,  554,  554,  554,
-      554,  554,   74,  536,  554,  538,  538,  538,  538,  538,
-      538,  538,  538,  543,  543,  543,  543,  543,  544,  541,
-      541,  548,  549,  550,  548,  548,  548,  548,  548,  554,
-      554,  554,  554,  554,   74,  536,  554,  539,  539,  539,
-      539,  539,  540,  537,  537,  554,  554,  554,  554,  536,
-
-       74,  537,  537,  537,  537,  537,  537,  541,  541,  541,
-      541,  541,  541,  541,  541,  554,   74,  536,  554,  537,
-      537,  537,  537,  537,  537,  537,  537,  554,  554,  554,
-       74,  541,  541,  541,  541,  541,  541,  541,  541,  551,
-      551,  551,  551,  551,  551,  551,  551,  554,   74,  536,
-      554,  537,  537,  537,  537,  537,  537,  537,  537,  548,
-      548,  548,  548,  548,  548,  548,  548,  554,   74,  552,
-      552,  552,  552,  552,  553,  551,  551,  554,  554,  554,
-       74,  551,  551,  551,  551,  551,  551,  554,   74,  551,
-      551,  551,  551,  551,  551,  551,  551,  554,   74,  554,
-
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-       74,  554,  554,  554,  554,  554,  554,  554,   74,   52,
-       52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
-       52,   52,   52,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   61,   61,   61,
+       32,   33,   34,   34,   34,   34,   35,   36,   34,   37,
+       34,   38,   34,   34,   34,   34,   34,   39,   14,   40,
+       40,   40,   40,   40,   40,   14,   14,   14,   14,   14,
+       14,   14,   41,   14,   14,   42,   49,   49,   75,   43,
+       50,   50,  146,   15,   54,   55,   75,   56,  311,   51,
+       51,   86,  186,   56,   70,   16,   71,   72,   15,   54,
+       55,   75,   56,   44,   45,   56,   57,   46,   56,   70,
+
+       16,   71,   72,  140,   47,   87,  147,   48,  111,   91,
+       56,   57,   75,   91,   91,  136,  110,  141,  145,   58,
+       98,   98,   98,   98,   98,   99,  139,   52,   52,  129,
+       73,   91,  143,  110,   58,   15,   16,   17,  163,   59,
+      139,  148,  149,  163,  144,   73,   75,  165,  592,   82,
+      145,  175,  204,   92,   97,   97,   97,   97,   97,   97,
+       97,   97,   74,   75,   96,   96,   96,   96,   96,   96,
+       96,   96,   87,   75,   75,  182,  112,  585,  188,  136,
+      110,   60,   61,   61,   61,   61,   61,   61,   61,   61,
+       61,   61,   61,   61,   61,   61,   61,   61,   61,   15,
+
+       16,   17,  585,   59,  113,  114,  181,   74,  115,   74,
+       75,   74,  228,   74,   74,  116,  125,   74,  117,   84,
+       84,   84,   84,   84,   84,   84,   84,   74,   75,   74,
+       74,   74,   84,   84,   84,   84,   84,   84,   84,   84,
+      185,   82,  136,  110,  146,   60,   61,   61,   61,   61,
        61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
-       61,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       68,   68,   68,   68,   68,   73,  554,  554,  554,   73,
-      554,   73,   73,   73,  554,  554,   73,   73,   73,   77,
-       77,  554,   77,   77,   77,   77,   77,   77,   77,   77,
-
-       77,   77,   77,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   84,  554,  554,
-      554,   84,  554,   84,   84,   84,   84,  554,   84,   84,
-       84,   87,  554,  554,  554,   87,  554,   87,   87,   87,
-      554,  554,   87,   87,   87,   89,  554,  554,   89,   89,
-       89,   89,   89,   89,  554,  554,   89,   89,   89,   99,
-       99,  554,  554,  554,   99,  124,  554,  554,  124,  124,
-      124,  124,  124,  124,  554,  554,  124,  124,  124,  128,
-      554,  554,  128,  128,  128,  128,  128,  128,  554,  128,
-      554,  128,  128,  136,  554,  554,  136,  554,  136,  136,
-
-      136,  136,  136,  554,  136,  136,  136,  140,  140,  140,
-      140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
-      140,  142,  142,  554,  142,  554,  142,  142,  142,  142,
-      142,  142,  142,  142,  142,   78,   78,  554,   78,   78,
-       78,   78,   78,   78,   78,   78,   78,   78,   78,  150,
-      150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
-      150,  150,  150,  151,  151,  554,  151,  151,  151,  151,
-      151,  151,  151,  151,  151,  151,  151,  152,  554,  554,
-      554,  152,  554,  152,  152,  152,  554,  554,  152,  152,
-      152,   90,  554,  554,   90,   90,   90,   90,   90,   90,
-
-      554,  554,   90,   90,   90,  160,  160,  554,  554,  554,
-      160,  162,  162,  162,  554,  554,  554,  162,  125,  554,
-      554,  125,  125,  125,  125,  125,  125,  554,  554,  125,
-      125,  125,  186,  186,  186,  186,  186,  186,  186,  186,
-      186,  186,  186,  186,  186,  186,  193,  193,  554,  554,
-      554,  193,  199,  199,  199,  554,  554,  554,  199,  227,
-      227,  554,  554,  554,  227,  228,  228,  554,  554,  554,
-      228,  232,  232,  554,  554,  554,  232,  234,  234,  234,
-      554,  554,  554,  234,  267,  267,  554,  554,  554,  267,
-      269,  269,  554,  554,  554,  269,  270,  270,  554,  554,
-
-      554,  270,  272,  272,  272,  554,  554,  554,  272,  276,
-      276,  276,  276,  554,  554,  554,  276,  304,  304,  554,
-      554,  554,  304,  305,  305,  554,  554,  554,  305,  306,
-      306,  554,  554,  554,  306,  318,  318,  318,  554,  554,
-      554,  318,  319,  319,  319,  319,  554,  554,  554,  319,
-      352,  352,  554,  554,  554,  352,  353,  353,  554,  554,
-      554,  353,  369,  369,  369,  554,  554,  554,  369,  370,
-      370,  370,  370,  554,  554,  554,  370,  395,  395,  554,
-      554,  554,  395,  399,  554,  399,  399,  554,  554,  554,
-      399,  417,  417,  417,  554,  554,  554,  417,  418,  418,
-
-      418,  418,  554,  554,  554,  418,  448,  448,  554,  554,
-      554,  448,  449,  554,  449,  449,  554,  554,  554,  449,
-      465,  465,  465,  554,  554,  554,  465,  466,  466,  466,
-      554,  554,  554,  554,  466,  472,  554,  554,  472,  472,
-      554,  472,  472,  472,  554,  554,  472,  472,  472,  475,
-      554,  554,  475,  475,  554,  475,  475,  475,  554,  554,
-      475,  475,  475,  485,  485,  554,  554,  554,  485,  486,
-      554,  486,  486,  554,  554,  554,  486,  502,  502,  554,
-      554,  554,  554,  502,  504,  504,  504,  504,  504,  504,
-      504,  504,  504,  504,  504,  504,  504,  504,  517,  517,
-
-      554,  554,  554,  517,  518,  554,  518,  518,  554,  554,
-      554,  518,  532,  532,  554,  554,  554,  532,  533,  554,
-      533,  554,  554,  554,  554,  533,  546,  546,  546,  546,
-      546,  546,  546,  546,  546,  546,  546,  546,  546,  546,
-       13,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-
-      554,  554,  554
+       61,   61,   61,   15,   16,   17,   63,   59,  183,  136,
+      110,  127,   64,   65,   66,  127,  127,  132,  110,  133,
+       75,  134,   75,  147,  169,  133,   67,  134,   75,  170,
+      145,  359,  171,  127,  172,  184,  148,  149,  226,  134,
+
+      134,   84,   84,   84,   84,   84,   84,   84,   84,   68,
+       15,   16,   17,   63,   59,  128,  136,  110,  370,   64,
+       65,   66,   85,  134,   85,   82,   85,  145,   85,   85,
+       82,   91,   85,   67,   75,   91,   91,  157,  158,  159,
+      157,  157,  157,  157,  157,   85,   85,  219,   88,  518,
+       88,   75,   88,   91,   88,   88,   68,   79,   88,   79,
+       74,   79,  139,   79,   79,  226,  253,   79,   75,   75,
+       88,   88,   88,  226,  225,   92,  592,  163,   75,   79,
+       79,   79,  191,   90,  370,   74,  204,   90,  254,   74,
+       74,  229,  309,   90,  161,  161,  161,  161,  161,  161,
+
+      161,  161,   95,   80,   82,   90,   90,   74,  161,  161,
+      161,  161,  161,  161,   83,   82,   75,   84,   84,   84,
+       84,   84,   84,   84,   84,   93,   75,   94,   94,   94,
+       94,   94,   94,   94,   94,   95,  237,  237,  237,   96,
+       96,   96,   96,   96,  161,  161,  161,  161,  161,  161,
+      161,  161,  246,  246,  246,  246,  246,  247,  310,   75,
+      518,   96,   96,   96,   96,   96,   96,   74,  255,   75,
+      267,   74,  256,   74,  476,  263,   74,   74,   75,   74,
+       74,   74,  102,  102,  102,  102,  102,  102,  102,  102,
+       95,   75,  268,   74,  102,  102,  102,  102,  102,  103,
+
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,   75,  103,   96,   96,   96,   96,
+       96,   96,   74,   74,   74,   74,   74,   74,   74,   74,
+       74,   74,  103,  103,  103,  103,  103,  103,  103,  103,
+      592,   82,   75,  545,  103,  103,  103,  103,  103,   84,
+       84,   84,   84,   84,   84,   84,   84,  226,  127,  112,
+      348,  538,  127,  127,  349,   95,   74,   74,   74,   74,
+       74,   74,  109,  110,   74,   75,   74,  163,   74,   74,
+      127,  270,   74,  241,  163,   75,  204,  113,  114,   75,
+      306,  115,  407,  243,   74,   74,   74,   82,  116,  592,
+
+      163,  117,  128,   75,  253,  271,  269,   83,  312,  243,
+       84,   84,   84,   84,   84,   84,   84,   84,  126,   75,
+       74,  457,  126,   75,   74,   74,  254,   75,  126,  592,
+      592,  592,  592,  592,  592,  592,  592,  360,  409,   75,
+      126,  126,   74,  209,  209,  209,  209,  209,  209,  209,
+      209,  118,   82,  230,  231,  232,  230,  230,  230,  230,
+      230,  560,  135,  163,  346,  592,  592,  592,  592,  592,
+      592,  592,  592,   79,  502,   79,  150,   79,  138,   79,
+       79,  138,  138,   79,  363,   75,  347,   75,  138,  291,
+      291,  291,  291,  291,  292,   79,   79,   79,  163,   75,
+
+      163,  138,   75,  361,  241,  163,  154,  204,  154,  243,
+      154,  356,  154,  154,  243,  404,  154,   75,  503,   80,
+      160,  160,  160,  160,  160,  160,  160,  160,  154,  154,
+      154,  163,  160,  160,  160,  160,  160,  191,  476,  192,
+      192,  192,  192,  192,  192,  235,  235,  236,  237,  237,
+      237,  237,  237,  201,  160,  160,  160,  160,  160,  160,
+      166,  166,  166,  166,  166,  166,  166,  166,   75,  241,
+      163,   75,  166,  166,  166,  166,  166,  362,   91,  288,
+      592,  163,   91,  422,  163,  419,  419,   75,   91,   75,
+      288,  352,  354,  243,  160,  160,  160,  160,  160,  160,
+
+       91,   91,  191,  410,  192,  192,  192,  192,  192,  192,
+      192,  192,  127,  353,  355,   82,  127,  455,   82,  473,
+      473,  370,  127,  245,  245,  245,  245,  245,  245,  245,
+      245,  372,  241,  163,  127,  127,   75,  191,  538,  193,
+      193,  193,  193,  193,  193,  193,  193,  592,  346,  244,
+      244,  244,  244,  244,  244,  244,  244,  277,  277,  277,
+      277,  277,  277,  277,  277,  201,  592,  163,  456,  499,
+      347,   75,  191,  536,  194,  194,  194,  194,  194,  195,
+      192,  192,  282,  283,  284,  282,  282,  282,  282,  282,
+      252,  252,  252,  252,  252,  252,  252,  252,  241,  163,
+
+      286,  286,  286,  286,  286,  286,   75,   74,  243,  196,
+      196,  196,  196,  196,  196,  196,  196,  490,  490,   75,
+      535,  196,  196,  196,  196,  196,  290,  290,  290,  290,
+      290,  290,  290,  290,  500,  313,  314,  315,  313,  313,
+      313,  313,  313,  196,  196,  196,  196,  196,  196,  198,
+      199,  200,  200,  200,  200,  200,  200,  201,  515,  515,
+      352,  202,  202,  202,  202,  202,  592,   75,  289,  289,
+      289,  289,  289,  289,  289,  289,  337,  337,  337,  337,
+      337,  338,  353,  202,  202,  202,  202,  202,  202,  163,
+      205,  206,  207,  205,  205,  205,  205,  205,  208,  163,
+
+      534,  354,  209,  209,  209,  209,  209,  271,  288,  272,
+      272,  272,  272,  272,  272,  297,  297,  297,  297,  297,
+      297,  297,  297,  355,  209,  209,  209,  209,  209,  209,
+      210,  210,  210,  210,  210,  210,  210,  210,  241,  163,
+      163,   75,  210,  210,  210,  210,  210,  325,  288,  326,
+      326,  326,  326,  326,  326,  326,  326,  375,  375,  375,
+      375,  375,  376,  422,  196,  196,  196,  196,  196,  196,
+      191,  592,  192,  192,  192,  192,  192,  192,  192,  192,
+      325,  372,  327,  327,  327,  327,  327,  327,  327,  327,
+      325,   75,  328,  328,  328,  328,  328,  329,  326,  326,
+
+      408,  449,  451,  460,   75,  191,  372,  192,  192,  192,
+      192,  192,  192,  192,  192,  241,  163,  332,  332,  332,
+      332,  332,  332,  450,  452,  288,  336,  336,  336,  336,
+      336,  336,  336,  336,  241,  163,  467,   75,  497,   75,
+      241,  163,  242,  242,  242,  242,  242,  242,  242,  242,
+      243,  163,  496,  492,  244,  244,  244,  244,  244,  592,
+      288,  335,  335,  335,  335,  335,  335,  335,  335,  392,
+      392,  392,  392,  392,  393,  493,  244,  244,  244,  244,
+      244,  244,  163,  248,  249,  250,  248,  248,  248,  248,
+      248,  251,  551,  551,  449,  252,  252,  252,  252,  252,
+
+      324,  324,  324,  324,  324,  324,  324,  324,  374,  374,
+      374,  374,  374,  374,  374,  374,  450,  252,  252,  252,
+      252,  252,  252,  271,  370,  272,  272,  272,  272,  272,
+      272,  272,  272,  592,  372,  373,  373,  373,  373,  373,
+      373,  373,  373,  382,  383,  384,  382,  382,  382,  382,
+      382,  425,  425,  425,  425,  425,  426,   75,  271,  370,
+      273,  273,  273,  273,  273,  273,  273,  273,  325,  422,
+      326,  326,  326,  326,  326,  326,  326,  326,  325,  163,
+      326,  326,  326,  326,  326,  326,  326,  326,  334,  561,
+       82,  495,   75,  271,  592,  274,  274,  274,  274,  274,
+
+      275,  272,  272,  325,  422,  326,  326,  326,  326,  326,
+      326,  241,  163,  343,  343,  343,  343,  343,  343,  343,
+      343,  334,  569,  569,  540,  502,  494,   75,  241,  163,
+      286,  286,  286,  286,  286,  286,  286,  286,  243,  241,
+      163,  287,  287,  287,  287,  287,  287,  287,  287,  288,
+      592,  163,  451,  289,  289,  289,  289,  289,   75,  432,
+      334,  241,  163,  387,  387,  387,  387,  387,  387,  505,
+      492,  334,  137,  137,  452,  289,  289,  289,  289,  289,
+      289,  163,  293,  294,  295,  293,  293,  293,  293,  293,
+      296,  372,  493,  532,  297,  297,  297,  297,  297,  391,
+
+      391,  391,  391,  391,  391,  391,  391,  416,  417,  418,
+      416,  416,  416,  416,  416,  533,  297,  297,  297,  297,
+      297,  297,  271,  370,  272,  272,  272,  272,  272,  272,
+      272,  272,  592,  422,  390,  390,  390,  390,  390,  390,
+      390,  390,  411,  412,  413,  414,  411,  411,  411,  411,
+      443,  443,  443,  443,  443,  444,   75,  271,  592,  272,
+      272,  272,  272,  272,  272,  272,  272,  479,  479,  479,
+      479,  479,  480,  319,   75,   75,  363,  364,  364,  364,
+      364,  364,  364,  381,  381,  381,  381,  381,  381,  381,
+      381,   75,  320,  321,  322,  320,  320,  320,  320,  320,
+
+      323,  454,  503,  453,  324,  324,  324,  324,  324,   75,
+      424,  424,  424,  424,  424,  424,  424,  424,  397,  397,
+      397,  397,  397,  397,  397,  397,  324,  324,  324,  324,
+      324,  324,  241,  163,  332,  332,  332,  332,  332,  332,
+      332,  332,  288,  241,  163,  333,  333,  333,  333,  333,
+      333,  333,  333,  334,  163,  458,   75,  335,  335,  335,
+      335,  335,  592,  334,  423,  423,  423,  423,  423,  423,
+      423,  423,  448,  447,  446,  458,  445,  458,  458,  335,
+      335,  335,  335,  335,  335,  163,  339,  340,  341,  339,
+      339,  339,  339,  339,  342,  163,   82,  532,  343,  343,
+
+      343,  343,  343,  432,  389,  433,  433,  433,  433,  433,
+      433,  433,  433,  521,  521,  521,  521,  521,  522,  533,
+      343,  343,  343,  343,  343,  343,  363,  364,  364,  364,
+      364,  364,  364,  364,  364,  432,  370,  434,  434,  434,
+      434,  434,  434,  434,  434,  432,  476,  435,  435,  435,
+      435,  435,  436,  433,  433,  539,  319,  239,  406,   75,
+      363,  365,  365,  365,  365,  365,  365,  365,  365,  241,
+      163,  241,  163,  592,  163,  405,  403,  574,  592,  334,
+      592,  389,  592,  389,  442,  442,  442,  442,  442,  442,
+      442,  442,  476,   75,  363,  366,  366,  366,  366,  366,
+
+      367,  364,  364,  241,  163,  439,  439,  439,  439,  439,
+      439,   75,  592,  389,  441,  441,  441,  441,  441,  441,
+      441,  441,  503,  402,  505,  401,  400,   75,  370,  399,
+      371,  371,  371,  371,  371,  371,  371,  371,  372,  163,
+      398,  558,  373,  373,  373,  373,  373,  467,  389,  468,
+      468,  468,  468,  468,  468,  468,  468,  556,  556,  556,
+      556,  556,  557,  559,  373,  373,  373,  373,  373,  373,
+      377,  378,  379,  377,  377,  377,  377,  377,  380,  325,
+      319,  558,  381,  381,  381,  381,  381,  467,  239,  469,
+      469,  469,  469,  469,  469,  469,  469,  201,  460,  358,
+
+      510,  510,  510,  559,  381,  381,  381,  381,  381,  381,
+      241,  163,  387,  387,  387,  387,  387,  387,  387,  387,
+      334,  241,  163,  388,  388,  388,  388,  388,  388,  388,
+      388,  389,   75,  571,  571,  390,  390,  390,  390,  390,
+      467,  370,  470,  470,  470,  470,  470,  471,  468,  468,
+      357,  476,  458,  351,  350,  572,  572,  390,  390,  390,
+      390,  390,  390,  163,  394,  395,  396,  394,  394,  394,
+      394,  394,  458,  345,  458,  459,  397,  397,  397,  397,
+      397,  431,  431,  431,  431,  431,  431,  431,  431,  583,
+      510,  510,  510,  344,  583,  319,   75,  239,  397,  397,
+
+      397,  397,  397,  397,  363,  364,  364,  364,  364,  364,
+      364,  364,  364,  478,  478,  478,  478,  478,  478,  478,
+      478,  592,   75,  477,  477,  477,  477,  477,  477,  477,
+      477,  579,  579,  579,  579,  579,  579,   75,  363,  364,
+      364,  364,  364,  364,  364,  364,  364,  486,  487,  488,
+      486,  486,  486,  486,  486,  432,  370,  433,  433,  433,
+      433,  433,  433,  433,  433,  201,  518,  201,  264,  308,
+      307,   75,  370,  305,  420,  420,  420,  420,  420,  420,
+      420,  420,  372,  370,  592,  421,  421,  421,  421,  421,
+      421,  421,  421,  422,  518,  304,  303,  423,  423,  423,
+
+      423,  423,  432,  302,  433,  433,  433,  433,  433,  433,
+      433,  433,  163,  527,  527,  527,  527,  527,  527,  423,
+      423,  423,  423,  423,  423,  427,  428,  429,  427,  427,
+      427,  427,  427,  430,  301,  300,  299,  431,  431,  431,
+      431,  431,  432,  298,  433,  433,  433,  433,  433,  433,
+      511,  512,  513,  511,  511,  511,  511,  511,  280,  431,
+      431,  431,  431,  431,  431,  241,  163,  439,  439,  439,
+      439,  439,  439,  439,  439,  389,  241,  163,  440,  440,
+      440,  440,  440,  440,  440,  440,  241,  163,  455,   82,
+      441,  441,  441,  441,  441,  239,  389,  201,  561,   82,
+
+      370,  498,  506,  507,  508,  506,  506,  506,  506,  506,
+      518,  573,  441,  441,  441,  441,  441,  441,  460,  276,
+      461,  461,  461,  461,  461,  461,  461,  461,  201,  101,
+      264,  266,  264,  467,   75,  468,  468,  468,  468,  468,
+      468,  468,  468,  467,  265,  468,  468,  468,  468,  468,
+      468,  264,   75,  460,  262,  462,  462,  462,  462,  462,
+      462,  462,  462,  467,  261,  468,  468,  468,  468,  468,
+      468,  468,  468,  485,  485,  485,  485,  485,  485,  485,
+      485,  260,  259,  258,  257,   95,  201,   75,  460,  239,
+      463,  463,  463,  463,  463,  464,  465,  465,  520,  520,
+
+      520,  520,  520,  520,  520,  520,  592,  201,  519,  519,
+      519,  519,  519,  519,  519,  519,  101,   82,  189,  227,
+      224,  223,   75,  460,  222,  466,  466,  466,  461,  461,
+      461,  461,  461,  163,  527,  527,  527,  527,  527,  527,
+      527,  527,  163,  528,  528,  528,  528,  528,  528,  528,
+      528,  221,  220,  218,  217,  216,  215,   75,  370,  214,
+      474,  474,  474,  474,  474,  474,  474,  474,  422,  370,
+      213,  475,  475,  475,  475,  475,  475,  475,  475,  476,
+      212,  211,  101,  477,  477,  477,  477,  477,  163,  529,
+      529,  529,  529,  529,  530,  527,  527,  509,  509,  509,
+
+      509,  509,  509,  509,  509,  477,  477,  477,  477,  477,
+      477,  481,  482,  483,  481,  481,  481,  481,  481,  484,
+       93,  155,   82,  485,  485,  485,  485,  485,  545,   75,
+      546,  546,  546,  546,  546,  546,  546,  546,   82,   75,
+      189,  144,  145,  139,  139,  485,  485,  485,  485,  485,
+      485,  241,  163,  491,  491,  491,  491,  491,  491,  491,
+      491,  460,  131,  465,  465,  465,  465,  465,  465,  465,
+      465,  545,  187,  547,  547,  547,  547,  547,  547,  547,
+      547,  124,  180,  179,  501,  178,  177,  176,  501,  174,
+      501,  501,  173,  168,  501,   75,  460,  167,  465,  465,
+
+      465,  465,  465,  465,  465,  465,  501,  501,  501,  545,
+      101,  548,  548,  548,  548,  548,  549,  546,  546,  504,
+       74,  101,  156,  504,   89,  504,  504,  155,   82,  504,
+       75,  460,  150,  465,  465,  465,  465,  465,  465,  509,
+      509,  504,  504,  504,  526,  526,  526,  526,  526,  526,
+      526,  526,  555,  555,  555,  555,  555,  555,  555,  555,
+      151,   77,   76,   75,  145,   75,  460,  139,  509,  509,
+      509,  509,  509,  509,  509,  509,  592,  131,  554,  554,
+      554,  554,  554,  554,  554,  554,  163,  527,  527,  527,
+      527,  527,  527,  527,  527,  124,  123,  122,  121,  120,
+
+       75,  370,  119,  516,  516,  516,  516,  516,  516,  516,
+      516,  476,  370,  108,  517,  517,  517,  517,  517,  517,
+      517,  517,  518,  107,  106,  105,  519,  519,  519,  519,
+      519,  163,  527,  527,  527,  527,  527,  527,  527,  527,
+      562,  563,  564,  562,  562,  562,  562,  562,  519,  519,
+      519,  519,  519,  519,  523,  524,  525,  523,  523,  523,
+      523,  523,  104,  101,   89,   77,  526,  526,  526,  526,
+      526,  540,   75,  541,  541,  541,  541,  541,  541,  565,
+      566,  567,  565,  565,  565,  565,  565,   76,  526,  526,
+      526,  526,  526,  526,  540,   75,  541,  541,  541,  541,
+
+      541,  541,  541,  541,  545,   75,  546,  546,  546,  546,
+      546,  546,  546,  546,  545,  592,  546,  546,  546,  546,
+      546,  546,  546,  546,  592,  592,  592,  592,   75,  540,
+      592,  542,  542,  542,  542,  542,  542,  542,  542,  545,
+      592,  546,  546,  546,  546,  546,  546,  370,  592,  570,
+      570,  570,  570,  570,  570,  570,  570,  592,  592,  592,
+      592,  592,  592,   75,  540,  592,  543,  543,  543,  543,
+      543,  544,  541,  541,  579,  579,  579,  579,  579,  579,
+      579,  579,  580,  580,  580,  580,  580,  580,  580,  580,
+      581,  581,  581,  581,  581,  582,  579,  579,   75,  370,
+
+      592,  552,  552,  552,  552,  552,  552,  552,  552,  518,
+      370,  592,  553,  553,  553,  553,  553,  553,  553,  553,
+      592,  592,  592,  592,  554,  554,  554,  554,  554,  592,
+      586,  587,  588,  586,  586,  586,  586,  586,  574,  592,
+      575,  575,  575,  575,  575,  575,  554,  554,  554,  554,
+      554,  554,  540,  592,  541,  541,  541,  541,  541,  541,
+      541,  541,   75,  579,  579,  579,  579,  579,  579,  579,
+      579,  592,   75,  579,  579,  579,  579,  579,  579,  579,
+      579,  592,  592,  592,  592,  592,   75,  540,  592,  541,
+      541,  541,  541,  541,  541,  541,  541,  592,  592,  592,
+
+      589,  589,  589,  589,  589,  589,  589,  589,  586,  586,
+      586,  586,  586,  586,  586,  586,  592,  592,  592,  592,
+      592,   75,  574,  592,  575,  575,  575,  575,  575,  575,
+      575,  575,   75,  592,  592,  592,  592,  592,  592,  592,
+       75,  590,  590,  590,  590,  590,  591,  589,  589,  592,
+      589,  589,  589,  589,  589,  589,   75,  574,  592,  576,
+      576,  576,  576,  576,  576,  576,  576,  592,  592,  592,
+      592,  592,  592,   75,  589,  589,  589,  589,  589,  589,
+      589,  589,   75,  592,  592,  592,  592,  592,  592,  592,
+      592,   75,  574,  592,  577,  577,  577,  577,  577,  578,
+
+      575,  575,  592,  592,  592,  592,   75,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,   75,  574,  592,  575,
+      575,  575,  575,  575,  575,  575,  575,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,   75,  574,  592,  575,  575,  575,  575,  575,  575,
+      575,  575,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,   75,   53,   53,   53,
+
+       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
+       53,   31,   31,   31,   31,   31,   31,   31,   31,   31,
+       31,   31,   31,   31,   31,   62,   62,   62,   62,   62,
+       62,   62,   62,   62,   62,   62,   62,   62,   62,   69,
+       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
+       69,   69,   69,   74,  592,  592,  592,   74,  592,   74,
+       74,   74,  592,  592,   74,   74,   74,   78,   78,  592,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   81,   81,   81,   81,   81,   81,   81,   81,   81,
+       81,   81,   81,   81,   81,   85,  592,  592,  592,   85,
+
+      592,   85,   85,   85,   85,  592,   85,   85,   85,   88,
+      592,  592,  592,   88,  592,   88,   88,   88,  592,  592,
+       88,   88,   88,   90,  592,  592,   90,   90,   90,   90,
+       90,   90,  592,  592,   90,   90,   90,  100,  100,  592,
+      592,  592,  100,  126,  592,  592,  126,  126,  126,  126,
+      126,  126,  592,  592,  126,  126,  126,  130,  592,  592,
+      130,  130,  130,  130,  130,  130,  592,  130,  592,  130,
+      130,  138,  592,  592,  138,  592,  138,  138,  138,  138,
+      138,  592,  138,  138,  138,  142,  142,  142,  142,  142,
+      142,  142,  142,  142,  142,  142,  142,  142,  142,  144,
+
+      144,  592,  144,  592,  144,  144,  144,  144,  144,  144,
+      144,  144,  144,   79,   79,  592,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,  152,  152,  152,
+      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
+      152,  153,  153,  592,  153,  153,  153,  153,  153,  153,
+      153,  153,  153,  153,  153,  154,  592,  592,  592,  154,
+      592,  154,  154,  154,  592,  592,  154,  154,  154,   91,
+      592,  592,   91,   91,   91,   91,   91,   91,  592,  592,
+       91,   91,   91,  162,  162,  592,  592,  592,  162,  164,
+      164,  164,  592,  592,  592,  164,  127,  592,  592,  127,
+
+      127,  127,  127,  127,  127,  592,  592,  127,  127,  127,
+      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
+      190,  190,  190,  190,  197,  197,  592,  592,  592,  197,
+      203,  203,  203,  592,  592,  592,  203,  233,  233,  592,
+      592,  592,  233,  234,  234,  592,  592,  592,  234,  238,
+      238,  592,  592,  592,  238,  240,  240,  240,  592,  592,
+      592,  240,  276,  276,  592,  592,  592,  276,  278,  278,
+      592,  592,  592,  278,  279,  279,  592,  592,  592,  279,
+      281,  281,  281,  592,  592,  592,  281,  285,  285,  285,
+      285,  592,  592,  592,  285,  316,  316,  592,  592,  592,
+
+      316,  317,  317,  592,  592,  592,  317,  318,  318,  592,
+      592,  592,  318,  330,  330,  330,  592,  592,  592,  330,
+      331,  331,  331,  331,  592,  592,  592,  331,  368,  368,
+      592,  592,  592,  368,  369,  369,  592,  592,  592,  369,
+      385,  385,  385,  592,  592,  592,  385,  386,  386,  386,
+      386,  592,  592,  592,  386,  415,  415,  592,  592,  592,
+      415,  419,  592,  419,  419,  592,  592,  592,  419,  437,
+      437,  437,  592,  592,  592,  437,  438,  438,  438,  438,
+      592,  592,  592,  438,  472,  472,  592,  592,  592,  472,
+      473,  592,  473,  473,  592,  592,  592,  473,  489,  489,
+
+      489,  592,  592,  592,  489,  490,  490,  490,  592,  592,
+      592,  592,  490,  501,  592,  592,  501,  501,  592,  501,
+      501,  501,  592,  592,  501,  501,  501,  504,  592,  592,
+      504,  504,  592,  504,  504,  504,  592,  592,  504,  504,
+      504,  514,  514,  592,  592,  592,  514,  515,  592,  515,
+      515,  592,  592,  592,  515,  531,  531,  592,  592,  592,
+      592,  531,  537,  537,  537,  537,  537,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  550,  550,  592,  592,
+      592,  550,  551,  592,  551,  551,  592,  592,  592,  551,
+      568,  568,  592,  592,  592,  568,  569,  592,  569,  592,
+
+      592,  592,  592,  569,  584,  584,  584,  584,  584,  584,
+      584,  584,  584,  584,  584,  584,  584,  584,   13,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592
     } ;
 
-static yyconst short int yy_chk[3604] =
+static yyconst short int yy_chk[3685] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -951,397 +972,405 @@ static yyconst short int yy_chk[3604] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    2,    3,    4,  116,    2,    3,    4,  551,
-        5,    5,    5,  119,    5,   20,    3,    4,   59,   59,
-        5,   11,   11,   11,   11,    6,    6,    6,  119,    6,
-        2,    2,    5,    5,    2,    6,   20,   84,    2,   40,
-
-       51,    2,   12,   12,   12,   12,   63,    6,    6,   70,
-       25,   67,   67,    5,   25,   25,   40,   51,   84,  116,
-      109,    3,    4,   65,   11,  109,   63,   69,    6,    7,
-        7,    7,   25,    7,   27,   27,   27,   27,   27,   27,
-       27,   27,  121,   65,  432,   12,   72,   72,  121,   72,
-       70,   25,   28,   28,   28,   28,   28,   28,   39,  117,
-       39,   39,   39,   39,   39,   39,   39,   39,   41,  348,
-       69,  117,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        8,    8,    8,  100,    8,  432,   41,   41,  127,  348,
-
-       41,  178,  100,  127,   41,   49,  178,   41,   49,   49,
-       49,   49,   49,   49,   49,   49,   82,   82,   82,   82,
-       82,   82,   82,   82,   83,   83,   83,   83,   83,   83,
-       83,   83,  118,    8,    8,    8,    8,    8,    8,    8,
+        1,    1,    1,    1,    1,    2,    3,    4,  269,    2,
+        3,    4,   70,    5,    5,    5,  123,    5,  269,    3,
+        4,   20,  123,    5,   11,   11,   11,   11,    6,    6,
+        6,   41,    6,    2,    2,    5,    5,    2,    6,   12,
+
+       12,   12,   12,   64,    2,   20,   71,    2,   41,   25,
+        6,    6,   52,   25,   25,   60,   60,   66,   70,    5,
+       28,   28,   28,   28,   28,   28,   64,    3,    4,   52,
+       11,   25,   68,   68,    6,    7,    7,    7,  101,    7,
+       66,   73,   73,  164,   73,   12,  111,  101,   85,  118,
+       71,  111,  164,   25,   27,   27,   27,   27,   27,   27,
+       27,   27,   40,  119,   40,   40,   40,   40,   40,   40,
+       40,   40,   85,  129,  589,  119,   42,  584,  129,  132,
+      132,    7,    7,    7,    7,    7,    7,    7,    7,    7,
+        7,    7,    7,    7,    7,    7,    7,    7,    7,    8,
+
+        8,    8,  573,    8,   42,   42,  118,   75,   42,   75,
+      185,   75,  185,   75,   75,   42,   50,   75,   42,   50,
+       50,   50,   50,   50,   50,   50,   50,  120,  122,   75,
+       75,   75,   83,   83,   83,   83,   83,   83,   83,   83,
+      122,  309,  109,  109,  146,    8,    8,    8,    8,    8,
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
-        8,    9,    9,    9,    9,    9,  120,  130,  130,   50,
-        9,    9,    9,   50,   50,   57,   57,   57,  120,   57,
-      118,  104,  144,   57,    9,   57,  104,  222,  104,   89,
-      171,   50,  162,   89,   89,  134,  134,   57,   57,  146,
-      146,  162,  222,  171,    9,   10,   10,   10,   10,   10,
-
-       50,   89,  182,  145,   10,   10,   10,   74,   57,   74,
-      181,   74,  181,   74,   74,  144,  182,   74,   10,  177,
-       89,   96,   96,   96,   96,   96,   96,   96,   96,   74,
-       74,   74,   98,   98,   98,   98,   98,   98,   10,   18,
-      184,   18,   18,   18,  145,   18,   18,  546,   86,   18,
-       86,  180,   86,  184,   86,   86,  110,  199,   86,  535,
-      192,   18,   18,   18,  124,  177,  199,  180,  124,  124,
-      259,   86,   86,   97,   97,   97,   97,   97,   97,   97,
-       97,  192,   18,   19,  110,  110,  124,  259,  110,  258,
-      107,  107,  110,   19,  207,  110,   19,   19,   19,   19,
-
-       19,   19,   19,   19,   26,  124,   26,   26,   26,   26,
-       26,   26,   26,   26,   26,  188,  207,  213,   26,   26,
-       26,   26,   26,  213,  260,   92,   92,   92,   92,   92,
-       92,   92,   92,  107,  260,   26,  263,   26,   26,   26,
-       26,   26,   26,   32,  220,  220,  188,   32,  258,   32,
-      360,  360,   32,   32,   92,   32,   32,   32,   32,   32,
-       32,   32,   32,   32,   32,   32,   32,  263,  534,   32,
+        8,    8,    8,    9,    9,    9,    9,    9,  120,  136,
+      136,   51,    9,    9,    9,   51,   51,   58,   58,   58,
+      121,   58,  184,  147,  106,   58,    9,   58,  109,  106,
+      146,  309,  106,   51,  106,  121,  148,  148,  184,   58,
+
+       58,   84,   84,   84,   84,   84,   84,   84,   84,    9,
+       10,   10,   10,   10,   10,   51,  143,  143,  570,   10,
+       10,   10,   87,   58,   87,  181,   87,  147,   87,   87,
+      267,   90,   87,   10,  175,   90,   90,   93,   93,   93,
+       93,   93,   93,   93,   93,   87,   87,  175,   89,  568,
+       89,  186,   89,   90,   89,   89,   10,   18,   89,   18,
+       18,   18,  143,   18,   18,  186,  211,   18,  182,   93,
+       89,   89,   89,  182,  181,   90,  554,  203,  188,   18,
+       18,   18,  192,   92,  553,   92,  203,   92,  211,   92,
+       92,  188,  267,   92,   97,   97,   97,   97,   97,   97,
+
+       97,   97,  196,   18,   19,   92,   92,   92,   99,   99,
+       99,   99,   99,   99,   19,  225,  192,   19,   19,   19,
+       19,   19,   19,   19,   19,   26,  196,   26,   26,   26,
+       26,   26,   26,   26,   26,   26,  200,  200,  200,   26,
+       26,   26,   26,   26,   98,   98,   98,   98,   98,   98,
+       98,   98,  207,  207,  207,  207,  207,  207,  268,   26,
+      551,   26,   26,   26,   26,   26,   26,   32,  212,  219,
+      225,   32,  212,   32,  550,  219,   32,   32,  268,   32,
        32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
+       32,  226,  226,   32,   32,   32,   32,   32,   32,   32,
+
        32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
        32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
-
-       32,   32,   32,   32,   32,   34,   34,   34,   34,   34,
-       34,   34,   34,   34,  196,  196,  196,   34,   34,   34,
-       34,   34,  123,  123,  123,  123,  123,  123,  123,  123,
-      254,  299,  532,  141,  141,  254,   34,   34,   34,   34,
-       34,   34,   38,   38,   38,  219,   38,  299,   38,   38,
-      223,   88,   38,   88,  234,   88,  223,   88,   88,  236,
-      236,   88,  521,  234,   38,   38,   38,   42,  137,  236,
-      520,  137,  137,   88,   88,   88,  141,   42,  137,  221,
-       42,   42,   42,   42,   42,   42,   42,   42,   91,  518,
-       91,  137,   91,  343,   91,   91,  517,  219,   91,  126,
-
-      221,  126,  247,  126,  154,  126,  126,  434,  154,  126,
-       91,   91,   91,  345,  154,  238,  238,  221,   42,   58,
-      298,  126,  126,  126,  247,  238,  154,  154,  345,   58,
-      298,  513,   58,   58,   58,   58,   58,   58,   58,   58,
-       77,  343,   77,   77,   77,  289,   77,   77,  434,  292,
-       77,  133,  133,  133,  133,  133,  133,  133,  133,  272,
-      261,  504,   77,   77,   77,  261,  276,  289,  272,  294,
-      153,  292,  153,  293,  153,  276,  153,  153,  294,  388,
-      153,  388,  297,   77,   93,   93,   93,   93,   93,   93,
-       93,   93,  153,  153,  153,  293,   93,   93,   93,   93,
-
-       93,  187,  187,  187,  187,  187,  187,  187,  187,  203,
-      203,  203,  203,  203,  203,   93,   93,   93,   93,   93,
-       93,  101,  101,  101,  101,  101,  101,  101,  101,  297,
-      187,  387,  387,  101,  101,  101,  101,  101,  191,  435,
-      191,  191,  191,  191,  191,  191,  244,  244,  244,  244,
-      244,  244,  101,  101,  101,  101,  101,  101,  155,  300,
-      155,  155,  155,  155,  155,  155,  155,  155,  300,  191,
-      200,  200,  200,  200,  200,  200,  200,  200,  183,  387,
-      435,  355,  183,  406,  406,  420,  420,  502,  183,  155,
-      156,  355,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      183,  183,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  202,  202,  202,  202,  202,  202,  202,  202,  421,
-      421,  156,  157,  357,  157,  157,  157,  157,  157,  157,
-      157,  157,  205,  357,  205,  205,  205,  205,  205,  205,
-      205,  205,  229,  229,  229,  229,  229,  229,  229,  229,
-      229,  340,  498,  157,  158,  318,  158,  158,  158,  158,
-      158,  158,  158,  158,  318,  424,  424,  340,  158,  158,
-      158,  158,  158,  235,  235,  235,  235,  235,  235,  235,
-      235,  286,  286,  286,  286,  286,  286,  158,  158,  158,
-      158,  158,  158,  161,  161,  161,  161,  161,  161,  161,
-
-      161,  161,  456,  456,  470,  161,  161,  161,  161,  161,
-      237,  237,  237,  237,  237,  237,  237,  237,  310,  310,
-      310,  310,  310,  310,  161,  161,  161,  161,  161,  161,
-      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      467,  467,  486,  163,  163,  163,  163,  163,  241,  241,
-      241,  241,  241,  241,  241,  241,  332,  336,  241,  485,
-      470,  346,  163,  163,  163,  163,  163,  163,  164,  164,
-      164,  164,  164,  164,  164,  164,  338,  346,  332,  336,
-      164,  164,  164,  164,  164,  243,  243,  243,  243,  243,
-      243,  243,  243,  472,  382,  471,  277,  277,  338,  164,
-
-      164,  164,  164,  164,  164,  189,  277,  189,  189,  189,
-      189,  189,  189,  189,  189,  246,  382,  246,  246,  246,
-      246,  246,  246,  246,  246,  262,  262,  262,  262,  262,
-      262,  262,  262,  469,  472,  433,  189,  190,  319,  190,
-      190,  190,  190,  190,  190,  190,  190,  319,  278,  278,
-      433,  437,  493,  493,  262,  280,  280,  266,  278,  266,
-      266,  266,  266,  266,  266,  280,  506,  506,  190,  201,
-      201,  201,  201,  201,  201,  201,  201,  201,  201,  201,
-      320,  320,  437,  201,  201,  201,  201,  201,  266,  273,
-      320,  273,  273,  273,  273,  273,  273,  273,  273,  524,
-
-      524,  468,  201,  201,  201,  201,  201,  201,  204,  204,
-      204,  204,  204,  204,  204,  204,  204,  204,  344,  568,
-      568,  204,  204,  204,  204,  204,  274,  344,  274,  274,
-      274,  274,  274,  274,  274,  274,  466,  321,  321,  449,
-      204,  204,  204,  204,  204,  204,  224,  321,  224,  224,
-      224,  224,  224,  224,  224,  224,  275,  383,  275,  275,
-      275,  275,  275,  275,  275,  275,  279,  279,  279,  279,
-      279,  279,  279,  279,  425,  448,  444,  224,  225,  383,
-      225,  225,  225,  225,  225,  225,  225,  225,  283,  283,
-      283,  283,  283,  283,  283,  283,  425,  400,  283,  285,
-
-      285,  285,  285,  285,  285,  285,  285,  400,  508,  225,
-      226,  401,  226,  226,  226,  226,  226,  226,  226,  226,
-      288,  401,  288,  288,  288,  288,  288,  288,  288,  288,
-      307,  307,  307,  307,  307,  307,  307,  307,  429,  508,
-      413,  226,  239,  239,  239,  239,  239,  239,  239,  239,
-      239,  239,  239,  242,  242,  242,  242,  242,  242,  242,
-      242,  242,  242,  242,  399,  395,  390,  242,  242,  242,
-      242,  242,  309,  309,  309,  309,  309,  309,  309,  309,
-      329,  329,  329,  329,  329,  329,  242,  242,  242,  242,
-      242,  242,  245,  245,  245,  245,  245,  245,  245,  245,
-
-      245,  245,  369,  386,  385,  245,  245,  245,  245,  245,
-      312,  369,  312,  312,  312,  312,  312,  312,  312,  312,
-      384,  323,  323,  353,  245,  245,  245,  245,  245,  245,
-      264,  323,  264,  264,  264,  264,  264,  264,  264,  264,
-      313,  313,  313,  313,  313,  313,  313,  313,  315,  370,
-      315,  315,  315,  315,  315,  315,  315,  315,  370,  352,
-      342,  264,  265,  403,  265,  265,  265,  265,  265,  265,
-      265,  265,  316,  403,  316,  316,  316,  316,  316,  316,
-      316,  316,  317,  417,  317,  317,  317,  317,  317,  317,
-      431,  431,  417,  265,  271,  271,  271,  271,  271,  271,
-
-      271,  271,  271,  431,  341,  335,  271,  271,  271,  271,
-      271,  322,  322,  322,  322,  322,  322,  322,  322,  363,
-      363,  363,  363,  363,  363,  271,  271,  271,  271,  271,
-      271,  281,  281,  281,  281,  281,  281,  281,  281,  281,
-      281,  281,  284,  284,  284,  284,  284,  284,  284,  284,
-      284,  284,  284,  334,  314,  306,  284,  284,  284,  284,
-      284,  326,  326,  326,  326,  326,  326,  326,  326,  427,
-      305,  326,  304,  296,  295,  284,  284,  284,  284,  284,
-      284,  287,  287,  287,  287,  287,  287,  287,  287,  287,
-      287,  427,  291,  290,  287,  287,  287,  287,  287,  328,
-
-      328,  328,  328,  328,  328,  328,  328,  380,  380,  380,
-      380,  380,  380,  287,  287,  287,  287,  287,  287,  301,
-      301,  301,  301,  301,  301,  301,  301,  301,  331,  270,
-      331,  331,  331,  331,  331,  331,  331,  331,  347,  347,
-      347,  347,  347,  347,  347,  347,  525,  525,  537,  301,
-      302,  302,  302,  302,  302,  302,  302,  302,  302,  525,
-      351,  351,  351,  351,  351,  351,  351,  347,  354,  354,
-      354,  354,  354,  354,  354,  354,  269,  268,  267,  537,
-      302,  303,  303,  303,  303,  303,  303,  303,  303,  303,
-      351,  356,  356,  356,  356,  356,  356,  356,  356,  362,
-
-      362,  362,  362,  362,  362,  362,  362,  257,  619,  256,
-      255,  303,  308,  619,  308,  308,  308,  308,  308,  308,
-      308,  308,  308,  418,  253,  252,  308,  308,  308,  308,
-      308,  365,  418,  365,  365,  365,  365,  365,  365,  365,
-      365,  251,  250,  249,  233,  308,  308,  308,  308,  308,
-      308,  311,  311,  311,  311,  311,  311,  311,  311,  311,
-      232,  231,  230,  311,  311,  311,  311,  311,  366,  450,
-      366,  366,  366,  366,  366,  366,  366,  366,  228,  450,
-      227,  218,  311,  311,  311,  311,  311,  311,  324,  324,
-      324,  324,  324,  324,  324,  324,  324,  324,  324,  327,
-
-      327,  327,  327,  327,  327,  327,  327,  327,  327,  327,
-      217,  216,  215,  327,  327,  327,  327,  327,  367,  451,
-      367,  367,  367,  367,  367,  367,  367,  367,  473,  451,
-      214,  212,  327,  327,  327,  327,  327,  327,  330,  330,
-      330,  330,  330,  330,  330,  330,  330,  371,  371,  211,
-      210,  330,  330,  330,  330,  330,  368,  371,  368,  368,
-      368,  368,  368,  368,  368,  368,  209,  208,  206,  473,
-      330,  330,  330,  330,  330,  330,  349,  349,  349,  349,
-      349,  349,  349,  349,  349,  372,  372,  373,  373,  373,
-      373,  373,  373,  373,  373,  372,  379,  379,  379,  379,
-
-      379,  379,  379,  379,  198,  197,  349,  350,  350,  350,
-      350,  350,  350,  350,  350,  350,  374,  374,  377,  377,
-      377,  377,  377,  377,  377,  377,  374,  381,  377,  381,
-      381,  381,  381,  381,  381,  381,  381,  350,  358,  475,
-      358,  358,  358,  358,  358,  358,  358,  358,  358,  361,
-      453,  361,  361,  361,  361,  361,  361,  361,  361,  361,
-      453,  194,  193,  361,  361,  361,  361,  361,  396,  465,
-      396,  396,  396,  396,  396,  396,  396,  396,  465,  186,
-      475,  185,  361,  361,  361,  361,  361,  361,  364,  364,
-      364,  364,  364,  364,  364,  364,  364,  179,  176,  175,
-
-      364,  364,  364,  364,  364,  397,  487,  397,  397,  397,
-      397,  397,  397,  397,  397,  174,  487,  173,  172,  364,
-      364,  364,  364,  364,  364,  375,  375,  375,  375,  375,
-      375,  375,  375,  375,  375,  375,  378,  378,  378,  378,
-      378,  378,  378,  378,  378,  378,  170,  419,  419,  169,
-      378,  378,  378,  378,  378,  389,  398,  419,  398,  398,
-      398,  398,  398,  398,  398,  398,  481,  481,  481,  378,
-      378,  378,  378,  378,  378,  389,  168,  389,  389,  402,
-      402,  402,  402,  402,  402,  402,  402,  408,  408,  408,
-      408,  408,  408,  408,  408,  481,  389,  391,  167,  391,
-
-      391,  391,  391,  391,  391,  391,  391,  409,  409,  409,
-      409,  409,  409,  411,  488,  411,  411,  411,  411,  411,
-      411,  411,  411,  166,  488,  165,  160,  159,  391,  392,
-      152,  392,  392,  392,  392,  392,  392,  392,  392,  412,
-      412,  412,  412,  412,  412,  412,  412,  414,  490,  414,
-      414,  414,  414,  414,  414,  414,  414,  151,  490,  150,
-      392,  393,  519,  393,  393,  393,  393,  393,  393,  393,
-      393,  415,  519,  415,  415,  415,  415,  415,  415,  415,
-      415,  416,  148,  416,  416,  416,  416,  416,  416,  430,
-      147,  143,  393,  394,  142,  394,  394,  394,  394,  394,
-
-      394,  394,  394,  459,  459,  459,  459,  459,  459,  430,
-      140,  430,  430,  136,  129,  125,  442,  122,  442,  442,
-      442,  115,  114,  113,  394,  404,  112,  404,  404,  404,
-      404,  404,  404,  404,  404,  404,  407,  111,  407,  407,
-      407,  407,  407,  407,  407,  407,  407,  442,  106,  105,
-      407,  407,  407,  407,  407,  436,  436,  436,  436,  436,
-      436,  436,  436,  496,  496,  496,  496,  496,  496,  407,
-      407,  407,  407,  407,  407,  410,  410,  410,  410,  410,
-      410,  410,  410,  410,  436,  103,   99,  410,  410,  410,
-      410,  410,  443,  443,  443,  443,  443,  443,  443,  443,
-
-      544,  544,  544,  544,  544,  544,  410,  410,  410,  410,
-      410,  410,  422,  422,  422,  422,  422,  422,  422,  422,
-      422,  422,  438,   95,  438,  438,  438,  438,  438,  438,
-      438,  438,  445,   94,  445,  445,  445,  445,  445,  445,
-      445,  445,  446,   90,  446,  446,  446,  446,  446,  446,
-      446,  446,   87,  438,  439,   85,  439,  439,  439,  439,
-      439,  439,  439,  439,  447,   80,  447,  447,  447,  447,
-      447,  447,  452,  452,  452,  452,  452,  452,  452,  452,
-       79,   78,   76,   75,   73,  439,  440,   68,  440,  440,
-      440,  440,  440,  440,  440,  440,  458,  458,  458,  458,
-
-      458,  458,  458,  458,  461,   61,  461,  461,  461,  461,
-      461,  461,  461,  461,   54,   48,   47,  440,  441,   46,
-      441,  441,  441,  441,  441,  441,  441,  441,  462,  462,
-      462,  462,  462,  462,  462,  462,  462,  463,  463,  463,
-      463,  463,  463,  463,  463,  463,   45,   44,   43,  441,
-      454,   37,  454,  454,  454,  454,  454,  454,  454,  454,
-      454,  457,   36,  457,  457,  457,  457,  457,  457,  457,
-      457,  457,   35,   33,   29,  457,  457,  457,  457,  457,
-      464,  464,  464,  464,  464,  464,  464,  464,  464,   23,
-       17,   15,   14,   13,  457,  457,  457,  457,  457,  457,
-
-      460,  460,  460,  460,  460,  460,  460,  460,    0,    0,
-        0,    0,  460,  460,  460,  460,  460,  474,    0,    0,
-        0,  474,    0,  474,  474,    0,    0,  474,    0,    0,
-        0,  460,  460,  460,  460,  460,  460,    0,  476,  474,
-      474,  474,  476,    0,  476,  476,    0,    0,  476,  480,
-      480,  480,  480,  480,  480,  480,  480,    0,    0,    0,
-      476,  476,  476,  477,    0,  477,  477,  477,  477,  477,
-      477,  477,  477,    0,    0,    0,    0,  482,  480,  482,
-      482,  482,  482,  482,  482,  482,  482,  501,  501,  501,
-      501,  501,  501,  501,  477,  478,    0,  478,  478,  478,
-
-      478,  478,  478,  478,  478,  483,    0,  483,  483,  483,
-      483,  483,  483,  483,  483,  484,    0,  484,  484,  484,
-      484,  484,  484,  484,  484,    0,  478,  479,    0,  479,
-      479,  479,  479,  479,  479,  479,  479,  489,  489,  489,
-      489,  489,  489,  489,  489,  495,  495,  495,  495,  495,
-      495,  495,  495,    0,    0,    0,    0,    0,  479,  491,
-        0,  491,  491,  491,  491,  491,  491,  491,  491,  491,
-      494,    0,  494,  494,  494,  494,  494,  494,  494,  494,
-        0,    0,    0,    0,  494,  494,  494,  494,  494,  497,
-        0,  497,  497,  497,  497,  497,  497,  497,  497,    0,
-
-        0,    0,    0,  494,  494,  494,  494,  494,  494,  499,
-      499,  499,  499,  499,  499,  499,  499,  499,  500,  500,
-      500,  500,  500,  500,  500,  500,  500,  507,  507,  507,
-      507,  507,  507,  507,  507,    0,  511,    0,  511,  511,
-      511,  511,  511,  511,  512,  512,  512,  512,  512,  512,
-      512,  512,    0,    0,    0,    0,  507,  509,    0,  509,
-      509,  509,  509,  509,  509,  509,  509,  511,  514,    0,
-      514,  514,  514,  514,  514,  514,  514,  514,  515,    0,
-      515,  515,  515,  515,  515,  515,  515,  515,  509,  510,
-        0,  510,  510,  510,  510,  510,  510,  510,  510,  516,
-
-        0,  516,  516,  516,  516,  516,  516,  522,    0,  522,
-      522,  522,  522,  522,  522,  522,  522,    0,    0,    0,
-      510,  526,    0,  526,  526,  526,  526,  526,  526,  526,
-      526,  529,  529,  529,  529,  529,  529,  529,  529,  530,
-      530,  530,  530,  530,  530,  530,  530,    0,    0,    0,
-        0,    0,  526,  527,    0,  527,  527,  527,  527,  527,
-      527,  527,  527,  531,  531,  531,  531,  531,  531,  531,
-      531,  536,  536,  536,  536,  536,  536,  536,  536,    0,
-        0,    0,    0,    0,  527,  528,    0,  528,  528,  528,
-      528,  528,  528,  528,  528,    0,    0,    0,    0,  540,
-
-      536,  540,  540,  540,  540,  540,  540,  542,  542,  542,
-      542,  542,  542,  542,  542,    0,  528,  538,    0,  538,
-      538,  538,  538,  538,  538,  538,  538,    0,    0,    0,
-      540,  543,  543,  543,  543,  543,  543,  543,  543,  548,
-      548,  548,  548,  548,  548,  548,  548,    0,  538,  539,
-        0,  539,  539,  539,  539,  539,  539,  539,  539,  549,
-      549,  549,  549,  549,  549,  549,  549,    0,  548,  550,
-      550,  550,  550,  550,  550,  550,  550,    0,    0,    0,
-      539,  553,  553,  553,  553,  553,  553,    0,  549,  552,
-      552,  552,  552,  552,  552,  552,  552,    0,  550,    0,
-
+       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
+       32,   32,   34,   34,   34,   34,   34,   34,   34,   34,
+       34,  359,  228,  546,   34,   34,   34,   34,   34,  125,
+      125,  125,  125,  125,  125,  125,  125,  228,  126,  112,
+      301,  537,  126,  126,  301,  227,   34,   34,   34,   34,
+       34,   34,   39,   39,   39,  229,   39,  240,   39,   39,
+      126,  229,   39,  242,  242,  263,  240,  112,  112,  227,
+      263,  112,  359,  242,   39,   39,   39,   43,  112,  244,
+
+      244,  112,  126,  270,  253,  272,  227,   43,  270,  244,
+       43,   43,   43,   43,   43,   43,   43,   43,  128,  408,
+      128,  408,  128,  361,  128,  128,  253,  310,  128,  135,
+      135,  135,  135,  135,  135,  135,  135,  310,  361,  272,
+      128,  128,  128,  204,  204,  204,  204,  204,  204,  204,
+      204,   43,   59,  191,  191,  191,  191,  191,  191,  191,
+      191,  535,   59,  531,  300,   59,   59,   59,   59,   59,
+       59,   59,   59,   78,  458,   78,   78,   78,  139,   78,
+       78,  139,  139,   78,  364,  191,  300,  311,  139,  250,
+      250,  250,  250,  250,  250,   78,   78,   78,  281,  356,
+
+      285,  139,  306,  311,  286,  286,  155,  281,  155,  285,
+      155,  306,  155,  155,  286,  356,  155,  364,  458,   78,
+       94,   94,   94,   94,   94,   94,   94,   94,  155,  155,
+      155,  527,   94,   94,   94,   94,   94,  195,  515,  195,
+      195,  195,  195,  195,  195,  199,  199,  199,  199,  199,
+      199,  199,  199,  199,   94,   94,   94,   94,   94,   94,
+      102,  102,  102,  102,  102,  102,  102,  102,  312,  287,
+      287,  195,  102,  102,  102,  102,  102,  312,  156,  287,
+      289,  289,  156,  514,  330,  376,  376,  362,  156,  500,
+      289,  304,  305,  330,  102,  102,  102,  102,  102,  102,
+
+      156,  156,  157,  362,  157,  157,  157,  157,  157,  157,
+      157,  157,  187,  304,  305,  456,  187,  407,  407,  426,
+      426,  371,  187,  206,  206,  206,  206,  206,  206,  206,
+      206,  371,  440,  440,  187,  187,  157,  158,  498,  158,
+      158,  158,  158,  158,  158,  158,  158,  209,  346,  209,
+      209,  209,  209,  209,  209,  209,  209,  235,  235,  235,
+      235,  235,  235,  235,  235,  235,  441,  441,  407,  456,
+      346,  158,  159,  497,  159,  159,  159,  159,  159,  159,
+      159,  159,  241,  241,  241,  241,  241,  241,  241,  241,
+      243,  243,  243,  243,  243,  243,  243,  243,  247,  247,
+
+      247,  247,  247,  247,  247,  247,  159,  160,  247,  160,
+      160,  160,  160,  160,  160,  160,  160,  444,  444,  457,
+      496,  160,  160,  160,  160,  160,  249,  249,  249,  249,
+      249,  249,  249,  249,  457,  271,  271,  271,  271,  271,
+      271,  271,  271,  160,  160,  160,  160,  160,  160,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  480,  480,
+      352,  163,  163,  163,  163,  163,  252,  271,  252,  252,
+      252,  252,  252,  252,  252,  252,  295,  295,  295,  295,
+      295,  295,  352,  163,  163,  163,  163,  163,  163,  165,
+      165,  165,  165,  165,  165,  165,  165,  165,  165,  331,
+
+      495,  354,  165,  165,  165,  165,  165,  275,  331,  275,
+      275,  275,  275,  275,  275,  288,  288,  288,  288,  288,
+      288,  288,  288,  354,  165,  165,  165,  165,  165,  165,
+      166,  166,  166,  166,  166,  166,  166,  166,  332,  332,
+      490,  275,  166,  166,  166,  166,  166,  282,  332,  282,
+      282,  282,  282,  282,  282,  282,  282,  322,  322,  322,
+      322,  322,  322,  473,  166,  166,  166,  166,  166,  166,
+      193,  373,  193,  193,  193,  193,  193,  193,  193,  193,
+      283,  373,  283,  283,  283,  283,  283,  283,  283,  283,
+      284,  360,  284,  284,  284,  284,  284,  284,  284,  284,
+
+      360,  402,  403,  461,  193,  194,  472,  194,  194,  194,
+      194,  194,  194,  194,  194,  292,  292,  292,  292,  292,
+      292,  292,  292,  402,  403,  292,  294,  294,  294,  294,
+      294,  294,  294,  294,  491,  491,  468,  461,  453,  194,
+      205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
+      205,  385,  448,  445,  205,  205,  205,  205,  205,  297,
+      385,  297,  297,  297,  297,  297,  297,  297,  297,  341,
+      341,  341,  341,  341,  341,  445,  205,  205,  205,  205,
+      205,  205,  208,  208,  208,  208,  208,  208,  208,  208,
+      208,  208,  522,  522,  449,  208,  208,  208,  208,  208,
+
+      319,  319,  319,  319,  319,  319,  319,  319,  321,  321,
+      321,  321,  321,  321,  321,  321,  449,  208,  208,  208,
+      208,  208,  208,  230,  420,  230,  230,  230,  230,  230,
+      230,  230,  230,  324,  420,  324,  324,  324,  324,  324,
+      324,  324,  324,  325,  325,  325,  325,  325,  325,  325,
+      325,  379,  379,  379,  379,  379,  379,  230,  231,  421,
+      231,  231,  231,  231,  231,  231,  231,  231,  327,  421,
+      327,  327,  327,  327,  327,  327,  327,  327,  328,  386,
+      328,  328,  328,  328,  328,  328,  328,  328,  386,  539,
+      539,  447,  231,  232,  423,  232,  232,  232,  232,  232,
+
+      232,  232,  232,  329,  423,  329,  329,  329,  329,  329,
+      329,  333,  333,  334,  334,  334,  334,  334,  334,  334,
+      334,  333,  557,  557,  541,  459,  446,  232,  245,  245,
+      245,  245,  245,  245,  245,  245,  245,  245,  245,  248,
+      248,  248,  248,  248,  248,  248,  248,  248,  248,  248,
+      335,  335,  451,  248,  248,  248,  248,  248,  541,  433,
+      335,  338,  338,  338,  338,  338,  338,  338,  338,  459,
+      492,  338,  606,  606,  451,  248,  248,  248,  248,  248,
+      248,  251,  251,  251,  251,  251,  251,  251,  251,  251,
+      251,  419,  492,  494,  251,  251,  251,  251,  251,  340,
+
+      340,  340,  340,  340,  340,  340,  340,  370,  370,  370,
+      370,  370,  370,  370,  370,  494,  251,  251,  251,  251,
+      251,  251,  273,  474,  273,  273,  273,  273,  273,  273,
+      273,  273,  343,  474,  343,  343,  343,  343,  343,  343,
+      343,  343,  363,  363,  363,  363,  363,  363,  363,  363,
+      396,  396,  396,  396,  396,  396,  273,  274,  501,  274,
+      274,  274,  274,  274,  274,  274,  274,  429,  429,  429,
+      429,  429,  429,  415,  363,  410,  367,  367,  367,  367,
+      367,  367,  367,  372,  372,  372,  372,  372,  372,  372,
+      372,  274,  280,  280,  280,  280,  280,  280,  280,  280,
+
+      280,  406,  501,  405,  280,  280,  280,  280,  280,  367,
+      378,  378,  378,  378,  378,  378,  378,  378,  389,  389,
+      389,  389,  389,  389,  389,  389,  280,  280,  280,  280,
+      280,  280,  290,  290,  290,  290,  290,  290,  290,  290,
+      290,  290,  290,  293,  293,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  437,  454,  404,  293,  293,  293,
+      293,  293,  381,  437,  381,  381,  381,  381,  381,  381,
+      381,  381,  401,  400,  399,  454,  398,  454,  454,  293,
+      293,  293,  293,  293,  293,  296,  296,  296,  296,  296,
+      296,  296,  296,  296,  296,  438,  499,  532,  296,  296,
+
+      296,  296,  296,  382,  438,  382,  382,  382,  382,  382,
+      382,  382,  382,  483,  483,  483,  483,  483,  483,  532,
+      296,  296,  296,  296,  296,  296,  313,  313,  313,  313,
+      313,  313,  313,  313,  313,  383,  475,  383,  383,  383,
+      383,  383,  383,  383,  383,  384,  475,  384,  384,  384,
+      384,  384,  384,  384,  384,  499,  369,  368,  358,  313,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  387,
+      387,  388,  388,  390,  390,  357,  351,  575,  502,  387,
+      504,  388,  477,  390,  395,  395,  395,  395,  395,  395,
+      395,  395,  477,  314,  315,  315,  315,  315,  315,  315,
+
+      315,  315,  315,  393,  393,  393,  393,  393,  393,  393,
+      393,  575,  397,  393,  397,  397,  397,  397,  397,  397,
+      397,  397,  502,  350,  504,  349,  348,  315,  320,  345,
+      320,  320,  320,  320,  320,  320,  320,  320,  320,  489,
+      344,  534,  320,  320,  320,  320,  320,  416,  489,  416,
+      416,  416,  416,  416,  416,  416,  416,  525,  525,  525,
+      525,  525,  525,  534,  320,  320,  320,  320,  320,  320,
+      323,  323,  323,  323,  323,  323,  323,  323,  323,  326,
+      318,  558,  323,  323,  323,  323,  323,  417,  317,  417,
+      417,  417,  417,  417,  417,  417,  417,  316,  466,  308,
+
+      466,  466,  466,  558,  323,  323,  323,  323,  323,  323,
+      336,  336,  336,  336,  336,  336,  336,  336,  336,  336,
+      336,  339,  339,  339,  339,  339,  339,  339,  339,  339,
+      339,  339,  466,  560,  571,  339,  339,  339,  339,  339,
+      418,  516,  418,  418,  418,  418,  418,  418,  418,  418,
+      307,  516,  409,  303,  302,  560,  571,  339,  339,  339,
+      339,  339,  339,  342,  342,  342,  342,  342,  342,  342,
+      342,  342,  409,  299,  409,  409,  342,  342,  342,  342,
+      342,  422,  422,  422,  422,  422,  422,  422,  422,  657,
+      510,  510,  510,  298,  657,  279,  409,  278,  342,  342,
+
+      342,  342,  342,  342,  365,  365,  365,  365,  365,  365,
+      365,  365,  365,  428,  428,  428,  428,  428,  428,  428,
+      428,  431,  510,  431,  431,  431,  431,  431,  431,  431,
+      431,  582,  582,  582,  582,  582,  582,  365,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  432,  432,  432,
+      432,  432,  432,  432,  432,  434,  517,  434,  434,  434,
+      434,  434,  434,  434,  434,  277,  517,  276,  266,  265,
+      264,  366,  374,  262,  374,  374,  374,  374,  374,  374,
+      374,  374,  374,  377,  519,  377,  377,  377,  377,  377,
+      377,  377,  377,  377,  519,  261,  260,  377,  377,  377,
+
+      377,  377,  435,  259,  435,  435,  435,  435,  435,  435,
+      435,  435,  530,  530,  530,  530,  530,  530,  530,  377,
+      377,  377,  377,  377,  377,  380,  380,  380,  380,  380,
+      380,  380,  380,  380,  258,  257,  256,  380,  380,  380,
+      380,  380,  436,  255,  436,  436,  436,  436,  436,  436,
+      467,  467,  467,  467,  467,  467,  467,  467,  239,  380,
+      380,  380,  380,  380,  380,  391,  391,  391,  391,  391,
+      391,  391,  391,  391,  391,  391,  394,  394,  394,  394,
+      394,  394,  394,  394,  394,  394,  439,  439,  455,  455,
+      394,  394,  394,  394,  394,  238,  439,  237,  561,  561,
+
+      552,  455,  460,  460,  460,  460,  460,  460,  460,  460,
+      552,  561,  394,  394,  394,  394,  394,  394,  411,  236,
+      411,  411,  411,  411,  411,  411,  411,  411,  234,  233,
+      224,  223,  222,  469,  460,  469,  469,  469,  469,  469,
+      469,  469,  469,  471,  221,  471,  471,  471,  471,  471,
+      471,  220,  411,  412,  218,  412,  412,  412,  412,  412,
+      412,  412,  412,  470,  217,  470,  470,  470,  470,  470,
+      470,  470,  470,  476,  476,  476,  476,  476,  476,  476,
+      476,  216,  215,  214,  213,  210,  202,  412,  413,  201,
+      413,  413,  413,  413,  413,  413,  413,  413,  482,  482,
+
+      482,  482,  482,  482,  482,  482,  485,  198,  485,  485,
+      485,  485,  485,  485,  485,  485,  197,  190,  189,  183,
+      180,  179,  413,  414,  178,  414,  414,  414,  414,  414,
+      414,  414,  414,  486,  486,  486,  486,  486,  486,  486,
+      486,  486,  487,  487,  487,  487,  487,  487,  487,  487,
+      487,  177,  176,  174,  173,  172,  171,  414,  424,  170,
+      424,  424,  424,  424,  424,  424,  424,  424,  424,  427,
+      169,  427,  427,  427,  427,  427,  427,  427,  427,  427,
+      168,  167,  162,  427,  427,  427,  427,  427,  488,  488,
+      488,  488,  488,  488,  488,  488,  488,  509,  509,  509,
+
+      509,  509,  509,  509,  509,  427,  427,  427,  427,  427,
+      427,  430,  430,  430,  430,  430,  430,  430,  430,  430,
+      161,  154,  153,  430,  430,  430,  430,  430,  511,  509,
+      511,  511,  511,  511,  511,  511,  511,  511,  152,  150,
+      149,  145,  144,  142,  138,  430,  430,  430,  430,  430,
+      430,  442,  442,  442,  442,  442,  442,  442,  442,  442,
+      442,  462,  131,  462,  462,  462,  462,  462,  462,  462,
+      462,  512,  127,  512,  512,  512,  512,  512,  512,  512,
+      512,  124,  117,  116,  503,  115,  114,  113,  503,  108,
+      503,  503,  107,  105,  503,  462,  463,  104,  463,  463,
+
+      463,  463,  463,  463,  463,  463,  503,  503,  503,  513,
+      100,  513,  513,  513,  513,  513,  513,  513,  513,  505,
+       96,   95,   91,  505,   88,  505,  505,   86,   81,  505,
+      463,  464,   80,  464,  464,  464,  464,  464,  464,  464,
+      464,  505,  505,  505,  518,  518,  518,  518,  518,  518,
+      518,  518,  524,  524,  524,  524,  524,  524,  524,  524,
+       79,   77,   76,   74,   69,  464,  465,   62,  465,  465,
+      465,  465,  465,  465,  465,  465,  526,   55,  526,  526,
+      526,  526,  526,  526,  526,  526,  528,  528,  528,  528,
+      528,  528,  528,  528,  528,   49,   48,   47,   46,   45,
+
+      465,  478,   44,  478,  478,  478,  478,  478,  478,  478,
+      478,  478,  481,   38,  481,  481,  481,  481,  481,  481,
+      481,  481,  481,   37,   36,   35,  481,  481,  481,  481,
+      481,  529,  529,  529,  529,  529,  529,  529,  529,  529,
+      540,  540,  540,  540,  540,  540,  540,  540,  481,  481,
+      481,  481,  481,  481,  484,  484,  484,  484,  484,  484,
+      484,  484,   33,   29,   23,   17,  484,  484,  484,  484,
+      484,  544,  540,  544,  544,  544,  544,  544,  544,  545,
+      545,  545,  545,  545,  545,  545,  545,   15,  484,  484,
+      484,  484,  484,  484,  506,   14,  506,  506,  506,  506,
+
+      506,  506,  506,  506,  547,  544,  547,  547,  547,  547,
+      547,  547,  547,  547,  548,   13,  548,  548,  548,  548,
+      548,  548,  548,  548,    0,    0,    0,    0,  506,  507,
+        0,  507,  507,  507,  507,  507,  507,  507,  507,  549,
+        0,  549,  549,  549,  549,  549,  549,  555,    0,  555,
+      555,  555,  555,  555,  555,  555,  555,    0,    0,    0,
+        0,    0,    0,  507,  508,    0,  508,  508,  508,  508,
+      508,  508,  508,  508,  565,  565,  565,  565,  565,  565,
+      565,  565,  566,  566,  566,  566,  566,  566,  566,  566,
+      567,  567,  567,  567,  567,  567,  567,  567,  508,  520,
+
+        0,  520,  520,  520,  520,  520,  520,  520,  520,  520,
+      523,    0,  523,  523,  523,  523,  523,  523,  523,  523,
+        0,    0,    0,    0,  523,  523,  523,  523,  523,    0,
+      574,  574,  574,  574,  574,  574,  574,  574,  578,    0,
+      578,  578,  578,  578,  578,  578,  523,  523,  523,  523,
+      523,  523,  542,    0,  542,  542,  542,  542,  542,  542,
+      542,  542,  574,  580,  580,  580,  580,  580,  580,  580,
+      580,    0,  578,  581,  581,  581,  581,  581,  581,  581,
+      581,    0,    0,    0,    0,    0,  542,  543,    0,  543,
+      543,  543,  543,  543,  543,  543,  543,    0,    0,    0,
+
+      586,  586,  586,  586,  586,  586,  586,  586,  587,  587,
+      587,  587,  587,  587,  587,  587,    0,    0,    0,    0,
+        0,  543,  562,    0,  562,  562,  562,  562,  562,  562,
+      562,  562,  586,    0,    0,    0,    0,    0,    0,    0,
+      587,  588,  588,  588,  588,  588,  588,  588,  588,    0,
+      591,  591,  591,  591,  591,  591,  562,  563,    0,  563,
+      563,  563,  563,  563,  563,  563,  563,    0,    0,    0,
+        0,    0,    0,  588,  590,  590,  590,  590,  590,  590,
+      590,  590,  591,    0,    0,    0,    0,    0,    0,    0,
+        0,  563,  564,    0,  564,  564,  564,  564,  564,  564,
+
+      564,  564,    0,    0,    0,    0,  590,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      553,    0,    0,    0,    0,    0,    0,    0,  552,  555,
-      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
-      555,  555,  555,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  557,  557,  557,
-      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
-      557,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  559,    0,    0,    0,  559,
-        0,  559,  559,  559,    0,    0,  559,  559,  559,  560,
-      560,    0,  560,  560,  560,  560,  560,  560,  560,  560,
-
-      560,  560,  560,  561,  561,  561,  561,  561,  561,  561,
-      561,  561,  561,  561,  561,  561,  561,  562,    0,    0,
-        0,  562,    0,  562,  562,  562,  562,    0,  562,  562,
-      562,  563,    0,    0,    0,  563,    0,  563,  563,  563,
-        0,    0,  563,  563,  563,  564,    0,    0,  564,  564,
-      564,  564,  564,  564,    0,    0,  564,  564,  564,  565,
-      565,    0,    0,    0,  565,  566,    0,    0,  566,  566,
-      566,  566,  566,  566,    0,    0,  566,  566,  566,  567,
-        0,    0,  567,  567,  567,  567,  567,  567,    0,  567,
-        0,  567,  567,  569,    0,    0,  569,    0,  569,  569,
-
-      569,  569,  569,    0,  569,  569,  569,  570,  570,  570,
-      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
-      570,  571,  571,    0,  571,    0,  571,  571,  571,  571,
-      571,  571,  571,  571,  571,  572,  572,    0,  572,  572,
-      572,  572,  572,  572,  572,  572,  572,  572,  572,  573,
-      573,  573,  573,  573,  573,  573,  573,  573,  573,  573,
-      573,  573,  573,  574,  574,    0,  574,  574,  574,  574,
-      574,  574,  574,  574,  574,  574,  574,  575,    0,    0,
-        0,  575,    0,  575,  575,  575,    0,    0,  575,  575,
-      575,  576,    0,    0,  576,  576,  576,  576,  576,  576,
-
-        0,    0,  576,  576,  576,  577,  577,    0,    0,    0,
-      577,  578,  578,  578,    0,    0,    0,  578,  579,    0,
-        0,  579,  579,  579,  579,  579,  579,    0,    0,  579,
-      579,  579,  580,  580,  580,  580,  580,  580,  580,  580,
-      580,  580,  580,  580,  580,  580,  581,  581,    0,    0,
-        0,  581,  582,  582,  582,    0,    0,    0,  582,  583,
-      583,    0,    0,    0,  583,  584,  584,    0,    0,    0,
-      584,  585,  585,    0,    0,    0,  585,  586,  586,  586,
-        0,    0,    0,  586,  587,  587,    0,    0,    0,  587,
-      588,  588,    0,    0,    0,  588,  589,  589,    0,    0,
-
-        0,  589,  590,  590,  590,    0,    0,    0,  590,  591,
-      591,  591,  591,    0,    0,    0,  591,  592,  592,    0,
-        0,    0,  592,  593,  593,    0,    0,    0,  593,  594,
-      594,    0,    0,    0,  594,  595,  595,  595,    0,    0,
-        0,  595,  596,  596,  596,  596,    0,    0,    0,  596,
-      597,  597,    0,    0,    0,  597,  598,  598,    0,    0,
-        0,  598,  599,  599,  599,    0,    0,    0,  599,  600,
-      600,  600,  600,    0,    0,    0,  600,  601,  601,    0,
-        0,    0,  601,  602,    0,  602,  602,    0,    0,    0,
-      602,  603,  603,  603,    0,    0,    0,  603,  604,  604,
-
-      604,  604,    0,    0,    0,  604,  605,  605,    0,    0,
-        0,  605,  606,    0,  606,  606,    0,    0,    0,  606,
-      607,  607,  607,    0,    0,    0,  607,  608,  608,  608,
-        0,    0,    0,    0,  608,  609,    0,    0,  609,  609,
-        0,  609,  609,  609,    0,    0,  609,  609,  609,  610,
-        0,    0,  610,  610,    0,  610,  610,  610,    0,    0,
-      610,  610,  610,  611,  611,    0,    0,    0,  611,  612,
-        0,  612,  612,    0,    0,    0,  612,  613,  613,    0,
-        0,    0,    0,  613,  614,  614,  614,  614,  614,  614,
-      614,  614,  614,  614,  614,  614,  614,  614,  615,  615,
-
-        0,    0,    0,  615,  616,    0,  616,  616,    0,    0,
-        0,  616,  617,  617,    0,    0,    0,  617,  618,    0,
-      618,    0,    0,    0,    0,  618,  620,  620,  620,  620,
-      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
-
-      554,  554,  554
+        0,    0,    0,    0,    0,    0,  564,  576,    0,  576,
+      576,  576,  576,  576,  576,  576,  576,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  576,  577,    0,  577,  577,  577,  577,  577,  577,
+      577,  577,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  577,  593,  593,  593,
+
+      593,  593,  593,  593,  593,  593,  593,  593,  593,  593,
+      593,  594,  594,  594,  594,  594,  594,  594,  594,  594,
+      594,  594,  594,  594,  594,  595,  595,  595,  595,  595,
+      595,  595,  595,  595,  595,  595,  595,  595,  595,  596,
+      596,  596,  596,  596,  596,  596,  596,  596,  596,  596,
+      596,  596,  596,  597,    0,    0,    0,  597,    0,  597,
+      597,  597,    0,    0,  597,  597,  597,  598,  598,    0,
+      598,  598,  598,  598,  598,  598,  598,  598,  598,  598,
+      598,  599,  599,  599,  599,  599,  599,  599,  599,  599,
+      599,  599,  599,  599,  599,  600,    0,    0,    0,  600,
+
+        0,  600,  600,  600,  600,    0,  600,  600,  600,  601,
+        0,    0,    0,  601,    0,  601,  601,  601,    0,    0,
+      601,  601,  601,  602,    0,    0,  602,  602,  602,  602,
+      602,  602,    0,    0,  602,  602,  602,  603,  603,    0,
+        0,    0,  603,  604,    0,    0,  604,  604,  604,  604,
+      604,  604,    0,    0,  604,  604,  604,  605,    0,    0,
+      605,  605,  605,  605,  605,  605,    0,  605,    0,  605,
+      605,  607,    0,    0,  607,    0,  607,  607,  607,  607,
+      607,    0,  607,  607,  607,  608,  608,  608,  608,  608,
+      608,  608,  608,  608,  608,  608,  608,  608,  608,  609,
+
+      609,    0,  609,    0,  609,  609,  609,  609,  609,  609,
+      609,  609,  609,  610,  610,    0,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  610,  610,  611,  611,  611,
+      611,  611,  611,  611,  611,  611,  611,  611,  611,  611,
+      611,  612,  612,    0,  612,  612,  612,  612,  612,  612,
+      612,  612,  612,  612,  612,  613,    0,    0,    0,  613,
+        0,  613,  613,  613,    0,    0,  613,  613,  613,  614,
+        0,    0,  614,  614,  614,  614,  614,  614,    0,    0,
+      614,  614,  614,  615,  615,    0,    0,    0,  615,  616,
+      616,  616,    0,    0,    0,  616,  617,    0,    0,  617,
+
+      617,  617,  617,  617,  617,    0,    0,  617,  617,  617,
+      618,  618,  618,  618,  618,  618,  618,  618,  618,  618,
+      618,  618,  618,  618,  619,  619,    0,    0,    0,  619,
+      620,  620,  620,    0,    0,    0,  620,  621,  621,    0,
+        0,    0,  621,  622,  622,    0,    0,    0,  622,  623,
+      623,    0,    0,    0,  623,  624,  624,  624,    0,    0,
+        0,  624,  625,  625,    0,    0,    0,  625,  626,  626,
+        0,    0,    0,  626,  627,  627,    0,    0,    0,  627,
+      628,  628,  628,    0,    0,    0,  628,  629,  629,  629,
+      629,    0,    0,    0,  629,  630,  630,    0,    0,    0,
+
+      630,  631,  631,    0,    0,    0,  631,  632,  632,    0,
+        0,    0,  632,  633,  633,  633,    0,    0,    0,  633,
+      634,  634,  634,  634,    0,    0,    0,  634,  635,  635,
+        0,    0,    0,  635,  636,  636,    0,    0,    0,  636,
+      637,  637,  637,    0,    0,    0,  637,  638,  638,  638,
+      638,    0,    0,    0,  638,  639,  639,    0,    0,    0,
+      639,  640,    0,  640,  640,    0,    0,    0,  640,  641,
+      641,  641,    0,    0,    0,  641,  642,  642,  642,  642,
+        0,    0,    0,  642,  643,  643,    0,    0,    0,  643,
+      644,    0,  644,  644,    0,    0,    0,  644,  645,  645,
+
+      645,    0,    0,    0,  645,  646,  646,  646,    0,    0,
+        0,    0,  646,  647,    0,    0,  647,  647,    0,  647,
+      647,  647,    0,    0,  647,  647,  647,  648,    0,    0,
+      648,  648,    0,  648,  648,  648,    0,    0,  648,  648,
+      648,  649,  649,    0,    0,    0,  649,  650,    0,  650,
+      650,    0,    0,    0,  650,  651,  651,    0,    0,    0,
+        0,  651,  652,  652,  652,  652,  652,  652,  652,  652,
+      652,  652,  652,  652,  652,  652,  653,  653,    0,    0,
+        0,  653,  654,    0,  654,  654,    0,    0,    0,  654,
+      655,  655,    0,    0,    0,  655,  656,    0,  656,    0,
+
+        0,    0,    0,  656,  658,  658,  658,  658,  658,  658,
+      658,  658,  658,  658,  658,  658,  658,  658,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
+      592,  592,  592,  592
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1471,7 +1500,7 @@ extern void yyerror               __P((const char *));
 
 #define INSTR 5
 
-#line 1475 "lex.yy.c"
+#line 1504 "lex.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1627,7 +1656,7 @@ YY_DECL
 
 #line 127 "toke.l"
 
-#line 1631 "lex.yy.c"
+#line 1660 "lex.yy.c"
 
        if ( yy_init )
                {
@@ -1679,13 +1708,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 555 )
+                               if ( yy_current_state >= 593 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 3541 );
+               while ( yy_base[yy_current_state] != 3619 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -2005,6 +2034,38 @@ YY_RULE_SETUP
 case 27:
 YY_RULE_SETUP
 #line 341 "toke.l"
+{
+                               LEXTRACE("LOG_OUTPUT ");
+                               return(LOG_OUTPUT);
+                       }
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 346 "toke.l"
+{
+                               LEXTRACE("NOLOG_OUTPUT ");
+                               return(NOLOG_OUTPUT);
+                       }
+       YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 351 "toke.l"
+{
+                               LEXTRACE("LOG_INPUT ");
+                               return(LOG_INPUT);
+                       }
+       YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 356 "toke.l"
+{
+                               LEXTRACE("NOLOG_INPUT ");
+                               return(NOLOG_INPUT);
+                       }
+       YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 361 "toke.l"
 {
                            /* netgroup */
                            if (!fill(yytext, yyleng))
@@ -2013,9 +2074,9 @@ YY_RULE_SETUP
                            return(NETGROUP);
                        }
        YY_BREAK
-case 28:
+case 32:
 YY_RULE_SETUP
-#line 349 "toke.l"
+#line 369 "toke.l"
 {
                            /* UN*X group */
                            if (!fill(yytext, yyleng))
@@ -2024,9 +2085,9 @@ YY_RULE_SETUP
                            return(USERGROUP);
                        }
        YY_BREAK
-case 29:
+case 33:
 YY_RULE_SETUP
-#line 357 "toke.l"
+#line 377 "toke.l"
 {
                            if (!fill(yytext, yyleng))
                                yyterminate();
@@ -2034,9 +2095,9 @@ YY_RULE_SETUP
                            return(NTWKADDR);
                        }
        YY_BREAK
-case 30:
+case 34:
 YY_RULE_SETUP
-#line 364 "toke.l"
+#line 384 "toke.l"
 {
                            if (!fill(yytext, yyleng))
                                yyterminate();
@@ -2044,9 +2105,9 @@ YY_RULE_SETUP
                            return(NTWKADDR);
                        }
        YY_BREAK
-case 31:
+case 35:
 YY_RULE_SETUP
-#line 371 "toke.l"
+#line 391 "toke.l"
 {
                            if (!ipv6_valid(yytext)) {
                                LEXTRACE("ERROR ");
@@ -2058,9 +2119,9 @@ YY_RULE_SETUP
                            return(NTWKADDR);
                        }
        YY_BREAK
-case 32:
+case 36:
 YY_RULE_SETUP
-#line 382 "toke.l"
+#line 402 "toke.l"
 {
                            if (!ipv6_valid(yytext)) {
                                LEXTRACE("ERROR ");
@@ -2072,9 +2133,9 @@ YY_RULE_SETUP
                            return(NTWKADDR);
                        }
        YY_BREAK
-case 33:
+case 37:
 YY_RULE_SETUP
-#line 393 "toke.l"
+#line 413 "toke.l"
 {
                            if (strcmp(yytext, "ALL") == 0) {
                                LEXTRACE("ALL ");
@@ -2097,9 +2158,9 @@ YY_RULE_SETUP
                            return(ALIAS);
                        }
        YY_BREAK
-case 34:
+case 38:
 YY_RULE_SETUP
-#line 415 "toke.l"
+#line 435 "toke.l"
 {
                            /* no command args allowed for Defaults!/path */
                            if (!fill_cmnd(yytext, yyleng))
@@ -2108,9 +2169,9 @@ YY_RULE_SETUP
                            return(COMMAND);
                        }
        YY_BREAK
-case 35:
+case 39:
 YY_RULE_SETUP
-#line 423 "toke.l"
+#line 443 "toke.l"
 {
                            BEGIN GOTCMND;
                            LEXTRACE("COMMAND ");
@@ -2118,9 +2179,9 @@ YY_RULE_SETUP
                                yyterminate();
                        }                       /* sudo -e */
        YY_BREAK
-case 36:
+case 40:
 YY_RULE_SETUP
-#line 430 "toke.l"
+#line 450 "toke.l"
 {
                            /* directories can't have args... */
                            if (yytext[yyleng - 1] == '/') {
@@ -2136,9 +2197,9 @@ YY_RULE_SETUP
                            }
                        }                       /* a pathname */
        YY_BREAK
-case 37:
+case 41:
 YY_RULE_SETUP
-#line 445 "toke.l"
+#line 465 "toke.l"
 {
                            /* a quoted user/group name */
                            if (!fill(yytext + 1, yyleng - 2))
@@ -2156,9 +2217,9 @@ YY_RULE_SETUP
                            }
                        }
        YY_BREAK
-case 38:
+case 42:
 YY_RULE_SETUP
-#line 462 "toke.l"
+#line 482 "toke.l"
 {
                            /* a word */
                            if (!fill(yytext, yyleng))
@@ -2167,57 +2228,57 @@ YY_RULE_SETUP
                            return(WORD);
                        }
        YY_BREAK
-case 39:
+case 43:
 YY_RULE_SETUP
-#line 470 "toke.l"
+#line 490 "toke.l"
 {
                            LEXTRACE("( ");
                            return ('(');
                        }
        YY_BREAK
-case 40:
+case 44:
 YY_RULE_SETUP
-#line 475 "toke.l"
+#line 495 "toke.l"
 {
                            LEXTRACE(") ");
                            return(')');
                        }
        YY_BREAK
-case 41:
+case 45:
 YY_RULE_SETUP
-#line 480 "toke.l"
+#line 500 "toke.l"
 {
                            LEXTRACE(", ");
                            return(',');
                        }                       /* return ',' */
        YY_BREAK
-case 42:
+case 46:
 YY_RULE_SETUP
-#line 485 "toke.l"
+#line 505 "toke.l"
 {
                            LEXTRACE("= ");
                            return('=');
                        }                       /* return '=' */
        YY_BREAK
-case 43:
+case 47:
 YY_RULE_SETUP
-#line 490 "toke.l"
+#line 510 "toke.l"
 {
                            LEXTRACE(": ");
                            return(':');
                        }                       /* return ':' */
        YY_BREAK
-case 44:
+case 48:
 YY_RULE_SETUP
-#line 495 "toke.l"
+#line 515 "toke.l"
 {
                            if (yyleng % 2 == 1)
                                return('!');    /* return '!' */
                        }
        YY_BREAK
-case 45:
+case 49:
 YY_RULE_SETUP
-#line 500 "toke.l"
+#line 520 "toke.l"
 {
                            BEGIN INITIAL;
                            ++sudolineno;
@@ -2225,25 +2286,25 @@ YY_RULE_SETUP
                            return(COMMENT);
                        }                       /* return newline */
        YY_BREAK
-case 46:
+case 50:
 YY_RULE_SETUP
-#line 507 "toke.l"
+#line 527 "toke.l"
 {                      /* throw away space/tabs */
                            sawspace = TRUE;    /* but remember for fill_args */
                        }
        YY_BREAK
-case 47:
+case 51:
 YY_RULE_SETUP
-#line 511 "toke.l"
+#line 531 "toke.l"
 {
                            sawspace = TRUE;    /* remember for fill_args */
                            ++sudolineno;
                            LEXTRACE("\n\t");
                        }                       /* throw away EOL after \ */
        YY_BREAK
-case 48:
+case 52:
 YY_RULE_SETUP
-#line 517 "toke.l"
+#line 537 "toke.l"
 {
                            BEGIN INITIAL;
                            ++sudolineno;
@@ -2251,9 +2312,9 @@ YY_RULE_SETUP
                            return(COMMENT);
                        }                       /* comment, not uid/gid */
        YY_BREAK
-case 49:
+case 53:
 YY_RULE_SETUP
-#line 524 "toke.l"
+#line 544 "toke.l"
 {
                            LEXTRACE("ERROR ");
                            return(ERROR);
@@ -2265,7 +2326,7 @@ case YY_STATE_EOF(GOTCMND):
 case YY_STATE_EOF(STARTDEFS):
 case YY_STATE_EOF(INDEFS):
 case YY_STATE_EOF(INSTR):
-#line 529 "toke.l"
+#line 549 "toke.l"
 {
                            if (YY_START != INITIAL) {
                                BEGIN INITIAL;
@@ -2276,12 +2337,12 @@ case YY_STATE_EOF(INSTR):
                                yyterminate();
                        }
        YY_BREAK
-case 50:
+case 54:
 YY_RULE_SETUP
-#line 539 "toke.l"
+#line 559 "toke.l"
 ECHO;
        YY_BREAK
-#line 2285 "lex.yy.c"
+#line 2346 "lex.yy.c"
 
        case YY_END_OF_BUFFER:
                {
@@ -2572,7 +2633,7 @@ static yy_state_type yy_get_previous_state()
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 555 )
+                       if ( yy_current_state >= 593 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2607,11 +2668,11 @@ yy_state_type yy_current_state;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 555 )
+               if ( yy_current_state >= 593 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 554);
+       yy_is_jam = (yy_current_state == 592);
 
        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -2662,6 +2723,7 @@ register char *yy_bp;
 #endif /* ifndef YY_NO_UNPUT */
 
 
+#ifndef YY_NO_INPUT
 #ifdef __cplusplus
 static int yyinput()
 #else
@@ -2734,6 +2796,7 @@ static int input()
 
        return c;
        }
+#endif /* ifndef YY_NO_INPUT */
 
 
 #ifdef YY_USE_PROTOS
@@ -3170,7 +3233,7 @@ int main()
        return 0;
        }
 #endif
-#line 539 "toke.l"
+#line 559 "toke.l"
 
 static unsigned char
 hexchar(s)
diff --git a/toke.l b/toke.l
index ce1fd4c177370c868c3980338931ac8274337ac6..263693e3519305e2f5b809ca5638b32cc3e42d7a 100644 (file)
--- a/toke.l
+++ b/toke.l
@@ -338,6 +338,26 @@ NOSETENV[[:blank:]]*:      {
                                return(NOSETENV);
                        }
 
+LOG_OUTPUT[[:blank:]]*:        {
+                               LEXTRACE("LOG_OUTPUT ");
+                               return(LOG_OUTPUT);
+                       }
+
+NOLOG_OUTPUT[[:blank:]]*:      {
+                               LEXTRACE("NOLOG_OUTPUT ");
+                               return(NOLOG_OUTPUT);
+                       }
+
+LOG_INPUT[[:blank:]]*: {
+                               LEXTRACE("LOG_INPUT ");
+                               return(LOG_INPUT);
+                       }
+
+NOLOG_INPUT[[:blank:]]*:       {
+                               LEXTRACE("NOLOG_INPUT ");
+                               return(NOLOG_INPUT);
+                       }
+
 \+{WORD}               {
                            /* netgroup */
                            if (!fill(yytext, yyleng))